Add CI + management scripts #3
Workflow file for this run
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
--- | |
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 | |
# | |
# 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 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python_version }} | |
- 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 | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: ${{ matrix.os }}-${{ matrix.python_version }} | |
variant: ${{ steps.ccache.outputs.variant }} | |
- name: Set robotpy-build environment | |
shell: bash | |
run: | | |
echo "RPYBUILD_PARALLEL=1" >> $GITHUB_ENV | |
echo "RPYBUILD_STRIP_LIBPYTHON=1" >> $GITHUB_ENV | |
echo "MACOSX_DEPLOYMENT_TARGET=11.7" >> $GITHUB_ENV | |
- 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 run | |
- 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 | |
- 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: Set robotpy-build environment | |
shell: bash | |
run: | | |
echo "RPYBUILD_PARALLEL=1" >> $GITHUB_ENV | |
echo "RPYBUILD_STRIP_LIBPYTHON=1" >> $GITHUB_ENV | |
echo "MACOSX_DEPLOYMENT_TARGET=11.7" >> $GITHUB_ENV | |
- 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 | |
- 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 | |
- 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 |