diff --git a/.github/ISSUE_TEMPLATE/sync-image.yml b/.github/ISSUE_TEMPLATE/sync-image.yml new file mode 100644 index 0000000..f9e184c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/sync-image.yml @@ -0,0 +1,18 @@ +name: Sync Image +description: 同步一个镜像 +labels: +- sync image +body: +- type: checkboxes + id: checkboxes + attributes: + label: 单次单镜像同步 + description: 请在标题上填入你要同步的 Image + options: + - label: 确保包含域名, 如 docker.io/, registry.k8s.io/, 如果不包含域名的请填入默认的 docker.io/ + - label: 确保包含镜像的 tag, 如 :latest + - label: 请确保这个镜像真实存在 + - label: 举个例子 + - label: 如 docker.io/library/busybox:latest + - label: 如 docker.io/kindest/node:v1.30.0 + - label: 如 registry.k8s.io/kubectl:v1.30.0 diff --git a/.github/workflows/target-image-sync.yml b/.github/workflows/target-image-sync.yml index 71a28b2..4d4303d 100644 --- a/.github/workflows/target-image-sync.yml +++ b/.github/workflows/target-image-sync.yml @@ -1,4 +1,4 @@ -name: Target Sync Image +name: Target Sync Image (old) on: issues: types: diff --git a/.github/workflows/target-sync-image.yml b/.github/workflows/target-sync-image.yml new file mode 100644 index 0000000..1c041dd --- /dev/null +++ b/.github/workflows/target-sync-image.yml @@ -0,0 +1,85 @@ +name: Target Sync Image +on: + issues: + types: + - opened + +# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token +permissions: + issues: write + +jobs: + sync: + runs-on: ubuntu-latest + if: contains(github.event.issue.labels.*.name, 'sync image') + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Check Issue + env: + MESSAGE: "${{ github.event.issue.body }}" + run: | + ORIGIN_IMAGE=$(echo ${{ github.event.issue.title }}) + if [[ -z "${ORIGIN_IMAGE}" ]]; then + gh issue comment ${{ github.event.issue.number }} -b "找不到镜像呢" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image failure" + gh issue close ${{ github.event.issue.number }} --reason "not planned" + exit 1 + fi + if [[ "${ORIGIN_IMAGE}" != *":"* ]]; then + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 不存在呢, 请指定 tag, 如: ${ORIGIN_IMAGE}:latest" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image failure" + gh issue close ${{ github.event.issue.number }} --reason "not planned" + exit 1 + fi + if [[ "${ORIGIN_IMAGE%%/*}" != *"."* ]]; then + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 不存在呢, 请指定域名, 如: docker.io/${ORIGIN_IMAGE}" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image failure" + gh issue close ${{ github.event.issue.number }} --reason "not planned" + exit 1 + fi + - name: Set up skopeo + run: | + wget https://github.com/lework/skopeo-binary/releases/download/v1.13.3/skopeo-linux-amd64 -O /usr/local/bin/skopeo && chmod +x /usr/local/bin/skopeo + skopeo --version + - name: Check Image + env: + MESSAGE: "${{ github.event.issue.body }}" + run: | + ORIGIN_IMAGE=$(echo ${{ github.event.issue.title }}) + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步中...
[详情请查看](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" + - name: Start Proxy + env: + only_proxy: "m.daocloud.io" + run: | + wget https://github.com/wzshiming/bridge/releases/download/v0.9.0/bridge_linux_amd64 -O /usr/local/bin/bridge && chmod +x /usr/local/bin/bridge + nohup /usr/local/bin/bridge -b :8080 -p - ${{ secrets.PROTOCOL }} 2>/dev/null & + - name: Check Proxy + run: | + curl -v http://127.0.0.1:8080 || exit 1 + curl -f --proxy 127.0.0.1:8080 -v http://m.daocloud.io/v2/ || exit 1 + - name: Sync Images + env: + INCREMENTAL: "true" + SYNC: "true" + PARALLET: "1" + http_proxy: socks5://127.0.0.1:8080 + https_proxy: socks5://127.0.0.1:8080 + MESSAGE: "${{ github.event.issue.body }}" + run: | + ORIGIN_IMAGE=$(echo ${{ github.event.issue.title }}) + ./hack/diff-image.sh "${ORIGIN_IMAGE}" "m.daocloud.io/${ORIGIN_IMAGE}" + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步完成
请使用 m.daocloud.io/${ORIGIN_IMAGE} 替代源镜像" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image succeeded" + gh issue close ${{ github.event.issue.number }} --reason "completed" + + - name: Fail Sync + if: failure() + env: + MESSAGE: "${{ github.event.issue.body }}" + run: | + ORIGIN_IMAGE=$(echo ${{ github.event.issue.title }}) + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步失败
[详情请查看](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image failure"