55permissions :
66 contents : write
77jobs :
8- publish :
8+ # Linux:deps.json 所列依赖有预编译 ABI tarball,直接下载安装后打包(自包含)。
9+ linux :
910 runs-on : ubuntu-latest
1011 env :
1112 GH_TOKEN : ${{ github.token }}
@@ -27,12 +28,59 @@ jobs:
2728 cp runtime/include/*.h "$d/include/"
2829 cp bin/libkvlang_runtime.so "$d/lib/"
2930 cp layout/target/release/libkvlanglayout.so "$d/lib/"
30- # 自带全部 ABI 依赖(deps.json 所列) → 解包即 /usr/lib + /usr/lib/kvspace 布局
31- cp /usr/lib/libkvspace.so* /usr/lib/ libblockmalloc.so* /usr/lib/libslotsboxmalloc.so* "$d/lib/"
32- cp /usr/lib/kvspace/libkvspace-c.so* /usr/lib/kvspace/libkvspace_durable.so* "$d/lib/kvspace/"
31+ # 自带全部 ABI 依赖 → 解包即 /usr/lib + /usr/lib/kvspace 布局
32+ cp /usr/lib/libblockmalloc.so* /usr/lib/libslotsboxmalloc.so* "$d/lib/"
33+ cp /usr/lib/libkvspace.so* /usr/lib/ kvspace/libkvspace-c.so* /usr/lib/kvspace/libkvspace_durable.so* "$d/lib/kvspace/"
3334 printf '{"abi":"%s"}\n' "$v" > "$d/abi-manifest.json"
3435 tar czf "$d.tar.gz" "$d"
3536 tar tzf "$d.tar.gz"
36- sha256sum "$d.tar.gz" > SHA256SUMS
37+ sha256sum "$d.tar.gz" > SHA256SUMS-linux
3738 - name : 发布 release
38- run : gh release create "${GITHUB_REF_NAME}" kvlang-abi-*.tar.gz SHA256SUMS --generate-notes
39+ run : gh release create "${GITHUB_REF_NAME}" kvlang-abi-*-linux-*.tar.gz SHA256SUMS-linux --generate-notes
40+
41+ # macOS:各仓只有 linux ABI tarball,依赖全部源码构建(装 /usr/local)后打包(自包含)。
42+ macos :
43+ needs : linux
44+ runs-on : macos-latest
45+ env :
46+ GH_TOKEN : ${{ github.token }}
47+ KVSPACE_LIB_DIR : /usr/local/lib/kvspace # /usr 受 SIP 保护
48+ steps :
49+ - uses : actions/checkout@v4
50+ - name : 构建依赖链(blockmalloc / slotsboxmalloc / kvspace / kvspace-c / kvspace-durable)
51+ run : |
52+ set -euo pipefail
53+ PREFIX=/usr/local
54+ for repo in blockmalloc slotsboxmalloc kvspace kvspace-c; do
55+ git clone --depth 1 "https://github.com/array2d/$repo.git" "/tmp/$repo"
56+ cmake -S "/tmp/$repo" -B "/tmp/$repo/build" \
57+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX
58+ cmake --build "/tmp/$repo/build" -j
59+ sudo cmake --install "/tmp/$repo/build"
60+ done
61+ git clone --depth 1 https://github.com/array2d/kvspace-durable.git /tmp/kvspace-durable
62+ cargo build --release --manifest-path /tmp/kvspace-durable/Cargo.toml
63+ - name : 构建 runtime + layout
64+ run : |
65+ cmake -S runtime -B build/runtime -DCMAKE_BUILD_TYPE=Release -DKVSPACE_LIB_DIR="$KVSPACE_LIB_DIR"
66+ cmake --build build/runtime --target kvlang_runtime -j
67+ cargo build --release --manifest-path layout/Cargo.toml
68+ - name : 打包 ABI 产物
69+ run : |
70+ set -euo pipefail
71+ v="${GITHUB_REF_NAME}"
72+ d="kvlang-abi-$v-darwin-arm64"
73+ mkdir -p "$d/include" "$d/lib/kvspace"
74+ cp runtime/include/*.h "$d/include/"
75+ cp bin/libkvlang_runtime.dylib "$d/lib/"
76+ cp layout/target/release/libkvlanglayout.dylib "$d/lib/"
77+ # 自带全部 ABI 依赖 → 解包即 /usr/local/lib + /usr/local/lib/kvspace 布局
78+ cp /usr/local/lib/libblockmalloc*.dylib /usr/local/lib/libslotsboxmalloc*.dylib "$d/lib/"
79+ cp /usr/local/lib/kvspace/*.dylib "$d/lib/kvspace/"
80+ cp /tmp/kvspace-durable/target/release/libkvspace_durable.dylib "$d/lib/kvspace/"
81+ printf '{"abi":"%s"}\n' "$v" > "$d/abi-manifest.json"
82+ tar czf "$d.tar.gz" "$d"
83+ tar tzf "$d.tar.gz"
84+ sha256sum "$d.tar.gz" > SHA256SUMS-macos
85+ - name : 上传到 release
86+ run : gh release upload "${GITHUB_REF_NAME}" kvlang-abi-*-darwin-*.tar.gz SHA256SUMS-macos --clobber
0 commit comments