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/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000..06100d9 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,27 @@ +name: Pre-commit checks + +on: + push: + pull_request: + +jobs: + pre-commit: + # 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.pull_request.head.repo.full_name != + github.repository + + name: Linting Checks + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Check files + uses: pre-commit/action@v3.0.1 diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..e8313d6 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,148 @@ +name: Rust CI + +on: + push: + pull_request: + schedule: + - cron: "0 0 * * *" + +env: + CARGO_TERM_COLOR: always + +# 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] + + runs-on: ${{ matrix.os }} + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.toml') }} + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.rust }} + + - name: Build + run: cargo +${{ matrix.rust }} build + + - name: Test + run: cargo +${{ matrix.rust }} test + + clippy: + if: github.event_name == 'push' || github.event_name == 'schedule' || + github.event.pull_request.head.repo.full_name != github.repository + runs-on: ubuntu-latest + needs: ["build"] + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.toml') }} + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + components: clippy + + - name: Run clippy + run: cargo clippy -- -Dclippy::all + + coverage: + if: github.event_name == 'push' || github.event_name == 'schedule' || + github.event.pull_request.head.repo.full_name != github.repository + runs-on: ubuntu-latest + needs: ["build"] + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.toml') }} + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly + components: llvm-tools-preview + + - name: Test + run: cargo test --all-features --no-fail-fast + env: + CARGO_INCREMENTAL: "0" + RUSTFLAGS: "-Cinstrument-coverage" + + - name: Install grcov + uses: baptiste0928/cargo-install@v3 + with: + crate: grcov + + - 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 + runs-on: ubuntu-latest + needs: ["build"] + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.toml') }} + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly + components: rustfmt + + - name: Run fmt + run: cargo fmt --all -- --check diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..e3daa82 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,27 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +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/doublify/pre-commit-rust + rev: v1.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/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/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/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