Skip to content

2025 WPILib updates #192

2025 WPILib updates

2025 WPILib updates #192

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@v5
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-13", "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@v5
with:
python-version: ${{ matrix.python_version }}
#
# Setup build caching
#
- name: Set ccache size
shell: bash
id: ccache
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
echo "MAX_SIZE=1200M" >> $GITHUB_OUTPUT
else
echo "MAX_SIZE=500M" >> $GITHUB_OUTPUT
fi
- name: Setup ccache
# uses: hendrikmuhs/[email protected]
uses: robotpy/ccache-action@fork
with:
key: ${{ matrix.os }}-${{ matrix.python_version }}
variant: ccache
max-size: ${{ steps.ccache.outputs.max_size }}
- 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"
RPYBUILD_CC_LAUNCHER: ccache
- uses: actions/upload-artifact@v4
with:
name: "dist-${{ runner.os }}-${{ matrix.python_version }}"
path: dist
merge:
runs-on: ubuntu-latest
needs: [cross-build, build]
steps:
- name: Merge Windows Artifacts
uses: actions/upload-artifact/merge@v4
with:
name: dist-Windows
pattern: dist-Windows*
delete-merged: true
- name: Merge Linux Artifacts
uses: actions/upload-artifact/merge@v4
with:
name: dist-Linux
pattern: dist-Linux*
delete-merged: true
- name: Merge macOS Artifacts
uses: actions/upload-artifact/merge@v4
with:
name: dist-macOS
pattern: dist-macOS*
delete-merged: true
- name: Merge raspbian Artifacts
uses: actions/upload-artifact/merge@v4
with:
name: dist-raspbian
pattern: dist-raspbian*
delete-merged: true
#
# 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-py38
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py39
name: raspbian-py39
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py310
name: raspbian-py310
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py311
name: raspbian-py311
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04-py312
name: raspbian-py312
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py38
name: raspbian-aarch64-py38
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py39
name: raspbian-aarch64-py39
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py310
name: raspbian-aarch64-py310
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py311
name: raspbian-aarch64-py311
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04-py312
name: raspbian-aarch64-py312
container:
image: "${{ matrix.os.container }}"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- 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)
# See https://github.com/pallets/markupsafe/issues/475
- name: Install MarkupSafe
shell: bash
run: |
/build/venv/bin/cross-pip install --no-build-isolation markupsafe
- 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"
RPYBUILD_CC_LAUNCHER: ccache
- uses: actions/upload-artifact@v4
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@v4
with:
name: dist-roborio
path: dist/
- uses: actions/download-artifact@v4
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@v4
with:
name: dist-Windows
path: dist/
- uses: actions/download-artifact@v4
with:
name: dist-macOS
path: dist/
- uses: actions/download-artifact@v4
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 }}
ping-meta:
runs-on: ubuntu-latest
needs: [publish-rpyrepo, publish-pypi]
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
steps:
- uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.META_REPO_ACCESS_TOKEN }}
repository: robotpy/robotpy-meta
event-type: tag
client-payload: '{"package_name": "mostrobotpy", "package_version": "${{ github.ref_name }}"}'