Skip to content

Commit cd3ac01

Browse files
Merge pull request #3 from unofficial-rev-port/ci/artifact-uploads
Update artifact uploading workflows, add ARM workflows, update release workflows
2 parents 7ba8b99 + 8288165 commit cd3ac01

File tree

2 files changed

+164
-150
lines changed

2 files changed

+164
-150
lines changed

.github/workflows/build.yml

Lines changed: 135 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -13,44 +13,133 @@ defaults:
1313
shell: bash
1414

1515
jobs:
16-
build:
16+
build-docker:
17+
strategy:
18+
fail-fast: false
19+
matrix:
20+
include:
21+
- container: wpilib/aarch64-cross-ubuntu:bullseye-22.04
22+
name: LinuxARM64
23+
build-options: "-Ponlylinuxarm64"
24+
platform-type: linuxarm64
25+
arch: arm64
26+
- container: wpilib/raspbian-cross-ubuntu:bullseye-22.04
27+
name: LinuxARM32
28+
build-options: "-Ponlylinuxarm32"
29+
platform-type: linuxarm32
30+
arch: arm32
31+
runs-on: ubuntu-latest
32+
name: "Build - ${{ matrix.name }}"
33+
container: ${{ matrix.container }}
34+
steps:
35+
- name: Checkout
36+
uses: actions/checkout@v4
37+
with:
38+
ref: ${{ github.sha }}
39+
40+
- name: Setup Java
41+
uses: actions/setup-java@v4
42+
with:
43+
distribution: 'zulu'
44+
java-version: 11
45+
46+
- name: Build
47+
run: |
48+
./gradlew outputVersions publish ${{ matrix.build-options }} -PreleaseMode
49+
- name: Install 7zip
50+
run: |
51+
sudo apt-get update
52+
sudo apt-get install -y p7zip-full
53+
54+
- name: Download WPILib HAL artifacts and headers for ${{ matrix.platform-type }}
55+
run : |
56+
halVersion=$(cat wpiHalVersion.txt)
57+
58+
halPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
59+
halHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-headers.zip
60+
utilPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
61+
utilHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-headers.zip
62+
63+
curl -o halPlatform.zip "$halPlatformUrl"
64+
curl -o halHeaders.zip "$halHeadersUrl"
65+
curl -o utilPlatform.zip "$utilPlatformUrl"
66+
curl -o utilHeaders.zip "$utilHeadersUrl"
67+
68+
- name: Unzip WPILib HAL artifacts and headers
69+
run: |
70+
unzip halPlatform.zip -d halPlatform
71+
unzip halHeaders.zip -d halHeaders
72+
unzip utilPlatform.zip -d utilPlatform
73+
unzip utilHeaders.zip -d utilHeaders
74+
75+
- name: Gather all needed headers
76+
run: |
77+
mkdir headers-for-artifact
78+
cp -r halHeaders/hal headers-for-artifact
79+
cp -r utilHeaders/wpi headers-for-artifact
80+
cp -r src/main/native/include/* headers-for-artifact
81+
82+
- name: Zip the needed headers and put them in the appropriate location for artifact upload
83+
run: |
84+
mkdir -p CANBridge-artifacts
85+
7z a CANBridge-artifacts/headers.zip ./headers-for-artifact/*
86+
87+
# Put Linux ARM release files together in one directory
88+
- name: Create Artifact
89+
run: |
90+
cp build/libs/cANBridge/static/release/libCANBridge.a CANBridge-artifacts/libCANBridge.a
91+
cp build/libs/cANBridge/shared/release/libCANBridge.so CANBridge-artifacts/libCANBridge.so
92+
cp halPlatform/linux/${{ matrix.arch }}/shared/libwpiHal.so CANBridge-artifacts/libwpiHal.so
93+
cp utilPlatform/linux/${{ matrix.arch }}/shared/libwpiutil.so CANBridge-artifacts/libwpiutil.so
94+
95+
# Upload build artifact
96+
- name: Upload build artifact
97+
uses: actions/upload-artifact@v3
98+
with:
99+
name: CANBridge-${{ github.sha }}-${{ matrix.platform-type }}-${{ matrix.name }}
100+
path: CANBridge-artifacts/
101+
102+
build-native:
17103
timeout-minutes: 15
18104
strategy:
19105
fail-fast: false
20106
matrix:
21107
include:
22108
- os: windows-latest
23109
container: ''
24-
name: windows64
110+
name: Win64
111+
platform-type: windowsx86-64
25112
- os: ubuntu-latest
26113
container: ''
27-
name: linux64
28-
# - os: ubuntu-latest-arm64
29-
# container: ''
30-
# name: linuxarm64
114+
name: Linux64
115+
platform-type: linuxx86-64
116+
# GitHub hosted runner `macos-latest` is arm64, which is why we need to specify `macos-13` for x86_64
117+
# See https://github.com/actions/runner-images?tab=readme-ov-file#available-images for more information
31118
- os: macos-latest
32119
container: ''
33-
name: macosarm64
120+
name: MacOSARM64
121+
platform-type: osxuniversal
34122
- os: macos-13
35123
container: ''
36-
name: macosintel64
37-
name: "build-${{ matrix.name }}"
124+
name: MacOS64
125+
platform-type: osxuniversal
126+
name: "Build - ${{ matrix.name }}"
38127
runs-on: ${{ matrix.os }}
39128
container: ${{ matrix.container }}
40129
steps:
41130
- name: Checkout
42-
uses: actions/checkout@v3
131+
uses: actions/checkout@v4
43132
with:
44133
ref: ${{ github.sha }}
45134

46135
- name: Setup Java
47-
uses: actions/setup-java@v3
136+
uses: actions/setup-java@v4
48137
with:
49138
distribution: 'zulu'
50139
java-version: 11
51140

52141
- name: Cache
53-
uses: actions/cache@v3
142+
uses: actions/cache@v4
54143
with:
55144
path: |
56145
.gradle
@@ -64,122 +153,72 @@ jobs:
64153
run: |
65154
./gradlew outputVersions publish ${{ matrix.build-options }} -PreleaseMode
66155
67-
- name: Download WPILib HAL artifacts and headers, gather all needed headers
68-
# if: contains(matrix.name, 'windows64')
156+
- name: Download WPILib HAL artifacts and headers for ${{ matrix.platform-type }}
69157
run : |
70158
halVersion=$(cat wpiHalVersion.txt)
71159
72-
# Download WPILib artifacts from Artifactory
73-
halWindowsUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-windowsx86-64.zip
74-
halMacUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-osxuniversal.zip
75-
halLinux64Url=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-linuxx86-64.zip
76-
halLinuxArmUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-linuxarm64.zip
160+
halPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
77161
halHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/hal/hal-cpp/"$halVersion"/hal-cpp-"$halVersion"-headers.zip
78-
79-
utilWindowsUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-windowsx86-64.zip
80-
utilMacUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-osxuniversal.zip
81-
utilLinux64Url=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-linuxx86-64.zip
82-
utilLinuxArmUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-linuxarm64.zip
162+
utilPlatformUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-${{ matrix.platform-type }}.zip
83163
utilHeadersUrl=https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-cpp/"$halVersion"/wpiutil-cpp-"$halVersion"-headers.zip
84164
85-
curl -o halWindows.zip "$halWindowsUrl"
86-
curl -o halMac.zip "$halMacUrl"
87-
curl -o halLinux64.zip "$halLinux64Url"
88-
curl -o halLinuxArm.zip "$halLinuxArmUrl"
165+
curl -o halPlatform.zip "$halPlatformUrl"
89166
curl -o halHeaders.zip "$halHeadersUrl"
90-
91-
curl -o utilWindows.zip "$utilWindowsUrl"
92-
curl -o utilMac.zip "$utilMacUrl"
93-
curl -o utilLinux64.zip "$utilLinux64Url"
94-
curl -o utilLinuxArm.zip "$utilLinuxArmUrl"
167+
curl -o utilPlatform.zip "$utilPlatformUrl"
95168
curl -o utilHeaders.zip "$utilHeadersUrl"
96169
97-
unzip halWindows.zip -d halWindows
98-
unzip halMac.zip -d halMac
99-
unzip halLinux64.zip -d halLinux64
100-
unzip halLinuxArm.zip -d halLinuxArm
170+
- name: Unzip WPILib HAL artifacts and headers
171+
run: |
172+
unzip halPlatform.zip -d halPlatform
101173
unzip halHeaders.zip -d halHeaders
102-
103-
unzip utilWindows.zip -d utilWindows
104-
unzip utilMac.zip -d utilMac
105-
unzip utilLinux64.zip -d utilLinux64
106-
unzip utilLinuxArm.zip -d utilLinuxArm
174+
unzip utilPlatform.zip -d utilPlatform
107175
unzip utilHeaders.zip -d utilHeaders
108176
109-
# Gather all of the the needed headers
177+
- name: Gather all needed headers
178+
run: |
110179
mkdir headers-for-artifact
111180
cp -r halHeaders/hal headers-for-artifact
112181
cp -r utilHeaders/wpi headers-for-artifact
113182
cp -r src/main/native/include/* headers-for-artifact
114183
115-
# Zip the needed headers and put them in the appropriate location for artifact upload
184+
- name: Zip the needed headers and put them in the appropriate location for artifact upload
185+
run: |
116186
mkdir -p CANBridge-artifacts
117187
7z a CANBridge-artifacts/headers.zip ./headers-for-artifact/*
118188
119-
# Put release files together in one directory
189+
# Put Windows release files together in one directory
120190
- name: Create Artifact (windows64)
121-
if: contains(matrix.name, 'windows64')
191+
if: matrix.platform-type == 'windowsx86-64'
122192
run: |
123-
mkdir -p CANBridge-artifacts
124193
cp build/libs/cANBridge/static/windowsx86-64/release/CANBridge.lib CANBridge-artifacts/CANBridge-static.lib
125194
cp build/libs/cANBridge/shared/windowsx86-64/release/CANBridge.dll CANBridge-artifacts/CANBridge.dll
126195
cp build/libs/cANBridge/shared/windowsx86-64/release/CANBridge.lib CANBridge-artifacts/CANBridge.lib
196+
cp halPlatform/windows/x86-64/shared/wpiHal.dll CANBridge-artifacts/wpiHal.dll
197+
cp halPlatform/windows/x86-64/shared/wpiHal.lib CANBridge-artifacts/wpiHal.lib
198+
cp utilPlatform/windows/x86-64/shared/wpiutil.dll CANBridge-artifacts/wpiutil.dll
199+
cp utilPlatform/windows/x86-64/shared/wpiutil.lib CANBridge-artifacts/wpiutil.lib
127200
128-
cp halWindows/windows/x86-64/shared/wpiHal.dll CANBridge-artifacts/wpiHal.dll
129-
cp halWindows/windows/x86-64/shared/wpiHal.lib CANBridge-artifacts/wpiHal.lib
130-
cp halMac/osx/universal/shared/libwpiHal.dylib CANBridge-artifacts/libwpiHal.dylib
131-
cp halLinux64/linux/x86-64/shared/libwpiHal.so CANBridge-artifacts/libwpiHal.so
132-
cp halLinuxArm/linux/arm64/shared/libwpiHal.so CANBridge-artifacts/libwpiHal-arm64.so
133-
134-
cp utilWindows/windows/x86-64/shared/wpiutil.dll CANBridge-artifacts/wpiutil.dll
135-
cp utilWindows/windows/x86-64/shared/wpiutil.lib CANBridge-artifacts/wpiutil.lib
136-
cp utilMac/osx/universal/shared/libwpiutil.dylib CANBridge-artifacts/libwpiutil.dylib
137-
cp utilLinux64/linux/x86-64/shared/libwpiutil.so CANBridge-artifacts/libwpiutil.so
138-
cp utilLinuxArm/linux/arm64/shared/libwpiutil.so CANBridge-artifacts/libwpiutil-arm64.so
139-
140-
# Put release files together in one directory
201+
# Put Linux release files together in one directory
141202
- name: Create Artifact (linux64)
142-
if: contains(matrix.name, 'linux64')
143-
run: |
144-
mkdir -p CANBridge-artifacts
145-
# TODO: Include built binaries for macos/arm64, macos/x86-64, linux/x86-64, linux/arm64
146-
147-
# Put release files together in one directory
148-
- name: Create Artifact (linuxarm64)
149-
if: contains(matrix.name, 'linuxarm64')
203+
if: matrix.platform-type == 'linuxx86-64'
150204
run: |
151-
mkdir -p CANBridge-artifacts
152-
# TODO: Include built binaries for macos/arm64, macos/x86-64, linux/x86-64, linux/arm64
153-
154-
# Put release files together in one directory
155-
- name: Create Artifact (macosarm64)
156-
if: contains(matrix.name, 'macosarm64')
205+
cp build/libs/cANBridge/static/linuxx86-64/release/libCANBridge.a CANBridge-artifacts/libCANBridge.a
206+
cp build/libs/cANBridge/shared/linuxx86-64/release/libCANBridge.so CANBridge-artifacts/libCANBridge.so
207+
cp halPlatform/linux/x86-64/shared/libwpiHal.so CANBridge-artifacts/libwpiHal.so
208+
cp utilPlatform/linux/x86-64/shared/libwpiutil.so CANBridge-artifacts/libwpiutil.so
209+
210+
# Put macOS release files together in one directory
211+
- name: Create Artifact (osxuniversal)
212+
if: matrix.platform-type == 'osxuniversal'
157213
run: |
158-
mkdir -p CANBridge-artifacts
159214
cp build/libs/cANBridge/static/osxuniversal/release/libCANBridge.a CANBridge-artifacts/libCANBridge.a
160215
cp build/libs/cANBridge/shared/osxuniversal/release/libCANBridge.dylib CANBridge-artifacts/libCANBridge.dylib
161-
162-
cp halMac/osx/universal/shared/libwpiHal.dylib CANBridge-artifacts/libwpiHal.dylib
163-
164-
cp utilMac/osx/universal/shared/libwpiutil.dylib CANBridge-artifacts/libwpiutil.dylib
165-
166-
# Put release files together in one directory
167-
- name: Create Artifact (macosintel64)
168-
if: contains(matrix.name, 'macosintel64')
169-
run: |
170-
mkdir -p CANBridge-artifacts
171-
# TODO: Include built binaries for macos/arm64, macos/x86-64, linux/x86-64, linux/arm64
216+
cp halPlatform/osx/universal/shared/libwpiHal.dylib CANBridge-artifacts/libwpiHal.dylib
217+
cp utilPlatform/osx/universal/shared/libwpiutil.dylib CANBridge-artifacts/libwpiutil.dylib
172218
173219
# Upload build artifact
174220
- name: Upload build artifact
175-
uses: actions/upload-artifact@v3
176-
with:
177-
name: CANBridge-${{ github.sha }}
178-
path: CANBridge-artifacts/
179-
180-
# Upload version.txt
181-
- name: Upload version artifact
182-
uses: actions/upload-artifact@v3
221+
uses: actions/upload-artifact@v4
183222
with:
184-
name: version
185-
path: build/allOutputs/version.txt
223+
name: CANBridge-${{ github.sha }}-${{ matrix.platform-type }}-${{ matrix.name }}
224+
path: CANBridge-artifacts/

0 commit comments

Comments
 (0)