diff --git a/.github/workflows/development_pr_validation.yml b/.github/workflows/development_pr_validation.yml new file mode 100644 index 0000000..12a1f40 --- /dev/null +++ b/.github/workflows/development_pr_validation.yml @@ -0,0 +1,37 @@ +name: PR Validator + +on: + pull_request: + types: [ opened, synchronize, reopened ] + branches: + - main + - '*-prod' + +jobs: + validate-jdbc-data-sources: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Verify JDBC Data Sources in persistence.xml + run: | + grep -q '${JDBC_DATASOURCE}' src/main/resources/META-INF/persistence.xml + + validate-compilation: + needs: validate-jdbc-data-sources + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Set up JDK 8 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '8' + + - name: Compile with Maven + run: mvn clean compile diff --git a/.github/workflows/drawer_prod_ci_cd.yml b/.github/workflows/drawer_prod_ci_cd.yml new file mode 100644 index 0000000..8c4b4ba --- /dev/null +++ b/.github/workflows/drawer_prod_ci_cd.yml @@ -0,0 +1,141 @@ +name: Drawer Prod Build & Deployment Pipeline + +on: + push: + branches: + - drawer-prod + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Set up JDK 8 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '8' + + - name: Cache Maven Packages + uses: actions/cache@v4 + with: + path: ~/.m2 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: Update JDBC Data Sources in persistence.xml + run: | + sed -i 's|${JDBC_DATASOURCE}|jdbc/rhdrawer|' src/main/resources/META-INF/persistence.xml + + + - name: Verify JDBC Data Sources in persistence.xml + run: | + grep '' src/main/resources/META-INF/persistence.xml + + - name: Build with Maven + run: mvn clean package -DskipTests + + - name: Archive Build Artifacts + uses: actions/upload-artifact@v4 + with: + name: build-artifacts + path: target/*.war + overwrite: true + + # - name: Run Tests + # run: mvn test + + # deploy: + # needs: build + # runs-on: ubuntu-latest + + # steps: + # - name: Checkout Code + # uses: actions/checkout@v4 + + # - name: Download Build Artifact + # uses: actions/download-artifact@v4 + # with: + # name: build-artifacts + # path: ./ + + # - name: Deploy to Payara + # env: + # SERVER_IP: ${{ secrets.RUHUNU_DRAWER_IP }} + # SERVER_USER: ${{ secrets.RUHUNU_DRAWER_USER }} + # SSH_PRIVATE_KEY: ${{ secrets.RUHUNU_DRAWER_SSH_PRIVATE_KEY }} + # PAYARA_ADMIN_PASS: ${{ secrets.RUHUNU_DRAWER_PAYARA_ADMIN_PASSWORD }} + # run: | + # # Add SSH private key to the SSH agent + # echo "$SSH_PRIVATE_KEY" > private_key.pem + # chmod 600 private_key.pem + + # # Variables + # WAR_NAME="drawer.war" + # WAR_DIR="/home/appuser/app/latest" + # APP_NAME="drawer" + # SUBDOMAIN="rhdrawer" + + # # Ensure deployment directory exists + # ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + # mkdir -p $WAR_DIR + # chown -R appuser:appuser $WAR_DIR + # cd $WAR_DIR + + # # Remove old backup if it exists + # if [ -f $WAR_NAME.old ]; then + # rm $WAR_NAME.old + # fi + + # # If the current WAR file exists, back it up + # if [ -f $WAR_NAME ]; then + # mv $WAR_NAME $WAR_NAME.old + # fi + # " + + # # Copy new WAR file to the server + # rsync -aL --progress -e "ssh -i private_key.pem" ./*.war $SERVER_USER@$SERVER_IP:$WAR_DIR/$WAR_NAME + + # # Set the WAR file permission + # ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + # chown appuser:appuser $WAR_DIR/$WAR_NAME + # " + + # # Deploy the WAR using asadmin + # ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + # echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt + # /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt undeploy $APP_NAME || true + # /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt deploy --force=true --contextroot $APP_NAME $WAR_DIR/$WAR_NAME + # rm /tmp/payara-admin-pass.txt + # " + + # # Validate if the application is running + # ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + # echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt + # if /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt list-applications | grep -q '$APP_NAME'; then + # echo 'Application is running.' + # else + # echo 'Application failed to start.' + # fi + # rm /tmp/payara-admin-pass.txt + # " + + # # Check if the application is reachable + # for i in {1..5}; do + # RESPONSE_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://$SUBDOMAIN.carecode.org/$APP_NAME/) + # if [ "$RESPONSE_CODE" == "200" ]; then + # echo "Application is reachable and healthy." + # break + # elif [ "$i" == "5" ]; then + # echo "Application is not reachable or unhealthy at https://$SUBDOMAIN.carecode.org/$APP_NAME (HTTP $RESPONSE_CODE)" + # break + # fi + # sleep 10 + # done + + # # Cleanup + # rm -f private_key.pem diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 8825bb1..d4f1fb6 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -2,7 +2,7 @@ org.eclipse.persistence.jpa.PersistenceProvider - jdbc/drawer + ${JDBC_DATASOURCE} false