2828 description : ' URL to solr Helm chart tarball (e.g., https://dist.apache.org/repos/dist/release/solr/solr-operator/v0.10.0/helm-charts/solr-0.10.0.tgz)'
2929 required : true
3030 type : string
31+ dry-run :
32+ description : ' Dry run - download and verify charts but do not push to OCI registry'
33+ required : false
34+ type : boolean
35+ default : false
36+
37+ permissions :
38+ contents : read
3139
3240jobs :
3341 publish-oci :
@@ -39,44 +47,152 @@ jobs:
3947 with :
4048 version : ' latest'
4149
50+ - name : Login to Docker Hub
51+ if : ${{ !inputs.dry-run }}
52+ uses : docker/login-action@v3
53+ with :
54+ username : ${{ secrets.DOCKERHUB_USER }}
55+ password : ${{ secrets.DOCKERHUB_TOKEN }}
56+
57+ - name : Validate Input URLs
58+ run : |
59+ # Validate URLs are from expected Apache dist domain
60+ if [[ ! "${{ inputs.solr-operator-chart-url }}" =~ ^https://dist\.apache\.org/repos/dist/(release|dev)/solr/ ]]; then
61+ echo "Error: solr-operator-chart-url must be from dist.apache.org"
62+ exit 1
63+ fi
64+ if [[ ! "${{ inputs.solr-chart-url }}" =~ ^https://dist\.apache\.org/repos/dist/(release|dev)/solr/ ]]; then
65+ echo "Error: solr-chart-url must be from dist.apache.org"
66+ exit 1
67+ fi
68+ echo "✓ URLs validated"
69+
4270 - name : Download Helm Charts
4371 run : |
72+ set -e
4473 echo "Downloading solr-operator chart from: ${{ inputs.solr-operator-chart-url }}"
45- wget -O solr-operator.tgz "${{ inputs.solr-operator-chart-url }}"
74+ curl --fail --show-error --location --retry 3 --retry-delay 5 \
75+ -o solr-operator.tgz "${{ inputs.solr-operator-chart-url }}"
4676
4777 echo "Downloading solr chart from: ${{ inputs.solr-chart-url }}"
48- wget -O solr.tgz "${{ inputs.solr-chart-url }}"
78+ curl --fail --show-error --location --retry 3 --retry-delay 5 \
79+ -o solr.tgz "${{ inputs.solr-chart-url }}"
4980
50- echo "Charts downloaded successfully"
81+ echo "Charts downloaded successfully: "
5182 ls -lh *.tgz
5283
53- - name : Login to Docker Hub
84+ # Verify they are valid tar files
85+ echo "Verifying chart integrity..."
86+ tar -tzf solr-operator.tgz > /dev/null
87+ tar -tzf solr.tgz > /dev/null
88+ echo "✓ Charts are valid tarballs"
89+
90+ - name : Download and Verify Checksums
5491 run : |
55- echo "Logging in to Docker Hub as ${{ secrets.DOCKERHUB_USER }}"
56- echo "${{ secrets.DOCKERHUB_TOKEN }}" | helm registry login docker.io -u "${{ secrets.DOCKERHUB_USER }}" --password-stdin
57- echo "Login successful"
92+ set -e
93+ echo "Downloading checksums..."
94+
95+ # Download SHA512 checksums
96+ curl --fail --show-error --location --retry 3 --retry-delay 5 \
97+ -o solr-operator.tgz.sha512 "${{ inputs.solr-operator-chart-url }}.sha512"
98+
99+ curl --fail --show-error --location --retry 3 --retry-delay 5 \
100+ -o solr.tgz.sha512 "${{ inputs.solr-chart-url }}.sha512"
101+
102+ echo "Checksums downloaded:"
103+ ls -lh *.sha512
104+
105+ # Verify SHA512 checksums
106+ echo "Verifying solr-operator chart checksum..."
107+ sha512sum -c solr-operator.tgz.sha512
108+ echo "✓ solr-operator chart checksum verified"
109+
110+ echo "Verifying solr chart checksum..."
111+ sha512sum -c solr.tgz.sha512
112+ echo "✓ solr chart checksum verified"
113+
114+ echo ""
115+ echo "✅ All checksums verified successfully"
116+
117+ - name : Extract Chart Versions
118+ id : versions
119+ run : |
120+ # Extract version from solr-operator chart
121+ OPERATOR_VERSION=$(tar -xzOf solr-operator.tgz solr-operator/Chart.yaml | grep '^version:' | awk '{print $2}')
122+ echo "operator-version=${OPERATOR_VERSION}" >> $GITHUB_OUTPUT
123+ echo "Solr Operator Chart Version: ${OPERATOR_VERSION}"
124+
125+ # Extract version from solr chart
126+ SOLR_VERSION=$(tar -xzOf solr.tgz solr/Chart.yaml | grep '^version:' | awk '{print $2}')
127+ echo "solr-version=${SOLR_VERSION}" >> $GITHUB_OUTPUT
128+ echo "Solr Chart Version: ${SOLR_VERSION}"
58129
59130 - name : Push solr-operator chart to OCI registry
131+ if : ${{ !inputs.dry-run }}
60132 run : |
61- echo "Pushing solr-operator chart to oci://docker.io/apache/solr-operator-chart"
133+ echo "Pushing solr-operator chart (version ${{ steps.versions.outputs.operator-version }}) to oci://docker.io/apache/solr-operator-chart"
62134 helm push solr-operator.tgz oci://docker.io/apache/solr-operator-chart
63- echo "solr-operator chart pushed successfully"
135+ echo "✓ solr-operator chart pushed successfully"
64136
65137 - name : Push solr chart to OCI registry
138+ if : ${{ !inputs.dry-run }}
66139 run : |
67- echo "Pushing solr chart to oci://docker.io/apache/solr-chart"
140+ echo "Pushing solr chart (version ${{ steps.versions.outputs.solr-version }}) to oci://docker.io/apache/solr-chart"
68141 helm push solr.tgz oci://docker.io/apache/solr-chart
69- echo "solr chart pushed successfully"
142+ echo "✓ solr chart pushed successfully"
143+
144+ - name : Dry Run Summary
145+ if : ${{ inputs.dry-run }}
146+ run : |
147+ echo "## 🧪 Dry Run Mode - No Charts Published" >> $GITHUB_STEP_SUMMARY
148+ echo "" >> $GITHUB_STEP_SUMMARY
149+ echo "### Validation Results" >> $GITHUB_STEP_SUMMARY
150+ echo "- ✅ URLs validated from dist.apache.org" >> $GITHUB_STEP_SUMMARY
151+ echo "- ✅ Charts downloaded successfully" >> $GITHUB_STEP_SUMMARY
152+ echo "- ✅ Chart integrity verified (valid tarballs)" >> $GITHUB_STEP_SUMMARY
153+ echo "- ✅ SHA512 checksums verified" >> $GITHUB_STEP_SUMMARY
154+ echo "- ✅ Chart versions extracted" >> $GITHUB_STEP_SUMMARY
155+ echo "" >> $GITHUB_STEP_SUMMARY
156+ echo "### Chart Information" >> $GITHUB_STEP_SUMMARY
157+ echo "- **Solr Operator Version**: \`${{ steps.versions.outputs.operator-version }}\`" >> $GITHUB_STEP_SUMMARY
158+ echo "- **Solr Chart Version**: \`${{ steps.versions.outputs.solr-version }}\`" >> $GITHUB_STEP_SUMMARY
159+ echo "" >> $GITHUB_STEP_SUMMARY
160+ echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
161+ echo "Run this workflow again with **dry-run = false** to publish the charts to OCI registries." >> $GITHUB_STEP_SUMMARY
70162
71- - name : Logout from Docker Hub
72- if : always()
163+ - name : Verify Published Charts
164+ if : ${{ !inputs.dry-run }}
73165 run : |
74- helm registry logout docker.io
75- echo "Logged out from Docker Hub"
166+ echo "Verifying charts are accessible from OCI registry..."
167+
168+ # Verify solr-operator chart
169+ echo "Pulling solr-operator chart version ${{ steps.versions.outputs.operator-version }}..."
170+ helm pull oci://docker.io/apache/solr-operator-chart --version ${{ steps.versions.outputs.operator-version }}
171+ echo "✓ solr-operator chart verified"
172+
173+ # Verify solr chart
174+ echo "Pulling solr chart version ${{ steps.versions.outputs.solr-version }}..."
175+ helm pull oci://docker.io/apache/solr-chart --version ${{ steps.versions.outputs.solr-version }}
176+ echo "✓ solr chart verified"
76177
77178 - name : Summary
78- if : success()
179+ if : ${{ success() && !inputs.dry-run }}
79180 run : |
80- echo "✅ Successfully published Helm charts to OCI registries:"
81- echo " - oci://docker.io/apache/solr-operator-chart"
82- echo " - oci://docker.io/apache/solr-chart"
181+ echo "## ✅ Successfully Published Helm Charts" >> $GITHUB_STEP_SUMMARY
182+ echo "" >> $GITHUB_STEP_SUMMARY
183+ echo "The following charts have been published to OCI registries:" >> $GITHUB_STEP_SUMMARY
184+ echo "" >> $GITHUB_STEP_SUMMARY
185+ echo "### Solr Operator Chart" >> $GITHUB_STEP_SUMMARY
186+ echo "- **Registry**: \`oci://docker.io/apache/solr-operator-chart\`" >> $GITHUB_STEP_SUMMARY
187+ echo "- **Version**: \`${{ steps.versions.outputs.operator-version }}\`" >> $GITHUB_STEP_SUMMARY
188+ echo "- **Install**: \`helm install solr-operator oci://docker.io/apache/solr-operator-chart --version ${{ steps.versions.outputs.operator-version }}\`" >> $GITHUB_STEP_SUMMARY
189+ echo "" >> $GITHUB_STEP_SUMMARY
190+ echo "### Solr Chart" >> $GITHUB_STEP_SUMMARY
191+ echo "- **Registry**: \`oci://docker.io/apache/solr-chart\`" >> $GITHUB_STEP_SUMMARY
192+ echo "- **Version**: \`${{ steps.versions.outputs.solr-version }}\`" >> $GITHUB_STEP_SUMMARY
193+ echo "- **Install**: \`helm install solr oci://docker.io/apache/solr-chart --version ${{ steps.versions.outputs.solr-version }}\`" >> $GITHUB_STEP_SUMMARY
194+ echo "" >> $GITHUB_STEP_SUMMARY
195+ echo "### Verification" >> $GITHUB_STEP_SUMMARY
196+ echo "- ✅ Charts downloaded and checksums verified" >> $GITHUB_STEP_SUMMARY
197+ echo "- ✅ Charts pushed to OCI registries" >> $GITHUB_STEP_SUMMARY
198+ echo "- ✅ Charts verified as accessible from OCI registry" >> $GITHUB_STEP_SUMMARY
0 commit comments