1+ name : Release
2+
3+ on :
4+ push :
5+ branches :
6+ - ' v[0-9]+*' # Matches v1.0.0, v20.15.10, etc.
7+
8+ env :
9+ CARGO_TERM_COLOR : always
10+ RELEASE_BIN : smart-tree
11+
12+ jobs :
13+ create-release :
14+ name : Create Release
15+ runs-on : ubuntu-latest
16+ outputs :
17+ upload_url : ${{ steps.create_release.outputs.upload_url }}
18+ version : ${{ steps.get_version.outputs.version }}
19+ steps :
20+ - name : Checkout code
21+ uses : actions/checkout@v3
22+
23+ - name : Get version from branch
24+ id : get_version
25+ run : |
26+ VERSION=${GITHUB_REF#refs/heads/v}
27+ echo "version=$VERSION" >> $GITHUB_OUTPUT
28+ echo "Detected version: $VERSION"
29+
30+ - name : Create Release
31+ id : create_release
32+ uses : actions/create-release@v1
33+ env :
34+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
35+ with :
36+ tag_name : v${{ steps.get_version.outputs.version }}
37+ release_name : Release v${{ steps.get_version.outputs.version }}
38+ draft : false
39+ prerelease : false
40+
41+ build-and-upload :
42+ name : Build and upload
43+ needs : create-release
44+ runs-on : ${{ matrix.os }}
45+ strategy :
46+ matrix :
47+ os : [ubuntu-latest, macOS-latest, windows-latest]
48+ include :
49+ - os : ubuntu-latest
50+ target : x86_64-unknown-linux-gnu
51+ asset_name : smart-tree-linux-amd64
52+ - os : macOS-latest
53+ target : x86_64-apple-darwin
54+ asset_name : smart-tree-macos-amd64
55+ - os : windows-latest
56+ target : x86_64-pc-windows-msvc
57+ asset_name : smart-tree-windows-amd64.exe
58+
59+ steps :
60+ - name : Checkout code
61+ uses : actions/checkout@v3
62+
63+ - name : Setup Rust toolchain
64+ uses : dtolnay/rust-toolchain@stable
65+ with :
66+ targets : ${{ matrix.target }}
67+
68+ - name : Build release binary
69+ run : cargo build --release --target ${{ matrix.target }}
70+
71+ - name : Prepare binary (Unix)
72+ if : matrix.os != 'windows-latest'
73+ run : |
74+ cd target/${{ matrix.target }}/release
75+ strip ${{ env.RELEASE_BIN }}
76+ cp ${{ env.RELEASE_BIN }} ${{ matrix.asset_name }}
77+
78+ - name : Prepare binary (Windows)
79+ if : matrix.os == 'windows-latest'
80+ run : |
81+ cd target/${{ matrix.target }}/release
82+ cp ${{ env.RELEASE_BIN }}.exe ${{ matrix.asset_name }}
83+
84+ - name : Upload Release Asset
85+ uses : actions/upload-release-asset@v1
86+ env :
87+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
88+ with :
89+ upload_url : ${{ needs.create-release.outputs.upload_url }}
90+ asset_path : ./target/${{ matrix.target }}/release/${{ matrix.asset_name }}
91+ asset_name : ${{ matrix.asset_name }}
92+ asset_content_type : application/octet-stream
0 commit comments