1+ name : CI/CD
2+
3+ on :
4+ push :
5+ branches :
6+ - main # Trigger on pushes to the main branch
7+ pull_request :
8+ branches :
9+ - main # Trigger on pull requests targeting the main branch
10+ workflow_dispatch : # Allow manual triggers
11+
12+ jobs :
13+ build-and-test :
14+ name : Build and Test
15+ runs-on : ubuntu-latest
16+
17+ steps :
18+ - name : Checkout repository
19+ uses : actions/checkout@v3
20+
21+ - name : Set up Rust
22+ uses : actions-rs/toolchain@v1
23+ with :
24+ toolchain : stable # Use the stable toolchain
25+ profile : minimal # Install only essential components
26+ override : true
27+
28+ - name : Cache Cargo registry
29+ uses : actions/cache@v3
30+ with :
31+ path : ~/.cargo/registry
32+ key : ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
33+ restore-keys : |
34+ ${{ runner.os }}-cargo-registry-
35+
36+ - name : Cache Cargo build
37+ uses : actions/cache@v3
38+ with :
39+ path : target
40+ key : ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
41+ restore-keys : |
42+ ${{ runner.os }}-cargo-build-
43+
44+ - name : Build the project
45+ run : cargo build --workspace --all-targets
46+
47+ - name : Run tests
48+ run : cargo test --workspace --all-targets
49+
50+ release :
51+ name : Publish to crates.io
52+ needs : build-and-test
53+ runs-on : ubuntu-latest
54+ if : github.ref == 'refs/heads/main' # Only run on the main branch
55+
56+ steps :
57+ - name : Checkout repository
58+ uses : actions/checkout@v3
59+
60+ - name : Set up Rust
61+ uses : actions-rs/toolchain@v1
62+ with :
63+ toolchain : stable
64+ profile : minimal
65+ override : true
66+
67+ - name : Publish to crates.io
68+ run : cargo publish --workspace --allow-dirty
69+ env :
70+ CARGO_REGISTRY_TOKEN : ${{ secrets.CARGO_REGISTRY_TOKEN }}
0 commit comments