diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..8041368 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,38 @@ +linters-settings: + gofmt: + simplify: true + misspell: + locale: US + gofumpt: + extra-rules: true + forbidigo: + forbid: + - context\.WithCancel$ + - ^print.*$ + - panic + errorlint: + errorf-multi: true + +linters: + disable-all: true + enable: + - bidichk + - errcheck + - gofmt + - goimports + - gosimple + - govet + - ineffassign + - misspell + - revive + - staticcheck + - typecheck + - unused + - whitespace + - gofumpt + - errorlint + - forbidigo + - zerologlint + +run: + timeout: 5m diff --git a/.hadolint.yml b/.hadolint.yml new file mode 100644 index 0000000..85e8ce0 --- /dev/null +++ b/.hadolint.yml @@ -0,0 +1,2 @@ +ignored: + - DL3018 # pin versions in Dockerfile diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 0000000..7e3dc6a --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,143 @@ +# markdownlint YAML configuration +# https://github.com/DavidAnson/markdownlint/blob/main/schema/.markdownlint.yaml + +# Default state for all rules +default: true + +# Path to configuration file to extend +extends: null + +# MD003/heading-style/header-style - Heading style +MD003: + # Heading style + style: 'atx' + +# MD004/ul-style - Unordered list style +MD004: + style: 'dash' + +# MD007/ul-indent - Unordered list indentation +MD007: + # Spaces for indent + indent: 2 + # Whether to indent the first level of the list + start_indented: false + +# MD009/no-trailing-spaces - Trailing spaces +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs - Hard tabs +MD010: + # Include code blocks + code_blocks: true + +# MD012/no-multiple-blanks - Multiple consecutive blank lines +MD012: + # Consecutive blank lines + maximum: 1 + +# MD013/line-length - Line length +MD013: + # Number of characters + line_length: 500 + # Number of characters for headings + heading_line_length: 100 + # Number of characters for code blocks + code_block_line_length: 80 + # Include code blocks + code_blocks: false + # Include tables + tables: false + # Include headings + headings: true + # Include headings + headers: true + # Strict length checking + strict: false + # Stern length checking + stern: false + +# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines +MD022: + # Blank lines above heading + lines_above: 1 + # Blank lines below heading + lines_below: 1 + +# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content +MD024: + # Only check sibling headings + allow_different_nesting: true + +# MD025/single-title/single-h1 - Multiple top-level headings in the same document +MD025: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD026/no-trailing-punctuation - Trailing punctuation in heading +MD026: + # Punctuation characters + punctuation: '.,;:!。,;:!' + +# MD029/ol-prefix - Ordered list item prefix +MD029: + # List style + style: 'one_or_ordered' + +# MD030/list-marker-space - Spaces after list markers +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD033/no-inline-html - Inline HTML +MD033: + # Allowed elements + allowed_elements: [details, summary, img, a, br, p] + +# MD035/hr-style - Horizontal rule style +MD035: + # Horizontal rule style + style: '---' + +# MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading +MD036: + # Punctuation characters + punctuation: '.,;:!?。,;:!?' + +# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading +MD041: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD044/proper-names - Proper names should have the correct capitalization +MD044: + # List of proper names + # names: + # Include code blocks + code_blocks: false + +# MD046/code-block-style - Code block style +MD046: + # Block style + style: 'fenced' + +# MD048/code-fence-style - Code fence style +MD048: + # Code fence syle + style: 'backtick' diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..2ee46fc --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,40 @@ +repos: + - repo: meta + hooks: + - id: check-hooks-apply + - id: check-useless-excludes + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + - repo: https://github.com/golangci/golangci-lint + rev: v1.55.2 + hooks: + - id: golangci-lint + - repo: https://github.com/igorshubovych/markdownlint-cli + rev: v0.37.0 + hooks: + - id: markdownlint + - repo: https://github.com/mrtazz/checkmake + rev: 0.2.2 + hooks: + - id: checkmake + - repo: https://github.com/hadolint/hadolint + rev: v2.12.1-beta + hooks: + - id: hadolint + +ci: + autofix_commit_msg: | + [pre-commit.ci] auto fixes from pre-commit.com hooks [CI SKIP] + + for more information, see https://pre-commit.ci + autofix_prs: true + autoupdate_branch: '' + autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate' + autoupdate_schedule: monthly + # NB: hadolint not included in pre-commit.ci + skip: [check-hooks-apply, check-useless-excludes, hadolint] + submodules: false diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..aed6467 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "trailingComma": "all", + "singleQuote": true, + "printWidth": 120, + "tabWidth": 2, + "endOfLine": "lf" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fc609b..ffcf651 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -105,84 +105,84 @@ ## [v2.0.3](https://github.com/woodpecker-ci/plugin-git/releases/tag/v2.0.3) - 2022-12-29 -* BUGFIXES - * Fix write .netrc location with home var (#57) +- BUGFIXES + - Fix write .netrc location with home var (#57) ## [v2.0.1](https://github.com/woodpecker-ci/plugin-git/releases/tag/v2.0.1) - 2022-12-21 -* BUGFIXES - * Fix dockerfile to build correct go binary (#54) - * Do not set GIT_TERMINAL_PROMPT=0 for git (#52) +- BUGFIXES + - Fix dockerfile to build correct go binary (#54) + - Do not set GIT_TERMINAL_PROMPT=0 for git (#52) ## [v2.0.0](https://github.com/woodpecker-ci/plugin-git/releases/tag/v2.0.0) - 2022-11-14 -* FEATURES - * Partial clone by default (#48) -* BUGFIXES - * Make home var settable (#47) -* ENHANCEMENTS - * Publish semver images (#50) +- FEATURES + - Partial clone by default (#48) +- BUGFIXES + - Make home var settable (#47) +- ENHANCEMENTS + - Publish semver images (#50) ## [v1.6.1](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.6.1) - 2022-11-06 -* BUGFIXES - * Explicite set and check for home dir (#46) +- BUGFIXES + - Explicite set and check for home dir (#46) ## [v1.6.0](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.6.0) - 2022-10-13 -* BUGFIXES - * Handle git-lfs separately (#40) -* ENHANCEMENTS - * if no branch info is set, fallback to default repo branch (#41) +- BUGFIXES + - Handle git-lfs separately (#40) +- ENHANCEMENTS + - if no branch info is set, fallback to default repo branch (#41) ## [v1.5.0](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.5.0) - 2022-10-06 -* ENHANCEMENTS - * Release binarys (#37) - * Use ref to checkout if no commit sha is set (#36) - * Fix tests (#35) -* MISC - * Update urfave/cli to v2.17.1 (#38) - * Use built-in log instead of logrus (#34) +- ENHANCEMENTS + - Release binarys (#37) + - Use ref to checkout if no commit sha is set (#36) + - Fix tests (#35) +- MISC + - Update urfave/cli to v2.17.1 (#38) + - Use built-in log instead of logrus (#34) ## [v1.4.0](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.4.0) - 2022-08-30 -* ENHANCEMENTS - * Auto enable tags clone if it's ci event is 'tag' (#30) - * Support more architectures (#29) +- ENHANCEMENTS + - Auto enable tags clone if it's ci event is 'tag' (#30) + - Support more architectures (#29) ## [v1.3.0](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.3.0) - 2022-08-15 -* FEATURES - * Add option to Change branch name for checkout (#28) +- FEATURES + - Add option to Change branch name for checkout (#28) ## [v1.2.0](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.2.0) - 2022-05-25 -* FEATURES - * Add git-lfs (#21) - * Custom ssl certs for git (#19) -* ENHANCEMENTS - * Add an `lfs` setting which lets you disable Git LFS (#24) -* DOCUMENTATION - * Add docs page (#23) +- FEATURES + - Add git-lfs (#21) + - Custom ssl certs for git (#19) +- ENHANCEMENTS + - Add an `lfs` setting which lets you disable Git LFS (#24) +- DOCUMENTATION + - Add docs page (#23) ## [v1.1.2](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.1.2) - 2022-01-30 -* BUGFIXES - * Fix empty login/password in netrc (#20) +- BUGFIXES + - Fix empty login/password in netrc (#20) ## [v1.1.1](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.1.1) - 2021-12-23 -* BUGFIXES - * Fix version info (#13) +- BUGFIXES + - Fix version info (#13) ## [v1.1.0](https://github.com/woodpecker-ci/plugin-git/releases/tag/v1.1.0) - 2021-12-18 -* FEATURES - * Add ppc64le support (#8) -* BUGFIXES - * Regognize "CI_*" EnvVars (#6) -* ENHANCEMENTS - * Multiarch build (#8) -* MISC - * Upgrade urfave/cli to v2 (#5) +- FEATURES + - Add ppc64le support (#8) +- BUGFIXES + - Regognize "CI\_*" EnvVars (#6) +- ENHANCEMENTS + - Multiarch build (#8) +- MISC + - Upgrade urfave/cli to v2 (#5) diff --git a/LICENSE b/LICENSE index 8f71f43..8dada3e 100644 --- a/LICENSE +++ b/LICENSE @@ -199,4 +199,3 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - diff --git a/Makefile b/Makefile index ccca215..5c52fc6 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ endif LDFLAGS := -s -w -extldflags "-static" -X main.version=${BUILD_VERSION} +.PHONY: all all: build .PHONY: vendor @@ -41,6 +42,7 @@ vet: @echo "Running go vet..." CGO_ENABLED=0 go vet $(GO_PACKAGES) +.PHONY: test test: CGO_ENABLED=0 go test -cover ./... # we can not use "-race" as test trigger write to os.stdout diff --git a/README.md b/README.md index 0347761..23d63b6 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ docker buildx build \ *The platform linux/amd64 should be replaced by the correct platform.* -This will build the image and load it into docker so the image can be used locally. +This will build the image and load it into docker so the image can be used locally. [More information on the output formats can be found in docker buildx doc](https://docs.docker.com/engine/reference/commandline/buildx_build/#output). ## Usage @@ -96,5 +96,5 @@ docker run --rm \ ### HOME -The docker image can be build using `--build-arg HOME=`. +The docker image can be build using `--build-arg HOME=`. This will create the directory for the custom home and set the custom home as the default value for the `home` plugin setting (see [the plugin docs](./docs.md) for more information about this setting). diff --git a/docker/Dockerfile.multiarch b/docker/Dockerfile.multiarch index 4d7b88d..c4b1f8f 100644 --- a/docker/Dockerfile.multiarch +++ b/docker/Dockerfile.multiarch @@ -10,10 +10,10 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ FROM alpine:edge ARG HOME=/app -RUN mkdir -p $HOME -RUN apk add --no-cache ca-certificates git openssh curl git-lfs ENV GODEBUG=netdns=go ENV PLUGIN_HOME=$HOME +RUN mkdir -p $HOME && apk add --no-cache ca-certificates git openssh curl git-lfs + COPY --from=build src/release/plugin-git /bin/ ENTRYPOINT ["/bin/plugin-git"] diff --git a/docs.md b/docs.md index 162ef95..e5c2619 100644 --- a/docs.md +++ b/docs.md @@ -10,6 +10,8 @@ containerImageUrl: https://hub.docker.com/r/woodpeckerci/plugin-git url: https://github.com/woodpecker-ci/plugin-git --- +# plugin-git + This plugin is automatically introduced into your pipeline as the first step. Its purpose is to clone your Git repository. @@ -36,25 +38,25 @@ clone: ## Settings -| Settings Name | Default | Description -| --------------------------| ----------------- | -------------------------------------------- -| `depth` | *none* | If specified, uses git's `--depth` option to create a shallow clone with a limited number of commits, overwritten by partial -| `lfs` | `true` | Set this to `false` to disable retrieval of LFS files -| `recursive` | `false` | Clones submodules recursively -| `skip_verify` | `false` | Skips the SSL verification -| `tags` | `false` (except on tag event) | Fetches tags when set to true, default is false if event is not tag else true -| `submodule_overrides` | *none* | Override submodule urls -| `submodule_update_remote` | `false` | Pass the --remote flag to git submodule update -| `custom_ssl_path` | *none* | Set path to custom cert -| `custom_ssl_url` | *none* | Set url to custom cert -| `backoff` | `5sec` | Change backoff duration -| `attempts` | `5` | Change backoff attempts -| `branch` | $CI_COMMIT_BRANCH | Change branch name to checkout to -| `partial` | `true` (except if tags are fetched) | Only fetch the one commit and it's blob objects to resolve all files, overwrite depth with 1 -| `home` | | Change HOME var for commands executed, fail if it does not exist -| `remote` | $CI_REPO_CLONE_URL | Set the git remote url -| `sha` | $CI_COMMIT_SHA | git commit hash to retrieve (use `sha: ''` to clone the `ref`) -| `ref` | $CI_COMMIT_REF | Set the git reference to retrieve (use `ref: refs/heads/a_branch` and `sha: ''` to retrieve the head commit from the "a_branch" branch) -| `path` | $CI_WORKSPACE | Set destination path to clone to +| Settings Name | Default | Description | +| ------------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `depth` | _none_ | If specified, uses git's `--depth` option to create a shallow clone with a limited number of commits, overwritten by partial | +| `lfs` | `true` | Set this to `false` to disable retrieval of LFS files | +| `recursive` | `false` | Clones submodules recursively | +| `skip_verify` | `false` | Skips the SSL verification | +| `tags` | `false` (except on tag event) | Fetches tags when set to true, default is false if event is not tag else true | +| `submodule_overrides` | _none_ | Override submodule urls | +| `submodule_update_remote` | `false` | Pass the --remote flag to git submodule update | +| `custom_ssl_path` | _none_ | Set path to custom cert | +| `custom_ssl_url` | _none_ | Set url to custom cert | +| `backoff` | `5sec` | Change backoff duration | +| `attempts` | `5` | Change backoff attempts | +| `branch` | $CI_COMMIT_BRANCH | Change branch name to checkout to | +| `partial` | `true` (except if tags are fetched) | Only fetch the one commit and it's blob objects to resolve all files, overwrite depth with 1 | +| `home` | | Change HOME var for commands executed, fail if it does not exist | +| `remote` | $CI_REPO_CLONE_URL | Set the git remote url | +| `sha` | $CI_COMMIT_SHA | git commit hash to retrieve (use `sha: ''` to clone the `ref`) | +| `ref` | $CI_COMMIT_REF | Set the git reference to retrieve (use `ref: refs/heads/a_branch` and `sha: ''` to retrieve the head commit from the "a_branch" branch) | +| `path` | $CI_WORKSPACE | Set destination path to clone to | [pipelineClone]: https://woodpecker-ci.org/docs/usage/pipeline-syntax#clone