-
Notifications
You must be signed in to change notification settings - Fork 1
144 lines (129 loc) · 4.04 KB
/
pull-request.yml
File metadata and controls
144 lines (129 loc) · 4.04 KB
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
name: PR
on:
pull_request:
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.filter.outputs.matrix }}
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Generate matrix
id: generate
uses: docker/bake-action/subaction/matrix@v6
with:
fields: target,platforms
-
name: Filter matrix
id: filter
run: |
matrix=$(echo '${{ steps.generate.outputs.matrix }}' | \
jq -c '[.[] | select(.target | IN("novnc", "websockify", "dev") | not)]')
echo "matrix=$matrix" >> $GITHUB_OUTPUT
validate:
runs-on: ${{ startsWith(matrix.platforms, 'linux/arm') && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
needs:
- prepare
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.prepare.outputs.matrix) }}
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Dockerhub Login
uses: docker/login-action@v3
with:
username: max06net
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push by digest
id: build
if: endsWith(matrix.target, 'trixie-slim')
uses: docker/bake-action@v6
with:
targets: ${{ matrix.target }}
set: |
${{ matrix.target }}.platform=${{ matrix.platforms }}
${{ matrix.target }}.tags=docker.io/max06net/base-gui
${{ matrix.target }}.output=type=image,push-by-digest=true,name-canonical=true,push=true
provenance: false
-
name: Build (cache only)
if: "!endsWith(matrix.target, 'trixie-slim')"
uses: docker/bake-action@v6
with:
targets: ${{ matrix.target }}
set: |
${{ matrix.target }}.platform=${{ matrix.platforms }}
${{ matrix.target }}.output=type=cacheonly
-
name: Export digest
if: endsWith(matrix.target, 'trixie-slim')
run: |
mkdir -p ${{ runner.temp }}/digests
digest=$(echo '${{ steps.build.outputs.metadata }}' | jq -r '."${{ matrix.target }}"."containerimage.digest"')
touch "${{ runner.temp }}/digests/${digest#sha256:}"
-
name: Upload digest
if: endsWith(matrix.target, 'trixie-slim')
uses: actions/upload-artifact@v4
with:
name: digests-${{ matrix.target }}-${{ startsWith(matrix.platforms, 'linux/arm') && 'arm64' || 'amd64' }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- prepare
- validate
strategy:
fail-fast: false
matrix:
target:
- trixie-slim
steps:
-
name: Download digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
pattern: digests-${{ matrix.target }}-*
merge-multiple: true
-
name: Dockerhub Login
uses: docker/login-action@v3
with:
username: max06net
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: docker.io/max06net/base-gui
tags: |
type=ref,prefix=pr-,suffix=-${{ matrix.target }},event=pr
-
name: Create manifest list and push
working-directory: ${{ runner.temp }}/digests
run: |
docker buildx imagetools create \
$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf 'docker.io/max06net/base-gui@sha256:%s ' *)
-
name: Inspect image
run: |
docker buildx imagetools inspect docker.io/max06net/base-gui:${{ steps.meta.outputs.version }}