-
Notifications
You must be signed in to change notification settings - Fork 0
/
action.yml
73 lines (73 loc) · 2.45 KB
/
action.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
name: 'deploy app'
description: 'deploy application to the DOKS cluster'
inputs:
sha:
description: 'commit SHA'
required: true
app:
description: 'app version'
required: false
default: ''
environment:
description: 'environment name'
required: true
namespace:
description: 'k8s namespace'
required: true
deployment:
description: 'deployment name'
required: true
migrations:
description: 'migration job name'
required: false
default: ''
do-access-token:
description: 'DO access token'
required: true
cluster:
description: 'DOKS cluster name or ID'
required: true
kubectl:
description: 'kubectl version tag'
required: false
default: 'latest'
runs:
using: "composite"
steps:
- uses: digitalocean/action-doctl@v2
with:
token: ${{ inputs.do-access-token }}
- name: create temporary container
run: docker create --name kubectl ghcr.io/medius-pro/kubectl:${{ inputs.kubectl }} /medius-kubectl
shell: bash
- name: copy binary
run: docker cp kubectl:/medius-kubectl /usr/local/bin/doks
shell: bash
- name: set cluster config context
run: doctl kubernetes cluster kubeconfig save --expiry-seconds 600 ${{ inputs.cluster }}
shell: bash
- name: apply deployment
env:
COMMIT_SHA: ${{ inputs.sha }}
APP_VERSION: ${{ inputs.app }}
run: envsubst < .github/k8s/${{ inputs.environment }}.yaml | doks apply -f -
shell: bash
- name: wait for deployment to complete
run: doks -n ${{ inputs.namespace }} rollout status deployment/${{ inputs.deployment }}
shell: bash
- name: wait for migrations job to complete
if: inputs.migrations != ''
run: doks -n ${{ inputs.namespace }} wait --for=condition=Complete --timeout=30s job "${{ inputs.migrations }}" -o=jsonpath='{.status.conditions[*].type}' | grep -q Complete || exit 1
id: migrations
continue-on-error: true
shell: bash
- name: get logs from migrations job
if: success() && inputs.migrations != ''
run: doks -n ${{ inputs.namespace }} logs $(doks -n ${{ inputs.namespace }} get pod -l controller-uid=$(doks -n ${{ inputs.namespace }} get job "${{ inputs.migrations }}" -o "jsonpath={.metadata.labels.controller-uid}") -o name)
shell: bash
- name: throw an error if migrations job failed
if: failure() && steps.migrations.conclusion == 'failure' && inputs.migrations != ''
run: |
echo "database migration error"
exit 1
shell: bash