-
Notifications
You must be signed in to change notification settings - Fork 0
151 lines (130 loc) · 4.02 KB
/
release.yml
File metadata and controls
151 lines (130 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
name: Release
on:
push:
tags:
- 'v*'
env:
CARGO_TERM_COLOR: always
jobs:
build-and-release:
name: Build and Release
permissions:
contents: read
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
binary_name: jxcape
asset_name: jxcape-linux-x86_64.tar.gz
- os: macos-latest
target: x86_64-apple-darwin
binary_name: jxcape
asset_name: jxcape-macos-x86_64.tar.gz
- os: macos-latest
target: aarch64-apple-darwin
binary_name: jxcape
asset_name: jxcape-macos-aarch64.tar.gz
- os: windows-latest
target: x86_64-pc-windows-msvc
binary_name: jxcape.exe
asset_name: jxcape-windows-x86_64.zip
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0 # Fetch full history for changelog generation
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
target: ${{ matrix.target }}
- name: Install git-cliff
uses: taiki-e/install-action@v2
with:
tool: git-cliff@2.10.0
- name: Build release binary
run: cargo build --release --target ${{ matrix.target }}
- name: Run tests
run: cargo test --target ${{ matrix.target }}
- name: Create asset (Unix)
if: runner.os != 'Windows'
run: |
mkdir -p release
cp target/${{ matrix.target }}/release/${{ matrix.binary_name }} release/
cp LICENSE README.md CHANGELOG.md release/
cd release
tar -czf ../${{ matrix.asset_name }} *
- name: Create asset (Windows)
if: runner.os == 'Windows'
run: |
mkdir release
copy target\${{ matrix.target }}\release\${{ matrix.binary_name }} release\
copy LICENSE release\
copy README.md release\
copy CHANGELOG.md release\
cd release
7z a ..\${{ matrix.asset_name }} *
- name: Upload asset
uses: actions/upload-artifact@v7
with:
name: ${{ matrix.asset_name }}
path: ${{ matrix.asset_name }}
create-release:
name: Create Release
permissions:
contents: write
needs: build-and-release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install git-cliff
uses: taiki-e/install-action@v2
with:
tool: git-cliff@2.10.0
- name: Generate changelog for this version
run: |
# Extract version from tag
VERSION=${GITHUB_REF#refs/tags/}
echo "VERSION=$VERSION" >> $GITHUB_ENV
# Generate changelog for just this version
git-cliff --latest --strip header > RELEASE_CHANGELOG.md
- name: Download all assets
uses: actions/download-artifact@v8
with:
path: assets
- name: Move assets to root
run: |
find assets -type f \( -name "*.tar.gz" -o -name "*.zip" \) -exec mv {} . \;
- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.VERSION }}
name: Release ${{ env.VERSION }}
body_path: RELEASE_CHANGELOG.md
files: |
*.tar.gz
*.zip
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish-to-crates-io:
name: Publish to Crates.io
permissions:
contents: read
needs: create-release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Publish to crates.io
run: cargo publish --token ${{ secrets.CRATES_IO_TOKEN }}