Signed-off-by: David Anderson <danderson@tailscale.com>main
parent
a321c24667
commit
5088af68cf
@ -1,9 +0,0 @@ |
|||||||
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Placeholder that indicates this directory is a valid go package,
|
|
||||||
// but that redo must 'redo all' in this directory before it can
|
|
||||||
// be imported.
|
|
||||||
|
|
||||||
package version |
|
||||||
@ -1,2 +0,0 @@ |
|||||||
redo-ifchange ver.go version.xcconfig version.h |
|
||||||
|
|
||||||
@ -1 +0,0 @@ |
|||||||
rm -f *~ .*~ describe.txt long.txt short.txt version.xcconfig ver.go version.h version version-info.sh |
|
||||||
@ -1,102 +0,0 @@ |
|||||||
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package version |
|
||||||
|
|
||||||
import ( |
|
||||||
"fmt" |
|
||||||
"os/exec" |
|
||||||
"runtime" |
|
||||||
"strconv" |
|
||||||
"strings" |
|
||||||
"testing" |
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp" |
|
||||||
) |
|
||||||
|
|
||||||
func mkversion(t *testing.T, gitHash, otherHash string, major, minor, patch, changeCount int) (string, bool) { |
|
||||||
t.Helper() |
|
||||||
bs, err := exec.Command("./version.sh", gitHash, otherHash, strconv.Itoa(major), strconv.Itoa(minor), strconv.Itoa(patch), strconv.Itoa(changeCount)).CombinedOutput() |
|
||||||
out := strings.TrimSpace(string(bs)) |
|
||||||
if err != nil { |
|
||||||
return out, false |
|
||||||
} |
|
||||||
return out, true |
|
||||||
} |
|
||||||
|
|
||||||
func TestMkversion(t *testing.T) { |
|
||||||
if runtime.GOOS == "windows" { |
|
||||||
t.Skip("skip test on Windows, because there is no shell to execute mkversion.sh.") |
|
||||||
} |
|
||||||
tests := []struct { |
|
||||||
gitHash, otherHash string |
|
||||||
major, minor, patch, changeCount int |
|
||||||
want string |
|
||||||
}{ |
|
||||||
{"abcdef", "", 0, 98, 0, 0, ` |
|
||||||
VERSION_SHORT="0.98.0" |
|
||||||
VERSION_LONG="0.98.0-tabcdef" |
|
||||||
VERSION_GIT_HASH="abcdef" |
|
||||||
VERSION_EXTRA_HASH="" |
|
||||||
VERSION_XCODE="100.98.0" |
|
||||||
VERSION_WINRES="0,98,0,0"`}, |
|
||||||
{"abcdef", "", 0, 98, 1, 0, ` |
|
||||||
VERSION_SHORT="0.98.1" |
|
||||||
VERSION_LONG="0.98.1-tabcdef" |
|
||||||
VERSION_GIT_HASH="abcdef" |
|
||||||
VERSION_EXTRA_HASH="" |
|
||||||
VERSION_XCODE="100.98.1" |
|
||||||
VERSION_WINRES="0,98,1,0"`}, |
|
||||||
{"abcdef", "", 1, 1, 0, 37, ` |
|
||||||
VERSION_SHORT="1.1.1037" |
|
||||||
VERSION_LONG="1.1.1037-tabcdef" |
|
||||||
VERSION_GIT_HASH="abcdef" |
|
||||||
VERSION_EXTRA_HASH="" |
|
||||||
VERSION_XCODE="101.1.1037" |
|
||||||
VERSION_WINRES="1,1,1037,0"`}, |
|
||||||
{"abcdef", "", 1, 2, 9, 0, ` |
|
||||||
VERSION_SHORT="1.2.9" |
|
||||||
VERSION_LONG="1.2.9-tabcdef" |
|
||||||
VERSION_GIT_HASH="abcdef" |
|
||||||
VERSION_EXTRA_HASH="" |
|
||||||
VERSION_XCODE="101.2.9" |
|
||||||
VERSION_WINRES="1,2,9,0"`}, |
|
||||||
{"abcdef", "", 1, 15, 0, 129, ` |
|
||||||
VERSION_SHORT="1.15.129" |
|
||||||
VERSION_LONG="1.15.129-tabcdef" |
|
||||||
VERSION_GIT_HASH="abcdef" |
|
||||||
VERSION_EXTRA_HASH="" |
|
||||||
VERSION_XCODE="101.15.129" |
|
||||||
VERSION_WINRES="1,15,129,0"`}, |
|
||||||
{"abcdef", "", 1, 2, 0, 17, ` |
|
||||||
VERSION_SHORT="1.2.0" |
|
||||||
VERSION_LONG="1.2.0-17-tabcdef" |
|
||||||
VERSION_GIT_HASH="abcdef" |
|
||||||
VERSION_EXTRA_HASH="" |
|
||||||
VERSION_XCODE="101.2.0" |
|
||||||
VERSION_WINRES="1,2,0,0"`}, |
|
||||||
{"abcdef", "defghi", 1, 15, 0, 129, ` |
|
||||||
VERSION_SHORT="1.15.129" |
|
||||||
VERSION_LONG="1.15.129-tabcdef-gdefghi" |
|
||||||
VERSION_GIT_HASH="abcdef" |
|
||||||
VERSION_EXTRA_HASH="defghi" |
|
||||||
VERSION_XCODE="101.15.129" |
|
||||||
VERSION_WINRES="1,15,129,0"`}, |
|
||||||
{"abcdef", "", 0, 99, 5, 0, ""}, // unstable, patch number not allowed
|
|
||||||
{"abcdef", "", 0, 99, 5, 123, ""}, // unstable, patch number not allowed
|
|
||||||
} |
|
||||||
|
|
||||||
for _, test := range tests { |
|
||||||
want := strings.ReplaceAll(strings.TrimSpace(test.want), " ", "") |
|
||||||
got, ok := mkversion(t, test.gitHash, test.otherHash, test.major, test.minor, test.patch, test.changeCount) |
|
||||||
invoc := fmt.Sprintf("version.sh %s %s %d %d %d %d", test.gitHash, test.otherHash, test.major, test.minor, test.patch, test.changeCount) |
|
||||||
if want == "" && ok { |
|
||||||
t.Errorf("%s ok=true, want false", invoc) |
|
||||||
continue |
|
||||||
} |
|
||||||
if diff := cmp.Diff(got, want); want != "" && diff != "" { |
|
||||||
t.Errorf("%s wrong output (-got+want):\n%s", invoc, diff) |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,9 +0,0 @@ |
|||||||
redo-ifchange version-info.sh ver.go.in |
|
||||||
|
|
||||||
. ./version-info.sh |
|
||||||
|
|
||||||
sed -e "s/{LONGVER}/$VERSION_LONG/g" \ |
|
||||||
-e "s/{SHORTVER}/$VERSION_SHORT/g" \ |
|
||||||
-e "s/{GITCOMMIT}/$VERSION_GIT_HASH/g" \ |
|
||||||
-e "s/{EXTRAGITCOMMIT}/$VERSION_EXTRA_HASH/g" \ |
|
||||||
<ver.go.in >$3 |
|
||||||
@ -1,14 +0,0 @@ |
|||||||
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build redo
|
|
||||||
|
|
||||||
package version |
|
||||||
|
|
||||||
const Long = "{LONGVER}" |
|
||||||
const Short = "{SHORTVER}" |
|
||||||
const LONG = Long |
|
||||||
const SHORT = Short |
|
||||||
const GitCommit = "{GITCOMMIT}" |
|
||||||
const ExtraGitCommit = "{EXTRAGITCOMMIT}" |
|
||||||
@ -1,3 +0,0 @@ |
|||||||
./version.sh ../.. >$3 |
|
||||||
redo-always |
|
||||||
redo-stamp <$3 |
|
||||||
@ -1,9 +0,0 @@ |
|||||||
redo-ifchange version-info.sh |
|
||||||
|
|
||||||
. ./version-info.sh |
|
||||||
|
|
||||||
cat >$3 <<EOF |
|
||||||
#define TAILSCALE_VERSION_LONG "$VERSION_LONG" |
|
||||||
#define TAILSCALE_VERSION_SHORT "$VERSION_SHORT" |
|
||||||
#define TAILSCALE_VERSION_WIN_RES $VERSION_WINRES |
|
||||||
EOF |
|
||||||
@ -1,130 +0,0 @@ |
|||||||
#!/bin/sh |
|
||||||
set -eu |
|
||||||
|
|
||||||
# Return the commitid of the given ref in the given repo dir. If the worktree |
|
||||||
# or index is dirty, also appends -dirty. |
|
||||||
# |
|
||||||
# $ git_hash_dirty ../.. HEAD |
|
||||||
# 1be01ddc6e430ca3aa9beea3587d16750efb3241-dirty |
|
||||||
git_hash_dirty() { |
|
||||||
( |
|
||||||
cd "$1" |
|
||||||
x=$(git rev-parse HEAD) |
|
||||||
if ! git diff-index --quiet HEAD; then |
|
||||||
x="$x-dirty" |
|
||||||
fi |
|
||||||
echo "$x" |
|
||||||
) |
|
||||||
} |
|
||||||
|
|
||||||
case $# in |
|
||||||
0|1) |
|
||||||
# extra_hash_or_dir is either: |
|
||||||
# - a git commitid |
|
||||||
# or |
|
||||||
# - the path to a git repo from which to calculate the real hash. |
|
||||||
# |
|
||||||
# It gets embedded as an additional commit hash in built |
|
||||||
# binaries, to help us locate the exact set of tools and code |
|
||||||
# that were used. |
|
||||||
extra_hash_or_dir="${1:-}" |
|
||||||
if [ -z "$extra_hash_or_dir" ]; then |
|
||||||
# Nothing, empty extra hash is fine. |
|
||||||
extra_hash="" |
|
||||||
elif [ -e "$extra_hash_or_dir/.git" ]; then |
|
||||||
extra_hash=$(git_hash_dirty "$extra_hash_or_dir" HEAD) |
|
||||||
elif ! expr "$extra_hash_or_dir" : "^[0-9a-f]*$"; then |
|
||||||
echo "Invalid extra hash '$extra_hash_or_dir', must be a git commit or path to a git repo" >&2 |
|
||||||
exit 1 |
|
||||||
else |
|
||||||
extra_hash="$extra_hash_or_dir" |
|
||||||
fi |
|
||||||
|
|
||||||
# Load the base version and optional corresponding git hash |
|
||||||
# from the VERSION file. If there is no git hash in the file, |
|
||||||
# we use the hash of the last change to the VERSION file. |
|
||||||
version_file="$(dirname $0)/../VERSION.txt" |
|
||||||
IFS=".$IFS" read -r major minor patch base_git_hash <"$version_file" |
|
||||||
if [ -z "$base_git_hash" ]; then |
|
||||||
base_git_hash=$(git rev-list --max-count=1 HEAD -- "$version_file") |
|
||||||
fi |
|
||||||
|
|
||||||
git_hash=$(git_hash_dirty . HEAD) |
|
||||||
# The number of extra commits between the release base to git_hash. |
|
||||||
change_count=$(git rev-list --count HEAD "^$base_git_hash") |
|
||||||
;; |
|
||||||
6) |
|
||||||
# Test mode: rather than run git commands and whatnot, take in |
|
||||||
# all the version pieces as arguments. |
|
||||||
git_hash=$1 |
|
||||||
extra_hash=$2 |
|
||||||
major=$3 |
|
||||||
minor=$4 |
|
||||||
patch=$5 |
|
||||||
change_count=$6 |
|
||||||
;; |
|
||||||
*) |
|
||||||
echo "Usage: $0 [extra-git-commitid-or-dir]" |
|
||||||
exit 1 |
|
||||||
esac |
|
||||||
|
|
||||||
# Shortened versions of git hashes, so that they fit neatly into an |
|
||||||
# "elongated" but still human-readable version number. |
|
||||||
short_git_hash=$(echo "$git_hash" | cut -c1-9) |
|
||||||
short_extra_hash=$(echo "$extra_hash" | cut -c1-9) |
|
||||||
|
|
||||||
# Convert major/minor/patch/change_count into an adjusted |
|
||||||
# major/minor/patch. This block is where all our policies on |
|
||||||
# versioning are. |
|
||||||
if expr "$minor" : "[0-9]*[13579]$" >/dev/null; then |
|
||||||
# Odd minor numbers are unstable builds. |
|
||||||
if [ "$patch" != "0" ]; then |
|
||||||
# This is a fatal error, because a non-zero patch number |
|
||||||
# indicates that we created an unstable VERSION.txt in violation |
|
||||||
# of our versioning policy, and we want to blow up loudly to |
|
||||||
# get that fixed. |
|
||||||
echo "Unstable release $major.$minor.$patch has a non-zero patch number, which is not allowed" >&2 |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
patch="$change_count" |
|
||||||
change_suffix="" |
|
||||||
elif [ "$change_count" != "0" ]; then |
|
||||||
# Even minor numbers are stable builds, but stable builds are |
|
||||||
# supposed to have a zero change count. Therefore, we're currently |
|
||||||
# describing a commit that's on a release branch, but hasn't been |
|
||||||
# tagged as a patch release yet. |
|
||||||
# |
|
||||||
# We used to change the version number to 0.0.0 in that case, but that |
|
||||||
# caused some features to get disabled due to the low version number. |
|
||||||
# Instead, add yet another suffix to the version number, with a change |
|
||||||
# count. |
|
||||||
change_suffix="-$change_count" |
|
||||||
else |
|
||||||
# Even minor number with no extra changes. |
|
||||||
change_suffix="" |
|
||||||
fi |
|
||||||
|
|
||||||
# Hack for 1.1: add 1000 to the patch number. We switched from using |
|
||||||
# the proprietary repo's change_count over to using the OSS repo's |
|
||||||
# change_count, and this was necessary to avoid a backwards jump in |
|
||||||
# release numbers. |
|
||||||
if [ "$major.$minor" = "1.1" ]; then |
|
||||||
patch="$((patch + 1000))" |
|
||||||
fi |
|
||||||
|
|
||||||
# At this point, the version number correctly reflects our |
|
||||||
# policies. All that remains is to output the various vars that other |
|
||||||
# code can use to embed version data. |
|
||||||
if [ -z "$extra_hash" ]; then |
|
||||||
long_version_suffix="$change_suffix-t$short_git_hash" |
|
||||||
else |
|
||||||
long_version_suffix="$change_suffix-t$short_git_hash-g$short_extra_hash" |
|
||||||
fi |
|
||||||
cat <<EOF |
|
||||||
VERSION_SHORT="$major.$minor.$patch" |
|
||||||
VERSION_LONG="$major.$minor.$patch$long_version_suffix" |
|
||||||
VERSION_GIT_HASH="$git_hash" |
|
||||||
VERSION_EXTRA_HASH="$extra_hash" |
|
||||||
VERSION_XCODE="$((major + 100)).$minor.$patch" |
|
||||||
VERSION_WINRES="$major,$minor,$patch,0" |
|
||||||
EOF |
|
||||||
@ -1,14 +0,0 @@ |
|||||||
redo-ifchange version-info.sh |
|
||||||
|
|
||||||
. ./version-info.sh |
|
||||||
|
|
||||||
# CFBundleShortVersionString: the "short name" used in the App Store. |
|
||||||
# eg. 0.92.98 |
|
||||||
echo "VERSION_NAME = $VERSION_SHORT" |
|
||||||
# CFBundleVersion: the build number. Needs to be 3 numeric sections |
|
||||||
# that increment for each release according to SemVer rules. |
|
||||||
# |
|
||||||
# We start counting at 100 because we submitted using raw build |
|
||||||
# numbers before, and Apple doesn't let you start over. e.g. 0.98.3 |
|
||||||
# -> 100.98.3 |
|
||||||
echo "VERSION_ID = $VERSION_XCODE" |
|
||||||
@ -1,17 +0,0 @@ |
|||||||
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !redo,xversion
|
|
||||||
|
|
||||||
package version |
|
||||||
|
|
||||||
// Replaced at build time with the Go linker flag -X. See
|
|
||||||
// ../build_dist.sh for example usage, and version.go for field
|
|
||||||
// documentation.
|
|
||||||
var Long string = "<not set>" |
|
||||||
var Short string = "<not set>" |
|
||||||
var LONG = Long |
|
||||||
var SHORT = Short |
|
||||||
var GitCommit = "" |
|
||||||
var ExtraGitCommit = "" |
|
||||||
Loading…
Reference in new issue