diff --git a/.github/workflows/install_puppet.yaml b/.github/workflows/install_puppet.yaml new file mode 100644 index 0000000..a2b37d2 --- /dev/null +++ b/.github/workflows/install_puppet.yaml @@ -0,0 +1,31 @@ +--- +name: Install Puppet +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + install-puppet: + name: ${{ matrix.collection }} / ${{ matrix.os.name }} + runs-on: ubuntu-latest + strategy: + matrix: + collection: [ puppet6, puppet7, puppet6-nightly, puppet7-nightly] + os: [ + # { image: "CentOS 6", image: "litmusimage/centos:6" }, + # { image: "CentOS 7", image: "litmusimage/centos:7" }, + { image: "CentOS 8", image: "litmusimage/centos:8" }, + # { image: "Debian 9", image: "litmusimage/debian:9" }, + { image: "Debian 10", image: "litmusimage/debian:10" }, + # { image: "Debian 11", image: "litmusimage/debian:11" }, + # { image: "Ubuntu 16.04", image: "litmusimage/ubuntu:16.04" }, + { image: "Ubuntu 18.04", image: "litmusimage/ubuntu:18.04" }, + # { image: "Ubuntu 20.04", image: "litmusimage/ubuntu:20.04" }, + ] + image: + image: ${{ matrix.os.image }} + steps: + - name: Install puppet-agent from ${{ matrix.collection }} collection + run: bash -x test_install.sh -c ${{ matrix.collection }} diff --git a/test_install.sh b/test_install.sh new file mode 100755 index 0000000..c52cb65 --- /dev/null +++ b/test_install.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +INSTALL_OPTIONS=( "$@" ) +PUPPET_BIN=/opt/puppetlabs/bin/puppet + +beginswith() { case $2 in "$1"*) true;; *) false;; esac; } + +# Check whether a command exists - returns 0 if it does, 1 if it does not +exists() { + if command -v "$1" >/dev/null 2>&1 + then + return 0 + else + return 1 + fi +} + +while [[ "$#" -gt 0 ]]; do + case $1 in + -v|--version) EXPECTED_VERSION="$2"; shift ;; + -c|--collection) EXPECTED_COLLECTION="$2"; shift; + case $EXPECTED_COLLECTION in + puppet|puppet-nightly) EXPECTED_VERSION="7." ;; + puppet6|puppet6-nightly) EXPECTED_VERSION="6." ;; + puppet7|puppet7-nightly) EXPECTED_VERSION="7." ;; + esac + ;; + --cleanup) EXPECT_CLEANUP=true; shift ;; + *) echo "Unknown parameter passed: $1"; usage; exit 1 ;; + esac + shift +done + +curl -sSL https://raw.githubusercontent.com/puppetlabs/install-puppet/main/install.sh | bash -s -- "${INSTALL_OPTIONS[@]}" + +if [ -n "$EXPECTED_VERSION" ]; then + if ! exists $PUPPET_BIN; then + echo "ERROR: puppet executable not found under $(dirname $PUPPET_BIN)" + exit 1 + fi + + echo "INFO: running $PUPPET_BIN --version" + + ACTUAL_VERSION=$($PUPPET_BIN --version) + + if ! beginswith "$EXPECTED_VERSION" "$ACTUAL_VERSION"; then + echo "ERROR: expected version to begin with $EXPECTED_VERSION but got $ACTUAL_VERSION" + exit 1 + fi +fi + +if [[ $EXPECT_CLEANUP == true ]]; then + if exists rpm; then + if rpm -q "${EXPECTED_COLLECTION}-release"; then + echo "ERROR: cleanup requested but $EXPECTED_COLLECTION-release repo was not removed" + exit 1 + fi + elif exists dpkg; then + if dpkg -l "${EXPECTED_COLLECTION}-release"; then + echo "ERROR: cleanup requested but $EXPECTED_COLLECTION-release repo was not removed/purged" + exit 1 + fi + else + echo "INFO: no rpm/dpkg found; don't know how to cleanup repos" + exit 1 + fi +fi