summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2019-07-31 20:10:03 +0200
committerGitHub <noreply@github.com>2019-07-31 20:10:03 +0200
commita622f8d345b1853401de2e533e9fbf14ef169fa2 (patch)
treea52e1ba733be904a6fb90633f4f50f9c225058e2
parent680a3838748b297b7c3c462f98b58f82e39218e8 (diff)
parent3e3afb942afc7f082d5e1e68f6c50dc677d19e3c (diff)
downloadpodman-a622f8d345b1853401de2e533e9fbf14ef169fa2.tar.gz
podman-a622f8d345b1853401de2e533e9fbf14ef169fa2.tar.bz2
podman-a622f8d345b1853401de2e533e9fbf14ef169fa2.zip
Merge pull request #3682 from cevich/fix_release_rerun
Cirrus: Fix re-run of release task into no-op.
-rw-r--r--.cirrus.yml20
-rw-r--r--Makefile1
-rwxr-xr-xcontrib/cirrus/cache_release_archive.sh2
-rwxr-xr-xcontrib/cirrus/cirrus_yaml_test.py68
4 files changed, 88 insertions, 3 deletions
diff --git a/.cirrus.yml b/.cirrus.yml
index faa0a531c..8389c638d 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -504,13 +504,14 @@ success_task:
only_if: $CIRRUS_BRANCH != $DEST_BRANCH
# ignores any dependent task conditions, include everything except 'release'
- depends_on: &alltasks
+ depends_on:
- "gating"
- "vendor"
- "varlink_api"
- "build_each_commit"
- "build_without_cgo"
- "meta"
+ - "image_prune"
- "testing"
- "special_testing_rootless"
- "special_testing_in_podman"
@@ -540,7 +541,22 @@ release_task:
# allow_failures: $CI == "true"
# skip_notifications: $CI == "true"
- depends_on: *alltasks
+ # Must include everything (YAML anchor/alias cannot be used here)
+ depends_on:
+ - "gating"
+ - "vendor"
+ - "varlink_api"
+ - "build_each_commit"
+ - "build_without_cgo"
+ - "meta"
+ - "image_prune"
+ - "testing"
+ - "special_testing_rootless"
+ - "special_testing_in_podman"
+ - "special_testing_cross"
+ - "test_build_cache_images"
+ - "verify_test_built_images"
+ - "success"
gce_instance:
image_name: "${IMAGE_BUILDER_CACHE_IMAGE_NAME}"
diff --git a/Makefile b/Makefile
index 476e4f054..f8eff61ba 100644
--- a/Makefile
+++ b/Makefile
@@ -232,6 +232,7 @@ localunit: test/goecho/goecho varlink_generate
--succinct
$(MAKE) -C contrib/cirrus/packer test
./contrib/cirrus/lib.sh.t
+ ./contrib/cirrus/cirrus_yaml_test.py
ginkgo:
ginkgo -v -tags "$(BUILDTAGS)" $(GINKGOTIMEOUT) -cover -flakeAttempts 3 -progress -trace -noColor -nodes 3 -debug test/e2e/.
diff --git a/contrib/cirrus/cache_release_archive.sh b/contrib/cirrus/cache_release_archive.sh
index 639bc9801..2365f7593 100755
--- a/contrib/cirrus/cache_release_archive.sh
+++ b/contrib/cirrus/cache_release_archive.sh
@@ -93,7 +93,7 @@ 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 8 "The release task must be executed last to guarantee archive cache is complete"
+ die 0 "WARNING: This task depends on cache data from other tasks, otherwise it is a no-op."
if [[ -n "$CIRRUS_PR" ]]
then
diff --git a/contrib/cirrus/cirrus_yaml_test.py b/contrib/cirrus/cirrus_yaml_test.py
new file mode 100755
index 000000000..c8faee65f
--- /dev/null
+++ b/contrib/cirrus/cirrus_yaml_test.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+
+"""
+Verify contents of .cirrus.yml meet specific expectations
+"""
+
+import sys
+import os
+import unittest
+import yaml
+
+# Assumes directory structure of this file relative to repo.
+SCRIPT_DIRPATH = os.path.dirname(os.path.realpath(__file__))
+REPO_ROOT = os.path.realpath(os.path.join(SCRIPT_DIRPATH, '../', '../'))
+
+
+class TestCaseBase(unittest.TestCase):
+
+ CIRRUS_YAML = None
+
+ def setUp(self):
+ with open(os.path.join(REPO_ROOT, '.cirrus.yml')) as cirrus_yaml:
+ self.CIRRUS_YAML = yaml.safe_load(cirrus_yaml.read())
+
+
+class TestDependsOn(TestCaseBase):
+
+ ALL_TASK_NAMES = None
+ SUCCESS_RELEASE = set(['success', 'release'])
+
+ def setUp(self):
+ super().setUp()
+ self.ALL_TASK_NAMES = set([key.replace('_task', '')
+ for key, _ in self.CIRRUS_YAML.items()
+ if key.endswith('_task')])
+
+ def test_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)
+
+
+if __name__ == "__main__":
+ unittest.main()