summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2023-04-08 09:59:37 +0200
committerMatthias Beyer <mail@beyermatthias.de>2023-04-08 09:59:37 +0200
commitaa957130e9cbb69e56b8a04ca52c1976e0796607 (patch)
tree7da288e217c08f793f6928c7c7ffdeb1c7875aea
parent05b7f899e7b07efab751f4d68beea11f16793c1c (diff)
parent841042b7bb0e70bbf6f2e0509f359517e58de456 (diff)
Merge branch 'master' of https://github.com/matthiasbeyer/rust-ci-setup-bors into ci
This introduces a github-action based CI with bors enabled. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--.github/dependabot.yml11
-rw-r--r--.github/workflows/ci.yml100
-rw-r--r--.github/workflows/commit-lint.yml18
-rw-r--r--.github/workflows/flake-update.yml28
-rw-r--r--.gitlint138
-rw-r--r--bors.toml10
6 files changed, 305 insertions, 0 deletions
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..8a43b27
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,11 @@
+version: 2
+updates:
+- package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: monthly
+- package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: monthly
+
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..69bd9f7
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,100 @@
+name: CI
+
+on:
+ push:
+ branches: [master, staging, trying, release-*]
+ pull_request:
+ branches: [master, release-*]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ check:
+ name: check
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - 1.60.0
+ - stable
+ - beta
+ # - nightly
+
+ steps:
+ - name: Checkout sources
+ uses: actions/checkout@v3
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - uses: swatinem/rust-cache@v2
+ - name: cargo-check
+ run: cargo check --all-features
+
+
+ fmt:
+ name: format
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: 1.60.0
+ components: rustfmt
+ - name: cargo-fmt
+ run: cargo fmt -- --check
+
+
+ test:
+ name: test
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - 1.60.0
+ - stable
+ - beta
+ # - nightly
+ steps:
+ - name: Checkout sources
+ uses: actions/checkout@v3
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - uses: swatinem/rust-cache@v2
+ - name: cargo-test
+ run: cargo test --all --all-features
+
+
+ clippy:
+ name: clippy
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: 1.60.0
+ components: clippy
+ - uses: swatinem/rust-cache@v2
+ - name: cargo-clippy
+ run: cargo clippy --all --all-targets --all-features -- -D warnings
+
+
+ # We need some "accummulation" job here because bors fails (timeouts) to
+ # listen on matrix builds.
+ # Hence, we have some kind of dummy here that bors can listen on
+ ci-success:
+ name: CI
+ if: ${{ success() }}
+ needs:
+ - check
+ - clippy
+ - fmt
+ - test
+ runs-on: ubuntu-latest
+ steps:
+ - name: CI succeeded
+ run: exit 0
diff --git a/.github/workflows/commit-lint.yml b/.github/workflows/commit-lint.yml
new file mode 100644
index 0000000..309d637
--- /dev/null
+++ b/.github/workflows/commit-lint.yml
@@ -0,0 +1,18 @@
+on:
+ pull_request:
+
+name: Pull Request Checks
+
+jobs:
+ commit-lint:
+ runs-on: ubuntu-latest
+ if: github.event_name == 'pull_request'
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-python@v4
+ with:
+ python-version: '3.x'
+ - run: pip install gitlint
+ - run: gitlint --commits $(git merge-base origin/master HEAD)..HEAD
diff --git a/.github/workflows/flake-update.yml b/.github/workflows/flake-update.yml
new file mode 100644
index 0000000..b14dde7
--- /dev/null
+++ b/.github/workflows/flake-update.yml
@@ -0,0 +1,28 @@
+name: "Update flakes"
+
+on:
+ repository_dispatch:
+ workflow_dispatch:
+ schedule:
+ # 01:15 every monday
+ - cron: '15 1 * * 1'
+
+jobs:
+ lockfile:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Install Nix
+ uses: cachix/install-nix-action@v18
+ with:
+ extra_nix_config: |
+ access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
+ - name: Update flake.lock
+ uses: DeterminateSystems/update-flake-lock@v15
+ with:
+ pr-title: "Update flake.lock" # Title of PR to be created
+ # pr-labels: | # Labels to be set on the PR
+ # dependencies
+ # automated
+
diff --git a/.gitlint b/.gitlint
new file mode 100644
index 0000000..b43c56d
--- /dev/null
+++ b/.gitlint
@@ -0,0 +1,138 @@
+# Edit this file as you like.
+#
+# All these sections are optional. Each section with the exception of [general] represents
+# one rule and each key in it is an option for that specific rule.
+#
+# Rules and sections can be referenced by their full name or by id. For example
+# section "[body-max-line-length]" could also be written as "[B1]". Full section names are
+# used in here for clarity.
+#
+[general]
+# Ignore certain rules, this example uses both full name and id
+ignore=body-is-missing
+
+# verbosity should be a value between 1 and 3, the commandline -v flags take precedence over this
+# verbosity = 2
+
+# By default gitlint will ignore merge, revert, fixup and squash commits.
+ignore-merge-commits=true
+# ignore-revert-commits=true
+# ignore-fixup-commits=true
+# ignore-squash-commits=true
+
+# Ignore any data send to gitlint via stdin
+# ignore-stdin=true
+
+# Fetch additional meta-data from the local repository when manually passing a
+# commit message to gitlint via stdin or --commit-msg. Disabled by default.
+# staged=true
+
+# Hard fail when the target commit range is empty. Note that gitlint will
+# already fail by default on invalid commit ranges. This option is specifically
+# to tell gitlint to fail on *valid but empty* commit ranges.
+# Disabled by default.
+# fail-without-commits=true
+
+# Enable debug mode (prints more output). Disabled by default.
+# debug=true
+
+# Enable community contributed rules
+# See http://jorisroovers.github.io/gitlint/contrib_rules for details
+contrib=CC1, CC2
+
+# Set the extra-path where gitlint will search for user defined rules
+# See http://jorisroovers.github.io/gitlint/user_defined_rules for details
+# extra-path=examples/
+
+# This is an example of how to configure the "title-max-length" rule and
+# set the line-length it enforces to 50
+# [title-max-length]
+# line-length=50
+
+# Conversely, you can also enforce minimal length of a title with the
+# "title-min-length" rule:
+# [title-min-length]
+# min-length=5
+
+# [title-must-not-contain-word]
+# Comma-separated list of words that should not occur in the title. Matching is case
+# insensitive. It's fine if the keyword occurs as part of a larger word (so "WIPING"
+# will not cause a violation, but "WIP: my title" will.
+# words=wip
+
+# [title-match-regex]
+# python-style regex that the commit-msg title must match
+# Note that the regex can contradict with other rules if not used correctly
+# (e.g. title-must-not-contain-word).
+# regex=^US[0-9]*
+
+# [body-max-line-length]
+# line-length=72
+
+# [body-min-length]
+# min-length=5
+
+# [body-is-missing]
+# Whether to ignore this rule on merge commits (which typically only have a title)
+# default = True
+# ignore-merge-commits=false
+
+# [body-changed-file-mention]
+# List of files that need to be explicitly mentioned in the body when they are changed
+# This is useful for when developers often erroneously edit certain files or git submodules.
+# By specifying this rule, developers can only change the file when they explicitly reference
+# it in the commit message.
+# files=gitlint-core/gitlint/rules.py,README.md
+
+# [body-match-regex]
+# python-style regex that the commit-msg body must match.
+# E.g. body must end in My-Commit-Tag: foo
+# regex=My-Commit-Tag: foo$
+
+# [author-valid-email]
+# python-style regex that the commit author email address must match.
+# For example, use the following regex if you only want to allow email addresses from foo.com
+# regex=[^@]+@foo.com
+
+# [ignore-by-title]
+# Ignore certain rules for commits of which the title matches a regex
+# E.g. Match commit titles that start with "Release"
+# regex=^Release(.*)
+
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# [ignore-by-body]
+# Ignore certain rules for commits of which the body has a line that matches a regex
+# E.g. Match bodies that have a line that that contain "release"
+# regex=(.*)release(.*)
+#
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# [ignore-body-lines]
+# Ignore certain lines in a commit body that match a regex.
+# E.g. Ignore all lines that start with 'Co-Authored-By'
+# regex=^Co-Authored-By
+
+[ignore-by-author-name]
+# Ignore certain rules for commits of which the author name matches a regex
+# E.g. Match commits made by dependabot
+regex=(.*)dependabot(.*)|github-actions\[bot\]
+#
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# This is a contrib rule - a community contributed rule. These are disabled by default.
+# You need to explicitly enable them one-by-one by adding them to the "contrib" option
+# under [general] section above.
+# [contrib-title-conventional-commits]
+# Specify allowed commit types. For details see: https://www.conventionalcommits.org/
+# types = bugfix,user-story,epic
+[contrib-body-requires-signed-off-by]
+
+[contrib-disallow-cleanup-commits]
+
diff --git a/bors.toml b/bors.toml
new file mode 100644
index 0000000..e0d8180
--- /dev/null
+++ b/bors.toml
@@ -0,0 +1,10 @@
+# Must pass on the merge with the master branch
+status = [
+ "CI"
+]
+
+cut_body_after = "<details>"
+
+delete_merged_branches = true
+
+