Skip to content

Commit 0b90daf

Browse files
committed
Update CI
1 parent 4a48cca commit 0b90daf

4 files changed

Lines changed: 169 additions & 99 deletions

File tree

.env

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Docker Configuration
2+
ORG=lay3rlabs
3+
IMAGE_NAME=wasi-builder
4+
REGISTRY=ghcr.io
5+
DOCKERFILE=Dockerfile
6+
7+
8+
# Build Tool Versions
9+
RUST_VERSION=1.90-slim-bookworm
10+
CARGO_COMPONENT_VERSION=0.21.1
11+
WASM_TOOLS_VERSION=1.238.1
12+
WKG_VERSION=0.12.0

.github/workflows/release.yml

Lines changed: 129 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,162 @@
1-
name: Release
1+
name: Publish Docker Image
22

33
on:
44
push:
55
tags:
66
- "v*"
77
branches:
88
- main
9-
10-
env:
11-
REGISTRY: ghcr.io
9+
# You can enable the below to build on each PR push for testing,
10+
# pull_request:
11+
# branches:
12+
# - main
1213

1314
jobs:
14-
release:
15+
build_amd64:
16+
name: Build and Push AMD64 Image
1517
runs-on: linux-8-core
1618
permissions:
1719
contents: read
1820
packages: write
21+
id-token: write
1922
steps:
20-
- name: Checkout repository
23+
- name: Checkout the repo
2124
uses: actions/checkout@v4
2225

23-
- name: Set VERSION
26+
- name: Set IMAGE_TAG
27+
shell: bash
2428
run: |
25-
if [ "${{ github.ref_type }}" = "tag" ]; then
26-
VERSION="${GITHUB_REF_NAME#v}"
29+
if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then
30+
TAG="${GITHUB_REF_NAME#v}"
31+
IMAGE_TAG="${TAG//[^a-zA-Z0-9_.-]/-}"
32+
elif [[ "${GITHUB_REF_NAME}" == "main" ]]; then
33+
IMAGE_TAG="latest"
2734
else
28-
VERSION=$(git rev-parse --short $GITHUB_SHA)
35+
IMAGE_TAG="${GITHUB_REF_NAME//\//-}"
2936
fi
30-
echo "VERSION=$VERSION" >> $GITHUB_ENV
37+
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
3138
32-
- name: Install Task
33-
uses: arduino/setup-task@v2
34-
with:
35-
version: 3.x
36-
repo-token: ${{ secrets.GITHUB_TOKEN }}
39+
- name: Dotenv Action
40+
uses: falti/dotenv-action@v1.1.4
41+
42+
- name: Set up Docker Buildx
43+
uses: docker/setup-buildx-action@v3
3744

38-
- name: Set up QEMU
39-
uses: docker/setup-qemu-action@v3
45+
- name: Log in to the Container registry
46+
uses: docker/login-action@v3
4047
with:
41-
platforms: arm64
48+
registry: ${{ env.REGISTRY }}
49+
username: ${{ github.actor }}
50+
password: ${{ secrets.GITHUB_TOKEN }}
51+
52+
- name: Build and push AMD64 image
53+
run: >
54+
docker buildx build
55+
--platform linux/amd64
56+
--tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-amd64
57+
--build-arg RUST_VERSION=${{ env.RUST_VERSION }}
58+
--build-arg CARGO_COMPONENT_VERSION=${{ env.CARGO_COMPONENT_VERSION }}
59+
--build-arg WASM_TOOLS_VERSION=${{ env.WASM_TOOLS_VERSION }}
60+
--build-arg WKG_VERSION=${{ env.WKG_VERSION }}
61+
--push
62+
-f ${{ env.DOCKERFILE }} docker
63+
64+
build_arm64:
65+
name: Build and Push ARM64 Image
66+
runs-on: arm64-builder
67+
permissions:
68+
contents: read
69+
packages: write
70+
id-token: write
71+
steps:
72+
- name: Checkout the repo
73+
uses: actions/checkout@v4
74+
75+
- name: Set IMAGE_TAG
76+
shell: bash
77+
run: |
78+
if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then
79+
TAG="${GITHUB_REF_NAME#v}"
80+
IMAGE_TAG="${TAG//[^a-zA-Z0-9_.-]/-}"
81+
elif [[ "${GITHUB_REF_NAME}" == "main" ]]; then
82+
IMAGE_TAG="latest"
83+
else
84+
IMAGE_TAG="${GITHUB_REF_NAME//\//-}"
85+
fi
86+
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
87+
88+
- name: Dotenv Action
89+
uses: falti/dotenv-action@v1.1.4
4290

4391
- name: Set up Docker Buildx
4492
uses: docker/setup-buildx-action@v3
4593

46-
- name: Log in to Container Registry
94+
- name: Log in to the Container registry
4795
uses: docker/login-action@v3
4896
with:
4997
registry: ${{ env.REGISTRY }}
5098
username: ${{ github.actor }}
5199
password: ${{ secrets.GITHUB_TOKEN }}
52100

53-
- name: Build and push Docker image
101+
- name: Build and push ARM64 image
102+
run: >
103+
docker buildx build
104+
--platform linux/arm64
105+
--tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-arm64
106+
--build-arg RUST_VERSION=${{ env.RUST_VERSION }}
107+
--build-arg CARGO_COMPONENT_VERSION=${{ env.CARGO_COMPONENT_VERSION }}
108+
--build-arg WASM_TOOLS_VERSION=${{ env.WASM_TOOLS_VERSION }}
109+
--build-arg WKG_VERSION=${{ env.WKG_VERSION }}
110+
--push
111+
-f ${{ env.DOCKERFILE }} docker
112+
113+
create_manifest:
114+
name: Create and Push Multi-Arch Manifest
115+
runs-on: ubuntu-latest
116+
needs: [build_amd64, build_arm64]
117+
permissions:
118+
contents: read
119+
packages: write
120+
id-token: write
121+
steps:
122+
- name: Checkout the repo
123+
uses: actions/checkout@v4
124+
125+
- name: Set IMAGE_TAG
126+
shell: bash
54127
run: |
55-
task build IS_LOCAL=false VERSION="$VERSION" \
56-
CACHE_FROM="type=gha,scope=wasi-builder" \
57-
CACHE_TO="type=gha,scope=wasi-builder,mode=max"
128+
if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then
129+
TAG="${GITHUB_REF_NAME#v}"
130+
IMAGE_TAG="${TAG//[^a-zA-Z0-9_.-]/-}"
131+
elif [[ "${GITHUB_REF_NAME}" == "main" ]]; then
132+
IMAGE_TAG="latest"
133+
else
134+
IMAGE_TAG="${GITHUB_REF_NAME//\//-}"
135+
fi
136+
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
137+
138+
- name: Set GIT_HASH
139+
run: |
140+
export GIT_HASH=$(git rev-parse --short "$GITHUB_SHA")
141+
echo "GIT_HASH=${GIT_HASH}" >> $GITHUB_ENV
142+
143+
- name: Dotenv Action
144+
uses: falti/dotenv-action@v1.1.4
145+
146+
- name: Set up Docker Buildx
147+
uses: docker/setup-buildx-action@v3
148+
149+
- name: Log in to the Container registry
150+
uses: docker/login-action@v3
151+
with:
152+
registry: ${{ env.REGISTRY }}
153+
username: ${{ github.actor }}
154+
password: ${{ secrets.GITHUB_TOKEN }}
155+
156+
- name: Create and push multi-arch manifest
157+
run: >
158+
docker buildx imagetools create
159+
--tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
160+
--tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.GIT_HASH }}
161+
${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-amd64
162+
${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-arm64

README.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,24 @@ A Docker-based builder for creating [WASI (WebAssembly System Interface)](https:
1515
```bash
1616
# Install Task (if not already installed)
1717
curl -sL https://taskfile.dev/install.sh | sh
18+
```
19+
20+
## Configuration
1821

19-
# Setup buildx for multi-arch builds
20-
task setup-buildx
22+
The project uses a `.env` file for configuration:
2123

22-
# Clean up buildx
23-
task clean
24+
```bash
25+
# Docker Configuration
26+
ORG=lay3rlabs
27+
IMAGE_NAME=wasi-builder
28+
REGISTRY=ghcr.io
29+
DOCKERFILE=Dockerfile
30+
31+
# Build Tool Versions
32+
RUST_VERSION=1.90-slim-bookworm
33+
CARGO_COMPONENT_VERSION=0.21.1
34+
WASM_TOOLS_VERSION=1.238.1
35+
WKG_VERSION=0.12.0
2436
```
2537

2638
## Quick Start

Taskfile.yml

Lines changed: 12 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -4,91 +4,32 @@ version: "3"
44

55
silent: true
66

7-
vars:
8-
ORG: lay3rlabs
9-
IMAGE_NAME: wasi-builder
10-
REGISTRY: ghcr.io
11-
DOCKERFILE: Dockerfile
12-
RUST_VERSION: 1.90-slim-bookworm
13-
CARGO_COMPONENT_VERSION: 0.21.1
14-
WASM_TOOLS_VERSION: 1.238.1
15-
WKG_VERSION: 0.12.0
7+
dotenv: [".env"]
168

179
tasks:
1810
default:
1911
desc: Show available tasks
2012
cmds:
21-
- task --list
13+
- task --list-all
2214

2315
build:
24-
desc: Build Docker image
25-
preconditions:
26-
- sh: test "{{OS}}" = "linux"
27-
msg: "This task can only run on Linux (current OS: {{OS}})"
16+
desc: Build Docker image locally for testing
2817
vars:
29-
IS_LOCAL: '{{.IS_LOCAL | default "true"}}'
3018
VERSION: '{{.VERSION | default "local"}}'
31-
CACHE_FROM: '{{.CACHE_FROM | default ""}}'
32-
CACHE_TO: '{{.CACHE_TO | default ""}}'
3319
cmds:
34-
- |
35-
# Check if version is a git hash (7 characters, alphanumeric)
36-
if [[ "{{.VERSION}}" =~ ^[a-f0-9]{7}$ ]]; then
37-
TAGS="--tag {{.REGISTRY}}/{{.ORG}}/{{.IMAGE_NAME}}:{{.VERSION}} --tag {{.REGISTRY}}/{{.ORG}}/{{.IMAGE_NAME}}:latest"
38-
else
39-
TAGS="--tag {{.REGISTRY}}/{{.ORG}}/{{.IMAGE_NAME}}:{{.VERSION}}"
40-
fi
41-
42-
if [ "{{.IS_LOCAL}}" = "true" ]; then
43-
# For local builds, use current architecture
44-
PLATFORM_FLAG="--platform {{OS}}/{{ARCH}}"
45-
LOAD_FLAG="--load"
46-
PUSH_FLAG=""
47-
else
48-
# For remote builds, use multi-platform
49-
PLATFORM_FLAG="--platform {{OS}}/amd64,{{OS}}/arm64"
50-
LOAD_FLAG=""
51-
PUSH_FLAG="--push"
52-
fi
53-
54-
CACHE_FROM_FLAG=""
55-
if [ -n "{{.CACHE_FROM}}" ]; then
56-
CACHE_FROM_FLAG="--cache-from {{.CACHE_FROM}}"
57-
fi
58-
59-
CACHE_TO_FLAG=""
60-
if [ -n "{{.CACHE_TO}}" ]; then
61-
CACHE_TO_FLAG="--cache-to {{.CACHE_TO}}"
62-
fi
63-
64-
docker buildx build \
65-
$PLATFORM_FLAG \
66-
$TAGS \
67-
--build-arg RUST_VERSION={{.RUST_VERSION}} \
68-
--build-arg CARGO_COMPONENT_VERSION={{.CARGO_COMPONENT_VERSION}} \
69-
--build-arg WASM_TOOLS_VERSION={{.WASM_TOOLS_VERSION}} \
70-
--build-arg WKG_VERSION={{.WKG_VERSION}} \
71-
$CACHE_FROM_FLAG \
72-
$CACHE_TO_FLAG \
73-
$LOAD_FLAG \
74-
$PUSH_FLAG \
75-
-f {{.DOCKERFILE}} docker
76-
77-
setup-buildx:
78-
desc: Setup and use docker buildx builder
79-
cmds:
80-
- docker buildx create --name multiarch --driver docker-container --use || true
81-
- docker buildx inspect --bootstrap
82-
83-
clean:
84-
desc: Clean up buildx builder
85-
cmds:
86-
- docker buildx rm multiarch || true
20+
- >
21+
docker build
22+
--tag {{.ORG}}/{{.IMAGE_NAME}}:{{.VERSION}}
23+
--build-arg RUST_VERSION={{.RUST_VERSION}}
24+
--build-arg CARGO_COMPONENT_VERSION={{.CARGO_COMPONENT_VERSION}}
25+
--build-arg WASM_TOOLS_VERSION={{.WASM_TOOLS_VERSION}}
26+
--build-arg WKG_VERSION={{.WKG_VERSION}}
27+
-f {{.DOCKERFILE}} docker
8728
8829
test:
8930
desc: Test the built Docker image
9031
vars:
91-
VERSION: '{{.version | default "local"}}'
32+
VERSION: '{{.VERSION | default "local"}}'
9233
TEST_DIR: /tmp/wasi-test
9334
cmds:
9435
- task: test:setup

0 commit comments

Comments
 (0)