mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
When downloading a patch to fix linting errors, it's annoying to have to unzip it, particularly when it's a single file. This PR updates the `upload-artifact` action to v7, which allows for uploading an artifact without zipping it. It also sets archive to false for all patches generated by linting.
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: 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@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: 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@v7
|
|
if: |
|
|
github.repository == 'wpilibsuite/allwpilib' &&
|
|
(github.ref == 'refs/heads/2027' || startsWith(github.ref, 'refs/tags/v2027'))
|
|
with:
|
|
name: Maven
|
|
path: ~/releases
|