Skip to content

Commit d11ff33

Browse files
authored
Merge pull request #25 from Chisanan232/develop/ci-cd
[CU-86ev55tr6] Improve the Docker relative processes in the CD workflows
2 parents ccb7d1c + 3815c6b commit d11ff33

File tree

3 files changed

+198
-57
lines changed

3 files changed

+198
-57
lines changed

.github/workflows/rw_release_complete.yaml

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ on:
5555
value: ${{ jobs.intent.outputs.python != 'skip' && jobs.intent.outputs.do_release == 'true' }}
5656
docker_released:
5757
description: 'Whether Docker images were released'
58-
value: ${{ jobs.intent.outputs.docker != 'skip' && jobs.intent.outputs.do_release == 'true' }}
58+
value: ${{ jobs.check-dockerfile.outputs.has_dockerfile == 'true' && jobs.intent.outputs.docker != 'skip' && jobs.intent.outputs.do_release == 'true' }}
5959
docs_released:
6060
description: 'Whether documentation was versioned'
6161
value: ${{ jobs.prepare_docs_matrix.outputs.has_sections == 'true' && jobs.intent.outputs.do_release == 'true' }}
@@ -71,6 +71,26 @@ jobs:
7171
name: Parse Configuration
7272
uses: Chisanan232/Template-Python-UV-Project/.github/workflows/rw_parse_project_config.yaml@master
7373

74+
check-dockerfile:
75+
name: Check Dockerfile Exists
76+
runs-on: ubuntu-latest
77+
outputs:
78+
has_dockerfile: ${{ steps.check.outputs.has_dockerfile }}
79+
steps:
80+
- name: Checkout repository
81+
uses: actions/checkout@v5
82+
83+
- name: Check for Dockerfile
84+
id: check
85+
run: |
86+
if [ -f "Dockerfile" ]; then
87+
echo "✅ Dockerfile found"
88+
echo "has_dockerfile=true" >> $GITHUB_OUTPUT
89+
else
90+
echo "⚠️ No Dockerfile found - Docker processes will be skipped"
91+
echo "has_dockerfile=false" >> $GITHUB_OUTPUT
92+
fi
93+
7494
intent:
7595
uses: Chisanan232/Template-Python-UV-Project/.github/workflows/rw_parse_release_intent.yaml@master
7696
needs: config
@@ -376,8 +396,8 @@ jobs:
376396
release_docker_hub:
377397
name: Release to DockerHub
378398
uses: Chisanan232/Template-Python-UV-Project/.github/workflows/rw_docker_operations.yaml@master
379-
needs: [config, intent, bump_version, build_git-tag_and_create_github-release]
380-
if: needs.intent.outputs.do_release == 'true' && needs.intent.outputs.docker != 'skip'
399+
needs: [config, check-dockerfile, intent, bump_version, build_git-tag_and_create_github-release]
400+
if: needs.check-dockerfile.outputs.has_dockerfile == 'true' && needs.intent.outputs.do_release == 'true' && needs.intent.outputs.docker != 'skip'
381401
secrets:
382402
dockerhub-user: ${{ secrets.DOCKERHUB_USERNAME }}
383403
registry-token: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -393,8 +413,8 @@ jobs:
393413
release_docker_ghcr:
394414
name: Release to GHCR
395415
uses: Chisanan232/Template-Python-UV-Project/.github/workflows/rw_docker_operations.yaml@master
396-
needs: [config, intent, bump_version, build_git-tag_and_create_github-release]
397-
if: needs.intent.outputs.do_release == 'true' && needs.intent.outputs.docker != 'skip'
416+
needs: [config, check-dockerfile, intent, bump_version, build_git-tag_and_create_github-release]
417+
if: needs.check-dockerfile.outputs.has_dockerfile == 'true' && needs.intent.outputs.do_release == 'true' && needs.intent.outputs.docker != 'skip'
398418
with:
399419
operation: 'push'
400420
registry: ${{ needs.config.outputs.docker_registry_ghcr }}

.github/workflows/rw_release_staging_complete.yaml

Lines changed: 90 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@ jobs:
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

Comments
 (0)