-
Notifications
You must be signed in to change notification settings - Fork 1
119 lines (114 loc) · 4.27 KB
/
release.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
name: 'Release'
run-name: 'Cut Release ${{ github.event.release.tag_name || github.event.inputs.release-tag}}'
concurrency:
group: ${{github.workflow}}-${{github.ref}}
cancel-in-progress: true
on:
release:
types: [published]
workflow_dispatch:
inputs:
release-tag:
description: 'Release tag ([servicename-]v#.#.#[-rc#])'
required: true
env:
FULL_TAG: ${{ github.event.release.tag_name || github.event.inputs.release-tag}}
DOCKER_HUB_PROFILE: projectlibertylabs
ALL_SERVICES: '["account", "content-publishing", "content-watcher", "graph"]'
jobs:
set_variables:
runs-on: ubuntu-latest
outputs:
full_tag: ${{ steps.set_version_tag.outputs.TAG }}
version_tag: ${{ steps.set_version_tag.outputs.VERSION }}
service_name: ${{ steps.set_version_tag.outputs.SERVICE }}
service_matrix: ${{ steps.set_version_tag.outputs.SERVICE_MATRIX }}
valid_semver: ${{ steps.set_version_tag.outputs.valid }}
test_run: ${{ steps.set_version_tag.outputs.test_run }}
steps:
- name: Extract and Validate Version Tag
id: set_version_tag
run: |
valid=false
test_run=false
ENTIRE_TAG_RE="^(([[:alpha:]\-]+)-)?(.*)$"
VERSION_TAG_RE="^v[\.]?([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-[[:alpha:][:digit:]\.]+)*)$"
TAG="${{ github.event.release.tag_name }}"
echo "Running with tag: ${TAG}"
if [[ "$TAG" =~ ${ENTIRE_TAG_RE} ]] ; then
SERVICE=${BASH_REMATCH[2]}
VERSION_TAG=${BASH_REMATCH[3]}
if [[ ${VERSION_TAG} =~ ${VERSION_TAG_RE} ]] ; then
version=${BASH_REMATCH[1]}
valid=true
if [[ ${version} = "0.0.1" ]] ; then
test_run=true
fi
if [[ -z "${SERVICE}" ]] ; then
SERVICE_MATRIX="${ALL_SERVICES}"
else
SERVICE_MATRIX="[\"${SERVICE}\"]"
fi
echo "TAG=${TAG}" >> $GITHUB_OUTPUT
echo "VERSION=${VERSION_TAG}" >> $GITHUB_OUTPUT
echo "SERVICE=${SERVICE}" >> $GITHUB_OUTPUT
echo "SERVICE_MATRIX=${SERVICE_MATRIX}" >> $GITHUB_OUTPUT
echo "valid=${valid}" >> $GITHUB_OUTPUT
echo "test_run=${test_run}" >> $GITHUB_OUTPUT
fi
fi
if [[ "${valid}" = false ]]
then
echo "SERVICE_MATRIX=[]" >> $GITHUB_OUTPUT
echo "valid=${valid}" >> $GITHUB_OUTPUT
echo "Release tag '${TAG}' is not valid for deployment."
echo "ERROR: Entered tag ${TAG} is not valid."
echo "Please use [service-]v#.#.#[-rc#] format."
exit 1
fi
build-and-publish-container-image:
name: Build and publish container image
needs: set_variables
runs-on: ubuntu-latest
if: needs.set_variables.outputs.valid_semver == 'true'
strategy:
matrix:
service: ${{ fromJson(needs.set_variables.outputs.service_matrix) }}
steps:
- name: Check Out Repo
uses: actions/checkout@v4
with:
ref: ${{ needs.set_variables.outputs.full_tag }}
- name: Deploy Service
run: |
echo "Deploying service: ${{ matrix.service }}"
- name: Set up tags for cp image
id: cp-tags
uses: docker/metadata-action@v5
with:
flavor: |
latest=auto
images: |
${{env.DOCKER_HUB_PROFILE}}/${{matrix.service}}-service
tags: |
type=semver,pattern={{version}},value=${{ needs.set_variables.outputs.version_tag }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: |
linux/amd64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
- name: Build and Push Docker Image
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64
push: ${{ needs.set_variables.outputs.test_run != 'true'}}
file: Docker/Dockerfile.${{ matrix.service }}
tags: ${{ steps.cp-tags.outputs.tags }}