From 2b54b45765b50da158606bb4319e6fee750761b5 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Thu, 6 Jan 2022 14:01:29 -0800 Subject: [PATCH 1/5] add SHA for all archs to releases.json file --- hack/jenkins/release_update_releases_json.go | 148 ++++++++++++++++++ hack/jenkins/release_update_releases_json.sh | 15 +- .../process_last_90/process_last_90.go | 1 + 3 files changed, 156 insertions(+), 8 deletions(-) create mode 100644 hack/jenkins/release_update_releases_json.go diff --git a/hack/jenkins/release_update_releases_json.go b/hack/jenkins/release_update_releases_json.go new file mode 100644 index 0000000000..b9d577eb7c --- /dev/null +++ b/hack/jenkins/release_update_releases_json.go @@ -0,0 +1,148 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "log" + "os" +) + +type operatingSystems struct { + Darwin string `json:"darwin,omitempty"` + Linux string `json:"linux,omitempty"` + Windows string `json:"windows,omitempty"` +} + +type checksums struct { + AMD64 *operatingSystems `json:"amd64,omitempty"` + ARM *operatingSystems `json:"arm,omitempty"` + ARM64 *operatingSystems `json:"arm64,omitempty"` + PPC64LE *operatingSystems `json:"ppc64le,omitempty"` + S390X *operatingSystems `json:"s390x,omitempty"` + operatingSystems +} + +type release struct { + Checksums checksums `json:"checksums"` + Name string `json:"name"` +} + +type releases struct { + Releases []release +} + +func (r *releases) UnmarshalJSON(p []byte) error { + return json.Unmarshal(p, &r.Releases) +} + +func main() { + releasesFile := flag.String("releases-file", "", "The path to the releases file") + version := flag.String("version", "", "The version of minikube to create the entry for") + flag.Parse() + + if *releasesFile == "" || *version == "" { + fmt.Println("All flags are required and cannot be empty") + flag.PrintDefaults() + return + } + + r, err := getReleases(*releasesFile) + if err != nil { + log.Fatal(err) + } + + e := createBareRelease(*version) + + shaMap := getSHAMap(&e.Checksums) + for os, archs := range shaMap { + for arch, sumVars := range archs { + sha, err := getSHA(os, arch) + if err != nil { + log.Fatal(err) + } + for _, sumVar := range sumVars { + *sumVar = sha + } + + } + } + + r.Releases = append([]release{e}, r.Releases...) + + if err := updateJSON(*releasesFile, r); err != nil { + log.Fatal(err) + } +} + +func getReleases(path string) (releases, error) { + r := releases{} + + b, err := os.ReadFile(path) + if err != nil { + return r, fmt.Errorf("failed to read in releases file %q: %v", path, err) + } + + if err := json.Unmarshal(b, &r); err != nil { + return r, fmt.Errorf("failed to unmarshal releases file: %v", err) + } + + return r, nil +} + +func createBareRelease(name string) release { + return release{ + Checksums: checksums{ + AMD64: &operatingSystems{}, + ARM: &operatingSystems{}, + ARM64: &operatingSystems{}, + PPC64LE: &operatingSystems{}, + S390X: &operatingSystems{}, + }, + Name: name, + } +} + +func getSHAMap(c *checksums) map[string]map[string][]*string { + return map[string]map[string][]*string{ + "darwin": { + "amd64": {&c.AMD64.Darwin, &c.Darwin}, + "arm64": {&c.ARM64.Darwin}, + }, + "linux": { + "amd64": {&c.AMD64.Linux, &c.Linux}, + "arm": {&c.ARM.Linux}, + "arm64": {&c.ARM64.Linux}, + "ppc64le": {&c.PPC64LE.Linux}, + "s390x": {&c.S390X.Linux}, + }, + "windows": { + "amd64": {&c.AMD64.Windows, &c.Windows}, + }, + } +} + +func getSHA(operatingSystem, arch string) (string, error) { + if operatingSystem == "windows" { + arch += ".exe" + } + //filePath := fmt.Sprintf("out/minikube-%s-%s.sha256", operatingSystem, arch) + filePath := "out/minikube-test.sha256" + b, err := os.ReadFile(filePath) + if err != nil { + return "", fmt.Errorf("failed to read file %q: %v", filePath, err) + } + return string(b), nil +} + +func updateJSON(path string, r releases) error { + b, err := json.MarshalIndent(r.Releases, "", " ") + if err != nil { + return fmt.Errorf("failed to marshal releases to JSON: %v", err) + } + + if err := os.WriteFile(path, b, 0644); err != nil { + return fmt.Errorf("failed to write JSON to file: %v", err) + } + return nil +} diff --git a/hack/jenkins/release_update_releases_json.sh b/hack/jenkins/release_update_releases_json.sh index 71a10602d4..a8fc98d0dd 100755 --- a/hack/jenkins/release_update_releases_json.sh +++ b/hack/jenkins/release_update_releases_json.sh @@ -24,11 +24,12 @@ set -e -export TAGNAME=v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} +./hack/jenkins/installers/check_install_golang.sh "/usr/local" -export DARWIN_SHA256=$(cat out/minikube-darwin-amd64.sha256) -export LINUX_SHA256=$(cat out/minikube-linux-amd64.sha256) -export WINDOWS_SHA256=$(cat out/minikube-windows-amd64.exe.sha256) +# Get directory of script. +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +export TAGNAME=v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} # Update releases.json w/ new release in gcs and github git config user.name "minikube-bot" @@ -39,8 +40,7 @@ git checkout -b "jenkins-releases.json-${TAGNAME}" git status if ! [[ "${VERSION_BUILD}" =~ ^[0-9]+$ ]]; then - #Prepends the new version to the release-beta.json file - sed -i "0,/{/s/{/{\n \"name\": \"${TAGNAME}\",\n \"checksums\": {\n \"darwin\": \"${DARWIN_SHA256}\",\n \"linux\": \"${LINUX_SHA256}\",\n \"windows\": \"${WINDOWS_SHA256}\"\n }\n },\n {"/ deploy/minikube/releases-beta.json + go run "${DIR}/release_update_releases_json.go" --releases-file deploy/minikube/releases-beta.json --version "$TAGNAME" git add -A git commit -m "Update releases-beta.json to include ${TAGNAME}" @@ -53,8 +53,7 @@ if ! [[ "${VERSION_BUILD}" =~ ^[0-9]+$ ]]; then # Upload file to GCS so that minikube can see the new version gsutil cp deploy/minikube/releases-beta.json gs://minikube/releases-beta.json else - #Prepends the new version to the release.json file - sed -i "0,/{/s/{/{\n \"name\": \"${TAGNAME}\",\n \"checksums\": {\n \"darwin\": \"${DARWIN_SHA256}\",\n \"linux\": \"${LINUX_SHA256}\",\n \"windows\": \"${WINDOWS_SHA256}\"\n }\n },\n {"/ deploy/minikube/releases.json + go run "${DIR}/release_update_releases_json.go" --releases-file deploy/minikube/releases.json --version "$TAGNAME" #Update the front page of our documentation now=$(date +"%b %d, %Y") diff --git a/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go b/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go index 67e6bc8aa2..6c93acee15 100644 --- a/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go +++ b/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go @@ -34,6 +34,7 @@ func main() { if *dataFile == "" || *dataLast90File == "" { fmt.Println("All flags are required and cannot be empty") flag.PrintDefaults() + return } data, err := os.Open(*dataFile) From 81a3f1ac277be792381e380d725c54defb905c44 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Thu, 6 Jan 2022 14:05:28 -0800 Subject: [PATCH 2/5] remove testing code --- hack/jenkins/release_update_releases_json.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hack/jenkins/release_update_releases_json.go b/hack/jenkins/release_update_releases_json.go index b9d577eb7c..17846517e4 100644 --- a/hack/jenkins/release_update_releases_json.go +++ b/hack/jenkins/release_update_releases_json.go @@ -126,8 +126,7 @@ func getSHA(operatingSystem, arch string) (string, error) { if operatingSystem == "windows" { arch += ".exe" } - //filePath := fmt.Sprintf("out/minikube-%s-%s.sha256", operatingSystem, arch) - filePath := "out/minikube-test.sha256" + filePath := fmt.Sprintf("out/minikube-%s-%s.sha256", operatingSystem, arch) b, err := os.ReadFile(filePath) if err != nil { return "", fmt.Errorf("failed to read file %q: %v", filePath, err) From 7eac7a544890db7926f2eff3ab3d9ddadffbfdcf Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Thu, 6 Jan 2022 14:06:43 -0800 Subject: [PATCH 3/5] add boilerplate --- hack/jenkins/release_update_releases_json.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hack/jenkins/release_update_releases_json.go b/hack/jenkins/release_update_releases_json.go index 17846517e4..8e4da7e434 100644 --- a/hack/jenkins/release_update_releases_json.go +++ b/hack/jenkins/release_update_releases_json.go @@ -1,3 +1,19 @@ +/* +Copyright 2022 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package main import ( From 2aef5c60eecc2314b955f62724f28dc062898c01 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Thu, 6 Jan 2022 14:12:08 -0800 Subject: [PATCH 4/5] trim off new line character --- hack/jenkins/release_update_releases_json.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hack/jenkins/release_update_releases_json.go b/hack/jenkins/release_update_releases_json.go index 8e4da7e434..438c21398b 100644 --- a/hack/jenkins/release_update_releases_json.go +++ b/hack/jenkins/release_update_releases_json.go @@ -147,7 +147,8 @@ func getSHA(operatingSystem, arch string) (string, error) { if err != nil { return "", fmt.Errorf("failed to read file %q: %v", filePath, err) } - return string(b), nil + // trim off new line character + return string(b[:len(b)-1]), nil } func updateJSON(path string, r releases) error { From ea01e981358dbaa0112c8e57e32f7572d997d333 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Thu, 6 Jan 2022 14:53:19 -0800 Subject: [PATCH 5/5] return non-zero exit code on improper flag usage --- hack/jenkins/release_update_releases_json.go | 2 +- .../jenkins/test-flake-chart/process_last_90/process_last_90.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hack/jenkins/release_update_releases_json.go b/hack/jenkins/release_update_releases_json.go index 438c21398b..c2ccd6f50d 100644 --- a/hack/jenkins/release_update_releases_json.go +++ b/hack/jenkins/release_update_releases_json.go @@ -60,7 +60,7 @@ func main() { if *releasesFile == "" || *version == "" { fmt.Println("All flags are required and cannot be empty") flag.PrintDefaults() - return + os.Exit(1) } r, err := getReleases(*releasesFile) diff --git a/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go b/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go index 6c93acee15..a7eb60b620 100644 --- a/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go +++ b/hack/jenkins/test-flake-chart/process_last_90/process_last_90.go @@ -34,7 +34,7 @@ func main() { if *dataFile == "" || *dataLast90File == "" { fmt.Println("All flags are required and cannot be empty") flag.PrintDefaults() - return + os.Exit(1) } data, err := os.Open(*dataFile)