docker に push する先を typo してたまま CI 回しててしばらくずっと間違ったところに push してました。
oneapi が正しかったのに openapi ってなってました。
ここで今までビルドしたイメージを openapi から oneapi の方に移したいなと思ったのですが、これをやる場合 openapi から pull して oneapi に push するだけではあるのですが、すべてのタグでやるのはめんどくさかったのでスクリプトにしました。
#!/bin/bash | |
# usage: docker-cp-repo.sh src_repo dst_repo | |
set -euo pipefail | |
SRC_REPO=$1 | |
DST_REPO=$2 | |
SRC_TAGS=$(curl -s https://registry.hub.docker.com/v1/repositories/${SRC_REPO}/tags | jq -r '.[].name') | |
DST_TAGS=$(curl -s https://registry.hub.docker.com/v1/repositories/${DST_REPO}/tags | jq -r '.[].name') | |
ONE_SIDE_TAGS=$(echo -e "${SRC_TAGS}\n${DST_TAGS}" | sort | uniq -u) | |
SRC_ONLY_TAGS=$(echo -e "${SRC_TAGS}\n${ONE_SIDE_TAGS}" | sort | uniq -d) | |
for t in ${SRC_ONLY_TAGS}; do | |
echo $t | |
docker pull "${SRC_REPO}:$t" | |
docker tag "${SRC_REPO}:$t" "${DST_REPO}:$t" | |
docker push "${DST_REPO}:$t" | |
done | |
deleteTags() { | |
docker images | grep "$1" | awk '{print $2}' | xargs -I{} docker rmi $1:{} | |
} | |
# deleteTags "${SRC_REPO}" | |
# deleteTags "${DST_REPO}" |
./docker-cp-repo.sh srzzumix/openapi-cxx srzzumix/oneapi-cxx
のように使います。
jq 使うと repository のタグ一覧が簡単に取れるので便利です。
今回は以上。では。