mirror of
https://github.com/genuinetools/reg.git
synced 2024-08-21 14:20:23 -04:00
128 lines
3.2 KiB
Bash
128 lines
3.2 KiB
Bash
# has_digest enforces the last output line is "Digest: sha256:..."
|
|
# the input is the output from a docker push cli command
|
|
function has_digest() {
|
|
filtered=$(echo "$1" |sed -rn '/[dD]igest\: sha(256|384|512)/ p')
|
|
[ "$filtered" != "" ]
|
|
# See http://wiki.alpinelinux.org/wiki/Regex#BREs before making changes to regex
|
|
digest=$(expr "$filtered" : ".*\(sha[0-9]\{3,3\}:[a-z0-9]*\)")
|
|
}
|
|
|
|
# tempImage creates a new image using the provided name
|
|
# requires bats
|
|
function tempImage() {
|
|
dir=$(mktemp -d)
|
|
run dd if=/dev/urandom of="$dir/f" bs=1024 count=512
|
|
cat <<DockerFileContent > "$dir/Dockerfile"
|
|
FROM scratch
|
|
COPY f /f
|
|
|
|
CMD []
|
|
DockerFileContent
|
|
|
|
cp_t $dir "/tmpbuild/"
|
|
exec_t "cd /tmpbuild/; docker build --no-cache -t $1 .; rm -rf /tmpbuild/"
|
|
}
|
|
|
|
# skip basic auth tests with Docker 1.6, where they don't pass due to
|
|
# certificate issues, requires bats
|
|
function basic_auth_version_check() {
|
|
run sh -c 'docker version | fgrep -q "Client version: 1.6."'
|
|
if [ "$status" -eq 0 ]; then
|
|
skip "Basic auth tests don't support 1.6.x"
|
|
fi
|
|
}
|
|
|
|
email="a@nowhere.com"
|
|
|
|
# docker_t_login calls login with email depending on version
|
|
function docker_t_login() {
|
|
# Only pass email field pre 1.11, no deprecation warning
|
|
parse_version "$GOLEM_DIND_VERSION"
|
|
v=$version
|
|
parse_version "1.11.0"
|
|
if [ "$v" -lt "$version" ]; then
|
|
run docker_t login -e $email $@
|
|
else
|
|
run docker_t login $@
|
|
fi
|
|
}
|
|
|
|
# login issues a login to docker to the provided server
|
|
# uses user, password, and email variables set outside of function
|
|
# requies bats
|
|
function login() {
|
|
rm -f /root/.docker/config.json
|
|
|
|
docker_t_login -u $user -p $password $1
|
|
if [ "$status" -ne 0 ]; then
|
|
echo $output
|
|
fi
|
|
[ "$status" -eq 0 ]
|
|
|
|
# Handle different deprecation warnings
|
|
parse_version "$GOLEM_DIND_VERSION"
|
|
v=$version
|
|
parse_version "1.11.0"
|
|
if [ "$v" -lt "$version" ]; then
|
|
# First line is WARNING about credential save or email deprecation (maybe both)
|
|
[ "${lines[2]}" = "Login Succeeded" -o "${lines[1]}" = "Login Succeeded" ]
|
|
else
|
|
[ "${lines[0]}" = "Login Succeeded" ]
|
|
fi
|
|
|
|
}
|
|
|
|
function login_oauth() {
|
|
login $@
|
|
|
|
tmpFile=$(mktemp)
|
|
get_file_t /root/.docker/config.json $tmpFile
|
|
run awk -v RS="" "/\"$1\": \\{[[:space:]]+\"auth\": \"[[:alnum:]]+\",[[:space:]]+\"identitytoken\"/ {exit 3}" $tmpFile
|
|
[ "$status" -eq 3 ]
|
|
}
|
|
|
|
function parse_version() {
|
|
version=$(echo "$1" | cut -d '-' -f1) # Strip anything after '-'
|
|
major=$(echo "$version" | cut -d . -f1)
|
|
minor=$(echo "$version" | cut -d . -f2)
|
|
rev=$(echo "$version" | cut -d . -f3)
|
|
|
|
version=$((major * 1000 * 1000 + minor * 1000 + rev))
|
|
}
|
|
|
|
function version_check() {
|
|
name=$1
|
|
checkv=$2
|
|
minv=$3
|
|
parse_version "$checkv"
|
|
v=$version
|
|
parse_version "$minv"
|
|
if [ "$v" -lt "$version" ]; then
|
|
skip "$name version \"$checkv\" does not meet required version \"$minv\""
|
|
fi
|
|
}
|
|
|
|
function get_file_t() {
|
|
docker cp dockerdaemon:$1 $2
|
|
}
|
|
|
|
function cp_t() {
|
|
docker cp $1 dockerdaemon:$2
|
|
}
|
|
|
|
function exec_t() {
|
|
docker exec dockerdaemon sh -c "$@"
|
|
}
|
|
|
|
function docker_t() {
|
|
docker exec dockerdaemon docker $@
|
|
}
|
|
|
|
# build creates a new docker image id from another image
|
|
function build() {
|
|
docker exec -i dockerdaemon docker build --no-cache -t $1 - <<DOCKERFILE
|
|
FROM $2
|
|
MAINTAINER distribution@docker.com
|
|
DOCKERFILE
|
|
}
|