diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..85472f5 --- /dev/null +++ b/.github/dependabot.yml @@ -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: + - "*" diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml new file mode 100644 index 0000000..9fcf78d --- /dev/null +++ b/.github/workflows/audit.yml @@ -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 }} diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..46fbac2 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,170 @@ +name: Rust CI + +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 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..311a381 --- /dev/null +++ b/.pre-commit-config.yaml @@ -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 diff --git a/Cargo.toml b/Cargo.toml index d3b8af1..e3ee4d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = [ "flareon", "flareon-admin", "flareon-auth", -"flareon-macros ", + "flareon-macros", "flareon-orm", # Examples "examples/hello-world", diff --git a/README.md b/README.md index ff167cb..46832ee 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ -# flareon \ No newline at end of file +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) diff --git a/examples/hello-world/Cargo.toml b/examples/hello-world/Cargo.toml index 1203b9a..2dbef25 100644 --- a/examples/hello-world/Cargo.toml +++ b/examples/hello-world/Cargo.toml @@ -5,4 +5,3 @@ publish = false description = "Hello World - Flareon example." [dependencies] -flareon = { path = "../../flareon" } diff --git a/examples/hello-world/src/main.rs b/examples/hello-world/src/main.rs index 2a778e4..f328e4d 100644 --- a/examples/hello-world/src/main.rs +++ b/examples/hello-world/src/main.rs @@ -1,3 +1 @@ -fn main() { - -} +fn main() {} diff --git a/flareon-admin/src/lib.rs b/flareon-admin/src/lib.rs index 724fdd5..b93cf3f 100644 --- a/flareon-admin/src/lib.rs +++ b/flareon-admin/src/lib.rs @@ -1,4 +1,4 @@ - pub fn add(left: u64, right: u64) -> u64 { +pub fn add(left: u64, right: u64) -> u64 { left + right } diff --git a/flareon-macros/Cargo.toml b/flareon-macros/Cargo.toml index c3885f6..e33eb64 100644 --- a/flareon-macros/Cargo.toml +++ b/flareon-macros/Cargo.toml @@ -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", -] } diff --git a/flareon-macros/src/lib.rs b/flareon-macros/src/lib.rs index e69de29..6136834 100644 --- a/flareon-macros/src/lib.rs +++ b/flareon-macros/src/lib.rs @@ -0,0 +1,6 @@ +use proc_macro::TokenStream; + +#[proc_macro] +pub fn flareon(_input: TokenStream) -> TokenStream { + unimplemented!() +} diff --git a/flareon-orm/Cargo.toml b/flareon-orm/Cargo.toml index 9f90a3d..3b85638 100644 --- a/flareon-orm/Cargo.toml +++ b/flareon-orm/Cargo.toml @@ -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", -] } diff --git a/flareon/Cargo.toml b/flareon/Cargo.toml index e20a072..73215d2 100644 --- a/flareon/Cargo.toml +++ b/flareon/Cargo.toml @@ -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 diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..0d80084 --- /dev/null +++ b/rustfmt.toml @@ -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