name: Deploy to Development on: push: branches: [ develop ] pull_request: branches: [ develop ] env: REGISTRY: ghcr.io IMAGE_NAME: ghndrx/k8s-game-2048 jobs: build-and-deploy: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v4 - name: Log in to Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=sha,prefix={{branch}}- - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - name: Set up kubectl uses: azure/setup-kubectl@v3 with: version: 'v1.28.0' - name: Configure kubectl run: | echo "${{ secrets.KUBECONFIG }}" | base64 -d > kubeconfig export KUBECONFIG=kubeconfig - name: Update image in manifests run: | sed -i "s|ghcr.io/ghndrx/k8s-game-2048:latest|${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}|g" manifests/dev/service.yml - name: Deploy to development run: | export KUBECONFIG=kubeconfig kubectl apply -f manifests/dev/ - name: Wait for deployment run: | export KUBECONFIG=kubeconfig kubectl wait --for=condition=Ready ksvc/game-2048-dev -n game-2048-dev --timeout=300s - name: Get service URL run: | export KUBECONFIG=kubeconfig kubectl get ksvc game-2048-dev -n game-2048-dev -o jsonpath='{.status.url}'