name: CI on: push: branches: - main pull_request: permissions: actions: read contents: read packages: write env: REGISTRY: ghcr.io IMAGE_PREFIX: ${{ github.repository }} jobs: lint-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: filter: tree:0 fetch-depth: 0 - uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' - run: npm ci - uses: nrwl/nx-set-shas@v4 - run: npx nx affected -t lint test typecheck build-api: runs-on: ubuntu-latest needs: lint-test steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push API image uses: docker/build-push-action@v6 with: context: . file: apps/api/Dockerfile push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/api:latest ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/api:${{ github.sha }} cache-from: type=gha cache-to: type=gha,mode=max build-web: runs-on: ubuntu-latest needs: lint-test steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Web image uses: docker/build-push-action@v6 with: context: . file: apps/web/Dockerfile push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/web:latest ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/web:${{ github.sha }} cache-from: type=gha cache-to: type=gha,mode=max