blob: cb6e71093e4a1447f5cb183e65f9e6a6e848ad39 [file] [log] [blame]
#!/bin/bash
check_env_var() {
if [ -z "${2}" ]; then
echo "Error: ${1} env var not defined"
exit 1
fi
}
check_env_var "BUNDLE_INDEX" ${BUNDLE_INDEX}
check_env_var "INDEX_DIR" ${INDEX_DIR}
check_env_var "PACKAGE" ${PACKAGE}
check_env_var "OPM" ${OPM}
check_env_var "BUNDLE_IMAGE" ${BUNDLE_IMAGE}
check_env_var "CSV_NAME" ${CSV_NAME}
check_env_var "CSV_REPLACES" ${CSV_REPLACES}
check_env_var "CHANNEL" ${CHANNEL}
PACKAGE_YAML=${INDEX_DIR}/${PACKAGE}.yaml
if ! command -v ${OPM} &> /dev/null
then
echo "Error: opm is not available. Was OPM env var defined correctly: ${OPM}"
exit 1
fi
if [ -n "${CSV_REPLACES}" ] && [ -n "${CSV_SKIPS}" ]; then
echo
echo "Both CSV_REPLACES and CSV_SKIPS have been specified."
while [ -z "${brs}" ]; do
read -p "Do you wish to include both (b), ignore 'replaces' (r) or ignore 'skips' (s): " brs
case ${brs} in
[Bb]* )
echo "... including both"
echo
;;
[Rr]* )
echo ".. ignoring 'replaces'"
echo
CSV_REPLACES=""
;;
[Ss]* )
echo ".. ignoring 'skips'"
echo
CSV_SKIPS=""
;;
* )
echo "Please answer b, r or s."
echo
;;
esac
done
fi
if [ -f "${INDEX_DIR}.Dockerfile" ]; then
rm -f "${INDEX_DIR}.Dockerfile"
fi
mkdir -p "${INDEX_DIR}"
if [ ! -f ${INDEX_DIR}/bundles.yaml ]; then
${OPM} render ${BUNDLE_INDEX} -o yaml > ${INDEX_DIR}/bundles.yaml
if [ $? != 0 ]; then
echo "Error: failed to render the base catalog"
exit 1
fi
fi
${OPM} render --skip-tls -o yaml \
${BUNDLE_IMAGE} > ${PACKAGE_YAML}
if [ $? != 0 ]; then
echo "Error: failed to render the ${PACKAGE} bundle catalog"
exit 1
fi
cat << EOF >> ${PACKAGE_YAML}
---
schema: olm.channel
package: ${PACKAGE}
name: ${CHANNEL}
entries:
- name: ${CSV_NAME}
EOF
if [ -n "${CSV_REPLACES}" ]; then
cat << EOF >> ${PACKAGE_YAML}
replaces: ${CSV_REPLACES}
EOF
fi
if [ -n "${CSV_SKIPS}" ]; then
cat << EOF >> ${PACKAGE_YAML}
skipRange: "\'${CSV_SKIPS}\'"
EOF
fi
echo -n "Validating index ... "
STATUS=$(${OPM} validate ${INDEX_DIR} 2>&1)
if [ $? != 0 ]; then
echo "Failed"
echo "Error: ${STATUS}"
exit 1
else
echo "OK"
fi
echo -n "Generating catalog dockerfile ... "
STATUS=$(${OPM} generate dockerfile ${INDEX_DIR} 2>&1)
if [ $? != 0 ]; then
echo "Failed"
echo "Error: ${STATUS}"
exit 1
else
echo "OK"
fi
echo -n "Building catalog image ... "
BUNDLE_INDEX_IMAGE="${BUNDLE_IMAGE%:*}-index":"${BUNDLE_IMAGE#*:}"
STATUS=$(docker build . -f ${INDEX_DIR}.Dockerfile -t ${BUNDLE_INDEX_IMAGE} 2>&1)
if [ $? != 0 ]; then
echo "Failed"
echo "Error: ${STATUS}"
exit 1
else
echo "OK"
echo "Index image ${BUNDLE_INDEX_IMAGE} can be pushed"
fi