name: Build and Deploy on: push: branches: [main] env: REGISTRY: ghcr.io FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: build-backend: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@v4.2.2 - name: Set image name (lowercase) run: | OWNER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "BACKEND_IMAGE=ghcr.io/${OWNER}/petshop-backend" >> $GITHUB_ENV - name: Log in to GitHub Container Registry uses: docker/login-action@v3.3.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push backend image uses: docker/build-push-action@v6 with: context: ./backend push: true tags: ${{ env.BACKEND_IMAGE }}:latest cache-from: type=gha cache-to: type=gha,mode=max build-frontend: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@v4.2.2 - name: Set image name (lowercase) run: | OWNER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "FRONTEND_IMAGE=ghcr.io/${OWNER}/petshop-web" >> $GITHUB_ENV - name: Log in to GitHub Container Registry uses: docker/login-action@v3.3.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push frontend image uses: docker/build-push-action@v6 with: context: ./web push: true tags: ${{ env.FRONTEND_IMAGE }}:latest no-cache: true deploy: runs-on: ubuntu-latest needs: [build-backend, build-frontend] permissions: contents: read id-token: write steps: - name: Set image names (lowercase) run: | OWNER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "BACKEND_IMAGE=ghcr.io/${OWNER}/petshop-backend" >> $GITHUB_ENV echo "FRONTEND_IMAGE=ghcr.io/${OWNER}/petshop-web" >> $GITHUB_ENV - name: Log in to Azure uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Deploy backend run: | az containerapp update \ --name ${{ secrets.AZURE_BACKEND_APP_NAME }} \ --resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \ --image ${{ env.BACKEND_IMAGE }}:latest \ --revision-suffix r${{ github.run_number }} - name: Deploy frontend run: | az containerapp update \ --name ${{ secrets.AZURE_FRONTEND_APP_NAME }} \ --resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \ --image ${{ env.FRONTEND_IMAGE }}:latest \ --revision-suffix r${{ github.run_number }}