-
Notifications
You must be signed in to change notification settings - Fork 218
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
automate building Release Candidate in github action #1391
Merged
kevinjqliu
merged 32 commits into
apache:main
from
kevinjqliu:kevinjqliu/run-pypi-and-svn
Feb 2, 2025
Merged
Changes from all commits
Commits
Show all changes
32 commits
Select commit
Hold shift + click to select a range
3ffd8e0
run two builds together
kevinjqliu 1866261
sha and gpg
kevinjqliu 1eb1758
import gpg key
kevinjqliu 99a18bd
add version and rc as inputs
kevinjqliu ab830e3
add input validation
kevinjqliu cd7e8e6
add examples
kevinjqliu 94decda
fail if not valid
kevinjqliu 26462e4
reorder operations
kevinjqliu 3b7b097
use bash for windows
kevinjqliu 67773fc
download/upload
kevinjqliu 957548d
name
kevinjqliu c75a354
only include relevant files
kevinjqliu b78cf84
rename
kevinjqliu f14ac9e
use env
kevinjqliu 87ef036
rename
kevinjqliu 6924864
fetch only latest
kevinjqliu 1994c67
remove comments
kevinjqliu a4e0651
remove svn & gpg
kevinjqliu 8a37da5
add tag trigger
kevinjqliu c216260
bug
kevinjqliu e028e44
pass variables correctly between jobs
kevinjqliu fb76e74
correctly use rc
kevinjqliu 4af5928
env
kevinjqliu 8156488
lint
kevinjqliu 9ca7550
add rc validation
kevinjqliu e938f90
add docs
kevinjqliu bf1cb69
add gh commands
kevinjqliu 3e9d9e4
use subshell
kevinjqliu 695dbd3
release docs first
kevinjqliu e0e68a3
make install-poetry
kevinjqliu 49cb146
_ -> -
kevinjqliu 5bd598e
daft dead link
kevinjqliu File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,29 +17,118 @@ | |
# under the License. | ||
# | ||
|
||
name: "Python Release" | ||
name: "Python Build Release Candidate" | ||
|
||
on: | ||
push: | ||
tags: | ||
# Trigger this workflow when tag follows the versioning format: pyiceberg-<major>.<minor>.<patch>rc<release_candidate> | ||
# Example valid tags: pyiceberg-0.8.0rc2, pyiceberg-1.0.0rc1 | ||
- 'pyiceberg-[0-9]+.[0-9]+.[0-9]+rc[0-9]+' | ||
workflow_dispatch: | ||
inputs: | ||
version: | ||
description: 'Version' | ||
description: 'Version (e.g., 0.8.0)' | ||
type: string | ||
default: 'main' | ||
|
||
required: true | ||
rc: | ||
description: 'Release Candidate (RC) (e.g., 1)' | ||
type: number | ||
required: true | ||
|
||
jobs: | ||
build_wheels: | ||
name: Build wheels on ${{ matrix.os }} | ||
validate-inputs: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
VERSION: ${{ steps.validate-inputs.outputs.VERSION }} # e.g. 0.8.0 | ||
RC: ${{ steps.validate-inputs.outputs.RC }} # e.g. 1 | ||
steps: | ||
- name: Validate and Extract Version and RC | ||
id: validate-inputs | ||
run: | | ||
if [ "$GITHUB_EVENT_NAME" = "push" ]; then | ||
echo "Workflow triggered by tag push." | ||
Fokko marked this conversation as resolved.
Show resolved
Hide resolved
|
||
TAG=${GITHUB_REF#refs/tags/} # Extract the tag name | ||
VERSION_AND_RC=${TAG#pyiceberg-} # Remove the 'pyiceberg-' prefix | ||
VERSION=${VERSION_AND_RC%rc*} # Extract VERSION by removing everything after 'rc' | ||
RC=${VERSION_AND_RC#*rc} # Extract RC by keeping everything after 'rc' | ||
|
||
if [[ -z "$VERSION" || -z "$RC" ]]; then | ||
echo "Error: Unable to parse VERSION or RC from tag ($TAG). Ensure the tag format is correct." | ||
exit 1 | ||
fi | ||
else | ||
echo "Workflow triggered manually via workflow_dispatch." | ||
VERSION="${{ github.event.inputs.version }}" | ||
RC="${{ github.event.inputs.rc }}" | ||
|
||
# Validate version (e.g., 1.0.0) | ||
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | ||
echo "Error: version ($VERSION) must be in the format: <number>.<number>.<number>" | ||
exit 1 | ||
fi | ||
|
||
# Validate rc (e.g., 1) | ||
if [[ ! "$RC" =~ ^[0-9]+$ ]]; then | ||
echo "Error: rc ($RC) must be in the format: <number>" | ||
exit 1 | ||
fi | ||
fi | ||
|
||
# Export variables for future steps | ||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT | ||
echo "RC=$RC" >> $GITHUB_OUTPUT | ||
|
||
- name: Display Extracted Version and RC | ||
run: | | ||
echo "Using Version: ${{ steps.validate-inputs.outputs.VERSION }}" | ||
echo "Using RC: ${{ steps.validate-inputs.outputs.RC }}" | ||
|
||
validate-library-version: | ||
runs-on: ubuntu-latest | ||
needs: | ||
- validate-inputs | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
|
||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: 3.12 | ||
|
||
- name: Install Poetry | ||
run: make install-poetry | ||
|
||
- name: Validate current pyiceberg version | ||
env: | ||
VERSION: ${{ needs.validate-inputs.outputs.VERSION }} | ||
run: | | ||
# Extract the current version from Poetry | ||
current_pyiceberg_version=$(poetry version --short) | ||
echo "Detected Poetry version: $current_pyiceberg_version" | ||
|
||
# Compare the input version with the Poetry version | ||
if [[ "$VERSION" != "$current_pyiceberg_version" ]]; then | ||
echo "Error: Input version ($VERSION) does not match the Poetry version ($current_pyiceberg_version)" | ||
exit 1 | ||
fi | ||
|
||
# SVN | ||
svn-build-artifacts: | ||
name: Build artifacts for SVN on ${{ matrix.os }} | ||
runs-on: ${{ matrix.os }} | ||
needs: | ||
- validate-inputs | ||
- validate-library-version | ||
strategy: | ||
matrix: | ||
os: [ ubuntu-22.04, windows-2022, macos-13, macos-14, macos-15 ] | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
fetch-depth: 1 | ||
|
||
- uses: actions/setup-python@v5 | ||
with: | ||
|
@@ -50,11 +139,86 @@ jobs: | |
3.12 | ||
|
||
- name: Install poetry | ||
run: pip install poetry | ||
run: make install-poetry | ||
|
||
- name: Set version | ||
run: python -m poetry version "${{ inputs.version }}" | ||
if: "${{ github.event.inputs.version != 'main' }}" | ||
# Publish the source distribution with the version that's in | ||
# the repository, otherwise the tests will fail | ||
- name: Compile source distribution | ||
run: python3 -m poetry build --format=sdist | ||
if: startsWith(matrix.os, 'ubuntu') | ||
|
||
- name: Build wheels | ||
uses: pypa/[email protected] | ||
with: | ||
output-dir: wheelhouse | ||
config-file: "pyproject.toml" | ||
env: | ||
# Ignore 32 bit architectures | ||
CIBW_ARCHS: "auto64" | ||
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.9,<3.13" | ||
CIBW_TEST_REQUIRES: "pytest==7.4.2 moto==5.0.1" | ||
CIBW_TEST_EXTRAS: "s3fs,glue" | ||
CIBW_TEST_COMMAND: "pytest {project}/tests/avro/test_decoder.py" | ||
# There is an upstream issue with installing on MacOSX | ||
# https://github.com/pypa/cibuildwheel/issues/1603 | ||
# Ignore tests for pypy since not all dependencies are compiled for it | ||
# and would require a local rust build chain | ||
CIBW_TEST_SKIP: "pp* *macosx*" | ||
|
||
- name: Add source distribution | ||
if: startsWith(matrix.os, 'ubuntu') | ||
run: ls -lah dist/* && cp dist/* wheelhouse/ | ||
|
||
- uses: actions/upload-artifact@v4 | ||
with: | ||
name: "svn-release-candidate-${{ matrix.os }}" | ||
path: ./wheelhouse/* | ||
|
||
svn-merge-artifacts: | ||
runs-on: ubuntu-latest | ||
needs: | ||
- validate-inputs | ||
- svn-build-artifacts | ||
steps: | ||
- name: Merge Artifacts | ||
uses: actions/upload-artifact/merge@v4 | ||
with: | ||
name: "svn-release-candidate-${{ needs.validate-inputs.outputs.VERSION }}rc${{ needs.validate-inputs.outputs.RC }}" | ||
pattern: svn-release-candidate* | ||
delete-merged: true | ||
|
||
# PyPi | ||
pypi-build-artifacts: | ||
name: Build artifacts for PyPi on ${{ matrix.os }} | ||
runs-on: ${{ matrix.os }} | ||
needs: | ||
- validate-inputs | ||
- validate-library-version | ||
strategy: | ||
matrix: | ||
os: [ ubuntu-22.04, windows-2022, macos-13, macos-14, macos-15 ] | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
|
||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: | | ||
3.9 | ||
3.10 | ||
3.11 | ||
3.12 | ||
|
||
- name: Install poetry | ||
run: make install-poetry | ||
|
||
- name: Set version with RC | ||
env: | ||
VERSION: ${{ needs.validate-inputs.outputs.VERSION }} | ||
RC: ${{ needs.validate-inputs.outputs.RC }} | ||
run: python -m poetry version "${{ env.VERSION }}rc${{ env.RC }}" # e.g., 0.8.0rc1 | ||
|
||
# Publish the source distribution with the version that's in | ||
# the repository, otherwise the tests will fail | ||
|
@@ -86,15 +250,18 @@ jobs: | |
|
||
- uses: actions/upload-artifact@v4 | ||
with: | ||
name: "release-${{ matrix.os }}" | ||
name: "pypi-release-candidate-${{ matrix.os }}" | ||
path: ./wheelhouse/* | ||
merge: | ||
|
||
pypi-merge-artifacts: | ||
runs-on: ubuntu-latest | ||
needs: build_wheels | ||
needs: | ||
- validate-inputs | ||
- pypi-build-artifacts | ||
steps: | ||
- name: Merge Artifacts | ||
uses: actions/upload-artifact/merge@v4 | ||
with: | ||
name: "release-${{ github.event.inputs.version }}" | ||
pattern: release-* | ||
name: "pypi-release-candidate-${{ needs.validate-inputs.outputs.VERSION }}rc${{ needs.validate-inputs.outputs.RC }}" | ||
pattern: pypi-release-candidate* | ||
delete-merged: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 In line with the current tags: https://github.com/apache/iceberg-python/tags