diff --git a/.editorconfig b/.editorconfig index 8f8872f..4b9db1d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,14 +8,10 @@ trim_trailing_whitespace = true indent_style = tab indent_size = 4 -[*.sh] -indent_style = space -indent_size = 2 - -[{Dockerfile,*.md,*_test.go}] +[{Dockerfile,*.md,*_test.go,install.sh,act-cli.nuspec}] indent_style = unset indent_size = unset -[*.{yml,yaml,json}] +[*.{yml,yaml,js{,on}}] indent_style = space indent_size = 2 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1ba1f3b..c15de11 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,11 +5,11 @@ version: 2 updates: - - package-ecosystem: "github-actions" - directory: "/" + - package-ecosystem: 'github-actions' + directory: '/' schedule: - interval: "weekly" - - package-ecosystem: "gomod" - directory: "/" + interval: 'weekly' + - package-ecosystem: 'gomod' + directory: '/' schedule: - interval: "weekly" + interval: 'weekly' diff --git a/.github/linters/.golangci.yml b/.github/linters/.golangci.yml deleted file mode 120000 index d531ead..0000000 --- a/.github/linters/.golangci.yml +++ /dev/null @@ -1 +0,0 @@ -../../.golangci.yml \ No newline at end of file diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml deleted file mode 120000 index 7e62b3d..0000000 --- a/.github/linters/.markdown-lint.yml +++ /dev/null @@ -1 +0,0 @@ -../../.markdownlint.yml \ No newline at end of file diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index ae43ebd..d34c472 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -5,6 +5,7 @@ env: ACT_OWNER: ${{ github.repository_owner }} ACT_REPOSITORY: ${{ github.repository }} GO_VERSION: 1.17 + CGO_ENABLED: 0 jobs: lint: @@ -18,22 +19,15 @@ jobs: with: go-version: ${{ env.GO_VERSION }} - uses: golangci/golangci-lint-action@v2 - env: - CGO_ENABLED: 0 with: version: latest - - uses: github/super-linter@v3 + - uses: megalinter/megalinter/flavors/go@v5 env: DEFAULT_BRANCH: master GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - FILTER_REGEX_EXCLUDE: .*testdata/* VALIDATE_ALL_CODEBASE: false - VALIDATE_BASH: false - VALIDATE_DOCKERFILE: false - VALIDATE_DOCKERFILE_HADOLINT: false - VALIDATE_GO: false # it's broken, see commit message - VALIDATE_JSCPD: false - VALIDATE_SHELL_SHFMT: false + GITHUB_STATUS_REPORTER: ${{ !env.ACT }} + GITHUB_COMMENT_REPORTER: ${{ !env.ACT }} test-linux: name: test-linux @@ -55,8 +49,6 @@ jobs: restore-keys: | ${{ runner.os }}-go- - run: go test -v -cover -coverprofile=coverage.txt -covermode=atomic ./... - env: - CGO_ENABLED: 0 - name: Upload Codecov report uses: codecov/codecov-action@v2.1.0 with: diff --git a/.gitignore b/.gitignore index 6369f14..2415210 100644 --- a/.gitignore +++ b/.gitignore @@ -29,5 +29,5 @@ coverage.txt .env .secrets -# ignore docker registry from .github/workflows/checks.yml -docker-registry/ +# megalinter +report/ diff --git a/.golangci.yml b/.golangci.yml index c18887f..f48e55c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -2,6 +2,9 @@ run: timeout: 3m +skip-dirs: + - report # megalinter results+fixes + linters-settings: gocyclo: # minimal code complexity to report, 30 by default (but we recommend 10-20) @@ -43,3 +46,6 @@ linters: - misspell - depguard - importas + - contextcheck + - nolintlint + - revive diff --git a/.goreleaser.yml b/.goreleaser.yml index c7de3c9..4a819cd 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -10,15 +10,15 @@ builds: - windows goarch: - amd64 - - 386 + - '386' - arm64 - arm goarm: - - 6 - - 7 + - '6' + - '7' ignore: - goos: windows - goarm: 6 + goarm: '6' checksum: name_template: 'checksums.txt' archives: diff --git a/.markdownlint.yml b/.markdownlint.yml index bb91f2f..4464e3b 100644 --- a/.markdownlint.yml +++ b/.markdownlint.yml @@ -2,7 +2,8 @@ default: true # MD013/line-length - Line length -MD013: false +MD013: + line_length: 1024 # MD033/no-inline-html - Inline HTML MD033: false diff --git a/.mega-linter.yml b/.mega-linter.yml new file mode 100644 index 0000000..83c85c5 --- /dev/null +++ b/.mega-linter.yml @@ -0,0 +1,17 @@ +--- +APPLY_FIXES: none +DISABLE: + - ACTION + - BASH + - COPYPASTE + - DOCKERFILE + - GO + - JAVASCRIPT + - SPELL +DISABLE_LINTERS: + - YAML_YAMLLINT + - MARKDOWN_MARKDOWN_TABLE_FORMATTER +FILTER_REGEX_EXCLUDE: .*testdata/* +MARKDOWN_MARKDOWNLINT_CONFIG_FILE: .markdownlint.yml +PARALLEL: false +PRINT_ALPACA: false diff --git a/Makefile b/Makefile index 9dc4352..bdf9385 100644 --- a/Makefile +++ b/Makefile @@ -54,16 +54,10 @@ lint-md: .PHONY: lint-rest lint-rest: docker run --rm -it \ - -e 'RUN_LOCAL=true' \ - -e 'FILTER_REGEX_EXCLUDE=.*testdata/*' \ - -e 'VALIDATE_BASH=false' \ - -e 'VALIDATE_DOCKERFILE=false' \ - -e 'VALIDATE_DOCKERFILE_HADOLINT=false' \ - -e 'VALIDATE_GO=false' \ - -e 'VALIDATE_JSCPD=false' \ - -e 'VALIDATE_SHELL_SHFMT=false' \ -v $(PWD):/tmp/lint \ - github/super-linter + -e GITHUB_STATUS_REPORTER=false \ + -e GITHUB_COMMENT_REPORTER=false \ + megalinter/megalinter-go:v5 .PHONY: lint lint: lint-go lint-rest diff --git a/pkg/container/docker_run.go b/pkg/container/docker_run.go index bf6d6f3..2077a8e 100644 --- a/pkg/container/docker_run.go +++ b/pkg/container/docker_run.go @@ -88,8 +88,7 @@ func NewContainer(input *NewContainerInput) Container { // supportsContainerImagePlatform returns true if the underlying Docker server // API version is 1.41 and beyond -func supportsContainerImagePlatform(cli *client.Client) bool { - ctx := context.TODO() +func supportsContainerImagePlatform(ctx context.Context, cli *client.Client) bool { logger := common.Logger(ctx) ver, err := cli.ServerVersion(ctx) if err != nil { @@ -290,7 +289,7 @@ func (cr *containerReference) remove() common.Executor { } logger := common.Logger(ctx) - err := cr.cli.ContainerRemove(context.Background(), cr.id, types.ContainerRemoveOptions{ + err := cr.cli.ContainerRemove(ctx, cr.id, types.ContainerRemoveOptions{ RemoveVolumes: true, Force: true, }) @@ -333,7 +332,7 @@ func (cr *containerReference) create(capAdd []string, capDrop []string) common.E } var platSpecs *specs.Platform - if supportsContainerImagePlatform(cr.cli) && cr.input.Platform != "" { + if supportsContainerImagePlatform(ctx, cr.cli) && cr.input.Platform != "" { desiredPlatform := strings.SplitN(cr.input.Platform, `/`, 2) if len(desiredPlatform) != 2 { diff --git a/pkg/runner/expression.go b/pkg/runner/expression.go index ac02455..72ff56c 100644 --- a/pkg/runner/expression.go +++ b/pkg/runner/expression.go @@ -158,24 +158,24 @@ func (*expressionEvaluator) advString(w *strings.Builder, r *strings.Reader) err return err } if c != '\'' { - w.WriteRune(c) //nolint + w.WriteRune(c) continue } // Handles a escaped string: ex. 'It''s ok' c, _, err = r.ReadRune() if err != nil { - w.WriteString("'") //nolint + w.WriteString("'") return err } if c != '\'' { - w.WriteString("'") //nolint + w.WriteString("'") if err := r.UnreadRune(); err != nil { return err } break } - w.WriteString(`\'`) //nolint + w.WriteString(`\'`) } return nil } @@ -192,7 +192,7 @@ func (*expressionEvaluator) advPropertyName(w *strings.Builder, r *strings.Reade } break } - w.WriteRune(c) //nolint + w.WriteRune(c) } return nil } diff --git a/pkg/runner/run_context.go b/pkg/runner/run_context.go index cfe37ac..ea39dd0 100644 --- a/pkg/runner/run_context.go +++ b/pkg/runner/run_context.go @@ -342,7 +342,7 @@ func (rc *RunContext) newStepExecutor(step *model.Step) common.Executor { rc.ExprEval = exprEval common.Logger(ctx).Infof("\u2B50 Run %s", sc.Step) - err = sc.Executor()(ctx) + err = sc.Executor(ctx)(ctx) if err == nil { common.Logger(ctx).Infof(" \u2705 Success - %s", sc.Step) } else { diff --git a/pkg/runner/step_context.go b/pkg/runner/step_context.go index 00c1527..1485f69 100644 --- a/pkg/runner/step_context.go +++ b/pkg/runner/step_context.go @@ -46,7 +46,7 @@ func (e formatError) Error() string { } // Executor for a step context -func (sc *StepContext) Executor() common.Executor { +func (sc *StepContext) Executor(ctx context.Context) common.Executor { rc := sc.RunContext step := sc.Step @@ -92,7 +92,7 @@ func (sc *StepContext) Executor() common.Executor { Token: github.Token, }) var ntErr common.Executor - if err := gitClone(context.TODO()); err != nil { + if err := gitClone(ctx); err != nil { if err.Error() == "short SHA references are not supported" { err = errors.Cause(err) return common.NewErrorExecutor(fmt.Errorf("Unable to resolve action `%s`, the provided ref `%s` is the shortened version of a commit SHA, which is not supported. Please use the full commit SHA `%s` instead", step.Uses, remoteAction.Ref, err.Error())) @@ -482,7 +482,6 @@ func (sc *StepContext) getContainerActionPaths(step *model.Step, actionDir strin return actionName, containerActionDir } -// nolint: gocyclo func (sc *StepContext) runAction(actionDir string, actionPath string, localAction bool) common.Executor { rc := sc.RunContext step := sc.Step @@ -704,7 +703,7 @@ func (sc *StepContext) execAsComposite(ctx context.Context, step *model.Step, _ stepContext.Step = &stepClone - executors = append(executors, stepContext.Executor()) + executors = append(executors, stepContext.Executor(ctx)) } return common.NewPipelineExecutor(executors...)(ctx) }