mirror of
https://github.com/containers/podman.git
synced 2025-06-20 00:51:16 +08:00
Add configuration for Cirrus-CI
Testing podman requires exercising on a full-blown VM. The current containerized-approach is complicated, and mostly a band-aid over shortcomings in the other CI systems. Namely, we want: * To pre-build environments with dependencies to reduce the setup time needed for testing. * The ability to verify the pre-built environments are working before utilizing them for further testing. * A simple, single set of flexible automation instructions to reduce maintenance burden. * Ease of environment reproduction across clouds or locally, for debugging failures. This change leverages Cirrus-CI + Packer + collection of shell scripts to realize all of the above. Signed-off-by: Chris Evich <cevich@redhat.com>
This commit is contained in:
117
.cirrus.yml
117
.cirrus.yml
@ -0,0 +1,117 @@
|
||||
---
|
||||
|
||||
# Only github users with write-access can define or use encrypted variables
|
||||
# This credential represents a service account with access to manage both VMs
|
||||
# and storage.
|
||||
gcp_credentials: ENCRYPTED[885c6e4297dd8d6f67593c42b810353af0c505a7a670e2c6fd830c56e86bbb2debcc3c18f942d0d46ab36b63521061d4]
|
||||
|
||||
# Default VM to use for testing, unless values overriden by specific tasks (below)
|
||||
gce_instance:
|
||||
image_project: "libpod-218412"
|
||||
zone: "us-central1-a" # Required by Cirrus for the time being
|
||||
cpu: 4
|
||||
memory: "8Gb"
|
||||
disk: 40
|
||||
|
||||
# Main collection of env. varss to set for all scripts. All others
|
||||
# are cooked in by $SCRIPT_BASE/setup_environment.sh
|
||||
env:
|
||||
CNI_COMMIT: "7480240de9749f9a0a5c8614b17f1f03e0c06ab9"
|
||||
CRIO_COMMIT: "662dbb31b5d4f5ed54511a47cde7190c61c28677"
|
||||
RUNC_COMMIT: "ad0f5255060d36872be04de22f8731f38ef2d7b1"
|
||||
# File to update in home-dir with task-specific env. var values
|
||||
ENVLIB: ".bash_profile"
|
||||
# Overrides default location (/tmp/cirrus) for repo clone
|
||||
CIRRUS_WORKING_DIR: "/go/src/github.com/containers/libpod"
|
||||
# Required so $ENVLIB gets loaded
|
||||
CIRRUS_SHELL: "/bin/bash"
|
||||
# Save a little typing (path relative to $CIRRUS_WORKING_DIR)
|
||||
SCRIPT_BASE: "./contrib/cirrus"
|
||||
PACKER_BASE: "./contrib/cirrus/packer"
|
||||
|
||||
# Every *_task runs in parallel in separate VMs. The name prefix only for reference
|
||||
# in WebUI, and will be followed by matrix details. This task does all the
|
||||
# per-pr unit/integration testing.
|
||||
full_vm_testing_task:
|
||||
|
||||
gce_instance:
|
||||
# Generate multiple 'test' tasks, covering all possible
|
||||
# 'matrix' combinations. All run in parallel.
|
||||
matrix:
|
||||
# Images are generated separetly, from build_images_task (below)
|
||||
image_name: "ubuntu-1804-bionic-v20180911-libpod-5763563410948096"
|
||||
# TODO: Make these work (also build_images_task below)
|
||||
#image_name: "rhel-server-ec2-7-5-165-1-libpod-5358668723781632"
|
||||
#image_name: "centos-7-v20180911-libpod-5358668723781632"
|
||||
#image_name: "fedora-cloud-base-28-1-1-7-libpod-5358668723781632"
|
||||
|
||||
timeout_in: 120m
|
||||
|
||||
# Every *_script runs in sequence, for each task. The name prefix is for
|
||||
# WebUI reference. The values may be strings...
|
||||
setup_environment_script: $SCRIPT_BASE/setup_environment.sh
|
||||
|
||||
# ...or lists of strings
|
||||
unit_test_script:
|
||||
- whoami # root!
|
||||
- $SCRIPT_BASE/unit_test.sh
|
||||
|
||||
integration_test_script: $SCRIPT_BASE/integration_test.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).
|
||||
|
||||
build_vm_images_task:
|
||||
# Only produce new images after a PR merge
|
||||
only_if: $CIRRUS_BRANCH == 'master'
|
||||
|
||||
# Require tests to pass first.
|
||||
depends_on:
|
||||
- test # i.e. 'test_task'
|
||||
|
||||
env:
|
||||
# CSV of packer builder names to enable (see $PACKER_BASE/libpod_images.json)
|
||||
PACKER_BUILDS: "ubuntu-18"
|
||||
# TODO: Make these work (also full_vm_testing_task above)
|
||||
# PACKER_BUILDS: "rhel-7,centos-7,fedora-28,ubuntu-18"
|
||||
# Command to register a RHEL VM
|
||||
RHSM_COMMAND: ENCRYPTED[fec01433222af1ed0b8e40e89e7d18f6ee2fa9f49a1e721dc72f7eed3c740661215d1bd05cb54ac66a1a62116b92bdce]
|
||||
# Additional environment variables needed to build GCE images, within a GCE VM
|
||||
SERVICE_ACCOUNT: ENCRYPTED[02e03838b1156eb9516c7cc1e888e287910759842275f3c7bc2b4d56075cc6740e29ffa0ab71ebdbbd079673361dd8c9]
|
||||
GCE_SSH_USERNAME: ENCRYPTED[a19a4ec62423e3e0fe4e7d1a5c9f11eda8fde321b9047ab5ed5590c2b1d7a2d12091c2be1531f949eae927059c2ae531]
|
||||
GCP_PROJECT_ID: ENCRYPTED[77cb2d392bbc8d17412547d7d91f8d190089bf6e6b96eab9927994bbff6ab2c691ba0329ac7a650ba6182fbbab9fb68d]
|
||||
# Existing base values to use, output images get epoc stamped names
|
||||
PACKER_VER: "1.3.1"
|
||||
# low-level base VM image name inputs to packer
|
||||
CENTOS_BASE_IMAGE: "centos-7-v20180911"
|
||||
RHEL_BASE_IMAGE: "rhel-server-ec2-7-5-165-1"
|
||||
FEDORA_BASE_IMAGE: "fedora-cloud-base-28-1-1-7"
|
||||
UBUNTU_BASE_IMAGE: "ubuntu-1804-bionic-v20180911"
|
||||
|
||||
gce_instance:
|
||||
image_name: "image-builder-image" # Simply CentOS 7 + packer dependencies
|
||||
# Additional permissions for building GCE images, within a GCE VM
|
||||
scopes:
|
||||
- compute
|
||||
- devstorage.full_control
|
||||
# Doesn't need many local resources to run
|
||||
cpu: 2
|
||||
memory: "2Gb"
|
||||
disk: 20
|
||||
environment_script: $SCRIPT_BASE/setup_environment.sh
|
||||
build_vm_images_script: $SCRIPT_BASE/build_vm_images.sh
|
||||
|
||||
# TODO,Continuous Delivery: Automaticly open a libpod PR after using 'sed' to replace
|
||||
# the image_names with the new (just build) images. That will
|
||||
# cause a new round of testing to happen (via the PR) using
|
||||
# the new images. When all is good, the PR may be manually
|
||||
# merged so all PR testing uses the new images. The script
|
||||
# names (below) describe their purpose in this workflow.
|
||||
# deploy_images_script:
|
||||
# - clone_podman_release_branch.sh
|
||||
# - modify_cirrus_yaml_image_names.sh
|
||||
# - commit_and_create_upstream_pr.sh
|
||||
|
59
contrib/cirrus/build_vm_images.sh
Executable file
59
contrib/cirrus/build_vm_images.sh
Executable file
@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
source $(dirname $0)/lib.sh
|
||||
|
||||
req_env_var "
|
||||
CNI_COMMIT $CNI_COMMIT
|
||||
CRIO_COMMIT $CRIO_COMMIT
|
||||
RUNC_COMMIT $RUNC_COMMIT
|
||||
PACKER_BUILDS $PACKER_BUILDS
|
||||
CENTOS_BASE_IMAGE $CENTOS_BASE_IMAGE
|
||||
UBUNTU_BASE_IMAGE $UBUNTU_BASE_IMAGE
|
||||
FEDORA_BASE_IMAGE $FEDORA_BASE_IMAGE
|
||||
RHEL_BASE_IMAGE $RHEL_BASE_IMAGE
|
||||
RHSM_COMMAND $RHSM_COMMAND
|
||||
CIRRUS_BUILD_ID $CIRRUS_BUILD_ID
|
||||
SERVICE_ACCOUNT $SERVICE_ACCOUNT
|
||||
GCE_SSH_USERNAME $GCE_SSH_USERNAME
|
||||
GCP_PROJECT_ID $GCP_PROJECT_ID
|
||||
PACKER_VER $PACKER_VER
|
||||
SCRIPT_BASE $SCRIPT_BASE
|
||||
PACKER_BASE $PACKER_BASE
|
||||
"
|
||||
|
||||
# TODO: Skip building images if $CIRRUS_BRANCH =~ "master" and
|
||||
# commit message of $CIRRUS_CHANGE_IN_REPO contains a magic word
|
||||
# produced by 'commit_and_create_upstream_pr.sh' script (see .cirrus.yml)
|
||||
|
||||
show_env_vars
|
||||
|
||||
# Everything here is running on the 'image-builder-image' GCE image
|
||||
# Assume basic dependencies are all met, but there could be a newer version
|
||||
# of the packer binary
|
||||
PACKER_FILENAME="packer_${PACKER_VER}_linux_amd64.zip"
|
||||
mkdir -p "$HOME/packer"
|
||||
cd "$HOME/packer"
|
||||
# image_builder_image has packer pre-installed, check if same version requested
|
||||
if ! [[ -r "$PACKER_FILENAME" ]]
|
||||
then
|
||||
curl -L -O https://releases.hashicorp.com/packer/$PACKER_VER/$PACKER_FILENAME
|
||||
curl -L https://releases.hashicorp.com/packer/${PACKER_VER}/packer_${PACKER_VER}_SHA256SUMS | \
|
||||
grep 'linux_amd64' > ./sha256sums
|
||||
sha256sum --check ./sha256sums
|
||||
unzip -o $PACKER_FILENAME
|
||||
./packer --help &> /dev/null # verify exit(0)
|
||||
fi
|
||||
|
||||
set -x
|
||||
|
||||
cd "$GOSRC"
|
||||
# N/B: /usr/sbin/packer is a DIFFERENT tool, and will exit 0 given the args below :(
|
||||
TEMPLATE="./$PACKER_BASE/libpod_images.json"
|
||||
|
||||
$HOME/packer/packer inspect "$TEMPLATE"
|
||||
|
||||
#$HOME/packer/packer build -machine-readable "-only=$PACKER_BUILDS" "$TEMPLATE" | tee /tmp/packer_log.csv
|
||||
$HOME/packer/packer build "-only=$PACKER_BUILDS" "$TEMPLATE"
|
||||
|
||||
# TODO: Report back to PR names of built images
|
28
contrib/cirrus/integration_test.sh
Executable file
28
contrib/cirrus/integration_test.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
source $(dirname $0)/lib.sh
|
||||
|
||||
req_env_var "
|
||||
GOSRC $GOSRC
|
||||
OS_RELEASE_ID $OS_RELEASE_ID
|
||||
OS_RELEASE_VER $OS_RELEASE_VER
|
||||
"
|
||||
|
||||
show_env_vars
|
||||
|
||||
set -x
|
||||
cd "$GOSRC"
|
||||
case "${OS_RELEASE_ID}-${OS_RELEASE_VER}" in
|
||||
ubuntu-18)
|
||||
make install PREFIX=/usr ETCDIR=/etc "BUILDTAGS=$BUILDTAGS"
|
||||
make test-binaries "BUILDTAGS=$BUILDTAGS"
|
||||
SKIP_USERNS=1 make localintegration "BUILDTAGS=$BUILDTAGS"
|
||||
;;
|
||||
fedora-28) ;& # Continue to the next item
|
||||
centos-7) ;&
|
||||
rhel-7)
|
||||
stub 'integration testing not working on $OS_RELEASE_ID'
|
||||
;;
|
||||
*) bad_os_id_ver ;;
|
||||
esac
|
258
contrib/cirrus/lib.sh
Normal file
258
contrib/cirrus/lib.sh
Normal file
@ -0,0 +1,258 @@
|
||||
|
||||
|
||||
# Library of common, shared utility functions. This file is intended
|
||||
# to be sourced by other scripts, not called directly.
|
||||
|
||||
# Under some contexts these values are not set, make sure they are.
|
||||
USER="$(whoami)"
|
||||
HOME="$(getent passwd $USER | cut -d : -f 6)"
|
||||
if ! [[ "$PATH" =~ "/usr/local/bin" ]]
|
||||
then
|
||||
export PATH="$PATH:/usr/local/bin"
|
||||
fi
|
||||
|
||||
# In ci/testing environment, ensure variables are always loaded
|
||||
if [[ -r "$HOME/$ENVLIB" ]] && [[ -n "$CI" ]]
|
||||
then
|
||||
# Make sure this is always loaded
|
||||
source "$HOME/$ENVLIB"
|
||||
fi
|
||||
|
||||
# Pass in a line delimited list of, space delimited name/value pairs
|
||||
# exit non-zero with helpful error message if any value is empty
|
||||
req_env_var() {
|
||||
echo "$1" | while read NAME VALUE
|
||||
do
|
||||
if [[ -n "$NAME" ]] && [[ -z "$VALUE" ]]
|
||||
then
|
||||
echo "Required env. var. \$$NAME is not set"
|
||||
exit 9
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Some env. vars may contain secrets. Display values for known "safe"
|
||||
# and useful variables.
|
||||
# ref: https://cirrus-ci.org/guide/writing-tasks/#environment-variables
|
||||
show_env_vars() {
|
||||
echo "
|
||||
BUILDTAGS $BUILDTAGS
|
||||
CI $CI
|
||||
CIRRUS_CI $CIRRUS_CI
|
||||
CI_NODE_INDEX $CI_NODE_INDEX
|
||||
CI_NODE_TOTAL $CI_NODE_TOTAL
|
||||
CONTINUOUS_INTEGRATION $CONTINUOUS_INTEGRATION
|
||||
CIRRUS_BASE_BRANCH $CIRRUS_BASE_BRANCH
|
||||
CIRRUS_BASE_SHA $CIRRUS_BASE_SHA
|
||||
CIRRUS_BRANCH $CIRRUS_BRANCH
|
||||
CIRRUS_BUILD_ID $CIRRUS_BUILD_ID
|
||||
CIRRUS_CHANGE_IN_REPO $CIRRUS_CHANGE_IN_REPO
|
||||
CIRRUS_CHANGE_MESSAGE $CIRRUS_CHANGE_MESSAGE
|
||||
CIRRUS_CLONE_DEPTH $CIRRUS_CLONE_DEPTH
|
||||
CIRRUS_DEFAULT_BRANCH $CIRRUS_DEFAULT_BRANCH
|
||||
CIRRUS_PR $CIRRUS_PR
|
||||
CIRRUS_TAG $CIRRUS_TAG
|
||||
CIRRUS_OS $CIRRUS_OS
|
||||
OS $OS
|
||||
CIRRUS_TASK_NAME $CIRRUS_TASK_NAME
|
||||
CIRRUS_TASK_ID $CIRRUS_TASK_ID
|
||||
CIRRUS_REPO_NAME $CIRRUS_REPO_NAME
|
||||
CIRRUS_REPO_OWNER $CIRRUS_REPO_OWNER
|
||||
CIRRUS_REPO_FULL_NAME $CIRRUS_REPO_FULL_NAME
|
||||
CIRRUS_REPO_CLONE_URL $CIRRUS_REPO_CLONE_URL
|
||||
CIRRUS_SHELL $CIRRUS_SHELL
|
||||
CIRRUS_USER_COLLABORATOR $CIRRUS_USER_COLLABORATOR
|
||||
CIRRUS_USER_PERMISSION $CIRRUS_USER_PERMISSION
|
||||
CIRRUS_WORKING_DIR $CIRRUS_WORKING_DIR
|
||||
CIRRUS_HTTP_CACHE_HOST $CIRRUS_HTTP_CACHE_HOST
|
||||
$(go env)
|
||||
" | while read NAME VALUE
|
||||
do
|
||||
[[ -z "$NAME" ]] || echo "export $NAME=\"$VALUE\""
|
||||
done
|
||||
}
|
||||
|
||||
# Return a GCE image-name compatible string representation of distribution name
|
||||
os_release_id() {
|
||||
eval "$(egrep -m 1 '^ID=' /etc/os-release | tr -d \' | tr -d \")"
|
||||
echo "$ID"
|
||||
}
|
||||
|
||||
# Return a GCE image-name compatible string representation of distribution major version
|
||||
os_release_ver() {
|
||||
eval "$(egrep -m 1 '^VERSION_ID=' /etc/os-release | tr -d \' | tr -d \")"
|
||||
echo "$VERSION_ID" | cut -d '.' -f 1
|
||||
}
|
||||
|
||||
bad_os_id_ver() {
|
||||
echo "Unknown/Unsupported distro. $OS_RELEASE_ID and/or version $OS_RELEASE_VER for $ARGS"
|
||||
exit 42
|
||||
}
|
||||
|
||||
stub() {
|
||||
echo "STUB: Pretending to do $1"
|
||||
}
|
||||
|
||||
# Run sudo in directory with GOPATH set
|
||||
cdsudo() {
|
||||
DIR="$1"
|
||||
shift
|
||||
CMD="cd $DIR && $@"
|
||||
sudo --preserve-env=GOPATH --non-interactive bash -c "$CMD"
|
||||
}
|
||||
|
||||
|
||||
# Helper/wrapper script to only show stderr/stdout on non-zero exit
|
||||
install_ooe() {
|
||||
req_env_var "SCRIPT_BASE $SCRIPT_BASE"
|
||||
echo "Installing script to mask stdout/stderr unless non-zero exit."
|
||||
sudo install -D -m 755 "/tmp/libpod/$SCRIPT_BASE/ooe.sh" /usr/local/bin/ooe.sh
|
||||
}
|
||||
|
||||
# Grab a newer version of git from software collections
|
||||
# https://www.softwarecollections.org/en/
|
||||
# and use it with a wrapper
|
||||
install_scl_git() {
|
||||
echo "Installing SoftwareCollections updated 'git' version."
|
||||
ooe.sh sudo yum -y install rh-git29
|
||||
cat << "EOF" | sudo tee /usr/bin/git
|
||||
#!/bin/bash
|
||||
|
||||
scl enable rh-git29 -- git $@
|
||||
EOF
|
||||
sudo chmod 755 /usr/bin/git
|
||||
}
|
||||
|
||||
install_cni_plugins() {
|
||||
echo "Installing CNI Plugins from commit $CNI_COMMIT"
|
||||
req_env_var "
|
||||
GOPATH $GOPATH
|
||||
CNI_COMMIT $CNI_COMMIT
|
||||
"
|
||||
DEST="$GOPATH/src/github.com/containernetworking/plugins"
|
||||
rm -rf "$DEST"
|
||||
ooe.sh git clone "https://github.com/containernetworking/plugins.git" "$DEST"
|
||||
cd "$DEST"
|
||||
ooe.sh git checkout -q "$CNI_COMMIT"
|
||||
ooe.sh ./build.sh
|
||||
sudo mkdir -p /usr/libexec/cni
|
||||
sudo cp bin/* /usr/libexec/cni
|
||||
}
|
||||
|
||||
install_runc(){
|
||||
OS_RELEASE_ID=$(os_release_id)
|
||||
echo "Installing RunC from commit $RUNC_COMMIT"
|
||||
echo "Platform is $OS_RELEASE_ID"
|
||||
req_env_var "
|
||||
GOPATH $GOPATH
|
||||
RUNC_COMMIT $RUNC_COMMIT
|
||||
OS_RELEASE_ID $OS_RELEASE_ID
|
||||
"
|
||||
if [[ "$OS_RELEASE_ID" =~ "ubuntu" ]]; then
|
||||
echo "Running make install.libseccomp.sudo for ubuntu"
|
||||
if ! [[ -d "/tmp/libpod" ]]
|
||||
then
|
||||
echo "Expecting a copy of libpod repository in /tmp/libpod"
|
||||
exit 5
|
||||
fi
|
||||
mkdir -p "$GOPATH/src/github.com/containers/"
|
||||
# Symlinks don't work with Go
|
||||
cp -a /tmp/libpod "$GOPATH/src/github.com/containers/"
|
||||
cd "$GOPATH/src/github.com/containers/libpod"
|
||||
ooe.sh sudo make install.libseccomp.sudo
|
||||
fi
|
||||
DEST="$GOPATH/src/github.com/opencontainers/runc"
|
||||
rm -rf "$DEST"
|
||||
ooe.sh git clone https://github.com/opencontainers/runc.git "$DEST"
|
||||
cd "$DEST"
|
||||
ooe.sh git fetch origin --tags
|
||||
ooe.sh git checkout -q "$RUNC_COMMIT"
|
||||
ooe.sh make static BUILDTAGS="seccomp selinux"
|
||||
sudo install -m 755 runc /usr/bin/runc
|
||||
}
|
||||
|
||||
install_buildah() {
|
||||
echo "Installing buildah from latest upstream master"
|
||||
req_env_var "GOPATH $GOPATH"
|
||||
DEST="$GOPATH/src/github.com/containers/buildah"
|
||||
rm -rf "$DEST"
|
||||
ooe.sh git clone https://github.com/containers/buildah "$DEST"
|
||||
cd "$DEST"
|
||||
ooe.sh make
|
||||
ooe.sh sudo make install
|
||||
}
|
||||
|
||||
# Requires $GOPATH and $CRIO_COMMIT to be set
|
||||
install_conmon(){
|
||||
echo "Installing conmon from commit $CRIO_COMMIT"
|
||||
req_env_var "
|
||||
GOPATH $GOPATH
|
||||
CRIO_COMMIT $CRIO_COMMIT
|
||||
"
|
||||
DEST="$GOPATH/src/github.com/kubernetes-sigs/cri-o.git"
|
||||
rm -rf "$DEST"
|
||||
ooe.sh git clone https://github.com/kubernetes-sigs/cri-o.git "$DEST"
|
||||
cd "$DEST"
|
||||
ooe.sh git fetch origin --tags
|
||||
ooe.sh git checkout -q "$CRIO_COMMIT"
|
||||
ooe.sh make
|
||||
sudo install -D -m 755 bin/conmon /usr/libexec/podman/conmon
|
||||
}
|
||||
|
||||
# Runs in testing VM, not image building
|
||||
install_testing_dependencies() {
|
||||
echo "Installing ginkgo, gomega, and easyjson into \$GOPATH=$GOPATH"
|
||||
req_env_var "
|
||||
GOPATH $GOPATH
|
||||
GOSRC $GOSRC
|
||||
"
|
||||
cd "$GOSRC"
|
||||
ooe.sh go get -u github.com/onsi/ginkgo/ginkgo
|
||||
ooe.sh install -D -m 755 "$GOPATH"/bin/ginkgo /usr/bin/
|
||||
ooe.sh go get github.com/onsi/gomega/...
|
||||
ooe.sh go get -u github.com/mailru/easyjson/...
|
||||
sudo install -D -m 755 "$GOPATH"/bin/easyjson /usr/bin/
|
||||
}
|
||||
|
||||
install_packer_copied_files(){
|
||||
# Install cni config, policy and registry config
|
||||
sudo install -D -m 755 /tmp/libpod/cni/87-podman-bridge.conflist \
|
||||
/etc/cni/net.d/87-podman-bridge.conflist
|
||||
sudo install -D -m 755 /tmp/libpod/test/policy.json \
|
||||
/etc/containers/policy.json
|
||||
sudo install -D -m 755 /tmp/libpod/test/redhat_sigstore.yaml \
|
||||
/etc/containers/registries.d/registry.access.redhat.com.yaml
|
||||
}
|
||||
|
||||
install_varlink(){
|
||||
echo "Installing varlink from the cheese-factory"
|
||||
ooe.sh sudo -H pip3 install varlink
|
||||
}
|
||||
|
||||
_finalize(){
|
||||
echo "Removing leftover giblets from cloud-init"
|
||||
cd /
|
||||
sudo rm -rf /var/lib/cloud
|
||||
sudo rm -rf /root/.ssh/*
|
||||
sudo rm -rf /home/*
|
||||
}
|
||||
|
||||
rh_finalize(){
|
||||
# Allow root ssh-logins
|
||||
if [[ -r /etc/cloud/cloud.cfg ]]
|
||||
then
|
||||
sudo sed -re 's/^disable_root:.*/disable_root: 0/g' -i /etc/cloud/cloud.cfg
|
||||
fi
|
||||
echo "Resetting to fresh-state for usage as cloud-image."
|
||||
sudo $(type -P dnf || type -P yum) clean all
|
||||
sudo rm -rf /var/cache/{yum,dnf}
|
||||
sudo rm -f /etc/udev/rules.d/*-persistent-*.rules
|
||||
sudo touch /.unconfigured # force firstboot to run
|
||||
_finalize
|
||||
}
|
||||
|
||||
ubuntu_finalize(){
|
||||
echo "Resetting to fresh-state for usage as cloud-image."
|
||||
sudo rm -rf /var/cache/apt
|
||||
_finalize
|
||||
}
|
39
contrib/cirrus/ooe.sh
Executable file
39
contrib/cirrus/ooe.sh
Executable file
@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script executes a command while logging all output to a temporary
|
||||
# file. If the command exits non-zero, then all output is sent to the console,
|
||||
# before returning the exit code. If the script itself fails, the exit code 121
|
||||
# is returned.
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
SCRIPT_PATH="$0"
|
||||
|
||||
badusage() {
|
||||
echo "Incorrect usage: $(basename $SCRIPT_PATH) <command> [options]" > /dev/stderr
|
||||
echo "ERROR: $1"
|
||||
exit 121
|
||||
}
|
||||
|
||||
COMMAND="$@"
|
||||
[[ -n "$COMMAND" ]] || badusage "No command specified"
|
||||
|
||||
OUTPUT_TMPFILE="$(mktemp -p '' $(basename $0)_output_XXXX)"
|
||||
output_on_error() {
|
||||
RET=$?
|
||||
set +e
|
||||
if [[ "$RET" -ne "0" ]]
|
||||
then
|
||||
echo "---------------------------"
|
||||
cat "$OUTPUT_TMPFILE"
|
||||
echo "[$(date --iso-8601=second)] <exit $RET> $COMMAND"
|
||||
fi
|
||||
rm -f "$OUTPUT_TMPFILE"
|
||||
}
|
||||
trap "output_on_error" EXIT
|
||||
|
||||
"$@" 2>&1 | while IFS='' read LINE # Preserve leading/trailing whitespace
|
||||
do
|
||||
# Every stdout and (copied) stderr line
|
||||
echo "[$(date --iso-8601=second)] $LINE"
|
||||
done >> "$OUTPUT_TMPFILE"
|
2
contrib/cirrus/packer/README.md
Normal file
2
contrib/cirrus/packer/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
These are definitions and scripts consumed by packer to produce the
|
||||
various distribution images used for CI testing.
|
69
contrib/cirrus/packer/centos_setup.sh
Normal file
69
contrib/cirrus/packer/centos_setup.sh
Normal file
@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script is called by packer on the subject CentOS VM, to setup the podman
|
||||
# build/test environment. It's not intended to be used outside of this context.
|
||||
|
||||
set -e
|
||||
|
||||
# Load in library (copied by packer, before this script was run)
|
||||
source /tmp/libpod/$SCRIPT_BASE/lib.sh
|
||||
|
||||
req_env_var "
|
||||
SCRIPT_BASE $SCRIPT_BASE
|
||||
CNI_COMMIT $CNI_COMMIT
|
||||
CRIO_COMMIT $CRIO_COMMIT
|
||||
"
|
||||
|
||||
install_ooe
|
||||
|
||||
export GOPATH="$(mktemp -d)"
|
||||
trap "sudo rm -rf $GOPATH" EXIT
|
||||
|
||||
ooe.sh sudo yum -y update
|
||||
|
||||
ooe.sh sudo yum -y install centos-release-scl epel-release
|
||||
|
||||
ooe.sh sudo yum -y install \
|
||||
atomic-registries \
|
||||
btrfs-progs-devel \
|
||||
bzip2 \
|
||||
device-mapper-devel \
|
||||
findutils \
|
||||
glib2-devel \
|
||||
glibc-static \
|
||||
gnupg \
|
||||
golang \
|
||||
golang-github-cpuguy83-go-md2man \
|
||||
golang-github-cpuguy83-go-md2man \
|
||||
gpgme-devel \
|
||||
iptables \
|
||||
libassuan-devel \
|
||||
libseccomp-devel \
|
||||
libselinux-devel \
|
||||
lsof \
|
||||
make \
|
||||
nmap-ncat \
|
||||
ostree-devel \
|
||||
python \
|
||||
python3-dateutil \
|
||||
python3-psutil \
|
||||
python3-pytoml \
|
||||
runc \
|
||||
skopeo-containers \
|
||||
unzip \
|
||||
which \
|
||||
xz
|
||||
|
||||
install_scl_git
|
||||
|
||||
install_cni_plugins
|
||||
|
||||
install_buildah
|
||||
|
||||
install_conmon
|
||||
|
||||
install_packer_copied_files
|
||||
|
||||
rh_finalize
|
||||
|
||||
echo "SUCCESS!"
|
72
contrib/cirrus/packer/fedora_setup.sh
Normal file
72
contrib/cirrus/packer/fedora_setup.sh
Normal file
@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script is called by packer on the subject fedora VM, to setup the podman
|
||||
# build/test environment. It's not intended to be used outside of this context.
|
||||
|
||||
set -e
|
||||
|
||||
# Load in library (copied by packer, before this script was run)
|
||||
source /tmp/libpod/$SCRIPT_BASE/lib.sh
|
||||
|
||||
req_env_var "
|
||||
SCRIPT_BASE $SCRIPT_BASE
|
||||
CNI_COMMIT $CNI_COMMIT
|
||||
CRIO_COMMIT $CRIO_COMMIT
|
||||
RUNC_COMMIT $RUNC_COMMIT
|
||||
"
|
||||
|
||||
install_ooe
|
||||
|
||||
export GOPATH="$(mktemp -d)"
|
||||
trap "sudo rm -rf $GOPATH" EXIT
|
||||
|
||||
# breaks networking on f28/29 in GCE
|
||||
# ooe.sh sudo dnf update -y
|
||||
|
||||
ooe.sh sudo dnf install -y \
|
||||
atomic-registries \
|
||||
btrfs-progs-devel \
|
||||
bzip2 \
|
||||
conmon \
|
||||
device-mapper-devel \
|
||||
findutils \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-static \
|
||||
gnupg \
|
||||
golang \
|
||||
golang-github-cpuguy83-go-md2man \
|
||||
golang-github-cpuguy83-go-md2man \
|
||||
gpgme-devel \
|
||||
iptables \
|
||||
libassuan-devel \
|
||||
libseccomp-devel \
|
||||
libselinux-devel \
|
||||
lsof \
|
||||
make \
|
||||
nmap-ncat \
|
||||
ostree-devel \
|
||||
procps-ng \
|
||||
python \
|
||||
python3-dateutil \
|
||||
python3-psutil \
|
||||
python3-pytoml \
|
||||
runc \
|
||||
skopeo-containers \
|
||||
slirp4netns \
|
||||
which\
|
||||
xz
|
||||
|
||||
install_varlink
|
||||
|
||||
install_cni_plugins
|
||||
|
||||
install_buildah
|
||||
|
||||
install_conmon
|
||||
|
||||
install_packer_copied_files
|
||||
|
||||
rh_finalize # N/B: Halts system!
|
||||
|
||||
echo "SUCCESS!"
|
124
contrib/cirrus/packer/libpod_images.json
Normal file
124
contrib/cirrus/packer/libpod_images.json
Normal file
@ -0,0 +1,124 @@
|
||||
{
|
||||
"variables": {
|
||||
"CNI_COMMIT": "{{env `CNI_COMMIT`}}",
|
||||
"CRIO_COMMIT": "{{env `CRIO_COMMIT`}}",
|
||||
"RUNC_COMMIT": "{{env `RUNC_COMMIT`}}",
|
||||
|
||||
"CENTOS_BASE_IMAGE": "{{env `CENTOS_BASE_IMAGE`}}" ,
|
||||
"UBUNTU_BASE_IMAGE": "{{env `UBUNTU_BASE_IMAGE`}}",
|
||||
"FEDORA_BASE_IMAGE": "{{env `FEDORA_BASE_IMAGE`}}",
|
||||
"RHEL_BASE_IMAGE": "{{env `RHEL_BASE_IMAGE`}}",
|
||||
|
||||
"GOSRC": "{{env `GOSRC`}}",
|
||||
"PACKER_BASE": "{{env `PACKER_BASE`}}",
|
||||
"SCRIPT_BASE": "{{env `SCRIPT_BASE`}}",
|
||||
|
||||
"SERVICE_ACCOUNT": "{{env `SERVICE_ACCOUNT`}}",
|
||||
"GCP_PROJECT_ID": "{{env `GCP_PROJECT_ID`}}",
|
||||
"CIRRUS_BUILD_ID": "{{env `CIRRUS_BUILD_ID`}}",
|
||||
"GCE_SSH_USERNAME": "{{env `GCE_SSH_USERNAME`}}",
|
||||
"RHSM_COMMAND": "{{env `RHSM_COMMAND`}}"
|
||||
},
|
||||
"sensitive-variables": [
|
||||
"GCP_PROJECT_ID", "SERVICE_ACCOUNT", "GCE_SSH_USERNAME", "RHSM_COMMAND"
|
||||
],
|
||||
"builders": [
|
||||
{
|
||||
"name": "rhel-7",
|
||||
"type": "googlecompute",
|
||||
"project_id": "{{user `GCP_PROJECT_ID`}}",
|
||||
"zone": "us-central1-a",
|
||||
"source_image": "{{user `RHEL_BASE_IMAGE`}}",
|
||||
"image_name": "{{user `RHEL_BASE_IMAGE`}}-libpod-{{user `CIRRUS_BUILD_ID`}}",
|
||||
"image_family": "{{user `RHEL_BASE_IMAGE`}}-libpod",
|
||||
"service_account_email": "{{user `SERVICE_ACCOUNT`}}",
|
||||
"communicator": "ssh",
|
||||
"ssh_username": "ec2-user",
|
||||
"ssh_pty": "true"
|
||||
},{
|
||||
"name": "centos-7",
|
||||
"type": "googlecompute",
|
||||
"project_id": "{{user `GCP_PROJECT_ID`}}",
|
||||
"zone": "us-central1-a",
|
||||
"source_image": "{{user `CENTOS_BASE_IMAGE`}}",
|
||||
"image_name": "{{user `CENTOS_BASE_IMAGE`}}-libpod-{{user `CIRRUS_BUILD_ID`}}",
|
||||
"image_family": "{{user `CENTOS_BASE_IMAGE`}}-libpod",
|
||||
"service_account_email": "{{user `SERVICE_ACCOUNT`}}",
|
||||
"communicator": "ssh",
|
||||
"ssh_username": "{{user `GCE_SSH_USERNAME`}}",
|
||||
"ssh_pty": "true"
|
||||
},{
|
||||
"name": "fedora-28",
|
||||
"type": "googlecompute",
|
||||
"project_id": "{{user `GCP_PROJECT_ID`}}",
|
||||
"zone": "us-central1-a",
|
||||
"source_image": "{{user `FEDORA_BASE_IMAGE`}}",
|
||||
"image_name": "{{user `FEDORA_BASE_IMAGE`}}-libpod-{{user `CIRRUS_BUILD_ID`}}",
|
||||
"image_family": "{{user `FEDORA_BASE_IMAGE`}}-libpod",
|
||||
"service_account_email": "{{user `SERVICE_ACCOUNT`}}",
|
||||
"communicator": "ssh",
|
||||
"ssh_username": "fedora",
|
||||
"ssh_pty": "true"
|
||||
},{
|
||||
"name": "ubuntu-18",
|
||||
"type": "googlecompute",
|
||||
"project_id": "{{user `GCP_PROJECT_ID`}}",
|
||||
"zone": "us-central1-a",
|
||||
"source_image": "{{user `UBUNTU_BASE_IMAGE`}}",
|
||||
"image_name": "{{user `UBUNTU_BASE_IMAGE`}}-libpod-{{user `CIRRUS_BUILD_ID`}}",
|
||||
"image_family": "{{user `UBUNTU_BASE_IMAGE`}}-libpod",
|
||||
"service_account_email": "{{user `SERVICE_ACCOUNT`}}",
|
||||
"communicator": "ssh",
|
||||
"ssh_username": "{{user `GCE_SSH_USERNAME`}}",
|
||||
"ssh_pty": "true"
|
||||
}
|
||||
],
|
||||
"provisioners": [
|
||||
{
|
||||
"type": "file",
|
||||
"source": "{{user `GOSRC`}}",
|
||||
"destination": "/tmp/libpod"
|
||||
},{
|
||||
"type": "shell",
|
||||
"only": ["rhel-7"],
|
||||
"script": "{{user `GOSRC`}}/{{user `PACKER_BASE`}}/rhel_setup.sh",
|
||||
"environment_vars": [
|
||||
"SCRIPT_BASE={{user `SCRIPT_BASE`}}",
|
||||
"CNI_COMMIT={{user `CNI_COMMIT`}}",
|
||||
"CRIO_COMMIT={{user `CRIO_COMMIT`}}",
|
||||
"RUNC_COMMIT={{user `RUNC_COMMIT`}}",
|
||||
"RHSM_COMMAND={{user `RHSM_COMMAND`}}"
|
||||
]
|
||||
},{
|
||||
"type": "shell",
|
||||
"only": ["centos-7"],
|
||||
"script": "{{user `GOSRC`}}/{{user `PACKER_BASE`}}/centos_setup.sh",
|
||||
"environment_vars": [
|
||||
"SCRIPT_BASE={{user `SCRIPT_BASE`}}",
|
||||
"CNI_COMMIT={{user `CNI_COMMIT`}}",
|
||||
"CRIO_COMMIT={{user `CRIO_COMMIT`}}",
|
||||
"RUNC_COMMIT={{user `RUNC_COMMIT`}}"
|
||||
]
|
||||
},{
|
||||
"type": "shell",
|
||||
"only": ["fedora-28"],
|
||||
"script": "{{user `GOSRC`}}/{{user `PACKER_BASE`}}/fedora_setup.sh",
|
||||
"environment_vars": [
|
||||
"SCRIPT_BASE={{user `SCRIPT_BASE`}}",
|
||||
"CNI_COMMIT={{user `CNI_COMMIT`}}",
|
||||
"CRIO_COMMIT={{user `CRIO_COMMIT`}}",
|
||||
"RUNC_COMMIT={{user `RUNC_COMMIT`}}"
|
||||
]
|
||||
},{
|
||||
"type": "shell",
|
||||
"only": ["ubuntu-18"],
|
||||
"script": "{{user `GOSRC`}}/{{user `PACKER_BASE`}}/ubuntu_setup.sh",
|
||||
"environment_vars": [
|
||||
"SCRIPT_BASE={{user `SCRIPT_BASE`}}",
|
||||
"CNI_COMMIT={{user `CNI_COMMIT`}}",
|
||||
"CRIO_COMMIT={{user `CRIO_COMMIT`}}",
|
||||
"RUNC_COMMIT={{user `RUNC_COMMIT`}}"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
111
contrib/cirrus/packer/rhel_setup.sh
Normal file
111
contrib/cirrus/packer/rhel_setup.sh
Normal file
@ -0,0 +1,111 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script is called by packer on the subject CentOS VM, to setup the podman
|
||||
# build/test environment. It's not intended to be used outside of this context.
|
||||
|
||||
set -e
|
||||
|
||||
# Load in library (copied by packer, before this script was run)
|
||||
source /tmp/libpod/$SCRIPT_BASE/lib.sh
|
||||
|
||||
req_env_var "
|
||||
SCRIPT_BASE $SCRIPT_BASE
|
||||
CNI_COMMIT $CNI_COMMIT
|
||||
CRIO_COMMIT $CRIO_COMMIT
|
||||
RHSM_COMMAND $RHSM_COMMAND
|
||||
"
|
||||
|
||||
install_ooe
|
||||
|
||||
export GOPATH="$(mktemp -d)"
|
||||
export RHSMCMD="$(mktemp)"
|
||||
|
||||
exit_handler() {
|
||||
set +ex
|
||||
cd /
|
||||
sudo rm -rf "$RHSMCMD"
|
||||
sudo rm -rf "$GOPATH"
|
||||
sudo subscription-manager remove --all
|
||||
sudo subscription-manager unregister
|
||||
sudo subscription-manager clean
|
||||
}
|
||||
trap "exit_handler" EXIT
|
||||
|
||||
# Avoid logging sensitive details
|
||||
echo "$RHSM_COMMAND" > "$RHSMCMD"
|
||||
ooe.sh sudo bash "$RHSMCMD"
|
||||
sudo rm -rf "$RHSMCMD"
|
||||
|
||||
ooe.sh sudo yum -y erase "rh-amazon-rhui-client*"
|
||||
ooe.sh sudo subscription-manager repos "--disable=*"
|
||||
ooe.sh sudo subscription-manager repos \
|
||||
--enable=rhel-7-server-rpms \
|
||||
--enable=rhel-7-server-optional-rpms \
|
||||
--enable=rhel-7-server-extras-rpms \
|
||||
--enable=rhel-server-rhscl-7-rpms
|
||||
|
||||
ooe.sh sudo yum -y update
|
||||
|
||||
# Frequently needed
|
||||
ooe.sh sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
||||
|
||||
# Required for google to manage ssh keys
|
||||
sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
|
||||
[google-cloud-compute]
|
||||
name=google-cloud-compute
|
||||
baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-compute-el7-x86_64
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
repo_gpgcheck=1
|
||||
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
|
||||
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
|
||||
EOM
|
||||
|
||||
ooe.sh sudo yum -y install \
|
||||
atomic-registries \
|
||||
btrfs-progs-devel \
|
||||
bzip2 \
|
||||
device-mapper-devel \
|
||||
findutils \
|
||||
glib2-devel \
|
||||
glibc-static \
|
||||
gnupg \
|
||||
golang \
|
||||
golang-github-cpuguy83-go-md2man \
|
||||
golang-github-cpuguy83-go-md2man \
|
||||
google-compute-engine \
|
||||
google-compute-engine-oslogin \
|
||||
gpgme-devel \
|
||||
iptables \
|
||||
libassuan-devel \
|
||||
libseccomp-devel \
|
||||
libselinux-devel \
|
||||
lsof \
|
||||
make \
|
||||
nmap-ncat \
|
||||
ostree-devel \
|
||||
python \
|
||||
python34-dateutil \
|
||||
python34-psutil \
|
||||
python34-pytoml \
|
||||
runc \
|
||||
skopeo-containers \
|
||||
unzip \
|
||||
which \
|
||||
xz
|
||||
|
||||
install_scl_git
|
||||
|
||||
install_cni_plugins
|
||||
|
||||
install_buildah
|
||||
|
||||
install_conmon
|
||||
|
||||
install_packer_copied_files
|
||||
|
||||
exit_handler # release subscription!
|
||||
|
||||
rh_finalize
|
||||
|
||||
echo "SUCCESS!"
|
93
contrib/cirrus/packer/ubuntu_setup.sh
Normal file
93
contrib/cirrus/packer/ubuntu_setup.sh
Normal file
@ -0,0 +1,93 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script is called by packer on the subject Ubuntu VM, to setup the podman
|
||||
# build/test environment. It's not intended to be used outside of this context.
|
||||
|
||||
set -e
|
||||
|
||||
# Load in library (copied by packer, before this script was run)
|
||||
source /tmp/libpod/$SCRIPT_BASE/lib.sh
|
||||
|
||||
req_env_var "
|
||||
SCRIPT_BASE $SCRIPT_BASE
|
||||
CNI_COMMIT $CNI_COMMIT
|
||||
CRIO_COMMIT $CRIO_COMMIT
|
||||
RUNC_COMMIT $RUNC_COMMIT
|
||||
"
|
||||
|
||||
install_ooe
|
||||
|
||||
export GOPATH="$(mktemp -d)"
|
||||
trap "sudo rm -rf $GOPATH" EXIT
|
||||
|
||||
ooe.sh sudo apt-get -qq update
|
||||
ooe.sh sudo apt-get -qq update # sometimes it needs to get it twice :S
|
||||
ooe.sh sudo apt-get -qq upgrade
|
||||
ooe.sh sudo apt-get -qq install --no-install-recommends \
|
||||
apparmor \
|
||||
autoconf \
|
||||
automake \
|
||||
bison \
|
||||
btrfs-tools \
|
||||
build-essential \
|
||||
curl \
|
||||
e2fslibs-dev \
|
||||
gawk \
|
||||
gettext \
|
||||
golang \
|
||||
go-md2man \
|
||||
iptables \
|
||||
libaio-dev \
|
||||
libapparmor-dev \
|
||||
libcap-dev \
|
||||
libdevmapper-dev \
|
||||
libdevmapper1.02.1 \
|
||||
libfuse-dev \
|
||||
libglib2.0-dev \
|
||||
libgpgme11-dev \
|
||||
liblzma-dev \
|
||||
libostree-dev \
|
||||
libprotobuf-c0-dev \
|
||||
libprotobuf-dev \
|
||||
libtool \
|
||||
libtool \
|
||||
libudev-dev \
|
||||
lsof \
|
||||
netcat \
|
||||
pkg-config \
|
||||
protobuf-c-compiler \
|
||||
protobuf-compiler \
|
||||
python-minimal \
|
||||
python3-dateutil \
|
||||
python3-pip \
|
||||
python3-psutil \
|
||||
python3-pytoml \
|
||||
python3-setuptools \
|
||||
socat \
|
||||
unzip \
|
||||
xz-utils
|
||||
|
||||
echo "Fixing Ubuntu kernel not enabling swap accounting by default"
|
||||
SEDCMD='s/^GRUB_CMDLINE_LINUX="(.*)"/GRUB_CMDLINE_LINUX="\1 cgroup_enable=memory swapaccount=1"/g'
|
||||
ooe.sh sudo sed -re "$SEDCMD" -i /etc/default/grub.d/*
|
||||
ooe.sh sudo sed -re "$SEDCMD" -i /etc/default/grub
|
||||
ooe.sh sudo update-grub
|
||||
|
||||
install_runc
|
||||
|
||||
install_conmon
|
||||
|
||||
install_cni_plugins
|
||||
|
||||
install_buildah
|
||||
|
||||
install_packer_copied_files
|
||||
|
||||
install_varlink
|
||||
|
||||
sudo curl https://raw.githubusercontent.com/projectatomic/registries/master/registries.fedora\
|
||||
-o /etc/containers/registries.conf
|
||||
|
||||
ubuntu_finalize
|
||||
|
||||
echo "SUCCESS!"
|
77
contrib/cirrus/setup_environment.sh
Executable file
77
contrib/cirrus/setup_environment.sh
Executable file
@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
source $(dirname $0)/lib.sh
|
||||
|
||||
req_env_var "
|
||||
CI $CI
|
||||
USER $USER
|
||||
HOME $HOME
|
||||
ENVLIB $ENVLIB
|
||||
SCRIPT_BASE $SCRIPT_BASE
|
||||
CIRRUS_BUILD_ID $CIRRUS_BUILD_ID"
|
||||
|
||||
[[ "$SHELL" =~ "bash" ]] || chsh -s /bin/bash
|
||||
|
||||
cd "$CIRRUS_WORKING_DIR" # for clarity of initial conditions
|
||||
|
||||
# Verify basic dependencies
|
||||
for depbin in go rsync unzip sha256sum curl make
|
||||
do
|
||||
if ! type -P "$depbin" &> /dev/null
|
||||
then
|
||||
echo "ERROR: $depbin binary not found in $PATH"
|
||||
exit 2
|
||||
fi
|
||||
done
|
||||
|
||||
# Setup env. vars common to all tasks/scripts/platforms and
|
||||
# ensure they return for every following script execution.
|
||||
MARK="# Added by $0, manual changes will be lost."
|
||||
touch "$HOME/$ENVLIB"
|
||||
if ! grep -q "$MARK" "$HOME/$ENVLIB"
|
||||
then
|
||||
cp "$HOME/$ENVLIB" "$HOME/${ENVLIB}_original"
|
||||
# N/B: Single-quote items evaluated every time, double-quotes only once (right now).
|
||||
for envstr in \
|
||||
"$MARK" \
|
||||
"export HEAD=\"$CIRRUS_CHANGE_IN_REPO\"" \
|
||||
"export TRAVIS=\"1\"" \
|
||||
"export GOSRC=\"$CIRRUS_WORKING_DIR\"" \
|
||||
"export OS_RELEASE_ID=\"$(os_release_id)\"" \
|
||||
"export OS_RELEASE_VER=\"$(os_release_ver)\"" \
|
||||
"export OS_REL_VER=\"${OS_RELEASE_ID}-${OS_RELEASE_VER}\"" \
|
||||
"export GOPATH=\"/go\"" \
|
||||
'export PATH="$HOME/bin:$GOPATH/bin:/usr/local/bin:$PATH"' \
|
||||
'export LD_LIBRARY_PATH="/usr/local/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"'
|
||||
do
|
||||
# Make permanent in later shells, and set in current shell
|
||||
X=$(echo "$envstr" | tee -a "$HOME/$ENVLIB") && eval "$X" && echo "$X"
|
||||
done
|
||||
|
||||
# Some setup needs to vary between distros
|
||||
case "${OS_RELEASE_ID}-${OS_RELEASE_VER}" in
|
||||
ubuntu-18)
|
||||
envstr='export BUILDTAGS="seccomp $($GOSRC/hack/btrfs_tag.sh) $($GOSRC/hack/btrfs_installed_tag.sh) $($GOSRC/hack/ostree_tag.sh) varlink exclude_graphdriver_devicemapper"'
|
||||
;;
|
||||
fedora-28) ;& # Continue to the next item
|
||||
centos-7) ;&
|
||||
rhel-7)
|
||||
envstr='unset BUILDTAGS' # Use default from Makefile
|
||||
;;
|
||||
*) bad_os_id_ver ;;
|
||||
esac
|
||||
X=$(echo "$envstr" | tee -a "$HOME/$ENVLIB") && eval "$X" && echo "$X"
|
||||
|
||||
# Do the same for golang env. vars
|
||||
go env | while read envline
|
||||
do
|
||||
X=$(echo "export $envline" | tee -a "$HOME/$ENVLIB") && eval "$X" && echo "$X"
|
||||
done
|
||||
|
||||
cd "${GOSRC}/"
|
||||
source "$SCRIPT_BASE/lib.sh"
|
||||
|
||||
# Only testing-VMs need deps installed
|
||||
[[ -n "$PACKER_BUILDS" ]] || install_testing_dependencies # must exist in $GOPATH
|
||||
fi
|
30
contrib/cirrus/unit_test.sh
Executable file
30
contrib/cirrus/unit_test.sh
Executable file
@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
source $(dirname $0)/lib.sh
|
||||
|
||||
req_env_var "
|
||||
GOSRC $GOSRC
|
||||
OS_RELEASE_ID $OS_RELEASE_ID
|
||||
OS_RELEASE_VER $OS_RELEASE_VER
|
||||
"
|
||||
|
||||
show_env_vars
|
||||
|
||||
set -x
|
||||
cd "$GOSRC"
|
||||
case "${OS_RELEASE_ID}-${OS_RELEASE_VER}" in
|
||||
ubuntu-18)
|
||||
make localunit "BUILDTAGS=$BUILDTAGS"
|
||||
make "BUILDTAGS=$BUILDTAGS"
|
||||
;;
|
||||
fedora-28)
|
||||
make localunit
|
||||
make
|
||||
;;
|
||||
centos-7) ;& # Continue to the next item
|
||||
rhel-7)
|
||||
stub 'unit testing not working on $OS_RELEASE_ID'
|
||||
;;
|
||||
*) bad_os_id_ver ;;
|
||||
esac
|
Reference in New Issue
Block a user