name: Deploy Production Server # Only run the workflow when a PR is merged on main and closed on: pull_request: types: - closed branches: - 'master' # Here we check that the PR was correctly merged to main jobs: if_merged: if: github.event.pull_request.merged == true runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17.0.12' distribution: 'graalvm' cache: 'maven' - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '18' cache: 'npm' cache-dependency-path: src/main/webapp/package-lock.json - name: Build frontend run: | echo "${{ vars.VITE_ENV }}" > src/main/webapp/.env cd src/main/webapp npm install npm run build cd ../../.. - name: Inject frontend in backend run: | rm -rf src/main/resources/META-INF/resources mkdir -p src/main/resources/META-INF/ mv src/main/webapp/dist src/main/resources/META-INF/resources - name: Build backend make_pdf tool run: | chmod 740 mvnw cd src/main/pdf_gen ../../../mvnw clean compile assembly:single cd ../../.. - name: Build backend run: | chmod 740 mvnw ./mvnw package -Pnative -DskipTests - name: Copy runner to vps via scp uses: appleboy/scp-action@v0.1.7 # Latest in date when creating the workflow with: host: ${{ secrets.HOST }} username: ${{ secrets.SSH_USER }} port: ${{ secrets.SSH_PORT }} key: ${{ secrets.SSH_KEY }} source: "target/*-runner,src/main/resources/cacerts,src/main/docker/Dockerfile.native,docker-compose.yml,.dockerignore,src/main/pdf_gen/target/pdf_gen-*.jar" target: ${{ secrets.TARGET_DIR }} # Need to create it first on the VPS - name: Re-start ffsaf container uses: appleboy/ssh-action@v1.0.0 with: host: ${{ secrets.HOST }} username: ${{ secrets.SSH_USER }} port: ${{ secrets.SSH_PORT }} key: ${{ secrets.SSH_KEY }} script: | cd ${{ secrets.TARGET_DIR }} docker logs ffsaf > "log/ffsaf_logs_$(date +"%Y-%m-%d_%H-%M-%S").log" 2>&1 docker stop ffsaf docker rm ffsaf docker compose up --build -d ffsaf - name: Check ffsaf container uses: appleboy/ssh-action@v1.0.0 with: host: ${{ secrets.HOST }} username: ${{ secrets.SSH_USER }} port: ${{ secrets.SSH_PORT }} key: ${{ secrets.SSH_KEY }} script: | if docker ps | grep ffsaf; then echo 'Container is running' else echo 'Container is not running' exit 1 # This mark the pipeline as failed fi