blob: e0303647ac1349f7bf52fa6165c27509f626b1ee [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 (
"fmt"
"strings"
"github.com/maruel/subcommands"
"go.chromium.org/luci/auth"
"go.chromium.org/luci/auth/client/authcli"
buildbucketpb "go.chromium.org/luci/buildbucket/proto"
)
type commonFlags struct {
subcommands.CommandRunBase
buildbucketHost string
gitilesRef string
searchRange int
authFlags authcli.Flags
parsedAuthOpts auth.Options
}
func (c *commonFlags) Init(authOpts auth.Options) {
c.authFlags = authcli.Flags{}
c.authFlags.Register(&c.Flags, authOpts)
c.Flags.StringVar(&c.buildbucketHost, "host", "cr-buildbucket.appspot.com", "Buildbucket hostname")
c.Flags.StringVar(&c.gitilesRef, "gitiles-ref", "", "Optionally filter for matching gitiles ref e.g. refs/heads/main")
c.Flags.IntVar(&c.searchRange, "search-range", 25, "Number of builds to search")
}
func (c *commonFlags) checkFlags() error {
var err error
c.parsedAuthOpts, err = c.authFlags.Options()
if err != nil {
return err
}
if c.buildbucketHost == "" {
return fmt.Errorf("-host is required")
}
return nil
}
// newBuilderID returns a *buildbucketpb.BuilderID for a project/bucket/builder string.
func newBuilderID(builder string) (*buildbucketpb.BuilderID, error) {
components := strings.Split(builder, "/")
if len(components) != 3 {
return nil, fmt.Errorf("failed to parse builder %s", builder)
}
return &buildbucketpb.BuilderID{
Project: components[0],
Bucket: components[1],
Builder: components[2],
}, nil
}
// builders is a flag.Getter implementation representing a []*buildbucketpb.BuilderID.
type builders []*buildbucketpb.BuilderID
// String returns a comma-separated string representation of the builder IDs.
func (b builders) String() string {
strs := make([]string, len(b))
for i, bid := range b {
strs[i] = bid.String()
}
return strings.Join(strs, ", ")
}
// Set records seeing a flag value.
func (b *builders) Set(val string) error {
bid, err := newBuilderID(val)
if err != nil {
return err
}
*b = append(*b, bid)
return nil
}
// Get retrieves the flag value.
func (b builders) Get() any {
return []*buildbucketpb.BuilderID(b)
}