Skip to content

Workflow file for this run

name: Database, Build and Deploy
on:
push:
branches:
# @todo Add properregex.
- 'feature/**'
pull_request:
branches:
# @todo Add properregex.
- 'feature/**'
# schedule:
# - cron: '0 18 * * *'
workflow_dispatch:
inputs:
enable_terminal:
type: boolean
description: 'Enable terminal session.'
required: false
default: false
jobs:
database:
runs-on: ubuntu-latest
container:
image: drevops/ci-runner:24.8.0
env:
TZ: Australia/Melbourne
TERM: xterm-256color
VORTEX_CONTAINER_REGISTRY_USER: ${{ secrets.VORTEX_CONTAINER_REGISTRY_USER }}
VORTEX_CONTAINER_REGISTRY_PASS: ${{ secrets.VORTEX_CONTAINER_REGISTRY_PASS }}
VORTEX_DEBUG: ${{ vars.VORTEX_DEBUG }}
#;< !PROVISION_USE_PROFILE
# How often to refresh the cache of the DB dump. Refer to `date` command.
VORTEX_CI_DB_CACHE_TIMESTAMP: +%Y%m%d
# Use previous database caches on this branch as a fallback if the above cache
# does not match (for example, the cache is available only from the previous
# day). If "no" is set, the cache will be rebuilt from scratch.
VORTEX_CI_DB_CACHE_FALLBACK: "yes"
# Which branch to use as a source of DB caches.
VORTEX_CI_DB_CACHE_BRANCH: "develop"
#;> !PROVISION_USE_PROFILE
steps:
- name: Preserve $HOME set in the container
run: echo HOME=/root >> $GITHUB_ENV
- name: Check out code
uses: actions/checkout@v3
- name: Process codebase to run in CI
run: |
find . -name "docker-compose.yml" -print0 | xargs -0 -I {} sh -c "sed -i -e '/###/d' {} && sed -i -e 's/##//' {}"
mkdir -p /tmp/workspace/code
- name: Create cache keys for database caching as files
run: |
echo "${VORTEX_CI_DB_CACHE_BRANCH}" | tee db_cache_branch
echo "${VORTEX_CI_DB_CACHE_FALLBACK/no/${GITHUB_RUN_NUMBER}}" | tee db_cache_fallback
echo "yes" | tee db_cache_fallback_yes
echo "$(date ${VORTEX_CI_DB_CACHE_TIMESTAMP})" | tee db_cache_timestamp
echo 'v24.8.0-db10-${{ hashFiles('db_cache_branch') }}-${{ hashFiles('db_cache_fallback') }}-${{ hashFiles('db_cache_timestamp') }}'
# Restore DB cache based on the cache strategy set by the cache keys below.
# Change 'v1' to 'v2', 'v3' etc., commit and push to force cache reset.
# Lookup cache based on the default branch and a timestamp. Allows
# to use cache from the very first build on the day (sanitized database dump, for example).
- name: Restore DB cache
uses: actions/cache@v3
with:
path: /root/project/.data
key: v24.8.0-db10-${{ hashFiles('db_cache_branch') }}-${{ hashFiles('db_cache_fallback') }}-${{ hashFiles('db_cache_timestamp') }}
# Fallback to caching by default branch name only. Allows to use
# cache from the branch build on the previous day.
restore-keys: |
v24.8.0-db10-${{ hashFiles('db_cache_branch') }}-${{ hashFiles('db_cache_fallback') }}-
- name: Download DB
run: |
VORTEX_DB_DOWNLOAD_SEMAPHORE=/tmp/download-db-success ./scripts/vortex/download-db.sh
timeout-minutes: 30
- name: Export DB
run: |
[ ! -f /tmp/download-db-success ] && echo "==> Database download semaphore file is missing. DB export will not proceed." && exit 0
./scripts/vortex/login-container-registry.sh
docker compose up --detach
sleep 15
docker compose exec cli mkdir -p .data && docker compose cp -L .data/db.sql cli:/app/.data/db.sql || true
docker compose exec cli bash -c "VORTEX_PROVISION_POST_OPERATIONS_SKIP=1 ./scripts/vortex/provision.sh"
./scripts/vortex/export-db.sh db.sql
timeout-minutes: 30
continue-on-error: true
# Save cache per default branch and the timestamp.
# The cache will not be saved if it already exists.
# Note that the cache fallback flag is enabled for this case in order
# to save cache even if the fallback is not used when restoring it.
- name: Save DB cache
uses: actions/cache/save@v4
with:
path: /root/project/.data
key: v24.8.0-db10-${{ hashFiles('db_cache_branch') }}-${{ hashFiles('db_cache_fallback_yes') }}-${{ hashFiles('db_cache_timestamp') }}
- name: Upload Database as an artifact
uses: actions/upload-artifact@v4
with:
name: database
path: .data/db.sql
- name: Setup tmate session
if: ${{ !cancelled() && github.event.inputs.enable_terminal }}
uses: mxschmitt/action-tmate@v3
timeout-minutes: 5
with:
detached: true
#
# build:
# runs-on: ubuntu-latest
# needs: database
#
# container:
# image: drevops/ci-runner:24.8.0
# env:
# TZ: Australia/Melbourne
# TERM: xterm-256color
#
# steps:
# - name: Check out code
# uses: actions/checkout@v3
#
# - name: Process codebase to run in CI
# run: |
# find . -name "docker-compose.yml" -print0 | xargs -0 -I {} sh -c "sed -i -e '/###/d' {} && sed -i -e 's/##//' {}"
# mkdir -p /tmp/workspace/code
#
# - name: Build Stack
# run: docker compose up -d
#
# - name: Download Database as an artifact
# uses: actions/download-artifact@v4
# with:
# name: database
# path: .data/db.sql
#
# - run: ls -al .data
#
# - name: Run Tests
# run: |
# docker compose exec -T cli vendor/bin/phpunit
# docker compose exec -T cli vendor/bin/behat --profile=default
#
# - name: Store Artifacts
# run: |
# mkdir -p /tmp/artifacts
# docker compose cp cli:/app/.logs/. /tmp/artifacts/
#
# deploy:
# runs-on: ubuntu-latest
# needs: build
#
# container:
# image: drevops/ci-runner:24.8.0
# env:
# TZ: Australia/Melbourne
# TERM: xterm-256color
#
# steps:
# - name: Check out code
# uses: actions/checkout@v3
#
# - name: Process codebase
# run: |
# find . -name "docker-compose.yml" -print0 | xargs -0 -I {} sh -c "sed -i -e '/###/d' {} && sed -i -e 's/##//' {}"
# mkdir -p /tmp/workspace/code
#
# - name: Deploy
# run: |
# VORTEX_DEPLOY_BRANCH="${{ github.ref }}"
# ./scripts/vortex/deploy.sh
# timeout-minutes: 30