add trapezoidal profile tests #426
Workflow file for this run
This file contains hidden or 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
--- | |
name: dist | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
- '2027' | |
tags: | |
- '*' | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
SCCACHE_WEBDAV_ENDPOINT: "https://frcmaven.wpi.edu/artifactory/wpilib-generic-cache-cmake-local" | |
SCCACHE_WEBDAV_KEY_PREFIX: "sccache-robotpy" | |
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 | |
elif [[ "${{ github.ref_name }}" == "2027" ]]; 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.13" | |
- 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 | |
- name: Check git tag | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | |
shell: bash | |
run: | | |
./rdev.sh ci check-tag | |
# | |
# Build other wheels first (OS-specific, not python specific) | |
# | |
build-other: | |
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", "ubuntu-22.04-arm", "macos-14", "windows-2022"] | |
include: | |
- os: ubuntu-22.04-arm | |
container: python:3.13-bookworm | |
container: ${{ matrix.container }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install python | |
if: matrix.os != 'ubuntu-22.04-arm' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- name: Install deps | |
shell: bash | |
run: | | |
python -m pip --disable-pip-version-check install -r rdev_requirements.txt | |
- name: Build + test wheels | |
shell: bash | |
run: | | |
./rdev.sh ci build-other-wheels | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: "pypi-other-${{ runner.os }}-${{ runner.arch }}" | |
path: dist | |
# | |
# Build meson wheels | |
# | |
build-meson: | |
runs-on: ${{ matrix.os }} | |
needs: [setup_concurrency, build-other] | |
strategy: | |
max-parallel: ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }} | |
fail-fast: true | |
matrix: | |
os: | |
- "ubuntu-22.04" | |
- "macos-13" # x86_64 | |
- "macos-14" # arm64 | |
- "windows-2022" | |
python_version: | |
- '3.9' | |
- '3.10' | |
- '3.11' | |
- '3.12' | |
- '3.13' | |
include: | |
- os: ubuntu-22.04-arm | |
python_version: '3.11' | |
container: python:3.11-bookworm | |
- os: ubuntu-22.04-arm | |
python_version: '3.12' | |
container: python:3.12-bookworm | |
- os: ubuntu-22.04-arm | |
python_version: '3.13' | |
container: python:3.13-bookworm | |
container: ${{ matrix.container }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install python | |
if: matrix.os != 'ubuntu-22.04-arm' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python_version }} | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: "pypi-other-${{ runner.os }}-*" | |
path: dist-other | |
merge-multiple: true | |
# | |
# Platform specific setup | |
# | |
- name: Install libgl | |
run: apt-get update && apt-get install -y libgl1 | |
if: matrix.os == 'ubuntu-22.04-arm' | |
- name: Setup MSVC | |
uses: bus1/cabuild/action/msdevshell@e22aba57d6e74891d059d66501b6b5aed8123c4d # v1 | |
with: | |
architecture: x64 | |
if: runner.os == 'Windows' | |
# | |
# Setup build caching | |
# | |
- name: Set ccache params | |
shell: bash | |
id: ccache | |
env: | |
OS: ${{ runner.os }} | |
run: | | |
if [[ "$OS" == "macOS" ]]; then | |
echo "SCCACHE_CACHE_MULTIARCH=1" >> $GITHUB_ENV | |
fi | |
- name: Setup sccache | |
uses: mozilla-actions/sccache-action@v0.0.7 | |
- name: Install deps | |
run: | | |
python -m pip --disable-pip-version-check install -r rdev_requirements.txt | |
- name: Install numpy (needed for stubgen but broken in raspbian CI) | |
run: | | |
python -m pip --disable-pip-version-check install numpy | |
- name: Build + test wheels | |
run: | | |
python -m devtools ci build-meson-wheels | |
env: | |
SCCACHE_WEBDAV_USERNAME: ${{ secrets.WPI_ARTIFACTORY_USERNAME }} | |
SCCACHE_WEBDAV_PASSWORD: ${{ secrets.WPI_ARTIFACTORY_TOKEN }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: "pypi-meson-${{ runner.os }}-${{ runner.arch }}-${{ matrix.python_version }}" | |
path: dist | |
# | |
# Build roboRIO/raspbian wheels | |
# | |
cross-other: | |
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:2025-22.04-py313 | |
name: roborio | |
- container: wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py313 | |
name: raspbian | |
container: | |
image: "${{ matrix.os.container }}" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup cross environment for meson | |
uses: robotpy/build-actions/setup-cross-meson@semiwrap | |
- 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 build-other-wheels --no-test | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cross-other-${{ matrix.os.name }} | |
path: dist | |
cross-meson: | |
runs-on: ubuntu-latest | |
needs: [setup_concurrency, cross-other] | |
strategy: | |
max-parallel: ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }} | |
matrix: | |
os: | |
- container: wpilib/roborio-cross-ubuntu:2025-22.04-py313 | |
name: roborio | |
base: roborio | |
- container: wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py311 | |
name: raspbian-py311 | |
base: raspbian | |
- container: wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py312 | |
name: raspbian-py312 | |
base: raspbian | |
- container: wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py313 | |
name: raspbian-py313 | |
base: raspbian | |
container: | |
image: "${{ matrix.os.container }}" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: "cross-other-${{ matrix.os.base }}" | |
path: dist-other | |
- name: Setup cross environment for meson | |
uses: robotpy/build-actions/setup-cross-meson@semiwrap | |
- run: apt-get update | |
- name: Setup ccache | |
uses: hendrikmuhs/ccache-action@v1.2 | |
with: | |
key: ${{ matrix.os.container }} | |
variant: ccache | |
- name: Install deps | |
shell: bash | |
run: | | |
/build/venv/bin/cross-pip --disable-pip-version-check install -r rdev_requirements.txt | |
- name: Build wheels | |
shell: bash | |
run: | | |
/build/venv/bin/cross-python -m devtools ci build-meson-wheels --no-test --cross=cross.txt | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cross-meson-${{ matrix.os.name }} | |
path: dist | |
# | |
# Publish wheels to wpilib artifactory, pypi | |
# | |
publish-rpyrepo: | |
runs-on: ubuntu-latest | |
needs: [check, build-meson, cross-meson] | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: cross-meson-* | |
path: dist/ | |
merge-multiple: true | |
- 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-2025-local | |
publish-rpyrepo-other: | |
runs-on: ubuntu-latest | |
needs: [check, build-meson, cross-meson] | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: cross-other-* | |
path: dist/ | |
merge-multiple: true | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
verify-metadata: false | |
skip-existing: true # native packages can be uploaded multiple times | |
user: ${{ secrets.WPI_ARTIFACTORY_USERNAME }} | |
password: ${{ secrets.WPI_ARTIFACTORY_TOKEN }} | |
repository-url: https://wpilib.jfrog.io/artifactory/api/pypi/wpilib-python-release-2025-local | |
publish-pypi: | |
runs-on: ubuntu-latest | |
needs: [check, build-meson, cross-meson] | |
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: | |
pattern: pypi-meson-* | |
path: dist/ | |
merge-multiple: true | |
- name: Publish to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
verify-metadata: false | |
publish-pypi-other: | |
runs-on: ubuntu-latest | |
needs: [check, build-meson, cross-meson] | |
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: | |
pattern: pypi-other-* | |
path: dist/ | |
merge-multiple: true | |
- name: Publish to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
verify-metadata: false | |
skip-existing: true # native packages can be uploaded multiple times | |
ping-rtd: | |
runs-on: ubuntu-latest | |
needs: [check, build-meson, cross-meson] | |
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-rpyrepo-other, publish-pypi, publish-pypi-other] | |
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 }}"}' |