diff --git a/.hadolint.yml b/.hadolint.yml
new file mode 100644
index 0000000000..85e8ce0f72
--- /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 0000000000..83be56f64d
--- /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 0000000000..289d4c5c6c
--- /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: v2.3.0
+ hooks:
+ - id: check-yaml
+ exclude: 'pipeline/schema/.woodpecker/test-merge-map-and-sequence.yml'
+ - id: end-of-file-fixer
+ - id: trailing-whitespace
+ - repo: https://github.com/golangci/golangci-lint
+ rev: v1.55.1
+ 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.0
+ 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
+ skip: [check-hooks-apply, check-useless-excludes]
+ submodules: false
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6b1579455b..1d681f945c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,8 +2,8 @@
## Maintainers
-To make sure every Pull Request (PR) is checked, we have **team maintainers**.
-Every PR **MUST** be reviewed by at least **one** maintainer (or owner) before it can get merged.
+To make sure every Pull Request (PR) is checked, we have **team maintainers**.\
+Every PR **MUST** be reviewed by at least **one** maintainer (or owner) before it can get merged.\
A maintainer should be a contributor and contributed at least 4 accepted PRs.
A contributor should apply as a maintainer in the [Discord #develop](https://discord.gg/fcMQqSMXJy) or [Matrix Develop](https://matrix.to/#/#WoodpeckerCI-Develop:obermui.de) channel.
The owners or the team maintainers may invite the contributor.
@@ -14,30 +14,29 @@ team](https://github.com/orgs/woodpecker-ci/teams/advisors/members).
Of course, if an advisor has time to code review, we will gladly welcome them back to the maintainers team.
If a maintainer is inactive for more than 3 months and forgets to leave the maintainers team, the owners may move him or her from the maintainers team to the advisors team.
-For security reasons, Maintainers must use 2FA for their accounts and if possible provide GPG signed commits.
-https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/
-https://help.github.com/articles/signing-commits-with-gpg/
+For security reasons, Maintainers must use 2FA for their accounts and if possible provide GPG signed commits.\
+
+
## Owners
-Since Woodpecker is a pure community organization without any company support,
-to keep the development healthy we will elect two owners every year.
-This can also happen when a owner propose a vote or the majority of the maintainers do so.
-All maintainers may vote to elect up to two candidates. When the new owners have been elected, the old owners will give up ownership to the newly elected owners.
+Since Woodpecker is a pure community organization without any company support, to keep the development healthy we will elect two owners every year.\
+This can also happen when a owner propose a vote or the majority of the maintainers do so.\
+All maintainers may vote to elect up to two candidates. When the new owners have been elected, the old owners will give up ownership to the newly elected owners.
If an owner is unable to do so, the other owners will assist in ceding ownership to the newly elected owners.
-For security reasons, Owners must use 2FA.
+For security reasons, Owners must use 2FA.\
([Docs: Securing your account with two-factor authentication](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa))
To honor the past owners, here's the history of the owners and the time
they served:
-- 2023-01-01 ~ 2023-12-31 - https://github.com/woodpecker-ci/woodpecker/issues/1467
+- 2023-01-01 ~ 2023-12-31 -
- [6543](https://github.com/6543)
- [Anbraten](https://github.com/anbraten)
-- 2021-09-28 ~ 2022-12-31 - https://github.com/woodpecker-ci/woodpecker/issues/633
+- 2021-09-28 ~ 2022-12-31 -
- [6543](https://github.com/6543)
- [Anbraten](https://github.com/anbraten)
@@ -61,3 +60,13 @@ modifications). It is the maintainer team's responsibility from this point to ge
We use [Semantic Versioning](https://semver.org/) to be able,
to communicate when admins have to do manual migration steps and when they can just bump versions up.
+
+## Development
+
+[pre-commit](https://pre-commit.com/) is used in this repository.
+To apply it during local development, first
+
+1. Install `pre-commit` via your favorite option
+1. Enable it via `pre-commit install` in the repository root.
+1. (Run it manually via `pre-commit run --all-files` in the repository root.)
+1. Now `pre-commit` will exec on all modified files before every commit.