Skip to content

Commit

Permalink
ci: Update CI (#1)
Browse files Browse the repository at this point in the history
* Update rust toolchain
* configure ci
* configure pre-commit hooks
  • Loading branch information
asonnino authored May 21, 2024
1 parent 8d07ee5 commit 02b29f9
Show file tree
Hide file tree
Showing 17 changed files with 555 additions and 58 deletions.
32 changes: 32 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 100
trim_trailing_whitespace = true

[*.md]
indent_size = unset
max_line_length = 150

[{*.yml,*.yaml,*.toml}]
indent_size = 2
max_line_length = 150

# Ignore paths
[{.git/**/*,**/*.lock,LICENSE,README.md,assets/*}]
charset = unset
end_of_line = unset
indent_size = unset
indent_style = unset
insert_final_newline = unset
max_line_length = unset
trim_trailing_whitespace = unset
30 changes: 30 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Documentation for all configuration options:
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
day: "sunday"
commit-message:
prefix: "fix"
prefix-development: "chore"
include: "scope"
groups:
cargo-minor-and-patch-dependencies:
update-types:
- "minor"
- "patch"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
commit-message:
prefix: "chore"
include: "scope"
groups:
github-actions-all:
patterns: ["*"]
139 changes: 139 additions & 0 deletions .github/workflows/code.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
name: Code

on:
# Run workflow on every PR.
pull_request:
# Run workflow on the main branch after every merge.
# This is important to fill the GitHub Actions cache in a way that PRs can see it.
push:
branches:
- main
# Run workflow on the main branch every Sunday.
schedule:
- cron: "14 3 * * 0"

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always
CLICOLOR_FORCE: 1
# Incremental compilation is useful as part of an edit-build-test-edit cycle, as it lets the
# compiler avoid recompiling code that hasn't changed. The setting does not improve the current
# compilation but instead saves additional information to speed up future compilations (see
# https://doc.rust-lang.org/cargo/reference/profiles.html#incremental). Thus, this is only useful
# in CI if the result is cached, which we only do on the `main` branch.
CARGO_INCREMENTAL: ${{ github.ref == 'refs/heads/main' && '1' || '0' }}
# Allow more retries for network requests in cargo (downloading crates) and
# rustup (installing toolchains). This should help to reduce flaky CI failures
# from transient network timeouts or other issues.
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10
# Don't emit giant backtraces in the CI logs.
RUST_BACKTRACE: short
RUSTDOCFLAGS: -D warnings

jobs:
diff:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v4
- name: Detect Changes
uses: dorny/paths-filter@v3.0.2
id: diff
with:
filters: |
- 'crates/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'rust-toolchain'
- 'deny.toml'
- '.github/workflows/code.yml'
dependencies:
name: Check dependencies
needs: diff
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v1.6.3
with:
# do not check advisories on PRs to prevent sudden failure due to new announcement
command: check bans licenses sources

dependencies-schedule:
name: Check dependencies (including vulnerabilities)
needs: diff
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v1.6.3

test:
name: Test Rust code
needs: diff
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2.7.3
with:
save-if: ${{ github.ref == 'refs/heads/main' && 'true' || 'false' }}
- name: Run tests
run: cargo test -- --include-ignored

lint:
name: Lint Rust code
needs: diff
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2.7.3
with:
save-if: ${{ github.ref == 'refs/heads/main' && 'true' || 'false' }}
- run: cargo install cargo-sort@1.0.9

- name: Check formatting with rustfmt
run: >
cargo fmt --all -- --check
--config group_imports=StdExternalCrate,imports_granularity=Crate,imports_layout=HorizontalVertical
- name: Check sorting of dependencies
run: cargo sort -w -c
- name: Lint using clippy (w/o tests)
run: cargo clippy --all-features --no-deps -- -D warnings
- name: Lint using clippy (w/ tests)
run: cargo clippy --all-features --tests --no-deps -- -D warnings
- name: Check documentation
run: cargo doc --no-deps --workspace

build:
name: Build Rust code
needs: diff
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2.7.3
with:
save-if: ${{ github.ref == 'refs/heads/main' && 'true' || 'false' }}
- name: Build Rust code
run: cargo build --verbose

check-all:
name: Check if all code checks succeeded
if: always()
needs:
- diff
- dependencies
- test
- lint
- build
runs-on: ubuntu-latest
steps:
- name: Decide whether all needed jobs succeeded
uses: re-actors/alls-green@v1.2.2
with:
allowed-skips: ${{ toJSON(needs) }}
jobs: ${{ toJSON(needs) }}
60 changes: 60 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Lint

on: [pull_request]

permissions:
contents: read

jobs:
pr-title:
runs-on: ubuntu-latest
name: Check PR title format
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check PR title
uses: amannn/action-semantic-pull-request@v5.5.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

editorconfig:
runs-on: ubuntu-latest
name: Check editorconfig
steps:
- uses: actions/checkout@v4
- run: pip install editorconfig-checker=="2.7.3"
- run: ec

typos:
runs-on: ubuntu-latest
name: Check spelling
steps:
- uses: actions/checkout@v4
- uses: crate-ci/typos@v1.21.0

license-headers:
runs-on: ubuntu-latest
name: Check license headers
steps:
- uses: actions/checkout@v4
- run: cargo install licensesnip@1.5.0
- run: licensesnip check

check-all:
name: Check if all lint jobs succeeded
if: always()
needs:
- pr-title
- editorconfig
- typos
- license-headers
runs-on: ubuntu-latest
steps:
- name: Decide whether all needed jobs succeeded
uses: re-actors/alls-green@v1.2.2
with:
jobs: ${{ toJSON(needs) }}
21 changes: 0 additions & 21 deletions .github/workflows/rust.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/updates.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Updates

on:
# every month
schedule:
- cron: "14 3 1 * *"
# on demand
workflow_dispatch:

jobs:
pre-commit:
name: "Update pre-commit hooks and run them on all files"
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: rustup update stable
- run: pip install pre-commit
- name: Run pre-commit autoupdate
run: >
pre-commit autoupdate
--repo https://github.com/pre-commit/pre-commit-hooks
--repo https://github.com/editorconfig-checker/editorconfig-checker.python
--repo https://github.com/crate-ci/typos
--repo https://github.com/EmbarkStudios/cargo-deny
- run: pre-commit run --all-files
- uses: peter-evans/create-pull-request@v6.0.5
if: ${{ success() }}
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: chore/update-pre-commit-hooks
title: "chore: update pre-commit hooks"
commit-message: "chore: update pre-commit hooks"
body: Update pre-commit hooks to latest version.
- uses: peter-evans/create-pull-request@v6.0.5
if: ${{ failure() }}
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: chore/update-pre-commit-hooks
title: "chore: update pre-commit hooks"
commit-message: "chore: update pre-commit hooks"
body: |
Update pre-commit hooks to latest version.
**Warning**: Some checks did not succeed. Please check the [action output][run] before merging this PR.
[run]: https://github.com/MystenLabs/walrus/actions/runs/${{ github.run_id }}
2 changes: 2 additions & 0 deletions .licensesnip
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Copyright (c) Alberto Sonnino
SPDX-License-Identifier: Apache-2.0
Loading

0 comments on commit 02b29f9

Please sign in to comment.