forked from mirrors/kingfisher
initial support for distribution via pypi wheels
This commit is contained in:
parent
54775f0f43
commit
3294b2baf7
9 changed files with 438 additions and 0 deletions
126
.github/workflows/pypi.yml
vendored
Normal file
126
.github/workflows/pypi.yml
vendored
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
name: pypi-wheels
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: "Release tag to package (e.g., v1.2.3). Leave blank to use Cargo.toml."
|
||||
required: false
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-wheels:
|
||||
name: Build PyPI wheels
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Determine version/tag
|
||||
id: version
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
|
||||
TAG="${{ github.event.release.tag_name }}"
|
||||
elif [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" && -n "${{ github.event.inputs.tag }}" ]]; then
|
||||
TAG="${{ github.event.inputs.tag }}"
|
||||
else
|
||||
VERSION=$(grep -m1 '^version\s*=' Cargo.toml | cut -d '"' -f2)
|
||||
TAG="v${VERSION}"
|
||||
fi
|
||||
VERSION="${TAG#v}"
|
||||
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
|
||||
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Download release assets
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
mkdir -p release-assets
|
||||
gh release download "${{ steps.version.outputs.tag }}" \
|
||||
-p "kingfisher-*.tgz" \
|
||||
-p "kingfisher-*.zip" \
|
||||
-D release-assets
|
||||
|
||||
- name: Extract binaries
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
mkdir -p extracted
|
||||
for archive in release-assets/*; do
|
||||
name=$(basename "$archive")
|
||||
dir="extracted/${name%.*}"
|
||||
mkdir -p "$dir"
|
||||
case "$archive" in
|
||||
*.tgz)
|
||||
tar -xzf "$archive" -C "$dir"
|
||||
;;
|
||||
*.zip)
|
||||
unzip -q "$archive" -d "$dir"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown archive: $archive" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
mkdir -p extracted/bin
|
||||
for bin in $(find extracted -type f -name "kingfisher" -o -name "kingfisher.exe"); do
|
||||
chmod +x "$bin" || true
|
||||
done
|
||||
|
||||
- name: Install build tooling
|
||||
run: python -m pip install --upgrade build
|
||||
|
||||
- name: Build wheels
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
version="${{ steps.version.outputs.version }}"
|
||||
|
||||
linux_x64=$(find extracted -type f -name "kingfisher" | rg -m1 "linux-x64" -)
|
||||
linux_arm64=$(find extracted -type f -name "kingfisher" | rg -m1 "linux-arm64" -)
|
||||
mac_x64=$(find extracted -type f -name "kingfisher" | rg -m1 "darwin-x64" -)
|
||||
mac_arm64=$(find extracted -type f -name "kingfisher" | rg -m1 "darwin-arm64" -)
|
||||
win_x64=$(find extracted -type f -name "kingfisher.exe" | rg -m1 "windows-x64" -)
|
||||
|
||||
scripts/build-pypi-wheel.sh \
|
||||
--binary "$linux_x64" \
|
||||
--version "$version" \
|
||||
--plat-name musllinux_1_2_x86_64
|
||||
|
||||
scripts/build-pypi-wheel.sh \
|
||||
--binary "$linux_arm64" \
|
||||
--version "$version" \
|
||||
--plat-name musllinux_1_2_aarch64
|
||||
|
||||
scripts/build-pypi-wheel.sh \
|
||||
--binary "$mac_x64" \
|
||||
--version "$version" \
|
||||
--plat-name macosx_10_9_x86_64
|
||||
|
||||
scripts/build-pypi-wheel.sh \
|
||||
--binary "$mac_arm64" \
|
||||
--version "$version" \
|
||||
--plat-name macosx_11_0_arm64
|
||||
|
||||
scripts/build-pypi-wheel.sh \
|
||||
--binary "$win_x64" \
|
||||
--version "$version" \
|
||||
--plat-name win_amd64
|
||||
|
||||
scripts/build-pypi-wheel.sh \
|
||||
--binary "$win_x64" \
|
||||
--version "$version" \
|
||||
--plat-name win_arm64
|
||||
|
||||
- name: Publish to PyPI (Trusted Publishing)
|
||||
uses: pypa/gh-action-pypi-publish@release/v1
|
||||
with:
|
||||
packages-dir: dist-pypi
|
||||
Loading…
Add table
Add a link
Reference in a new issue