1+ name : Release
2+
3+ on :
4+ push :
5+ tags :
6+ - ' v*.*.*'
7+
8+ jobs :
9+ build-and-release :
10+ name : Build and Release
11+ runs-on : ${{ matrix.os }}
12+ strategy :
13+ matrix :
14+ include :
15+ - os : ubuntu-latest
16+ target : x86_64-unknown-linux-gnu
17+ artifact_name : template-rust
18+ asset_name : template-rust-linux-x86_64
19+ - os : windows-latest
20+ target : x86_64-pc-windows-msvc
21+ artifact_name : template-rust.exe
22+ asset_name : template-rust-windows-x86_64.exe
23+ - os : macos-latest
24+ target : x86_64-apple-darwin
25+ artifact_name : template-rust
26+ asset_name : template-rust-macos-x86_64
27+
28+ steps :
29+ - uses : actions/checkout@v4
30+
31+ - name : Install Rust
32+ uses : dtolnay/rust-toolchain@stable
33+ with :
34+ targets : ${{ matrix.target }}
35+
36+ - name : Cache dependencies
37+ uses : actions/cache@v3
38+ with :
39+ path : |
40+ ~/.cargo/registry
41+ ~/.cargo/git
42+ target
43+ key : ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
44+
45+ - name : Build release binary
46+ run : cargo build --release --target ${{ matrix.target }}
47+
48+ - name : Upload release binary
49+ uses : actions/upload-artifact@v3
50+ with :
51+ name : ${{ matrix.asset_name }}
52+ path : target/${{ matrix.target }}/release/${{ matrix.artifact_name }}
53+
54+ release :
55+ name : Create Release
56+ needs : build-and-release
57+ runs-on : ubuntu-latest
58+ steps :
59+ - uses : actions/checkout@v4
60+
61+ - name : Download all artifacts
62+ uses : actions/download-artifact@v3
63+
64+ - name : Create Release
65+ uses : softprops/action-gh-release@v1
66+ with :
67+ files : |
68+ template-rust-linux-x86_64/template-rust
69+ template-rust-windows-x86_64.exe/template-rust.exe
70+ template-rust-macos-x86_64/template-rust
71+ generate_release_notes : true
72+ env :
73+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments