flatcar-scripts/tag_release
Michael Marineau b841916b74 fix(tag_release): Add a few sanity checks.
- it shouldn't be possible to set the SDK version to the same as the new
  tag's version. The SDK must always be a previous build.
- don't fail if there isn't any old manifests to git rm.

There are ways to improve, it'd be sexy if it was truly safe and we
could throw around annoying terms like idempotent to make this kind of
sequence just work but doesn't yet: tag_release; tag_release --push
2013-12-07 23:17:41 -08:00

83 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2013 The CoreOS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
SCRIPT_ROOT=$(dirname $(readlink -f "$0"))
. "${SCRIPT_ROOT}/common.sh" || exit 1
# Default to the current release for the new SDK version (minus dev build id)
DEFAULT_SDK="${COREOS_VERSION_STRING%+*}"
DEFINE_integer build "${TODAYS_VERSION}" \
"Branch name (aka 'build'), should be days since 2013-7-1"
DEFINE_integer branch 0 "Branch revision, normally 0"
DEFINE_integer patch 0 "Branch patch id, normally 0"
DEFINE_string track "dev-channel" "Set the given track to this new branch"
DEFINE_string sdk_version "${DEFAULT_SDK}" \
"Set the SDK version to use. (current: ${COREOS_SDK_VERSION})"
DEFINE_boolean push ${FLAGS_FALSE} "Push to public manifest repository."
DEFINE_string remote "origin" "Remote name or URL to push to."
# Parse flags
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
switch_to_strict_mode
BRANCH_NAME="build-${FLAGS_build}"
BRANCH_VERSION="${FLAGS_build}.${FLAGS_branch}.${FLAGS_patch}"
TAG_NAME="v${BRANCH_VERSION}"
if [[ "${FLAGS_sdk_version}" == keep || "${FLAGS_sdk_version}" == current ]]
then
FLAGS_sdk_version="${COREOS_SDK_VERSION}"
fi
if [[ "${FLAGS_sdk_version}" == "${BRANCH_VERSION}" ]]; then
die_notrace "SDK version must be different from the new tag's version!" \
" Conflicting version: ${BRANCH_VERSION}" \
"Try --sdk_version keep to use the existing SDK."
fi
cd "${REPO_MANIFESTS_DIR}"
# Clean up existing branch manifest(s) excluding:
# - the current branch if the file already exists.
# - one previous branch, useful for comparing releases.
OLD_BRANCHES=$(find -maxdepth 1 -name 'build-*.xml' \
-not -name "${BRANCH_NAME}.xml" | sort -rn | tail -n -1)
if [[ -n "${OLD_BRANCHES}" ]]; then
git rm -f ${OLD_BRANCHES}
fi
repo manifest -o "${BRANCH_NAME}.xml" -r
tee version.txt <<EOF
COREOS_BUILD=${FLAGS_build}
COREOS_BRANCH=${FLAGS_branch}
COREOS_PATCH=${FLAGS_patch}
COREOS_SDK_VERSION=${FLAGS_sdk_version}
EOF
ln -sf "${BRANCH_NAME}.xml" release.xml
git add "${BRANCH_NAME}.xml" release.xml version.txt
info "Creating ${BRANCH_NAME} and tag ${TAG_NAME}"
git commit -m "add(${BRANCH_NAME}): Add manifest for ${TAG_NAME}"
git branch -f "${BRANCH_NAME}"
git tag -m "CoreOS ${TAG_NAME}" "${TAG_NAME}"
PUSH_TRACK=
if [[ -n "${FLAGS_track}" ]]; then
git branch -f "${FLAGS_track}"
info "Updating track ${FLAGS_track}"
PUSH_TRACK=1
fi
if [[ ${FLAGS_push} -eq ${FLAGS_TRUE} ]]; then
git push "${FLAGS_remote}" \
"HEAD:refs/heads/master" \
"refs/heads/${BRANCH_NAME}" \
${PUSH_TRACK:+"+refs/heads/${FLAGS_track}"} \
"refs/tags/${TAG_NAME}"
fi