-
Notifications
You must be signed in to change notification settings - Fork 68
129 lines (109 loc) · 3.92 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: Build
on:
workflow_dispatch:
push:
branches:
- 'master'
tags:
- 'v*'
env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
REGISTRY_IMAGE: "ghcr.io/cottand/leng"
jobs:
publish-nix-container:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
system:
- aarch64-linux
- x86_64-linux
steps:
- uses: actions/checkout@v3
- name: Login to GitHub Container Registry
uses: docker/[email protected]
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: cachix/install-nix-action@v29
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
extra_nix_config: |
extra-platforms = ${{ matrix.system }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- uses: docker/setup-qemu-action@v1
# build in parallel
- run: nix build .#packages.${{ matrix.system }}.leng-container-image -L
- name: Tag and push image
run: |
git_sha=$(git rev-parse --short "$GITHUB_SHA")
label=$git_sha-${{ matrix.system }}
docker load < result
docker tag leng:nix ${{ env.REGISTRY_IMAGE }}:$label
docker push ${{ env.REGISTRY_IMAGE }}:$label
# export digest
docker pull ${{ env.REGISTRY_IMAGE }}:$label
full=$(docker image inspect ${{ env.REGISTRY_IMAGE }}:$label --format "{{index .RepoDigests 0}}")
digest=${full#${{ env.REGISTRY_IMAGE }}@}
mkdir -p /tmp/digests
merge-docker:
runs-on: ubuntu-latest
needs: [ publish-nix-container ]
steps:
- name: Login to GitHub Container Registry
uses: docker/[email protected]
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: digest for x86
run: |
system=x86_64-linux
git_sha=${GITHUB_SHA::7}
label="${git_sha}-${system}"
# export digest x86
docker pull ${{ env.REGISTRY_IMAGE }}:$label
full=$(docker image inspect ${{ env.REGISTRY_IMAGE }}:$label --format "{{index .RepoDigests 0}}")
digest=${full#${{ env.REGISTRY_IMAGE }}@}
mkdir -p /tmp/digests
touch "/tmp/digests/${digest#sha256:}"
- name: digest for aarch64
run: |
system=aarch64-linux
git_sha=${GITHUB_SHA::7}
label="${git_sha}-${system}"
# export digest x86
docker pull ${{ env.REGISTRY_IMAGE }}:$label
full=$(docker image inspect ${{ env.REGISTRY_IMAGE }}:$label --format "{{index .RepoDigests 0}}")
digest=${full#${{ env.REGISTRY_IMAGE }}@}
mkdir -p /tmp/digests
touch "/tmp/digests/${digest#sha256:}"
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: ${{ env.REGISTRY_IMAGE }}
tags: |
# tag event
type=ref,event=tag
type=sha,event=tag
# pull request event
type=sha,event=pr
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
- name: Summary
run: |
echo "# Published \`${{ steps.meta.outputs.tags }}\`" >> $GITHUB_STEP_SUMMARY