Skip to content

Commit 0c8663b

Browse files
authored
Merge pull request #319 from detiber/multiRegistry
πŸƒπŸ»β€β™‚οΈ Publish images to multiple registries
2 parents 365fddb + 39e04f2 commit 0c8663b

File tree

4 files changed

+214
-51
lines changed

4 files changed

+214
-51
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: 'Metadata'
2+
description: 'Generate Image Metadata'
3+
inputs:
4+
docker_username:
5+
description: 'docker_username'
6+
required: true
7+
quay_username:
8+
description: 'quay_username'
9+
required: true
10+
metadata_flavor:
11+
description: 'metadata_flavor'
12+
required: true
13+
metadata_tags:
14+
description: 'metadata_tags'
15+
required: true
16+
outputs:
17+
tags:
18+
description: "generated image tags"
19+
value: ${{ steps.meta.outputs.tags }}
20+
labels:
21+
description: "generated image labels"
22+
value: ${{ steps.meta.outputs.labels }}
23+
version:
24+
description: "generated image version"
25+
value: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
26+
runs:
27+
using: "composite"
28+
steps:
29+
- name: Build image urls
30+
shell: bash
31+
id: image-urls
32+
env:
33+
DOCKER_USERNAME: ${{ inputs.docker_username }}
34+
QUAY_USERNAME: ${{ inputs.quay_username }}
35+
run: |
36+
IMAGES=${GHCR_REGISTRY}/${IMAGE_NAME}
37+
[[ -n "$DOCKER_USERNAME" ]] && IMAGES=${IMAGES},${DOCKER_REGISTRY}/${IMAGE_NAME}
38+
[[ -n "$QUAY_USERNAME" ]] && IMAGES=${IMAGES},${QUAY_REGISTRY}/${IMAGE_NAME}
39+
echo "::set-output name=images::${IMAGES}"
40+
- name: Docker manager metadata
41+
id: meta
42+
uses: docker/metadata-action@v3
43+
with:
44+
images: ${{ steps.image-urls.outputs.images }}
45+
flavor: ${{ inputs.metadata_flavor }}
46+
tags: ${{ inputs.metadata_tags }}

β€Ž.github/workflows/ci.yaml

Lines changed: 119 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ on:
33
push:
44
branches:
55
- main
6-
- capi-v1 # TODO: Used for testing my fork, remove prior to merge
76
schedule:
87
- cron: "0 */4 * * *" # TODO: Run every 4 hours to soak test, should be less frequent before merge (weekly/daily/???)
98
env:
10-
REGISTRY: ghcr.io
11-
IMAGE_NAME: ${{ github.repository }}
9+
IMAGE_NAME: cluster-api-provider-packet
10+
GHCR_REGISTRY: ghcr.io/${{ github.repository_owner }}
11+
DOCKER_REGISTRY: ${{ secrets.DOCKER_ORG }}
12+
QUAY_REGISTRY: quay.io/${{ secrets.QUAY_ORG }}
13+
REGISTRY: quay.io/${{ secrets.QUAY_ORG }}
14+
metadata_flavor: latest=false
15+
metadata_tags: type=sha
16+
1217
jobs:
1318
validate:
1419
name: "Validate ${{ matrix.target }}"
@@ -38,10 +43,12 @@ jobs:
3843
${{ runner.os }}-tmp-
3944
- name: ${{ matrix.target }}
4045
run: make ${{ matrix.target }}
46+
4147
manager-image:
4248
name: Build and push manager image
4349
runs-on: ubuntu-latest
44-
needs: [validate]
50+
needs:
51+
- validate
4552
steps:
4653
- name: checkout
4754
uses: actions/checkout@v3
@@ -50,19 +57,42 @@ jobs:
5057
uses: docker/setup-qemu-action@v1
5158
- name: Set up Docker Buildx
5259
uses: docker/setup-buildx-action@v1
53-
- name: Docker manager metadata
60+
61+
- name: Generate metadata
5462
id: meta
55-
uses: docker/metadata-action@v3
63+
uses: ./.github/actions/metadata
5664
with:
57-
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
58-
tags: |
59-
type=sha
60-
- name: Log in to the Container registry
65+
docker_username: ${{ secrets.DOCKER_USERNAME }}
66+
quay_username: ${{ secrets.QUAY_USERNAME }}
67+
metadata_flavor: ${{ env.metadata_flavor }}
68+
metadata_tags: ${{ env.metadata_tags }}
69+
70+
- name: Log in to ghcr.io
6171
uses: docker/login-action@v1
6272
with:
63-
registry: ${{ env.REGISTRY }}
73+
registry: ghcr.io
6474
username: ${{ github.actor }}
6575
password: ${{ secrets.GITHUB_TOKEN }}
76+
77+
- name: Log into DockerHub
78+
uses: docker/login-action@v1
79+
env:
80+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
81+
if: ${{ env.DOCKER_USERNAME != '' }}
82+
with:
83+
username: ${{ secrets.DOCKER_USERNAME }}
84+
password: ${{ secrets.DOCKER_PASSWORD }}
85+
86+
- name: Log into quay.io
87+
uses: docker/login-action@v1
88+
env:
89+
QUAY_USERNAME: ${{ secrets.QUAY_USERNAME }}
90+
if: ${{ env.QUAY_USERNAME != '' }}
91+
with:
92+
registry: quay.io
93+
username: ${{ secrets.QUAY_USERNAME }}
94+
password: ${{ secrets.QUAY_PASSWORD }}
95+
6696
- name: Build and push manager image
6797
uses: docker/build-push-action@v2
6898
with:
@@ -73,10 +103,12 @@ jobs:
73103
platforms: linux/amd64,linux/arm64
74104
cache-from: type=gha, scope=${{ github.workflow }}
75105
cache-to: type=gha, mode=max, scope=${{ github.workflow }}
106+
76107
test-release:
77108
name: Test Release
78109
runs-on: ubuntu-latest
79-
needs: [validate]
110+
needs:
111+
- validate
80112
steps:
81113
- name: checkout
82114
uses: actions/checkout@v3
@@ -88,22 +120,26 @@ jobs:
88120
restore-keys: |
89121
${{ runner.os }}-tools-bin-release-
90122
${{ runner.os }}-tools-bin-
91-
- name: Docker manager metadata
123+
124+
- name: Generate metadata
92125
id: meta
93-
uses: docker/metadata-action@v3
126+
uses: ./.github/actions/metadata
94127
with:
95-
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
96-
tags: |
97-
type=sha
128+
docker_username: ${{ secrets.DOCKER_USERNAME }}
129+
quay_username: ${{ secrets.QUAY_USERNAME }}
130+
metadata_flavor: ${{ env.metadata_flavor }}
131+
metadata_tags: ${{ env.metadata_tags }}
132+
98133
- name: Test Release
99134
env:
100-
TAG: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
135+
TAG: ${{ steps.meta.outputs.version }}
101136
run: make release
102137
- name: Upload artifact
103138
uses: actions/upload-artifact@v2
104139
with:
105140
name: test-release
106141
path: out/release
142+
107143
e2e-quickstart:
108144
name: "E2E quickstart"
109145
concurrency: ci-${{ github.ref }}-e2e-quickstart
@@ -127,13 +163,23 @@ jobs:
127163
with:
128164
name: test-release
129165
path: out/release
130-
- name: Set TAG env variable
131-
run: |
132-
echo "TAG=sha-${GITHUB_SHA::7}" >> $GITHUB_ENV
166+
167+
- name: Generate metadata
168+
id: meta
169+
uses: ./.github/actions/metadata
170+
with:
171+
docker_username: ${{ secrets.DOCKER_USERNAME }}
172+
quay_username: ${{ secrets.QUAY_USERNAME }}
173+
metadata_flavor: ${{ env.metadata_flavor }}
174+
metadata_tags: ${{ env.metadata_tags }}
175+
133176
- name: Prepull the pre-built image
134177
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG}
178+
env:
179+
TAG: ${{ steps.meta.outputs.version }}
135180
- name: "e2e-quickstart"
136181
env:
182+
TAG: ${{ steps.meta.outputs.version }}
137183
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }}
138184
PROJECT_ID: ${{ secrets.PROJECT_ID }}
139185
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml"
@@ -173,13 +219,23 @@ jobs:
173219
with:
174220
name: test-release
175221
path: out/release
176-
- name: Set TAG env variable
177-
run: |
178-
echo "TAG=sha-${GITHUB_SHA::7}" >> $GITHUB_ENV
222+
223+
- name: Generate metadata
224+
id: meta
225+
uses: ./.github/actions/metadata
226+
with:
227+
docker_username: ${{ secrets.DOCKER_USERNAME }}
228+
quay_username: ${{ secrets.QUAY_USERNAME }}
229+
metadata_flavor: ${{ env.metadata_flavor }}
230+
metadata_tags: ${{ env.metadata_tags }}
231+
179232
- name: Prepull the pre-built image
180233
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG}
234+
env:
235+
TAG: ${{ steps.meta.outputs.version }}
181236
- name: "e2e"
182237
env:
238+
TAG: ${{ steps.meta.outputs.version }}
183239
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }}
184240
PROJECT_ID: ${{ secrets.PROJECT_ID }}
185241
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml"
@@ -219,13 +275,23 @@ jobs:
219275
with:
220276
name: test-release
221277
path: out/release
222-
- name: Set TAG env variable
223-
run: |
224-
echo "TAG=sha-${GITHUB_SHA::7}" >> $GITHUB_ENV
278+
279+
- name: Generate metadata
280+
id: meta
281+
uses: ./.github/actions/metadata
282+
with:
283+
docker_username: ${{ secrets.DOCKER_USERNAME }}
284+
quay_username: ${{ secrets.QUAY_USERNAME }}
285+
metadata_flavor: ${{ env.metadata_flavor }}
286+
metadata_tags: ${{ env.metadata_tags }}
287+
225288
- name: Prepull the pre-built image
226289
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG}
290+
env:
291+
TAG: ${{ steps.meta.outputs.version }}
227292
- name: "e2e-conformance"
228293
env:
294+
TAG: ${{ steps.meta.outputs.version }}
229295
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }}
230296
PROJECT_ID: ${{ secrets.PROJECT_ID }}
231297
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml"
@@ -265,13 +331,23 @@ jobs:
265331
with:
266332
name: test-release
267333
path: out/release
268-
- name: Set TAG env variable
269-
run: |
270-
echo "TAG=sha-${GITHUB_SHA::7}" >> $GITHUB_ENV
334+
335+
- name: Generate metadata
336+
id: meta
337+
uses: ./.github/actions/metadata
338+
with:
339+
docker_username: ${{ secrets.DOCKER_USERNAME }}
340+
quay_username: ${{ secrets.QUAY_USERNAME }}
341+
metadata_flavor: ${{ env.metadata_flavor }}
342+
metadata_tags: ${{ env.metadata_tags }}
343+
271344
- name: Prepull the pre-built image
272345
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG}
346+
env:
347+
TAG: ${{ steps.meta.outputs.version }}
273348
- name: "e2e-management-upgrade"
274349
env:
350+
TAG: ${{ steps.meta.outputs.version }}
275351
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }}
276352
PROJECT_ID: ${{ secrets.PROJECT_ID }}
277353
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml"
@@ -311,13 +387,23 @@ jobs:
311387
with:
312388
name: test-release
313389
path: out/release
314-
- name: Set TAG env variable
315-
run: |
316-
echo "TAG=sha-${GITHUB_SHA::7}" >> $GITHUB_ENV
390+
391+
- name: Generate metadata
392+
id: meta
393+
uses: ./.github/actions/metadata
394+
with:
395+
docker_username: ${{ secrets.DOCKER_USERNAME }}
396+
quay_username: ${{ secrets.QUAY_USERNAME }}
397+
metadata_flavor: ${{ env.metadata_flavor }}
398+
metadata_tags: ${{ env.metadata_tags }}
399+
317400
- name: Prepull the pre-built image
318401
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG}
402+
env:
403+
TAG: ${{ steps.meta.outputs.version }}
319404
- name: "e2e-workload-upgrade"
320405
env:
406+
TAG: ${{ steps.meta.outputs.version }}
321407
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }}
322408
PROJECT_ID: ${{ secrets.PROJECT_ID }}
323409
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml"

β€Ž.github/workflows/pr.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ name: Pull Request Validation
22
on:
33
pull_request:
44
types: [opened, synchronize, reopened]
5-
env:
6-
REGISTRY: ghcr.io
7-
IMAGE_NAME: ${{ github.repository }}
85
jobs:
96
validate:
107
name: "Validate ${{ matrix.target }}"

0 commit comments

Comments
Β (0)