13
13
fail-fast : false
14
14
matrix :
15
15
os :
16
- - ubuntu-22 .04
17
- - macos-12 # Intel
18
- - macos-13-xlarge # Apple silicon
16
+ - ubuntu-24 .04
17
+ - macos-13 # Intel
18
+ - macos-14 # Apple silicon
19
19
- windows-2022
20
20
ghc-version :
21
21
- " 8.8"
@@ -24,20 +24,22 @@ jobs:
24
24
- " 9.2"
25
25
- " 9.4"
26
26
exclude :
27
- - os : macos-12
27
+ - os : macos-13
28
28
ghc-version : " 8.10"
29
- - os : macos-12
29
+ - os : macos-13
30
30
ghc-version : " 9.0"
31
- - os : macos-12
31
+ - os : macos-13
32
32
ghc-version : " 9.2"
33
- - os : macos-13-xlarge
33
+ - os : macos-14
34
34
ghc-version : " 8.8"
35
- - os : macos-13-xlarge
35
+ - os : macos-14
36
36
ghc-version : " 8.10"
37
- - os : macos-13-xlarge
37
+ - os : macos-14
38
38
ghc-version : " 9.0"
39
- - os : macos-13-xlarge
39
+ - os : macos-14
40
40
ghc-version : " 9.2"
41
+ - os : windows-2022
42
+ ghc-version : " 8.8"
41
43
- os : windows-2022
42
44
ghc-version : " 8.10"
43
45
- os : windows-2022
70
72
%APPDATA%\cabal\store
71
73
%APPDATA%\stack
72
74
key : stack-${{ matrix.os }}-ghc-${{ matrix.version }}
75
+ - name : Install dependencies (Linux)
76
+ if : " startsWith(matrix.os, 'ubuntu-')"
77
+ run : |
78
+ sudo apt install libbz2-dev
73
79
- name : Install Haskell Stack (if not installed)
74
80
shell : bash
75
81
run : |
@@ -121,14 +127,8 @@ jobs:
121
127
matrix.ghc-version == '9.2'
122
128
shell : bash
123
129
run : |
124
- curl -L -o /tmp/pandoc.deb \
125
- https://github.com/jgm/pandoc/releases/download/2.14.2/pandoc-2.14.2-1-amd64.deb
126
- sudo dpkg -i /tmp/pandoc.deb
127
- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CC86BB64
128
- sudo add-apt-repository ppa:rmescandon/yq
129
- sudo apt update
130
- sudo apt-get install -y yq
131
- bash scripts/haddock-prologue/build.sh
130
+ sudo apt-get install -y pandoc yq
131
+ PATH="/usr/bin:$PATH" bash scripts/haddock-prologue/build.sh
132
132
- name : Copy docs
133
133
if : >-
134
134
startsWith(matrix.os, 'ubuntu-') &&
@@ -178,9 +178,8 @@ jobs:
178
178
fail-fast : false
179
179
matrix :
180
180
os :
181
- - ubuntu-22.04
182
- - macos-12 # Intel
183
- - macos-13-xlarge # Apple silicon
181
+ - ubuntu-24.04
182
+ - macos-14 # Apple silicon
184
183
- windows-2022
185
184
steps :
186
185
- uses : actions/checkout@v4
@@ -266,12 +265,21 @@ jobs:
266
265
267
266
image :
268
267
name : Docker image
269
- runs-on : ubuntu-22.04
268
+ strategy :
269
+ fail-fast : false
270
+ matrix :
271
+ os :
272
+ - ubuntu-24.04
273
+ - ubuntu-24.04-arm
274
+ runs-on : ${{ matrix.os }}
270
275
env :
271
276
DOCKERHUB_IMAGE_NAME : seonbi
272
277
outputs :
273
278
image-ghcr : ghcr.io/${{ github.repository }}/bin@${{ steps.push-image.outputs.digest }}
274
279
image-dockerhub : docker.io/${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}@${{ steps.push-image.outputs.digest }}
280
+ tag : ${{ steps.values.outputs.tag }}
281
+ labels : ${{ steps.values.outputs.labels }}
282
+ arch : ${{ steps.values.outputs.arch }}
275
283
steps :
276
284
- uses : actions/checkout@v4
277
285
with :
@@ -303,6 +311,11 @@ jobs:
303
311
else
304
312
echo labels= >> "$GITHUB_OUTPUT"
305
313
fi
314
+ if [[ "$RUNNER_ARCH" = "ARM64" ]]; then
315
+ echo arch=arm64 >> "$GITHUB_OUTPUT"
316
+ else
317
+ echo arch=amd64 >> "$GITHUB_OUTPUT"
318
+ fi
306
319
- id : push-image
307
320
uses : docker/build-push-action@v6
308
321
with :
@@ -313,19 +326,48 @@ jobs:
313
326
org.opencontainers.image.url=${{ github.event.repository.html_url }}
314
327
${{ steps.values.outputs.labels }}
315
328
tags : |
316
- ghcr.io/${{ github.repository }}/bin:${{ steps.values.outputs.tag }}
317
- ${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}:${{ steps.values.outputs.tag }}
329
+ ghcr.io/${{ github.repository }}/bin:${{ steps.values.outputs.tag }}-${{ steps.values.outputs.arch }}
330
+ ${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}:${{ steps.values.outputs.tag }}-${{ steps.values.outputs.arch }}
318
331
provenance : false # https://community.fly.io/t/deploying-to-fly-via-github-action-failing/10171/33
319
332
333
+ image-manifest :
334
+ name : Create and push manifest images
335
+ if : github.event_name != 'pull_request'
336
+ needs :
337
+ - image
338
+ runs-on : ubuntu-24.04
339
+ env :
340
+ DOCKERHUB_IMAGE_NAME : seonbi
341
+ steps :
342
+ - uses : docker/login-action@v3
343
+ with :
344
+ registry : ghcr.io
345
+ username : ${{ github.repository_owner }}
346
+ password : ${{ github.token }}
347
+ - uses : docker/login-action@v3
348
+ with :
349
+ username : ${{ vars.DOCKERHUB_USERNAME }}
350
+ password : ${{ secrets.DOCKERHUB_TOKEN }}
351
+ -
uses :
Noelware/[email protected]
352
+ with :
353
+ inputs : ghcr.io/${{ github.repository }}/bin:${{ needs.image.outputs.tag }}
354
+ images : ghcr.io/${{ github.repository }}/bin:${{ needs.image.outputs.tag }}-amd64,ghcr.io/${{ github.repository }}/bin:${{ needs.image.outputs.tag }}-arm64
355
+ push : true
356
+ -
uses :
Noelware/[email protected]
357
+ with :
358
+ inputs : docker.io/${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}:${{ needs.image.outputs.tag }}
359
+ images : docker.io/${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}:${{ needs.image.outputs.tag }}-amd64,docker.io/${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}:${{ needs.image.outputs.tag }}-arm64
360
+ push : true
361
+
320
362
fly :
321
363
name : Deploy seonbi-api to Fly.io
322
364
if : github.event_name == 'push' && github.ref == 'refs/heads/main'
323
365
needs :
324
366
- image
325
367
env :
326
368
FLY_API_TOKEN : ${{ secrets.FLY_API_TOKEN }}
327
- IMAGE : ${{ needs.image.outputs.image-ghcr }}
328
- runs-on : ubuntu-22 .04
369
+ IMAGE : ghcr.io/ ${{ github.repository }}/bin:${{ needs.image.outputs.tag }}-amd64
370
+ runs-on : ubuntu-24 .04
329
371
steps :
330
372
- uses : actions/checkout@v4
331
373
- uses : superfly/flyctl-actions/setup-flyctl@master
@@ -345,36 +387,54 @@ jobs:
345
387
needs :
346
388
- build
347
389
- image
348
- runs-on : ubuntu-22 .04
390
+ runs-on : ubuntu-24 .04
349
391
steps :
350
392
- uses : actions/checkout@v4
351
393
- uses : actions/download-artifact@v4
352
394
with :
353
- name : binaries-macos-13-xlarge -ghc-9.4
395
+ name : binaries-macos-14 -ghc-9.4
354
396
path : /tmp/binaries-macos-arm64
355
397
- uses : actions/download-artifact@v4
356
398
with :
357
- name : binaries-macos-12 -ghc-9.4
399
+ name : binaries-macos-13 -ghc-9.4
358
400
path : /tmp/binaries-macos-x86_64
359
401
- uses : actions/download-artifact@v4
360
402
with :
361
403
name : binaries-windows-2022-ghc-9.2
362
404
path : /tmp/binaries-windows
405
+ - uses : docker/setup-qemu-action@v3
406
+ with :
407
+ platforms : arm64
408
+ - uses : docker/setup-buildx-action@v3
363
409
- run : |
364
410
set -e
365
411
mkdir -p /tmp/dists
366
- # Linux
367
- docker pull "$IMAGE"
368
- mkdir -p /tmp/binaries-linux
369
- docker run -i "$IMAGE" cat /usr/local/bin/seonbi \
370
- > /tmp/binaries-linux/seonbi
371
- docker run -i "$IMAGE" cat /usr/local/bin/seonbi-api \
372
- > /tmp/binaries-linux/seonbi-api
373
- pushd /tmp/binaries-linux
412
+ # Linux (amd64)
413
+ docker pull "$IMAGE-amd64 "
414
+ mkdir -p /tmp/binaries-linux-amd64
415
+ docker run -i "$IMAGE-amd64 " cat /usr/local/bin/seonbi \
416
+ > /tmp/binaries-linux-amd64 /seonbi
417
+ docker run -i "$IMAGE-amd64 " cat /usr/local/bin/seonbi-api \
418
+ > /tmp/binaries-linux-amd64 /seonbi-api
419
+ pushd /tmp/binaries-linux-amd64
374
420
chmod +x *
375
421
cp "$GITHUB_WORKSPACE/"{LICENSE,README.md,CHANGES.md} ./
376
422
tar cvfj /tmp/dists/seonbi.linux-x86_64.tar.bz2 *
377
423
popd
424
+ # Linux (arm64)
425
+ docker pull "$IMAGE-arm64"
426
+ mkdir -p /tmp/binaries-linux-arm64
427
+ docker run -i --platform linux/arm64 "$IMAGE-arm64" \
428
+ cat /usr/local/bin/seonbi \
429
+ > /tmp/binaries-linux-arm64/seonbi
430
+ docker run -i --platform linux/arm64 "$IMAGE-arm64" \
431
+ cat /usr/local/bin/seonbi-api \
432
+ > /tmp/binaries-linux-arm64/seonbi-api
433
+ pushd /tmp/binaries-linux-arm64
434
+ chmod +x *
435
+ cp "$GITHUB_WORKSPACE/"{LICENSE,README.md,CHANGES.md} ./
436
+ tar cvfj /tmp/dists/seonbi.linux-arm64.tar.bz2 *
437
+ popd
378
438
# macOS (Apple silicon)
379
439
pushd /tmp/binaries-macos-arm64
380
440
chmod +x *
@@ -393,7 +453,7 @@ jobs:
393
453
zip /tmp/dists/seonbi.win64.zip *
394
454
popd
395
455
env:
396
- IMAGE: ${{ needs.image.outputs.image-ghcr }}
456
+ IMAGE: ghcr.io/ ${{ github.repository }}/bin:${{ needs.image.outputs.tag }}
397
457
- uses : actions/upload-artifact@v4
398
458
with :
399
459
name : dists-untagged
@@ -404,12 +464,12 @@ jobs:
404
464
needs :
405
465
- build
406
466
- binaries
407
- runs-on : ubuntu-22 .04
467
+ runs-on : ubuntu-24 .04
408
468
steps :
409
469
- uses : actions/checkout@v4
410
470
- uses : actions/download-artifact@v4
411
471
with :
412
- name : sdist-ubuntu-22 .04-ghc-9.4
472
+ name : sdist-ubuntu-24 .04-ghc-9.4
413
473
path : /tmp/sdist
414
474
- uses : actions/download-artifact@v4
415
475
with :
0 commit comments