99 - " .github/.devcontainer/**"
1010
1111jobs :
12- build-and-push :
12+ # Build separate architectures in parallel for speed
13+ build-amd64 :
1314 runs-on : ubuntu-latest
1415 steps :
1516 - name : Checkout (GitHub)
1617 uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
1718
18- - name : Set up QEMU for multi-architecture builds
19+ - name : Setup Docker buildx
20+ uses : docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
21+ with :
22+ use : true
23+
24+ - name : Login to GitHub Container Registry
25+ uses : docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
26+ with :
27+ registry : ghcr.io
28+ username : ${{ github.repository_owner }}
29+ password : ${{ secrets.GITHUB_TOKEN }}
30+
31+ - name : Build and push AMD64 image
32+ uses : docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
33+ with :
34+ context : .github/.devcontainer
35+ platforms : linux/amd64
36+ push : true
37+ tags : ghcr.io/bucketeer-io/bucketeer-devcontainer:amd64-${{ github.sha }}
38+ cache-from : type=gha,scope=amd64
39+ cache-to : type=gha,mode=max,scope=amd64
40+ provenance : false
41+ build-args : |
42+ BUILDKIT_INLINE_CACHE=1
43+
44+ build-arm64 :
45+ runs-on : ubuntu-latest
46+ steps :
47+ - name : Checkout (GitHub)
48+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
49+
50+ - name : Set up QEMU for ARM64 builds
1951 uses : docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
2052 with :
21- platforms : linux/amd64,linux/ arm64
53+ platforms : linux/arm64
2254
23- - name : Setup Docker buildx for multi-architecture builds
55+ - name : Setup Docker buildx
2456 uses : docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
2557 with :
2658 use : true
@@ -32,13 +64,45 @@ jobs:
3264 username : ${{ github.repository_owner }}
3365 password : ${{ secrets.GITHUB_TOKEN }}
3466
35- - name : Build and release devcontainer Multi-Platform
36- uses : devcontainers/ci@8bf61b26e9c3a98f69cb6ce2f88d24ff59b785c6 # v0.3
37- env :
38- BUILDX_NO_DEFAULT_ATTESTATIONS : true
67+ - name : Build and push ARM64 image
68+ uses : docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
3969 with :
40- imageName : ghcr.io/bucketeer-io/bucketeer-devcontainer
41- cacheFrom : ghcr.io/bucketeer-io/bucketeer-devcontainer
42- platform : linux/amd64,linux/arm64
43- subFolder : .github
44- push : always
70+ context : .github/.devcontainer
71+ platforms : linux/arm64
72+ push : true
73+ tags : ghcr.io/bucketeer-io/bucketeer-devcontainer:arm64-${{ github.sha }}
74+ cache-from : type=gha,scope=arm64
75+ cache-to : type=gha,mode=max,scope=arm64
76+ provenance : false
77+ build-args : |
78+ BUILDKIT_INLINE_CACHE=1
79+
80+ # Create multi-arch manifest that combines both architectures
81+ create-manifest :
82+ runs-on : ubuntu-latest
83+ needs : [build-amd64, build-arm64]
84+ steps :
85+ - name : Login to GitHub Container Registry
86+ uses : docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
87+ with :
88+ registry : ghcr.io
89+ username : ${{ github.repository_owner }}
90+ password : ${{ secrets.GITHUB_TOKEN }}
91+
92+ - name : Create and push multi-arch manifest
93+ run : |
94+ # Create manifest list that includes both architectures
95+ docker manifest create \
96+ ghcr.io/bucketeer-io/bucketeer-devcontainer:latest \
97+ --amend ghcr.io/bucketeer-io/bucketeer-devcontainer:amd64-${{ github.sha }} \
98+ --amend ghcr.io/bucketeer-io/bucketeer-devcontainer:arm64-${{ github.sha }}
99+
100+ # Also create SHA-specific manifest (for debugging)
101+ docker manifest create \
102+ ghcr.io/bucketeer-io/bucketeer-devcontainer:${{ github.sha }} \
103+ --amend ghcr.io/bucketeer-io/bucketeer-devcontainer:amd64-${{ github.sha }} \
104+ --amend ghcr.io/bucketeer-io/bucketeer-devcontainer:arm64-${{ github.sha }}
105+
106+ # Push manifests
107+ docker manifest push ghcr.io/bucketeer-io/bucketeer-devcontainer:latest
108+ docker manifest push ghcr.io/bucketeer-io/bucketeer-devcontainer:${{ github.sha }}
0 commit comments