Skip to content

Commit f419b3f

Browse files
committed
update src/main.rs, add release.yml, update README.md
1 parent ea84327 commit f419b3f

5 files changed

Lines changed: 661 additions & 153 deletions

File tree

.github/workflows/release.yml

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
env:
9+
CARGO_TERM_COLOR: always
10+
11+
jobs:
12+
build:
13+
runs-on: ${{ matrix.os }}
14+
strategy:
15+
matrix:
16+
include:
17+
- target: x86_64-unknown-linux-gnu
18+
os: ubuntu-latest
19+
name: x86_64-linux-gnu
20+
- target: x86_64-unknown-linux-musl
21+
os: ubuntu-latest
22+
name: x86_64-linux-musl
23+
- target: i686-unknown-linux-gnu
24+
os: ubuntu-latest
25+
name: i686-linux-gnu
26+
- target: i686-unknown-linux-musl
27+
os: ubuntu-latest
28+
name: i686-linux-musl
29+
- target: aarch64-unknown-linux-gnu
30+
os: ubuntu-latest
31+
name: aarch64-linux-gnu
32+
- target: aarch64-unknown-linux-musl
33+
os: ubuntu-latest
34+
name: aarch64-linux-musl
35+
- target: armv7-unknown-linux-gnueabihf
36+
os: ubuntu-latest
37+
name: armv7-linux-gnueabihf
38+
- target: armv7-unknown-linux-musleabihf
39+
os: ubuntu-latest
40+
name: armv7-linux-musleabihf
41+
- target: armv7-linux-androideabi
42+
os: ubuntu-latest
43+
name: armv7-android
44+
- target: aarch64-linux-android
45+
os: ubuntu-latest
46+
name: aarch64-android
47+
- target: x86_64-pc-windows-msvc
48+
os: windows-latest
49+
name: x86_64-windows-msvc
50+
ext: .exe
51+
- target: x86_64-pc-windows-gnu
52+
os: ubuntu-latest
53+
name: x86_64-windows-gnu
54+
ext: .exe
55+
56+
steps:
57+
- uses: actions/checkout@v4
58+
59+
- name: Install Rust
60+
uses: dtolnay/rust-toolchain@stable
61+
with:
62+
targets: ${{ matrix.target }}
63+
64+
- name: Install cross-compilation tools
65+
if: runner.os == 'Linux'
66+
run: |
67+
sudo apt-get update
68+
sudo apt-get install -y gcc-multilib g++-multilib
69+
70+
- name: Install ARM cross-compilation tools
71+
if: contains(matrix.target, 'aarch64-unknown-linux') || contains(matrix.target, 'armv7-unknown-linux')
72+
run: |
73+
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
74+
75+
- name: Configure aarch64-linux-gnu
76+
if: matrix.target == 'aarch64-unknown-linux-gnu'
77+
run: |
78+
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
79+
echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
80+
echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
81+
82+
- name: Configure aarch64-linux-musl
83+
if: matrix.target == 'aarch64-unknown-linux-musl'
84+
run: |
85+
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
86+
echo "CC_aarch64_unknown_linux_musl=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
87+
echo "CXX_aarch64_unknown_linux_musl=aarch64-linux-gnu-g++" >> $GITHUB_ENV
88+
89+
- name: Configure armv7-linux-gnueabihf
90+
if: matrix.target == 'armv7-unknown-linux-gnueabihf'
91+
run: |
92+
echo "CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV
93+
echo "CC_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV
94+
echo "CXX_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-g++" >> $GITHUB_ENV
95+
96+
- name: Configure armv7-linux-musleabihf
97+
if: matrix.target == 'armv7-unknown-linux-musleabihf'
98+
run: |
99+
echo "CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV
100+
echo "CC_armv7_unknown_linux_musleabihf=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV
101+
echo "CXX_armv7_unknown_linux_musleabihf=arm-linux-gnueabihf-g++" >> $GITHUB_ENV
102+
103+
- name: Install musl tools
104+
if: endsWith(matrix.target, '-musl')
105+
run: |
106+
sudo apt-get install -y musl-tools musl-dev
107+
108+
- name: Setup Android SDK
109+
if: contains(matrix.target, 'android')
110+
uses: android-actions/setup-android@v3
111+
112+
- name: Setup Android NDK
113+
if: contains(matrix.target, 'android')
114+
run: |
115+
sdkmanager "ndk;26.3.11579264"
116+
echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/26.3.11579264" >> $GITHUB_ENV
117+
118+
- name: Find Android linker
119+
if: contains(matrix.target, 'android')
120+
run: |
121+
echo "NDK path: $ANDROID_NDK_HOME"
122+
find $ANDROID_NDK_HOME/toolchains -name "aarch64-linux-android*clang" -o -name "armv7a-linux-androideabi*clang" 2>/dev/null || true
123+
ls -la $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/ 2>/dev/null | head -30 || true
124+
125+
- name: Configure Android cross-compile
126+
if: matrix.target == 'armv7-linux-androideabi'
127+
run: |
128+
echo "CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang" >> $GITHUB_ENV
129+
echo "CC_armv7_linux_androideabi=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang" >> $GITHUB_ENV
130+
echo "CXX_armv7_linux_androideabi=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang++" >> $GITHUB_ENV
131+
132+
- name: Configure Android cross-compile (aarch64)
133+
if: matrix.target == 'aarch64-linux-android'
134+
run: |
135+
echo "CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" >> $GITHUB_ENV
136+
echo "CC_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" >> $GITHUB_ENV
137+
echo "CXX_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++" >> $GITHUB_ENV
138+
139+
- name: Install mingw
140+
if: matrix.target == 'x86_64-pc-windows-gnu'
141+
run: sudo apt-get install -y mingw-w64
142+
143+
- name: Build
144+
run: cargo build --release --target ${{ matrix.target }}
145+
146+
- name: Strip binary
147+
if: runner.os == 'Linux' && !contains(matrix.target, 'android') && !contains(matrix.target, 'aarch64-unknown-linux') && !contains(matrix.target, 'armv7-unknown-linux')
148+
run: strip --strip-unneeded target/${{ matrix.target }}/release/tcpprepend${{ matrix.ext }}
149+
150+
- name: Strip aarch64 binary
151+
if: contains(matrix.target, 'aarch64-unknown-linux')
152+
run: aarch64-linux-gnu-strip --strip-unneeded target/${{ matrix.target }}/release/tcpprepend
153+
154+
- name: Strip armv7 binary
155+
if: contains(matrix.target, 'armv7-unknown-linux')
156+
run: arm-linux-gnueabihf-strip --strip-unneeded target/${{ matrix.target }}/release/tcpprepend
157+
158+
- name: Strip Android binary
159+
if: matrix.target == 'armv7-linux-androideabi'
160+
run: $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip target/${{ matrix.target }}/release/tcpprepend
161+
162+
- name: Strip Android binary (aarch64)
163+
if: matrix.target == 'aarch64-linux-android'
164+
run: $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip target/${{ matrix.target }}/release/tcpprepend
165+
166+
- name: Get version
167+
id: version
168+
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
169+
shell: bash
170+
171+
- name: Package
172+
run: |
173+
cd target/${{ matrix.target }}/release
174+
mkdir -p package
175+
cp tcpprepend${{ matrix.ext }} package/
176+
cd package
177+
tar -czvf tcpprepend-${{ steps.version.outputs.VERSION }}-${{ matrix.name }}.tar.gz tcpprepend${{ matrix.ext }}
178+
shell: bash
179+
180+
- name: Calculate checksum
181+
run: |
182+
cd target/${{ matrix.target }}/release/package
183+
sha256sum tcpprepend-${{ steps.version.outputs.VERSION }}-${{ matrix.name }}.tar.gz > tcpprepend-${{ steps.version.outputs.VERSION }}-${{ matrix.name }}.tar.gz.sha256
184+
185+
- name: Upload artifact
186+
uses: actions/upload-artifact@v4
187+
with:
188+
name: tcpprepend-${{ matrix.name }}
189+
path: target/${{ matrix.target }}/release/package/tcpprepend-${{ steps.version.outputs.VERSION }}-${{ matrix.name }}.*
190+
191+
release:
192+
needs: build
193+
runs-on: ubuntu-latest
194+
permissions:
195+
contents: write
196+
steps:
197+
- name: Download artifacts
198+
uses: actions/download-artifact@v4
199+
with:
200+
path: artifacts
201+
merge-multiple: true
202+
203+
- name: Get version
204+
id: version
205+
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
206+
207+
- name: Create Release
208+
uses: softprops/action-gh-release@v1
209+
with:
210+
files: artifacts/*.tar.gz
211+
generate_release_notes: true

0 commit comments

Comments
 (0)