Devel-Cover
view release on metacpan or search on metacpan
mkdir -p "$results_dir"
local cpancover=cpancover
if [[ $(pwd) != /dc ]]; then
local root=
[[ -d /dc ]] && root=/dc/
PATH="./utils:./bin:$PATH"
perl Makefile.PL && make
cpancover="perl -Mblib=$root ${root}bin/cpancover --local"
fi
((verbose)) && cpancover="$cpancover --verbose"
((force)) && cpancover="$cpancover --force"
((dryrun)) && cpancover="$cpancover --dryrun"
local cmd
cmd="$cpancover --env $env --results_dir $results_dir"
cmd="$cmd --workers $(nice_cpus) $*"
((verbose)) && pi "$cmd"
$cmd || true
}
recipe_cpancover() {
run_cpancover "${args[@]:-}"
}
cpancover_docker_ps() {
local name="${docker_image//[^a-zA-Z0-9_.]/-}"
$docker ps -a | tail -n +2 | grep "$name-" | grep -vw "$(hostname)"
}
recipe_cpancover-docker-ps() {
cpancover_docker_ps
}
cpancover_docker_ps_ids() {
cpancover_docker_ps | awk '{ print $1 }' || true
}
recipe_cpancover-docker-kill() {
cpancover_docker_ps_ids | xargs -r "$docker" kill
}
cpancover_docker_rm() {
cpancover_docker_ps_ids | xargs -r "$docker" rm -f
$docker system prune --force
}
recipe_cpancover-docker-rm() {
cpancover_docker_rm
}
recipe_cpancover-docker-rm-image() {
$docker ps -q --filter ancestor="$docker_image" | xargs -r "$docker" stop
$docker ps -aq --filter ancestor="$docker_image" | xargs -r "$docker" rm
$docker rmi "$docker_image"
}
recipe_docker-build() {
local build="$srcdir/../docker/BUILD"
"$build" -e "$env" "${args[@]:+${args[@]}}"
}
# docker push authenticates via `docker login` credentials stored in
# ~/.docker/config.json. The Docker Hub *web API* (hub.docker.com/v2),
# used for listing and deleting tags, has its own auth â POST username +
# PAT to /v2/users/login to obtain a JWT. The CLI credentials cannot be
# reused for this.
#
# HUB_USERNAME: your Docker Hub username
# HUB_TOKEN: a Personal Access Token created at
# https://hub.docker.com/settings/security
# (needs Read & Write & Delete permissions)
Docker_hub_repo="pjcj/cpancover"
# Authenticate with Docker Hub and print a JWT.
docker_hub_auth() {
if [[ -z "${HUB_USERNAME:-}" || -z "${HUB_TOKEN:-}" ]]; then
pf "HUB_USERNAME and HUB_TOKEN environment variables are required"
fi
local token
token=$(curl -sf "https://hub.docker.com/v2/users/login" \
-H "Content-Type: application/json" \
-d "{\"username\":\"$HUB_USERNAME\",\"password\":\"$HUB_TOKEN\"}" |
perl -MJSON::PP -e 'print decode_json(do { local $/; <STDIN> })->{token}')
if [[ -z "$token" ]]; then
pf "Failed to authenticate with Docker Hub"
fi
echo "$token"
}
# Fetch versioned tags from Docker Hub into the Hub_tags array (sorted
# newest-first). Sets Hub_token for callers that need it afterwards.
docker_hub_fetch_tags() {
Hub_token=$(docker_hub_auth)
Hub_tags=()
local base="https://hub.docker.com/v2/repositories"
local url="$base/$Docker_hub_repo/tags?page_size=100"
while [[ -n "$url" && "$url" != "null" ]]; do
local response
response=$(curl -sf "$url" -H "Authorization: Bearer $Hub_token")
local parsed
parsed=$(echo "$response" | perl -MJSON::PP -e '
my $d = decode_json(do { local $/; <STDIN> });
for (@{$d->{results}}) {
my $n = $_->{name};
print "$n\n" if $n =~ /^\d{4}-\d{2}-\d{2}-\d{4}-/;
}
print "---NEXT---\n";
print $d->{next} // "null", "\n";
')
while IFS= read -r t; do
[[ "$t" == "---NEXT---" ]] && break
[[ -n "$t" ]] && Hub_tags+=("$t")
done <<<"$parsed"
url=$(tail -1 <<<"$parsed")
done
# Sort newest-first (the tag format is naturally sortable)
mapfile -t Hub_tags < <(printf '%s\n' "${Hub_tags[@]}" | sort -r)
}
( run in 2.887 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )