Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: add CI, pre-commit, rustfmt, and dependabot configs #1

Merged
merged 15 commits into from
Jul 11, 2024
Merged
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/[email protected]
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

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need to run actions in this file on a schedule as well?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea behind this workflow being run on a schedule is to continuously test the codebase against updates to Rust nightly and dependencies.


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/[email protected]
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() {}

Check warning on line 1 in examples/hello-world/src/main.rs

View check run for this annotation

Codecov / codecov/patch

examples/hello-world/src/main.rs#L1

Added line #L1 was not covered by tests
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
@@ -1,0 +1,6 @@
use proc_macro::TokenStream;

#[proc_macro]
pub fn flareon(_input: TokenStream) -> TokenStream {
unimplemented!()

Check warning on line 5 in flareon-macros/src/lib.rs

View check run for this annotation

Codecov / codecov/patch

flareon-macros/src/lib.rs#L4-L5

Added lines #L4 - L5 were not covered by tests
}
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