--- a/aws/ecr-get-login.go Tue Feb 13 22:42:39 2018 -0600
+++ b/aws/ecr-get-login.go Tue Feb 13 23:42:37 2018 -0600
@@ -34,9 +34,11 @@
// Executes the `aws ecr get-login` command and calls docker login with the
func (ecr *ECRGetLogin) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
+ fullEnv := environment.Merge(env, st.GetEnv()) cmd := command.NewGenerator("aws", "ecr", "get-login")
- region, err := environment.Mapper(ecr.Region, env)
+ region, err := environment.Mapper(ecr.Region, fullEnv) --- a/script/script.go Tue Feb 13 22:42:39 2018 -0600
+++ b/script/script.go Tue Feb 13 23:42:37 2018 -0600
@@ -21,6 +21,7 @@
"github.com/kballard/go-shellquote"
+ "bitbucket.org/rw_grim/convey/aws" "bitbucket.org/rw_grim/convey/docker"
"bitbucket.org/rw_grim/convey/tasks"
@@ -30,6 +31,7 @@
commands = map[string]ParseFunc{
"docker": docker.ParseCommand,
+ "aws": aws.ParseCommand, @@ -40,7 +42,22 @@
currentScript := []string{}
for _, cmd := range script {
- argv, err := shellquote.Split(cmd)
+ // trim whitespace from the command + clean := strings.TrimSpace(cmd) + // handle weirdo commands that are entirely wrapped in $() + if strings.HasPrefix(clean, "$(") && strings.HasSuffix(clean, ")") { + clean = strings.TrimPrefix(clean, "$(") + clean = strings.TrimSuffix(clean, ")") + // handle weirdo commands that are entirely wrapped in `'s + if strings.HasPrefix(clean, "`") && strings.HasSuffix(clean, "`") { + clean = strings.TrimPrefix(clean, "`") + clean = strings.TrimSuffix(clean, "`") + argv, err := shellquote.Split(clean) --- a/script/script_test.go Tue Feb 13 22:42:39 2018 -0600
+++ b/script/script_test.go Tue Feb 13 23:42:37 2018 -0600
@@ -23,6 +23,7 @@
junit "github.com/aphistic/sweet-junit"
. "github.com/onsi/gomega"
+ "bitbucket.org/rw_grim/convey/aws" "bitbucket.org/rw_grim/convey/docker"
"bitbucket.org/rw_grim/convey/tasks"
@@ -58,7 +59,32 @@
Expect(len(parsedTasks)).To(Equal(1))
Expect(parsedTasks[0]).To(BeAssignableToTypeOf(&docker.Run{}))
+func (s *scriptSuite) TestSubShellUnknown(t sweet.T) { + commands := []string{"$(true)"} + parsedTasks, err := Parse("", "", commands) + Expect(err).To(BeNil()) + Expect(len(parsedTasks)).To(Equal(1)) + Expect(parsedTasks[0]).To(BeAssignableToTypeOf(&docker.Run{})) + run := parsedTasks[0].(*docker.Run) + Expect(run.Script).To(BeEquivalentTo([]string{"$(true)"})) +func (s *scriptSuite) TestBackTicksUnknown(t sweet.T) { + commands := []string{"`true`"} + parsedTasks, err := Parse("", "", commands) + Expect(err).To(BeNil()) + Expect(len(parsedTasks)).To(Equal(1)) + Expect(parsedTasks[0]).To(BeAssignableToTypeOf(&docker.Run{})) + run := parsedTasks[0].(*docker.Run) + Expect(run.Script).To(BeEquivalentTo([]string{"`true`"})) func (s *scriptSuite) TestDockerThenScript(t sweet.T) {
@@ -107,3 +133,22 @@
Expect(parsedTasks[1]).To(BeAssignableToTypeOf(&docker.Push{}))
Expect(parsedTasks[2]).To(BeAssignableToTypeOf(&docker.Run{}))
+func (s *scriptSuite) TestAWSECRGetLogin(t sweet.T) { + "aws ecr get-login --region us-west-2", + "$(aws ecr get-login)", + parsedTasks, err := Parse("", "", commands) + Expect(err).To(BeNil()) + Expect(len(parsedTasks)).To(Equal(4)) + Expect(parsedTasks[0]).To(BeAssignableToTypeOf(&aws.ECRGetLogin{})) + Expect(parsedTasks[1]).To(BeAssignableToTypeOf(&aws.ECRGetLogin{})) + Expect(parsedTasks[2]).To(BeAssignableToTypeOf(&aws.ECRGetLogin{})) + Expect(parsedTasks[3]).To(BeAssignableToTypeOf(&aws.ECRGetLogin{}))