1+ name : Release
2+
3+ on :
4+ push :
5+ tags :
6+ - " v*"
7+
8+ env :
9+ CARGO_TERM_COLOR : always
10+
11+ permissions :
12+ contents : write
13+
14+ jobs :
15+ build-linux :
16+ name : Build Linux
17+ runs-on : ubuntu-latest
18+
19+ steps :
20+ - uses : actions/checkout@v4
21+
22+ - name : Install Rust
23+ uses : dtolnay/rust-toolchain@stable
24+ with :
25+ targets : x86_64-unknown-linux-gnu
26+
27+ - name : Test
28+ run : cargo test --target x86_64-unknown-linux-gnu
29+
30+ - name : Build
31+ run : cargo build -r --target x86_64-unknown-linux-gnu
32+
33+ - name : Create bin directory structure
34+ run : mkdir -p xpmanager_${{ vars.XPM_VERSION }}_linux_x86_64/bin
35+
36+ - name : Move executable to bin/xpm
37+ run : mv target/x86_64-unknown-linux-gnu/release/xpm xpmanager_${{ vars.XPM_VERSION }}_linux_x86_64/bin/xpm
38+
39+ - name : Create .tar.gz archive
40+ run : tar -czvf xpmanager_${{ vars.XPM_VERSION }}_linux_x86_64.tar.gz xpmanager_${{ vars.XPM_VERSION }}_linux_x86_64
41+
42+ - name : Generate .deb package
43+ run : |
44+ cargo install cargo-deb
45+ cargo deb
46+
47+ - name : Upload .deb package
48+ uses : actions/upload-artifact@v4
49+ with :
50+ name : deb-linux-x86_64
51+ path : target/debian/*.deb
52+
53+ - name : Upload artifact
54+ uses : actions/upload-artifact@v4
55+ with :
56+ retention-days : 1
57+ name : linux-x86_64
58+ path : xpmanager_${{ vars.XPM_VERSION }}_linux_x86_64.tar.gz
59+
60+ build-macos :
61+ name : Build MacOS
62+ runs-on : macos-latest
63+ steps :
64+ - uses : actions/checkout@v4
65+
66+ - name : Install Rust
67+ uses : dtolnay/rust-toolchain@stable
68+ with :
69+ targets : aarch64-apple-darwin
70+
71+ - name : Test
72+ run : cargo test --target aarch64-apple-darwin
73+
74+ - name : Build
75+ run : cargo build -r --target aarch64-apple-darwin
76+
77+ - name : Create bin directory structure
78+ run : mkdir -p xpmanager_${{ vars.XPM_VERSION }}_macos_aarch64/bin
79+
80+ - name : Move executable to bin/xpm
81+ run : mv target/aarch64-apple-darwin/release/xpm xpmanager_${{ vars.XPM_VERSION }}_macos_aarch64/bin/xpm
82+
83+ - name : Create .tar.gz archive
84+ run : tar -czvf xpmanager_${{ vars.XPM_VERSION }}_macos_aarch64.tar.gz xpmanager_${{ vars.XPM_VERSION }}_macos_aarch64
85+
86+ - name : Upload artifact
87+ uses : actions/upload-artifact@v4
88+ with :
89+ retention-days : 1
90+ name : macos-aarch64
91+ path : xpmanager_${{ vars.XPM_VERSION }}_macos_aarch64.tar.gz
92+
93+ release :
94+ name : Create Release
95+ needs : [build-linux, build-macos]
96+ runs-on : ubuntu-latest
97+ steps :
98+ - uses : actions/checkout@v4
99+
100+ - name : Download all artifacts
101+ uses : actions/download-artifact@v4
102+ with :
103+ path : .
104+
105+ - name : Create Release
106+ id : create_release
107+ uses : softprops/action-gh-release@v1
108+ with :
109+ files : |
110+ linux-x86_64/xpmanager_${{ vars.XPM_VERSION }}_linux_x86_64.tar.gz
111+ deb-linux-x86_64/*.deb
112+ macos-aarch64/xpmanager_${{ vars.XPM_VERSION }}_macos_aarch64.tar.gz
113+ env :
114+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
115+
116+ publish :
117+ name : Publish to crates.io
118+ needs : release
119+ runs-on : ubuntu-latest
120+ steps :
121+ - uses : actions/checkout@v4
122+
123+ - name : Install Rust
124+ uses : dtolnay/rust-toolchain@stable
125+
126+ - name : Publish to crates.io
127+ run : cargo publish --token ${{ secrets.CRATES_IO_TOKEN }}
0 commit comments