-
Notifications
You must be signed in to change notification settings - Fork 14
196 lines (184 loc) · 8.76 KB
/
reusable.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
name: Reusable Uffizzi Preview Workflow
on:
workflow_call:
inputs:
compose-file-cache-key:
description: "GHA Cache Key for Docker Compose file ready to deploy"
required: true
type: string
compose-file-cache-path:
description: "GHA Cache Path for Docker Compose file ready to deploy"
required: true
type: string
username:
description: "Uffizzi username for login, usually an email address"
required: true
type: string
server:
description: "Uffizzi server URL"
default: https://app.uffizzi.com
required: false
type: string
project:
description: "Uffizzi project name"
default: default
required: false
type: string
secrets:
password:
description: "Uffizzi password for login"
required: true
url-username:
description: "Username for authenticating to each Environment"
required: false
url-password:
description: "Password for authentication to each Environment"
required: false
personal-access-token:
description: "GitHub personal access token with access to container registry"
required: false
outputs:
url:
description: "URL to Uffizzi Preview Environment"
value: ${{ jobs.uffizzi-preview.outputs.url }}
id:
description: "Uffizzi Preview Deployment ID"
value: ${{ jobs.uffizzi-preview.outputs.id }}
permissions:
contents: read
pull-requests: write
jobs:
uffizzi-preview:
name: "Create, Update, or Delete Preview on Uffizzi"
runs-on: ubuntu-20.04
outputs:
url: ${{ steps.preview.outputs.url }}
id: ${{ steps.preview.outputs.id }}
steps:
# If PR event, look for an existing Preview Deployment.
- name: Find comment for deployment URL
uses: peter-evans/find-comment@v2
if: github.event_name == 'pull_request'
id: find-comment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: 'Uffizzi Preview ID:'
direction: last
- name: Parse Comment for Preview Deployment ID
id: parse-comment
if: ${{ steps.find-comment.outputs.comment-id != '' }}
# voodoo
run: 'echo ''${{ steps.find-comment.outputs.comment-body }}'' | sed -n "s/Uffizzi Preview ID: \`\(\S*\)\`/::set-output name=id::\1/p"'
- name: DEBUG - Echo deployment ID
run: 'echo ${{ steps.parse-comment.outputs.id }}'
- name: Delete Preview from Uffizzi
if: ${{ github.event.action == 'closed' && steps.parse-comment.outputs.id != '' }}
uses: UffizziCloud/delete-preview-action@v1.0.0
with:
id: ${{ steps.parse-comment.outputs.id }}
username: ${{ inputs.username }}
server: ${{ inputs.server }}
project: ${{ inputs.project }}
password: ${{ secrets.password }}
- name: Update comment with deletion.
uses: peter-evans/create-or-update-comment@v2
if: ${{ github.event_name == 'pull_request' && github.event.action == 'closed' }}
with:
comment-id: ${{ steps.find-comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
Uffizzi Preview `${{ steps.parse-comment.outputs.id }}` was deleted.
edit-mode: replace
- name: Fetch cached Compose File
id: cache
if: ${{ github.event.action != 'closed' }}
uses: actions/cache@v3
with:
path: ${{ inputs.compose-file-cache-path }}
key: ${{ inputs.compose-file-cache-key }}
- name: Deploy New Preview
id: create-preview
if: ${{ steps.find-comment.outputs.comment-id == '' && github.event.action != 'closed' }}
uses: UffizziCloud/preview-action@v2
with:
compose-file: ${{ inputs.compose-file-cache-path }}
username: ${{ inputs.username }}
server: ${{ inputs.server }}
project: ${{ inputs.project }}
password: ${{ secrets.password }}
ghcr-username: ${{ github.actor }}
ghcr-access-token: ${{ secrets.personal-access-token }}
- name: Check outputs
if: ${{ steps.find-comment.outputs.comment-id == '' && github.event.action != 'closed' }}
run: echo "${{ steps.create-preview.outputs.id }} at ${{ steps.create-preview.outputs.url }}"
- name: Check if URL Authentication is in use
# GHA limitation workaround https://github.com/actions/runner/issues/520#issuecomment-700579336
id: url-auth-for-create
shell: bash
run: if [ -z "${{ secrets.url-password }}" ]; then echo "No URL authentication."; else echo '::set-output name=enabled::true'; fi
- name: Confirm Successful Preview Deployment
if: ${{ steps.find-comment.outputs.comment-id == '' && github.event.action != 'closed' && steps.url-auth-for-create.outputs.enabled == '' }}
uses: docker://curlimages/curl:7.84.0
with:
args: --retry 12 --retry-all-errors --retry-delay 0 --fail --location ${{ steps.create-preview.outputs.url }}
- name: Confirm Successful Preview Deployment with Authentication
if: ${{ steps.find-comment.outputs.comment-id == '' && github.event.action != 'closed' && steps.url-auth-for-create.outputs.enabled == 'true' }}
uses: docker://curlimages/curl:7.84.0
with:
args: --basic --user ${{ secrets.url-username }}:${{ secrets.url-password }} --retry 12 --retry-all-errors --retry-delay 0 --fail --location ${{ steps.create-preview.outputs.url }}
- name: Create or update comment for deployment URL
uses: peter-evans/create-or-update-comment@v2
if: ${{ steps.find-comment.outputs.comment-id == '' && github.event.action != 'closed' }}
with:
comment-id: ${{ steps.find-comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
Uffizzi Preview deployed at URL:
${{ steps.create-preview.outputs.url }}
Uffizzi Preview ID: `${{ steps.create-preview.outputs.id }}`
edit-mode: replace
reactions: rocket
- name: Update Existing Preview
uses: UffizziCloud/update-preview-action@v1
id: update-preview
if: ${{ steps.parse-comment.outputs.id != '' && github.event.action != 'closed' }}
with:
preview-id: ${{ steps.parse-comment.outputs.id }}
compose-file: ${{ inputs.compose-file-cache-path }}
username: ${{ inputs.username }}
server: ${{ inputs.server }}
project: ${{ inputs.project }}
password: ${{ secrets.password }}
ghcr-username: ${{ github.actor }}
ghcr-access-token: ${{ secrets.personal-access-token }}
- name: Check outputs
if: ${{ steps.parse-comment.outputs.id != '' && github.event.action != 'closed' }}
run: echo "${{ steps.update-preview.outputs.id }} at ${{ steps.update-preview.outputs.url }}"
- name: Check if URL Authentication is in use
# GHA limitation workaround https://github.com/actions/runner/issues/520#issuecomment-700579336
id: url-auth-for-update
shell: bash
run: if [ -z "${{ secrets.url-password }}" ]; then echo "No URL authentication."; else echo '::set-output name=enabled::true'; fi
- name: Confirm Successful Preview Deployment
if: ${{ steps.parse-comment.outputs.id != '' && github.event.action != 'closed' && steps.url-auth-for-update.outputs.enabled == '' }}
uses: docker://curlimages/curl:7.84.0
with:
args: --retry 12 --retry-all-errors --retry-delay 0 --fail --location ${{ steps.update-preview.outputs.url }}
- name: Confirm Successful Preview Deployment with Authentication
if: ${{ steps.parse-comment.outputs.id != '' && github.event.action != 'closed' && steps.url-auth-for-update.outputs.enabled == 'true' }}
uses: docker://curlimages/curl:7.84.0
with:
args: --basic --user ${{ secrets.url-username }}:${{ secrets.url-password }} --retry 12 --retry-all-errors --retry-delay 0 --fail --location ${{ steps.update-preview.outputs.url }}
- name: Create or update comment for deployment URL
uses: peter-evans/create-or-update-comment@v2
if: ${{ steps.parse-comment.outputs.id != '' && github.event.action != 'closed' }}
with:
comment-id: ${{ steps.find-comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
Uffizzi Preview updated at URL:
${{ steps.update-preview.outputs.url }}
Uffizzi Preview ID: `${{ steps.update-preview.outputs.id }}`
edit-mode: replace
reactions: '+1'