Skip to content

Commit 090392f

Browse files
committed
ci: 优化后端CI工作流触发条件
简化了GitHub Actions工作流的触发条件,仅在backend目录下的文件发生变化时触发CI流程,以减少不必要的构建
1 parent c19d0b8 commit 090392f

1 file changed

Lines changed: 144 additions & 196 deletions

File tree

.github/workflows/backend.yml

Lines changed: 144 additions & 196 deletions
Original file line numberDiff line numberDiff line change
@@ -1,196 +1,144 @@
1-
name: Rust Backend CI
2-
3-
on:
4-
push:
5-
branches: ["dev"]
6-
pull_request:
7-
branches: ["dev"]
8-
release:
9-
types:
10-
- published # 当发布版本时触发
11-
12-
env:
13-
CARGO_TERM_COLOR: always
14-
BINARY_NAME: backend
15-
DATABASE_URL: ${{ secrets.DATABASE_URL }}
16-
SQLX_OFFLINE: true
17-
18-
jobs:
19-
test:
20-
name: Test
21-
runs-on: ubuntu-latest
22-
steps:
23-
- uses: actions/checkout@v4
24-
25-
- name: Setup Rust
26-
uses: actions-rs/toolchain@v1
27-
with:
28-
profile: minimal
29-
toolchain: stable
30-
override: true
31-
32-
- name: Cache Rust dependencies
33-
uses: actions/cache@v3
34-
with:
35-
path: |
36-
~/.cargo/registry
37-
~/.cargo/git
38-
backend/target
39-
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
40-
restore-keys: ${{ runner.os }}-cargo-
41-
42-
- name: Cache SQLx metadata
43-
uses: actions/cache@v3
44-
with:
45-
path: backend/.sqlx
46-
key: ${{ runner.os }}-sqlx-${{ hashFiles('**/*.rs', '**/migrations/**') }}
47-
restore-keys: ${{ runner.os }}-sqlx-
48-
49-
- name: Install SQLx CLI
50-
run: cargo install sqlx-cli --no-default-features --features postgres
51-
52-
- name: Prepare SQLx metadata
53-
run: |
54-
cd backend
55-
cargo sqlx prepare -- --tests
56-
env:
57-
DATABASE_URL: ${{ secrets.DATABASE_URL }}
58-
SQLX_OFFLINE: true
59-
60-
- name: Run tests
61-
run: cd backend && cargo test --verbose
62-
63-
build:
64-
name: Build ${{ matrix.target.name }}
65-
needs: test
66-
runs-on: ${{ matrix.target.os }}
67-
strategy:
68-
fail-fast: false
69-
matrix:
70-
target:
71-
- name: Linux x86_64
72-
os: ubuntu-latest
73-
target: x86_64-unknown-linux-gnu
74-
bin: backend
75-
asset_name: backend-linux-amd64
76-
- name: Linux ARM64
77-
os: ubuntu-latest
78-
target: aarch64-unknown-linux-gnu
79-
bin: backend
80-
asset_name: backend-linux-arm64
81-
- name: Windows
82-
os: windows-latest
83-
target: x86_64-pc-windows-msvc
84-
bin: backend.exe
85-
asset_name: backend-windows-amd64.exe
86-
87-
steps:
88-
- uses: actions/checkout@v4
89-
90-
- name: Setup Rust
91-
uses: actions-rs/toolchain@v1
92-
with:
93-
profile: minimal
94-
toolchain: stable
95-
target: ${{ matrix.target.target }}
96-
override: true
97-
98-
- name: Cache Rust dependencies
99-
uses: actions/cache@v3
100-
with:
101-
path: |
102-
~/.cargo/registry
103-
~/.cargo/git
104-
backend/target
105-
key: ${{ runner.os }}-${{ matrix.target.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
106-
restore-keys: ${{ runner.os }}-${{ matrix.target.target }}-cargo-
107-
108-
- name: Cache SQLx metadata
109-
uses: actions/cache@v3
110-
with:
111-
path: backend/.sqlx
112-
key: ${{ runner.os }}-sqlx-${{ hashFiles('**/*.rs', '**/migrations/**') }}
113-
restore-keys: ${{ runner.os }}-sqlx-
114-
115-
- name: Install SQLx CLI
116-
run: cargo install sqlx-cli --no-default-features --features postgres
117-
118-
- name: Prepare SQLx metadata
119-
run: |
120-
cd backend
121-
cargo sqlx prepare -- --tests
122-
env:
123-
DATABASE_URL: ${{ secrets.DATABASE_URL }}
124-
SQLX_OFFLINE: true
125-
126-
- name: Build release binary
127-
run: |
128-
cd backend
129-
cargo build --release --target ${{ matrix.target.target }}
130-
- name: Prepare binary
131-
shell: bash
132-
run: |
133-
cd backend
134-
mkdir -p release
135-
cp target/${{ matrix.target.target }}/release/${{ matrix.target.bin }} release/${{ matrix.target.asset_name }}
136-
- name: Upload binary as artifact
137-
uses: actions/upload-artifact@v4
138-
with:
139-
name: ${{ matrix.target.asset_name }}
140-
path: backend/release/${{ matrix.target.asset_name }}
141-
if-no-files-found: error
142-
143-
update-release-notes:
144-
permissions:
145-
contents: write
146-
runs-on: ubuntu-latest
147-
steps:
148-
- uses: actions/checkout@v4
149-
150-
- name: Extract release notes
151-
id: extract-release-notes
152-
uses: ffurrer2/extract-release-notes@v2
153-
154-
- uses: softprops/action-gh-release@v2
155-
with:
156-
body: |-
157-
${{ steps.extract-release-notes.outputs.release_notes }}
158-
| File | SHA256 |
159-
| ---- | ------ |
160-
upload-to-release:
161-
needs:
162-
- build
163-
- update-release-notes
164-
permissions:
165-
contents: write
166-
runs-on: ubuntu-latest
167-
strategy:
168-
matrix:
169-
mode:
170-
- debug
171-
- release
172-
steps:
173-
- uses: actions/checkout@v4
174-
175-
- uses: actions/download-artifact@v4
176-
with:
177-
name: ${{ matrix.target.asset_name }}
178-
path: artifact
179-
180-
- run: |
181-
zip -r ../${{ matrix.asset_name }} *
182-
working-directory: artifact
183-
- id: calculate-sha256
184-
run: |
185-
echo sha256=$(sha256sum ${{ matrix.asset_name }} | awk '{print $1}') >> $GITHUB_OUTPUT
186-
- uses: softprops/action-gh-release@v2
187-
with:
188-
tag_name: ${{ steps.version.outputs.version }}
189-
name: ${{ steps.version.outputs.version }}
190-
body: |
191-
${{ github.event.release.body }}
192-
## Checksums
193-
${{ steps.checksums.outputs.HASHES }}
194-
files: artifacts/*
195-
generate_release_notes: false # 添加了这一行
196-
if: ${{ github.event_name == 'release' }}
1+
name: Rust Backend CI
2+
3+
on:
4+
push:
5+
branches: ["dev"]
6+
paths:
7+
- "backend/**"
8+
pull_request:
9+
branches: ["dev"]
10+
paths:
11+
- "backend/**"
12+
13+
env:
14+
CARGO_TERM_COLOR: always
15+
BINARY_NAME: backend
16+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
17+
SQLX_OFFLINE: true
18+
19+
jobs:
20+
test:
21+
name: Test
22+
runs-on: ubuntu-latest
23+
steps:
24+
- uses: actions/checkout@v4
25+
26+
- name: Setup Rust
27+
uses: actions-rs/toolchain@v1
28+
with:
29+
profile: minimal
30+
toolchain: stable
31+
override: true
32+
33+
- name: Cache Rust dependencies
34+
uses: actions/cache@v3
35+
with:
36+
path: |
37+
~/.cargo/registry
38+
~/.cargo/git
39+
backend/target
40+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
41+
restore-keys: ${{ runner.os }}-cargo-
42+
43+
- name: Cache SQLx metadata
44+
uses: actions/cache@v3
45+
with:
46+
path: backend/.sqlx
47+
key: ${{ runner.os }}-sqlx-${{ hashFiles('**/*.rs', '**/migrations/**') }}
48+
restore-keys: ${{ runner.os }}-sqlx-
49+
50+
- name: Install SQLx CLI
51+
run: cargo install sqlx-cli --no-default-features --features postgres
52+
53+
- name: Prepare SQLx metadata
54+
run: |
55+
cd backend
56+
cargo sqlx prepare -- --tests
57+
env:
58+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
59+
SQLX_OFFLINE: true
60+
61+
- name: Run tests
62+
run: cd backend && cargo test --verbose
63+
64+
build:
65+
name: Build ${{ matrix.target.name }}
66+
needs: test
67+
runs-on: ${{ matrix.target.os }}
68+
strategy:
69+
fail-fast: false
70+
matrix:
71+
target:
72+
- name: Linux x86_64
73+
os: ubuntu-latest
74+
target: x86_64-unknown-linux-gnu
75+
bin: backend
76+
asset_name: backend-linux-amd64
77+
- name: Linux ARM64
78+
os: ubuntu-latest
79+
target: aarch64-unknown-linux-gnu
80+
bin: backend
81+
asset_name: backend-linux-arm64
82+
- name: Windows
83+
os: windows-latest
84+
target: x86_64-pc-windows-msvc
85+
bin: backend.exe
86+
asset_name: backend-windows-amd64.exe
87+
88+
steps:
89+
- uses: actions/checkout@v4
90+
91+
- name: Setup Rust
92+
uses: actions-rs/toolchain@v1
93+
with:
94+
profile: minimal
95+
toolchain: stable
96+
target: ${{ matrix.target.target }}
97+
override: true
98+
99+
- name: Cache Rust dependencies
100+
uses: actions/cache@v3
101+
with:
102+
path: |
103+
~/.cargo/registry
104+
~/.cargo/git
105+
backend/target
106+
key: ${{ runner.os }}-${{ matrix.target.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
107+
restore-keys: ${{ runner.os }}-${{ matrix.target.target }}-cargo-
108+
109+
- name: Cache SQLx metadata
110+
uses: actions/cache@v3
111+
with:
112+
path: backend/.sqlx
113+
key: ${{ runner.os }}-sqlx-${{ hashFiles('**/*.rs', '**/migrations/**') }}
114+
restore-keys: ${{ runner.os }}-sqlx-
115+
116+
- name: Install SQLx CLI
117+
run: cargo install sqlx-cli --no-default-features --features postgres
118+
119+
- name: Prepare SQLx metadata
120+
run: |
121+
cd backend
122+
cargo sqlx prepare -- --tests
123+
env:
124+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
125+
SQLX_OFFLINE: true
126+
127+
- name: Build release binary
128+
run: |
129+
cd backend
130+
cargo build --release --target ${{ matrix.target.target }}
131+
132+
- name: Prepare binary
133+
shell: bash
134+
run: |
135+
cd backend
136+
mkdir -p release
137+
cp target/${{ matrix.target.target }}/release/${{ matrix.target.bin }} release/${{ matrix.target.asset_name }}
138+
139+
- name: Upload binary as artifact
140+
uses: actions/upload-artifact@v4
141+
with:
142+
name: ${{ matrix.target.asset_name }}
143+
path: backend/release/${{ matrix.target.asset_name }}
144+
if-no-files-found: error

0 commit comments

Comments
 (0)