From d700b9036f69822cad8ce2570d94e61ed49f443a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 8 Apr 2023 09:35:14 +0200 Subject: Initial import Signed-off-by: Matthias Beyer --- .github/dependabot.yml | 11 ++++ .github/workflows/ci.yml | 100 +++++++++++++++++++++++++++++++++++++ .github/workflows/commit-lint.yml | 18 +++++++ .github/workflows/flake-update.yml | 28 +++++++++++ bors.toml | 10 ++++ 5 files changed, 167 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/commit-lint.yml create mode 100644 .github/workflows/flake-update.yml create mode 100644 bors.toml 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/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 = "
" + +delete_merged_branches = true + + -- cgit v1.2.3 From 0733ae2addd2b1ed55a5a1a31da9ed62c0a0ba04 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 8 Apr 2023 09:37:37 +0200 Subject: Add cargo project for testing Signed-off-by: Matthias Beyer --- .gitignore | 1 + Cargo.toml | 8 ++++++++ src/main.rs | 3 +++ 3 files changed, 12 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..1a53f8d --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "rust-ci-setup-bors" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} -- cgit v1.2.3 From 11a8a40853798bad6334e5d2098753040d1a35d0 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 8 Apr 2023 09:45:40 +0200 Subject: Add README Signed-off-by: Matthias Beyer --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..5c111d1 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# rust-ci-setup-bors + +You can fetch this repository to setup rust CI with bors in a project. + +In your project: + +``` +git checkout -b add-ci +git fetch github.com/matthiasbeyer/rust-ci-setup-bors master +git merge --no-ff --allow-unrelated-histories FETCH_HEAD +``` + +As this repository contains a default rust package (generated via `cargo init`), +you might need to resolve some conflicts. + +We need to cargo package to be able to run automated CI jobs on this repository, +for example for updating actions. + +You might also need to remove this README. + +## License + +(C) 2023 Matthias Beyer + +WTFPL + -- cgit v1.2.3 From 5ee8ecb396223546c05a895c8187670a57cb4158 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 8 Apr 2023 09:45:40 +0200 Subject: Fix: Add https:// in github url Signed-off-by: Matthias Beyer --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c111d1..13b469a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ In your project: ``` git checkout -b add-ci -git fetch github.com/matthiasbeyer/rust-ci-setup-bors master +git fetch https://github.com/matthiasbeyer/rust-ci-setup-bors master git merge --no-ff --allow-unrelated-histories FETCH_HEAD ``` -- cgit v1.2.3 From 3cfc18f83eacacb6e67c5e84041bb62294c6a9fa Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 8 Apr 2023 09:49:29 +0200 Subject: Add gitlint config file Signed-off-by: Matthias Beyer --- .gitlint | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 .gitlint 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] + -- cgit v1.2.3