summaryrefslogtreecommitdiff
path: root/contrib/cirrus
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/cirrus')
-rw-r--r--contrib/cirrus/99-do-not-use-google-subnets.conflist21
-rwxr-xr-xcontrib/cirrus/build_release.sh30
-rwxr-xr-xcontrib/cirrus/cache_release_archive.sh140
-rwxr-xr-xcontrib/cirrus/cirrus_yaml_test.py43
-rw-r--r--contrib/cirrus/git_authors_to_irc_nicks.csv8
-rwxr-xr-xcontrib/cirrus/integration_test.sh10
-rw-r--r--contrib/cirrus/lib.sh25
-rwxr-xr-xcontrib/cirrus/setup_environment.sh17
-rwxr-xr-xcontrib/cirrus/success.sh48
l---------contrib/cirrus/uncache_release_archives.sh1
-rwxr-xr-xcontrib/cirrus/unit_test.sh4
-rwxr-xr-xcontrib/cirrus/upload_release_archive.sh52
12 files changed, 202 insertions, 197 deletions
diff --git a/contrib/cirrus/99-do-not-use-google-subnets.conflist b/contrib/cirrus/99-do-not-use-google-subnets.conflist
new file mode 100644
index 000000000..e9ab638ed
--- /dev/null
+++ b/contrib/cirrus/99-do-not-use-google-subnets.conflist
@@ -0,0 +1,21 @@
+{
+ "cniVersion": "0.4.0",
+ "name": "do-not-use-google-subnets",
+ "plugins": [
+ {
+ "type": "bridge",
+ "name": "do-not-use-google-subnets",
+ "bridge": "do-not-use-google-subnets",
+ "ipam": {
+ "type": "host-local",
+ "ranges": [
+ [
+ {
+ "subnet": "10.128.0.0/9"
+ }
+ ]
+ ]
+ }
+ }
+ ]
+}
diff --git a/contrib/cirrus/build_release.sh b/contrib/cirrus/build_release.sh
new file mode 100755
index 000000000..287643f47
--- /dev/null
+++ b/contrib/cirrus/build_release.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+source $(dirname $0)/lib.sh
+
+req_env_var TEST_REMOTE_CLIENT OS_RELEASE_ID GOSRC
+
+cd $GOSRC
+
+if [[ "$TEST_REMOTE_CLIENT" == "true" ]] && [[ -z "$CROSS_PLATFORM" ]]
+then
+ CROSS_PLATFORM=linux
+fi
+
+if [[ -n "$CROSS_PLATFORM" ]]
+then
+ echo "Compiling podman-remote release archive for ${CROSS_PLATFORM}"
+ case "$CROSS_PLATFORM" in
+ linux) ;&
+ windows) ;&
+ darwin)
+ make podman-remote-${CROSS_PLATFORM}-release
+ ;;
+ *)
+ die 1 "Unknown/unsupported cross-compile platform '$CROSS_PLATFORM'"
+ ;;
+ esac
+else
+ echo "Compiling release archive for $OS_RELEASE_ID"
+ make podman-release
+fi
diff --git a/contrib/cirrus/cache_release_archive.sh b/contrib/cirrus/cache_release_archive.sh
deleted file mode 100755
index 2365f7593..000000000
--- a/contrib/cirrus/cache_release_archive.sh
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/bin/bash
-
-set -eo pipefail
-
-source $(dirname $0)/lib.sh
-
-req_env_var GOSRC
-
-RELEASE_ARCHIVE_NAMES=""
-
-handle_archive() { # Assumed to be called with set +e
- TASK_NUMBER=$1
- PR_OR_BRANCH=$2
- CACHE_URL=$3
- ARCHIVE_NAME="$(basename $CACHE_URL)"
- req_env_var TASK_NUMBER PR_OR_BRANCH CACHE_URL ARCHIVE_NAME
-
- cd /tmp
- curl -sO "$CACHE_URL" || return $(warn 0 "Couldn't download file, skipping.")
- [[ -r "/tmp/$ARCHIVE_NAME" ]] || return $(warn 0 "Unreadable archive '/tmp/$ARCHIVE_NAME', skipping.")
-
- ZIPCOMMENT=$(unzip -qqz "$ARCHIVE_NAME" 2>/dev/null) # noisy bugger
- if [[ "$?" -ne "0" ]] || [[ -z "$ZIPCOMMENT" ]]
- then
- return $(warn 0 "Could not unzip metadata from downloaded '/tmp/$ARCHIVE_NAME', skipping.")
- fi
-
- RELEASE_INFO=$(echo "$ZIPCOMMENT" | grep -m 1 'X-RELEASE-INFO:' | sed -r -e 's/X-RELEASE-INFO:\s*(.+)/\1/')
- if [[ "$?" -ne "0" ]] || [[ -z "$RELEASE_INFO" ]]
- then
- return $(warn 0 "Metadata empty or invalid: '$ZIPCOMMENT', skipping.")
- fi
-
- # e.g. libpod v1.3.1-166-g60df124e fedora 29 amd64
- # or libpod v1.3.1-166-g60df124e amd64
- FIELDS="RELEASE_BASENAME RELEASE_VERSION RELEASE_DIST RELEASE_DIST_VER RELEASE_ARCH"
- read $FIELDS <<< $RELEASE_INFO
- for f in $FIELDS
- do
- [[ -n "${!f}" ]] || return $(warn 0 "Expecting $f to be non-empty in metadata: '$RELEASE_INFO', skipping.")
- done
-
- echo -n "Preparing $RELEASE_BASENAME archive: "
- # Drop version number to enable "latest" representation
- # (version available w/in zip-file comment)
- RELEASE_ARCHIVE_NAME="${RELEASE_BASENAME}-${PR_OR_BRANCH}-${RELEASE_DIST}-${RELEASE_DIST_VER}-${RELEASE_ARCH}.zip"
- # Allow uploading all gathered files in parallel, later with gsutil.
- mv -v "$ARCHIVE_NAME" "/$RELEASE_ARCHIVE_NAME"
- RELEASE_ARCHIVE_NAMES="$RELEASE_ARCHIVE_NAMES $RELEASE_ARCHIVE_NAME"
-}
-
-make_release() {
- ARCHIVE_NAME="$1"
- req_env_var ARCHIVE_NAME
-
- # There's no actual testing of windows/darwin targets yet
- # but we still want to cross-compile and publish binaries
- if [[ "$SPECIALMODE" == "windows" ]] || [[ "$SPECIALMODE" == "darwin" ]]
- then
- RELFILE="podman-remote-${SPECIALMODE}.zip"
- elif [[ "$SPECIALMODE" == "none" ]]
- then
- RELFILE="podman.zip"
- else
- die 55 "$(basename $0) unable to handle \$SPECIALMODE=$SPECIALMODE for $ARCHIVE_NAME"
- fi
- echo "Calling make $RELFILE"
- cd $GOSRC
- make "$RELFILE"
- echo "Renaming archive so it can be identified/downloaded for publishing"
- mv -v "$RELFILE" "$ARCHIVE_NAME"
- echo "Success!"
-}
-
-[[ "$CI" == "true" ]] || \
- die 56 "$0 requires a Cirrus-CI cross-task cache to function"
-
-cd $GOSRC
-# Same script re-used for both uploading and downloading to avoid duplication
-if [[ "$(basename $0)" == "cache_release_archive.sh" ]]
-then
- # ref: https://cirrus-ci.org/guide/writing-tasks/#environment-variables
- req_env_var CI_NODE_INDEX CIRRUS_BUILD_ID
- # Use unique names for uncache_release_archives.sh to find/download them all
- ARCHIVE_NAME="build-${CIRRUS_BUILD_ID}-task-${CI_NODE_INDEX}.zip"
- make_release "$ARCHIVE_NAME"
-
- # ref: https://cirrus-ci.org/guide/writing-tasks/#http-cache
- URL="http://$CIRRUS_HTTP_CACHE_HOST/${ARCHIVE_NAME}"
- echo "Uploading $ARCHIVE_NAME to Cirrus-CI cache at $URL"
- curl -s -X POST --data-binary "@$ARCHIVE_NAME" "$URL"
-elif [[ "$(basename $0)" == "uncache_release_archives.sh" ]]
-then
- req_env_var CIRRUS_BUILD_ID CI_NODE_TOTAL GCPJSON GCPNAME GCPROJECT
- [[ "${CI_NODE_INDEX}" -eq "$[CI_NODE_TOTAL-1]" ]] || \
- die 0 "WARNING: This task depends on cache data from other tasks, otherwise it is a no-op."
-
- if [[ -n "$CIRRUS_PR" ]]
- then
- PR_OR_BRANCH="pr$CIRRUS_PR"
- BUCKET="libpod-pr-releases"
- elif [[ -n "$CIRRUS_BRANCH" ]]
- then
- PR_OR_BRANCH="$CIRRUS_BRANCH"
- BUCKET="libpod-$CIRRUS_BRANCH-releases"
- else
- die 10 "Expecting either \$CIRRUS_PR or \$CIRRUS_BRANCH to be non-empty."
- fi
-
- echo "Blindly downloading Cirrus-CI cache files for task (some will fail)."
- set +e # Don't stop looping until all task's cache is attempted
- for (( task_number = 0 ; task_number < $CI_NODE_TOTAL ; task_number++ ))
- do
- ARCHIVE_NAME="build-${CIRRUS_BUILD_ID}-task-${task_number}.zip"
- URL="http://$CIRRUS_HTTP_CACHE_HOST/${ARCHIVE_NAME}"
- echo "Attempting to download cached archive from $URL"
- handle_archive "$task_number" "$PR_OR_BRANCH" "$URL"
- echo "----------------------------------------"
- done
- set -e
-
- [[ -n "$RELEASE_ARCHIVE_NAMES" ]] || \
- die 67 "Error: No release archives found in CI cache, expecting at least one."
-
- echo "Preparing to upload release archives."
- gcloud config set project "$GCPROJECT"
- echo "$GCPJSON" > /tmp/gcp.json
- gcloud auth activate-service-account --key-file=/tmp/gcp.json
- rm /tmp/gcp.json
- # handle_archive() placed all uploadable files under /
- gsutil -m cp /*.zip "gs://$BUCKET" # Upload in parallel
- echo "Successfully uploaded archives:"
- for ARCHIVE_NAME in $RELEASE_ARCHIVE_NAMES
- do
- echo " https://storage.cloud.google.com/$BUCKET/$ARCHIVE_NAME"
- done
- echo "These will remain available until automatic pruning by bucket policy."
-else
- die 9 "I don't know what to do when called $0"
-fi
diff --git a/contrib/cirrus/cirrus_yaml_test.py b/contrib/cirrus/cirrus_yaml_test.py
index c8faee65f..c2ff8e69e 100755
--- a/contrib/cirrus/cirrus_yaml_test.py
+++ b/contrib/cirrus/cirrus_yaml_test.py
@@ -26,7 +26,6 @@ class TestCaseBase(unittest.TestCase):
class TestDependsOn(TestCaseBase):
ALL_TASK_NAMES = None
- SUCCESS_RELEASE = set(['success', 'release'])
def setUp(self):
super().setUp()
@@ -34,34 +33,22 @@ class TestDependsOn(TestCaseBase):
for key, _ in self.CIRRUS_YAML.items()
if key.endswith('_task')])
- def test_dicts(self):
+ def test_00_dicts(self):
"""Expected dictionaries are present and non-empty"""
- for name in ('success_task', 'release_task'):
- # tests all names then show specific failures
- with self.subTest(name=name):
- self.assertIn(name, self.CIRRUS_YAML)
- self.assertIn(name.replace('_task', ''), self.ALL_TASK_NAMES)
- self.assertIn('depends_on', self.CIRRUS_YAML[name])
- self.assertGreater(len(self.CIRRUS_YAML[name]['depends_on']), 0)
-
- def _check_dep(self, name, task_name, deps):
- # name includes '_task' suffix, task_name does not
- msg=('Please add "{0}" to the "depends_on" list in "{1}"'
- "".format(task_name, name))
- self.assertIn(task_name, deps, msg=msg)
-
- def test_depends(self):
- """Success and Release tasks depend on all other tasks"""
- for name in ('success_task', 'release_task'):
- deps = set(self.CIRRUS_YAML[name]['depends_on'])
- for task_name in self.ALL_TASK_NAMES - self.SUCCESS_RELEASE:
- with self.subTest(name=name, task_name=task_name):
- self._check_dep(name, task_name, deps)
-
- def test_release(self):
- """Release task must always execute last"""
- deps = set(self.CIRRUS_YAML['release_task']['depends_on'])
- self._check_dep('release_task', 'success', deps)
+ self.assertIn('success_task', self.CIRRUS_YAML)
+ self.assertIn('success_task'.replace('_task', ''), self.ALL_TASK_NAMES)
+ self.assertIn('depends_on', self.CIRRUS_YAML['success_task'])
+ self.assertGreater(len(self.CIRRUS_YAML['success_task']['depends_on']), 0)
+
+ def test_01_depends(self):
+ """Success task depends on all other tasks"""
+ success_deps = set(self.CIRRUS_YAML['success_task']['depends_on'])
+ for task_name in self.ALL_TASK_NAMES - set(['success']):
+ with self.subTest(task_name=task_name):
+ msg=('Please add "{0}" to the "depends_on" list in "success_task"'
+ "".format(task_name))
+ self.assertIn(task_name, success_deps, msg=msg)
+
if __name__ == "__main__":
diff --git a/contrib/cirrus/git_authors_to_irc_nicks.csv b/contrib/cirrus/git_authors_to_irc_nicks.csv
new file mode 100644
index 000000000..4334b5cd2
--- /dev/null
+++ b/contrib/cirrus/git_authors_to_irc_nicks.csv
@@ -0,0 +1,8 @@
+# Comma separated mapping of author e-mail, to Freenode IRC nick.
+# When no match is found here, the username portion of the e-mail is used.
+# Sorting is done at runtime - first-found e-mail match wins.
+# Comments (like this) and blank lines are ignored.
+
+rothberg@redhat.com,vrothberg
+santiago@redhat.com,edsantiago
+gscrivan@redhat.com,giuseppe
diff --git a/contrib/cirrus/integration_test.sh b/contrib/cirrus/integration_test.sh
index e5de518fa..552f2ba73 100755
--- a/contrib/cirrus/integration_test.sh
+++ b/contrib/cirrus/integration_test.sh
@@ -48,6 +48,12 @@ case "$SPECIALMODE" in
make test-binaries
make local${TESTSUITE}
;;
+ endpoint)
+ make
+ make install PREFIX=/usr ETCDIR=/etc
+ make test-binaries
+ make endpoint
+ ;;
none)
make
make install PREFIX=/usr ETCDIR=/etc
@@ -59,10 +65,6 @@ case "$SPECIALMODE" in
make local${TESTSUITE}
fi
;;
- windows) ;& # for podman-remote building only
- darwin)
- warn '' "No $SPECIALMODE remote client integration tests configured"
- ;;
*)
die 110 "Unsupported \$SPECIALMODE: $SPECIALMODE"
esac
diff --git a/contrib/cirrus/lib.sh b/contrib/cirrus/lib.sh
index a20ee5a62..cd8b2ef61 100644
--- a/contrib/cirrus/lib.sh
+++ b/contrib/cirrus/lib.sh
@@ -28,11 +28,12 @@ CIRRUS_WORKING_DIR="${CIRRUS_WORKING_DIR:-$GOPATH/src/github.com/containers/libp
export GOSRC="${GOSRC:-$CIRRUS_WORKING_DIR}"
export PATH="$HOME/bin:$GOPATH/bin:/usr/local/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
-TIMESTAMPS_FILEPATH="${TIMESTAMPS_FILEPATH:-/var/tmp/timestamps}"
-SETUP_MARKER_FILEPATH="${SETUP_MARKER_FILEPATH:-/var/tmp/.setup_environment_sh_complete}"
# Saves typing / in case location ever moves
SCRIPT_BASE=${SCRIPT_BASE:-./contrib/cirrus}
PACKER_BASE=${PACKER_BASE:-./contrib/cirrus/packer}
+# Important filepaths
+SETUP_MARKER_FILEPATH="${SETUP_MARKER_FILEPATH:-/var/tmp/.setup_environment_sh_complete}"
+AUTHOR_NICKS_FILEPATH="${CIRRUS_WORKING_DIR}/${SCRIPT_BASE}/git_authors_to_irc_nicks.csv"
cd $GOSRC
if type -P git &> /dev/null
@@ -64,6 +65,8 @@ export PRIOR_FEDORA_BASE_IMAGE="fedora-cloud-base-29-1-2-1559164849"
export BUILT_IMAGE_SUFFIX="${BUILT_IMAGE_SUFFIX:--$CIRRUS_REPO_NAME-${CIRRUS_BUILD_ID}}"
# IN_PODMAN container image
IN_PODMAN_IMAGE="quay.io/libpod/in_podman:latest"
+# Image for uploading releases
+UPLDREL_IMAGE="quay.io/libpod/upldrel:latest"
# Avoid getting stuck waiting for user input
export DEBIAN_FRONTEND="noninteractive"
@@ -76,7 +79,7 @@ BIGTO="timeout_attempt_delay_command 300s 5 30s"
# Safe env. vars. to transfer from root -> $ROOTLESS_USER (go env handled separetly)
ROOTLESS_ENV_RE='(CIRRUS_.+)|(ROOTLESS_.+)|(.+_IMAGE.*)|(.+_BASE)|(.*DIRPATH)|(.*FILEPATH)|(SOURCE.*)|(DEPEND.*)|(.+_DEPS_.+)|(OS_REL.*)|(.+_ENV_RE)|(TRAVIS)|(CI.+)|(TEST_REMOTE.*)'
# Unsafe env. vars for display
-SECRET_ENV_RE='(IRCID)|(ACCOUNT)|(^GC[EP]..+)|(SSH)'
+SECRET_ENV_RE='(IRCID)|(ACCOUNT)|(GC[EP]..+)|(SSH)'
# Names of systemd units which should never be running
EVIL_UNITS="cron crond atd apt-daily-upgrade apt-daily fstrim motd-news systemd-tmpfiles-clean"
@@ -321,13 +324,15 @@ EOF
install_test_configs(){
echo "Installing cni config, policy and registry config"
- req_env_var GOSRC
- sudo install -D -m 755 $GOSRC/cni/87-podman-bridge.conflist \
- /etc/cni/net.d/87-podman-bridge.conflist
- sudo install -D -m 755 $GOSRC/test/policy.json \
- /etc/containers/policy.json
- sudo install -D -m 755 $GOSRC/test/registries.conf \
- /etc/containers/registries.conf
+ req_env_var GOSRC SCRIPT_BASE
+ cd $GOSRC
+ install -v -D -m 644 ./cni/87-podman-bridge.conflist /etc/cni/net.d/
+ # This config must always sort last in the list of networks (podman picks first one
+ # as the default). This config prevents allocation of network address space used
+ # by default in google cloud. https://cloud.google.com/vpc/docs/vpc#ip-ranges
+ install -v -D -m 644 $SCRIPT_BASE/99-do-not-use-google-subnets.conflist /etc/cni/net.d/
+ install -v -D -m 644 ./test/policy.json /etc/containers/
+ install -v -D -m 644 ./test/registries.conf /etc/containers/
}
# Remove all files (except conmon, for now) provided by the distro version of podman.
diff --git a/contrib/cirrus/setup_environment.sh b/contrib/cirrus/setup_environment.sh
index 7b6765f8a..7c7659169 100755
--- a/contrib/cirrus/setup_environment.sh
+++ b/contrib/cirrus/setup_environment.sh
@@ -44,11 +44,15 @@ case "${OS_REL_VER}" in
;;
fedora-30) ;& # continue to next item
fedora-29)
+ # All SELinux distros need this for systemd-in-a-container
+ setsebool container_manage_cgroup true
if [[ "$ADD_SECOND_PARTITION" == "true" ]]; then
bash "$SCRIPT_BASE/add_second_partition.sh"; fi
;;
centos-7) # Current VM is an image-builder-image no local podman/testing
- echo "No further setup required for VM image building"
+ echo "No further setup required for VM image building"
+ # All SELinux distros need this for systemd-in-a-container
+ setsebool container_manage_cgroup true
exit 0
;;
*) bad_os_id_ver ;;
@@ -57,8 +61,7 @@ esac
# Reload to incorporate any changes from above
source "$SCRIPT_BASE/lib.sh"
-install_test_configs
-
+# Must execute before possible setup_rootless()
make install.tools
case "$SPECIALMODE" in
@@ -66,6 +69,10 @@ case "$SPECIALMODE" in
remove_packaged_podman_files # we're building from source
;;
none)
+ [[ -n "$CROSS_PLATFORM" ]] || \
+ remove_packaged_podman_files
+ ;;
+ endpoint)
remove_packaged_podman_files
;;
rootless)
@@ -85,8 +92,8 @@ case "$SPECIALMODE" in
in_podman) # Assumed to be Fedora
$SCRIPT_BASE/setup_container_environment.sh
;;
- windows) ;& # for podman-remote building only
- darwin) ;;
*)
die 111 "Unsupported \$SPECIALMODE: $SPECIALMODE"
esac
+
+install_test_configs
diff --git a/contrib/cirrus/success.sh b/contrib/cirrus/success.sh
index c4e150514..f2c9fbc7f 100755
--- a/contrib/cirrus/success.sh
+++ b/contrib/cirrus/success.sh
@@ -4,14 +4,52 @@ set -e
source $(dirname $0)/lib.sh
-req_env_var CIRRUS_BRANCH CIRRUS_BUILD_ID
+req_env_var CIRRUS_BRANCH CIRRUS_BUILD_ID CIRRUS_REPO_FULL_NAME
-REF=$(basename $CIRRUS_BRANCH) # PR number or branch named
-URL="https://cirrus-ci.com/build/$CIRRUS_BUILD_ID"
+cd $CIRRUS_WORKING_DIR
if [[ "$CIRRUS_BRANCH" =~ "pull" ]]
then
- ircmsg "Cirrus-CI testing successful for PR #$REF: $URL"
+ echo "Finding commit authors for PR $CIRRUS_PR"
+ unset NICKS
+ if [[ -r "$AUTHOR_NICKS_FILEPATH" ]]
+ then
+ SHARANGE="${CIRRUS_BASE_SHA}..${CIRRUS_CHANGE_IN_REPO}"
+ EXCLUDE_RE='merge-robot'
+ AUTHOR_NICKS=$(egrep -v '(^[[:space:]]*$)|(^[[:space:]]*#)' "$AUTHOR_NICKS_FILEPATH" | sort -u)
+ # Depending on branch-state, it's possible SHARANGE could be _WAY_ too big
+ MAX_NICKS=10
+ # newline separated
+ COMMIT_AUTHORS=$(git log --format='%ae' $SHARANGE | \
+ sort -u | \
+ egrep -v "$EXCLUDE_RE" | \
+ tail -$MAX_NICKS)
+
+ for c_email in $COMMIT_AUTHORS
+ do
+ echo -e "\tExamining $c_email"
+ NICK=$(echo "$AUTHOR_NICKS" | grep -m 1 "$c_email" | \
+ awk --field-separator ',' '{print $2}' | tr -d '[[:blank:]]')
+ if [[ -n "$NICK" ]]
+ then
+ echo -e "\t\tFound $c_email -> $NICK in $(basename $AUTHOR_NICKS_FILEPATH)"
+ else
+ echo -e "\t\tNot found in $(basename $AUTHOR_NICKS_FILEPATH), using e-mail username."
+ NICK=$(echo "$c_email" | cut -d '@' -f 1)
+ fi
+ echo -e "\tUsing nick $NICK"
+ NICKS="${NICKS:+$NICKS, }$NICK"
+ done
+ fi
+
+ unset MENTION_PREFIX
+ [[ -z "$NICKS" ]] || \
+ MENTION_PREFIX="$NICKS: "
+
+ URL="https://github.com/$CIRRUS_REPO_FULL_NAME/pull/$CIRRUS_PR"
+ PR_SUBJECT=$(echo "$CIRRUS_CHANGE_MESSAGE" | head -1)
+ ircmsg "${MENTION_PREFIX}Cirrus-CI testing successful for PR '$PR_SUBJECT': $URL"
else
- ircmsg "Cirrus-CI testing branch $REF successful: $URL"
+ URL="https://cirrus-ci.com/github/containers/libpod/$CIRRUS_BRANCH"
+ ircmsg "Cirrus-CI testing branch $(basename $CIRRUS_BRANCH) successful: $URL"
fi
diff --git a/contrib/cirrus/uncache_release_archives.sh b/contrib/cirrus/uncache_release_archives.sh
deleted file mode 120000
index e9fc6edff..000000000
--- a/contrib/cirrus/uncache_release_archives.sh
+++ /dev/null
@@ -1 +0,0 @@
-cache_release_archive.sh \ No newline at end of file
diff --git a/contrib/cirrus/unit_test.sh b/contrib/cirrus/unit_test.sh
index 004839f17..c6c77d17e 100755
--- a/contrib/cirrus/unit_test.sh
+++ b/contrib/cirrus/unit_test.sh
@@ -16,10 +16,6 @@ case "$SPECIALMODE" in
none)
make
;;
- windows) ;&
- darwin)
- make podman-remote-$SPECIALMODE
- ;;
*)
die 109 "Unsupported \$SPECIAL_MODE: $SPECIALMODE"
esac
diff --git a/contrib/cirrus/upload_release_archive.sh b/contrib/cirrus/upload_release_archive.sh
new file mode 100755
index 000000000..942255821
--- /dev/null
+++ b/contrib/cirrus/upload_release_archive.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+set -eo pipefail
+
+source $(dirname $0)/lib.sh
+
+req_env_var CI UPLDREL_IMAGE CIRRUS_BUILD_ID GOSRC RELEASE_GCPJSON RELEASE_GCPNAME RELEASE_GCPROJECT
+
+[[ "$CI" == "true" ]] || \
+ die 56 "$0 must be run under Cirrus-CI to function"
+
+unset PR_OR_BRANCH BUCKET
+if [[ -n "$CIRRUS_PR" ]]
+then
+ PR_OR_BRANCH="pr$CIRRUS_PR"
+ BUCKET="libpod-pr-releases"
+elif [[ -n "$CIRRUS_BRANCH" ]]
+then
+ PR_OR_BRANCH="$CIRRUS_BRANCH"
+ BUCKET="libpod-$CIRRUS_BRANCH-releases"
+else
+ die 1 "Expecting either \$CIRRUS_PR or \$CIRRUS_BRANCH to be non-empty."
+fi
+
+# Functional local podman required for uploading a release
+cd $GOSRC
+[[ -n "$(type -P podman)" ]] || \
+ make install || \
+ die 57 "$0 requires working podman binary on path to function"
+
+TMPF=$(mktemp -p '' $(basename $0)_XXXX.json)
+trap "rm -f $TMPF" EXIT
+set +x
+echo "$RELEASE_GCPJSON" > "$TMPF"
+unset RELEASE_GCPJSON
+
+cd $GOSRC
+for filename in $(ls -1 *.tar.gz *.zip)
+do
+ echo "Running podman ... $UPLDREL_IMAGE $filename"
+ podman run -i --rm \
+ -e "GCPNAME=$RELEASE_GCPNAME" \
+ -e "GCPPROJECT=$RELEASE_GCPROJECT" \
+ -e "GCPJSON_FILEPATH=$TMPF" \
+ -e "REL_ARC_FILEPATH=/tmp/$filename" \
+ -e "PR_OR_BRANCH=$PR_OR_BRANCH" \
+ -e "BUCKET=$BUCKET" \
+ --security-opt label=disable \
+ -v "$TMPF:$TMPF:ro" \
+ -v "$GOSRC/$filename:/tmp/$filename:ro" \
+ $UPLDREL_IMAGE
+done