|
|
@@ -17,6 +17,8 @@
|
|
|
package ecs
|
|
|
|
|
|
import (
|
|
|
+ "bufio"
|
|
|
+ "bytes"
|
|
|
"context"
|
|
|
"fmt"
|
|
|
"os"
|
|
|
@@ -25,10 +27,11 @@ import (
|
|
|
"strings"
|
|
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
|
+ "github.com/compose-spec/compose-go/cli"
|
|
|
"github.com/compose-spec/compose-go/types"
|
|
|
+ "github.com/pkg/errors"
|
|
|
"github.com/sanathkr/go-yaml"
|
|
|
-
|
|
|
- "github.com/compose-spec/compose-go/cli"
|
|
|
+ "golang.org/x/mod/semver"
|
|
|
)
|
|
|
|
|
|
func (c *ecsAPIService) Emulate(ctx context.Context, options *cli.ProjectOptions) error {
|
|
|
@@ -104,7 +107,23 @@ func (c *ecsAPIService) Emulate(ctx context.Context, options *cli.ProjectOptions
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- cmd := exec.Command("docker-compose", "--context", "default", "--project-directory", project.WorkingDir, "--project-name", project.Name, "-f", "-", "up")
|
|
|
+ cmd := exec.Command("docker-compose", "version", "--short")
|
|
|
+ b := bytes.Buffer{}
|
|
|
+ b.WriteString("v")
|
|
|
+ cmd.Stdout = bufio.NewWriter(&b)
|
|
|
+ err = cmd.Run()
|
|
|
+ if err != nil {
|
|
|
+ return errors.Wrap(err, "ECS simulation mode require Docker-compose 1.27")
|
|
|
+ }
|
|
|
+ version := semver.MajorMinor(strings.TrimSpace(b.String()))
|
|
|
+ if version == "" {
|
|
|
+ return fmt.Errorf("can't parse docker-compose version: %s", b.String())
|
|
|
+ }
|
|
|
+ if semver.Compare(version, "v1.27") < 0 {
|
|
|
+ return fmt.Errorf("ECS simulation mode require Docker-compose 1.27, found %s", version)
|
|
|
+ }
|
|
|
+
|
|
|
+ cmd = exec.Command("docker-compose", "--context", "default", "--project-directory", project.WorkingDir, "--project-name", project.Name, "-f", "-", "up")
|
|
|
cmd.Stdin = strings.NewReader(string(marshal))
|
|
|
cmd.Stdout = os.Stdout
|
|
|
cmd.Stderr = os.Stderr
|