mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
Commands v3 had a few changes due to the upgrade: - Java 24 removed the Pinned: MONITOR IllegalStateException when yielding in a synchronized block, so we no longer need to special case for it - Lambda method name generation was tweaked, requiring tests to be updated - Bazel java_rules needed to be bumped to support Java 25 Closes #8425
354 lines
13 KiB
YAML
354 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
|
|
uses: wpilibsuite/docker-run-action@v4
|
|
with:
|
|
image: ${{ matrix.container }}
|
|
options: -v ${{ github.workspace }}:/work -w /work -e ARTIFACTORY_PUBLISH_USERNAME -e ARTIFACTORY_PUBLISH_PASSWORD -e GITHUB_REF -e CI
|
|
# Start avahi-daemon and build
|
|
run: |
|
|
service dbus start
|
|
avahi-daemon -D
|
|
./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@v7
|
|
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: 25
|
|
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@v7
|
|
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: 25
|
|
- 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@v7
|
|
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_org_wpilib_wpilibc_ID_documentation_CLS.zip -d docs/tmp/doxygen/html
|
|
unzip _GROUP_org_wpilib_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: 25
|
|
- 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@v7
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
with:
|
|
name: Maven
|
|
path: ~/releases
|