4545 name : Parse Configuration
4646 uses : Chisanan232/Template-Python-UV-Project/.github/workflows/rw_parse_project_config.yaml@master
4747
48+ check-dockerfile :
49+ name : Check Dockerfile Exists
50+ runs-on : ubuntu-latest
51+ outputs :
52+ has_dockerfile : ${{ steps.check.outputs.has_dockerfile }}
53+ steps :
54+ - name : Checkout repository
55+ uses : actions/checkout@v5
56+
57+ - name : Check for Dockerfile
58+ id : check
59+ run : |
60+ if [ -f "Dockerfile" ]; then
61+ echo "✅ Dockerfile found"
62+ echo "has_dockerfile=true" >> $GITHUB_OUTPUT
63+ else
64+ echo "⚠️ No Dockerfile found - Docker processes will be skipped"
65+ echo "has_dockerfile=false" >> $GITHUB_OUTPUT
66+ fi
67+
4868 compute-version :
4969 name : Compute Staging Version
5070 runs-on : ubuntu-latest
@@ -118,7 +138,8 @@ jobs:
118138 dockerhub-rc :
119139 name : Staging Release to DockerHub
120140 uses : Chisanan232/Template-Python-UV-Project/.github/workflows/rw_docker_operations.yaml@master
121- needs : [config, compute-version, build_git-tag_and_create_github-release]
141+ needs : [config, check-dockerfile, compute-version, build_git-tag_and_create_github-release]
142+ if : needs.check-dockerfile.outputs.has_dockerfile == 'true'
122143 secrets :
123144 dockerhub-user : ${{ secrets.DOCKERHUB_USERNAME }}
124145 registry-token : ${{ secrets.DOCKERHUB_TOKEN }}
@@ -136,7 +157,8 @@ jobs:
136157 ghcr-rc :
137158 name : Staging Release to GHCR
138159 uses : Chisanan232/Template-Python-UV-Project/.github/workflows/rw_docker_operations.yaml@master
139- needs : [config, compute-version, build_git-tag_and_create_github-release]
160+ needs : [config, check-dockerfile, compute-version, build_git-tag_and_create_github-release]
161+ if : needs.check-dockerfile.outputs.has_dockerfile == 'true'
140162 with :
141163 operation : ' push'
142164 registry : ${{ needs.config.outputs.docker_registry_ghcr }}
@@ -161,7 +183,7 @@ jobs:
161183 staging-summary :
162184 name : Staging Release Summary
163185 runs-on : ubuntu-latest
164- needs : [config, compute-version, pypi-test, ghcr-rc, docs-preview]
186+ needs : [config, check-dockerfile, compute-version, pypi-test, dockerhub-rc , ghcr-rc, docs-preview]
165187 if : always()
166188 outputs :
167189 success : ${{ steps.summary.outputs.success }}
@@ -171,37 +193,81 @@ jobs:
171193 run : |
172194 echo "=== Staging Release Summary ==="
173195 echo ""
196+ echo "Dockerfile Check: ${{ needs.check-dockerfile.outputs.has_dockerfile == 'true' && '✅ Found' || '⚠️ Not Found (Docker skipped)' }}"
174197 echo "Version Computation: ${{ needs.compute-version.result }}"
175198 echo "TestPyPI Upload: ${{ needs.pypi-test.result }}"
176- echo "GHCR RC Image: ${{ needs.ghcr-rc.result }}"
199+
200+ # Check if Docker processes were run
201+ HAS_DOCKERFILE="${{ needs.check-dockerfile.outputs.has_dockerfile }}"
202+ if [ "$HAS_DOCKERFILE" = "true" ]; then
203+ echo "DockerHub RC Image: ${{ needs.dockerhub-rc.result }}"
204+ echo "GHCR RC Image: ${{ needs.ghcr-rc.result }}"
205+ else
206+ echo "DockerHub RC Image: ⏭️ Skipped (no Dockerfile)"
207+ echo "GHCR RC Image: ⏭️ Skipped (no Dockerfile)"
208+ fi
209+
177210 echo "Docs Preview: ${{ needs.docs-preview.result }}"
178211 echo ""
179212 echo "📦 Staging Artifacts:"
180213 echo "- Base Version: ${{ needs.compute-version.outputs.version }}"
181214 echo "- RC Version: ${{ needs.compute-version.outputs.rc_version }}"
182215 echo "- TestPyPI: https://test.pypi.org/project/${{ needs.config.outputs.project_name }}/${{ needs.compute-version.outputs.version }}/"
183- echo "- GHCR RC Image: ghcr.io/${{ github.repository }}:${{ needs.compute-version.outputs.rc_version }}"
216+
217+ if [ "$HAS_DOCKERFILE" = "true" ]; then
218+ echo "- DockerHub RC Image: docker.io/${{ github.repository }}:${{ needs.compute-version.outputs.rc_version }}"
219+ echo "- GHCR RC Image: ghcr.io/${{ github.repository }}:${{ needs.compute-version.outputs.rc_version }}"
220+ fi
221+
184222 echo "- Docs Preview: docs-preview branch"
185223 echo ""
186224
187- if [[ "${{ needs.compute-version.result }}" == "success" && \
188- "${{ needs.pypi-test.result }}" == "success" && \
189- "${{ needs.ghcr-rc.result }}" == "success" && \
190- "${{ needs.docs-preview.result }}" == "success" ]]; then
191- echo "✅ Staging release completed successfully!"
192- echo "success=true" >> $GITHUB_OUTPUT
193- echo ""
194- echo "🧪 Testing Instructions:"
195- echo "1. Install from TestPyPI:"
196- echo " pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ ${{ needs.config.outputs.project_name }}==${{ needs.compute-version.outputs.version }}"
197- echo ""
198- echo "2. Test RC Docker image:"
199- echo " docker run -p ${{ needs.config.outputs.docker_health_check_port }}:${{ needs.config.outputs.docker_health_check_port }} ${{ needs.config.outputs.docker_run_options }} ghcr.io/${{ github.repository }}:${{ needs.compute-version.outputs.rc_version }}"
200- echo ""
201- echo "3. Review documentation preview in docs-preview branch"
202- echo ""
225+ # Validate results based on whether Docker processes were expected
226+ VERSION_OK="${{ needs.compute-version.result == 'success' }}"
227+ PYPI_OK="${{ needs.pypi-test.result == 'success' }}"
228+ DOCS_OK="${{ needs.docs-preview.result == 'success' }}"
229+
230+ if [ "$HAS_DOCKERFILE" = "true" ]; then
231+ # Docker processes should have run - validate them
232+ DOCKERHUB_OK="${{ needs.dockerhub-rc.result == 'success' }}"
233+ GHCR_OK="${{ needs.ghcr-rc.result == 'success' }}"
234+
235+ if [[ "$VERSION_OK" == "true" && "$PYPI_OK" == "true" && \
236+ "$DOCKERHUB_OK" == "true" && "$GHCR_OK" == "true" && "$DOCS_OK" == "true" ]]; then
237+ echo "✅ Staging release completed successfully!"
238+ echo "success=true" >> $GITHUB_OUTPUT
239+ echo ""
240+ echo "🧪 Testing Instructions:"
241+ echo "1. Install from TestPyPI:"
242+ echo " pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ ${{ needs.config.outputs.project_name }}==${{ needs.compute-version.outputs.version }}"
243+ echo ""
244+ echo "2. Test RC Docker images:"
245+ echo " docker run -p ${{ needs.config.outputs.docker_health_check_port }}:${{ needs.config.outputs.docker_health_check_port }} ${{ needs.config.outputs.docker_run_options }} ghcr.io/${{ github.repository }}:${{ needs.compute-version.outputs.rc_version }}"
246+ echo " docker run -p ${{ needs.config.outputs.docker_health_check_port }}:${{ needs.config.outputs.docker_health_check_port }} ${{ needs.config.outputs.docker_run_options }} docker.io/${{ github.repository }}:${{ needs.compute-version.outputs.rc_version }}"
247+ echo ""
248+ echo "3. Review documentation preview in docs-preview branch"
249+ echo ""
250+ else
251+ echo "❌ Some staging deployment steps failed. Check the logs above."
252+ echo "success=false" >> $GITHUB_OUTPUT
253+ exit 1
254+ fi
203255 else
204- echo "❌ Some staging deployment steps failed. Check the logs above."
205- echo "success=false" >> $GITHUB_OUTPUT
206- exit 1
256+ # No Docker processes - only validate non-Docker components
257+ if [[ "$VERSION_OK" == "true" && "$PYPI_OK" == "true" && "$DOCS_OK" == "true" ]]; then
258+ echo "✅ Staging release completed successfully!"
259+ echo "⚠️ Note: Docker builds were skipped (no Dockerfile found)"
260+ echo "success=true" >> $GITHUB_OUTPUT
261+ echo ""
262+ echo "🧪 Testing Instructions:"
263+ echo "1. Install from TestPyPI:"
264+ echo " pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ ${{ needs.config.outputs.project_name }}==${{ needs.compute-version.outputs.version }}"
265+ echo ""
266+ echo "2. Review documentation preview in docs-preview branch"
267+ echo ""
268+ else
269+ echo "❌ Some staging deployment steps failed. Check the logs above."
270+ echo "success=false" >> $GITHUB_OUTPUT
271+ exit 1
272+ fi
207273 fi
0 commit comments