Skip to content

Commit

Permalink
ci: add CI, pre-commit, rustfmt, and dependabot configs (#1)
Browse files Browse the repository at this point in the history
* ci: add CI, pre-commit, rustfmt, and dependabot configs

* ci: make CARGO_INCREMENTAL global env variable

* ci: use Swatinem/rust-cache instead actions/cache

* ci: improve clippy invocation

* ci: add Cargo-audit workflow

* ci: add miri

* chore: make pre-commit happy

* chore: make pre-commit happy v2

* ci: name all jobs

* Revert "ci: add miri"

Miri is currently generating "reached the type-length limit while
instantiating" error in sqlx. Removing until we figure out how to fix
it.

This reverts commit b85831c.

* ci: use cargo-nextest

* ci: remove pre-commit workflow and use ci alternative

* ci: add cargo machete

* chore(deps): remove unused dependencies

* ci: rename pre-commit.ci messages

---------

Co-authored-by: Marek 'seqre' Grzelak <git@seqre.dev>
  • Loading branch information
m4tx and seqre authored Jul 11, 2024
1 parent 30f469d commit 15694a1
Show file tree
Hide file tree
Showing 14 changed files with 263 additions and 30 deletions.
21 changes: 21 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: 2

updates:
- package-ecosystem: cargo
directory: /
schedule:
interval: monthly
groups:
dependencies:
update-types:
- minor
- patch

- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
groups:
dependencies:
patterns:
- "*"
19 changes: 19 additions & 0 deletions .github/workflows/audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Security audit

on:
push:
paths:
- "**/Cargo.toml"
- "**/Cargo.lock"
schedule:
- cron: "0 0 * * *"

jobs:
security_audit:
name: Audit check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: rustsec/audit-check@v1.4.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
170 changes: 170 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
name: Rust CI

Check failure on line 1 in .github/workflows/rust.yml

View workflow job for this annotation

GitHub Actions / Build failed

.github/workflows/rust.yml#L1

This run timed out after more than 35 days.

on:
push:
pull_request:
schedule:
- cron: "0 0 * * *"

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0

# See: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency.
# This will ensure that only one commit will be running tests at a time on each PR.
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true

jobs:
build:
# Run on external PRs and pushes to branches on the repo
# This is to avoid double running on PRs from internal branches
if: github.event_name == 'push' || github.event_name == 'schedule' ||
github.event.pull_request.head.repo.full_name != github.repository
strategy:
matrix:
rust: [stable, nightly]
os: [ubuntu-latest, macos-latest, windows-latest]

name: Build & test
runs-on: ${{ matrix.os }}
steps:
- name: Checkout source
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}

- name: Cache Cargo registry
uses: Swatinem/rust-cache@v2

- name: Install cargo-nextest
uses: taiki-e/install-action@v2
with:
tool: nextest

- name: Build
run: cargo +${{ matrix.rust }} build

- name: Test
run: cargo +${{ matrix.rust }} nextest run

# Nextest does not support doc tests as in stable Rust
# they are not exposed in the same way as normal tests.
# https://github.com/nextest-rs/nextest/issues/16
- name: Test docs
run: cargo +${{ matrix.rust }} test --doc

clippy:
if: github.event_name == 'push' || github.event_name == 'schedule' ||
github.event.pull_request.head.repo.full_name != github.repository

name: Clippy lint checks
runs-on: ubuntu-latest
needs: ["build"]
steps:
- name: Checkout source
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: clippy

- name: Cache Cargo registry
uses: Swatinem/rust-cache@v2

- name: Run clippy
run: cargo clippy --no-deps -- -Dclippy::all -Wclippy::pedantic

coverage:
if: github.event_name == 'push' || github.event_name == 'schedule' ||
github.event.pull_request.head.repo.full_name != github.repository

name: Test coverage checks
runs-on: ubuntu-latest
needs: ["build"]
steps:
- name: Checkout source
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
components: llvm-tools-preview

- name: Cache Cargo registry
uses: Swatinem/rust-cache@v2

- name: Test
run: cargo test --all-features --no-fail-fast
env:
RUSTFLAGS: "-Cinstrument-coverage"

- name: Install grcov
uses: baptiste0928/cargo-install@v3
with:
crate: grcov
# Remove --locked until this issue is fixed: https://github.com/mozilla/grcov/issues/1187
locked: false

- name: Run grcov
run: grcov . --binary-path target/debug/deps/ -s . -t lcov --branch --ignore-not-existing --ignore '../**' --ignore '/*' -o coverage.lcov

- uses: codecov/codecov-action@v4
with:
files: ./coverage.lcov
flags: rust
fail_ci_if_error: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

rustfmt:
if: github.event_name == 'push' || github.event_name == 'schedule' ||
github.event.pull_request.head.repo.full_name != github.repository

name: Code formatting checks
runs-on: ubuntu-latest
needs: ["build"]
steps:
- name: Checkout source
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
components: rustfmt

- name: Cache Cargo registry
uses: Swatinem/rust-cache@v2

- name: Run fmt
run: cargo fmt --all -- --check

machete:
if: github.event_name == 'push' || github.event_name == 'schedule' ||
github.event.pull_request.head.repo.full_name != github.repository

name: Machete dependencies checks
runs-on: ubuntu-latest
needs: ["build"]
steps:
- name: Checkout source
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable

- name: Cache Cargo registry
uses: Swatinem/rust-cache@v2

- name: Run cargo-machete
uses: bnjbvr/cargo-machete@v0.6.2
32 changes: 32 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
ci:
autofix_commit_msg: "chore(pre-commit.ci): auto fixes from pre-commit hooks"
autoupdate_commit_msg: "chore(pre-commit.ci): pre-commit autoupdate"
autoupdate_schedule: "monthly"

fail_fast: false
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
- id: check-executables-have-shebangs
- id: check-toml
- id: detect-private-key
- id: end-of-file-fixer
- id: mixed-line-ending
args: ["--fix=lf"]
- id: trailing-whitespace

- repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.1.0
hooks:
- id: prettier
types_or: [json, yaml]

- repo: https://github.com/seqre/pre-commit-rust
rev: v0.1.0
hooks:
- id: fmt
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = [
"flareon",
"flareon-admin",
"flareon-auth",
"flareon-macros ",
"flareon-macros",
"flareon-orm",
# Examples
"examples/hello-world",
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
# flareon
flareon
=======

[![Rust Build Status](https://github.com/flareon-rs/flareon/workflows/Rust%20CI/badge.svg)](https://github.com/flareon-rs/flareon/actions/workflows/rust.yml)
[![codecov](https://codecov.io/gh/flareon-rs/flareon/branch/master/graph/badge.svg)](https://codecov.io/gh/flareon-rs/flareon)
1 change: 0 additions & 1 deletion examples/hello-world/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,3 @@ publish = false
description = "Hello World - Flareon example."

[dependencies]
flareon = { path = "../../flareon" }
4 changes: 1 addition & 3 deletions examples/hello-world/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
fn main() {

}
fn main() {}
2 changes: 1 addition & 1 deletion flareon-admin/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pub fn add(left: u64, right: u64) -> u64 {
pub fn add(left: u64, right: u64) -> u64 {
left + right
}

Expand Down
5 changes: 0 additions & 5 deletions flareon-macros/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,3 @@ description = "Modern web framework focused on speed and ease of use - macros."
proc-macro = true

[dependencies]
proc-macro2 = "1.0.86"
quote = "1.0.36"
syn = { version = "2.0.68", features = [
"full",
] }
6 changes: 6 additions & 0 deletions flareon-macros/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
use proc_macro::TokenStream;

#[proc_macro]
pub fn flareon(_input: TokenStream) -> TokenStream {
unimplemented!()
}
15 changes: 0 additions & 15 deletions flareon-orm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,3 @@ license.workspace = true
description = "Modern web framework focused on speed and ease of use - ORM."

[dependencies]
chrono = { version = "0.4", default-features = false, features = ["clock"] }
time = { version = "0.3.36", features = ["macros"] }
uuid = { version = "1", features = ["serde", "v4"] }
serde_json = "1"
async-std = { version = "1.8", features = ["attributes"] }
sea-query = "0.31.0-rc.8"
sqlx = "0.7.4"
sea-query-binder = { version = "0.6.0-rc.4", features = [
"sqlx-sqlite",
"with-chrono",
"with-json",
"with-uuid",
"with-time",
"runtime-async-std-native-tls",
] }
3 changes: 0 additions & 3 deletions flareon/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,3 @@ license.workspace = true
description = "Modern web framework focused on speed and ease of use."

[dependencies]
axum.workspace = true
tokio.workspace = true
tower.workspace = true
7 changes: 7 additions & 0 deletions rustfmt.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
unstable_features = true
imports_granularity = "module"
group_imports = "StdExternalCrate"
normalize_comments = true
reorder_impl_items = true
use_field_init_shorthand = true
wrap_comments = true

0 comments on commit 15694a1

Please sign in to comment.