add SHA for all archs to releases.json file

pull/13310/head
Steven Powell 2022-01-06 14:01:29 -08:00
parent 5fdd9a62d5
commit 2b54b45765
3 changed files with 156 additions and 8 deletions

View File

@ -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
}

View File

@ -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")

View File

@ -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)