@@ -13,44 +13,133 @@ defaults:
1313 shell : bash
1414
1515jobs :
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