From 88133c361e8cc267b9e45c90f357f96084c60a0c Mon Sep 17 00:00:00 2001 From: Maisem Ali Date: Wed, 29 Jun 2022 11:45:33 -0700 Subject: [PATCH] Docker: add ALPINE.txt to manage alpine versions The goal here is to 1. make it so that the number doesn't diverge between the various places we had it defined 2. not define the number in corp, only in oss Signed-off-by: Maisem Ali --- ALPINE.txt | 1 + cmd/printdep/printdep.go | 5 +++++ version-embed.go | 3 +++ version/version_test.go | 42 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 ALPINE.txt create mode 100644 version/version_test.go diff --git a/ALPINE.txt b/ALPINE.txt new file mode 100644 index 000000000..1bc446c8a --- /dev/null +++ b/ALPINE.txt @@ -0,0 +1 @@ +3.16 \ No newline at end of file diff --git a/cmd/printdep/printdep.go b/cmd/printdep/printdep.go index 05395ee01..7d5e51a2a 100644 --- a/cmd/printdep/printdep.go +++ b/cmd/printdep/printdep.go @@ -19,10 +19,15 @@ import ( var ( goToolchain = flag.Bool("go", false, "print the supported Go toolchain git hash (a github.com/tailscale/go commit)") goToolchainURL = flag.Bool("go-url", false, "print the URL to the tarball of the Tailscale Go toolchain") + alpine = flag.Bool("alpine", false, "print the tag of alpine docker image") ) func main() { flag.Parse() + if *alpine { + fmt.Println(strings.TrimSpace(ts.AlpineDockerTag)) + return + } if *goToolchain { fmt.Println(strings.TrimSpace(ts.GoToolchainRev)) } diff --git a/version-embed.go b/version-embed.go index ba5a2abef..af9d5dd08 100644 --- a/version-embed.go +++ b/version-embed.go @@ -10,6 +10,9 @@ import _ "embed" //go:embed VERSION.txt var Version string +//go:embed ALPINE.txt +var AlpineDockerTag string + // GoToolchainRev is the git hash from github.com/tailscale/go that this release // should be built using. It may end in a newline. // diff --git a/version/version_test.go b/version/version_test.go new file mode 100644 index 000000000..38a2ae7c2 --- /dev/null +++ b/version/version_test.go @@ -0,0 +1,42 @@ +// Copyright (c) 2022 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 ( + "bytes" + "os" + "testing" + + ts "tailscale.com" +) + +func TestAlpineTag(t *testing.T) { + if tag := readAlpineTag(t, "../Dockerfile.base"); tag == "" { + t.Fatal(`"FROM alpine:" not found in Dockerfile.base`) + } else if tag != ts.AlpineDockerTag { + t.Errorf("alpine version mismatch: Dockerfile.base has %q; ALPINE.txt has %q", tag, ts.AlpineDockerTag) + } + if tag := readAlpineTag(t, "../Dockerfile"); tag == "" { + t.Fatal(`"FROM alpine:" not found in Dockerfile`) + } else if tag != ts.AlpineDockerTag { + t.Errorf("alpine version mismatch: Dockerfile has %q; ALPINE.txt has %q", tag, ts.AlpineDockerTag) + } +} + +func readAlpineTag(t *testing.T, file string) string { + f, err := os.ReadFile(file) + if err != nil { + t.Fatal(err) + } + for _, line := range bytes.Split(f, []byte{'\n'}) { + line = bytes.TrimSpace(line) + _, suf, ok := bytes.Cut(line, []byte("FROM alpine:")) + if !ok { + continue + } + return string(suf) + } + return "" +}