From 53b16ccd2688f6075b678c46ffcd59b8f7941d27 Mon Sep 17 00:00:00 2001 From: Valentin Rothberg Date: Tue, 4 Apr 2023 09:55:14 +0200 Subject: [PATCH 1/3] quadlet: use `Flag` suffix for variables Purely cosmetic change for consistency. [NO NEW TESTS NEEDED] as it doesn't change functionality. Signed-off-by: Valentin Rothberg --- cmd/quadlet/main.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/cmd/quadlet/main.go b/cmd/quadlet/main.go index 7f372f0d27..7a8e6792d1 100644 --- a/cmd/quadlet/main.go +++ b/cmd/quadlet/main.go @@ -25,8 +25,8 @@ import ( var ( verboseFlag bool // True if -v passed noKmsgFlag bool - isUser bool // True if run as quadlet-user-generator executable - dryRun bool // True if -dryrun is used + isUserFlag bool // True if run as quadlet-user-generator executable + dryRunFlag bool // True if -dryrun is used ) var ( @@ -294,32 +294,32 @@ func warnIfAmbiguousName(container *parser.UnitFile) { func main() { exitCode := 0 prgname := path.Base(os.Args[0]) - isUser = strings.Contains(prgname, "user") + isUserFlag = strings.Contains(prgname, "user") flag.Parse() - if verboseFlag || dryRun { + if verboseFlag || dryRunFlag { enableDebug() } - if noKmsgFlag || dryRun { + if noKmsgFlag || dryRunFlag { noKmsg = true } - if !dryRun && flag.NArg() < 1 { + if !dryRunFlag && flag.NArg() < 1 { Logf("Missing output directory argument") os.Exit(1) } var outputPath string - if !dryRun { + if !dryRunFlag { outputPath = flag.Arg(0) Debugf("Starting quadlet-generator, output to: %s", outputPath) } - sourcePaths := getUnitDirs(isUser) + sourcePaths := getUnitDirs(isUserFlag) units := make(map[string]*parser.UnitFile) for _, d := range sourcePaths { @@ -333,7 +333,7 @@ func main() { os.Exit(0) } - if !dryRun { + if !dryRunFlag { err := os.MkdirAll(outputPath, os.ModePerm) if err != nil { Logf("Can't create dir %s: %s", outputPath, err) @@ -348,11 +348,11 @@ func main() { switch { case strings.HasSuffix(name, ".container"): warnIfAmbiguousName(unit) - service, err = quadlet.ConvertContainer(unit, isUser) + service, err = quadlet.ConvertContainer(unit, isUserFlag) case strings.HasSuffix(name, ".volume"): service, err = quadlet.ConvertVolume(unit, name) case strings.HasSuffix(name, ".kube"): - service, err = quadlet.ConvertKube(unit, isUser) + service, err = quadlet.ConvertKube(unit, isUserFlag) case strings.HasSuffix(name, ".network"): service, err = quadlet.ConvertNetwork(unit, name) default: @@ -365,7 +365,7 @@ func main() { } else { service.Path = path.Join(outputPath, service.Filename) - if dryRun { + if dryRunFlag { data, err := service.ToString() if err != nil { Debugf("Error parsing %s\n---\n", service.Path) @@ -388,6 +388,6 @@ func main() { func init() { flag.BoolVar(&verboseFlag, "v", false, "Print debug information") flag.BoolVar(&noKmsgFlag, "no-kmsg-log", false, "Don't log to kmsg") - flag.BoolVar(&isUser, "user", false, "Run as systemd user") - flag.BoolVar(&dryRun, "dryrun", false, "run in dryrun mode printing debug information") + flag.BoolVar(&isUserFlag, "user", false, "Run as systemd user") + flag.BoolVar(&dryRunFlag, "dryrun", false, "run in dryrun mode printing debug information") } From 7eb78f8a74c703a7965b3ccda3afd23c2014acd3 Mon Sep 17 00:00:00 2001 From: Valentin Rothberg Date: Tue, 4 Apr 2023 11:21:22 +0200 Subject: [PATCH 2/3] add version/rawversion package To prevent the `semver` packages from bloating Quadlet. Signed-off-by: Valentin Rothberg --- RELEASE_PROCESS.md | 4 ++-- version/rawversion/version.go | 10 ++++++++++ version/version.go | 3 ++- 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 version/rawversion/version.go diff --git a/RELEASE_PROCESS.md b/RELEASE_PROCESS.md index 58dae77165..45c7dc9c45 100644 --- a/RELEASE_PROCESS.md +++ b/RELEASE_PROCESS.md @@ -164,7 +164,7 @@ spelled with complete minutiae. `git checkout -b bump_vX.Y.Z`. 1. Look up the *COMMIT ID* of the last release, `git log -1 $(git tag | sort -V | tail -1)`. - 1. Edit `version/version.go` and bump the `Version` value to the new + 1. Edit `version/rawversion/version.go` and bump the `Version` value to the new release version. If there were API changes, also bump `APIVersion` value. Make sure to also bump the version in the swagger.yaml `pkg/api/server/docs.go` and to add a new entry in `docs/source/Reference.rst` for major and minor releases. @@ -181,7 +181,7 @@ spelled with complete minutiae. 1. Tag the `Bump to vX.Y.Z` commit as a release by running `git tag -s -m 'vX.Y.Z' vX.Y.Z $HASH` where `$HASH` is specified explicitly and carefully, to avoid (basically) unfixable accidents (if they are pushed). - 1. Change `version/version.go` again. This time, bump the **patch** version and + 1. Change `version/rawversion/version.go` again. This time, bump the **patch** version and re-add the `-dev` suffix to indicate this is a non-released version of Podman. 1. Change `contrib/spec/podman.spec.in`, bumping **patch** number of `Version`. 1. Commit these changes with the message `Bump to X.Y.Z-dev`. diff --git a/version/rawversion/version.go b/version/rawversion/version.go new file mode 100644 index 0000000000..3df6f86480 --- /dev/null +++ b/version/rawversion/version.go @@ -0,0 +1,10 @@ +package rawversion + +// RawVersion is the raw version string. +// +// This indirection is needed to prevent semver packages from bloating +// Quadlet's binary size. +// +// NOTE: remember to bump the version at the top of the top-level README.md +// file when this is bumped. +const RawVersion = "4.5.0-dev" diff --git a/version/version.go b/version/version.go index f3154e8d0e..cf97e02294 100644 --- a/version/version.go +++ b/version/version.go @@ -2,6 +2,7 @@ package version import ( "github.com/blang/semver/v4" + "github.com/containers/podman/v4/version/rawversion" ) type ( @@ -27,7 +28,7 @@ const ( // NOTE: remember to bump the version at the top // of the top-level README.md file when this is // bumped. -var Version = semver.MustParse("4.5.0-dev") +var Version = semver.MustParse(rawversion.RawVersion) // See https://docs.docker.com/engine/api/v1.40/ // libpod compat handlers are expected to honor docker API versions From 243ca7c280f0158b46e0d3068f5bab8b507cea8d Mon Sep 17 00:00:00 2001 From: Valentin Rothberg Date: Tue, 4 Apr 2023 10:04:46 +0200 Subject: [PATCH 3/3] add `quadlet -version` flag I recently wanted to check which version of Quadlet I was using and found a `-version` flag to be missing. Since Quadlet and Podman are bundled together, it seems reasonable to me for them to share the same version. Signed-off-by: Valentin Rothberg --- cmd/quadlet/main.go | 10 +++++++++- test/e2e/quadlet_test.go | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/cmd/quadlet/main.go b/cmd/quadlet/main.go index 7a8e6792d1..9a956ad625 100644 --- a/cmd/quadlet/main.go +++ b/cmd/quadlet/main.go @@ -12,6 +12,7 @@ import ( "github.com/containers/podman/v4/pkg/systemd/parser" "github.com/containers/podman/v4/pkg/systemd/quadlet" + "github.com/containers/podman/v4/version/rawversion" ) // This commandline app is the systemd generator (system and user, @@ -27,6 +28,7 @@ var ( noKmsgFlag bool isUserFlag bool // True if run as quadlet-user-generator executable dryRunFlag bool // True if -dryrun is used + versionFlag bool // True if -version is used ) var ( @@ -298,6 +300,11 @@ func main() { flag.Parse() + if versionFlag { + fmt.Printf("%s\n", rawversion.RawVersion) + return + } + if verboseFlag || dryRunFlag { enableDebug() } @@ -389,5 +396,6 @@ func init() { flag.BoolVar(&verboseFlag, "v", false, "Print debug information") flag.BoolVar(&noKmsgFlag, "no-kmsg-log", false, "Don't log to kmsg") flag.BoolVar(&isUserFlag, "user", false, "Run as systemd user") - flag.BoolVar(&dryRunFlag, "dryrun", false, "run in dryrun mode printing debug information") + flag.BoolVar(&dryRunFlag, "dryrun", false, "Run in dryrun mode printing debug information") + flag.BoolVar(&versionFlag, "version", false, "Print version information and exit") } diff --git a/test/e2e/quadlet_test.go b/test/e2e/quadlet_test.go index 2e4c67fa81..e38a4e7e74 100644 --- a/test/e2e/quadlet_test.go +++ b/test/e2e/quadlet_test.go @@ -9,6 +9,7 @@ import ( "strings" "github.com/containers/podman/v4/pkg/systemd/parser" + "github.com/containers/podman/v4/version" "github.com/mattn/go-shellwords" . "github.com/containers/podman/v4/test/utils" @@ -426,6 +427,15 @@ var _ = Describe("quadlet system generator", func() { }) + Describe("quadlet -version", func() { + It("Should print correct version", func() { + session := podmanTest.Quadlet([]string{"-version"}, "/something") + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + Expect(session.OutputToString()).To(Equal(version.Version.String())) + }) + }) + Describe("Running quadlet dryrun tests", func() { It("Should exit with an error because of no files are found to parse", func() { fileName := "basic.kube"