mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-23 01:21:42 +00:00
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/ Done on the 2027 branch since the force change to Node 24 should (tm) happen after the last 2026 release. And in case it breaks something and we do need to backport to 2026, the release timeline on 2027 is not as strict
351 lines
13 KiB
YAML
351 lines
13 KiB
YAML
name: Gradle
|
|
|
|
on: [pull_request, push]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
validation:
|
|
name: "Validation"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: gradle/actions/wrapper-validation@v5
|
|
|
|
build-docker:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- container: wpilib/systemcore-cross-ubuntu:2027-24.04
|
|
artifact-name: Systemcore
|
|
build-options: "-Ponlylinuxsystemcore"
|
|
- container: wpilib/aarch64-cross-ubuntu:2027-bookworm-24.04
|
|
artifact-name: Arm64
|
|
build-options: "-Ponlylinuxarm64"
|
|
- container: wpilib/systemcore-cross-ubuntu:2027-24.04
|
|
artifact-name: Linux
|
|
build-options: "-Ponlylinuxx86-64"
|
|
name: "Build - ${{ matrix.artifact-name }}"
|
|
runs-on: ubuntu-24.04
|
|
needs: [validation]
|
|
steps:
|
|
- name: Check disk free space pre-cleanup
|
|
run: df -h
|
|
|
|
- name: Free disk space
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
tool-cache: false
|
|
android: true
|
|
dotnet: true
|
|
haskell: true
|
|
large-packages: false
|
|
docker-images: false
|
|
swap-storage: false
|
|
|
|
- name: Check disk free space post-cleanup
|
|
run: df -h
|
|
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set release environment variable
|
|
run: echo "EXTRA_GRADLE_ARGS=-PreleaseMode" >> $GITHUB_ENV
|
|
if: startsWith(github.ref, 'refs/tags/v2027')
|
|
- name: Build with Gradle
|
|
# main on 2021-05-30, to include addnab/docker-run-action/pull/17
|
|
uses: addnab/docker-run-action@3e77f186b7a929ef010f183a9e24c0f9955ea609
|
|
with:
|
|
image: ${{ matrix.container }}
|
|
options: -v ${{ github.workspace }}:/work -w /work -e ARTIFACTORY_PUBLISH_USERNAME -e ARTIFACTORY_PUBLISH_PASSWORD -e GITHUB_REF -e CI
|
|
run: ./gradlew build --build-cache -PbuildServer -PskipJavaFormat ${{ matrix.build-options }} ${{ env.EXTRA_GRADLE_ARGS }}
|
|
env:
|
|
ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
|
|
ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: ${{ matrix.artifact-name }}
|
|
path: build/allOutputs
|
|
|
|
- name: Check disk free space
|
|
if: always()
|
|
run: df -h
|
|
|
|
build-host:
|
|
env:
|
|
MACOSX_DEPLOYMENT_TARGET: 13.3
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: windows-2022
|
|
artifact-name: Win64Debug
|
|
architecture: x64
|
|
task: "build"
|
|
build-options: "-PciDebugOnly"
|
|
outputs: "build/allOutputs"
|
|
- os: windows-2022
|
|
artifact-name: Win64Release
|
|
architecture: x64
|
|
build-options: "-PciReleaseOnly"
|
|
task: "copyAllOutputs"
|
|
outputs: "build/allOutputs"
|
|
- os: windows-2022
|
|
artifact-name: WinArm64Debug
|
|
architecture: x64
|
|
task: "build"
|
|
build-options: "-PciDebugOnly -Pbuildwinarm64 -Ponlywindowsarm64"
|
|
outputs: "build/allOutputs"
|
|
- os: windows-2022
|
|
artifact-name: WinArm64Release
|
|
architecture: x64
|
|
build-options: "-PciReleaseOnly -Pbuildwinarm64 -Ponlywindowsarm64"
|
|
task: "copyAllOutputs"
|
|
outputs: "build/allOutputs"
|
|
- os: macOS-15
|
|
artifact-name: macOS
|
|
architecture: aarch64
|
|
task: "build"
|
|
outputs: "build/allOutputs"
|
|
- os: windows-2022
|
|
artifact-name: Win64FFI
|
|
architecture: x64
|
|
task: ":ntcoreffi:build"
|
|
build-options: "-Pntcoreffibuild -Pbuildwinarm64"
|
|
outputs: "ntcoreffi/build/outputs"
|
|
name: "Build - ${{ matrix.artifact-name }}"
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [validation]
|
|
steps:
|
|
- name: Check disk free space pre-cleanup
|
|
run: df -h
|
|
|
|
- name: Free disk space (macOS)
|
|
# CodeQL: 5G
|
|
# go: 748M
|
|
# Android: 12G
|
|
run: |
|
|
rm -rf /Users/runner/hostedtoolcache/CodeQL
|
|
rm -rf /Users/runner/hostedtoolcache/go
|
|
rm -rf /Users/runner/Library/Android
|
|
if: startsWith(matrix.os, 'macOS')
|
|
|
|
- name: Check disk free space post-cleanup
|
|
run: df -h
|
|
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
architecture: ${{ matrix.architecture }}
|
|
- name: Import Developer ID Certificate
|
|
uses: wpilibsuite/import-signing-certificate@v3
|
|
with:
|
|
certificate-data: ${{ secrets.APPLE_CERTIFICATE_DATA }}
|
|
certificate-passphrase: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
if: |
|
|
matrix.artifact-name == 'macOS' && (github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027')))
|
|
- name: Set Keychain Lock Timeout
|
|
run: security set-keychain-settings -lut 21600
|
|
if: |
|
|
matrix.artifact-name == 'macOS' && (github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027')))
|
|
- name: Set release environment variable
|
|
run: echo "EXTRA_GRADLE_ARGS=-PreleaseMode" >> $GITHUB_ENV
|
|
shell: bash
|
|
if: startsWith(github.ref, 'refs/tags/v2027')
|
|
- name: Build with Gradle
|
|
run: ./gradlew ${{ matrix.task }} --build-cache -PbuildServer -PskipJavaFormat ${{ matrix.build-options }} ${{ env.EXTRA_GRADLE_ARGS }}
|
|
env:
|
|
ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
|
|
ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
|
- name: Sign Libraries with Developer ID
|
|
run: ./gradlew copyAllOutputs --build-cache -PbuildServer -PskipJavaFormat -PdeveloperID=${{ secrets.APPLE_DEVELOPER_ID }} ${{ matrix.build-options }} ${{ env.EXTRA_GRADLE_ARGS }}
|
|
if: |
|
|
matrix.artifact-name == 'macOS' && (github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027')))
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: ${{ matrix.artifact-name }}
|
|
path: ${{ matrix.outputs }}
|
|
|
|
- name: Check disk free space
|
|
if: always()
|
|
run: df -h
|
|
|
|
build-documentation:
|
|
name: "Build - Documentation"
|
|
runs-on: ubuntu-24.04
|
|
needs: [validation]
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
- name: Set release environment variable
|
|
run: echo "EXTRA_GRADLE_ARGS=-PreleaseMode" >> $GITHUB_ENV
|
|
if: startsWith(github.ref, 'refs/tags/v2027')
|
|
- name: Build with Gradle
|
|
run: ./gradlew docs:zipDocs --build-cache -PbuildServer -PdocWarningsAsErrors ${{ env.EXTRA_GRADLE_ARGS }}
|
|
env:
|
|
ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
|
|
ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: Documentation
|
|
path: docs/build/outputs
|
|
|
|
publish:
|
|
name: "Documentation - Publish"
|
|
runs-on: ubuntu-22.04
|
|
if: github.repository == 'wpilibsuite/allwpilib' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
|
|
needs: [build-documentation]
|
|
concurrency: ci-docs-publish
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
persist-credentials: false
|
|
- name: Download docs artifacts
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: Documentation
|
|
- name: Make output directories
|
|
run: |
|
|
mkdir -p docs/tmp/doxygen/html
|
|
mkdir -p docs/tmp/javadoc
|
|
- name: Extract docs
|
|
run: |
|
|
unzip _GROUP_edu_wpi_first_wpilibc_ID_documentation_CLS.zip -d docs/tmp/doxygen/html
|
|
unzip _GROUP_edu_wpi_first_wpilibj_ID_documentation_CLS.zip -d docs/tmp/javadoc
|
|
- name: Set environment variables (Development)
|
|
run: |
|
|
echo "BRANCH=development" >> $GITHUB_ENV
|
|
if: github.ref == 'refs/heads/main'
|
|
- name: Set environment variables (Tag)
|
|
run: |
|
|
echo "EXTRA_GRADLE_ARGS=-PreleaseMode" >> $GITHUB_ENV
|
|
echo "BRANCH=beta" >> $GITHUB_ENV
|
|
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '2027')
|
|
- name: Set environment variables (Release)
|
|
run: |
|
|
echo "EXTRA_GRADLE_ARGS=-PreleaseMode" >> $GITHUB_ENV
|
|
echo "BRANCH=release" >> $GITHUB_ENV
|
|
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, 'alpha') && !contains(github.ref, 'beta') && !contains(github.ref, '2027')
|
|
- name: Set environment variables (2027)
|
|
run: |
|
|
echo "EXTRA_GRADLE_ARGS=-PreleaseMode" >> $GITHUB_ENV
|
|
echo "BRANCH=2027" >> $GITHUB_ENV
|
|
if: startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '2027')
|
|
- name: Install SSH Client 🔑
|
|
uses: webfactory/ssh-agent@v0.9.1
|
|
with:
|
|
ssh-private-key: ${{ secrets.GH_DEPLOY_KEY }}
|
|
- name: Deploy 🚀
|
|
uses: JamesIves/github-pages-deploy-action@v4.6.1
|
|
with:
|
|
ssh-key: true
|
|
repository-name: wpilibsuite/wpilibsuite.github.io
|
|
branch: allwpilib-${{ env.BRANCH }}
|
|
clean: true
|
|
single-commit: true
|
|
folder: docs/tmp
|
|
- name: Trigger Workflow
|
|
uses: actions/github-script@v8
|
|
with:
|
|
github-token: ${{ secrets.DISPATCH_PAT_TOKEN }}
|
|
script: |
|
|
github.rest.actions.createWorkflowDispatch({
|
|
owner: context.repo.owner,
|
|
repo: 'wpilibsuite.github.io',
|
|
workflow_id: 'static.yml',
|
|
ref: 'main',
|
|
})
|
|
|
|
combine:
|
|
name: Combine
|
|
needs: [build-docker, build-host, build-documentation]
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- name: Free disk space
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
tool-cache: false
|
|
android: true
|
|
dotnet: true
|
|
haskell: true
|
|
large-packages: false
|
|
docker-images: false
|
|
swap-storage: false
|
|
|
|
- uses: actions/checkout@v6
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
with:
|
|
repository: wpilibsuite/build-tools
|
|
- uses: actions/download-artifact@v7
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
with:
|
|
path: combiner/products/build/allOutputs
|
|
- name: Flatten Artifacts
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
run: rsync -a --delete combiner/products/build/allOutputs/*/* combiner/products/build/allOutputs/
|
|
- name: Check version number exists
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
run: |
|
|
cat combiner/products/build/allOutputs/version.txt
|
|
test -s combiner/products/build/allOutputs/version.txt
|
|
- uses: actions/setup-java@v5
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
- name: Combine (2027)
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
github.ref == 'refs/heads/2027'
|
|
run: cd combiner && ./gradlew publish -Pallwpilib -Pbuild2027
|
|
env:
|
|
RUN_AZURE_ARTIFACTORY_RELEASE: "TRUE"
|
|
ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
|
|
ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
|
- name: Combine (2027 Release)
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
startsWith(github.ref, 'refs/tags/v2027')
|
|
run: cd combiner && ./gradlew publish -Pallwpilib -PreleaseRepoPublish -Pbuild2027
|
|
env:
|
|
RUN_AZURE_ARTIFACTORY_RELEASE: "TRUE"
|
|
ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
|
|
ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
|
- uses: actions/upload-artifact@v6
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
with:
|
|
name: Maven
|
|
path: ~/releases
|