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 : Determine if prerelease
19+ run : |
20+ if [[ "${{ github.ref_name }}" == *"-"* ]]; then
21+ echo "prerelease=true" >> $GITHUB_ENV
22+ else
23+ echo "prerelease=false" >> $GITHUB_ENV
24+ fi
25+ - name : Create Release
26+ id : create_release
27+ uses : actions/create-release@v1
28+ env :
29+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
30+ with :
31+ tag_name : ${{ github.ref_name }}
32+ release_name : Release ${{ github.ref_name }}
33+ draft : false
34+ prerelease : ${{ env.prerelease }}
35+
36+ build-release :
37+ name : Build Release
38+ needs : create-release
39+ runs-on : ${{ matrix.os }}
40+ strategy :
41+ matrix :
42+ include :
43+ - os : ubuntu-latest
44+ target : x86_64-unknown-linux-gnu
45+ suffix : " "
46+ - os : windows-latest
47+ target : x86_64-pc-windows-msvc
48+ suffix : " .exe"
49+ - os : macos-latest
50+ target : x86_64-apple-darwin
51+ suffix : " "
52+ - os : macos-latest
53+ target : aarch64-apple-darwin
54+ suffix : " "
55+
56+ steps :
57+ - uses : actions/checkout@v4
58+
59+ - name : Install Rust
60+ uses : dtolnay/rust-toolchain@stable
61+ with :
62+ targets : ${{ matrix.target }}
63+
64+ - name : Cache cargo registry
65+ uses : actions/cache@v3
66+ with :
67+ path : |
68+ ~/.cargo/registry
69+ ~/.cargo/git
70+ target
71+ key : ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.lock') }}
72+
73+ - name : Build release binary
74+ run : cargo build --release --target ${{ matrix.target }}
75+
76+ - name : Create archive
77+ shell : bash
78+ run : |
79+ binary_name="code-guardian-cli${{ matrix.suffix }}"
80+ if [ "${{ matrix.os }}" = "windows-latest" ]; then
81+ archive_name="code-guardian-${{ matrix.target }}.zip"
82+ cp "target/${{ matrix.target }}/release/${binary_name}" .
83+ 7z a "${archive_name}" "${binary_name}" README.md
84+ else
85+ archive_name="code-guardian-${{ matrix.target }}.tar.gz"
86+ cp "target/${{ matrix.target }}/release/${binary_name}" .
87+ tar czf "${archive_name}" "${binary_name}" README.md
88+ fi
89+ echo "ARCHIVE_NAME=${archive_name}" >> $GITHUB_ENV
90+
91+ - name : Upload Release Asset
92+ uses : actions/upload-release-asset@v1
93+ env :
94+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
95+ with :
96+ upload_url : ${{ needs.create-release.outputs.upload_url }}
97+ asset_path : ./${{ env.ARCHIVE_NAME }}
98+ asset_name : ${{ env.ARCHIVE_NAME }}
99+ asset_content_type : application/octet-stream
0 commit comments