mirror of
https://github.com/google/go-jsonnet.git
synced 2026-04-07 06:21:09 +02:00
Build Linux aarch64 wheels by extending the build_wheels job in the workflow to also run on an `ubuntu-22.04-arm` runner. In order for this to work, the commit also extends the `install-go.sh` helper architecture aware.
127 lines
3.8 KiB
YAML
127 lines
3.8 KiB
YAML
name: Build and Publish Python Package
|
|
|
|
# Be very careful granting extra permissions here, as this workflow uses third party actions.
|
|
# Prefer to pin to exact commits for third-party actions. I'm making an exception for actions
|
|
# maintained by GitHub itself.
|
|
|
|
# For now, just trigger this workflow manually.
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
upload_to_pypi:
|
|
description: "Upload generate package files to PyPI"
|
|
required: true
|
|
type: boolean
|
|
pypi_environment:
|
|
description: "Which PyPI instance to publish to"
|
|
required: true
|
|
type: choice
|
|
options:
|
|
- testpypi
|
|
- pypi
|
|
|
|
jobs:
|
|
build_sdist:
|
|
name: Build Python sdist
|
|
runs-on: ubuntu-24.04
|
|
permissions:
|
|
contents: read
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
submodules: true
|
|
|
|
- uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.13"
|
|
cache: "pip"
|
|
|
|
- run: pip install 'build==1.2.2'
|
|
|
|
- name: Build sdist
|
|
run: python3 -m build --sdist
|
|
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: sdist
|
|
path: ./dist/*.gz
|
|
if-no-files-found: error
|
|
|
|
build_wheels:
|
|
name: Build wheels on ${{ matrix.os }}
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-22.04, ubuntu-22.04-arm, macos-14, macos-latest]
|
|
# Windows Wheel build doesn't work yet.
|
|
# os: [windows-2022]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
submodules: true
|
|
|
|
- uses: actions/setup-go@v6
|
|
# Linux runner doesn't need Go setup because it's installed
|
|
# separately in each cibuildwheel build container
|
|
if: "${{ runner.os != 'Linux' }}"
|
|
with:
|
|
go-version: "1.24"
|
|
|
|
- name: Build wheels
|
|
uses: pypa/cibuildwheel@ee02a1537ce3071a004a6b08c41e72f0fdc42d9a # v3.4.0
|
|
env:
|
|
# Skip 32-bit Windows, 32-bit Linux, musllinux and CPython before 3.9.
|
|
# See https://cibuildwheel.readthedocs.io/en/stable/options/#examples_1
|
|
CIBW_SKIP: "*-win32 *-manylinux_i686 *-musllinux* cp38-*"
|
|
CIBW_BEFORE_ALL_LINUX: >
|
|
bash {package}/.github/workflows/install-go.sh &&
|
|
export PATH="$PATH":/usr/local/go/bin &&
|
|
command -v go > /dev/null
|
|
CIBW_ENVIRONMENT: PATH=$PATH:/usr/local/go/bin
|
|
CIBW_TEST_COMMAND: >
|
|
python {package}/python/_jsonnet_test.py
|
|
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: cibw-wheels-${{ matrix.os }}
|
|
path: ./wheelhouse/*.whl
|
|
if-no-files-found: error
|
|
|
|
upload_to_pypi:
|
|
name: "Upload packages to PyPI"
|
|
needs: [build_sdist, build_wheels]
|
|
runs-on: ubuntu-24.04
|
|
if: "${{ inputs.upload_to_pypi }}"
|
|
permissions:
|
|
contents: read
|
|
id-token: write # Needed for PyPI Trusted Publishing
|
|
environment:
|
|
name: "${{ inputs.pypi_environment }}"
|
|
url: "${{ inputs.pypi_environment == 'pypi' && 'https://pypi.org/p/gosonnet' || 'https://test.pypi.org/p/gosonnet' }}"
|
|
steps:
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
path: cibw-wheels
|
|
pattern: cibw-wheels-*
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
path: sdist
|
|
name: sdist
|
|
- name: Flatten wheels to one directory
|
|
run: |
|
|
mkdir dist
|
|
find cibw-wheels/ -type f -name '*.whl' -exec mv '{}' ./dist/ ';'
|
|
find sdist/ -type f -name '*.gz' -exec mv '{}' ./dist/ ';'
|
|
- name: Publish to PyPI
|
|
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
|
|
with:
|
|
verbose: true
|
|
print-hash: true
|
|
repository-url: "${{ inputs.pypi_environment == 'testpypi' && 'https://test.pypi.org/legacy/' || '' }}"
|