diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0304273..893dacc 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -16,8 +16,6 @@ ], // Set *default* container specific settings.json values on container create. "settings": { - "terminal.integrated.shell.linux": "/bin/bash", - "go.useGoProxyToCheckForToolUpdates": false, "go.gopath": "/go" }, // Add the IDs of extensions you want installed when the container is created. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1787eca..143f14a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,12 +15,18 @@ jobs: uses: actions/setup-go@v1 with: go-version: 1.13.x - - name: Docker login + - name: Docker login (github packages) uses: azure/docker-login@v1 with: login-server: docker.pkg.github.com username: disneystreaming password: ${{ secrets.GO_RELEASER }} + - name: Docker login (ghcr) + uses: azure/docker-login@v1 + with: + login-server: ghcr.io + username: disneystreaming + password: ${{ secrets.GO_RELEASER }} - name: Run GoReleaser uses: goreleaser/goreleaser-action@v1 with: diff --git a/.goreleaser.yml b/.goreleaser.yml index f9f85a7..09ca6b2 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -54,6 +54,10 @@ dockers: - "docker.pkg.github.com/disneystreaming/ssm-helpers/ssm:{{ .Tag }}" - "docker.pkg.github.com/disneystreaming/ssm-helpers/ssm:{{ .Major }}" - "docker.pkg.github.com/disneystreaming/ssm-helpers/ssm:{{ .Major }}.{{ .Minor }}" + - "ghcr.io/disneystreaming/ssm:latest" + - "ghcr.io/disneystreaming/ssm:{{ .Tag }}" + - "ghcr.io/disneystreaming/ssm:{{ .Major }}" + - "ghcr.io/disneystreaming/ssm:{{ .Major }}.{{ .Minor }}" nfpms: - license: MIT diff --git a/cmd/flags.go b/cmd/flags.go index f5b06ab..1ae525b 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -151,6 +151,10 @@ func validateSessionFlags(cmd *cobra.Command, instanceList []string, filterList return cmdutil.UsageError(cmd, "The --filter and --instance flags cannot be used simultaneously.") } + if len(filterList) > 5 { + return cmdutil.UsageError(cmd, "A maximum of 5 tag filters can be specified at a time.") + } + return nil } @@ -164,6 +168,10 @@ func validateRunFlags(cmd *cobra.Command, instanceList []string, commandList []s return cmdutil.UsageError(cmd, "You must supply target arguments using either the --filter or --instance flags.") } + if len(filterList) > 5 { + return cmdutil.UsageError(cmd, "A maximum of 5 tag filters can be specified at a time.") + } + if len(instanceList) > 50 { return cmdutil.UsageError(cmd, "The --instance flag can only be used to specify a maximum of 50 instances.") } diff --git a/cmd/flags_test.go b/cmd/flags_test.go index 9ec4e96..eb0fdec 100644 --- a/cmd/flags_test.go +++ b/cmd/flags_test.go @@ -326,6 +326,12 @@ func Test_validateRunFlags(t *testing.T) { assert.Error(err) }) + t.Run("specify more than 5 filters", func(t *testing.T) { + targetList := make([]*ssm.Target, 6) + err := validateRunFlags(cmd, nil, []string{"hostname"}, targetList) + assert.Error(err) + }) + t.Run("no instances or filters specified", func(t *testing.T) { err := validateRunFlags(cmd, nil, []string{"hostname"}, nil) assert.Error(err) @@ -365,6 +371,19 @@ func Test_validateSessionFlags(t *testing.T) { assert.Error(err) }) + t.Run("specify more than 5 filters", func(t *testing.T) { + targetList := map[string]string{ + "1": "a", + "2": "b", + "3": "c", + "4": "d", + "5": "e", + "6": "f", + } + err := validateSessionFlags(cmd, nil, targetList) + assert.Error(err) + }) + t.Run("valid flag combination", func(t *testing.T) { err := validateSessionFlags(cmd, instanceList, nil) assert.NoError(err)