-
Notifications
You must be signed in to change notification settings - Fork 0
94 lines (79 loc) · 3.96 KB
/
deploy.yaml
File metadata and controls
94 lines (79 loc) · 3.96 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
name: Deploy Service
on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to deploy'
required: true
default: 'dev'
services:
description: 'Services to deploy (space seperated)'
required: true
repository_dispatch:
types:
- deploy-trigger
jobs:
validate_environments:
runs-on: ubuntu-latest
outputs:
validate_environments: ${{ steps.validate_environments.outputs.validate_environments }}
steps:
- name: Validate environment
id: validate_environments
run: |
CLIENT_PAYLOAD_ENVIRONMENT='${{ toJson(github.event.client_payload.environment) }}'
# Write the secret to a temporary file
echo '${{ secrets.PERMIT_AUTO_DEPLOY }}' > permit_auto_deploy.json
PERMIT_AUTO_DEPLOY=$(cat permit_auto_deploy.json)
echo "PERMIT_AUTO_DEPLOY: $PERMIT_AUTO_DEPLOY"
# Find common values using jq
VALIDATED_ENVIRONMENTS=$(jq -n --argjson client "$CLIENT_PAYLOAD_ENVIRONMENT" --argjson allow "$PERMIT_AUTO_DEPLOY" \
'[ $client[] | select($allow[] == .) ]' | jq -c '.')
# Setting to dev if no common environment found
if [ "$VALIDATED_ENVIRONMENTS" == "" ]; then
VALIDATED_ENVIRONMENTS='["dev"]'
fi
echo "VALIDATED_ENVIRONMENTS: $VALIDATED_ENVIRONMENTS"
# Export environment variable and write to file
echo "validated_environments=$VALIDATED_ENVIRONMENTS" >> $GITHUB_OUTPUT
deployment:
runs-on: ubuntu-latest
needs: validate_environments
strategy:
matrix:
env: ${{ fromJson(needs.validate_environments.outputs.validated_environments) }}
name: Deploy ${{ inputs.services || github.event.client_payload.services }} in ${{inputs.environment || matrix.env }}
steps:
- name: Uppercase environment
run: |
echo "ENV=`echo ${{ inputs.environment || matrix.env }} | tr '[:lower:]' '[:upper:]'`" >>${GITHUB_ENV}
- name: Set Default Values to Repository Variable
run: |
if [ "${{ github.event_name }}" == "repository_dispatch" ]; then
echo "ENABLE_FORCE_RECREATE=0" >> ${GITHUB_ENV}
else
echo "ENABLE_FORCE_RECREATE=${{ vars.ENABLE_FORCE_RECREATE || 1 }}" >> ${GITHUB_ENV}
fi
echo "DISABLE_REMOVE_ORPHANS=${{ vars.DISABLE_REMOVE_ORPHANS || 0 }}" >> ${GITHUB_ENV}
echo "DISABLE_ANSI=${{ vars.DISABLE_ANSI || 1 }}" >> ${GITHUB_ENV}
echo "ENABLE_GIT_PULL=${{ vars.ENABLE_GIT_PULL || 1 }}" >> ${GITHUB_ENV}
- name: call-webhook
run: |
if [ -z "${{ secrets[format('{0}_WEBHOOK_PASSWORD',env.ENV)] }}" ]; then
echo "::error::Secret '${{ format('{0}_WEBHOOK_PASSWORD',env.ENV) }}' is not set"
exit 1
fi
if [ -z "${{ secrets[format('{0}_WEBHOOK_URL',env.ENV)] }}" ]; then
echo "::error::Secret '${{ format('{0}_WEBHOOK_URL',env.ENV) }}' is not set"
exit 1
fi
if [ -z "${{ github.event.inputs.services || github.event.client_payload.services }}" ]; then
echo "::error::'${{ github.event.inputs.services || github.event.client_payload.services }}' is empty"
exit 1
fi
encoded_services=$(python3 -c "from urllib.parse import quote; print(quote('${{ github.event.inputs.services || github.event.client_payload.services}}'))")
curl -X POST \
--fail-with-body -sS --no-buffer\
-H "Content-Type: application/json" \
-d '{"secret_token": "${{ secrets[format('{0}_WEBHOOK_PASSWORD',env.ENV)] }}", "ENABLE_FORCE_RECREATE":${{ env.ENABLE_FORCE_RECREATE }}, "DISABLE_REMOVE_ORPHANS":${{ env.DISABLE_REMOVE_ORPHANS }}, "DISABLE_ANSI":${{ env.DISABLE_ANSI }} ,"ENABLE_GIT_PULL":${{ env.ENABLE_GIT_PULL }}}' \
"${{ secrets[format('{0}_WEBHOOK_URL',env.ENV)] }}/hooks/deploy?services=$encoded_services"