blob: 5290d455e656ce25e703295654f6c801df152364 [file] [log] [blame]
// Copyright 2021 The Go 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 main
import (
"flag"
"fmt"
"io"
"os"
"os/exec"
"golang.org/x/benchmarks/sweet/cli/assets"
"golang.org/x/benchmarks/sweet/common"
"golang.org/x/benchmarks/sweet/common/log"
)
const (
putUsage = `Uploads a new version of the benchmark assets to GCS.
Usage: %s put [flags]
`
)
type putCmd struct {
force bool
bucket string
assetsDir string
assetsHashFile string
version string
}
func (*putCmd) Name() string { return "put" }
func (*putCmd) Synopsis() string {
return "Uploads a new version of the benchmark assets."
}
func (*putCmd) PrintUsage(w io.Writer, base string) {
fmt.Fprintf(w, putUsage, base)
}
func (c *putCmd) SetFlags(f *flag.FlagSet) {
f.StringVar(&c.version, "version", common.Version, "the version to upload assets for")
f.StringVar(&c.assetsDir, "assets-dir", "./assets", "assets directory to zip and upload")
}
func (c *putCmd) Run(_ []string) error {
log.SetActivityLog(true)
if err := assets.ValidateVersion(c.version); err != nil {
return err
}
log.Printf("Uploading %s to CIPD and tagging with version: %s", c.assetsDir, c.version)
// Just shell out to cipd. The put subcommand is intended to be used by an expert.
createCmd := exec.Command("cipd", "create", "-in", c.assetsDir, "-name", "golang/sweet/assets", "-tag", "version:"+assets.ToCIPDVersion(c.version), "-compression-level", "9")
createCmd.Stdout = os.Stdout
createCmd.Stderr = os.Stderr
if err := createCmd.Run(); err != nil {
return fmt.Errorf("executing `%s`: %v", createCmd, err)
}
return nil
}