Skip to content

update docs and workflow #5

update docs and workflow

update docs and workflow #5

Workflow file for this run

name: Gofr-web workflow
on:
push:
paths:
- 'docs/**'
branches:
- add-docs
env:
GCR_PROJECT: zs-products
APP_NAME: gofr-web
CLUSTER_NAME: products-cluster
STAGE_NAMESPACE: gofr-stage
PROD_NAMESPACE: gofr
jobs:
stage_build:
runs-on: ubuntu-latest
if: (github.ref == 'refs/heads/add-docs') && (github.event_name == 'push')
outputs:
image: ${{ steps.output-image.outputs.image }}
strategy:
matrix:
node-version: [ 16.x ]
steps:
- uses: actions/checkout@v4
- name: Login to GCR
uses: docker/login-action@v1
with:
registry: gcr.io
username: _json_key
password: ${{ secrets.GCR_KEY }}
- name: building docker image
uses: docker/build-push-action@v2
with:
tags: gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ github.sha }}
context: ./
file: ./docs/Dockerfile
push: true
- id: output-image
run: echo "image=`echo gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ github.sha }}`" >> "$GITHUB_OUTPUT"
stage_deployment:
runs-on: ubuntu-latest
needs: stage_build
env:
image: ${{ needs.stage_build.outputs.image }}
steps:
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v0
with:
project_id: ${{ env.GCR_PROJECT }}
service_account_key: ${{ secrets.DEPLOY_KEY }}
export_default_credentials: true
# - name: Update Kubectl component
# run: gcloud --quiet components update kubectl
#
# - name: Set GCloud Project and Fetch Cluster Credentials
# run: gcloud container clusters get-credentials ${{ env.CLUSTER_NAME }} --zone=us-central1 --project=${{ env.GCR_PROJECT }}
#
# - name: Set Deployment Image
# run: kubectl set image deployment/${{ env.APP_NAME }} ${{ env.APP_NAME }}=${{ env.image }} --namespace ${{ env.STAGE_NAMESPACE }}
check-tag:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
outputs:
tag_exists: ${{ steps.tag-check.outputs.tag_exists }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v0
with:
project_id: ${{ env.GCR_PROJECT }}
service_account_key: ${{ secrets.DEPLOY_KEY }}
export_default_credentials: true
- name: Check if tag exists
id: tag-check
run: |
if gcloud container images describe gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ github.sha }} 2>/dev/null; then
echo "tag_exists=true" >> "$GITHUB_OUTPUT"
else
echo "tag_exists=false" >> "$GITHUB_OUTPUT"
fi
- name: Print commit has value
run: |
echo "${{ github.sha }}"
- name: Print tag_exists value
run: |
echo "${{ steps.tag-check.outputs.tag_exists }}"
retag:
name: Retagging existing image
runs-on: ubuntu-latest
needs: check-tag
if: ${{ needs.check-tag.outputs.tag_exists == 'true' }}
outputs:
image: ${{ steps.output-image.outputs.image }}
steps:
- name: Extract Release Tag
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Re tag and Push Docker Image to GCR
run: |
docker pull gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ github.sha }}
docker tag gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ github.sha }} gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ env.RELEASE_VERSION }}
docker push gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ env.RELEASE_VERSION }}
- id: output-image
run: echo "image=`echo gcr.io/${{ env.GCR_PROJECT }}/${{ env.APP_NAME }}:${{ env.RELEASE_VERSION }}`" >> "$GITHUB_OUTPUT"
prod_deployment:
runs-on: ubuntu-latest
name: 🚀 Deploy to Prod
needs: retag
env:
image: ${{ needs.retag.outputs.image }}
steps:
- name: Extract Release Tag
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v0
with:
project_id: ${{ env.GCR_PROJECT }}
service_account_key: ${{ secrets.DEPLOY_KEY }}
export_default_credentials: true
- name: Update Kubectl component
run: gcloud --quiet components update kubectl
- name: Set GCloud Project and Fetch Cluster Credentials
run: gcloud container clusters get-credentials ${{ env.CLUSTER_NAME }} --zone=us-central1 --project=${{ env.GCR_PROJECT }}
- name: Set Deployment Image for API
run: kubectl set image deployment/${{ env.APP_NAME }} ${{ env.APP_NAME }}=${{ env.image }} --namespace ${{ env.PROD_NAMESPACE }}