che-operator/build/scripts/release/release-olm-files.sh

129 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (c) 2019-2023 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
while [[ "$#" -gt 0 ]]; do
case $1 in
'--release-version') RELEASE=$2; shift 1;;
'--channel') CHANNEL=$2; shift 1;;
esac
shift 1
done
OPERATOR_REPO=$(dirname "$(dirname "$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")")")
export LAST_RELEASE_VERSION
setLatestReleasedVersion() {
versions=$(curl \
-H "Authorization: bearer ${GITHUB_TOKEN}" \
-X POST -H "Content-Type: application/json" --data \
'{"query": "{ repository(owner: \"eclipse\", name: \"che-operator\") { refs(refPrefix: \"refs/tags/\", last: 2, orderBy: {field: TAG_COMMIT_DATE, direction: ASC}) { edges { node { name } } } } }" } ' \
https://api.github.com/graphql)
LAST_RELEASE_VERSION=$(echo "${versions[@]}" | jq '.data.repository.refs.edges[1].node.name | sub("\""; "")' | tr -d '"')
}
downloadLatestReleasedBundleCRCRD() {
mkdir -p "${STABLE_BUNDLE_PATH}/manifests" "${STABLE_BUNDLE_PATH}/generated/openshift" "${STABLE_BUNDLE_PATH}/metadata"
PRE_RELEASE_CSV="${STABLE_BUNDLE_PATH}/generated/openshift/che-operator.clusterserviceversion.yaml"
PRE_RELEASE_CHE_CRD="${STABLE_BUNDLE_PATH}/generated/openshift/org.eclipse.che_checlusters.yaml"
# discover remote url depending on package name
if wget -q --spider "https://raw.githubusercontent.com/eclipse-che/che-operator/${LAST_RELEASE_VERSION}/bundle/stable/eclipse-che/manifests/che-operator.clusterserviceversion.yaml"; then
PRE_RELEASE_CSV_URL="https://raw.githubusercontent.com/eclipse-che/che-operator/${LAST_RELEASE_VERSION}/bundle/stable/eclipse-che/manifests/che-operator.clusterserviceversion.yaml"
PRE_RELEASE_CHE_CRD_URL="https://raw.githubusercontent.com/eclipse-che/che-operator/${LAST_RELEASE_VERSION}/bundle/stable/eclipse-che/manifests/org.eclipse.che_checlusters.yaml"
else
PRE_RELEASE_CSV_URL="https://raw.githubusercontent.com/eclipse-che/che-operator/${LAST_RELEASE_VERSION}/bundle/stable/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml"
PRE_RELEASE_CHE_CRD_URL="https://raw.githubusercontent.com/eclipse-che/che-operator/${LAST_RELEASE_VERSION}/bundle/stable/eclipse-che-preview-openshift/manifests/org.eclipse.che_checlusters.yaml"
fi
wget "${PRE_RELEASE_CSV_URL}" -q -O "${PRE_RELEASE_CSV}"
wget "${PRE_RELEASE_CHE_CRD_URL}" -q -O "${PRE_RELEASE_CHE_CRD}"
}
if [[ -z "$RELEASE" ]] || [[ -z "$CHANNEL" ]]; then
echo "One of the following required parameters is missing"
echo "--release-version <RELEASE> --channel <CHANNEL>"
exit 1
fi
echo "[INFO] Creating release '${RELEASE}'"
pushd "${OPERATOR_REPO}"
NEXT_BUNDLE_PATH=$(make bundle-path CHANNEL="next")
popd
LAST_NEXT_CSV="${NEXT_BUNDLE_PATH}/manifests/che-operator.clusterserviceversion.yaml"
lastPackageNextVersion=$(yq -r ".spec.version" "${LAST_NEXT_CSV}")
echo "[INFO] Last package next version: ${lastPackageNextVersion}"
pushd "${OPERATOR_REPO}"
STABLE_BUNDLE_PATH=$(make bundle-path CHANNEL="stable")
popd
RELEASE_CSV="${STABLE_BUNDLE_PATH}/manifests/che-operator.clusterserviceversion.yaml"
RELEASE_CHE_CRD="${STABLE_BUNDLE_PATH}/manifests/org.eclipse.che_checlusters.yaml"
MANAGER_YAML="${OPERATOR_REPO}/config/manager/manager.yaml"
setLatestReleasedVersion
downloadLatestReleasedBundleCRCRD
echo "[INFO] Will create release '${RELEASE}' from next version ${lastPackageNextVersion}'"
sed \
-e 's/imagePullPolicy: *Always/imagePullPolicy: IfNotPresent/' \
-e "/^ replaces: ${ECLIPSE_CHE_PACKAGE_NAME}.v.*/d" \
-e "s/^ version: ${lastPackageNextVersion}/ version: ${RELEASE}/" \
-e "s/: next/: ${RELEASE}/" \
-e "s/:next/:${RELEASE}/" \
-e "s/${lastPackageNextVersion}/${RELEASE}/" \
-e "s/createdAt:.*$/createdAt: \"$(date -u +%FT%TZ)\"/" "${LAST_NEXT_CSV}" > "${RELEASE_CSV}"
cp "${NEXT_BUNDLE_PATH}/manifests/org.eclipse.che_checlusters.yaml" "${RELEASE_CHE_CRD}"
cp -rf "${NEXT_BUNDLE_PATH}/bundle.Dockerfile" "${STABLE_BUNDLE_PATH}"
cp -rf "${NEXT_BUNDLE_PATH}/metadata" "${STABLE_BUNDLE_PATH}"
cp -rf "${NEXT_BUNDLE_PATH}/tests" "${STABLE_BUNDLE_PATH}"
ANNOTATION_METADATA_YAML="${STABLE_BUNDLE_PATH}/metadata/annotations.yaml"
sed \
-e 's/operators.operatorframework.io.bundle.channels.v1: .*/operators.operatorframework.io.bundle.channels.v1: '$CHANNEL'/' \
-e 's/operators.operatorframework.io.bundle.channel.default.v1: .*/operators.operatorframework.io.bundle.channel.default.v1: '$CHANNEL'/' \
-i "${ANNOTATION_METADATA_YAML}"
BUNDLE_DOCKERFILE="${STABLE_BUNDLE_PATH}/bundle.Dockerfile"
sed \
-e 's/LABEL operators.operatorframework.io.bundle.channels.v1=.*/LABEL operators.operatorframework.io.bundle.channels.v1='$CHANNEL'/' \
-e 's/LABEL operators.operatorframework.io.bundle.channel.default.v1=.*/LABEL operators.operatorframework.io.bundle.channel.default.v1='$CHANNEL'/' \
-i "${BUNDLE_DOCKERFILE}"
source ${OPERATOR_REPO}/build/scripts/release/addDigests.sh \
-t "${RELEASE}" \
-s "${RELEASE_CSV}" \
-o "${MANAGER_YAML}"
pushd "${OPERATOR_REPO}" || exit 1
make download-addlicense
make license "${RELEASE_CSV}"
make license "${MANAGER_YAML}"
popd || exit 1
if [[ -n "${PRE_RELEASE_CSV}" ]] && [[ -n "${PRE_RELEASE_CHE_CRD}" ]]; then
diff -u "${PRE_RELEASE_CSV}" "${RELEASE_CSV}" > "${RELEASE_CSV}.diff" || true
diff -u "${PRE_RELEASE_CHE_CRD}" "${RELEASE_CHE_CRD}" > "${RELEASE_CHE_CRD}.diff" || true
fi
echo "[INFO] Release bundles successfully created."