From ea73ff97cedd4ff32a2fd3690c7e4eb60e288a04 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Fri, 2 Apr 2021 14:09:18 +0300 Subject: [PATCH] Add nightly olm bundle version check (#750) * Add nightly olm bundle version check Signed-off-by: Anatolii Bazko --- .../bin/check-nightly-olm-bundle-version.sh | 76 +++++++++++++++++++ .../check-nightly-olm-bundle-version.yaml | 26 +++++++ olm/update-nightly-bundle.sh | 17 +++-- 3 files changed, 112 insertions(+), 7 deletions(-) create mode 100755 .github/bin/check-nightly-olm-bundle-version.sh create mode 100644 .github/workflows/check-nightly-olm-bundle-version.yaml diff --git a/.github/bin/check-nightly-olm-bundle-version.sh b/.github/bin/check-nightly-olm-bundle-version.sh new file mode 100755 index 000000000..e600bfe22 --- /dev/null +++ b/.github/bin/check-nightly-olm-bundle-version.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# +# Copyright (c) 2021 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation + +set -e + +ROOT_PROJECT_DIR="${GITHUB_WORKSPACE}" +if [ -z "${ROOT_PROJECT_DIR}" ]; then + BASE_DIR=$(cd "$(dirname "$0")"; pwd) + ROOT_PROJECT_DIR=$(dirname "$(dirname "${BASE_DIR}")") +fi + +CSV_KUBERNETES_NEW="deploy/olm-catalog/nightly/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml" +CSV_KUBERNETES_CURRENT=https://raw.githubusercontent.com/eclipse-che/che-operator/master/deploy/olm-catalog/nightly/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml + +CSV_OPENSHIFT_NEW="deploy/olm-catalog/nightly/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml" +CSV_OPENSHIFT_CURRENT=https://raw.githubusercontent.com/eclipse-che/che-operator/master/deploy/olm-catalog/nightly/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml + +checkNightlyBundleVersions() { + git fetch -q + changedFiles=( + $(git diff --name-only refs/remotes/origin/${GITHUB_BASE_REF}...refs/remotes/origin/${GITHUB_HEAD_REF}) + ) + + for file in "${changedFiles[@]}" + do + echo "[INFO] Changed file: $file" + if [[ "${CSV_KUBERNETES_NEW}" == "${file}" ]]; then + compareVersions ${ROOT_PROJECT_DIR}/$CSV_KUBERNETES_NEW $CSV_KUBERNETES_CURRENT + elif [[ "${CSV_OPENSHIFT_NEW}" == "${file}" ]]; then + compareVersions ${ROOT_PROJECT_DIR}/$CSV_OPENSHIFT_NEW $CSV_OPENSHIFT_CURRENT + fi + done +} + +compareVersions() { + CSV_VERSION_NEW=$(yq -r ".spec.version" $1) + CSV_VERSION_CURRENT=$(curl -s $2 | yq -r ".spec.version") + + echo "[INFO] New version: $CSV_VERSION_NEW" + echo "[INFO] Current version: $CSV_VERSION_CURRENT" + + VERSION_CURRENT_NUMBER=$(convertVersionToNumber $CSV_VERSION_CURRENT) + VERSION_NEW_NUMBER=$(convertVersionToNumber $CSV_VERSION_NEW) + + if (( $VERSION_NEW_NUMBER <= $VERSION_CURRENT_NUMBER )); then + echo "[ERROR] New nightly bundle version is less than the current one." + echo "[ERROR] Please update nightly bundle with script 'olm/update-nightly-bundle.sh'" + exit 1 + fi +} + +convertVersionToNumber() { + version=$1 # 7.28.1-130.nightly + versionWithoutNightly="${version%.nightly}" # 7.28.1-130 + version="${versionWithoutNightly%-*}" # 7.28.1 + incrementPart="${versionWithoutNightly#*-}" # 130 + major=$(echo $version | cut -d '.' -f 1) # 7 + minor=$(echo $version | cut -d '.' -f 2) # 28 + bugfix=$(echo $version | cut -d '.' -f 3) # 1 + + # 702810130 + echo $((major * 100000000 + minor * 100000 + bugfix * 10000 + incrementPart)) +} + +checkNightlyBundleVersions + +echo "[INFO] Done." diff --git a/.github/workflows/check-nightly-olm-bundle-version.yaml b/.github/workflows/check-nightly-olm-bundle-version.yaml new file mode 100644 index 000000000..981f43b2c --- /dev/null +++ b/.github/workflows/check-nightly-olm-bundle-version.yaml @@ -0,0 +1,26 @@ +# +# Copyright (c) 2021 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# + +name: Check nightly OLM bundle version +on: pull_request +jobs: + check-bundle-version: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - name: Install yq + run: sudo pip install yq + - name: Check nightly OLM bundle version + run: | + go version + export GOROOT=/opt/hostedtoolcache/go/1.15.10/x64/ + ${GITHUB_WORKSPACE}/.github/bin/check-nightly-olm-bundle-version.sh diff --git a/olm/update-nightly-bundle.sh b/olm/update-nightly-bundle.sh index bf4b2d41f..45065d637 100755 --- a/olm/update-nightly-bundle.sh +++ b/olm/update-nightly-bundle.sh @@ -16,6 +16,10 @@ if [ -z "${BASE_DIR}" ]; then BASE_DIR=$(cd "$(dirname "$0")"; pwd) fi +if [ -z "${ROOT_PROJECT_DIR}" ]; then + ROOT_PROJECT_DIR=$(dirname "${BASE_DIR}") +fi + if [ -z "${OPERATOR_SDK_BINARY}" ]; then OPERATOR_SDK_BINARY=$(command -v operator-sdk) if [[ ! -x "${OPERATOR_SDK_BINARY}" ]]; then @@ -26,7 +30,7 @@ fi # Check for compatible version of operator-sdk: OPERATOR_SDK_VERSION=$(${OPERATOR_SDK_BINARY} version | cut -d, -f1 | cut -d: -f2 | sed 's/[ \"]//g') -REQUIRED_OPERATOR_SDK=$(yq -r ".\"operator-sdk\"" "${BASE_DIR}/../REQUIREMENTS") +REQUIRED_OPERATOR_SDK=$(yq -r ".\"operator-sdk\"" "${ROOT_PROJECT_DIR}/REQUIREMENTS") case $OPERATOR_SDK_VERSION in "${REQUIRED_OPERATOR_SDK}") echo "Operator SDK ${OPERATOR_SDK_VERSION} installed" @@ -42,16 +46,15 @@ if [ -z "${GOROOT}" ]; then exit 0 fi -OPERATOR_YAML="${BASE_DIR}"/../deploy/operator.yaml +OPERATOR_YAML="${ROOT_PROJECT_DIR}/deploy/operator.yaml" NEW_OPERATOR_YAML="${OPERATOR_YAML}.new" # copy licence header eval head -10 "${OPERATOR_YAML}" > ${NEW_OPERATOR_YAML} -ROOT_PROJECT_DIR=$(dirname "${BASE_DIR}") TAG=$1 -source ${BASE_DIR}/check-yq.sh -source ${BASE_DIR}/olm.sh +source ${ROOT_PROJECT_DIR}/olm/check-yq.sh +source ${ROOT_PROJECT_DIR}/olm/olm.sh ubiMinimal8Version=$(skopeo inspect docker://registry.access.redhat.com/ubi8-minimal:latest | jq -r '.Labels.version') ubiMinimal8Release=$(skopeo inspect docker://registry.access.redhat.com/ubi8-minimal:latest | jq -r '.Labels.release') @@ -70,13 +73,13 @@ yq -ryY "( .spec.template.spec.containers[] | select(.name == \"che-operator\"). >> "${NEW_OPERATOR_YAML}" mv "${NEW_OPERATOR_YAML}" "${OPERATOR_YAML}" -DOCKERFILE=${BASE_DIR}/../Dockerfile +DOCKERFILE="${ROOT_PROJECT_DIR}/Dockerfile" sed -i 's|registry.access.redhat.com/ubi8-minimal:.*|'${UBI8_MINIMAL_IMAGE}'|g' $DOCKERFILE for platform in 'kubernetes' 'openshift' do if [ -z "${NO_INCREMENT}" ]; then - source "${BASE_DIR}/incrementNightlyBundles.sh" + source "${ROOT_PROJECT_DIR}/olm/incrementNightlyBundles.sh" incrementNightlyVersion "${platform}" fi