Skip to content

Commit f556dea

Browse files
author
messica
committed
feat: update ci
1 parent a43490f commit f556dea

4 files changed

Lines changed: 56 additions & 191 deletions

File tree

.github/workflows/build.yml

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ env:
1414
jobs:
1515
build:
1616
name: Build ${{ matrix.target }}
17-
runs-on: ${{ matrix.os }}
17+
runs-on: ${{ matrix.runner || matrix.os }}
1818
strategy:
1919
fail-fast: false
2020
matrix:
@@ -33,6 +33,7 @@ jobs:
3333
target: x86_64-pc-windows-msvc
3434
- os: windows-latest
3535
target: aarch64-pc-windows-msvc
36+
runner: windows-11-arm
3637

3738
steps:
3839
- uses: actions/checkout@v4
@@ -52,19 +53,25 @@ jobs:
5253
if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
5354
run: |
5455
sudo apt-get update
55-
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross
56+
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross binutils-aarch64-linux-gnu
5657
5758
- name: Set env for Linux aarch64 cross
5859
if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
5960
run: |
6061
echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
6162
echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
6263
echo "AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar" >> $GITHUB_ENV
64+
echo "RANLIB_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ranlib" >> $GITHUB_ENV
65+
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
6366
6467
- name: Install musl (x86_64)
6568
if: matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-musl'
6669
run: sudo apt-get update && sudo apt-get install -y musl-tools
6770

71+
- name: Set env for musl (x86_64)
72+
if: matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-musl'
73+
run: echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc" >> $GITHUB_ENV
74+
6875
- name: Build
6976
run: cargo build --release --target ${{ matrix.target }} --verbose
7077

@@ -76,9 +83,17 @@ jobs:
7683
else
7784
exe="target/${{ matrix.target }}/release/${{ env.BINARY_NAME }}"
7885
fi
79-
if [ -f "$exe" ]; then
80-
"$exe" --version
81-
else
86+
if [ ! -f "$exe" ]; then
8287
echo "Binary not found: $exe"
8388
exit 1
8489
fi
90+
# Only run binary on native target (cross-compiled binaries cannot run on host)
91+
if [ "${{ matrix.os }}" = "ubuntu-latest" ] && [ "${{ matrix.target }}" = "x86_64-unknown-linux-gnu" ]; then
92+
"$exe" --version
93+
elif [ "${{ matrix.os }}" = "windows-latest" ] && { [ "${{ matrix.target }}" = "x86_64-pc-windows-msvc" ] || [ "${{ matrix.target }}" = "aarch64-pc-windows-msvc" ]; }; then
94+
"$exe" --version
95+
elif [ "${{ matrix.os }}" = "macos-14" ] && [ "${{ matrix.target }}" = "aarch64-apple-darwin" ]; then
96+
"$exe" --version
97+
else
98+
echo "Skipping execution (cross-compiled target)."
99+
fi

.github/workflows/release.yml

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ env:
1212
jobs:
1313
build:
1414
name: Build ${{ matrix.target }}
15-
runs-on: ${{ matrix.os }}
15+
runs-on: ${{ matrix.runner || matrix.os }}
1616
strategy:
1717
fail-fast: false
1818
matrix:
@@ -29,11 +29,12 @@ jobs:
2929
target: x86_64-apple-darwin
3030
- os: macos-14
3131
target: aarch64-apple-darwin
32-
# Windows
32+
# Windows (aarch64 使用 windows-11-arm runner,os 名称仍为 windows-latest)
3333
- os: windows-latest
3434
target: x86_64-pc-windows-msvc
3535
- os: windows-latest
3636
target: aarch64-pc-windows-msvc
37+
runner: windows-11-arm
3738

3839
steps:
3940
- name: Checkout
@@ -55,19 +56,25 @@ jobs:
5556
if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
5657
run: |
5758
sudo apt-get update
58-
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross
59+
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross binutils-aarch64-linux-gnu
5960
6061
- name: Set env for Linux aarch64 cross (glibc)
6162
if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
6263
run: |
6364
echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
6465
echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
6566
echo "AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar" >> $GITHUB_ENV
67+
echo "RANLIB_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ranlib" >> $GITHUB_ENV
68+
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
6669
6770
- name: Install musl (Linux static, x86_64 only)
6871
if: matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-musl'
6972
run: sudo apt-get update && sudo apt-get install -y musl-tools
7073

74+
- name: Set env for musl (x86_64)
75+
if: matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-musl'
76+
run: echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc" >> $GITHUB_ENV
77+
7178
- name: Build
7279
run: cargo build --release --target ${{ matrix.target }} --verbose
7380

@@ -79,12 +86,20 @@ jobs:
7986
else
8087
exe="target/${{ matrix.target }}/release/${{ env.BINARY_NAME }}"
8188
fi
82-
if [ -f "$exe" ]; then
83-
"$exe" --version
84-
else
89+
if [ ! -f "$exe" ]; then
8590
echo "Binary not found: $exe"
8691
exit 1
8792
fi
93+
# Only run binary on native target (cross-compiled binaries cannot run on host)
94+
if [ "${{ matrix.os }}" = "ubuntu-latest" ] && [ "${{ matrix.target }}" = "x86_64-unknown-linux-gnu" ]; then
95+
"$exe" --version
96+
elif [ "${{ matrix.os }}" = "windows-latest" ] && { [ "${{ matrix.target }}" = "x86_64-pc-windows-msvc" ] || [ "${{ matrix.target }}" = "aarch64-pc-windows-msvc" ]; }; then
97+
"$exe" --version
98+
elif [ "${{ matrix.os }}" = "macos-14" ] && [ "${{ matrix.target }}" = "aarch64-apple-darwin" ]; then
99+
"$exe" --version
100+
else
101+
echo "Skipping execution (cross-compiled target)."
102+
fi
88103
89104
- name: Package
90105
shell: bash

0 commit comments

Comments
 (0)