Skip to content

Commit 8bd8344

Browse files
chore: release static executable for aarch64-linux
Also makes the aarch64 variant of the docker image consist of a single static executable, similar to the x86_64 variant.
1 parent df60948 commit 8bd8344

File tree

2 files changed

+38
-43
lines changed

2 files changed

+38
-43
lines changed

.github/workflows/build.yaml

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,18 @@ concurrency:
3030

3131
jobs:
3232
static:
33-
name: Nix - Linux x86-64 static
34-
runs-on: ubuntu-24.04
33+
strategy:
34+
fail-fast: false
35+
matrix:
36+
include:
37+
- name: Linux aarch64
38+
runs-on: ubuntu-24.04-arm
39+
artifact: aarch64
40+
- name: Linux x86-64
41+
runs-on: ubuntu-24.04
42+
artifact: x86-64
43+
name: Nix - ${{ matrix.name }} static
44+
runs-on: ${{ matrix.runs-on }}
3545
steps:
3646
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
3747
- name: Setup Nix Environment
@@ -44,17 +54,17 @@ jobs:
4454
- name: Save built executable as artifact
4555
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
4656
with:
47-
name: postgrest-linux-static-x86-64
57+
name: postgrest-linux-static-${{ matrix.artifact }}
4858
path: result/bin/postgrest
4959
if-no-files-found: error
5060

5161
- name: Build Docker image
52-
run: nix-build -A docker.image --out-link postgrest-docker.tar.gz
62+
run: nix-build -A docker.image --out-link postgrest-docker-${{ matrix.artifact }}.tar.gz
5363
- name: Save built Docker image as artifact
5464
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
5565
with:
56-
name: postgrest-docker-x86-64
57-
path: postgrest-docker.tar.gz
66+
name: postgrest-docker-${{ matrix.artifact }}
67+
path: postgrest-docker-${{ matrix.artifact }}.tar.gz
5868
if-no-files-found: error
5969

6070

@@ -87,15 +97,6 @@ jobs:
8797
fail-fast: false
8898
matrix:
8999
include:
90-
- name: Linux aarch64
91-
runs-on: ubuntu-24.04-arm
92-
cache: |
93-
~/.stack/pantry
94-
~/.stack/snapshots
95-
~/.stack/stack.sqlite3
96-
artifact: postgrest-ubuntu-aarch64
97-
deps: sudo apt-get update && sudo apt-get install libpq-dev
98-
99100
- name: MacOS aarch64
100101
runs-on: macos-14
101102
cache: |

.github/workflows/release.yaml

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ jobs:
7575
7676
mkdir -p release-bundle
7777
78+
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-linux-static-aarch64.tar.xz" \
79+
-C artifacts/postgrest-linux-static-aarch64 postgrest
80+
7881
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-linux-static-x86-64.tar.xz" \
7982
-C artifacts/postgrest-linux-static-x86-64 postgrest
8083
@@ -87,9 +90,6 @@ jobs:
8790
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-freebsd-x86-64.tar.xz" \
8891
-C artifacts/postgrest-freebsd-x86-64 postgrest
8992
90-
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-ubuntu-aarch64.tar.xz" \
91-
-C artifacts/postgrest-ubuntu-aarch64 postgrest
92-
9393
zip --junk-paths "release-bundle/postgrest-${GITHUB_REF_NAME}-windows-x86-64.zip" \
9494
artifacts/postgrest-windows-x86-64/postgrest.exe
9595
@@ -139,49 +139,43 @@ jobs:
139139
DOCKER_REPO: ${{ vars.DOCKER_REPO }}
140140
steps:
141141
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
142-
- name: Download x86-64 Docker image
142+
- name: Download aarch64 Docker image
143143
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
144144
with:
145-
name: postgrest-docker-x86-64
146-
- name: Download aarch64 binary
145+
name: postgrest-docker-aarch64
146+
- name: Download x86-64 Docker image
147147
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
148148
with:
149-
name: postgrest-ubuntu-aarch64
149+
name: postgrest-docker-x86-64
150150
- uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
151151
- uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
152152
with:
153153
username: ${{ vars.DOCKER_USER }}
154154
password: ${{ secrets.DOCKER_PASS }}
155-
- name: Build aarch64 Docker image
156-
run: |
157-
# This only pushes the image via digest, not a tag. This will not appear
158-
# in the image list on Docker Hub, yet. It will be later added to the main
159-
# tag's manifest.
160-
docker buildx build \
161-
-t "$DOCKER_REPO/postgrest" \
162-
--platform linux/arm64 \
163-
--output push-by-digest=true,type=image,push=true \
164-
--metadata-file metadata.json \
165-
.
166-
echo "SHA256_ARM=$(jq -r '."containerimage.digest"' metadata.json)" >> "$GITHUB_ENV"
167155
- name: Publish images on Docker Hub
168156
run: |
169-
docker load -i postgrest-docker.tar.gz
157+
docker load -i postgrest-docker-aarch64.tar.gz
158+
docker tag postgrest:latest "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}"
159+
docker push "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}"
160+
SHA256_ARM64=$(docker inspect postgrest:latest | jq -r '.[0].Id')
170161
162+
docker load -i postgrest-docker-x86-64.tar.gz
171163
docker tag postgrest:latest "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}"
172164
docker push "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}"
173-
docker buildx imagetools create --append \
174-
-t "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}" \
175-
"$DOCKER_REPO/postgrest@$SHA256_ARM"
165+
SHA256_AMD64=$(docker inspect postgrest:latest | jq -r '.[0].Id')
166+
167+
docker manifest create "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}" \
168+
"$DOCKER_REPO/postgrest@$SHA256_ARM64" \
169+
"$DOCKER_REPO/postgrest@$SHA256_AMD64"
170+
docker manifest push "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}"
176171
177172
# Only tag 'latest' for full releases
178173
if [ "${GITHUB_REF_NAME}" != "devel" ]; then
179174
echo "Pushing to 'latest' tag for full release of ${GITHUB_REF_NAME} ..."
180-
docker tag postgrest:latest "$DOCKER_REPO"/postgrest:latest
181-
docker push "$DOCKER_REPO"/postgrest:latest
182-
docker buildx imagetools create --append \
183-
-t "$DOCKER_REPO/postgrest:latest" \
184-
"$DOCKER_REPO/postgrest@$SHA256_ARM"
175+
docker manifest create "$DOCKER_REPO/postgrest:latest" \
176+
"$DOCKER_REPO/postgrest@$SHA256_ARM64" \
177+
"$DOCKER_REPO/postgrest@$SHA256_AMD64"
178+
docker manifest push "$DOCKER_REPO/postgrest:latest"
185179
else
186180
echo "Skipping push to 'latest' tag for pre-release..."
187181
fi

0 commit comments

Comments
 (0)