Skip to content

Commit ce8ff8a

Browse files
authored
Docker: Mirror images to GitHub Container Registry (#3098)
1 parent 01efc95 commit ce8ff8a

File tree

7 files changed

+124
-0
lines changed

7 files changed

+124
-0
lines changed

.github/workflows/deploy.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ jobs:
146146
env:
147147
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
148148
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
149+
- name: Login GitHub Container Registry
150+
if: github.event.inputs.skip-build-push-image != 'true'
151+
run: echo "${{ secrets.SELENIUM_CI_TOKEN }}" | docker login ghcr.io -u "${{ secrets.SELENIUM_CI_USERNAME }}" --password-stdin
149152
- name: Deploy new images
150153
if: github.event.inputs.skip-build-push-image != 'true'
151154
uses: nick-invision/retry@master
@@ -154,6 +157,14 @@ jobs:
154157
max_attempts: 5
155158
retry_wait_seconds: 300
156159
command: VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make release
160+
- name: Mirror versioned images to GHCR
161+
if: github.event.inputs.skip-build-push-image != 'true'
162+
uses: nick-invision/retry@master
163+
with:
164+
timeout_minutes: 30
165+
max_attempts: 5
166+
retry_wait_seconds: 300
167+
command: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make release_ghcr
157168
- name: Tag images as latest
158169
if: github.event.inputs.skip-build-push-image != 'true'
159170
run: VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make tag_latest
@@ -165,6 +176,14 @@ jobs:
165176
max_attempts: 5
166177
retry_wait_seconds: 300
167178
command: VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make release_latest
179+
- name: Mirror latest images to GHCR
180+
if: github.event.inputs.skip-build-push-image != 'true'
181+
uses: nick-invision/retry@master
182+
with:
183+
timeout_minutes: 20
184+
max_attempts: 5
185+
retry_wait_seconds: 300
186+
command: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make release_ghcr_latest
168187
- name: Update package versions
169188
run: make update_browser_versions_matrix
170189
# make generate_latest_sbom
@@ -177,6 +196,14 @@ jobs:
177196
max_attempts: 5
178197
retry_wait_seconds: 300
179198
command: VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} PUSH_IMAGE=true make tag_and_push_browser_images
199+
- name: Mirror browser images to GHCR
200+
if: github.event.inputs.skip-build-push-image != 'true'
201+
uses: nick-invision/retry@master
202+
with:
203+
timeout_minutes: 30
204+
max_attempts: 5
205+
retry_wait_seconds: 300
206+
command: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make tag_and_push_browser_images_ghcr
180207
- name: Delete previous nightly tag & release if any
181208
uses: dev-drprasad/delete-tag-and-release@master
182209
with:

.github/workflows/nightly.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ jobs:
9898
env:
9999
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
100100
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
101+
- name: Login GitHub Container Registry
102+
run: echo "${{ secrets.SELENIUM_CI_TOKEN }}" | docker login ghcr.io -u "${{ secrets.SELENIUM_CI_USERNAME }}" --password-stdin
101103
- name: Tag images as nightly
102104
run: VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make tag_nightly
103105
- name: Deploy nightly tag
@@ -107,6 +109,13 @@ jobs:
107109
max_attempts: 3
108110
retry_wait_seconds: 120
109111
command: VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make release_nightly
112+
- name: Mirror nightly images to GHCR
113+
uses: nick-invision/retry@master
114+
with:
115+
timeout_minutes: 20
116+
max_attempts: 3
117+
retry_wait_seconds: 120
118+
command: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" VERSION="${GRID_VERSION}" BUILD_DATE=${BUILD_DATE} make release_ghcr_nightly
110119
# - name: Update package versions
111120
# run: make generate_nightly_sbom
112121
- name: Get current latest tag

.github/workflows/release-chrome-for-testing-versions.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ jobs:
113113
env:
114114
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
115115
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
116+
- name: Login GitHub Container Registry
117+
if: env.PUSH_IMAGE == 'true'
118+
run: echo "${{ secrets.SELENIUM_CI_TOKEN }}" | docker login ghcr.io -u "${{ secrets.SELENIUM_CI_USERNAME }}" --password-stdin
116119
- name: Build images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
117120
uses: nick-invision/retry@master
118121
with:
@@ -149,6 +152,9 @@ jobs:
149152
if: env.PUSH_IMAGE == 'true'
150153
run: |
151154
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE} true true
155+
- name: Mirror images to GHCR
156+
if: env.PUSH_IMAGE == 'true'
157+
run: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" BROWSER_NAME="${BROWSER_NAME}" make mirror_browser_images_ghcr
152158
- name: Upload changelog
153159
if: always()
154160
uses: actions/upload-artifact@main

.github/workflows/release-chrome-versions.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ jobs:
113113
env:
114114
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
115115
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
116+
- name: Login GitHub Container Registry
117+
if: env.PUSH_IMAGE == 'true'
118+
run: echo "${{ secrets.SELENIUM_CI_TOKEN }}" | docker login ghcr.io -u "${{ secrets.SELENIUM_CI_USERNAME }}" --password-stdin
116119
- name: Build images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
117120
uses: nick-invision/retry@master
118121
with:
@@ -149,6 +152,9 @@ jobs:
149152
if: env.PUSH_IMAGE == 'true'
150153
run: |
151154
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE} true true
155+
- name: Mirror images to GHCR
156+
if: env.PUSH_IMAGE == 'true'
157+
run: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" BROWSER_NAME="${BROWSER_NAME}" make mirror_browser_images_ghcr
152158
- name: Upload changelog
153159
if: always()
154160
uses: actions/upload-artifact@main

.github/workflows/release-edge-versions.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ jobs:
113113
env:
114114
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
115115
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
116+
- name: Login GitHub Container Registry
117+
if: env.PUSH_IMAGE == 'true'
118+
run: echo "${{ secrets.SELENIUM_CI_TOKEN }}" | docker login ghcr.io -u "${{ secrets.SELENIUM_CI_USERNAME }}" --password-stdin
116119
- name: Build images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
117120
uses: nick-invision/retry@master
118121
with:
@@ -149,6 +152,9 @@ jobs:
149152
if: env.PUSH_IMAGE == 'true'
150153
run: |
151154
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE} true true
155+
- name: Mirror images to GHCR
156+
if: env.PUSH_IMAGE == 'true'
157+
run: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" BROWSER_NAME="${BROWSER_NAME}" make mirror_browser_images_ghcr
152158
- name: Upload changelog
153159
if: always()
154160
uses: actions/upload-artifact@main

.github/workflows/release-firefox-versions.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ jobs:
113113
env:
114114
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
115115
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
116+
- name: Login GitHub Container Registry
117+
if: env.PUSH_IMAGE == 'true'
118+
run: echo "${{ secrets.SELENIUM_CI_TOKEN }}" | docker login ghcr.io -u "${{ secrets.SELENIUM_CI_USERNAME }}" --password-stdin
116119
- name: Build images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
117120
uses: nick-invision/retry@master
118121
with:
@@ -149,6 +152,9 @@ jobs:
149152
if: env.PUSH_IMAGE == 'true'
150153
run: |
151154
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE} true true
155+
- name: Mirror images to GHCR
156+
if: env.PUSH_IMAGE == 'true'
157+
run: GHCR_NAMESPACE="ghcr.io/$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" BROWSER_NAME="${BROWSER_NAME}" make mirror_browser_images_ghcr
152158
- name: Upload changelog
153159
if: always()
154160
uses: actions/upload-artifact@main

Makefile

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ KEDA_BASED_NAME := $(or $(KEDA_BASED_NAME),$(KEDA_BASED_NAME),kedacore)
3737
KEDA_BASED_TAG := $(or $(KEDA_BASED_TAG),$(KEDA_BASED_TAG),2.19.0)
3838
TEST_PATCHED_KEDA := $(or $(TEST_PATCHED_KEDA),$(TEST_PATCHED_KEDA),false)
3939
TRACING_EXPORTER_ENDPOINT := $(or $(TRACING_EXPORTER_ENDPOINT),$(TRACING_EXPORTER_ENDPOINT),http://\$$KUBERNETES_NODE_HOST_IP:4317)
40+
GHCR_NAMESPACE := $(or $(GHCR_NAMESPACE),$(GHCR_NAMESPACE),ghcr.io/seleniumhq)
4041

4142
all: hub \
4243
distributor \
@@ -468,6 +469,28 @@ tag_and_push_edge_images:
468469
tag_and_push_firefox_images:
469470
./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)
470471

472+
tag_and_push_browser_images_ghcr:
473+
for image in node-chrome standalone-chrome \
474+
node-chromium standalone-chromium \
475+
node-chrome-for-testing standalone-chrome-for-testing \
476+
node-edge standalone-edge \
477+
node-firefox standalone-firefox; do \
478+
docker images --format "{{.Tag}}" "$(NAME)/$$image" | grep -v "^<none>$$" | while IFS= read -r tag; do \
479+
docker buildx imagetools create \
480+
--tag $(GHCR_NAMESPACE)/$$image:$$tag \
481+
docker.io/$(NAME)/$$image:$$tag ; \
482+
done ; \
483+
done
484+
485+
mirror_browser_images_ghcr:
486+
for image in node-$(BROWSER_NAME) standalone-$(BROWSER_NAME); do \
487+
docker images --format "{{.Tag}}" "$(NAME)/$$image" | grep -v "^<none>$$" | while IFS= read -r tag; do \
488+
docker buildx imagetools create \
489+
--tag $(GHCR_NAMESPACE)/$$image:$$tag \
490+
docker.io/$(NAME)/$$image:$$tag ; \
491+
done ; \
492+
done
493+
471494
tag_ffmpeg_latest:
472495
docker tag $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) $(NAME)/ffmpeg:latest
473496
docker tag $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) $(NAME)/ffmpeg:$(FFMPEG_VERSION)
@@ -537,6 +560,18 @@ release_latest:
537560
docker push $(NAME)/standalone-all-browsers:latest
538561
docker push $(NAME)/video:latest
539562

563+
release_ghcr_latest:
564+
for image in base hub distributor router sessions session-queue event-bus \
565+
node-base node-chrome node-chromium node-chrome-for-testing node-edge \
566+
node-firefox node-docker node-kubernetes node-all-browsers \
567+
standalone-chrome standalone-chromium standalone-chrome-for-testing \
568+
standalone-edge standalone-firefox standalone-docker \
569+
standalone-kubernetes standalone-all-browsers video; do \
570+
docker buildx imagetools create \
571+
--tag $(GHCR_NAMESPACE)/$$image:latest \
572+
docker.io/$(NAME)/$$image:latest ; \
573+
done
574+
540575
generate_latest_sbom:
541576
NAME=$(NAME) FILTER_IMAGE_TAG=latest OUTPUT_FILE=$(SBOM_OUTPUT) ./generate_sbom.sh
542577

@@ -600,6 +635,18 @@ release_nightly:
600635
docker push $(NAME)/standalone-all-browsers:nightly
601636
docker push $(NAME)/video:nightly
602637

638+
release_ghcr_nightly:
639+
for image in base hub distributor router sessions session-queue event-bus \
640+
node-base node-chrome node-chromium node-chrome-for-testing node-edge \
641+
node-firefox node-docker node-kubernetes node-all-browsers \
642+
standalone-chrome standalone-chromium standalone-chrome-for-testing \
643+
standalone-edge standalone-firefox standalone-docker \
644+
standalone-kubernetes standalone-all-browsers video; do \
645+
docker buildx imagetools create \
646+
--tag $(GHCR_NAMESPACE)/$$image:nightly \
647+
docker.io/$(NAME)/$$image:nightly ; \
648+
done
649+
603650
generate_nightly_sbom:
604651
NAME=$(NAME) FILTER_IMAGE_TAG=nightly OUTPUT_FILE=$(SBOM_OUTPUT) ./generate_sbom.sh
605652

@@ -800,6 +847,23 @@ release: tag_major_minor
800847
docker push $(NAME)/standalone-all-browsers:$(MAJOR_MINOR_PATCH)
801848
docker push $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE)
802849

850+
release_ghcr:
851+
for image in base hub distributor router sessions session-queue event-bus \
852+
node-base node-chrome node-chromium node-chrome-for-testing node-edge \
853+
node-firefox node-docker node-kubernetes node-all-browsers \
854+
standalone-chrome standalone-chromium standalone-chrome-for-testing \
855+
standalone-edge standalone-firefox standalone-docker \
856+
standalone-kubernetes standalone-all-browsers; do \
857+
for tag in $(TAG_VERSION) $(MAJOR) $(MAJOR).$(MINOR) $(MAJOR_MINOR_PATCH); do \
858+
docker buildx imagetools create \
859+
--tag $(GHCR_NAMESPACE)/$$image:$$tag \
860+
docker.io/$(NAME)/$$image:$$tag ; \
861+
done ; \
862+
done
863+
docker buildx imagetools create \
864+
--tag $(GHCR_NAMESPACE)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) \
865+
docker.io/$(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE)
866+
803867
start_test_site:
804868
@docker rm -f the-internet 2>/dev/null || true
805869
@docker run --rm --name the-internet -d -p 5001:5000 ndviet/the-internet:latest

0 commit comments

Comments
 (0)