Skip to content

Commit

Permalink
Overhaul Helm deployer
Browse files Browse the repository at this point in the history
  • Loading branch information
DerekRoberts committed Jan 29, 2025
1 parent 579aa1a commit f6c78c4
Showing 1 changed file with 47 additions and 74 deletions.
121 changes: 47 additions & 74 deletions .github/workflows/.deployer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,22 +71,14 @@ jobs:
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest
outputs:
triggered: ${{ steps.triggers.outputs.triggered }}
triggered: ${{ steps.deploy.outputs.triggered }}
steps:
### Triggers, tag and release

# Check triggers (omitted or matched) for deployment
- uses: bcgov/[email protected]
id: triggers
with:
triggers: ${{ inputs.triggers }}

# Variables
- if: steps.triggers.outputs.triggered == 'true' && inputs.tag == ''
id: pr
uses: bcgov/[email protected]
- if: steps.triggers.outputs.triggered == 'true'
- name: Install CLI tools from OpenShift Mirror
id: vars
if: inputs.tag == ''
run: |
# Vars: tag and release
Expand All @@ -110,71 +102,52 @@ jobs:
echo "version=${version}" >> $GITHUB_OUTPUT
### Deploy
- name: Install CLI tools from OpenShift Mirror
- name: Interrupt deployments (PR only)
if: github.event_name == 'pull_request'
uses: bcgov/[email protected]
with:
oc_namespace: ${{ secrets.oc_namespace }}
oc_token: ${{ secrets.oc_token }}
oc_server: ${{ inputs.oc_server }}

# Only stop pre-existing deployments on PRs (status = pending-upgrade)
- if: steps.triggers.outputs.triggered == 'true' && github.event_name == 'pull_request'
run: |
# 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
# Package Helm chart
- if: steps.triggers.outputs.triggered == 'true'
uses: actions/checkout@v4
- if: steps.triggers.outputs.triggered == 'true'
working-directory: ${{ inputs.directory }}
run: |
# 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 }}
# Deploy Helm chart as atomic, with timeout
- if: steps.triggers.outputs.triggered == 'true' && inputs.atomic != 'false'
working-directory: ${{ inputs.directory }}
run: |
# Helm upgrade/rollout - atomic, timeout
helm upgrade \
--set-string global.repository=${{ github.repository }} \
--set-string global.tag=${{ steps.vars.outputs.tag }} \
${{ inputs.params }} \
--install --wait --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
# Deploy Helm chart without atomic or timeout
- if: steps.triggers.outputs.triggered == 'true' && inputs.atomic == 'false'
working-directory: ${{ inputs.directory }}
run: |
# Helm upgrade/rollout - non-atomic, no timeout
helm upgrade \
--set-string global.repository=${{ github.repository }} \
--set-string global.tag=${{ steps.vars.outputs.tag }} \
${{ inputs.params }} \
${{ steps.vars.outputs.release }} \
--install --wait --values ${{ inputs.values }} \
./${{ github.event.repository.name }}-${{ steps.pr.outputs.pr || steps.vars.outputs.version }}.tgz
# Helm release history
- if: steps.triggers.outputs.triggered == 'true'
run: |
# Helm release history
helm history ${{ steps.vars.outputs.release }}
### Cleanup

# Completed pod cleanup
- if: steps.triggers.outputs.triggered == 'true'
run: |
# Completed pod cleanup
oc delete po --field-selector=status.phase==Succeeded || true
triggers: ${{ inputs.triggers }}
commands: |
# Only stop pre-existing deployments on PRs (status = pending-upgrade)
# 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: Deploy Helm chart
id: deploy
uses: bcgov/[email protected]
with:
oc_namespace: ${{ secrets.oc_namespace }}
oc_token: ${{ secrets.oc_token }}
oc_server: ${{ inputs.oc_server }}
triggers: ${{ inputs.triggers }}
commands: |
# Package Helm chart
cd ${{ inputs.directory }}
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 }} \
${{ inputs.params }} \
--install --wait ${{ inputs.atomic == 'true' && '--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

0 comments on commit f6c78c4

Please sign in to comment.