mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-09-01 15:18:10 +00:00
194 lines
4.8 KiB
Go
194 lines
4.8 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},
|
||
|
}
|
||
|
|
||
|
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},
|
||
|
}
|
||
|
)
|
||
|
|
||
|
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, 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,
|
||
|
},
|
||
|
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/os-release file",
|
||
|
Flags: []cli.Flag{
|
||
|
flavorFlag, flavorReleaseFlag, variantFlag, modelFlag, archFlag, versionFlag,
|
||
|
softwareVersionFlag, registryAndOrgFlag, bugReportURLFlag, projectHomeURLFlag,
|
||
|
githubRepoFlag,
|
||
|
},
|
||
|
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
|
||
|
}
|
||
|
fmt.Println(result)
|
||
|
|
||
|
return nil
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func artifactFromFlags(cCtx *cli.Context) Artifact {
|
||
|
return Artifact{
|
||
|
Flavor: flavorFlag.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),
|
||
|
}
|
||
|
}
|