-
Notifications
You must be signed in to change notification settings - Fork 0
148 lines (131 loc) · 5.46 KB
/
helm-release.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
---
name: Release Prefect Operator Helm Chart
"on":
workflow_call:
inputs:
mode:
description: which CI/CD mode?
type: string
required: true
permissions: {}
jobs:
release:
name: Release Helm Chart
runs-on: ubuntu-latest
permissions:
# GitHub considers creating releases and uploading assets as writing contents.
contents: write
outputs:
releaseVersion: ${{ steps.output_versions.outputs.releaseVersion }}
operatorVersion: ${{ steps.output_versions.outputs.operatorVersion }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# We set the chart release version here - the version schema
# is a SemVer adherent date-based versioning scheme that looks like:
# 2024.2.9125019
# which equates to a release on 2/9/24 at 12:50:19
- name: Get the version tags
id: get_version
run: |
# Exit if any commands fail, so git command failures do not result in null versions downstream
set -e
if [ "${{ inputs.mode }}" == "main-merge" ]; then
# append "-dev" to the version so that it's clear that this is a development release
echo "RELEASE_VERSION=$(date +'%Y.%-m.%-d%H%M%S')-dev" >> $GITHUB_ENV
# get the short sha of the latest commit for the operator image
short_sha="$(git rev-parse --short=7 HEAD)"
echo "OPERATOR_VERSION=$short_sha" >> "$GITHUB_ENV"
elif [[ "${{ inputs.mode }}" == "release" ]]; then
echo "RELEASE_VERSION=$(date +'%Y.%-m.%-d%H%M%S')" >> $GITHUB_ENV
# This ensures that the latest tag we grab will be of the operator image, and not the helm chart
echo "OPERATOR_VERSION=$(\
git ls-remote --tags --refs --sort="v:refname" \
origin 'v[0-9].[0-9].[0-9]' | tail -n1 | sed 's/.*\///'
)" >> $GITHUB_ENV
else
echo "Invalid mode: ${{ inputs.mode }}"
exit 1
fi
- name: Output versions as GitHub Outputs
id: output_versions
run: |
echo "releaseVersion=$RELEASE_VERSION" >> $GITHUB_OUTPUT
echo "operatorVersion=$OPERATOR_VERSION" >> $GITHUB_OUTPUT
- name: Configure Git
run: |
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
- name: Set up Helm
uses: azure/setup-helm@v4
- name: Prepare GPG key for signing
run: |
gpg_dir=/tmp/.gpg
mkdir "$gpg_dir"
keyring="$gpg_dir/secring.gpg"
# store the secret keyring in a .gpg file
base64 -d <<< "$GPG_KEYRING_BASE64" > "$keyring"
passphrase_file="$gpg_dir/passphrase"
# store passphrase in a file
echo "$GPG_PASSPHRASE" > "$passphrase_file"
echo "SIGN_PASSPHRASE_FILE=$passphrase_file" >> $GITHUB_ENV
echo "SIGN_KEYRING=$keyring" >> $GITHUB_ENV
env:
GPG_KEYRING_BASE64: ${{ secrets.GPG_KEYRING_BASE64 }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
- name: Add dependency chart repos
run: |
helm repo add bitnami https://charts.bitnami.com/bitnami
- name: Package Operator helm chart
run: |
mkdir -p /tmp/chart
cd deploy/charts
# Update the operator version tag in values.yaml
sed -i "s/tag:.*$/tag: $OPERATOR_VERSION/g" prefect-operator/values.yaml
helm package prefect-operator \
--destination /tmp/chart \
--dependency-update \
--version $RELEASE_VERSION \
--app-version v$OPERATOR_VERSION \
--sign --key '[email protected]' \
--keyring $SIGN_KEYRING \
--passphrase-file $SIGN_PASSPHRASE_FILE
- name: Update chart index
run: |
git stash # Stash changes to the values.yaml so checkout doesn't complain
git checkout gh-pages
helm repo index /tmp/chart --url https://prefecthq.github.io/prefect-operator/charts --merge ./index.yaml
- name: Commit and push
run: |
cp /tmp/chart/index.yaml .
cp /tmp/chart/prefect-operator-${RELEASE_VERSION}.* ./charts
git add ./index.yaml ./charts/prefect-operator-$RELEASE_VERSION.* ./charts/
git commit -m "Release $RELEASE_VERSION"
git push origin gh-pages
- name: Create Github Release + Tag
run: |
gh release create $RELEASE_VERSION \
--title $RELEASE_VERSION \
--latest=false \
--notes "Packaged with prefect-operator version \
[v$OPERATOR_VERSION](https://github.com/PrefectHQ/prefect-operator/releases/tag/v$OPERATOR_VERSION)"
env:
GH_TOKEN: ${{ github.token }}
update_helm_chart_version_downstream:
name: Update Helm Chart version & image version in `cloud2-cluster-deployment`
needs: release
runs-on: ubuntu-latest
steps:
- name: Run workflow
run: |
gh workflow run update-operator-versions.yaml \
--repo prefecthq/cloud2-cluster-deployment \
--ref main \
-f image_version=${{ needs.release.outputs.operatorVersion }} \
-f chart_version=${{ needs.release.outputs.releaseVersion }} \
-f mode=${{ inputs.mode }} \
-f operator=prefect-operator
env:
GH_TOKEN: ${{ secrets.CLOUD2_CLUSTER_DEPLOYMENT_ACTIONS_RW }}