-
Notifications
You must be signed in to change notification settings - Fork 3
145 lines (124 loc) · 4.47 KB
/
release.yml
File metadata and controls
145 lines (124 loc) · 4.47 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
name: Release
on:
push:
tags: ["v*"]
permissions:
contents: write
env:
CARGO_TERM_COLOR: always
jobs:
build:
name: Build (${{ matrix.target }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: aarch64-apple-darwin
os: macos-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: x86_64-unknown-linux-gnu
os: ubuntu-22.04
- target: aarch64-unknown-linux-gnu
os: ubuntu-22.04
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
- target: aarch64-unknown-linux-musl
os: ubuntu-latest
use_cross: true
- target: x86_64-pc-windows-msvc
os: windows-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install cross-compilation tools (Linux ARM64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
- name: Install MUSL toolchain
if: matrix.target == 'x86_64-unknown-linux-musl'
run: sudo apt-get update && sudo apt-get install -y musl-tools
- name: Install cross (Linux MUSL ARM64)
if: matrix.target == 'aarch64-unknown-linux-musl'
run: cargo install cross --git https://github.com/cross-rs/cross
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: release-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: release-${{ matrix.target }}-
- name: Build release binary
run: ${{ matrix.use_cross && 'cross' || 'cargo' }} build --release --target ${{ matrix.target }} -p uvr
# Smoke test the freshly-built binary on the runners where we can —
# i.e. the target architecture matches the host. Catches regressions
# where the binary loads but won't actually run (broken manifest,
# wrong subsystem, missing imports). v0.3.3 + v0.3.4 both shipped
# Windows binaries that B-Nilson couldn't execute (#74); a single
# `--version` call on the runner would have flagged either release
# before tag.
- name: Smoke test (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
./target/${{ matrix.target }}/release/uvr.exe --version
./target/${{ matrix.target }}/release/uvr.exe --help | Out-Null
- name: Smoke test (Linux x86_64)
if: matrix.target == 'x86_64-unknown-linux-gnu'
run: |
./target/${{ matrix.target }}/release/uvr --version
./target/${{ matrix.target }}/release/uvr --help > /dev/null
- name: Smoke test (macOS arm64)
if: matrix.target == 'aarch64-apple-darwin'
run: |
./target/${{ matrix.target }}/release/uvr --version
./target/${{ matrix.target }}/release/uvr --help > /dev/null
- name: Package (Unix)
if: runner.os != 'Windows'
run: |
cd target/${{ matrix.target }}/release
tar czf ../../../uvr-${{ matrix.target }}.tar.gz uvr
cd ../../..
- name: Package (Windows)
if: runner.os == 'Windows'
run: |
cd target/${{ matrix.target }}/release
7z a ../../../uvr-${{ matrix.target }}.zip uvr.exe
cd ../../..
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: uvr-${{ matrix.target }}
path: uvr-${{ matrix.target }}.*
release:
name: Create Release
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Generate checksums
run: |
cd artifacts
sha256sum uvr-* > sha256sums.txt
cat sha256sums.txt
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: |
artifacts/uvr-*.tar.gz
artifacts/uvr-*.zip
artifacts/sha256sums.txt