internal/flags/create_flags.go (120 lines of code) (raw):

package flags import ( "github.com/urfave/cli/v2" "github.com/urfave/cli/v2/altsrc" ) // PassedInFlags abstracts flags and before hook to specify in cli.Command, // when creating a new release either with a file or with parameters. type PassedInFlags interface { ListFlags() *[]cli.Flag BeforeHook([]cli.Flag) cli.BeforeFunc } // ParameterFlag is a struct used when instantiating PassedInFlags upon passing release data as parameters. type ParameterFlag struct{} // FileFlag is a struct used when instantiating PassedInFlags upon passing a file as parameter. type FileFlag struct{} // This is the BeforeHook implementation for ParameterFlag. func (ParameterFlag) BeforeHook(flags []cli.Flag) cli.BeforeFunc { return nil } // This is the BeforeHook implementation for FileFlag. func (FileFlag) BeforeHook(flags []cli.Flag) cli.BeforeFunc { return altsrc.InitInputSourceWithContext(flags, altsrc.NewYamlSourceFromFlagFunc(File)) } // ListFlags implementation for ParameterFlag. func (ParameterFlag) ListFlags() *[]cli.Flag { return &[]cli.Flag{ tagNameFlag(true, false), nameFlag(false), descriptionFlag(false), tagMessageFlag(false), refFlag(false), assetsLinkFlag(false), milestoneFlag(false), releasedAtFlag(false), catalogPublishFlag(false), } } // ListFlags implementation for FileFlag. func (FileFlag) ListFlags() *[]cli.Flag { return &[]cli.Flag{ altsrc.NewStringFlag(tagNameFlag(false, true)), altsrc.NewStringFlag(nameFlag(true)), altsrc.NewStringFlag(descriptionFlag(true)), altsrc.NewStringFlag(tagMessageFlag(true)), altsrc.NewStringFlag(refFlag(true)), altsrc.NewStringSliceFlag(assetsLinkFlag(true)), altsrc.NewStringSliceFlag(milestoneFlag(true)), altsrc.NewStringFlag(releasedAtFlag(true)), altsrc.NewBoolFlag(catalogPublishFlag(true)), &cli.StringFlag{ Name: File, Usage: `YML file which content holds data to create a release. Does not need use of any other parameters.`, Required: true, }, } } func nameFlag(hidden bool) *cli.StringFlag { return &cli.StringFlag{ Name: Name, Usage: "The release name", Required: false, Hidden: hidden, } } func descriptionFlag(hidden bool) *cli.StringFlag { return &cli.StringFlag{ Name: Description, Usage: "The description of the release; you can use Markdown. A file can be used to read the description contents, must exist inside the working directory; if it contains any whitespace, it will be treated as a string", Required: false, Hidden: hidden, } } func tagNameFlag(required bool, hidden bool) *cli.StringFlag { return &cli.StringFlag{ Name: TagName, Usage: "(required) The tag the release will be created from", Required: required, EnvVars: []string{"CI_COMMIT_TAG"}, Hidden: hidden, } } func tagMessageFlag(hidden bool) *cli.StringFlag { return &cli.StringFlag{ Name: TagMessage, Usage: "Message to use if creating a new annotated tag", Required: false, Hidden: hidden, } } func refFlag(hidden bool) *cli.StringFlag { return &cli.StringFlag{ Name: Ref, Usage: "If tag_name doesn’t exist, the release will be created from ref; it can be a commit SHA, another tag name, or a branch name", Required: false, EnvVars: []string{"CI_COMMIT_SHA"}, Hidden: hidden, } } func assetsLinkFlag(hidden bool) *cli.StringSliceFlag { return &cli.StringSliceFlag{ Name: AssetsLink, Usage: `JSON string representation of an asset link; (e.g. --assets-link='{"name": "Asset1", "url":"https://<domain>/some/location/1", "type": "other", "direct_asset_path": "xzy" }' or --assets-link='[{"name": "Asset1", "url":"https://example.com/some/location/1"}, {"name": "Asset2", "url":"https://example.com/some/location/2"}]'. The filepath field is deprecated and aliased to the direct_asset_path field. If both are set the direct_asset_path takes precedence.`, Required: false, Hidden: hidden, } } func milestoneFlag(hidden bool) *cli.StringSliceFlag { return &cli.StringSliceFlag{ Name: Milestone, Usage: `List of the titles of each milestone the release is associated with (e.g. --milestone "v1.0" --milestone "v1.0-rc)"; each milestone needs to exist `, Required: false, Hidden: hidden, } } func releasedAtFlag(hidden bool) *cli.StringFlag { return &cli.StringFlag{ Name: ReleasedAt, Usage: `The date when the release will be/was ready; defaults to the current time; expected in ISO 8601 format (2019-03-15T08:00:00Z)`, Required: false, Hidden: hidden, } } func catalogPublishFlag(hidden bool) *cli.BoolFlag { return &cli.BoolFlag{ Name: CatalogPublish, Usage: `Set to true if you want to publish the catalog resource release to the CI/CD catalog`, Required: false, Hidden: hidden, } }