-
-
Notifications
You must be signed in to change notification settings - Fork 1
131 lines (114 loc) · 4.84 KB
/
release.yml
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
name: Release
on:
workflow_dispatch:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
permissions:
actions: read
contents: write
jobs:
build:
name: Release for ${{ matrix.target }}
runs-on: ${{ matrix.os }}
# Prevent job from running on forks
if: ${{ !github.event.repository.fork }}
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
# - aarch64-unknown-linux-gnu
# - aarch64-unknown-linux-musl
- x86_64-pc-windows-msvc
- i686-pc-windows-msvc
- x86_64-apple-darwin
- aarch64-apple-darwin
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-22.04
target-apt-arch: amd64
cross: false
- target: x86_64-unknown-linux-musl
os: ubuntu-22.04
target-apt-arch: amd64
cross: false
# - target: aarch64-unknown-linux-gnu
# os: ubuntu-22.04
# target-apt-arch: arm64
# cross: true
# - target: aarch64-unknown-linux-musl
# os: ubuntu-22.04
# target-apt-arch: arm64
# cross: true
- target: x86_64-pc-windows-msvc
os: windows-latest
cross: false
- target: i686-pc-windows-msvc
os: windows-latest
cross: false
- target: x86_64-apple-darwin
os: macos-latest
cross: false
- target: aarch64-apple-darwin
os: macos-latest
cross: false
env:
BIN_NAME: bitsrun
CARGO_BUILD_TARGET: ${{ matrix.target }}
ARCHIVE_NAME: bitsrun-${{ matrix.target }}
steps:
- uses: actions/checkout@master
- name: Set up Ubuntu multiarch
if: startsWith(matrix.os, 'ubuntu') && matrix.target-apt-arch != 'amd64'
run: |
readonly DISTRO_CODENAME=jammy
sudo dpkg --add-architecture "${{ matrix.target-apt-arch }}"
sudo sed -i "s/^deb http/deb [arch=$(dpkg-architecture -q DEB_HOST_ARCH)] http/" /etc/apt/sources.list
sudo sed -i "s/^deb mirror/deb [arch=$(dpkg-architecture -q DEB_HOST_ARCH)] mirror/" /etc/apt/sources.list
for suite in '' '-updates' '-backports' '-security'; do
echo "deb [arch=${{ matrix.target-apt-arch }}] http://ports.ubuntu.com/ $DISTRO_CODENAME$suite main universe multiverse" | \
sudo tee -a /etc/apt/sources.list >/dev/null
done
- name: Install musl development files
if: endsWith(matrix.target, '-musl')
run: |
sudo apt-get -yq update
sudo apt-get -yq install musl-tools musl-dev:${{ matrix.target-apt-arch }}
- name: Install QEMU and AArch64 cross compiler
if: startsWith(matrix.target, 'aarch64-unknown-linux')
run: |
sudo apt-get -yq update
# libc6 must be present to run executables dynamically linked
# against glibc for the target architecture
sudo apt-get -yq install qemu-user gcc-aarch64-linux-gnu libc6:arm64
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ env.CARGO_BUILD_TARGET }}
- name: Build binaries
run: cargo build --release --target=${{ env.CARGO_BUILD_TARGET }}
- name: Strip binaries for Linux and macOS
if: endsWith(env.CARGO_BUILD_TARGET, '-windows-msvc') == false
run: strip target/${{ env.CARGO_BUILD_TARGET }}/release/${{ env.BIN_NAME }}
- name: Package binary archives (for Windows)
if: endsWith(env.CARGO_BUILD_TARGET, '-windows-msvc')
run: |
New-Item -ItemType Directory -Force -Path ${{ env.ARCHIVE_NAME }}
Copy-Item -Path "target/${{ env.CARGO_BUILD_TARGET }}/release/${{ env.BIN_NAME }}.exe" -Destination "${{ env.ARCHIVE_NAME }}/"
Compress-Archive -Path "${{ env.ARCHIVE_NAME }}/*" -DestinationPath "${{ env.ARCHIVE_NAME }}.zip"
- name: Package binary archives (for Linux and macOS)
if: endsWith(env.CARGO_BUILD_TARGET, '-windows-msvc') == false
run: |
mkdir "${{ env.ARCHIVE_NAME }}"
cp target/${{ env.CARGO_BUILD_TARGET }}/release/${{ env.BIN_NAME }} "${{ env.ARCHIVE_NAME }}"
chmod ugo+x "${{ env.ARCHIVE_NAME }}/${{ env.BIN_NAME }}"
tar -vczf "${{ env.ARCHIVE_NAME }}.tar.gz" "${{ env.ARCHIVE_NAME }}"/*
- name: Upload binary for release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.ARCHIVE_NAME }}${{ endsWith(env.CARGO_BUILD_TARGET, '-windows-msvc') && '.zip' || '.tar.gz'}}
asset_name: ${{env.ARCHIVE_NAME}}-${{ github.ref_name }}${{ endsWith(env.CARGO_BUILD_TARGET, '-windows-msvc') && '.zip' || '.tar.gz'}}
tag: ${{ github.ref }}