grim/convey

Add the podman/tag task and unit tests for it
redux
2021-10-11, Gary Kramlich
69f1af8c771f
Parents 7d5217252d93
Children 7a65a06a16c3
Add the podman/tag task and unit tests for it
--- a/podman/errors.go Mon Oct 11 01:44:17 2021 -0500
+++ b/podman/errors.go Mon Oct 11 01:58:18 2021 -0500
@@ -5,7 +5,7 @@
)
var (
- // run errors
+ // common errors
ErrNoImage = errors.New("no image specified")
// login/logout errors
@@ -15,4 +15,7 @@
// pull/push errors
ErrNoTags = errors.New("no tags specified")
+
+ // tag errors
+ ErrNoTargets = errors.New("no targets specified")
)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/podman/tag.go Mon Oct 11 01:58:18 2021 -0500
@@ -0,0 +1,50 @@
+package podman
+
+import (
+ log "github.com/sirupsen/logrus"
+
+ "keep.imfreedom.org/grim/convey/environment"
+ "keep.imfreedom.org/grim/convey/exec"
+ "keep.imfreedom.org/grim/convey/runtime"
+ "keep.imfreedom.org/grim/convey/tasks"
+ "keep.imfreedom.org/grim/convey/yaml"
+)
+
+type Tag struct {
+ Image string `yaml:"image"`
+ Targets yaml.StringOrSlice `yaml:"targets"`
+}
+
+func (t *Tag) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+ env := stageEnv.Copy().Merge(rt.Environment)
+
+ generator := exec.NewGenerator(
+ "podman",
+ "tag",
+ t.Image,
+ )
+
+ generator.Appendv(env.Expandv(t.Targets))
+
+ return exec.Run(name, generator.Command(), rt.Timeout)
+}
+
+func (t *Tag) New() tasks.Task {
+ return &Tag{}
+}
+
+func (t *Tag) Valid() error {
+ if t.Image == "" {
+ return ErrNoImage
+ }
+
+ if len(t.Targets) == 0 {
+ return ErrNoTargets
+ }
+
+ return nil
+}
+
+func (t *Tag) Deprecated() error {
+ return nil
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/podman/tag_test.go Mon Oct 11 01:58:18 2021 -0500
@@ -0,0 +1,49 @@
+package podman
+
+import (
+ "testing"
+
+ . "github.com/onsi/gomega"
+)
+
+func TestTagSingleTarget(t *testing.T) {
+ g := NewGomegaWithT(t)
+
+ tag := &Tag{
+ Image: "foo",
+ Targets: []string{"bar"},
+ }
+
+ g.Expect(tag.Valid()).To(BeNil())
+}
+
+func TestTagMultipleTargets(t *testing.T) {
+ g := NewGomegaWithT(t)
+
+ tag := &Tag{
+ Image: "foo",
+ Targets: []string{"bar", "baz"},
+ }
+
+ g.Expect(tag.Valid()).To(BeNil())
+}
+
+func TestTagImageRequired(t *testing.T) {
+ g := NewGomegaWithT(t)
+
+ tag := &Tag{
+ Targets: []string{"bar"},
+ }
+
+ g.Expect(tag.Valid()).To(MatchError(ErrNoImage))
+}
+
+func TestTagTargetRequired(t *testing.T) {
+ g := NewGomegaWithT(t)
+
+ tag := &Tag{
+ Image: "foo",
+ }
+
+ g.Expect(tag.Valid()).To(MatchError(ErrNoTargets))
+}
--- a/podman/tasks.go Mon Oct 11 01:44:17 2021 -0500
+++ b/podman/tasks.go Mon Oct 11 01:58:18 2021 -0500
@@ -12,6 +12,7 @@
"podman/push": &Push{},
"podman/remove": &Remove{},
"podman/run": &Run{},
+ "podman/tag": &Tag{},
// make it go!
"docker/run": &Run{},