etcd-operator/scripts/release.sh

86 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
REPOSITORY="${REPOSITORY:-git@github.com:etcd-io/etcd-operator.git}"
REGISTRY="${REGISTRY:-gcr.io/etcd-development/etcd-operator}"
CONTAINER_TOOL="${CONTAINER_TOOL:-docker}"
function main {
if [ -z "$1" ]; then
cat <<EOF
Usage: $0 [release_version]
Arguments:
release_version can be specified with our without the "v" prefix (i.e., v0.1.0 or 0.1.0)
EOF
exit
fi
local version="v${1#v}"
local image="${REGISTRY}:${version}"
build_and_push_image "${image}"
build_and_commit_dist_files "${version}" "${image}"
if ! tag_repository "$version"; then
echo "Failed to tag repository"
exit 1
fi
}
function build_and_push_image {
if "${CONTAINER_TOOL}" manifest inspect "${image}" &>/dev/null; then
echo "Skipping pushing container image. Image ${image} already exists."
return
fi
echo "Building and pushing container image ${image}"
make docker-buildx IMG="${image}"
}
function build_and_commit_dist_files {
local version="$1"
local image="$2"
echo "Building distribution YAML and committing to repository"
make build-installer IMG="${image}" VERSION_SUFFIX="-${version}"
git checkout -- config/manager/kustomization.yaml
git add "dist/install-${version}.yaml"
if git diff --cached --exit-code; then
echo "Skipping commiting distribution files. No changes to commit."
return
fi
git commit --signoff --message "Release ${version} distribution files"
git push -f "${REPOSITORY}"
}
function get_gpg_key {
local git_email
local key_id
git_email=$(git config --get user.email)
key_id=$(gpg --list-keys --with-colons "${git_email}" | \
awk -F: '/^pub:/ { print $5 }')
if [[ -z "${key_id}" ]]; then
echo "Failed to load gpg key. Is gpg set up correctly for etcd releases?"
return 2
fi
echo "${key_id}"
}
function tag_repository {
local version="$1"
if [ "$(git tag --list | grep -c "${version}")" -gt 0 ]; then
echo "Skipping tag step. git tag ${RELEASE_VERSION} already exists."
else
echo "Tagging release..."
local key_id
key_id=$(get_gpg_key) || return 2
git tag --local-user "${key_id}" --sign "${version}" --message "${version}"
git push -f "${REPOSITORY}" "${version}"
fi
}
main "$@"