mirror of
https://github.com/Sudo-JHare/FHIRFLARE-IG-Toolkit.git
synced 2025-09-17 18:35:02 +00:00
379 lines
12 KiB
Batchfile
379 lines
12 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
REM --- Configuration ---
|
|
set REPO_URL_HAPI=https://github.com/hapifhir/hapi-fhir-jpaserver-starter.git
|
|
set REPO_URL_CANDLE=https://github.com/FHIR/fhir-candle.git
|
|
set CLONE_DIR_HAPI=hapi-fhir-jpaserver
|
|
set CLONE_DIR_CANDLE=fhir-candle
|
|
set SOURCE_CONFIG_DIR=hapi-fhir-setup
|
|
set CONFIG_FILE=application.yaml
|
|
|
|
REM --- Define Paths ---
|
|
set SOURCE_CONFIG_PATH=..\%SOURCE_CONFIG_DIR%\target\classes\%CONFIG_FILE%
|
|
set DEST_CONFIG_PATH=%CLONE_DIR_HAPI%\target\classes\%CONFIG_FILE%
|
|
|
|
REM --- NEW: Define a variable for the custom FHIR URL and server type ---
|
|
set "CUSTOM_FHIR_URL_VAL="
|
|
set "SERVER_TYPE="
|
|
set "CANDLE_FHIR_VERSION="
|
|
|
|
REM === MODIFIED: Prompt for Installation Mode ===
|
|
:GetModeChoice
|
|
SET "APP_MODE=" REM Clear the variable first
|
|
echo.
|
|
echo Select Installation Mode:
|
|
echo 1. Lite (Excludes local HAPI FHIR Server - No Git/Maven/Dotnet needed)
|
|
echo 2. Custom URL (Uses a custom FHIR Server - No Git/Maven/Dotnet needed)
|
|
echo 3. Hapi (Includes local HAPI FHIR Server - Requires Git & Maven)
|
|
echo 4. Candle (Includes local FHIR Candle Server - Requires Git & Dotnet)
|
|
CHOICE /C 1234 /N /M "Enter your choice (1, 2, 3, or 4):"
|
|
|
|
IF ERRORLEVEL 4 (
|
|
SET APP_MODE=standalone
|
|
SET SERVER_TYPE=candle
|
|
goto :GetCandleFhirVersion
|
|
)
|
|
IF ERRORLEVEL 3 (
|
|
SET APP_MODE=standalone
|
|
SET SERVER_TYPE=hapi
|
|
goto :ModeSet
|
|
)
|
|
IF ERRORLEVEL 2 (
|
|
SET APP_MODE=standalone
|
|
goto :GetCustomUrl
|
|
)
|
|
IF ERRORLEVEL 1 (
|
|
SET APP_MODE=lite
|
|
goto :ModeSet
|
|
)
|
|
|
|
REM If somehow neither was chosen (e.g., Ctrl+C), loop back
|
|
echo Invalid input. Please try again.
|
|
goto :GetModeChoice
|
|
|
|
:GetCustomUrl
|
|
set "CONFIRMED_URL="
|
|
:PromptUrlLoop
|
|
echo.
|
|
set /p "CUSTOM_URL_INPUT=Please enter the custom FHIR server URL: "
|
|
echo.
|
|
echo You entered: !CUSTOM_URL_INPUT!
|
|
set /p "CONFIRM_URL=Is this URL correct? (Y/N): "
|
|
if /i "!CONFIRM_URL!" EQU "Y" (
|
|
set "CONFIRMED_URL=!CUSTOM_URL_INPUT!"
|
|
goto :ConfirmUrlLoop
|
|
) else (
|
|
goto :PromptUrlLoop
|
|
)
|
|
:ConfirmUrlLoop
|
|
echo.
|
|
echo Please re-enter the URL to confirm it is correct:
|
|
set /p "CUSTOM_URL_INPUT=Re-enter URL: "
|
|
if /i "!CUSTOM_URL_INPUT!" EQU "!CONFIRMED_URL!" (
|
|
set "CUSTOM_FHIR_URL_VAL=!CUSTOM_URL_INPUT!"
|
|
echo.
|
|
echo Custom URL confirmed: !CUSTOM_FHIR_URL_VAL!
|
|
goto :ModeSet
|
|
) else (
|
|
echo.
|
|
echo URLs do not match. Please try again.
|
|
goto :PromptUrlLoop
|
|
)
|
|
|
|
:GetCandleFhirVersion
|
|
echo.
|
|
echo Select the FHIR version for the Candle server:
|
|
echo 1. R4 (4.0)
|
|
echo 2. R4B (4.3)
|
|
echo 3. R5 (5.0)
|
|
CHOICE /C 123 /N /M "Enter your choice (1, 2, or 3):"
|
|
IF ERRORLEVEL 3 (
|
|
SET CANDLE_FHIR_VERSION=r5
|
|
goto :ModeSet
|
|
)
|
|
IF ERRORLEVEL 2 (
|
|
SET CANDLE_FHIR_VERSION=r4b
|
|
goto :ModeSet
|
|
)
|
|
IF ERRORLEVEL 1 (
|
|
SET CANDLE_FHIR_VERSION=r4
|
|
goto :ModeSet
|
|
)
|
|
echo Invalid input. Please try again.
|
|
goto :GetCandleFhirVersion
|
|
|
|
:ModeSet
|
|
IF "%APP_MODE%"=="" (
|
|
echo Invalid choice detected after checks. Exiting.
|
|
goto :eof
|
|
)
|
|
echo Selected Mode: %APP_MODE%
|
|
echo Server Type: %SERVER_TYPE%
|
|
echo.
|
|
REM === END MODIFICATION ===
|
|
|
|
|
|
REM === Conditionally Execute Server Setup ===
|
|
IF "%SERVER_TYPE%"=="hapi" (
|
|
echo Running Hapi server setup...
|
|
echo.
|
|
|
|
REM --- Step 0: Clean up previous clone (optional) ---
|
|
echo Checking for existing directory: %CLONE_DIR_HAPI%
|
|
if exist "%CLONE_DIR_HAPI%" (
|
|
echo Found existing directory, removing it...
|
|
rmdir /s /q "%CLONE_DIR_HAPI%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to remove existing directory: %CLONE_DIR_HAPI%
|
|
goto :error
|
|
)
|
|
echo Existing directory removed.
|
|
) else (
|
|
echo Directory does not exist, proceeding with clone.
|
|
)
|
|
echo.
|
|
|
|
REM --- Step 1: Clone the HAPI FHIR server repository ---
|
|
echo Cloning repository: %REPO_URL_HAPI% into %CLONE_DIR_HAPI%...
|
|
git clone "%REPO_URL_HAPI%" "%CLONE_DIR_HAPI%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to clone repository. Check Git installation and network connection.
|
|
goto :error
|
|
)
|
|
echo Repository cloned successfully.
|
|
echo.
|
|
|
|
REM --- Step 2: Navigate into the cloned directory ---
|
|
echo Changing directory to %CLONE_DIR_HAPI%...
|
|
cd "%CLONE_DIR_HAPI%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to change directory to %CLONE_DIR_HAPI%.
|
|
goto :error
|
|
)
|
|
echo Current directory: %CD%
|
|
echo.
|
|
|
|
REM --- Step 3: Build the HAPI server using Maven ---
|
|
echo ===> "Starting Maven build (Step 3)...""
|
|
cmd /c "mvn clean package -DskipTests=true -Pboot"
|
|
echo ===> Maven command finished. Checking error level...
|
|
if errorlevel 1 (
|
|
echo ERROR: Maven build failed or cmd /c failed
|
|
cd ..
|
|
goto :error
|
|
)
|
|
echo Maven build completed successfully. ErrorLevel: %errorlevel%
|
|
echo.
|
|
|
|
REM --- Step 4: Copy the configuration file ---
|
|
echo ===> "Starting file copy (Step 4)..."
|
|
echo Copying configuration file...
|
|
echo Source: %SOURCE_CONFIG_PATH%
|
|
echo Destination: target\classes\%CONFIG_FILE%
|
|
xcopy "%SOURCE_CONFIG_PATH%" "target\classes\" /Y /I
|
|
echo ===> xcopy command finished. Checking error level...
|
|
if errorlevel 1 (
|
|
echo WARNING: Failed to copy configuration file. Check if the source file exists.
|
|
echo The script will continue, but the server might use default configuration.
|
|
) else (
|
|
echo Configuration file copied successfully. ErrorLevel: %errorlevel%
|
|
)
|
|
echo.
|
|
|
|
REM --- Step 5: Navigate back to the parent directory ---
|
|
echo ===> "Changing directory back (Step 5)..."
|
|
cd ..
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to change back to the parent directory. ErrorLevel: %errorlevel%
|
|
goto :error
|
|
)
|
|
echo Current directory: %CD%
|
|
echo.
|
|
|
|
) ELSE IF "%SERVER_TYPE%"=="candle" (
|
|
echo Running FHIR Candle server setup...
|
|
echo.
|
|
|
|
REM --- Step 0: Clean up previous clone (optional) ---
|
|
echo Checking for existing directory: %CLONE_DIR_CANDLE%
|
|
if exist "%CLONE_DIR_CANDLE%" (
|
|
echo Found existing directory, removing it...
|
|
rmdir /s /q "%CLONE_DIR_CANDLE%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to remove existing directory: %CLONE_DIR_CANDLE%
|
|
goto :error
|
|
)
|
|
echo Existing directory removed.
|
|
) else (
|
|
echo Directory does not exist, proceeding with clone.
|
|
)
|
|
echo.
|
|
|
|
REM --- Step 1: Clone the FHIR Candle server repository ---
|
|
echo Cloning repository: %REPO_URL_CANDLE% into %CLONE_DIR_CANDLE%...
|
|
git clone "%REPO_URL_CANDLE%" "%CLONE_DIR_CANDLE%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to clone repository. Check Git and Dotnet installation and network connection.
|
|
goto :error
|
|
)
|
|
echo Repository cloned successfully.
|
|
echo.
|
|
|
|
REM --- Step 2: Navigate into the cloned directory ---
|
|
echo Changing directory to %CLONE_DIR_CANDLE%...
|
|
cd "%CLONE_DIR_CANDLE%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to change directory to %CLONE_DIR_CANDLE%.
|
|
goto :error
|
|
)
|
|
echo Current directory: %CD%
|
|
echo.
|
|
|
|
REM --- Step 3: Build the FHIR Candle server using Dotnet ---
|
|
echo ===> "Starting Dotnet build (Step 3)...""
|
|
dotnet publish -c Release -f net9.0 -o publish
|
|
echo ===> Dotnet command finished. Checking error level...
|
|
if errorlevel 1 (
|
|
echo ERROR: Dotnet build failed. Check Dotnet SDK installation.
|
|
cd ..
|
|
goto :error
|
|
)
|
|
echo Dotnet build completed successfully. ErrorLevel: %errorlevel%
|
|
echo.
|
|
|
|
REM --- Step 4: Navigate back to the parent directory ---
|
|
echo ===> "Changing directory back (Step 4)..."
|
|
cd ..
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to change back to the parent directory. ErrorLevel: %errorlevel%
|
|
goto :error
|
|
)
|
|
echo Current directory: %CD%
|
|
echo.
|
|
|
|
) ELSE (
|
|
echo Running Lite setup, skipping server build...
|
|
REM Ensure the server directories don't exist in Lite mode
|
|
if exist "%CLONE_DIR_HAPI%" (
|
|
echo Found existing HAPI directory in Lite mode. Removing it to avoid build issues...
|
|
rmdir /s /q "%CLONE_DIR_HAPI%"
|
|
)
|
|
if exist "%CLONE_DIR_CANDLE%" (
|
|
echo Found existing Candle directory in Lite mode. Removing it to avoid build issues...
|
|
rmdir /s /q "%CLONE_DIR_CANDLE%"
|
|
)
|
|
REM Create empty placeholder files to satisfy Dockerfile COPY commands in Lite mode.
|
|
mkdir "%CLONE_DIR_HAPI%\target\classes" 2> nul
|
|
mkdir "%CLONE_DIR_HAPI%\custom" 2> nul
|
|
echo. > "%CLONE_DIR_HAPI%\target\ROOT.war"
|
|
echo. > "%CLONE_DIR_HAPI%\target\classes\application.yaml"
|
|
mkdir "%CLONE_DIR_CANDLE%\publish" 2> nul
|
|
echo. > "%CLONE_DIR_CANDLE%\publish\fhir-candle.dll"
|
|
echo Placeholder files created for Lite mode build.
|
|
echo.
|
|
)
|
|
|
|
REM === MODIFIED: Update docker-compose.yml to set APP_MODE and HAPI_FHIR_URL ===
|
|
echo Updating docker-compose.yml with APP_MODE=%APP_MODE% and HAPI_FHIR_URL...
|
|
(
|
|
echo version: '3.8'
|
|
echo services:
|
|
echo fhirflare:
|
|
echo build:
|
|
echo context: .
|
|
IF "%SERVER_TYPE%"=="hapi" (
|
|
echo dockerfile: Dockerfile.hapi
|
|
) ELSE IF "%SERVER_TYPE%"=="candle" (
|
|
echo dockerfile: Dockerfile.candle
|
|
) ELSE (
|
|
echo dockerfile: Dockerfile.lite
|
|
)
|
|
echo ports:
|
|
IF "%SERVER_TYPE%"=="candle" (
|
|
echo - "5000:5000"
|
|
echo - "5001:5826"
|
|
) ELSE (
|
|
echo - "5000:5000"
|
|
echo - "8080:8080"
|
|
)
|
|
echo volumes:
|
|
echo - ./instance:/app/instance
|
|
echo - ./static/uploads:/app/static/uploads
|
|
IF "%SERVER_TYPE%"=="hapi" (
|
|
echo - ./instance/hapi-h2-data/:/app/h2-data # Keep volume mounts consistent
|
|
)
|
|
echo - ./logs:/app/logs
|
|
IF "%SERVER_TYPE%"=="hapi" (
|
|
echo - ./hapi-fhir-jpaserver/target/ROOT.war:/usr/local/tomcat/webapps/ROOT.war
|
|
echo - ./hapi-fhir-jpaserver/target/classes/application.yaml:/usr/local/tomcat/conf/application.yaml
|
|
) ELSE IF "%SERVER_TYPE%"=="candle" (
|
|
echo - ./fhir-candle/publish/:/app/fhir-candle-publish/
|
|
)
|
|
echo environment:
|
|
echo - FLASK_APP=app.py
|
|
echo - FLASK_ENV=development
|
|
echo - NODE_PATH=/usr/lib/node_modules
|
|
echo - APP_MODE=%APP_MODE%
|
|
echo - APP_BASE_URL=http://localhost:5000
|
|
IF DEFINED CUSTOM_FHIR_URL_VAL (
|
|
echo - HAPI_FHIR_URL=!CUSTOM_FHIR_URL_VAL!
|
|
) ELSE (
|
|
IF "%SERVER_TYPE%"=="candle" (
|
|
echo - HAPI_FHIR_URL=http://localhost:5826/fhir/%CANDLE_FHIR_VERSION%
|
|
echo - ASPNETCORE_URLS=http://0.0.0.0:5826
|
|
) ELSE (
|
|
echo - HAPI_FHIR_URL=http://localhost:8080/fhir
|
|
)
|
|
)
|
|
echo command: supervisord -c /etc/supervisord.conf
|
|
) > docker-compose.yml.tmp
|
|
|
|
REM Check if docker-compose.yml.tmp was created successfully
|
|
if not exist docker-compose.yml.tmp (
|
|
echo ERROR: Failed to create temporary docker-compose file.
|
|
goto :error
|
|
)
|
|
|
|
REM Replace the original docker-compose.yml
|
|
del docker-compose.yml /Q > nul 2>&1
|
|
ren docker-compose.yml.tmp docker-compose.yml
|
|
echo docker-compose.yml updated successfully.
|
|
echo.
|
|
|
|
REM --- Step 6: Build Docker images ---
|
|
echo ===> Starting Docker build (Step 6)...
|
|
docker-compose build --no-cache
|
|
if errorlevel 1 (
|
|
echo ERROR: Docker Compose build failed. Check Docker installation and docker-compose.yml file. ErrorLevel: %errorlevel%
|
|
goto :error
|
|
)
|
|
echo Docker images built successfully. ErrorLevel: %errorlevel%
|
|
echo.
|
|
|
|
REM --- Step 7: Start Docker containers ---
|
|
echo ===> Starting Docker containers (Step 7)...
|
|
docker-compose up -d
|
|
if errorlevel 1 (
|
|
echo ERROR: Docker Compose up failed. Check Docker installation and container configurations. ErrorLevel: %errorlevel%
|
|
goto :error
|
|
)
|
|
echo Docker containers started successfully. ErrorLevel: %errorlevel%
|
|
echo.
|
|
|
|
echo ====================================
|
|
echo Script finished successfully! (Mode: %APP_MODE%)
|
|
echo ====================================
|
|
goto :eof
|
|
|
|
:error
|
|
echo ------------------------------------
|
|
echo An error occurred. Script aborted.
|
|
echo ------------------------------------
|
|
pause
|
|
exit /b 1
|
|
|
|
:eof
|
|
echo Script execution finished.
|
|
pause
|