Chaos 820 question descriptions (#821) #2933
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: Docker | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - CHAOS-224-KHAOS-rewrite | |
| env: | |
| ENVIRONMENT: ${{ github.ref_name == 'main' && 'staging' || 'staging' }} | |
| IMAGE_NAME: ${{ github.ref_name == 'main' && 'chaos' || 'chaos-staging' }} | |
| jobs: | |
| build-backend: | |
| name: Build (Backend) | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: staging | |
| url: https://chaos.devsoc.app | |
| permissions: | |
| contents: read | |
| packages: write | |
| services: | |
| postgres: | |
| image: postgres:16 | |
| env: | |
| POSTGRES_USER: postgres | |
| POSTGRES_PASSWORD: password | |
| POSTGRES_DB: chaos | |
| ports: | |
| - 5432:5432 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| token: ${{ github.token }} | |
| - name: Setup cargo cache | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| backend/server/target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: ${{ runner.os }}-cargo- | |
| - name: Setup temporary DB | |
| working-directory: backend | |
| run: | | |
| which sqlx || cargo install sqlx-cli --no-default-features --features native-tls,postgres | |
| echo "DATABASE_URL=postgres://postgres:password@localhost:5432/chaos" >> .env | |
| sqlx migrate run | |
| - name: Generate SQLx files | |
| working-directory: backend/server | |
| run: cargo sqlx prepare | |
| - name: Set up Docker Buildx | |
| id: buildx | |
| uses: docker/setup-buildx-action@master | |
| with: | |
| install: true | |
| - name: Cache Docker layers | |
| uses: actions/cache@v3 | |
| with: | |
| path: /tmp/.buildx-cache | |
| key: ${{ runner.os }}-multi-buildx-${{ github.sha }} | |
| restore-keys: | | |
| ${{ runner.os }}-multi-buildx | |
| - name: Docker Login | |
| uses: docker/login-action@v2.2.0 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ github.token }} | |
| - name: Build production image | |
| uses: docker/build-push-action@v4 | |
| with: | |
| context: backend | |
| builder: ${{ steps.buildx.outputs.name }} | |
| file: backend/Dockerfile | |
| push: true | |
| tags: | | |
| ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-backend:${{ github.sha }} | |
| ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-backend:latest | |
| labels: ${{ steps.meta.outputs.labels }} | |
| cache-from: type=local,src=/tmp/.buildx-cache | |
| cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new | |
| - name: Move cache | |
| run: | | |
| rm -rf /tmp/.buildx-cache | |
| mv /tmp/.buildx-cache-new /tmp/.buildx-cache | |
| build-frontend: | |
| name: Build (Frontend) | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: staging | |
| url: https://chaos.devsoc.app | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v2 | |
| - name: Log into registry ${{ env.REGISTRY }} | |
| uses: docker/login-action@v2 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ github.token }} | |
| - name: Build and push Docker image | |
| uses: docker/build-push-action@v4 | |
| with: | |
| context: frontend-nextjs | |
| platforms: linux/amd64 | |
| file: frontend-nextjs/Dockerfile | |
| push: true | |
| build-args: | | |
| NEXT_PUBLIC_APP_URL=${{ vars.NEXT_PUBLIC_APP_URL }} | |
| NEXT_PUBLIC_API_BASE_URL=${{ vars.NEXT_PUBLIC_API_BASE_URL }} | |
| tags: | | |
| ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-frontend:${{ github.sha }} | |
| ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-frontend:latest | |
| labels: ${{ steps.meta.outputs.labels }} | |
| deploy: | |
| name: Deploy (CD) | |
| runs-on: ubuntu-latest | |
| needs: [build-frontend, build-backend] | |
| concurrency: staging | |
| environment: | |
| name: staging | |
| url: https://chaosstaging.devsoc.app | |
| steps: | |
| - name: Dispatch deployment | |
| uses: devsoc-unsw/deployment-dispatch-action@main | |
| with: | |
| deployment-dispatcher-app-id: ${{ vars.DEPLOYMENT_DISPATCHER_APP_ID }} | |
| deployment-dispatcher-app-private-key: ${{ secrets.DEPLOYMENT_DISPATCHER_APP_PRIVATE_KEY }} | |
| updates: | | |
| ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-frontend=${{ github.sha }} | |
| ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-backend=${{ github.sha }} |