1+ name : Release
2+
3+ on :
4+ push :
5+ tags :
6+ - ' v*.*.*'
7+
8+ env :
9+ CARGO_TERM_COLOR : always
10+
11+ jobs :
12+ create-release :
13+ name : Create Release
14+ runs-on : ubuntu-latest
15+ outputs :
16+ upload_url : ${{ steps.create_release.outputs.upload_url }}
17+ steps :
18+ - name : Checkout code
19+ uses : actions/checkout@v4
20+ with :
21+ fetch-depth : 0
22+ token : ${{ secrets.GITHUB_TOKEN }}
23+ - name : Update CHANGELOG.md
24+ uses : orhun/git-cliff-action@v2
25+ with :
26+ args : --latest --prepend CHANGELOG.md
27+ version : ${{ github.ref_name }}
28+ git-commit : true
29+ git-push : true
30+ git-commit-message : " chore: update changelog for ${{ github.ref_name }}"
31+ git-user-name : " github-actions[bot]"
32+ git-user-email : " github-actions[bot]@users.noreply.github.com"
33+ env :
34+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
35+ - name : Determine if prerelease
36+ run : |
37+ if [[ "${{ github.ref_name }}" == *"-"* ]]; then
38+ echo "prerelease=true" >> $GITHUB_ENV
39+ else
40+ echo "prerelease=false" >> $GITHUB_ENV
41+ fi
42+ - name : Create Release
43+ id : create_release
44+ uses : actions/create-release@v1
45+ env :
46+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
47+ with :
48+ tag_name : ${{ github.ref_name }}
49+ release_name : Release ${{ github.ref_name }}
50+ draft : false
51+ prerelease : ${{ env.prerelease }}
52+
53+ build-release :
54+ name : Build Release
55+ needs : create-release
56+ runs-on : ${{ matrix.os }}
57+ strategy :
58+ matrix :
59+ include :
60+ - os : ubuntu-latest
61+ target : x86_64-unknown-linux-gnu
62+ suffix : " "
63+ - os : windows-latest
64+ target : x86_64-pc-windows-msvc
65+ suffix : " .exe"
66+ - os : macos-latest
67+ target : x86_64-apple-darwin
68+ suffix : " "
69+ - os : macos-latest
70+ target : aarch64-apple-darwin
71+ suffix : " "
72+
73+ steps :
74+ - uses : actions/checkout@v4
75+
76+ - name : Install Rust
77+ uses : dtolnay/rust-toolchain@stable
78+ with :
79+ targets : ${{ matrix.target }}
80+
81+ - name : Cache cargo registry
82+ uses : actions/cache@v3
83+ with :
84+ path : |
85+ ~/.cargo/registry
86+ ~/.cargo/git
87+ target
88+ key : ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.lock') }}
89+
90+ - name : Build release binary
91+ run : cargo build --release --target ${{ matrix.target }}
92+
93+ - name : Create archive
94+ shell : bash
95+ run : |
96+ binary_name="code-guardian-cli${{ matrix.suffix }}"
97+ if [ "${{ matrix.os }}" = "windows-latest" ]; then
98+ archive_name="code-guardian-${{ matrix.target }}.zip"
99+ cp "target/${{ matrix.target }}/release/${binary_name}" .
100+ 7z a "${archive_name}" "${binary_name}" README.md
101+ else
102+ archive_name="code-guardian-${{ matrix.target }}.tar.gz"
103+ cp "target/${{ matrix.target }}/release/${binary_name}" .
104+ tar czf "${archive_name}" "${binary_name}" README.md
105+ fi
106+ echo "ARCHIVE_NAME=${archive_name}" >> $GITHUB_ENV
107+
108+ - name : Upload Release Asset
109+ uses : actions/upload-release-asset@v1
110+ env :
111+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
112+ with :
113+ upload_url : ${{ needs.create-release.outputs.upload_url }}
114+ asset_path : ./${{ env.ARCHIVE_NAME }}
115+ asset_name : ${{ env.ARCHIVE_NAME }}
116+ asset_content_type : application/octet-stream
0 commit comments