Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
231 changes: 135 additions & 96 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,44 +13,133 @@ defaults:
shell: bash

jobs:
build:
build-docker:
strategy:
fail-fast: false
matrix:
include:
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04
name: LinuxARM64
build-options: "-Ponlylinuxarm64"
platform-type: linuxarm64
arch: arm64
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04
name: LinuxARM32
build-options: "-Ponlylinuxarm32"
platform-type: linuxarm32
arch: arm32
runs-on: ubuntu-latest
name: "Build - ${{ matrix.name }}"
container: ${{ matrix.container }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 11

- name: Build
run: |
./gradlew outputVersions publish ${{ matrix.build-options }} -PreleaseMode
- name: Install 7zip
run: |
sudo apt-get update
sudo apt-get install -y p7zip-full

- name: Download WPILib HAL artifacts and headers for ${{ matrix.platform-type }}
run : |
halVersion=$(cat wpiHalVersion.txt)

halPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
halHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-headers.zip
utilPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
utilHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-headers.zip

curl -o halPlatform.zip "$halPlatformUrl"
curl -o halHeaders.zip "$halHeadersUrl"
curl -o utilPlatform.zip "$utilPlatformUrl"
curl -o utilHeaders.zip "$utilHeadersUrl"

- name: Unzip WPILib HAL artifacts and headers
run: |
unzip halPlatform.zip -d halPlatform
unzip halHeaders.zip -d halHeaders
unzip utilPlatform.zip -d utilPlatform
unzip utilHeaders.zip -d utilHeaders

- name: Gather all needed headers
run: |
mkdir headers-for-artifact
cp -r halHeaders/hal headers-for-artifact
cp -r utilHeaders/wpi headers-for-artifact
cp -r src/main/native/include/* headers-for-artifact

- name: Zip the needed headers and put them in the appropriate location for artifact upload
run: |
mkdir -p CANBridge-artifacts
7z a CANBridge-artifacts/headers.zip ./headers-for-artifact/*

# Put Linux ARM release files together in one directory
- name: Create Artifact
run: |
cp build/libs/cANBridge/static/release/libCANBridge.a CANBridge-artifacts/libCANBridge.a
cp build/libs/cANBridge/shared/release/libCANBridge.so CANBridge-artifacts/libCANBridge.so
cp halPlatform/linux/${{ matrix.arch }}/shared/libwpiHal.so CANBridge-artifacts/libwpiHal.so
cp utilPlatform/linux/${{ matrix.arch }}/shared/libwpiutil.so CANBridge-artifacts/libwpiutil.so

# Upload build artifact
- name: Upload build artifact
uses: actions/upload-artifact@v3
with:
name: CANBridge-${{ github.sha }}-${{ matrix.platform-type }}-${{ matrix.name }}
path: CANBridge-artifacts/

build-native:
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
container: ''
name: windows64
name: Win64
platform-type: windowsx86-64
- os: ubuntu-latest
container: ''
name: linux64
# - os: ubuntu-latest-arm64
# container: ''
# name: linuxarm64
name: Linux64
platform-type: linuxx86-64
# GitHub hosted runner `macos-latest` is arm64, which is why we need to specify `macos-13` for x86_64
# See https://github.com/actions/runner-images?tab=readme-ov-file#available-images for more information
- os: macos-latest
container: ''
name: macosarm64
name: MacOSARM64
platform-type: osxuniversal
- os: macos-13
container: ''
name: macosintel64
name: "build-${{ matrix.name }}"
name: MacOS64
platform-type: osxuniversal
name: "Build - ${{ matrix.name }}"
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}

- name: Setup Java
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 11

- name: Cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
.gradle
Expand All @@ -64,122 +153,72 @@ jobs:
run: |
./gradlew outputVersions publish ${{ matrix.build-options }} -PreleaseMode

- name: Download WPILib HAL artifacts and headers, gather all needed headers
# if: contains(matrix.name, 'windows64')
- name: Download WPILib HAL artifacts and headers for ${{ matrix.platform-type }}
run : |
halVersion=$(cat wpiHalVersion.txt)

# Download WPILib artifacts from Artifactory
halWindowsUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-windowsx86-64.zip
halMacUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-osxuniversal.zip
halLinux64Url=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-linuxx86-64.zip
halLinuxArmUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-linuxarm64.zip
halPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
halHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-headers.zip

utilWindowsUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-windowsx86-64.zip
utilMacUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-osxuniversal.zip
utilLinux64Url=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-linuxx86-64.zip
utilLinuxArmUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-linuxarm64.zip
utilPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
utilHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-headers.zip

curl -o halWindows.zip "$halWindowsUrl"
curl -o halMac.zip "$halMacUrl"
curl -o halLinux64.zip "$halLinux64Url"
curl -o halLinuxArm.zip "$halLinuxArmUrl"
curl -o halPlatform.zip "$halPlatformUrl"
curl -o halHeaders.zip "$halHeadersUrl"

curl -o utilWindows.zip "$utilWindowsUrl"
curl -o utilMac.zip "$utilMacUrl"
curl -o utilLinux64.zip "$utilLinux64Url"
curl -o utilLinuxArm.zip "$utilLinuxArmUrl"
curl -o utilPlatform.zip "$utilPlatformUrl"
curl -o utilHeaders.zip "$utilHeadersUrl"

unzip halWindows.zip -d halWindows
unzip halMac.zip -d halMac
unzip halLinux64.zip -d halLinux64
unzip halLinuxArm.zip -d halLinuxArm
- name: Unzip WPILib HAL artifacts and headers
run: |
unzip halPlatform.zip -d halPlatform
unzip halHeaders.zip -d halHeaders

unzip utilWindows.zip -d utilWindows
unzip utilMac.zip -d utilMac
unzip utilLinux64.zip -d utilLinux64
unzip utilLinuxArm.zip -d utilLinuxArm
unzip utilPlatform.zip -d utilPlatform
unzip utilHeaders.zip -d utilHeaders

# Gather all of the the needed headers
- name: Gather all needed headers
run: |
mkdir headers-for-artifact
cp -r halHeaders/hal headers-for-artifact
cp -r utilHeaders/wpi headers-for-artifact
cp -r src/main/native/include/* headers-for-artifact

# Zip the needed headers and put them in the appropriate location for artifact upload
- name: Zip the needed headers and put them in the appropriate location for artifact upload
run: |
mkdir -p CANBridge-artifacts
7z a CANBridge-artifacts/headers.zip ./headers-for-artifact/*

# Put release files together in one directory
# Put Windows release files together in one directory
- name: Create Artifact (windows64)
if: contains(matrix.name, 'windows64')
if: matrix.platform-type == 'windowsx86-64'
run: |
mkdir -p CANBridge-artifacts
cp build/libs/cANBridge/static/windowsx86-64/release/CANBridge.lib CANBridge-artifacts/CANBridge-static.lib
cp build/libs/cANBridge/shared/windowsx86-64/release/CANBridge.dll CANBridge-artifacts/CANBridge.dll
cp build/libs/cANBridge/shared/windowsx86-64/release/CANBridge.lib CANBridge-artifacts/CANBridge.lib
cp halPlatform/windows/x86-64/shared/wpiHal.dll CANBridge-artifacts/wpiHal.dll
cp halPlatform/windows/x86-64/shared/wpiHal.lib CANBridge-artifacts/wpiHal.lib
cp utilPlatform/windows/x86-64/shared/wpiutil.dll CANBridge-artifacts/wpiutil.dll
cp utilPlatform/windows/x86-64/shared/wpiutil.lib CANBridge-artifacts/wpiutil.lib

cp halWindows/windows/x86-64/shared/wpiHal.dll CANBridge-artifacts/wpiHal.dll
cp halWindows/windows/x86-64/shared/wpiHal.lib CANBridge-artifacts/wpiHal.lib
cp halMac/osx/universal/shared/libwpiHal.dylib CANBridge-artifacts/libwpiHal.dylib
cp halLinux64/linux/x86-64/shared/libwpiHal.so CANBridge-artifacts/libwpiHal.so
cp halLinuxArm/linux/arm64/shared/libwpiHal.so CANBridge-artifacts/libwpiHal-arm64.so

cp utilWindows/windows/x86-64/shared/wpiutil.dll CANBridge-artifacts/wpiutil.dll
cp utilWindows/windows/x86-64/shared/wpiutil.lib CANBridge-artifacts/wpiutil.lib
cp utilMac/osx/universal/shared/libwpiutil.dylib CANBridge-artifacts/libwpiutil.dylib
cp utilLinux64/linux/x86-64/shared/libwpiutil.so CANBridge-artifacts/libwpiutil.so
cp utilLinuxArm/linux/arm64/shared/libwpiutil.so CANBridge-artifacts/libwpiutil-arm64.so

# Put release files together in one directory
# Put Linux release files together in one directory
- name: Create Artifact (linux64)
if: contains(matrix.name, 'linux64')
run: |
mkdir -p CANBridge-artifacts
# TODO: Include built binaries for macos/arm64, macos/x86-64, linux/x86-64, linux/arm64

# Put release files together in one directory
- name: Create Artifact (linuxarm64)
if: contains(matrix.name, 'linuxarm64')
if: matrix.platform-type == 'linuxx86-64'
run: |
mkdir -p CANBridge-artifacts
# TODO: Include built binaries for macos/arm64, macos/x86-64, linux/x86-64, linux/arm64

# Put release files together in one directory
- name: Create Artifact (macosarm64)
if: contains(matrix.name, 'macosarm64')
cp build/libs/cANBridge/static/linuxx86-64/release/libCANBridge.a CANBridge-artifacts/libCANBridge.a
cp build/libs/cANBridge/shared/linuxx86-64/release/libCANBridge.so CANBridge-artifacts/libCANBridge.so
cp halPlatform/linux/x86-64/shared/libwpiHal.so CANBridge-artifacts/libwpiHal.so
cp utilPlatform/linux/x86-64/shared/libwpiutil.so CANBridge-artifacts/libwpiutil.so

# Put macOS release files together in one directory
- name: Create Artifact (osxuniversal)
if: matrix.platform-type == 'osxuniversal'
run: |
mkdir -p CANBridge-artifacts
cp build/libs/cANBridge/static/osxuniversal/release/libCANBridge.a CANBridge-artifacts/libCANBridge.a
cp build/libs/cANBridge/shared/osxuniversal/release/libCANBridge.dylib CANBridge-artifacts/libCANBridge.dylib

cp halMac/osx/universal/shared/libwpiHal.dylib CANBridge-artifacts/libwpiHal.dylib

cp utilMac/osx/universal/shared/libwpiutil.dylib CANBridge-artifacts/libwpiutil.dylib

# Put release files together in one directory
- name: Create Artifact (macosintel64)
if: contains(matrix.name, 'macosintel64')
run: |
mkdir -p CANBridge-artifacts
# TODO: Include built binaries for macos/arm64, macos/x86-64, linux/x86-64, linux/arm64
cp halPlatform/osx/universal/shared/libwpiHal.dylib CANBridge-artifacts/libwpiHal.dylib
cp utilPlatform/osx/universal/shared/libwpiutil.dylib CANBridge-artifacts/libwpiutil.dylib

# Upload build artifact
- name: Upload build artifact
uses: actions/upload-artifact@v3
with:
name: CANBridge-${{ github.sha }}
path: CANBridge-artifacts/

# Upload version.txt
- name: Upload version artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: version
path: build/allOutputs/version.txt
name: CANBridge-${{ github.sha }}-${{ matrix.platform-type }}-${{ matrix.name }}
path: CANBridge-artifacts/
Loading