CI: Split `/bin/build artifacts *` subcommand (#66005)
* Split go files
* Modify publishartifacts.go
* Split main
* FIXME: Temp add GCSCopy to gcloud/storage
* Fix lint
* Exported flags
* Update starlark - make drone
* Further backend lint fixes
* Add fallback_test.go
* Fix go imports order
* make drone
* Remove GCSCopy from static assets
* Remove GCSCopy from storybook
* Fix lint
* Remove GCSCopy
* Remove success logline
* drone yaml cleanup
* Add artifacts-editions flag
* Fix starlark
* Add default sting slice in artifacts packages command
(cherry picked from commit 24d348f804)
# Conflicts:
# .drone.yml
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package env
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
// RequireListWithEnvFallback first checks the CLI for a flag with the required
|
|
// name. If this is empty, it falls back to taking the environment variable.
|
|
// Sadly, we cannot use cli.Flag.EnvVars for this due to it potentially leaking
|
|
// environment variables as default values in usage-errors.
|
|
func RequireListWithEnvFallback(cctx *cli.Context, name string, envName string) ([]string, error) {
|
|
result := cctx.StringSlice(name)
|
|
if len(result) == 0 {
|
|
for _, v := range strings.Split(os.Getenv(envName), ",") {
|
|
value := strings.TrimSpace(v)
|
|
if value != "" {
|
|
result = append(result, value)
|
|
}
|
|
}
|
|
}
|
|
if len(result) == 0 {
|
|
return nil, cli.Exit(fmt.Sprintf("Required flag (%s) or environment variable (%s) not set", name, envName), 1)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func RequireStringWithEnvFallback(cctx *cli.Context, name string, envName string) (string, error) {
|
|
result := cctx.String(name)
|
|
if result == "" {
|
|
result = os.Getenv(envName)
|
|
}
|
|
if result == "" {
|
|
return "", cli.Exit(fmt.Sprintf("Required flag (%s) or environment variable (%s) not set", name, envName), 1)
|
|
}
|
|
return result, nil
|
|
}
|