1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-05 08:17:04 +00:00
node-feature-discovery/scripts/prepare-release.sh
Markus Lehtonen fd2dcc2275 scripts/prepare-release: use gpg for signing Helm chart
Need to create the provenance file by hand as we mangle the name of the
chart archive. However, this also provides better user experience (for
the release manager) as gpg version 2.1 and later are supported.
2021-03-17 07:48:22 +02:00

130 lines
3.3 KiB
Bash
Executable file

#!/bin/bash -e
set -o pipefail
this=`basename $0`
usage () {
cat << EOF
Usage: $this [-h] RELEASE_VERSION GPG_KEY
Options:
-h show this help and exit
Example:
$this v0.1.2 "Jane Doe <jane.doe@example.com>"
NOTE: The GPG key should be associated with the signer's Github account.
EOF
}
sign_helm_chart() {
local chart="$1"
echo "Signing Helm chart $chart"
local sha256=`openssl dgst -sha256 "$chart" | awk '{ print $2 }'`
local yaml=`tar xf $chart -O node-feature-discovery/Chart.yaml`
echo "$yaml
...
files:
$chart: sha256:$sha256" | gpg -u "$key" --clearsign -o "$chart.prov"
}
#
# Parse command line
#
while getopts "h" opt; do
case $opt in
h) usage
exit 0
;;
*) usage
exit 1
;;
esac
done
shift "$((OPTIND - 1))"
# Check that no extra args were provided
if [ $# -ne 2 ]; then
if [ $# -lt 2 ]; then
echo -e "ERROR: too few arguments\n"
else
echo -e "ERROR: unknown arguments: ${@:3}\n"
fi
usage
exit 1
fi
release=$1
key="$2"
shift 2
container_image=k8s.gcr.io/nfd/node-feature-discovery:$release
#
# Check/parse release number
#
if [ -z "$release" ]; then
echo -e "ERROR: missing RELEASE_VERSION\n"
usage
exit 1
fi
if [[ $release =~ ^(v[0-9]+\.[0-9]+)(\..+)?$ ]]; then
docs_version=${BASH_REMATCH[1]}
semver=${release:1}
else
echo -e "ERROR: invalid RELEASE_VERSION '$release'"
exit 1
fi
# Patch docs configuration
echo Patching docs/_config.yml
sed -e s"/release:.*/release: $release/" \
-e s"/version:.*/version: $docs_version/" \
-e s"!container_image:.*!container_image: k8s.gcr.io/nfd/node-feature-discovery:$release!" \
-i docs/_config.yml
# Patch README
echo Patching README.md to refer to $release
sed s"!node-feature-discovery/v.*/!node-feature-discovery/$release/!" -i README.md
# Patch deployment templates
echo Patching '*.yaml.template' to use $container_image
sed -E -e s",^([[:space:]]+)image:.+$,\1image: $container_image," \
-e s",^([[:space:]]+)imagePullPolicy:.+$,\1imagePullPolicy: IfNotPresent," \
-i *yaml.template
# Patch Helm chart
sed -e s"/appVersion:.*/appVersion: $release/" -i deployment/node-feature-discovery/Chart.yaml
sed -e s"/pullPolicy:.*/pullPolicy: IfNotPresent/" \
-e s"!gcr.io/k8s-staging-nfd/node-feature-discovery!k8s.gcr.io/nfd/node-feature-discovery!" \
-i deployment/node-feature-discovery/values.yaml
# Patch e2e test
echo Patching test/e2e/node_feature_discovery.go flag defaults to k8s.gcr.io/nfd/node-feature-discovery and $release
sed -e s'!"nfd\.repo",.*,!"nfd.repo", "k8s.gcr.io/nfd/node-feature-discovery",!' \
-e s"!\"nfd\.tag\",.*,!\"nfd.tag\", \"$release\",!" \
-i test/e2e/node_feature_discovery.go
#
# Create release assets to be uploaded
#
helm package deployment/node-feature-discovery/ --version $semver
chart_name="node-feature-discovery-chart-$semver.tgz"
mv node-feature-discovery-$semver.tgz $chart_name
sign_helm_chart $chart_name
cat << EOF
*******************************************************************************
*** Please manually upload the following generated files to the Github release
*** page:
***
*** $chart_name
*** $chart_name.prov
***
*******************************************************************************
EOF