Cirrus: Reveal magic, parallel system-testing

Previously, several magic strings were in place to affect cirrus-ci
operations.  Two were buried within scripts.  One to optionally
execute system-tests within a PR. Another to avoid re-building
cache-images upon every merge.

Move these magic strings out into the open, buy locating their
logic up-front in the ``.cirrus.yml`` file.  This improves
readability and reduces surprise/astonishment at runtime.

Signed-off-by: Chris Evich <cevich@redhat.com>
This commit is contained in:
Chris Evich
2018-11-08 09:28:48 -05:00
parent dd42c1dcff
commit aa742e9e68
4 changed files with 41 additions and 37 deletions

View File

@ -63,24 +63,55 @@ full_vm_testing_task:
integration_test_script: $SCRIPT_BASE/integration_test.sh
optional_system_test_script: $SCRIPT_BASE/optional_system_test.sh
success_script: $SCRIPT_BASE/success.sh
# This task build new images for future PR testing, but only after a PR merge.
# These images save needing to install/setup the same environment to test every
# PR. The 'active' image for testing is selected by the 'image_name' items in
# task above. Currently this requires manually updating them, but this could
# be automated (see comment at end).
# Because system tests are stored within the repository, it is sometimes
# necessary to execute them within a PR to validate changes.
optional_system_testing_task:
# Only run system tests in PRs (not on merge) if magic string is present
# in the PR description. Post-merge system testing is assumed to happen
# later from OS distribution's build systems.
only_if: >-
$CIRRUS_BRANCH != 'master' &&
$CIRRUS_CHANGE_MESSAGE =~ '\*\*\*\s*CIRRUS:\s*SYSTEM\s*TEST\s*\*\*\*'
gce_instance:
matrix:
image_name: "ubuntu-1804-bionic-v20180911-libpod-63a86a18"
# TODO: Make these work (also build_images_task below)
#image_name: "rhel-server-ec2-7-5-165-1-libpod-fce09afe"
#image_name: "centos-7-v20180911-libpod-fce09afe"
#image_name: "fedora-cloud-base-28-1-1-7-libpod-fce09afe"
timeout_in: 60m
setup_environment_script: $SCRIPT_BASE/setup_environment.sh
verify_source_script: $SCRIPT_BASE/verify_source.sh
unit_test_script: $SCRIPT_BASE/unit_test.sh
integration_test_script: $SCRIPT_BASE/integration_test.sh
system_test_script: $SCRIPT_BASE/optional_system_test.sh
success_script: $SCRIPT_BASE/success.sh
# This task builds new cache-images for future PR testing. These images save
# time installing/setting up the environment while an engineer is waiting.
# The 'active' cache-images for full_vm_testing are selected by the
# 'image_name' keys. Updating those items requires manually modification,
# but this could be automated (see comment at end of build_vm_images_task).
build_vm_images_task:
# Only produce new images after a PR merge
only_if: $CIRRUS_BRANCH == 'master'
# Only produce new cache-images after a PR merge, and if a magic string
# is present in the most recent commit-message.
only_if: >-
$CIRRUS_BRANCH == 'master' &&
$CIRRUS_CHANGE_MESSAGE =~ '\*\*\*\s*CIRRUS:\s*REBUILD\s*IMAGES\s*\*\*\*'
# Require tests to pass first.
depends_on:
- test # i.e. 'test_task'
- full_vm_testing # i.e. 'full_vm_testing_task'
env:
# CSV of packer builder names to enable (see $PACKER_BASE/libpod_images.json)

View File

@ -22,8 +22,6 @@ SCRIPT_BASE $SCRIPT_BASE
PACKER_BASE $PACKER_BASE
"
require_regex '\*\*\*\s*CIRRUS:\s*REBUILD\s*IMAGES\s*\*\*\*' 'Not re-building VM images'
show_env_vars
# Everything here is running on the 'image-builder-image' GCE image

View File

@ -120,23 +120,6 @@ cdsudo() {
sudo --preserve-env=GOPATH --non-interactive bash -c "$CMD"
}
# Skip a build if $1 does not match in the PR Title/Description with message $2
require_regex() {
req_env_var "
CIRRUS_CHANGE_MESSAGE $CIRRUS_CHANGE_MESSAGE
1 $1
2 $2
"
regex="$1"
msg="$2"
if ! echo "$CIRRUS_CHANGE_MESSAGE" | egrep -q "$regex"
then
echo "***** The PR Title/Description did not match the regular expression: $MAGIC_RE"
echo "***** $msg"
exit 0
fi
}
# Helper/wrapper script to only show stderr/stdout on non-zero exit
install_ooe() {
req_env_var "SCRIPT_BASE $SCRIPT_BASE"

View File

@ -3,14 +3,6 @@
set -e
source $(dirname $0)/lib.sh
MAGIC_RE='\*\*\*\s*CIRRUS:\s*SYSTEM\s*TEST\s*\*\*\*'
if ! echo "$CIRRUS_CHANGE_MESSAGE" | egrep -q "$MAGIC_RE"
then
echo "Skipping system-testing because PR title or description"
echo "does not match regular expression: $MAGIC_RE"
exit 0
fi
req_env_var "
GOSRC $GOSRC
OS_RELEASE_ID $OS_RELEASE_ID