Skip to content

Tracking pull request to merge release-1.30.0 to main #66

Tracking pull request to merge release-1.30.0 to main

Tracking pull request to merge release-1.30.0 to main #66

Workflow file for this run

name: ITVR new-pipeline Dev CI
on:
pull_request:
# Trigger only on PRs targeting the master branch
branches:
- main
types: [opened, synchronize, reopened]
workflow_dispatch:
env:
GIT_URL: https://github.com/bcgov/itvr.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:
install-oc:
runs-on: ubuntu-latest
outputs:
cache-hit: ${{ steps.cache.outputs.cache-hit }}
steps:
- name: Check out repository
uses: actions/[email protected]
- name: Set up cache for OpenShift CLI
id: cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc # Path where the `oc` binary will be installed
key: oc-cli-${{ runner.os }}
- name: Install OpenShift CLI (if not cached)
if: steps.cache.outputs.cache-hit != 'true'
run: |
curl -LO https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-client-linux.tar.gz
tar -xvf openshift-client-linux.tar.gz
sudo mv oc /usr/local/bin/
oc version --client
- name: Confirm OpenShift CLI is Available
run: oc version --client
verify-pr:
name: Verify pull request title started with Tracking
runs-on: ubuntu-latest
needs: [install-oc]
steps:
- name: Check PR Title
id: check_pr_title
run: |
pr_title="${{ github.event.pull_request.title }}"
echo "Pull Request Title: $pr_title"
# Check if the title starts with "Tracking"
if [[ "$pr_title" != Tracking* ]]; then
echo "PR title does not start with 'Tracking'. Exiting..."
exit 1
fi
set-pre-release:
name: Calculate pre-release number
runs-on: ubuntu-latest
needs: verify-pr
outputs:
PRE_RELEASE: ${{ 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
get-version:
name: Get the version
runs-on: ubuntu-latest
needs: verify-pr
outputs:
VERSION: ${{ steps.get-version.outputs.VERSION }}
steps:
- id: get-version
run: |
echo "VERSION=$(echo "${{ github.event.pull_request.head.ref }}" | grep -oP '\d+\.\d+\.\d+')" >> $GITHUB_OUTPUT
verify-build-suffix:
name: Verify-build-suffix
runs-on: ubuntu-latest
needs: [set-pre-release, get-version]
env:
BUILD_SUFFIX: ${{ needs.get-version.outputs.VERSION }}-${{ needs.set-pre-release.outputs.PRE_RELEASE }}
steps:
- id: verify-build-suffix
run: |
echo "Validating ${{ env.BUILD_SUFFIX }}"
if [[ "${{ env.BUILD_SUFFIX }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+-[0-9]{14}$ ]]; then
echo "Build suffix ${{ env.BUILD_SUFFIX }} format is valid."
else
echo "Error: Build suffix ${{ env.BUILD_SUFFIX }} format is invalid!"
exit 1
fi
build-backend:
name: Build ITVR Backend
runs-on: ubuntu-latest
needs: [set-pre-release, get-version, verify-build-suffix]
timeout-minutes: 60
env:
BUILD_SUFFIX: ${{ needs.get-version.outputs.VERSION }}-${{ needs.set-pre-release.outputs.PRE_RELEASE }}
VERSION: ${{ needs.get-version.outputs.VERSION }}
steps:
- name: Check out repository
uses: actions/[email protected]
- name: Restore oc command from Cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.TOOLS_NAMESPACE }}
- name: Build ITVR Backend
run: |
echo ${{ env.BUILD_SUFFIX }}
cd openshift/templates/backend
oc process -f ./backend-bc.yaml NAME=itvr SUFFIX=-${{ env.BUILD_SUFFIX }} VERSION=${{ env.BUILD_SUFFIX }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }}
sleep 2s
for build in $(oc -n ${{ env.TOOLS_NAMESPACE }} get builds -l buildconfig=itvr-backend-${{ env.BUILD_SUFFIX }} -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}'); do
echo "canceling $build"
oc -n ${{ env.TOOLS_NAMESPACE }} cancel-build $build
done
sleep 2s
oc -n ${{ env.TOOLS_NAMESPACE }} start-build itvr-backend-${{ env.BUILD_SUFFIX }} --wait=true
sleep 2s
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-backend:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-backend:${{ env.BUILD_SUFFIX }}
build-frontend:
name: Build ITVR Frontend
runs-on: ubuntu-latest
needs: [set-pre-release, get-version, verify-build-suffix]
timeout-minutes: 60
env:
BUILD_SUFFIX: ${{ needs.get-version.outputs.VERSION }}-${{ needs.set-pre-release.outputs.PRE_RELEASE }}
VERSION: ${{ needs.get-version.outputs.VERSION }}
steps:
- name: Check out repository
uses: actions/[email protected]
- name: Restore oc command from Cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.TOOLS_NAMESPACE }}
- name: Build ZEVA Frontend
run: |
cd openshift/templates/frontend
oc process -f ./frontend-bc-docker.yaml NAME=itvr SUFFIX=-${{ env.BUILD_SUFFIX }} VERSION=${{ env.BUILD_SUFFIX }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }}
sleep 2s
for build in $(oc -n ${{ env.TOOLS_NAMESPACE }} get builds -l buildconfig=itvr-frontend-${{ env.BUILD_SUFFIX }} -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}'); do
echo "canceling $build"
oc -n ${{ env.TOOLS_NAMESPACE }} cancel-build $build
done
sleep 2s
oc -n ${{ env.TOOLS_NAMESPACE }} start-build itvr-frontend-${{ env.BUILD_SUFFIX }} --wait=true
sleep 2s
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-frontend:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-frontend:${{ env.BUILD_SUFFIX }}
build-cra:
name: Build ITVR CRA
runs-on: ubuntu-latest
needs: [set-pre-release, get-version, verify-build-suffix]
timeout-minutes: 60
env:
BUILD_SUFFIX: ${{ needs.get-version.outputs.VERSION }}-${{ needs.set-pre-release.outputs.PRE_RELEASE }}
VERSION: ${{ needs.get-version.outputs.VERSION }}
steps:
- name: Check out repository
uses: actions/[email protected]
- name: Restore oc command from Cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.TOOLS_NAMESPACE }}
- name: Build ZEVA CRA
run: |
cd openshift/templates/cra
oc process -f ./cra-bc-docker.yaml NAME=itvr SUFFIX=-${{ env.BUILD_SUFFIX }} VERSION=${{ env.BUILD_SUFFIX }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }}
sleep 2s
for build in $(oc -n ${{ env.TOOLS_NAMESPACE }} get builds -l buildconfig=itvr-cra-${{ env.BUILD_SUFFIX }} -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}'); do
echo "canceling $build"
oc -n ${{ env.TOOLS_NAMESPACE }} cancel-build $build
done
sleep 2s
oc -n ${{ env.TOOLS_NAMESPACE }} start-build itvr-cra-${{ env.BUILD_SUFFIX }} --wait=true
sleep 2s
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-cra:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-cra:${{ env.BUILD_SUFFIX }}
build-task-queue:
name: Build ITVR Task Queue
runs-on: ubuntu-latest
needs: [set-pre-release, get-version, verify-build-suffix]
timeout-minutes: 60
env:
BUILD_SUFFIX: ${{ needs.get-version.outputs.VERSION }}-${{ needs.set-pre-release.outputs.PRE_RELEASE }}
VERSION: ${{ needs.get-version.outputs.VERSION }}
steps:
- name: Check out repository
uses: actions/[email protected]
with:
ref: ${{ github.event.pull_request.head.ref }}
- name: Restore oc command from Cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.TOOLS_NAMESPACE }}
- name: Build ITVR Taskq
run: |
cd openshift/templates/task-queue
oc process -f ./task-queue-bc-docker.yaml NAME=itvr SUFFIX=-${{ env.BUILD_SUFFIX }} VERSION=${{ env.BUILD_SUFFIX }} GIT_URL=${{ env.GIT_URL }} GIT_REF=release-${{ env.VERSION }} | oc apply --wait=true -f - -n ${{ env.TOOLS_NAMESPACE }}
sleep 2s
for build in $(oc -n ${{ env.TOOLS_NAMESPACE }} get builds -l buildconfig=itvr-task-queue-${{ env.BUILD_SUFFIX }} -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}'); do
echo "canceling $build"
oc -n ${{ env.TOOLS_NAMESPACE }} cancel-build $build
done
sleep 2s
oc -n ${{ env.TOOLS_NAMESPACE }} start-build itvr-task-queue-${{ env.BUILD_SUFFIX }} --wait=true
sleep 2s
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-task-queue:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-task-queue:${{ env.BUILD_SUFFIX }}
deploy:
name: Deploy ITVR on Dev
runs-on: ubuntu-latest
timeout-minutes: 60
needs: [set-pre-release, get-version, build-backend, build-frontend, build-cra, build-task-queue]
env:
BUILD_SUFFIX: ${{ needs.get-version.outputs.VERSION }}-${{ needs.set-pre-release.outputs.PRE_RELEASE }}
steps:
- name: Checkout Manifest repository
uses: actions/[email protected]
with:
repository: bcgov-c/tenant-gitops-ac294c
ref: main
ssh-key: ${{ secrets.MANIFEST_REPO_DEPLOY_KEY }}
- name: Update tags
uses: mikefarah/[email protected]
with:
cmd: |
yq -i '.frontend.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-dev.yaml
yq -i '.backend.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-dev.yaml
yq -i '.cra.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-dev.yaml
yq -i '.task-queue.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-dev.yaml
- name: GitHub Commit & Push
shell: bash {0}
run: |
git config --global user.email "[email protected]"
git config --global user.name "GitHub Actions"
git add itvr/values-dev.yaml
git commit -m "Update the image tag to ${{ env.BUILD_SUFFIX }} on Dev"
git push
- name: Restore oc command from Cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.TOOLS_NAMESPACE }}
- name: Tag and deploy to Dev
run: |
helm -n ${{ env.DEV_NAMESPACE }} list
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-backend:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-backend:${{ env.BUILD_SUFFIX }}
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-frontend:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-frontend:${{ env.BUILD_SUFFIX }}
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-cra:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-cra:${{ env.BUILD_SUFFIX }}
oc tag ${{ env.TOOLS_NAMESPACE }}/itvr-task-queue:${{ env.BUILD_SUFFIX }} ${{ env.DEV_NAMESPACE }}/itvr-task-queue:${{ env.BUILD_SUFFIX }}
- name: Helm Deployment
run: |
cd itvr
helm -n ${{ env.DEV_NAMESPACE }} -f ./values-dev.yaml upgrade --install itvr-dev . \
--set frontend.podAnnotations.rolloutTriggered="A$(date +%s)E" \
--set backend.podAnnotations.rolloutTriggered="A$(date +%s)E" \
--set cra.podAnnotations.rolloutTriggered="A$(date +%s)E" \
--set task-queue.podAnnotations.rolloutTriggered="A$(date +%s)E"