-
Notifications
You must be signed in to change notification settings - Fork 1
155 lines (143 loc) · 5.06 KB
/
build-and-push-image.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
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
name: Deploy to environment
on:
push:
branches:
- main
- staging
workflow_dispatch:
inputs:
environment:
type: environment
description: "Choose an environment to deploy to"
default: dev
required: true
concurrency:
group: ${{ github.workflow }}-${{ github.event.inputs.environment }}-${{ github.ref_name }}
jobs:
set-env:
name: Determine environment
runs-on: ubuntu-latest
outputs:
environment: ${{ steps.environment.outputs.environment }}
branch: ${{ steps.branch.outputs.branch }}
release: ${{ steps.release.outputs.release }}
checked-out-sha: ${{ steps.sha.outputs.checked-out-sha }}
steps:
- name: Checkout
uses: actions/checkout@v4
- id: sha
name: Set SHA
run: |
CHECKED_OUT_SHA="$(git log -1 '--format=format:%H')"
echo "checked-out-sha=${CHECKED_OUT_SHA}" >> $GITHUB_OUTPUT
- id: branch
name: Set branch name
run: |
GIT_REF=${{ github.ref_name }}
GIT_BRANCH=${GIT_REF##*/}
echo "branch=$GIT_BRANCH" >> $GITHUB_OUTPUT
- id: environment
name: Set default environment
run: |
BRANCH=${{ steps.branch.outputs.branch }}
ENVIRONMENT=${{ github.event.inputs.environment }}
# If no target environment is defined...
if [[ -z $ENVIRONMENT ]];
then
# Then it must be a Push event trigger
if [[ $BRANCH == 'main' ]];
then
# Set target environment to production
ENVIRONMENT='production'
elif [[ $BRANCH == 'staging' ]];
then
# Set target environment to staging
ENVIRONMENT='staging'
else
# Only main and staging branches can auto-deploy via push trigger
# Exit with failure
echo "Only 'main' and 'staging' branches can be deployed via a push trigger"
exit 1
fi
fi
echo "environment=${ENVIRONMENT,,}" >> $GITHUB_OUTPUT
- id: release
name: Set release name
run: |
RELEASE=${{ steps.environment.outputs.environment }}-`date +%Y-%m-%d`.${{ github.run_number }}
echo "release=${RELEASE}" >> $GITHUB_OUTPUT
deploy-image:
permissions:
id-token: write
contents: read
packages: write
name: Deploy '${{ needs.set-env.outputs.branch }}' to ${{ needs.set-env.outputs.environment }}
needs: [ set-env ]
strategy:
matrix:
stage: [
"final",
"initcontainer"
]
include:
- stage: "final"
tag-prefix: ""
- stage: "initcontainer"
tag-prefix: "init-"
uses: DFE-Digital/deploy-azure-container-apps-action/.github/workflows/[email protected]
with:
docker-image-name: 'amsd-app'
docker-build-target: ${{ matrix.stage }}
docker-build-file-name: './Dockerfile'
docker-tag-prefix: ${{ matrix.tag-prefix }}
import-without-deploy: ${{ matrix.stage == 'initcontainer' }}
environment: ${{ needs.set-env.outputs.environment }}
annotate-release: true
docker-build-args: |
COMMIT_SHA="${{ needs.set-env.outputs.checked-out-sha }}"
secrets:
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
azure-subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
azure-acr-client-id: ${{ secrets.ACR_CLIENT_ID }}
azure-acr-name: ${{ secrets.ACR_NAME }}
azure-aca-client-id: ${{ secrets.ACA_CLIENT_ID }}
azure-aca-name: ${{ secrets.ACA_CONTAINERAPP_NAME }}
azure-aca-resource-group: ${{ secrets.ACA_RESOURCE_GROUP }}
create-tag:
name: Tag and release
needs: set-env
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
- name: Create tag
run: |
git tag ${{ needs.set-env.outputs.release }}
git push origin ${{ needs.set-env.outputs.release }}
- name: Create release
uses: "actions/github-script@v7"
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
script: |
try {
await github.rest.repos.createRelease({
draft: ${{ needs.set-env.outputs.environment == 'staging' }},
generate_release_notes: true,
name: "${{ needs.set-env.outputs.release }}",
owner: context.repo.owner,
prerelease: ${{ needs.set-env.outputs.environment == 'staging' }},
repo: context.repo.repo,
tag_name: "${{ needs.set-env.outputs.release }}",
});
} catch (error) {
core.setFailed(error.message);
}
cypress-tests:
name: Run Cypress Tests
if: needs.set-env.outputs.environment == 'staging' || needs.set-env.outputs.environment == 'dev'
needs: [ deploy-image, set-env ]
uses: ./.github/workflows/cypress-tests.yml
with:
environment: ${{ needs.set-env.outputs.environment }}
secrets: inherit