-
Notifications
You must be signed in to change notification settings - Fork 12
170 lines (144 loc) · 5.79 KB
/
xflow-release-docker-image.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
name: "ZXF: Release Docker Image"
on:
push:
tags:
- 'release/v[0-9]+.[0-9]+.[0-9]+-?*'
- 'v[0-9]+.[0-9]+.[0-9]+-?*'
workflow_dispatch:
inputs:
new-version:
description: "New Release Version (ie. 0.30.0):"
type: string
required: true
defaults:
run:
shell: bash
permissions:
id-token: write
contents: read
env:
LC_ALL: C.UTF-8
jobs:
prepare-release:
name: Release / Prepare
runs-on: [ self-hosted, Linux, explorer, standard, ephemeral ]
outputs:
version: ${{ steps.extract.outputs.version }}
steps:
- name: Install Semantic Version Tools
run: |
echo "::group::Download SemVer Binary"
sudo curl -L -o /usr/local/bin/semver https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver
echo "::endgroup::"
echo "::group::Change SemVer Binary Permissions"
sudo chmod -v +x /usr/local/bin/semver
echo "::endgroup::"
echo "::group::Show SemVer Binary Version Info"
semver --version
echo "::endgroup::"
- name: Validate Version
run: |
VALID_VERSION="$(semver validate "${{ inputs.new-version || github.ref_name }}")"
if [[ "${VALID_VERSION}" != "valid" ]]; then
echo "::error title=Version Error::The supplied new-version parameter of '${{ inputs.new_version || github.ref_name }}' is invalid and does not conform to the semantic versioning specifications."
exit 2
fi
- name: Extract Version
id: extract
run: |
RELEASE_VERSION="$(semver get release "${{ inputs.new-version || github.ref_name }}")"
PRERELEASE_VERSION="$(semver get prerel "${{ inputs.new-version || github.ref_name }}")"
FINAL_VERSION="${RELEASE_VERSION}"
[[ -n "${PRERELEASE_VERSION}" ]] && FINAL_VERSION="${RELEASE_VERSION}-${PRERELEASE_VERSION}"
echo "version=${FINAL_VERSION}" >>"${GITHUB_OUTPUT}"
deploy-docker-image:
name: Deploy / Docker / Image
runs-on: [ self-hosted, Linux, explorer, standard, ephemeral ]
needs:
- prepare-release
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Install JSON Tools
run: |
if ! command -v jq >/dev/null 2>&1; then
echo "::group::Setup JQ Command"
sudo apt update
sudo apt install -y jq
echo "::endgroup::"
fi
JQ_VERSION="$(jq --version)"
if [[ "${JQ_VERSION}" != "jq-1.6" ]]; then
echo "::group::Updating JQ Version"
sudo apt update
sudo apt upgrade -y jq
echo "::endgroup::"
fi
if ! command -v tee >/dev/null 2>&1; then
echo "::group::Setup Tee Command"
sudo apt update
sudo apt install -y coreutils
echo "::endgroup::"
fi
echo "::group::Show JQ Version"
jq --version
echo "::endgroup::"
- name: Update Application Version
run: |
cat package.json | \
jq --arg version "${{ needs.prepare-release.outputs.version }}" '.version = $version' | \
tee package.json
- name: Setup NodeJS
uses: actions/setup-node@v3
with:
node-version: 19
cache: npm
- name: Authenticate to Google Cloud
id: google-auth
uses: google-github-actions/auth@v1
with:
workload_identity_provider: 'projects/101730247931/locations/global/workloadIdentityPools/hedera-registry-pool/providers/hedera-registry-gh-actions'
service_account: 'swirlds-automation@hedera-registry.iam.gserviceaccount.com'
token_format: access_token
- name: Setup Docker Buildx QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Authorize Docker
uses: docker/login-action@v2
with:
registry: gcr.io
username: oauth2accesstoken
password: ${{ steps.google-auth.outputs.access_token }}
- name: Install Dependencies
run: npm ci
- name: Compile Code
run: npm run build
- name: Build and Push Image
uses: docker/build-push-action@v3
with:
push: true
file: Dockerfile
context: .
platforms: |
linux/arm64
linux/amd64
tags: |
gcr.io/hedera-registry/hedera-mirror-node-explorer:${{ needs.prepare-release.outputs.version }}
gcr.io/hedera-registry/hedera-mirror-node-explorer:latest
- name: Render Job Summary
run: |
printf "### Published Docker Images\n" >> "${GITHUB_STEP_SUMMARY}"
printf "| Image Name | Version | URL | Supported Architectures |\n" >> "${GITHUB_STEP_SUMMARY}"
printf "| ---------- | ------- | --- | ----------------------- |\n" >> "${GITHUB_STEP_SUMMARY}"
printf "| %s | %s | %s | %s |\n" \
"gcr.io/hedera-regsitry/hedera-mirror-node-explorer" \
"${{ needs.prepare-release.outputs.version }}" \
"[GCP Console](https://console.cloud.google.com/gcr/images/hedera-registry/global/hedera-mirror-node-explorer?project=hedera-registry)" \
"linux/amd64, linux/arm64" >> "${GITHUB_STEP_SUMMARY}"
printf "| %s | %s | %s | %s |\n" \
"gcr.io/hedera-regsitry/hedera-mirror-node-explorer" \
"latest" \
"[GCP Console](https://console.cloud.google.com/gcr/images/hedera-registry/global/hedera-mirror-node-explorer?project=hedera-registry)" \
"linux/amd64, linux/arm64" >> "${GITHUB_STEP_SUMMARY}"
printf "\n\n" >> "${GITHUB_STEP_SUMMARY}"