4343 if : github.repository == 'apache/iceberg-rust' # Only run for apache repo
4444 runs-on : ubuntu-latest
4545 steps :
46- - uses : actions/checkout@v5
46+ - uses : actions/checkout@v6
4747
4848 - uses : ./.github/actions/overwrite-package-version # Overwrite package version with timestamp
4949 with :
5656 args : -o dist
5757
5858 - name : Upload sdist
59- uses : actions/upload-artifact@v5
59+ uses : actions/upload-artifact@v6
6060 with :
6161 name : wheels-sdist
6262 path : bindings/python/dist
@@ -78,15 +78,15 @@ jobs:
7878 }
7979 - { os: ubuntu-latest, target: "armv7l" }
8080 steps :
81- - uses : actions/checkout@v5
81+ - uses : actions/checkout@v6
8282
8383 - uses : ./.github/actions/overwrite-package-version # Overwrite package version with timestamp
8484 with :
8585 timestamp : ${{ needs.set-version.outputs.TIMESTAMP }}
8686
8787 - uses : actions/setup-python@v6
8888 with :
89- python-version : 3.9
89+ python-version : 3.12
9090
9191 - name : Setup Rust toolchain
9292 uses : ./.github/actions/setup-builder
@@ -102,7 +102,7 @@ jobs:
102102 args : --release -o dist
103103
104104 - name : Upload wheels
105- uses : actions/upload-artifact@v5
105+ uses : actions/upload-artifact@v6
106106 with :
107107 name : wheels-${{ matrix.os }}-${{ matrix.target }}
108108 path : bindings/python/dist
@@ -120,16 +120,44 @@ jobs:
120120
121121 steps :
122122 - name : Download all the dists
123- uses : actions/download-artifact@v6
123+ uses : actions/download-artifact@v7
124124 with :
125125 pattern : wheels-*
126126 merge-multiple : true
127127 path : bindings/python/dist
128128 - name : List downloaded artifacts
129129 run : ls -R bindings/python/dist
130130 - name : Publish to TestPyPI
131+ id : publish-testpypi
132+ continue-on-error : true
131133 uses : pypa/gh-action-pypi-publish@release/v1
132134 with :
133135 repository-url : https://test.pypi.org/legacy/
134136 skip-existing : true
135137 packages-dir : bindings/python/dist
138+ verbose : true
139+ - name : Display error message on publish failure
140+ if : steps.publish-testpypi.outcome == 'failure'
141+ run : |
142+ echo "::error::Failed to publish to TestPyPI"
143+ echo ""
144+ echo "⚠️ TestPyPI Publish Failed"
145+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
146+ echo ""
147+ echo "This may be due to TestPyPI storage limits."
148+ echo "See: https://docs.pypi.org/project-management/storage-limits"
149+ echo ""
150+ echo "To resolve this issue, use the pypi-cleanup utility to clean up old TestPyPI artifacts:"
151+ echo "https://pypi.org/project/pypi-cleanup/"
152+ echo ""
153+ echo " uvx pypi-cleanup --package pyiceberg-core --host https://test.pypi.org/ \\"
154+ echo " --verbose -d 10 --do-it --username <username>"
155+ echo ""
156+ echo "Requirements:"
157+ echo " • Must be a maintainer for pyiceberg-core on TestPyPI"
158+ echo " (https://test.pypi.org/project/pyiceberg-core)"
159+ echo " • Requires TestPyPI password and 2FA"
160+ echo " • ⚠️ ONLY do this for TestPyPI, NOT for production PyPI!"
161+ echo ""
162+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
163+ exit 1
0 commit comments