forked from coreos/scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtag_release
More file actions
executable file
·135 lines (111 loc) · 4.39 KB
/
tag_release
File metadata and controls
executable file
·135 lines (111 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/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_MAJOR=${TODAYS_VERSION}
DEFAULT_MINOR=0
DEFAULT_BRANCH=${FLAGS_FALSE}
CURRENT_VERSION=( ${COREOS_VERSION_ID//./ } )
# Detect if we are on a branch or still tracking master.
DEFAULT_MANIFEST=$(readlink "${REPO_MANIFESTS_DIR}/default.xml") \
|| die "Failed to read default manifest link"
if [[ "${DEFAULT_MANIFEST}" != master.xml ]]; then
DEFAULT_MAJOR=${CURRENT_VERSION[0]}
DEFAULT_BRANCH=${FLAGS_TRUE}
fi
# Increment $MINOR if we already made a major release.
if [[ ${DEFAULT_MAJOR} -eq ${CURRENT_VERSION[0]} ]]; then
DEFAULT_MINOR=$((${CURRENT_VERSION[1]} + 1))
fi
DEFINE_integer major ${DEFAULT_MAJOR} "Branch major version (aka 'build')"
DEFINE_integer minor ${DEFAULT_MINOR} "Branch revision or minor version"
DEFINE_integer patch 0 "Branch patch id, normally 0"
DEFINE_string sdk_version "${COREOS_VERSION_ID}" \
"SDK version to use, or 'keep'. (current: ${COREOS_SDK_VERSION})"
DEFINE_boolean branch ${DEFAULT_BRANCH} "Release branch, diverge from master"
DEFINE_boolean push ${FLAGS_FALSE} "Push to public manifest repository."
DEFINE_string remote "origin" "Remote name or URL to push to."
DEFINE_string signer '' "Alternate GPG key ID used to sign the tag."
# Parse flags
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
switch_to_strict_mode
# Easy to mix up versions when tagging a branch, so double check.
if [[ ${FLAGS_branch} -eq ${FLAGS_TRUE} ]]; then
if [[ ${FLAGS_major} -ne ${CURRENT_VERSION[0]} ]]; then
die_notrace "Branch major should be ${CURRENT_VERSION[0]}"
fi
if [[ ${FLAGS_minor} -le ${CURRENT_VERSION[1]} ]]; then
die_notrace "Branch minor should be greater than ${CURRENT_VERSION[1]}"
fi
fi
BRANCH_NAME="build-${FLAGS_major}"
BRANCH_VERSION="${FLAGS_major}.${FLAGS_minor}.${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
sign_args=( -s )
if [ -n "${FLAGS_signer}" ]; then
sign_args=( -u "${FLAGS_signer}" )
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
# transitional, now a file but used to be a symlink.
if [[ -L release.xml ]]; then
rm release.xml
fi
# Generate a release manifest with all revisions pinned
tmp=$(mktemp --suffix repo)
trap "rm --force ${tmp}" EXIT
repo manifest -o ${tmp} -r
# double check because repo may not exit with non-zero on failure
[[ -s ${tmp} ]] || die "repo failed to generate release.xml (${tmp})"
mv ${tmp} release.xml
git add release.xml
# Generate a branch manifest, unpinning any branched projects.
# OW! Don't hit me! I'll write this for real in Go soon I swear!
sed -e "s%revision=.*upstream=\"refs/heads/${BRANCH_NAME}\"%revision=\"refs/heads/${BRANCH_NAME}\"%" release.xml > "${BRANCH_NAME}.xml"
git add "${BRANCH_NAME}.xml"
if [[ ${FLAGS_branch} -eq ${FLAGS_TRUE} ]]; then
ln -sf "${BRANCH_NAME}.xml" default.xml
git add default.xml
fi
tee version.txt <<EOF
COREOS_VERSION=${BRANCH_VERSION}
COREOS_VERSION_ID=${BRANCH_VERSION}
COREOS_BUILD_ID=""
COREOS_SDK_VERSION=${FLAGS_sdk_version}
EOF
git add version.txt
# Help various pinentry programs find the tty.
GPG_TTY=$(tty)
export GPG_TTY
info "Creating ${BRANCH_NAME} and tag ${TAG_NAME}"
git commit -m "${BRANCH_NAME}: release ${TAG_NAME}"
git branch -f "${BRANCH_NAME}"
git tag "${sign_args[@]}" -m "CoreOS ${TAG_NAME}" "${TAG_NAME}"
if [[ ${FLAGS_push} -eq ${FLAGS_TRUE} ]]; then
master="HEAD:refs/heads/master"
if [[ ${FLAGS_branch} -eq ${FLAGS_TRUE} ]]; then
master=""
fi
git push "${FLAGS_remote}" $master \
"refs/heads/${BRANCH_NAME}" \
"refs/tags/${TAG_NAME}"
fi