1
1
---
2
- name : release-please
2
+ name : Unified Release
3
3
4
4
on :
5
5
push :
@@ -20,16 +20,60 @@ jobs:
20
20
release_created : ${{ steps.release-please.outputs.release_created }}
21
21
tag_name : ${{ steps.release-please.outputs.tag_name }}
22
22
version : ${{ steps.release-please.outputs.version }}
23
+ major : ${{ steps.release-please.outputs.major }}
24
+ minor : ${{ steps.release-please.outputs.minor }}
25
+ patch : ${{ steps.release-please.outputs.patch }}
23
26
steps :
24
27
- name : Release Please
25
28
id : release-please
26
29
uses : googleapis/release-please-action@a02a34c4d625f9be7cb89156071d8567266a2445 # v4.2.0
27
30
with :
28
31
token : ${{ secrets.WEAVE_GITOPS_BOT_ACCESS_TOKEN }}
29
32
30
- publish-npm-package :
33
+ validate-versions :
31
34
needs : release-please
32
35
runs-on : ubuntu-latest
36
+ if : " ${{ needs.release-please.outputs.release_created }}"
37
+ steps :
38
+ - name : Checkout
39
+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
40
+
41
+ - name : Validate chart version synchronization
42
+ run : |
43
+ APP_VERSION="${{ needs.release-please.outputs.version }}"
44
+ CHART_APP_VERSION=$(yq e '.appVersion' charts/gitops-server/Chart.yaml)
45
+ CHART_VERSION=$(yq e '.version' charts/gitops-server/Chart.yaml)
46
+ IMAGE_TAG=$(yq e '.image.tag' charts/gitops-server/values.yaml)
47
+
48
+ echo "Application Version: $APP_VERSION"
49
+ echo "Chart AppVersion: $CHART_APP_VERSION"
50
+ echo "Chart Version: $CHART_VERSION"
51
+ echo "Image Tag: $IMAGE_TAG"
52
+
53
+ # Validate that chart appVersion matches application version
54
+ if [[ "$CHART_APP_VERSION" != "$APP_VERSION" ]]; then
55
+ echo "Error: Chart appVersion ($CHART_APP_VERSION) does not match application version ($APP_VERSION)"
56
+ exit 1
57
+ fi
58
+
59
+ # Validate that image tag matches application version
60
+ if [[ "$IMAGE_TAG" != "$APP_VERSION" ]]; then
61
+ echo "Error: Image tag ($IMAGE_TAG) does not match application version ($APP_VERSION)"
62
+ exit 1
63
+ fi
64
+
65
+ # Validate that chart version follows expected pattern (remove 'v' prefix from app version)
66
+ EXPECTED_CHART_VERSION=$(echo "$APP_VERSION" | sed 's/^v//')
67
+ if [[ "$CHART_VERSION" != "$EXPECTED_CHART_VERSION" ]]; then
68
+ echo "Error: Chart version ($CHART_VERSION) does not match expected version ($EXPECTED_CHART_VERSION)"
69
+ exit 1
70
+ fi
71
+
72
+ echo "All versions are synchronized correctly"
73
+
74
+ publish-npm-package :
75
+ needs : [release-please, validate-versions]
76
+ runs-on : ubuntu-latest
33
77
permissions :
34
78
packages : write # needed for GitHub Packages registry access
35
79
if : " ${{ needs.release-please.outputs.release_created }}"
48
92
NODE_AUTH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
49
93
50
94
build-and-push-image :
51
- needs : release-please
95
+ needs : [ release-please, validate-versions]
52
96
uses : ./.github/workflows/build-push-image.yaml
53
97
with :
54
98
file : gitops-server.dockerfile
@@ -67,48 +111,81 @@ jobs:
67
111
if : " ${{ needs.release-please.outputs.release_created }}"
68
112
69
113
build-and-push-chart :
70
- needs :
71
- - release-please
72
- - build-and-push-image # as we want to push chart when images are available
114
+ needs : [release-please, validate-versions, build-and-push-image]
73
115
runs-on : ubuntu-latest
74
116
permissions :
75
117
contents : read # for actions/checkout to fetch code
76
118
id-token : write # for Cosign to be able to sign chart with GHA token
77
119
packages : write # for helm to push OCI chart
78
- if : " ${{ needs.release-please.outputs['charts/gitops-server-- release_created'] }}"
120
+ if : " ${{ needs.release-please.outputs. release_created }}"
79
121
steps :
80
122
- name : Checkout
81
123
uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
124
+
125
+ - name : Validate chart before packaging
126
+ run : |
127
+ APP_VERSION="${{ needs.release-please.outputs.version }}"
128
+ CHART_VERSION=$(yq e '.version' charts/gitops-server/Chart.yaml)
129
+
130
+ echo "Packaging chart version: $CHART_VERSION for app version: $APP_VERSION"
131
+
132
+ # Validate chart syntax
133
+ helm lint charts/gitops-server/
134
+
82
135
- name : Package chart
83
136
run : |
84
137
mkdir helm-release
85
138
helm package charts/gitops-server/ -d helm-release
139
+
140
+ # List packaged chart for verification
141
+ ls -la helm-release/
142
+
86
143
- name : Log in to the Container registry
87
144
uses : docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
88
145
with :
89
146
registry : ghcr.io
90
147
username : ${{ github.actor }}
91
148
password : ${{ secrets.GITHUB_TOKEN }}
149
+
92
150
- name : Publish chart
93
151
id : publish-chart
94
152
run : |
95
- helm push helm-release/weave-gitops-${{ needs.release-please.outputs['charts/gitops-server--version'] }}.tgz \
96
- oci://ghcr.io/weaveworks/charts &> helm-release/push-metadata.txt
153
+ CHART_VERSION=$(yq e '.version' charts/gitops-server/Chart.yaml)
154
+ CHART_FILE="helm-release/weave-gitops-${CHART_VERSION}.tgz"
155
+
156
+ if [[ ! -f "$CHART_FILE" ]]; then
157
+ echo "Error: Chart file $CHART_FILE not found"
158
+ ls -la helm-release/
159
+ exit 1
160
+ fi
161
+
162
+ echo "Publishing chart: $CHART_FILE"
163
+ helm push "$CHART_FILE" oci://ghcr.io/weaveworks/charts &> helm-release/push-metadata.txt
164
+
165
+ # Extract digest for signing
97
166
CHART_DIGEST=$(awk '/Digest: /{print $2}' helm-release/push-metadata.txt)
167
+ echo "Chart digest: $CHART_DIGEST"
98
168
echo "digest=$CHART_DIGEST" >> $GITHUB_OUTPUT
169
+
170
+ # Display push metadata for debugging
171
+ echo "Push metadata:"
172
+ cat helm-release/push-metadata.txt
173
+
99
174
- name : Install cosign
100
175
uses : sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac # v3.9.1
176
+
101
177
- name : Keyless signing of chart
102
178
run : |
103
179
cosign sign --yes ghcr.io/weaveworks/charts@${{ steps.publish-chart.outputs.digest }}
180
+
104
181
- name : Verify the chart signing
105
182
run : |
106
183
cosign verify ghcr.io/weaveworks/charts@${{ steps.publish-chart.outputs.digest }} \
107
184
--certificate-identity "https://github.com/${{ github.workflow_ref }}" \
108
185
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" | jq .
109
186
110
187
goreleaser :
111
- needs : release-please
188
+ needs : [ release-please, validate-versions]
112
189
runs-on : ubuntu-latest
113
190
permissions :
114
191
contents : read # for actions/checkout to fetch code
@@ -136,3 +213,28 @@ jobs:
136
213
env :
137
214
GITHUB_TOKEN : ${{ secrets.WEAVE_GITOPS_BOT_ACCESS_TOKEN }}
138
215
BOT_TOKEN : ${{ secrets.WEAVE_GITOPS_BOT_ACCESS_TOKEN }}
216
+
217
+ create-release-summary :
218
+ needs : [release-please, validate-versions, publish-npm-package, build-and-push-image, build-and-push-chart, goreleaser]
219
+ runs-on : ubuntu-latest
220
+ if : " ${{ needs.release-please.outputs.release_created }}"
221
+ steps :
222
+ - name : Create release summary
223
+ run : |
224
+ echo "# Release Summary" >> $GITHUB_STEP_SUMMARY
225
+ echo "" >> $GITHUB_STEP_SUMMARY
226
+ echo "**Version:** ${{ needs.release-please.outputs.version }}" >> $GITHUB_STEP_SUMMARY
227
+ echo "**Tag:** ${{ needs.release-please.outputs.tag_name }}" >> $GITHUB_STEP_SUMMARY
228
+ echo "" >> $GITHUB_STEP_SUMMARY
229
+ echo "## Components Released" >> $GITHUB_STEP_SUMMARY
230
+ echo "- Application binaries (GoReleaser)" >> $GITHUB_STEP_SUMMARY
231
+ echo "- Container images (ghcr.io/weaveworks/wego-app)" >> $GITHUB_STEP_SUMMARY
232
+ echo "- Helm chart (ghcr.io/weaveworks/charts)" >> $GITHUB_STEP_SUMMARY
233
+ echo "- NPM package (@weaveworks scope)" >> $GITHUB_STEP_SUMMARY
234
+ echo "" >> $GITHUB_STEP_SUMMARY
235
+ echo "## Version Synchronization" >> $GITHUB_STEP_SUMMARY
236
+ echo "All components have been released with synchronized versions:" >> $GITHUB_STEP_SUMMARY
237
+ echo "- Application: ${{ needs.release-please.outputs.version }}" >> $GITHUB_STEP_SUMMARY
238
+ echo "- Chart AppVersion: ${{ needs.release-please.outputs.version }}" >> $GITHUB_STEP_SUMMARY
239
+ echo "- Chart Version: $(echo '${{ needs.release-please.outputs.version }}' | sed 's/^v//')" >> $GITHUB_STEP_SUMMARY
240
+ echo "- Image Tag: ${{ needs.release-please.outputs.version }}" >> $GITHUB_STEP_SUMMARY
0 commit comments