From 31add50935dd002795dc79419d006c75036498c8 Mon Sep 17 00:00:00 2001 From: Kuan Fan <31664961+kuanfandevops@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:40:41 -0800 Subject: [PATCH] add new ci pipeline (#206) --- .github/workflows/dev-ci.yaml | 112 +++++++++++++++++++++++++++++++ .github/workflows/test-ci.yaml | 117 +++++++++++++++++++++++++++++++++ 2 files changed, 229 insertions(+) create mode 100644 .github/workflows/dev-ci.yaml create mode 100644 .github/workflows/test-ci.yaml diff --git a/.github/workflows/dev-ci.yaml b/.github/workflows/dev-ci.yaml new file mode 100644 index 00000000..4155485b --- /dev/null +++ b/.github/workflows/dev-ci.yaml @@ -0,0 +1,112 @@ +## For each release, the value of workflow name, branches and VERSION need to be adjusted accordingly + +name: CTHUB 0.2.0 Dev CI + +on: + push: + branches: [ release-0.2.0 ] + paths: + - frontend/** + - backend/** + workflow_dispatch: + +env: + VERSION: 0.2.0 + GIT_URL: https://github.com/bcgov/cthub.git + TOOLS_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-tools + DEV_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-dev + + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + + set-pre-release: + name: Calculate pre-release number + runs-on: ubuntu-latest + + outputs: + output1: ${{ steps.set-pre-release.outputs.PRE_RELEASE }} + + steps: + - id: set-pre-release + run: echo "PRE_RELEASE=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT + + build: + + name: Build CTHUB + runs-on: ubuntu-latest + needs: set-pre-release + timeout-minutes: 60 + + env: + PRE_RELEASE: ${{ needs.set-pre-release.outputs.output1 }} + + steps: + + - name: Check out repository + uses: actions/checkout@v4.1.1 + + - name: Log in to Openshift + uses: redhat-actions/oc-login@v1.2 + with: + openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }} + openshift_token: ${{ secrets.OPENSHIFT_TOKEN }} + insecure_skip_tls_verify: true + namespace: ${{ env.TOOLS_NAMESPACE }} + + - name: Build CTHUB Backend + run: | + cd openshift/templates + oc process -f ./backend-bc.yaml NAME=cthub SUFIX=-${{ env.VERSION }}-${{ env.PRE_RELEASE }} VERSION=${{ env.VERSION }}-${{ env.PRE_RELEASE }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }} + sleep 5s + oc -n ${{ env.TOOLS_NAMESPACE }} wait --for=condition=Complete --timeout=900s build/cthub-backend-${{ env.VERSION }}-${{ env.PRE_RELEASE }}-1 + oc tag ${{ env.TOOLS_NAMESPACE }}/cthub-backend:${{ env.VERSION }}-${{ env.PRE_RELEASE }} ${{ env.DEV_NAMESPACE }}/cthub-backend:${{ env.VERSION }}-${{ env.PRE_RELEASE }} + + - name: Build CTHUB Frontend + run: | + cd openshift/templates + oc process -f ./frontend-bc.yaml NAME=cthub SUFIX=-${{ env.VERSION }}-${{ env.PRE_RELEASE }} VERSION=${{ env.VERSION }}-${{ env.PRE_RELEASE }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }} + sleep 5s + oc -n ${{ env.TOOLS_NAMESPACE }} wait --for=condition=Complete --timeout=900s build/cthub-frontend-${{ env.VERSION }}-${{ env.PRE_RELEASE }}-1 + oc tag ${{ env.TOOLS_NAMESPACE }}/cthub-frontend:${{ env.VERSION }}-${{ env.PRE_RELEASE }} ${{ env.DEV_NAMESPACE }}/cthub-frontend:${{ env.VERSION }}-${{ env.PRE_RELEASE }} + + deploy: + + name: Deploy CTHUB on Dev + runs-on: ubuntu-latest + timeout-minutes: 60 + needs: [set-pre-release, build] + + env: + PRE_RELEASE: ${{ needs.set-pre-release.outputs.output1 }} + + steps: + + - name: Checkout Manifest repository + uses: actions/checkout@v4.1.1 + with: + repository: bcgov-c/tenant-gitops-30b186 + ref: main + ssh-key: ${{ secrets.MANIFEST_REPO_DEPLOY_KEY }} + + - name: Update frontend tag + uses: mikefarah/yq@v4.40.5 + with: + cmd: yq -i '.frontend.image.tag = "${{ env.VERSION }}-${{ env.PRE_RELEASE }}"' cthub/values-dev.yaml + + - name: Update backend tag + uses: mikefarah/yq@v4.40.5 + with: + cmd: yq -i '.backend.image.tag = "${{ env.VERSION }}-${{ env.PRE_RELEASE }}"' cthub/values-dev.yaml + + - name: GitHub Commit & Push + run: | + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + git add cthub/values-dev.yaml + git commit -m "update the image tag to ${{ env.VERSION }}-${{ env.PRE_RELEASE }}" + git push + \ No newline at end of file diff --git a/.github/workflows/test-ci.yaml b/.github/workflows/test-ci.yaml new file mode 100644 index 00000000..d25c3016 --- /dev/null +++ b/.github/workflows/test-ci.yaml @@ -0,0 +1,117 @@ +## For each release, the value of workflow name, branches and VERSION need to be adjusted accordingly + +name: CTHUB 0.2.0 Test CI + +on: + workflow_dispatch: + +env: + VERSION: 0.2.0 + GIT_URL: https://github.com/bcgov/cthub.git + TOOLS_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-tools + TEST_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-test + + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + + set-pre-release: + name: Calculate pre-release number + runs-on: ubuntu-latest + + outputs: + output1: ${{ steps.set-pre-release.outputs.PRE_RELEASE }} + + steps: + - id: set-pre-release + run: echo "PRE_RELEASE=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT + + build: + + name: Build CTHUB + runs-on: ubuntu-latest + needs: set-pre-release + timeout-minutes: 60 + + env: + PRE_RELEASE: ${{ needs.set-pre-release.outputs.output1 }} + + steps: + + - name: Check out repository + uses: actions/checkout@v4.1.1 + + - name: Log in to Openshift + uses: redhat-actions/oc-login@v1.2 + with: + openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }} + openshift_token: ${{ secrets.OPENSHIFT_TOKEN }} + insecure_skip_tls_verify: true + namespace: ${{ env.TOOLS_NAMESPACE }} + + - name: Build CTHUB Backend + run: | + cd openshift/templates + oc process -f ./backend-bc.yaml NAME=cthub SUFIX=-${{ env.VERSION }}-${{ env.PRE_RELEASE }} VERSION=${{ env.VERSION }}-${{ env.PRE_RELEASE }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }} + sleep 5s + oc -n ${{ env.TOOLS_NAMESPACE }} wait --for=condition=Complete --timeout=900s build/cthub-backend-${{ env.VERSION }}-${{ env.PRE_RELEASE }}-1 + + - name: Build CTHUB Frontend + run: | + cd openshift/templates + oc process -f ./frontend-bc.yaml NAME=cthub SUFIX=-${{ env.VERSION }}-${{ env.PRE_RELEASE }} VERSION=${{ env.VERSION }}-${{ env.PRE_RELEASE }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }} + sleep 5s + oc -n ${{ env.TOOLS_NAMESPACE }} wait --for=condition=Complete --timeout=900s build/cthub-frontend-${{ env.VERSION }}-${{ env.PRE_RELEASE }}-1 + + deploy: + + name: Deploy CTHUB on Test + runs-on: ubuntu-latest + timeout-minutes: 60 + needs: [set-pre-release, build] + + env: + PRE_RELEASE: ${{ needs.set-pre-release.outputs.output1 }} + + steps: + - name: Ask for approval for CTHUB release-${{ env.VERSION }} Test deployment + uses: trstringer/manual-approval@v1.6.0 + with: + secret: ${{ github.TOKEN }} + approvers: emi-hi,kuanfandevops,tim738745,JulianForeman + minimum-approvals: 1 + issue-title: "CTHUB release-${{ env.VERSION }} Test Deployment" + + - name: Tag CTHUB images to Test + run: | + oc tag ${{ env.TOOLS_NAMESPACE }}/cthub-backend:${{ env.VERSION }}-$PRE_RELEASE ${{ env.TEST_NAMESPACE }}/cthub-backend:${{ env.VERSION }}-$PRE_RELEASE + oc tag ${{ env.TOOLS_NAMESPACE }}/cthub-frontend:${{ env.VERSION }}-$PRE_RELEASE ${{ env.TEST_NAMESPACE }}/cthub-frontend:${{ env.VERSION }}-$PRE_RELEASE + + - name: Checkout Manifest repository + uses: actions/checkout@v4.1.1 + with: + repository: bcgov-c/tenant-gitops-30b186 + ref: main + ssh-key: ${{ secrets.MANIFEST_REPO_DEPLOY_KEY }} + + - name: Update frontend tag + uses: mikefarah/yq@v4.40.5 + with: + cmd: yq -i '.frontend.image.tag = "${{ env.VERSION }}-${{ env.PRE_RELEASE }}"' cthub/values-test.yaml + + - name: Update backend tag + uses: mikefarah/yq@v4.40.5 + with: + cmd: yq -i '.backend.image.tag = "${{ env.VERSION }}-${{ env.PRE_RELEASE }}"' cthub/values-test.yaml + + - name: GitHub Commit & Push + run: | + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + git add cthub/values-test.yaml + git commit -m "update the image tag to ${{ env.VERSION }}-${{ env.PRE_RELEASE }}" + git push + \ No newline at end of file