Change #21
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: | |
| - master | |
| release: | |
| types: | |
| - published | |
| permissions: | |
| contents: read | |
| packages: write | |
| env: | |
| BACKEND_IMAGE: ghcr.io/vzbot3d/vzbot-discordbot | |
| FRONTEND_IMAGE: ghcr.io/vzbot3d/vzbot-nuxt | |
| jobs: | |
| detect-changes: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| backend: ${{ github.event_name == 'release' || steps.filter.outputs.backend }} | |
| frontend: ${{ github.event_name == 'release' || steps.filter.outputs.frontend }} | |
| backend_tags: ${{ steps.tags.outputs.backend_tags }} | |
| frontend_tags: ${{ steps.tags.outputs.frontend_tags }} | |
| deploy_env: ${{ steps.tags.outputs.deploy_env }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Detect changed paths | |
| uses: dorny/paths-filter@v3 | |
| id: filter | |
| with: | |
| filters: | | |
| backend: | |
| - 'backend/**' | |
| frontend: | |
| - 'frontend/**' | |
| - name: Determine image tags and deploy environment | |
| id: tags | |
| run: | | |
| VERSION=${{ github.sha }} | |
| echo "backend_tags=${{ env.BACKEND_IMAGE }}:${VERSION},${{ env.BACKEND_IMAGE }}:latest" >> $GITHUB_OUTPUT | |
| echo "frontend_tags=${{ env.FRONTEND_IMAGE }}:${VERSION},${{ env.FRONTEND_IMAGE }}:latest" >> $GITHUB_OUTPUT | |
| echo "deploy_env=production" >> $GITHUB_OUTPUT | |
| build-backend: | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.backend == 'true' | |
| uses: ./.github/workflows/build-backend.yml | |
| with: | |
| image_tags: ${{ needs.detect-changes.outputs.backend_tags }} | |
| deploy_env: ${{ needs.detect-changes.outputs.deploy_env }} | |
| secrets: inherit | |
| build-frontend: | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.frontend == 'true' | |
| uses: ./.github/workflows/build-frontend.yml | |
| with: | |
| image_tags: ${{ needs.detect-changes.outputs.frontend_tags }} | |
| secrets: inherit | |
| deploy: | |
| runs-on: ubuntu-latest | |
| needs: [detect-changes, build-backend, build-frontend] | |
| if: always() && !failure() && !cancelled() | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Generate .env file | |
| run: | | |
| cat <<'DOTENV' > infra/.env | |
| VZ_MODE=DEPLOY | |
| VZ_TOKEN=${{ secrets.VZ_TOKEN }} | |
| VZ_LOG_CHANNEL=${{ vars.VZ_LOG_CHANNEL }} | |
| VZ_ADMIN_ROLE=${{ vars.VZ_ADMIN_ROLE }} | |
| VZ_TEAM_ROLE=${{ vars.VZ_TEAM_ROLE }} | |
| VZ_MODERATOR_ROLE=${{ vars.VZ_MODERATOR_ROLE }} | |
| VZ_CONTRIBUTOR_ROLE=${{ vars.VZ_CONTRIBUTOR_ROLE }} | |
| VZ_OWNERS_ROLE=${{ vars.VZ_OWNERS_ROLE }} | |
| VZ_SERIAL_CATEGORY=${{ vars.VZ_SERIAL_CATEGORY }} | |
| VZ_SERIAL_ANNOUNCEMENT_CHANNEL=${{ vars.VZ_SERIAL_ANNOUNCEMENT_CHANNEL }} | |
| VZ_SERIAL_BASE_PLATE_LOCATION=/data/serial-base-plates | |
| VZ_SERIAL_NUMBER_PLATES_LOCATION=/data/serial-number-plates | |
| VZ_SERIAL_BASE_PLATE_HOST_PATH=${{ vars.VZ_SERIAL_BASE_PLATE_HOST_PATH }} | |
| VZ_SERIAL_NUMBER_PLATES_HOST_PATH=${{ vars.VZ_SERIAL_NUMBER_PLATES_HOST_PATH }} | |
| VZ_WEBSITE_URL=${{ vars.VZ_WEBSITE_URL }} | |
| VZ_DB_USER=${{ secrets.VZ_DB_USER }} | |
| VZ_DB_ROOT_PASSWORD=${{ secrets.VZ_DB_ROOT_PASSWORD }} | |
| VZ_DB_HOST=mariadb | |
| VZ_DB_PASSWORD=${{ secrets.VZ_DB_PASSWORD }} | |
| VZ_DB_DATABASE=${{ secrets.VZ_DB_DATABASE }} | |
| VZ_DB_PORT=3306 | |
| BACKEND_URL=http://bot:8080 | |
| BACKEND_TOKEN=${{ secrets.BACKEND_TOKEN }} | |
| DOTENV | |
| sed -i 's/^ //' infra/.env | |
| - name: Copy infra files to server | |
| uses: appleboy/scp-action@v0.1.7 | |
| with: | |
| host: ${{ secrets.SERVER_HOST }} | |
| username: devin | |
| password: ${{ secrets.SERVER_PASSWORD }} | |
| port: ${{ secrets.SERVER_SSH_PORT }} | |
| source: "infra/docker-compose.yml,infra/deploy.sh,infra/.env" | |
| target: "~" | |
| - name: Deploy on server | |
| uses: appleboy/ssh-action@v1.2.0 | |
| with: | |
| host: ${{ secrets.SERVER_HOST }} | |
| username: devin | |
| password: ${{ secrets.SERVER_PASSWORD }} | |
| port: ${{ secrets.SERVER_SSH_PORT }} | |
| script: | | |
| chmod +x ~/infra/deploy.sh | |
| ~/infra/deploy.sh production |