Skip to content

Restore workflows

Restore workflows #4

Workflow file for this run

name: .Helm Deployer
on:
workflow_call:
inputs:
### Required
# Only secrets!
### Typical / recommended
atomic:
description: Atomic deployment? That means fail all or nothing
default: true
required: false
type: string
directory:
description: Chart directory
default: 'charts/app'
required: false
type: string
environment:
description: Environment name; omit for PRs
required: false
type: string
oc_server:
default: https://api.silver.devops.gov.bc.ca:6443
description: OpenShift server
required: false
type: string
params:
description: Extra parameters to pass to helm upgrade
required: false
type: string
tag:
description: Specify a tag to deploy; defaults to PR number
required: false
type: string
triggers:
description: Paths used to trigger a deployment; e.g. ('./backend/' './frontend/)
required: false
type: string
db_user:
description: The database user
required: false
type: string
### Usually a bad idea / not recommended
timeout-minutes:
description: 'Timeout minutes'
default: 10
required: false
type: number
values:
description: 'Values file'
default: 'values.yaml'
required: false
type: string
outputs:
tag:
description: 'Which tag was used for deployment?'
value: ${{ jobs.deploy.outputs.tag }}
triggered:
description: 'Has a deployment has been triggered?'
value: ${{ jobs.deploy.outputs.triggered }}
secrets:
oc_namespace:
description: OpenShift namespace
required: true
oc_token:
description: OpenShift token
required: true
jobs:
deployer-db:
name: Database
uses: ./.github/workflows/.deployer-db.yml
secrets:
oc_namespace: ${{ secrets.OC_NAMESPACE }}
oc_token: ${{ secrets.OC_TOKEN }}
with:
environment: ${{ inputs.environment }}
triggers: ${{ inputs.triggers }}
deploy:
name: Stack
needs: deployer-db
environment: ${{ inputs.environment }}
runs-on: ubuntu-24.04
outputs:
tag: ${{ inputs.tag || steps.pr.outputs.pr }}
triggered: ${{ steps.deploy.outputs.triggered }}
steps:
- uses: actions/checkout@v4
Variables

Check failure on line 96 in .github/workflows/.deployer.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/.deployer.yml

Invalid workflow file

You have an error in your yaml syntax on line 96
- if: inputs.tag == ''
id: pr
uses: bcgov/[email protected]
- id: vars
run: |
# Vars: tag and release
# Tag defaults to PR number, but can be overridden by inputs.tag
tag=${{ inputs.tag || steps.pr.outputs.pr }}
# Release name includes run numbers to ensure uniqueness
release=${{ github.event.repository.name }}-${{ inputs.environment || steps.pr.outputs.pr || inputs.tag }}
# version, to support helm packaging for non-pr based releases (workflow_dispatch). default to 1.0.0+github run number
version=1.0.0+${{ github.run_number }}
# Summary
echo "tag=${tag}"
echo "release=${release}"
echo "version=${version}"
# Output
echo "tag=${tag}" >> $GITHUB_OUTPUT
echo "release=${release}" >> $GITHUB_OUTPUT
echo "version=${version}" >> $GITHUB_OUTPUT
## Deploy
- name: Stop pre-existing deployments on PRs (status = pending-upgrade)
if: github.event_name == 'pull_request'
uses: bcgov/[email protected]
with:
oc_namespace: ${{ secrets.oc_namespace }}
oc_token: ${{ secrets.oc_token }}
oc_server: ${{ vars.oc_server }}
triggers: ${{ inputs.triggers }}
commands: |
# Interrupt any previous deployments (PR only)
PREVIOUS=$(helm status ${{ steps.vars.outputs.release }} -o json | jq .info.status || true)
if [[ ${PREVIOUS} =~ pending ]]; then
echo "Rollback triggered"
helm rollback ${{ steps.vars.outputs.release }} || \
helm uninstall ${{ steps.vars.outputs.release }}
fi
- name: Helm Deploy
id: deploy
uses: bcgov/action-oc-runner@main
with:
oc_namespace: ${{ secrets.oc_namespace }}
oc_token: ${{ secrets.oc_token }}
oc_server: ${{ vars.oc_server }}
triggers: ${{ inputs.triggers }}
commands: |
# Deploy
# If directory provided, cd to it
[ -z "${{ inputs.directory }}" ]|| cd ${{ inputs.directory }}
# Helm package
sed -i 's/^name:.*/name: ${{ github.event.repository.name }}/' Chart.yaml
helm package -u . --app-version="tag-${{ steps.vars.outputs.tag }}_run-${{ github.run_number }}" --version=${{ steps.pr.outputs.pr || steps.vars.outputs.version }}
# Helm upgrade/rollout
helm upgrade \
--set-string global.repository=${{ github.repository }} \
--set-string global.tag=${{ steps.vars.outputs.tag }} \
--set-string global.config.databaseUser=${{ inputs.db_user }} \
${{ inputs.params }} \
--install --wait ${{ inputs.atomic && '--atomic' || '' }} ${{ steps.vars.outputs.release }} \
--timeout ${{ inputs.timeout-minutes }}m \
--values ${{ inputs.values }} \
./${{ github.event.repository.name }}-${{ steps.pr.outputs.pr || steps.vars.outputs.version }}.tgz
# Helm release history
helm history ${{ steps.vars.outputs.release }}
# Completed pod cleanup
oc delete po --field-selector=status.phase==Succeeded || true
- env:
results: ${{ toJSON(steps.deploy) }}
run: |
# Verify outputs
echo "Outputs: ${{ env.results }}"
if [ "${{ steps.deploy.outputs.triggered }}" != "true" ]; then
echo "Error! Verify outputs."
exit 1
fi