Skip to content

Reduced BACKUP_VOLUME_SIZE tp 5Gi #124

Reduced BACKUP_VOLUME_SIZE tp 5Gi

Reduced BACKUP_VOLUME_SIZE tp 5Gi #124

Workflow file for this run

name: 🔨 Build on OpenShift
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
env:
APP: moodle
USER: ${{ github.actor }}
PROJECT: ${{ vars.OPENSHIFT_DEPLOY_PROJECT }}
APP_HOST_URL: moodle-${{ vars.OPENSHIFT_DEPLOY_PROJECT }}-${{ github.ref_name }}.apps.silver.devops.gov.bc.ca
BASE_IMAGE_TAG: ${{ github.ref_name }}
BUILD_NAMESPACE: ${{ vars.OPENSHIFT_DEPLOY_PROJECT }}-tools
DEPLOY_NAMESPACE: ${{ vars.OPENSHIFT_DEPLOY_PROJECT }}-${{ github.ref_name }}
BUILD_ID: ${{ github.event.number }}
BRANCH: ${{ github.ref_name }}
SOURCE_REPOSITORY_URL: "https://github.com/${{ github.repository }}"
INSPECT_JOB_URL: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
SKIP_BUILD: ${{ vars.SKIP_BUILD }}
BUILD_ICON_URL: https://cdn-icons-png.flaticon.com/128/5110/5110294.png
SUCCESS_ICON_URL: https://cdn-icons-png.flaticon.com/128/1356/1356479.png
FAIL_ICON_URL: https://www.flaticon.com/free-icon/rocket_6818114
on:
push:
branches:
- dev
- test
- prod
paths:
- '**.Dockerfile'
- '**.conf'
- '**.ini'
- '**.php'
- '**.yml'
- '**.json'
- 'php-fpm-healthcheck.sh'
pull_request:
branches:
- dev
- test
- prod
paths:
- '**.Dockerfile'
- '**.conf'
- '**.ini'
- '**.php'
- '**.yml'
- 'php-fpm-healthcheck.sh'
jobs:
#Print variables for logging and debugging purposes
checkEnv:
name: 📋 Environment Check
runs-on: ubuntu-latest
steps:
- name: Print Env Vars
run: |
echo Deploying ${{ env.APP }} on ${{ env.PROJECT }}
echo "-----------------------"
echo Deploy to Namespace: ${{ env.DEPLOY_NAMESPACE }}
echo URL: https://${{ env.APP_HOST_URL }}
echo CLEAN_BUILDS: ${{ env.CLEAN_BUILDS }}
if [[ "${{ env.CLEAN_BUILDS }}" != "false" ]]; then
echo "CLEAN_BUILDS is not false, setting CLEAN_BUILDS_TEXT to TRUE"
echo CLEAN_BUILDS_TEXT="TRUE" >> $GITHUB_OUTPUT
else
echo "CLEAN_BUILDS is false, setting CLEAN_BUILDS_TEXT to FALSE"
echo CLEAN_BUILDS_TEXT="FALSE" >> $GITHUB_OUTPUT
fi
echo SKIP_BUILD: ${{ env.SKIP_BUILD }}
if [[ "${{ env.SKIP_BUILD }}" != "false" ]]; then
echo "SKIP_BUILD is not false, setting SKIP_BUILD_TEXT to TRUE"
echo SKIP_BUILD_TEXT="TRUE" >> $GITHUB_OUTPUT
else
echo "SKIP_BUILD is false, setting SKIP_BUILD_TEXT to FALSE"
echo SKIP_BUILD_TEXT="FALSE" >> $GITHUB_OUTPUT
fi
# Build PHP Image
build-images:
name: 🔨 Build Application Images (${{ github.ref_name }})
needs: [checkEnv]
runs-on: ubuntu-latest
if: ${{ needs.checkEnv.SKIP_BUILD_TEXT == 'FALSE' }} && (github.ref_name == 'dev' || github.ref_name == 'test' || github.ref_name == 'prod')
steps:
# Checkout the PR branch
- name: 📤 Checkout Target Branch
uses: actions/checkout@v2
# Log in to OpenShift.
# Note: The secrets needed to log in are NOT available if the PR comes from a FORK.
# PR's must originate from a branch off the original repo or else all openshift `oc` commands will fail.
- name: 🔑 Log in to OpenShift
run: |
oc login --token=${{ secrets.SA_TOKEN }} --server=https://api.silver.devops.gov.bc.ca:6443
# Get Environment Variables from file
- name: 📋 Setup Environment from File
id: dotenv
uses: falti/dotenv-action@v1
with:
path: example.env
export-variables: true
log-variables: true
keys-case: upper
# Build the PHP image
- name: 🚧 Build PHP (SKIP? ${{ env.SKIP_BUILD }})
id: build-php
if: success() && ${{ needs.checkEnv.SKIP_BUILD_TEXT == 'FALSE' }}
working-directory: "./"
run: |
echo "Building ${{ steps.dotenv.outputs.PHP_DEPLOYMENT_NAME }}:${{ env.BRANCH }}"
echo "Using ${{ steps.dotenv.outputs.PHP_IMAGE }}"
if [ ${{ env.SKIP_BUILD == false }} == true ]; then
echo "STARTING BUILD..."
else
echo "SKIPPING BUILD (Environment variable SKIP_BUILD=true)"
fi
sh ./openshift/scripts/build-docker-image.sh
env:
DOCKER_FROM_IMAGE: ${{ steps.dotenv.outputs.PHP_IMAGE }}
DOCKER_FILE_PATH: ${{ env.PHP_DOCKER_FILE_PATH }}
DEPLOYMENT_NAME: ${{ steps.dotenv.outputs.PHP_DEPLOYMENT_NAME }}
SOURCE_CONTEXT_DIR: ${{ env.PHP_SOURCE_CONTEXT_DIR }}
BRANCH: ${{ env.BRANCH }}
BUILD_NAMESPACE: ${{ env.BUILD_NAMESPACE }}
IMAGE_REPO: ${{ steps.dotenv.outputs.IMAGE_REPO }}
IMAGE_TAG: ${{ env.BASE_IMAGE_TAG }}
SOURCE_REPOSITORY_URL: ${{ env.SOURCE_REPOSITORY_URL }}
CLEAN_BUILDS_TEXT: ${{ needs.checkEnv.outputs.CLEAN_BUILDS_TEXT }}
# Build the Cron image
- name: 🚧 Build Cron (SKIP? ${{ env.SKIP_BUILD }})
id: build-cron
if: success() && ${{ needs.checkEnv.SKIP_BUILD_TEXT == 'FALSE' }}
working-directory: "./"
run: |
echo "Building ${{ steps.dotenv.outputs.CRON_DEPLOYMENT_NAME }}:${{ env.BRANCH }}"
echo "Using ${{ steps.dotenv.outputs.CRON_IMAGE }}"
if [ ${{ env.SKIP_BUILD == false }} == true ]; then
echo "STARTING BUILD..."
else
echo "SKIPPING BUILD (Environment variable SKIP_BUILD=true)"
fi
sh ./openshift/scripts/build-docker-image.sh
env:
DOCKER_FROM_IMAGE: ${{ steps.dotenv.outputs.CRON_IMAGE }}
DOCKER_FILE_PATH: ${{ env.CRON_DOCKER_FILE_PATH }}
DEPLOYMENT_NAME: ${{ steps.dotenv.outputs.CRON_DEPLOYMENT_NAME }}
SOURCE_CONTEXT_DIR: ${{ env.CRON_SOURCE_CONTEXT_DIR }}
BRANCH: ${{ env.BRANCH }}
BUILD_NAMESPACE: ${{ env.BUILD_NAMESPACE }}
IMAGE_REPO: ${{ steps.dotenv.outputs.IMAGE_REPO }}
IMAGE_TAG: ${{ env.BASE_IMAGE_TAG }}
SOURCE_REPOSITORY_URL: ${{ env.SOURCE_REPOSITORY_URL }}
outputs:
APP: ${{ steps.dotenv.outputs.APP }}
DB_NAME: ${{ steps.dotenv.outputs.DB_NAME }}
DB_USER: ${{ steps.dotenv.outputs.DB_USER }}
DB_PASSWORD: ${{ steps.dotenv.outputs.DB_PASSWORD }}
IMAGE_REPO: ${{ steps.dotenv.outputs.IMAGE_REPO }}
WEB_DEPLOYMENT_NAME: ${{ steps.dotenv.outputs.WEB_DEPLOYMENT_NAME }}
DB_DEPLOYMENT_NAME: ${{ steps.dotenv.outputs.DB_DEPLOYMENT_NAME }}
PHP_IMAGE: ${{ steps.dotenv.outputs.PHP_IMAGE }}
PHP_DEPLOYMENT_NAME: ${{ steps.dotenv.outputs.PHP_DEPLOYMENT_NAME }}
CRON_IMAGE: ${{ steps.dotenv.outputs.CRON_IMAGE }}
CRON_DEPLOYMENT_NAME: ${{ steps.dotenv.outputs.CRON_DEPLOYMENT_NAME }}
REDIS_REPO: ${{ steps.dotenv.outputs.REDIS_REPO }}
REDIS_DEPLOYMENT_NAME: ${{ steps.dotenv.outputs.REDIS_DEPLOYMENT_NAME }}
REDIS_IMAGE: ${{ steps.dotenv.outputs.REDIS_IMAGE }}
WEB_IMAGE: ${{ steps.dotenv.outputs.WEB_IMAGE }}
DB_IMAGE: ${{ steps.dotenv.outputs.DB_IMAGE }}
APP_HOST_URL: ${{ env.APP_HOST_URL }}
BUILD_NAMESPACE: ${{ env.BUILD_NAMESPACE }}
DEPLOY_NAMESPACE: ${{ env.DEPLOY_NAMESPACE }}
BRANCH: ${{ env.BRANCH }}
call-cleanup-workflow:
name: 🧹️ Clean Build ( ${{ needs.checkEnv.CLEAN_BUILDS_TEXT }} )
uses: ./.github/workflows/cleanup.yml
needs: [checkEnv, build-images]
if: success() && ${{ needs.checkEnv.CLEAN_BUILDS_TEXT != 'FALSE' }}
secrets: inherit
with:
APP: ${{ needs.build-images.outputs.APP }}
APP_HOST_URL: ${{ needs.build-images.outputs.APP_HOST_URL }}
BRANCH: ${{ needs.build-images.outputs.BRANCH }}
BUILD_NAMESPACE: ${{ needs.build-images.outputs.BUILD_NAMESPACE }}
DEPLOY_NAMESPACE: ${{ needs.build-images.outputs.DEPLOY_NAMESPACE }}
DB_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.DB_DEPLOYMENT_NAME }}
WEB_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.WEB_DEPLOYMENT_NAME }}
PHP_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.PHP_DEPLOYMENT_NAME }}
CRON_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.CRON_DEPLOYMENT_NAME }}
REDIS_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.REDIS_DEPLOYMENT_NAME }}
call-deploy-workflow:
name: 🚀 Deploy to OpenShift
uses: ./.github/workflows/deploy.yml
needs: [checkEnv, build-images, call-cleanup-workflow]
if: needs.build-images.outcome == 'success' || needs.build-images.outcome == 'skipped' || ${{ needs.checckEnv.SKIP_BUILD_TEXT == 'FALSE' }}
secrets: inherit
with:
BASE_IMAGE_TAG: ${{ github.ref_name }}
APP: ${{ needs.build-images.outputs.APP }}
DB_NAME: ${{ needs.build-images.outputs.DB_NAME }}
DB_USER: ${{ needs.build-images.outputs.DB_USER }}
DB_PASSWORD: ${{ needs.build-images.outputs.DB_PASSWORD }}
WEB_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.WEB_DEPLOYMENT_NAME }}
WEB_IMAGE: ${{ needs.build-images.outputs.WEB_IMAGE }}
PHP_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.PHP_DEPLOYMENT_NAME }}
PHP_IMAGE: ${{ needs.build-images.outputs.PHP_IMAGE }}
DB_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.DB_DEPLOYMENT_NAME }}
DB_IMAGE: ${{ needs.build-images.outputs.DB_IMAGE }}
CRON_IMAGE: ${{ needs.build-images.outputs.CRON_IMAGE }}
CRON_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.CRON_DEPLOYMENT_NAME }}
REDIS_REPO: ${{ needs.build-images.outputs.REDIS_REPO }}
REDIS_DEPLOYMENT_NAME: ${{ needs.build-images.outputs.REDIS_DEPLOYMENT_NAME }}
REDIS_IMAGE: ${{ needs.build-images.outputs.REDIS_IMAGE }}
APP_HOST_URL: ${{ needs.build-images.outputs.APP_HOST_URL }}
BUILD_NAMESPACE: ${{ needs.build-images.outputs.BUILD_NAMESPACE }}
DEPLOY_NAMESPACE: ${{ needs.build-images.outputs.DEPLOY_NAMESPACE }}
IMAGE_REPO: ${{ needs.build-images.outputs.IMAGE_REPO }}
BRANCH: ${{ needs.build-images.outputs.BRANCH }}
notify:
name: 📫 Send Notifications (via Rocket.Chat)
needs: [build-images, call-deploy-workflow]
if: success() || failure()
runs-on: ubuntu-latest
steps:
- name: ⚠️ Failure
if: failure()
uses: muinmomin/[email protected]
with:
url: ${{ secrets.ROCKETCHAT_WEBHOOK_URL }}
data: '{
"alias":"FAILED GitHub Action by ${{ env.USER }}",
"text":"Job: ${{ github.job }} in
${{ github.workflow }} of
${{ github.repository }}:${{ github.ref_name }} >>
Deploy1: ${{ needs.call-deploy-workflow.outputs.deploy1 }}
Deploy2: ${{ needs.call-deploy-workflow.outputs.deploy2 }}",
"attachments":[{
"title":"${{ github.job }} ${{ job.status }} to ${{ github.ref_name }}",
"title_link": "${{ env.INSPECT_JOB_URL }}",
"text":"Failure detected in ${{ github.repository }}:${{ github.ref_name }}",
"image_url": "${{ env.FAIL_ICON_URL }}",
"color":"#e7e076"
}]}'
- name: ✅ Success
uses: muinmomin/[email protected]
with:
url: ${{ secrets.ROCKETCHAT_WEBHOOK_URL }}
data: '{
"alias":"Successful ${{ github.job }} by ${{ env.USER }}",
"text":"${{ github.job }} in ${{ github.workflow }}
of ${{ github.repository }}:${{ github.ref_name }}",
"attachments":[{
"title":"${{ github.job }} ${{ job.status }} to ${{ github.ref_name }}",
"title_link": "${{ env.INSPECT_JOB_URL }}",
"text":"Successful deployment of: ${{ github.repository }}:${{ github.ref_name }}",
"image_url": "${{ env.SUCCESS_ICON_URL }}",
"color":"#05a227"
}]}'