Skip to content

Commit c9ec724

Browse files
authored
[ci] Migrate to Github Actions for Mac arm64 builds (#288)
* [ci] Create github actions workflow * [ci] Add libtool to brewfile for static builds * [cmake] Update mac deployment target * [ci] Remove azure-pipelines.yml
1 parent 7fbf5d6 commit c9ec724

9 files changed

+362
-346
lines changed

.github/workflows/main.yml

+359
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,359 @@
1+
name: CI
2+
on: [push, pull_request]
3+
4+
env:
5+
NEKO_VERSION: 2.4.0
6+
7+
jobs:
8+
linux-build:
9+
name: linux
10+
strategy:
11+
matrix:
12+
arch: [arm64, amd64]
13+
link_type: [static, dynamic]
14+
include:
15+
- link_type: static
16+
name_suffix: -static
17+
runs-on: ubuntu-20.04
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Install Earthly
23+
run: sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/latest/download/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly && /usr/local/bin/earthly bootstrap --with-autocomplete'
24+
25+
- name: Install QEMU
26+
run: |
27+
sudo apt-get install qemu binfmt-support qemu-user-static
28+
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
29+
docker stop earthly-buildkitd || true
30+
31+
- name: Build package
32+
run: earthly --platform=linux/${{ matrix.arch }} +package --LINK_TYPE=${{ matrix.link_type }}
33+
34+
- name: Upload binaries
35+
uses: actions/upload-artifact@v4
36+
with:
37+
name: linux${{ matrix.name_suffix }}-${{ matrix.arch }}-binaries
38+
path: bin/${{ matrix.link_type }}/linux/${{ matrix.arch }}/neko-${{ env.NEKO_VERSION }}-linux64.tar.gz
39+
40+
mac-build:
41+
name: mac
42+
strategy:
43+
matrix:
44+
arch: [arm64, amd64]
45+
link_type: [static, dynamic]
46+
include:
47+
- arch: arm64
48+
os: macos-14
49+
- arch: amd64
50+
os: macos-12
51+
- link_type: static
52+
BREWFILE: extra/Brewfile-STATIC_DEPS_ALL
53+
STATIC_DEPS: all
54+
name_suffix: -static
55+
- link_type: dynamic
56+
BREWFILE: extra/Brewfile-STATIC_DEPS_NONE
57+
STATIC_DEPS: none
58+
59+
runs-on: ${{ matrix.os }}
60+
env:
61+
CMAKE_BUILD_TYPE: RelWithDebInfo
62+
steps:
63+
- name: Checkout
64+
uses: actions/checkout@v4
65+
66+
- name: Install Homebrew dependencies
67+
run: |
68+
set -ex
69+
brew update
70+
brew bundle --file="${{ matrix.BREWFILE }}"
71+
72+
- name: CMake
73+
run: cmake . -DSTATIC_DEPS=${{ matrix.STATIC_DEPS }} -G Ninja -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE
74+
75+
- name: Download dependencies
76+
run: ninja download_deps || ninja download_deps || ninja download_deps
77+
if: ${{ matrix.link_type == 'static' }}
78+
79+
- name: Build
80+
run: ninja
81+
82+
- name: Check runtime dependencies
83+
run: |
84+
set -ex
85+
otool -L ./bin/neko
86+
otool -L ./bin/nekoc
87+
otool -L ./bin/nekoml
88+
otool -L ./bin/nekotools
89+
90+
- name: Test
91+
run: ctest --verbose
92+
93+
- name: Package
94+
run: ninja package
95+
96+
- name: Check version
97+
shell: bash
98+
run: |
99+
set -ex
100+
[ "`./bin/neko -version`" == "$NEKO_VERSION" ]
101+
102+
- name: Upload binaries
103+
uses: actions/upload-artifact@v4
104+
with:
105+
name: mac${{ matrix.name_suffix }}-${{ matrix.arch }}-binaries
106+
path: bin/neko-${{ env.NEKO_VERSION }}-osx64.tar.gz
107+
108+
windows-build:
109+
name: windows
110+
strategy:
111+
matrix:
112+
arch: [Win32, x64]
113+
vstools: [vs2017, vs2019]
114+
include:
115+
- arch: x64
116+
name_suffix: 64
117+
118+
- vstools: vs2017
119+
arch: Win32
120+
cmake_generator: Visual Studio 15 2017
121+
122+
- vstools: vs2017
123+
arch: x64
124+
cmake_generator: Visual Studio 15 2017 Win64
125+
126+
- vstools: vs2019
127+
cmake_generator: Visual Studio 16 2019
128+
129+
env:
130+
CMAKE_BUILD_TYPE: RelWithDebInfo
131+
132+
runs-on: windows-2019
133+
steps:
134+
- name: Checkout
135+
uses: actions/checkout@v4
136+
137+
- name: Install VS2017 tools
138+
run: |
139+
choco install visualstudio2017buildtools visualstudio2017-workload-vctools
140+
if: ${{ matrix.vstools == 'vs2017' }}
141+
142+
- name: CMake
143+
run: |
144+
cmake . -G "${{ matrix.cmake_generator }}" ${{ env.CMAKE_ARCH_FLAG }}
145+
env:
146+
CMAKE_ARCH_FLAG: ${{ matrix.vstools == 'vs2019' && format('-A {0}', matrix.arch) || ' ' }}
147+
148+
- name: Download dependencies
149+
run: |
150+
cmake --build . --config $env:CMAKE_BUILD_TYPE --target download_deps || \
151+
cmake --build . --config $env:CMAKE_BUILD_TYPE --target download_deps || \
152+
cmake --build . --config $env:CMAKE_BUILD_TYPE --target download_deps
153+
154+
- name: Build
155+
run: cmake --build . --config $env:CMAKE_BUILD_TYPE
156+
157+
- name: Test
158+
run: ctest --verbose --build-config $env:CMAKE_BUILD_TYPE
159+
160+
- name: Package binaries
161+
run: cmake --build . --config $env:CMAKE_BUILD_TYPE --target PACKAGE
162+
163+
- name: Check version
164+
shell: bash
165+
run: |
166+
set -ex
167+
[ "`./bin/neko -version`" == "$NEKO_VERSION" ]
168+
169+
- name: Upload binaries
170+
uses: actions/upload-artifact@v4
171+
with:
172+
name: windows${{ matrix.name_suffix }}-${{ matrix.vstools }}-binaries
173+
path: bin/neko-${{ env.NEKO_VERSION }}-win${{ matrix.name_suffix }}.zip
174+
175+
package-choco:
176+
name: chocolatey
177+
needs: [windows-build]
178+
runs-on: windows-latest
179+
180+
defaults:
181+
run:
182+
shell: pwsh
183+
184+
steps:
185+
- name: Checkout
186+
uses: actions/checkout@v4
187+
188+
- name: Download windows-vs2017-binaries
189+
uses: actions/download-artifact@v4
190+
with:
191+
name: windows-vs2017-binaries
192+
path: windows-vs2017-binaries
193+
194+
- name: Download windows64-vs2017-binaries
195+
uses: actions/download-artifact@v4
196+
with:
197+
name: windows64-vs2017-binaries
198+
path: windows64-vs2017-binaries
199+
200+
- name: Prepare Chocolatey Package
201+
run: |
202+
.\extra\chocolatey\generatePackage.ps1 $env:NEKO_VERSION
203+
Get-ChildItem extra\chocolatey\out
204+
205+
- name: Format package version string
206+
run: |
207+
$commitSha = git rev-parse --short HEAD
208+
$commitTime = git show -s --format=%cI HEAD
209+
$commitTime = $commitTime.substring(0,19) -replace '[^0-9]',''
210+
$sourceBranch = '$(Build.SourceBranch)'
211+
$chocoVersion = If ($sourceBranch.StartsWith('refs/tags/v')) {'$env:NEKO_VERSION'} Else {"$env:NEKO_VERSION-SNAP$commitTime"}
212+
echo chocoVersion=$chocoVersion >> $env:GITHUB_ENV
213+
214+
- name: choco pack
215+
run: choco pack --version $env:chocoVersion -Out ..\pack
216+
working-directory: extra/chocolatey/out/
217+
218+
- name: Upload package
219+
uses: actions/upload-artifact@v4
220+
with:
221+
name: chocolatey
222+
path: extra/chocolatey/pack/
223+
224+
deploy-s3:
225+
name: deploy s3
226+
needs: [windows-build, package-choco, mac-build, linux-build]
227+
runs-on: ubuntu-latest
228+
if: success() && github.repository_owner == 'HaxeFoundation' && github.event_name != 'pull_request'
229+
steps:
230+
- name: Checkout
231+
uses: actions/checkout@v4
232+
233+
- name: Download linux-static-amd64-binaries
234+
uses: actions/download-artifact@v4
235+
with:
236+
name: linux-static-amd64-binaries
237+
238+
- name: Download linux-static-arm64-binaries
239+
uses: actions/download-artifact@v4
240+
with:
241+
name: linux-static-arm64-binaries
242+
243+
- name: Download mac-static-amd64-binaries
244+
uses: actions/download-artifact@v4
245+
with:
246+
name: mac-static-amd64-binaries
247+
248+
- name: Download mac-static-arm64-binaries
249+
uses: actions/download-artifact@v4
250+
with:
251+
name: mac-static-arm64-binaries
252+
253+
- name: Download windows-vs2017-binaries
254+
uses: actions/download-artifact@v4
255+
with:
256+
name: windows-vs2017-binaries
257+
258+
- name: Download windows64-vs2017-binaries
259+
uses: actions/download-artifact@v4
260+
with:
261+
name: windows64-vs2017-binaries
262+
263+
- name: Download chocolatey
264+
uses: actions/download-artifact@v4
265+
with:
266+
name: chocolatey
267+
268+
- name: Install awscli
269+
run: |
270+
set -ex
271+
sudo apt-get update -qqy
272+
sudo apt-get install -qqy awscli
273+
274+
# https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions
275+
- name: Extract branch name
276+
id: extract_branch
277+
shell: bash
278+
run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT
279+
280+
- name: Upload binaries
281+
env:
282+
AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }}
283+
AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }}
284+
AWS_EC2_METADATA_DISABLED: true
285+
HXBUILDS_S3ADDR: ${{ vars.HXBUILDS_S3ADDR }}
286+
run: |
287+
set -ex
288+
COMMIT_HASH=`git rev-parse HEAD`
289+
COMMIT_HASH_SHORT=${GITHUB_SHA:0:7}
290+
COMMIT_DATE=`TZ=UTC git show --quiet --date='format-local:%Y-%m-%d' --format="%cd"`
291+
FILE_NAME=neko_${COMMIT_DATE}_$(steps.extract_branch.outputs.branch)_${COMMIT_HASH_SHORT}
292+
aws s3 cp linux-static-amd64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/linux64/${FILE_NAME}.tar.gz
293+
aws s3 cp linux-static-arm64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/linux-arm64/${FILE_NAME}.tar.gz
294+
aws s3 cp mac-static-amd64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/mac/${FILE_NAME}.tar.gz
295+
aws s3 cp mac-static-arm64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/mac-arm64/${FILE_NAME}.tar.gz
296+
aws s3 cp windows-vs2017-binaries/neko-*.zip $HXBUILDS_S3ADDR/neko/windows/${FILE_NAME}.zip
297+
aws s3 cp windows64-vs2017-binaries/neko-*.zip $HXBUILDS_S3ADDR/neko/windows64/${FILE_NAME}.zip
298+
aws s3 cp chocolatey/*.nupkg $HXBUILDS_S3ADDR/neko/windows64-choco/
299+
300+
- name: Update "latest"
301+
if: github.ref == 'refs/heads/master'
302+
env:
303+
AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }}
304+
AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }}
305+
AWS_EC2_METADATA_DISABLED: true
306+
HXBUILDS_S3ADDR: ${{ vars.HXBUILDS_S3ADDR }}
307+
run: |
308+
set -ex
309+
aws s3 cp linux-static-amd64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/linux64/neko_latest.tar.gz
310+
aws s3 cp linux-static-arm64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/linux-arm64/neko_latest.tar.gz
311+
aws s3 cp mac-static-arm64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/mac/neko_latest.tar.gz
312+
aws s3 cp mac-static-arm64-binaries/neko-*.tar.gz $HXBUILDS_S3ADDR/neko/mac-arm64/neko_latest.tar.gz
313+
aws s3 cp windows-vs2017-binaries/neko-*.zip $HXBUILDS_S3ADDR/neko/windows/neko_latest.zip
314+
aws s3 cp windows64-vs2017-binaries/neko-*.zip $HXBUILDS_S3ADDR/neko/windows64/neko_latest.zip
315+
316+
# Chocolatey packages have to be named with version number,
317+
# so let's use web redirection to keep the original file name.
318+
[[ "$HXBUILDS_S3ADDR" =~ s3://([^/]+)(.*) ]] && HXBUILDS_S3BUCKET="${BASH_REMATCH[1]}" && HXBUILDS_S3PATH="${BASH_REMATCH[2]}"
319+
[[ `echo chocolatey/*.nupkg` =~ Chocolatey/(.+) ]] && FILE_NAME="${BASH_REMATCH[1]}"
320+
aws s3 cp $HXBUILDS_S3ADDR/neko/windows64-choco/${FILE_NAME} $HXBUILDS_S3ADDR/neko/windows64-choco/neko_latest.nupkg --acl public-read --website-redirect "${HXBUILDS_S3ADDR}/neko/windows64-choco/${FILE_NAME}"
321+
322+
deploy-ppa:
323+
name: deploy ppa
324+
needs: [windows-build, package-choco, mac-build, linux-build]
325+
runs-on: ubuntu-latest
326+
if: success() && github.repository_owner == 'HaxeFoundation' && github.event_name != 'pull_request'
327+
steps:
328+
- name: Download haxeci_sec.gpg
329+
run: '# TODO'
330+
331+
- name: Download haxeci_ssh
332+
run: '# TODO'
333+
334+
- name: Setup credentials
335+
run: |
336+
# TODO
337+
set -ex
338+
chmod 600 $CREDENTIAL_PATH/haxeci_ssh
339+
eval `ssh-agent -s`
340+
ssh-add $CREDENTIAL_PATH/haxeci_ssh
341+
gpg --allow-secret-key-import --import $CREDENTIAL_PATH/haxeci_sec.gpg
342+
git config --global user.name "$DEBFULLNAME"
343+
git config --global user.email "$DEBEMAIL"
344+
env:
345+
CREDENTIAL_PATH: . # TODO
346+
DEBFULLNAME: ${{ secrets.DEBFULLNAME }}
347+
DEBEMAIL: ${{ secrets.DEBEMAIL }}
348+
349+
- name: Install devscripts
350+
run: |
351+
set -ex
352+
sudo apt-get update -qqy
353+
sudo apt-get install -qqy ninja-build pkg-config libgtk-3-dev devscripts git-buildpackage ubuntu-dev-tools dh-make dh-apache2
354+
355+
- name: CMake
356+
run: cmake . -DSTATIC_DEPS=all
357+
358+
- name: Upload to PPA
359+
run: make upload_to_ppa

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ endif()
8282

8383
if(APPLE AND STATIC_DEPS STREQUAL "all")
8484
if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
85-
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "CMAKE_OSX_DEPLOYMENT_TARGET" FORCE)
85+
set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "CMAKE_OSX_DEPLOYMENT_TARGET" FORCE)
8686
endif()
8787
endif()
8888

0 commit comments

Comments
 (0)