Merge pull request #4319 from cevich/limit_releases

Cirrus: Only upload tagged releases
This commit is contained in:
OpenShift Merge Robot 2019-10-29 20:48:09 +01:00 committed by GitHub
commit 5918f3a5f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 87 additions and 3 deletions

View File

@ -43,7 +43,7 @@ if type -P git &> /dev/null && [[ -d "$GOSRC/.git" ]]
then
CIRRUS_CHANGE_IN_REPO=${CIRRUS_CHANGE_IN_REPO:-$(git show-ref --hash=8 HEAD || date +%s)}
else # pick something unique and obviously not from Cirrus
CIRRUS_CHANGE_IN_REPO=${CIRRUS_CHANGE_IN_REPO:-no_git_$(date +%s)}
CIRRUS_CHANGE_IN_REPO=${CIRRUS_CHANGE_IN_REPO:-unknown_$(date +%s)}
fi
# Defaults when not running under CI
@ -233,6 +233,42 @@ ircmsg() {
set -e
}
# This covers all possible human & CI workflow parallel & serial combinations
# where at least one caller must definitively discover if within a commit range
# there is at least one release tag not having any '-' characters (return 0)
# or otherwise (return non-0).
is_release() {
req_env_var CIRRUS_BASE_SHA CIRRUS_CHANGE_IN_REPO
local range="${CIRRUS_BASE_SHA}..${CIRRUS_CHANGE_IN_REPO}"
# Easy check first, default non-useful values
if echo "${range}$CIRRUS_TAG" | grep -iq 'unknown'; then
die 11 "is_release() unusable range ${range} or tag $CIRRUS_TAG"
fi
# Next easy check, is CIRRUS_TAG set
unset RELVER
if [[ -n "$CIRRUS_TAG" ]]; then
RELVER="$CIRRUS_TAG"
else # Lastly, look through the range for tags
git fetch --all --tags &> /dev/null|| \
die 12 "is_release() failed to fetch tags"
RELVER=$(git log --pretty='format:%d' $range | \
grep '(tag:' | sed -r -e 's/\s+[(]tag:\s+(v[0-9].*)[)]/\1/' | \
sort -uV | tail -1)
[[ "$?" -eq "0" ]] || \
die 13 "is_release() failed to parse tags"
fi
echo "Found \$RELVER $RELVER"
if [[ -n "$RELVER" ]]; then
if echo "$RELVER" | grep -q '-'; then
return 2
else
return 0
fi
else
return 1
fi
}
setup_rootless() {
req_env_var ROOTLESS_USER GOSRC SECRET_ENV_RE ROOTLESS_ENV_RE

View File

@ -119,5 +119,42 @@ line2" "=" "line 1
line2"
###############################################################################
# tests for is_release()
# N/B: Assuming tests run in their own process, so wiping out the local
# CIRRUS_BASE_SHA CIRRUS_CHANGE_IN_REPO and CIRRUS_TAG will be okay.
function test_is_release() {
CIRRUS_BASE_SHA="$1"
CIRRUS_CHANGE_IN_REPO="$2"
CIRRUS_TAG="$3"
local exp_status=$4
local exp_msg=$5
local msg
msg=$(is_release)
local status=$?
check_result "$msg" "$exp_msg" "is_release(CIRRUS_BASE_SHA='$1' CIRRUS_CHANGE_IN_REPO='$2' CIRRUS_TAG='$3')"
check_result "$status" "$exp_status" "is_release(...) returned $status"
}
# FROM TO TAG RET MSG
#test_is_release "" "" "" "" ""
test_is_release "" "" "" "9" "FATAL: is_release() requires \$CIRRUS_BASE_SHA to be non-empty"
test_is_release "x" "" "" "9" "FATAL: is_release() requires \$CIRRUS_CHANGE_IN_REPO to be non-empty"
test_is_release "unknown" "x" "" "11" "is_release() unusable range unknown..x or tag "
test_is_release "x" "unknown" "" "11" "is_release() unusable range x..unknown or tag "
test_is_release "x" "x" "unknown" "11" "is_release() unusable range x..x or tag unknown"
# Negative-testing git with this function is very difficult, assume it works
# test_is_release ... "is_release() failed to fetch tags"
# test_is_release ... "is_release() failed to parse tags"
BF_V1=$(git rev-parse v1.0.0^)
AT_V1=$(git rev-parse v1.0.0)
test_is_release "$BF_V1" "$BF_V1" "v9.8.7-dev" "2" "Found \$RELVER v9.8.7-dev"
test_is_release "$BF_V1" "$AT_V1" "v9.8.7-dev" "2" "Found \$RELVER v9.8.7-dev"
test_is_release "$BF_V1" "$AT_V1" "" "0" "Found \$RELVER v1.0.0"
exit $rc

View File

@ -17,8 +17,15 @@ then
BUCKET="libpod-pr-releases"
elif [[ -n "$CIRRUS_BRANCH" ]]
then
PR_OR_BRANCH="$CIRRUS_BRANCH"
BUCKET="libpod-$CIRRUS_BRANCH-releases"
# Only release non-development tagged commit ranges
if is_release
then
PR_OR_BRANCH="$CIRRUS_BRANCH"
BUCKET="libpod-$CIRRUS_BRANCH-releases"
else
warn "" "Skipping release processing: Commit range|CIRRUS_TAG is development tagged."
exit 0
fi
else
die 1 "Expecting either \$CIRRUS_PR or \$CIRRUS_BRANCH to be non-empty."
fi
@ -64,6 +71,10 @@ do
echo "Warning: Not processing $filename (invalid extension '$EXT')"
continue
fi
if [[ "$EXT" =~ "gz" ]]
then
EXT="tar.gz"
fi
[[ "$OS_RELEASE_ID" == "ubuntu" ]] || \
chcon -t container_file_t "$filename"