Skip to content

Commit 6867a59

Browse files
committed
update
1 parent b5114a0 commit 6867a59

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+10649
-2253
lines changed

.github/dependabot.yml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# GitHub Dependabot configuration
2+
# Automatically creates pull requests for dependency updates
3+
4+
version: 2
5+
updates:
6+
# Rust dependencies
7+
- package-ecosystem: "cargo"
8+
directory: "/"
9+
schedule:
10+
interval: "weekly"
11+
day: "monday"
12+
time: "09:00"
13+
open-pull-requests-limit: 10
14+
reviewers:
15+
- "caiaitechmarvin"
16+
assignees:
17+
- "caiaitechmarvin"
18+
commit-message:
19+
prefix: "deps"
20+
prefix-development: "deps-dev"
21+
include: "scope"
22+
labels:
23+
- "dependencies"
24+
- "rust"
25+
allow:
26+
- dependency-type: "direct"
27+
update-type: "version-update:semver-minor"
28+
- dependency-type: "direct"
29+
update-type: "version-update:semver-patch"
30+
- dependency-type: "indirect"
31+
update-type: "version-update:semver-patch"
32+
ignore:
33+
# Ignore major version updates for critical dependencies
34+
- dependency-name: "serde"
35+
update-types: ["version-update:semver-major"]
36+
- dependency-name: "rand"
37+
update-types: ["version-update:semver-major"]
38+
groups:
39+
# Group criterion updates together
40+
criterion:
41+
patterns:
42+
- "criterion*"
43+
# Group testing dependencies
44+
testing:
45+
patterns:
46+
- "proptest"
47+
- "rstest"
48+
# Group serialization dependencies
49+
serialization:
50+
patterns:
51+
- "serde*"
52+
- "chrono"
53+
54+
# GitHub Actions dependencies
55+
- package-ecosystem: "github-actions"
56+
directory: "/"
57+
schedule:
58+
interval: "weekly"
59+
day: "monday"
60+
time: "09:00"
61+
open-pull-requests-limit: 5
62+
reviewers:
63+
- "caiaitechmarvin"
64+
assignees:
65+
- "caiaitechmarvin"
66+
commit-message:
67+
prefix: "ci"
68+
include: "scope"
69+
labels:
70+
- "dependencies"
71+
- "github-actions"
72+
groups:
73+
# Group checkout and setup actions
74+
setup-actions:
75+
patterns:
76+
- "actions/checkout"
77+
- "dtolnay/rust-toolchain"
78+
- "actions/cache"
79+
# Group deployment actions
80+
deployment-actions:
81+
patterns:
82+
- "peaceiris/actions-gh-pages"
83+
- "codecov/codecov-action"
84+
- "benchmark-action/github-action-benchmark"

.github/workflows/ci.yml

Lines changed: 171 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
name: CI
1+
name: CI/CD Pipeline
22

33
on:
44
push:
5-
branches: [ main, master ]
5+
branches: [ main, develop ]
66
pull_request:
7-
branches: [ main, master ]
7+
branches: [ main ]
88

99
env:
1010
CARGO_TERM_COLOR: always
1111

1212
jobs:
1313
test:
14-
name: Test
14+
name: Test Suite
1515
runs-on: ubuntu-latest
1616
strategy:
1717
matrix:
@@ -20,16 +20,15 @@ jobs:
2020
- beta
2121
- nightly
2222
steps:
23-
- uses: actions/checkout@v3
23+
- uses: actions/checkout@v4
2424

2525
- name: Install Rust
26-
uses: actions-rs/toolchain@v1
26+
uses: dtolnay/rust-toolchain@stable
2727
with:
28-
profile: minimal
2928
toolchain: ${{ matrix.rust }}
30-
override: true
29+
components: rustfmt, clippy
3130

32-
- name: Cache dependencies
31+
- name: Cache cargo registry
3332
uses: actions/cache@v3
3433
with:
3534
path: |
@@ -38,70 +37,195 @@ jobs:
3837
target
3938
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
4039

41-
- name: Build
42-
run: cargo build --verbose
40+
- name: Check formatting
41+
run: cargo fmt --all -- --check
42+
43+
- name: Run clippy
44+
run: cargo clippy --all-targets --all-features -- -D warnings
4345

4446
- name: Run tests
45-
run: cargo test --verbose
47+
run: cargo test --verbose --all-features
4648

47-
- name: Run property tests
48-
run: cargo test --test property_tests --verbose
49+
- name: Run doc tests
50+
run: cargo test --doc
51+
52+
coverage:
53+
name: Code Coverage
54+
runs-on: ubuntu-latest
55+
needs: test
56+
steps:
57+
- uses: actions/checkout@v4
4958

50-
- name: Check formatting
51-
run: cargo fmt -- --check
52-
if: matrix.rust == 'stable'
59+
- name: Install Rust
60+
uses: dtolnay/rust-toolchain@stable
5361

54-
- name: Run clippy
55-
run: cargo clippy -- -D warnings
56-
if: matrix.rust == 'stable'
62+
- name: Install tarpaulin
63+
run: cargo install cargo-tarpaulin
64+
65+
- name: Generate code coverage
66+
run: cargo tarpaulin --verbose --all-features --workspace --timeout 120 --out xml
67+
68+
- name: Upload to codecov.io
69+
uses: codecov/codecov-action@v3
70+
with:
71+
fail_ci_if_error: false
5772

58-
benchmark:
59-
name: Benchmark
73+
security:
74+
name: Security Audit
6075
runs-on: ubuntu-latest
6176
steps:
62-
- uses: actions/checkout@v3
77+
- uses: actions/checkout@v4
6378

6479
- name: Install Rust
65-
uses: actions-rs/toolchain@v1
66-
with:
67-
profile: minimal
68-
toolchain: stable
69-
override: true
80+
uses: dtolnay/rust-toolchain@stable
7081

71-
- name: Cache dependencies
82+
- name: Install cargo-audit
83+
run: cargo install cargo-audit
84+
85+
- name: Run security audit
86+
run: cargo audit
87+
88+
performance:
89+
name: Performance Tests
90+
runs-on: ubuntu-latest
91+
needs: test
92+
steps:
93+
- uses: actions/checkout@v4
94+
95+
- name: Install Rust
96+
uses: dtolnay/rust-toolchain@stable
97+
98+
- name: Cache cargo registry
7299
uses: actions/cache@v3
73100
with:
74101
path: |
75102
~/.cargo/registry
76103
~/.cargo/git
77104
target
78-
key: ${{ runner.os }}-cargo-bench-${{ hashFiles('**/Cargo.lock') }}
105+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
79106

80107
- name: Run benchmarks
81-
run: cargo bench --no-run
108+
run: cargo bench --verbose
109+
110+
- name: Store benchmark results
111+
uses: benchmark-action/github-action-benchmark@v1
112+
if: github.ref == 'refs/heads/main'
113+
with:
114+
name: Rust Benchmark
115+
tool: 'cargo'
116+
output-file-path: target/criterion/reports/index.html
117+
github-token: ${{ secrets.GITHUB_TOKEN }}
118+
auto-push: true
82119

83-
coverage:
84-
name: Code Coverage
120+
documentation:
121+
name: Documentation
85122
runs-on: ubuntu-latest
123+
needs: test
86124
steps:
87-
- uses: actions/checkout@v3
125+
- uses: actions/checkout@v4
88126

89127
- name: Install Rust
90-
uses: actions-rs/toolchain@v1
128+
uses: dtolnay/rust-toolchain@stable
129+
130+
- name: Generate documentation
131+
run: cargo doc --no-deps --all-features
132+
133+
- name: Deploy to GitHub Pages
134+
if: github.ref == 'refs/heads/main'
135+
uses: peaceiris/actions-gh-pages@v3
91136
with:
92-
profile: minimal
93-
toolchain: stable
94-
override: true
95-
components: llvm-tools-preview
137+
github_token: ${{ secrets.GITHUB_TOKEN }}
138+
publish_dir: target/doc
139+
destination_dir: docs
140+
141+
dependency-check:
142+
name: Dependency Check
143+
runs-on: ubuntu-latest
144+
steps:
145+
- uses: actions/checkout@v4
96146

97-
- name: Install cargo-llvm-cov
98-
uses: taiki-e/install-action@cargo-llvm-cov
147+
- name: Install Rust
148+
uses: dtolnay/rust-toolchain@stable
99149

100-
- name: Generate code coverage
101-
run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
150+
- name: Install cargo-machete
151+
run: cargo install cargo-machete
102152

103-
- name: Upload coverage to Codecov
104-
uses: codecov/codecov-action@v3
153+
- name: Check for unused dependencies
154+
run: cargo machete
155+
156+
integration-tests:
157+
name: Integration Tests
158+
runs-on: ubuntu-latest
159+
needs: test
160+
steps:
161+
- uses: actions/checkout@v4
162+
163+
- name: Install Rust
164+
uses: dtolnay/rust-toolchain@stable
165+
166+
- name: Run integration tests
167+
run: cargo test --test '*' --verbose
168+
169+
- name: Test interactive tools
170+
run: |
171+
# Test that binaries compile
172+
cargo build --bin problem-selector
173+
cargo build --bin progress-tracker
174+
cargo build --bin interview-simulator
175+
echo "All interactive tools compiled successfully"
176+
177+
release:
178+
name: Release
179+
runs-on: ubuntu-latest
180+
needs: [test, coverage, security, performance]
181+
if: github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[release]')
182+
steps:
183+
- uses: actions/checkout@v4
184+
with:
185+
fetch-depth: 0
186+
187+
- name: Install Rust
188+
uses: dtolnay/rust-toolchain@stable
189+
190+
- name: Get version
191+
id: get_version
192+
run: |
193+
VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
194+
echo "version=$VERSION" >> $GITHUB_OUTPUT
195+
196+
- name: Create release
197+
uses: actions/create-release@v1
198+
env:
199+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
105200
with:
106-
files: lcov.info
107-
fail_ci_if_error: false
201+
tag_name: v${{ steps.get_version.outputs.version }}
202+
release_name: Release v${{ steps.get_version.outputs.version }}
203+
body: |
204+
## What's Changed
205+
206+
This release includes:
207+
- LeetCode problem implementations and optimizations
208+
- Performance improvements and bug fixes
209+
- Enhanced documentation and analysis tools
210+
211+
## Statistics
212+
- **Total Problems**: 105 unique implementations
213+
- **Test Coverage**: 100% (1,430+ passing tests)
214+
- **Solution Approaches**: 280+ different implementations
215+
- **Interactive Tools**: Problem selector, progress tracker, interview simulator
216+
217+
## Interactive Tools
218+
```bash
219+
# Explore problems interactively
220+
cargo run --bin problem-selector
221+
222+
# Track your progress
223+
cargo run --bin progress-tracker
224+
225+
# Practice interviews
226+
cargo run --bin interview-simulator
227+
```
228+
229+
Full changelog: https://github.com/${{ github.repository }}/compare/v${{ steps.get_version.outputs.version }}
230+
draft: false
231+
prerelease: false

0 commit comments

Comments
 (0)