1+ # Optimized CI Pipeline - GOAP Phase 3 Implementation
2+ # Parallel quality checks with intelligent caching and incremental testing
3+
4+ name : Optimized Quality Check
5+
6+ on :
7+ push :
8+ branches : [ main, develop, feature/* ]
9+ pull_request :
10+ branches : [ main, develop ]
11+
12+ env :
13+ CARGO_TERM_COLOR : always
14+ RUST_BACKTRACE : 1
15+
16+ jobs :
17+ # Pre-check job to determine what changed
18+ changes :
19+ runs-on : ubuntu-latest
20+ outputs :
21+ cli : ${{ steps.changes.outputs.cli }}
22+ core : ${{ steps.changes.outputs.core }}
23+ output : ${{ steps.changes.outputs.output }}
24+ storage : ${{ steps.changes.outputs.storage }}
25+ ci : ${{ steps.changes.outputs.ci }}
26+ steps :
27+ - uses : actions/checkout@v4
28+ - uses : dorny/paths-filter@v2
29+ id : changes
30+ with :
31+ filters : |
32+ cli:
33+ - 'crates/cli/**'
34+ core:
35+ - 'crates/core/**'
36+ output:
37+ - 'crates/output/**'
38+ storage:
39+ - 'crates/storage/**'
40+ ci:
41+ - '.github/workflows/**'
42+ - 'Cargo.toml'
43+ - 'Cargo.lock'
44+
45+ # Parallel format checking
46+ format :
47+ runs-on : ubuntu-latest
48+ steps :
49+ - uses : actions/checkout@v4
50+ - uses : dtolnay/rust-toolchain@stable
51+ with :
52+ components : rustfmt
53+ - name : Cache cargo registry
54+ uses : actions/cache@v3
55+ with :
56+ path : |
57+ ~/.cargo/registry
58+ ~/.cargo/git
59+ key : ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
60+ - name : Check formatting
61+ run : cargo fmt --all -- --check
62+
63+ # Parallel clippy checking per crate
64+ clippy-cli :
65+ runs-on : ubuntu-latest
66+ needs : changes
67+ if : needs.changes.outputs.cli == 'true' || needs.changes.outputs.ci == 'true'
68+ steps :
69+ - uses : actions/checkout@v4
70+ - uses : dtolnay/rust-toolchain@stable
71+ with :
72+ components : clippy
73+ - name : Cache cargo build
74+ uses : actions/cache@v3
75+ with :
76+ path : target
77+ key : ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
78+ - name : Clippy CLI crate
79+ run : cargo clippy -p code_guardian_cli --all-targets --all-features -- -D warnings
80+
81+ clippy-core :
82+ runs-on : ubuntu-latest
83+ needs : changes
84+ if : needs.changes.outputs.core == 'true' || needs.changes.outputs.ci == 'true'
85+ steps :
86+ - uses : actions/checkout@v4
87+ - uses : dtolnay/rust-toolchain@stable
88+ with :
89+ components : clippy
90+ - name : Cache cargo build
91+ uses : actions/cache@v3
92+ with :
93+ path : target
94+ key : ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
95+ - name : Clippy Core crate
96+ run : cargo clippy -p code-guardian-core --all-targets --all-features -- -D warnings
97+
98+ clippy-output :
99+ runs-on : ubuntu-latest
100+ needs : changes
101+ if : needs.changes.outputs.output == 'true' || needs.changes.outputs.ci == 'true'
102+ steps :
103+ - uses : actions/checkout@v4
104+ - uses : dtolnay/rust-toolchain@stable
105+ with :
106+ components : clippy
107+ - name : Cache cargo build
108+ uses : actions/cache@v3
109+ with :
110+ path : target
111+ key : ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
112+ - name : Clippy Output crate
113+ run : cargo clippy -p code-guardian-output --all-targets --all-features -- -D warnings
114+
115+ clippy-storage :
116+ runs-on : ubuntu-latest
117+ needs : changes
118+ if : needs.changes.outputs.storage == 'true' || needs.changes.outputs.ci == 'true'
119+ steps :
120+ - uses : actions/checkout@v4
121+ - uses : dtolnay/rust-toolchain@stable
122+ with :
123+ components : clippy
124+ - name : Cache cargo build
125+ uses : actions/cache@v3
126+ with :
127+ path : target
128+ key : ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
129+ - name : Clippy Storage crate
130+ run : cargo clippy -p code-guardian-storage --all-targets --all-features -- -D warnings
131+
132+ # Parallel testing per crate
133+ test-cli :
134+ runs-on : ubuntu-latest
135+ needs : changes
136+ if : needs.changes.outputs.cli == 'true' || needs.changes.outputs.ci == 'true'
137+ steps :
138+ - uses : actions/checkout@v4
139+ - uses : dtolnay/rust-toolchain@stable
140+ - name : Cache cargo build
141+ uses : actions/cache@v3
142+ with :
143+ path : target
144+ key : ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
145+ - name : Test CLI crate
146+ run : cargo test -p code_guardian_cli
147+
148+ test-core :
149+ runs-on : ubuntu-latest
150+ needs : changes
151+ if : needs.changes.outputs.core == 'true' || needs.changes.outputs.ci == 'true'
152+ steps :
153+ - uses : actions/checkout@v4
154+ - uses : dtolnay/rust-toolchain@stable
155+ - name : Cache cargo build
156+ uses : actions/cache@v3
157+ with :
158+ path : target
159+ key : ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
160+ - name : Test Core crate
161+ run : cargo test -p code-guardian-core
162+
163+ test-output :
164+ runs-on : ubuntu-latest
165+ needs : changes
166+ if : needs.changes.outputs.output == 'true' || needs.changes.outputs.ci == 'true'
167+ steps :
168+ - uses : actions/checkout@v4
169+ - uses : dtolnay/rust-toolchain@stable
170+ - name : Cache cargo build
171+ uses : actions/cache@v3
172+ with :
173+ path : target
174+ key : ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
175+ - name : Test Output crate
176+ run : cargo test -p code-guardian-output
177+
178+ test-storage :
179+ runs-on : ubuntu-latest
180+ needs : changes
181+ if : needs.changes.outputs.storage == 'true' || needs.changes.outputs.ci == 'true'
182+ steps :
183+ - uses : actions/checkout@v4
184+ - uses : dtolnay/rust-toolchain@stable
185+ - name : Cache cargo build
186+ uses : actions/cache@v3
187+ with :
188+ path : target
189+ key : ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
190+ - name : Test Storage crate
191+ run : cargo test -p code-guardian-storage
192+
193+ # Integration build check
194+ build :
195+ runs-on : ubuntu-latest
196+ steps :
197+ - uses : actions/checkout@v4
198+ - uses : dtolnay/rust-toolchain@stable
199+ - name : Cache cargo build
200+ uses : actions/cache@v3
201+ with :
202+ path : target
203+ key : ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
204+ - name : Build all crates
205+ run : cargo build --workspace
206+
207+ # Summary job that requires all checks to pass
208+ quality-check-complete :
209+ runs-on : ubuntu-latest
210+ needs : [format, build, clippy-cli, clippy-core, clippy-output, clippy-storage, test-cli, test-core, test-output, test-storage]
211+ if : always()
212+ steps :
213+ - name : Check all jobs succeeded
214+ run : |
215+ if [[ "${{ needs.format.result }}" != "success" ]] ||
216+ [[ "${{ needs.build.result }}" != "success" ]] ||
217+ [[ "${{ needs.clippy-cli.result }}" != "success" && "${{ needs.clippy-cli.result }}" != "skipped" ]] ||
218+ [[ "${{ needs.clippy-core.result }}" != "success" && "${{ needs.clippy-core.result }}" != "skipped" ]] ||
219+ [[ "${{ needs.clippy-output.result }}" != "success" && "${{ needs.clippy-output.result }}" != "skipped" ]] ||
220+ [[ "${{ needs.clippy-storage.result }}" != "success" && "${{ needs.clippy-storage.result }}" != "skipped" ]] ||
221+ [[ "${{ needs.test-cli.result }}" != "success" && "${{ needs.test-cli.result }}" != "skipped" ]] ||
222+ [[ "${{ needs.test-core.result }}" != "success" && "${{ needs.test-core.result }}" != "skipped" ]] ||
223+ [[ "${{ needs.test-output.result }}" != "success" && "${{ needs.test-output.result }}" != "skipped" ]] ||
224+ [[ "${{ needs.test-storage.result }}" != "success" && "${{ needs.test-storage.result }}" != "skipped" ]]; then
225+ echo "❌ Quality check failed"
226+ exit 1
227+ else
228+ echo "✅ All quality checks passed!"
229+ fi
0 commit comments