about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarcoIeni <11428655+MarcoIeni@users.noreply.github.com>2025-01-16 11:21:41 +0100
committerMarcoIeni <11428655+MarcoIeni@users.noreply.github.com>2025-01-16 11:21:41 +0100
commitf5fe0a029389f25056c916ba6fafc18518f708f6 (patch)
tree174d07315f24c670e39f543be3df738ae9385ab8
parent5cd16b7f2bc3624f2d658aa87151279878d2652a (diff)
downloadrust-f5fe0a029389f25056c916ba6fafc18518f708f6.tar.gz
rust-f5fe0a029389f25056c916ba6fafc18518f708f6.zip
ci: mirror ubuntu:22.04 to ghcr.io
-rw-r--r--.github/workflows/ghcr.yml57
1 files changed, 57 insertions, 0 deletions
diff --git a/.github/workflows/ghcr.yml b/.github/workflows/ghcr.yml
new file mode 100644
index 00000000000..0fcd1b17816
--- /dev/null
+++ b/.github/workflows/ghcr.yml
@@ -0,0 +1,57 @@
+# Mirror DockerHub images used by the Rust project to ghcr.io.
+# Images are available at https://github.com/orgs/rust-lang/packages.
+#
+# In some CI jobs, we pull images from ghcr.io instead of Docker Hub because
+# Docker Hub has a rate limit, while ghcr.io doesn't.
+# Those images are pushed to ghcr.io by this job.
+#
+# Note that authenticating to DockerHub or other registries isn't possible
+# for PR jobs, because forks can't access secrets.
+# That's why we use ghcr.io: it has no rate limit and it doesn't require authentication.
+
+name: GHCR
+
+on:
+  workflow_dispatch:
+  schedule:
+    # Run daily at midnight UTC
+    - cron: '0 0 * * *'
+
+jobs:
+  mirror:
+    name: DockerHub mirror
+    runs-on: ubuntu-24.04
+    if: github.repository == 'rust-lang/rust'
+    permissions:
+      # Needed to write to the ghcr.io registry
+      packages: write
+    steps:
+      - uses: actions/checkout@v4
+        with:
+          persist-credentials: false
+
+      - name: Log in to registry
+        run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.repository_owner }} --password-stdin
+
+      # Download crane in the current directory.
+      # We use crane because it copies the docker image for all the architectures available in
+      # DockerHub for the image.
+      # Learn more about crane at
+      # https://github.com/google/go-containerregistry/blob/main/cmd/crane/README.md
+      - name: Download crane
+        run: |
+          curl -sL "https://github.com/google/go-containerregistry/releases/download/${VERSION}/go-containerregistry_${OS}_${ARCH}.tar.gz" | tar -xzf -
+        env:
+          VERSION: v0.20.2
+          OS: Linux
+          ARCH: x86_64
+
+      - name: Mirror DockerHub
+        run: |
+          # DockerHub image we want to mirror
+          image="ubuntu:22.04"
+
+          # Mirror image from DockerHub to ghcr.io
+          ./crane copy \
+            docker.io/${image} \
+            ghcr.io/${{ github.repository_owner }}/${image}