-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (131 loc) · 4.96 KB
/
Copy pathpublish.yml
File metadata and controls
137 lines (131 loc) · 4.96 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
name: Publish
on:
push:
branches:
- "main"
tags:
- "v*"
workflow_dispatch:
concurrency:
group: publish-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
GITHUB_TOKEN: ${{ github.token }}
RUST_BACKTRACE: 1
RNK_RELEASE_VERSION: ${{ github.ref_name }}
jobs:
# strategy.matrix can't access enviroment variables, so we have a dummy step that sets it as an output,
# which can be used in a matrix.
prepare-version:
runs-on: ubuntu-latest
outputs:
RNK_RELEASE_VERSION: ${{ steps.compute.outputs.RNK_RELEASE_VERSION }}
steps:
- name: Compute outputs
id: compute
run: |
echo "RNK_RELEASE_VERSION=${{ env.RNK_RELEASE_VERSION }}" >> $GITHUB_OUTPUT
release:
name: Release - ${{ matrix.platform.os_name }}
needs: prepare-version
strategy:
matrix:
platform:
- os_name: Linux-x86_64
os: ubuntu-latest
target: x86_64-unknown-linux-musl
bin: rnk
name: rnk-x86_64-unknown-linux-musl-${{ needs.compute.outputs.RNK_RELEASE_VERSION}}.tar.gz
cargo_command: cargo
features: "--no-default-features --features vendored-openssl"
- os_name: Linux-aarch64
os: ubuntu-24.04-arm
target: aarch64-unknown-linux-musl
bin: rnk
name: rnk-aarch64-unknown-linux-musl-${{ needs.compute.outputs.RNK_RELEASE_VERSION}}.tar.gz
cargo_command: cargo
features: "--no-default-features --features vendored-openssl"
- os_name: Windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
bin: rnk.exe
name: rnk-x86_64-pc-windows-msvc-${{ needs.compute.outputs.RNK_RELEASE_VERSION}}.zip
cargo_command: cargo
features: "--no-default-features --features vendored-openssl"
- os_name: macOS-x86_64
os: macOS-latest
target: x86_64-apple-darwin
bin: rnk
name: rnk-x86_64-apple-darwin-${{ needs.compute.outputs.RNK_RELEASE_VERSION}}.tar.gz
cargo_command: cargo
features: "--no-default-features --features vendored-openssl"
- os_name: macOS-aarch64
os: macOS-latest
target: aarch64-apple-darwin
bin: rnk
name: rnk-aarch64-apple-darwin-${{ needs.compute.outputs.RNK_RELEASE_VERSION}}.tar.gz
cargo_command: cargo
features: "--no-default-features --features vendored-openssl"
runs-on: ${{ matrix.platform.os }}
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Strip version leading v
run: echo "RNK_RELEASE_VERSION=${RNK_RELEASE_VERSION##v}" >> $GITHUB_ENV
- name: Install toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform.target }}
- name: Show version information (Rust, cargo, GCC)
shell: bash
run: |
gcc --version || true
rustup -V
rustup toolchain list
rustup default
cargo -V
rustc -V
- name: Rust cache
uses: Swatinem/rust-cache@v2
with:
prefix-key: "v0-rust"
cache-workspace-crates: "true"
- name: Install build dependencies on Linux
run: |
sudo apt-get update --yes && sudo apt-get install --yes musl-tools openssl libssl-dev pkg-config
if: contains(matrix.platform.os, 'ubuntu')
- name: Build binary (*nix)
shell: bash
run: |
${{ matrix.platform.cargo_command }} build --locked --release ${{ matrix.platform.features }} --target ${{ matrix.platform.target }}
if: ${{ !contains(matrix.platform.os, 'windows') }}
- name: Build binary (Windows)
# We have to use the platform's native shell. If we use bash on
# Windows then OpenSSL complains that the Perl it finds doesn't use
# the platform's native paths and refuses to build.
shell: powershell
run: |
& ${{ matrix.platform.cargo_command }} build --locked --release ${{ matrix.platform.features }} --target ${{ matrix.platform.target }}
if: contains(matrix.platform.os, 'windows')
- name: Package as archive
shell: bash
run: |
cd target/${{ matrix.platform.target }}/release
if [[ "${{ matrix.platform.os }}" == "windows-latest" ]]; then
7z a ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}
else
tar czvf ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}
fi
cd -
- uses: actions/upload-artifact@v4
with:
name: "${{matrix.platform.os_name}}"
path: |
rnk*.gz
rnk*.zip
- name: Publish GitHub release
uses: softprops/action-gh-release@v2
with:
draft: true
files: "rnk*"
if: startsWith( github.ref, 'refs/tags/v' )