name: Release on: push: tags: - 'v*' env: REGISTRY: ghcr.io permissions: contents: read packages: write jobs: test: name: Test runs-on: ubuntu-latest defaults: run: working-directory: gateway steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm ci - run: npm run typecheck - run: npm run lint - run: npm run test:run build-and-push: name: Build and Push Docker Image runs-on: ubuntu-latest needs: [test] steps: - uses: actions/checkout@v4 - name: Extract version from tag id: meta run: | VERSION=${GITHUB_REF_NAME#v} SHORT_SHA=$(echo "$GITHUB_SHA" | cut -c1-7) IMAGE_NAME=$(echo "${{ github.repository_owner }}/atauth-gateway" | tr '[:upper:]' '[:lower:]') echo "version=$VERSION" >> "$GITHUB_OUTPUT" echo "short_sha=$SHORT_SHA" >> "$GITHUB_OUTPUT" echo "image_name=$IMAGE_NAME" >> "$GITHUB_OUTPUT" - name: Log in to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up QEMU for multi-platform builds uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push uses: docker/build-push-action@v6 with: context: ./gateway platforms: linux/amd64,linux/arm64 push: true build-args: | BUILD_COMMIT=${{ steps.meta.outputs.short_sha }} tags: | ${{ env.REGISTRY }}/${{ steps.meta.outputs.image_name }}:${{ steps.meta.outputs.version }} ${{ env.REGISTRY }}/${{ steps.meta.outputs.image_name }}:latest cache-from: type=gha cache-to: type=gha,mode=max