build & upload #55
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
# | |
# When executed manually, this will upload a ".devNNN" build to testpypi; | |
# when executed upon a release, it will upload a regular build to pypi. | |
# | |
# For pypi, you need to have the PYPI_USERNAME and PYPI_PASSWORD secrets configured. | |
# For testpypi, you'll need TESTPYPI_USERNAME and TESTPYPI_PASSWORD. | |
# | |
name: build & upload | |
on: | |
release: | |
types: [ published ] | |
workflow_dispatch: | |
jobs: | |
pick-devN: | |
name: create .devN build date coordinated across all matrix jobs | |
runs-on: ubuntu-latest | |
steps: | |
- run: TZ='America/New_York' date '+%Y%m%d%H%M' > dev-build.txt | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: devN | |
path: dev-build.txt | |
build-wheel: | |
needs: pick-devN | |
runs-on: ${{ matrix.os }} | |
container: ${{ matrix.container }} | |
strategy: | |
matrix: | |
python_version: ['3.8', '3.9', '3.10', '3.11'] | |
os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] | |
include: | |
- os: ubuntu-latest | |
container: quay.io/pypa/manylinux2014_x86_64 # https://github.com/pypa/manylinux | |
# just need ONE build from 3.12 onwards; also only one needs to upload sources | |
- python_version: 3.12 | |
os: ubuntu-latest | |
container: '' | |
upload_source: true | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Mark workspace safe for git | |
# needed for container and self-hosted runners; see https://github.com/actions/checkout/issues/766 | |
if: matrix.container != '' | |
run: | | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
# setuptool's bdist uses 'git archive' to find files, and fails silently if it can't, | |
# leading to missing files in the archive. Run it separately to force a failure in that case. | |
(cd src; git archive --prefix slipcover/ HEAD | tar -t > /dev/null) | |
- name: get coordinated .devN | |
if: github.event_name != 'release' | |
uses: actions/download-artifact@v3 | |
with: | |
name: devN | |
- name: set up python (script version) | |
if: matrix.container == '' | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python_version }} | |
- name: set up python (container version) | |
if: matrix.container != '' | |
run: | | |
PYV=`echo "${{ matrix.python_version }}" | tr -d "."`; ls -d -1 /opt/python/cp$PYV*/bin | head -n 1 >> $GITHUB_PATH | |
cat $GITHUB_PATH | |
- name: install dependencies | |
run: | | |
python3 -m pip install setuptools wheel twine build virtualenv | |
- name: build wheel | |
run: | | |
python3 -m build --wheel | |
- name: run auditwheel for manylinux | |
if: matrix.container != '' | |
run: | | |
auditwheel repair dist/*.whl | |
rm -f dist/*.whl | |
mv wheelhouse/*.whl dist/ | |
- name: build source dist | |
if: matrix.upload_source | |
run: python3 -m build --sdist | |
- name: Non-release (dev) upload | |
if: github.event_name != 'release' | |
env: | |
TWINE_REPOSITORY: testpypi | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.TESTPYPI_TOKEN }} | |
run: twine upload --verbose dist/* | |
- name: Release upload | |
if: github.event_name == 'release' | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} | |
run: twine upload --verbose dist/* |