Skip to content

Commit 2a5e64d

Browse files
committed
Linux ARM64 build
1 parent 01f40ae commit 2a5e64d

File tree

4 files changed

+85
-38
lines changed

4 files changed

+85
-38
lines changed

.github/workflows/build.yaml

+70-31
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ jobs:
1313
fail-fast: false
1414
matrix:
1515
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
1919
- windows-2022
2020
ghc-version:
2121
- "8.8"
@@ -24,19 +24,19 @@ jobs:
2424
- "9.2"
2525
- "9.4"
2626
exclude:
27-
- os: macos-12
27+
- os: macos-13
2828
ghc-version: "8.10"
29-
- os: macos-12
29+
- os: macos-13
3030
ghc-version: "9.0"
31-
- os: macos-12
31+
- os: macos-13
3232
ghc-version: "9.2"
33-
- os: macos-13-xlarge
33+
- os: macos-14
3434
ghc-version: "8.8"
35-
- os: macos-13-xlarge
35+
- os: macos-14
3636
ghc-version: "8.10"
37-
- os: macos-13-xlarge
37+
- os: macos-14
3838
ghc-version: "9.0"
39-
- os: macos-13-xlarge
39+
- os: macos-14
4040
ghc-version: "9.2"
4141
- os: windows-2022
4242
ghc-version: "8.10"
@@ -178,9 +178,9 @@ jobs:
178178
fail-fast: false
179179
matrix:
180180
os:
181-
- ubuntu-22.04
182-
- macos-12 # Intel
183-
- macos-13-xlarge # Apple silicon
181+
- ubuntu-24.04
182+
- macos-13 # Intel
183+
- macos-14 # Apple silicon
184184
- windows-2022
185185
steps:
186186
- uses: actions/checkout@v4
@@ -266,12 +266,21 @@ jobs:
266266
267267
image:
268268
name: Docker image
269-
runs-on: ubuntu-22.04
269+
strategy:
270+
fail-fast: false
271+
matrix:
272+
os:
273+
- ubuntu-24.04
274+
- ubuntu-24.04-arm
275+
runs-on: ${{ matrix.os }}
270276
env:
271277
DOCKERHUB_IMAGE_NAME: seonbi
272278
outputs:
273279
image-ghcr: ghcr.io/${{ github.repository }}/bin@${{ steps.push-image.outputs.digest }}
274280
image-dockerhub: docker.io/${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}@${{ steps.push-image.outputs.digest }}
281+
tag: ${{ steps.values.outputs.tag }}
282+
labels: ${{ steps.values.outputs.labels }}
283+
arch: ${{ steps.values.outputs.arch }}
275284
steps:
276285
- uses: actions/checkout@v4
277286
with:
@@ -303,6 +312,11 @@ jobs:
303312
else
304313
echo labels= >> "$GITHUB_OUTPUT"
305314
fi
315+
if [[ "$RUNNER_ARCH" = "ARM64" ]]; then
316+
echo arch=arm64 >> "$GITHUB_OUTPUT"
317+
else
318+
echo arch=amd64 >> "$GITHUB_OUTPUT"
319+
fi
306320
- id: push-image
307321
uses: docker/build-push-action@v6
308322
with:
@@ -313,10 +327,23 @@ jobs:
313327
org.opencontainers.image.url=${{ github.event.repository.html_url }}
314328
${{ steps.values.outputs.labels }}
315329
tags: |
316-
ghcr.io/${{ github.repository }}/bin:${{ steps.values.outputs.tag }}
317-
${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}:${{ steps.values.outputs.tag }}
330+
ghcr.io/${{ github.repository }}/bin:${{ steps.values.outputs.tag }}-${{ steps.values.outputs.arch }}
331+
${{ vars.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}:${{ steps.values.outputs.tag }}-${{ steps.values.outputs.arch }}
318332
provenance: false # https://community.fly.io/t/deploying-to-fly-via-github-action-failing/10171/33
319333

334+
image-manifest:
335+
name: Create and push manifest images
336+
if: github.event_name != 'pull_request'
337+
needs:
338+
- image
339+
runs-on: ubuntu-24.04
340+
steps:
341+
- uses: Noelware/[email protected]
342+
with:
343+
inputs: ${{ needs.image.outputs.tag }}
344+
images: ${{ needs.image.oputputs.tag }}-amd64,${{ needs.image.oputputs.tag }}-arm64
345+
push: true
346+
320347
fly:
321348
name: Deploy seonbi-api to Fly.io
322349
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
@@ -325,7 +352,7 @@ jobs:
325352
env:
326353
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
327354
IMAGE: ${{ needs.image.outputs.image-ghcr }}
328-
runs-on: ubuntu-22.04
355+
runs-on: ubuntu-24.04
329356
steps:
330357
- uses: actions/checkout@v4
331358
- uses: superfly/flyctl-actions/setup-flyctl@master
@@ -345,16 +372,16 @@ jobs:
345372
needs:
346373
- build
347374
- image
348-
runs-on: ubuntu-22.04
375+
runs-on: ubuntu-24.04
349376
steps:
350377
- uses: actions/checkout@v4
351378
- uses: actions/download-artifact@v4
352379
with:
353-
name: binaries-macos-13-xlarge-ghc-9.4
380+
name: binaries-macos-14-ghc-9.4
354381
path: /tmp/binaries-macos-arm64
355382
- uses: actions/download-artifact@v4
356383
with:
357-
name: binaries-macos-12-ghc-9.4
384+
name: binaries-macos-13-ghc-9.4
358385
path: /tmp/binaries-macos-x86_64
359386
- uses: actions/download-artifact@v4
360387
with:
@@ -363,18 +390,30 @@ jobs:
363390
- run: |
364391
set -e
365392
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
393+
# Linux (amd64)
394+
docker pull "$IMAGE-amd64"
395+
mkdir -p /tmp/binaries-linux-amd64
396+
docker run -i "$IMAGE-amd64" cat /usr/local/bin/seonbi \
397+
> /tmp/binaries-linux-amd64/seonbi
398+
docker run -i "$IMAGE-amd64" cat /usr/local/bin/seonbi-api \
399+
> /tmp/binaries-linux-amd64/seonbi-api
400+
pushd /tmp/binaries-linux-amd64
374401
chmod +x *
375402
cp "$GITHUB_WORKSPACE/"{LICENSE,README.md,CHANGES.md} ./
376403
tar cvfj /tmp/dists/seonbi.linux-x86_64.tar.bz2 *
377404
popd
405+
# Linux (arm64)
406+
docker pull "$IMAGE-arm64"
407+
mkdir -p /tmp/binaries-linux-arm64
408+
docker run -i "$IMAGE-arm64" cat /usr/local/bin/seonbi \
409+
> /tmp/binaries-linux-arm64/seonbi
410+
docker run -i "$IMAGE-arm64" cat /usr/local/bin/seonbi-api \
411+
> /tmp/binaries-linux-arm64/seonbi-api
412+
pushd /tmp/binaries-linux-arm64
413+
chmod +x *
414+
cp "$GITHUB_WORKSPACE/"{LICENSE,README.md,CHANGES.md} ./
415+
tar cvfj /tmp/dists/seonbi.linux-arm64.tar.bz2 *
416+
popd
378417
# macOS (Apple silicon)
379418
pushd /tmp/binaries-macos-arm64
380419
chmod +x *
@@ -404,12 +443,12 @@ jobs:
404443
needs:
405444
- build
406445
- binaries
407-
runs-on: ubuntu-22.04
446+
runs-on: ubuntu-24.04
408447
steps:
409448
- uses: actions/checkout@v4
410449
- uses: actions/download-artifact@v4
411450
with:
412-
name: sdist-ubuntu-22.04-ghc-9.4
451+
name: sdist-ubuntu-24.04-ghc-9.4
413452
path: /tmp/sdist
414453
- uses: actions/download-artifact@v4
415454
with:
@@ -458,7 +497,7 @@ jobs:
458497
if: >-
459498
github.event_name != 'pull_request' &&
460499
github.ref == 'refs/heads/main'
461-
runs-on: ubuntu-22.04
500+
runs-on: ubuntu-24.04
462501
steps:
463502
- uses: actions/checkout@v4
464503
- uses: actions/download-artifact@v4

Dockerfile

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# To correctly make a statically-linked binary, we use Alpine Linux.
22
# The distro entirely uses musl instead of glibc which is unfriendly to be
33
# statically linked.
4-
FROM docker.io/amd64/alpine:3.19 AS build
4+
FROM docker.io/alpine:3.19 AS build
55

66
LABEL "org.opencontainers.image.title"="Seonbi"
77
LABEL "org.opencontainers.image.licenses"="LGPL-2.1"
@@ -11,9 +11,13 @@ RUN apk add --no-cache \
1111
bzip2-dev=1.0.8-r6 \
1212
ghc=9.4.7-r1 \
1313
libbz2=1.0.8-r6 \
14+
xz=5.4.5-r0 \
1415
zlib-dev=1.3.1-r0 \
1516
zlib-static=1.3.1-r0
16-
RUN wget -qO- https://get.haskellstack.org/ | sh
17+
18+
RUN wget -q "https://github.com/commercialhaskell/stack/releases/download/v3.3.1/stack-3.3.1-linux-$(uname -m)-bin" \
19+
&& mv "stack-3.3.1-linux-$(uname -m)-bin" /usr/bin/stack \
20+
&& chmod +x /usr/bin/stack
1721

1822
RUN stack config set system-ghc --global true
1923

@@ -26,8 +30,9 @@ WORKDIR /src/seonbi
2630
# Docker will cache this command as a layer, freeing us up to
2731
# modify source code without re-installing dependencies
2832
# (unless the .cabal file changes!)
29-
RUN stack setup
33+
RUN stack setup --system-ghc
3034
RUN stack build \
35+
--system-ghc \
3136
--only-snapshot \
3237
--flag seonbi:iconv \
3338
--flag seonbi:static
@@ -36,11 +41,12 @@ COPY . /src/seonbi
3641
RUN cp /src/seonbi/stack-ghc-9.4.yaml /src/seonbi/stack.yaml
3742

3843
RUN stack build \
44+
--system-ghc \
3945
--flag seonbi:iconv \
4046
--flag seonbi:static \
4147
--copy-bins
4248

43-
FROM docker.io/amd64/alpine:3.14
49+
FROM docker.io/alpine:3.19
4450

4551
COPY --from=build /root/.local/bin/seonbi* /usr/local/bin/
4652
ENV LANG=en_US.UTF-8

scripts/deno/mod.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ const STABLE_DOWNLOAD_URLS: DownloadUrls = {
143143
linux: {
144144
x86_64:
145145
"https://github.com/dahlia/seonbi/releases/download/0.5.0/seonbi-0.5.0.linux-x86_64.tar.bz2",
146-
aarch64: undefined,
146+
aarch64:
147+
"https://github.com/dahlia/seonbi/releases/download/0.5.0/seonbi-0.5.0.linux-arm64.tar.bz2",
147148
},
148149
darwin: {
149150
x86_64:
@@ -162,7 +163,8 @@ const NIGHTLY_DOWNLOAD_URLS: DownloadUrls = {
162163
linux: {
163164
x86_64:
164165
"https://dahlia.github.io/seonbi/dists/latest/seonbi.linux-x86_64.tar.bz2",
165-
aarch64: undefined,
166+
aarch64:
167+
"https://dahlia.github.io/seonbi/dists/latest/seonbi.linux-arm64.tar.bz2",
166168
},
167169
darwin: {
168170
x86_64:

stack-ghc-9.4.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
resolver: lts-21.25
1+
resolver: lts-21.21
22
packages:
33
- .
44
extra-deps:

0 commit comments

Comments
 (0)