Skip to content

Merge pull request #48 from robotpy/misc #73

Merge pull request #48 from robotpy/misc

Merge pull request #48 from robotpy/misc #73

Workflow file for this run

---
name: dist
on:
pull_request:
push:
branches:
- main
tags:
- '*'
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
# This job limits concurrency on the default branch
# - we want it to run so it can populate ccache, but we typically
# don't care about when it completes, so limit its concurrency
# to stop eating up valuable + slow Windows/macOS runners
setup_concurrency:
runs-on: ubuntu-latest
outputs:
max-parallel: ${{ steps.max-parallel.outputs.p }}
steps:
- name: Setup concurrency
shell: bash
id: max-parallel
run: |
if [[ "${{ github.ref_name }}" == "main" ]]; then
echo "PARALLEL=1"
echo "p={\"v\": 1}" >> $GITHUB_OUTPUT
else
echo "PARALLEL=10000"
echo "p={\"v\": 10000}" >> $GITHUB_OUTPUT
fi
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: psf/black@stable
- uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Install deps
shell: bash
run: |
python -m pip --disable-pip-version-check install -r rdev_requirements.txt
- name: Check pyproject / rdev synchronization
shell: bash
run: |
./rdev.sh ci check-pyproject
#
# Build native wheels
#
build:
runs-on: ${{ matrix.os }}
needs: [setup_concurrency]
strategy:
max-parallel: ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }}
fail-fast: true
matrix:
os: ["ubuntu-22.04", "macos-12", "windows-2022"]
python_version:
- '3.8'
- '3.9'
- '3.10'
- '3.11'
- '3.12'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python_version }}
#
# Setup build caching
#
- name: Set ccache variant
shell: bash
id: ccache
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
echo "VARIANT=sccache" >> $GITHUB_OUTPUT
echo "RPYBUILD_CC_LAUNCHER=sccache" >> $GITHUB_ENV
else
echo "VARIANT=ccache" >> $GITHUB_OUTPUT
echo "RPYBUILD_CC_LAUNCHER=ccache" >> $GITHUB_ENV
fi
- name: Setup ccache
if: steps.ccache.outputs.variant == 'ccache'
uses: hendrikmuhs/[email protected]
with:
key: ${{ matrix.os }}-${{ matrix.python_version }}
variant: ccache
- name: Setup sccache
if: steps.ccache.outputs.variant == 'sccache'
uses: mozilla-actions/[email protected]
- name: Install deps
shell: bash
run: |
python -m pip --disable-pip-version-check install -r rdev_requirements.txt
- name: Install numpy (needed for stubgen but broken in raspbian CI)
shell: bash
run: |
python -m pip --disable-pip-version-check install 'numpy<2'
- name: Build + test wheels
shell: bash
run: |
./rdev.sh ci run
env:
RPYBUILD_STRIP_LIBPYTHON: "1"
SCCACHE_GHA_ENABLED: "true"
- uses: actions/upload-artifact@v3
with:
name: "dist-${{ runner.os }}"
path: dist
#
# Build roboRIO/raspbian wheels
#
cross-build:
runs-on: ubuntu-latest
needs: [setup_concurrency]
strategy:
max-parallel: ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }}
matrix:
os:
- container: wpilib/roborio-cross-ubuntu:2024-22.04-py312
name: roborio
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py38
name: raspbian
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py39
name: raspbian
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py310
name: raspbian
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py311
name: raspbian
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py312
name: raspbian
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py38
name: raspbian
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py39
name: raspbian
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py310
name: raspbian
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py311
name: raspbian
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py312
name: raspbian
container:
image: "${{ matrix.os.container }}"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set ccache env
shell: bash
run: |
echo "RPYBUILD_CC_LAUNCHER=ccache" >> $GITHUB_ENV
- run: apt-get update
- name: Setup ccache
uses: hendrikmuhs/[email protected]
with:
key: ${{ matrix.os.container }}
variant: ccache
- name: Install setuptools + wheel
run: |
/build/venv/bin/build-pip --disable-pip-version-check install -U "setuptools==63.4.3; python_version < '3.12'"
/build/venv/bin/build-pip --disable-pip-version-check install -U wheel==0.41.2
/build/venv/bin/cross-pip --disable-pip-version-check install -U "setuptools==63.4.3; python_version < '3.12'"
/build/venv/bin/cross-pip --disable-pip-version-check install -U wheel==0.41.2
# See https://github.com/pypa/setuptools_scm/issues/784
- name: Set git directory as safe to allow setuptools-scm to work
shell: bash
run: |
pwd
/usr/bin/git config --global --add safe.directory $(pwd)
- name: Install deps
shell: bash
run: |
/build/venv/bin/cross-pip --disable-pip-version-check install -r rdev_requirements.txt
- name: Build + test wheels
shell: bash
run: |
/build/venv/bin/cross-python -m devtools ci run --no-test
env:
RPYBUILD_STRIP_LIBPYTHON: "1"
- uses: actions/upload-artifact@v3
with:
name: dist-${{ matrix.os.name }}
path: dist
#
# Publish wheels to wpilib artifactory, pypi
#
publish-rpyrepo:
runs-on: ubuntu-latest
needs: [check, build, cross-build]
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
steps:
- uses: actions/download-artifact@v3
with:
name: dist-roborio
path: dist/
- uses: actions/download-artifact@v3
with:
name: dist-raspbian
path: dist/
- uses: pypa/gh-action-pypi-publish@release/v1
with:
verify-metadata: false
user: ${{ secrets.WPI_ARTIFACTORY_USERNAME }}
password: ${{ secrets.WPI_ARTIFACTORY_TOKEN }}
repository-url: https://wpilib.jfrog.io/artifactory/api/pypi/wpilib-python-release-2024-local
publish-pypi:
runs-on: ubuntu-latest
needs: [check, build, cross-build]
permissions:
id-token: write
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/download-artifact@v3
with:
name: dist-Windows
path: dist/
- uses: actions/download-artifact@v3
with:
name: dist-macOS
path: dist/
- uses: actions/download-artifact@v3
with:
name: dist-Linux
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
verify-metadata: false
ping-rtd:
runs-on: ubuntu-latest
needs: [check, build, cross-build]
if: |
github.event_name == 'push' &&
(startsWith(github.event.ref, 'refs/tags') || github.event.ref == 'refs/heads/main')
steps:
- name: Sleep 1 minute to allow artifact upload
shell: bash
run: sleep 60
- name: Ping readthedocs
uses: robotpy/build-actions/ping-rtd@v2024
with:
token: ${{ secrets.RTD_TOKEN }}
webhook: ${{ secrets.RTD_WEBHOOK }}