-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaction.yaml
74 lines (71 loc) · 2.88 KB
/
action.yaml
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: 'Set Helm Tags'
description: 'Setting application version tags (e.g. for docker image versions) in (e.g. Helm) configuration files for different deployment phases (e.g. dev/stage/prod).'
inputs:
app:
description: 'Application to change all version tags for e.g. application docker images in a configuration file (e.g. Helm values files)'
required: true
phase:
description: 'Deployment phase (dev/stage/prod/ignore). In mode single the user is free to use whatever name suits except for ignore.'
required: true
default: 'dev'
prefix:
description: 'File prefix of configuration file (default: values-)'
required: true
default: 'values-'
tag:
description: 'Version tag to use'
required: true
hash:
description: 'Version digest hash. The digest will be edited in the configuration file(s) if present.'
required: false
default: 'null'
working-directory:
description: 'working directory'
required: false
default: './'
mode:
# Currently, 'cascade' can only handle phases dev/stage/prod excplicitely. Whereas the user is free to use whatever suits as phase name in mode 'single'.
description: 'Whether to cascade or not. When cascading, prod will be deployed to all three stages, stage to stage and dev, and dev to dev only.'
default: "cascade"
required: true
delimiter:
description: 'Delimiter as regex between application and version tag. Default :\s (e.g. [app]: [tag]). If you use yaml defaults the delimiter will be \s only.'
required: true
default: ": "
runs:
using: "composite"
steps:
- shell: bash
working-directory: ${{ inputs.working-directory }}
run: |
echo "Mode: ${{ inputs.mode }}"
echo "Phase: ${{ inputs.phase }}"
echo "App: ${{ inputs.app }}"
echo "Delimiter: ${{ inputs.delimiter }}"
echo "Tag: ${{ inputs.tag }}"
echo "Digest hash: ${{ inputs.hash }}"
echo "Prefix: ${{ inputs.prefix }}"
# 1: phase, 2: tgt
function set_version() {
# Edit tag
sed -i 's/${{ inputs.app }}-tag${{ inputs.delimiter }}.*$/${{ inputs.app }}-tag ${{ inputs.tag }}/g' ${{ inputs.prefix }}$1.yaml
# Edit digest hash
sed -i 's/${{ inputs.app }}-hash${{ inputs.delimiter }}.*$/${{ inputs.app }}-hash ${{ inputs.hash }}/g' ${{ inputs.prefix }}$1.yaml
}
if [[ "${{ inputs.phase }}" == "ignore" ]]; then
exit 0
fi
if [[ "${{ inputs.mode }}" == "cascade" ]]; then
echo "Cascading"
if [[ "${{ inputs.phase }}" =~ ^(dev|stage|prod)$ ]]; then
set_version dev
fi
if [[ "${{ inputs.phase }}" =~ ^(stage|prod)$ ]]; then
set_version stage
fi
if [[ "${{ inputs.phase }}" == "prod" ]]; then
set_version prod
fi
else
set_version ${{ inputs.phase }}
fi