mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-08-31 23:01:43 +00:00
212 lines
5.6 KiB
Go
212 lines
5.6 KiB
Go
package versioneer
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
var (
|
|
flavorFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "flavor",
|
|
Value: "",
|
|
Usage: "the OS flavor (e.g. opensuse)",
|
|
EnvVars: []string{EnvVarFlavor},
|
|
}
|
|
|
|
flavorReleaseFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "flavor-release",
|
|
Value: "",
|
|
Usage: "the OS flavor release (e.g. leap-15.5)",
|
|
EnvVars: []string{EnvVarFlavorRelease},
|
|
}
|
|
|
|
variantFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "variant",
|
|
Value: "",
|
|
Usage: "the Kairos variant (core, standard)",
|
|
EnvVars: []string{EnvVarVariant},
|
|
}
|
|
|
|
modelFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "model",
|
|
Value: "",
|
|
Usage: "the model for which the OS was built (e.g. rpi4)",
|
|
EnvVars: []string{EnvVarModel},
|
|
}
|
|
|
|
archFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "arch",
|
|
Value: "",
|
|
Usage: "the architecture of the OS",
|
|
EnvVars: []string{EnvVarArch},
|
|
}
|
|
|
|
versionFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "version",
|
|
Value: "",
|
|
Usage: "the Kairos version (e.g. v2.4.2)",
|
|
EnvVars: []string{EnvVarVersion},
|
|
}
|
|
|
|
softwareVersionFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "software-version",
|
|
Value: "",
|
|
Usage: "the software version (e.g. k3sv1.28.2+k3s1)",
|
|
EnvVars: []string{EnvVarSoftwareVersion},
|
|
}
|
|
|
|
softwareVersionPrefixFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "software-version-prefix",
|
|
Value: "",
|
|
Usage: "the string that separates the Kairos version from the software version (e.g. \"k3s\")",
|
|
EnvVars: []string{EnvVarSoftwareVersionPrefix},
|
|
}
|
|
|
|
registryAndOrgFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "registry-and-org",
|
|
Value: "",
|
|
Usage: "the container registry and org (e.g. \"quay.io/kairos\")",
|
|
EnvVars: []string{EnvVarRegistryAndOrg},
|
|
}
|
|
|
|
idFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "id",
|
|
Value: "",
|
|
Usage: "a identifier for the artifact (e.g. \"master\")",
|
|
EnvVars: []string{EnvVarID},
|
|
}
|
|
|
|
githubRepoFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "github-repo",
|
|
Value: "",
|
|
Usage: "the Github repository where the code is hosted",
|
|
EnvVars: []string{EnvVarGithubRepo},
|
|
}
|
|
|
|
bugReportURLFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "bug-report-url",
|
|
Value: "",
|
|
Usage: "the url where bugs can be reported",
|
|
EnvVars: []string{EnvVarBugReportURL},
|
|
}
|
|
|
|
projectHomeURLFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "project-home-url",
|
|
Value: "",
|
|
Usage: "the url where more information about the project can be found",
|
|
EnvVars: []string{EnvVarHomeURL},
|
|
}
|
|
|
|
familyFlag *cli.StringFlag = &cli.StringFlag{
|
|
Name: "family",
|
|
Value: "",
|
|
Usage: "family of the underlying distro (rhel, ubuntu, opensuse, etc...)",
|
|
EnvVars: []string{EnvVarFamily},
|
|
}
|
|
)
|
|
|
|
func CliCommands() []*cli.Command {
|
|
return []*cli.Command{
|
|
{
|
|
Name: "container-artifact-name",
|
|
Usage: "generates an artifact name for Kairos OCI images",
|
|
Flags: []cli.Flag{
|
|
flavorFlag, flavorReleaseFlag, variantFlag, modelFlag, archFlag,
|
|
versionFlag, softwareVersionFlag, softwareVersionPrefixFlag, registryAndOrgFlag,
|
|
},
|
|
Action: func(cCtx *cli.Context) error {
|
|
a := artifactFromFlags(cCtx)
|
|
|
|
result, err := a.ContainerName(cCtx.String(registryAndOrgFlag.Name))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(result)
|
|
|
|
return nil
|
|
},
|
|
},
|
|
{
|
|
Name: "bootable-artifact-name",
|
|
Usage: "generates a name for bootable artifacts (e.g. iso files)",
|
|
Flags: []cli.Flag{
|
|
flavorFlag, flavorReleaseFlag, variantFlag, modelFlag, archFlag,
|
|
versionFlag, softwareVersionFlag, softwareVersionPrefixFlag,
|
|
},
|
|
Action: func(cCtx *cli.Context) error {
|
|
a := artifactFromFlags(cCtx)
|
|
|
|
result, err := a.BootableName()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(result)
|
|
|
|
return nil
|
|
},
|
|
},
|
|
{
|
|
Name: "base-container-artifact-name",
|
|
Usage: "generates a name for base (not yet Kairos) images",
|
|
Flags: []cli.Flag{
|
|
flavorFlag, flavorReleaseFlag, variantFlag, modelFlag, archFlag,
|
|
registryAndOrgFlag, idFlag,
|
|
},
|
|
Action: func(cCtx *cli.Context) error {
|
|
a := artifactFromFlags(cCtx)
|
|
|
|
result, err := a.BaseContainerName(
|
|
cCtx.String(registryAndOrgFlag.Name), cCtx.String(idFlag.Name))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(result)
|
|
|
|
return nil
|
|
},
|
|
},
|
|
{
|
|
Name: "os-release-variables",
|
|
Usage: "generates a set of variables to be appended in the /etc/kairos-release file",
|
|
Flags: []cli.Flag{
|
|
flavorFlag, flavorReleaseFlag, variantFlag, modelFlag, archFlag, versionFlag,
|
|
softwareVersionFlag, softwareVersionPrefixFlag, registryAndOrgFlag, bugReportURLFlag, projectHomeURLFlag,
|
|
githubRepoFlag, familyFlag,
|
|
},
|
|
Action: func(cCtx *cli.Context) error {
|
|
a := artifactFromFlags(cCtx)
|
|
|
|
result, err := a.OSReleaseVariables(
|
|
registryAndOrgFlag.Get(cCtx),
|
|
githubRepoFlag.Get(cCtx),
|
|
bugReportURLFlag.Get(cCtx),
|
|
projectHomeURLFlag.Get(cCtx),
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Do a normal print as we are already adding a \n at the end in the OSReleaseVariables function
|
|
// to avoid getting 1 empty line
|
|
fmt.Print(result)
|
|
|
|
return nil
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func artifactFromFlags(cCtx *cli.Context) Artifact {
|
|
return Artifact{
|
|
Flavor: flavorFlag.Get(cCtx),
|
|
Family: familyFlag.Get(cCtx),
|
|
FlavorRelease: flavorReleaseFlag.Get(cCtx),
|
|
Variant: variantFlag.Get(cCtx),
|
|
Model: modelFlag.Get(cCtx),
|
|
Arch: archFlag.Get(cCtx),
|
|
Version: versionFlag.Get(cCtx),
|
|
SoftwareVersion: softwareVersionFlag.Get(cCtx),
|
|
SoftwareVersionPrefix: softwareVersionPrefixFlag.Get(cCtx),
|
|
}
|
|
}
|