* Add manual trigger to Rust volume server release build workflow When triggered manually via workflow_dispatch, binaries are uploaded as downloadable workflow artifacts instead of release assets. On tag push the existing release upload behavior is unchanged. * Vendor OpenSSL for cross-compilation of Rust volume server The aarch64-unknown-linux-gnu build fails because openssl-sys cannot find OpenSSL via pkg-config when cross-compiling. Adding openssl with the vendored feature builds OpenSSL from source, fixing the issue. * Fix aarch64 cross-compilation: install libssl-dev:arm64 instead of vendoring OpenSSL The vendored OpenSSL feature breaks the S3 tier unit test by altering the TLS stack behavior. Instead, install the aarch64 OpenSSL dev libraries and point the build at them via OPENSSL_DIR/LIB_DIR/INCLUDE_DIR.
254 lines
8.3 KiB
YAML
254 lines
8.3 KiB
YAML
name: "rust: build versioned volume server binaries"
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- '*'
|
|
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
|
|
build-rust-volume-linux:
|
|
permissions:
|
|
contents: write
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- target: x86_64-unknown-linux-gnu
|
|
asset_suffix: linux_amd64
|
|
- target: aarch64-unknown-linux-gnu
|
|
asset_suffix: linux_arm64
|
|
cross: true
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Install protobuf compiler
|
|
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler
|
|
|
|
- name: Install Rust toolchain
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: ${{ matrix.target }}
|
|
|
|
- name: Install cross-compilation tools
|
|
if: matrix.cross
|
|
run: |
|
|
sudo dpkg --add-architecture arm64
|
|
sudo sed -i 's/^deb /deb [arch=amd64] /' /etc/apt/sources.list
|
|
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/arm64.list
|
|
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list.d/arm64.list
|
|
sudo apt-get update
|
|
sudo apt-get install -y gcc-aarch64-linux-gnu libssl-dev:arm64
|
|
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV"
|
|
echo "OPENSSL_DIR=/usr" >> "$GITHUB_ENV"
|
|
echo "OPENSSL_INCLUDE_DIR=/usr/include" >> "$GITHUB_ENV"
|
|
echo "OPENSSL_LIB_DIR=/usr/lib/aarch64-linux-gnu" >> "$GITHUB_ENV"
|
|
|
|
- name: Cache cargo registry and target
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
~/.cargo/registry
|
|
~/.cargo/git
|
|
seaweed-volume/target
|
|
key: rust-release-${{ matrix.target }}-${{ hashFiles('seaweed-volume/Cargo.lock') }}
|
|
restore-keys: |
|
|
rust-release-${{ matrix.target }}-
|
|
|
|
- name: Build Rust volume server (large disk)
|
|
env:
|
|
SEAWEEDFS_COMMIT: ${{ github.sha }}
|
|
run: |
|
|
cd seaweed-volume
|
|
cargo build --release --target ${{ matrix.target }}
|
|
|
|
- name: Build Rust volume server (normal)
|
|
env:
|
|
SEAWEEDFS_COMMIT: ${{ github.sha }}
|
|
run: |
|
|
cd seaweed-volume
|
|
cargo build --release --target ${{ matrix.target }} --no-default-features
|
|
|
|
- name: Package binaries
|
|
run: |
|
|
# Large disk (default, 5bytes feature)
|
|
cp seaweed-volume/target/${{ matrix.target }}/release/weed-volume weed-volume-large-disk
|
|
tar czf weed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz weed-volume-large-disk
|
|
rm weed-volume-large-disk
|
|
|
|
# Normal volume size
|
|
cp seaweed-volume/target/${{ matrix.target }}/release/weed-volume weed-volume-normal
|
|
tar czf weed-volume_${{ matrix.asset_suffix }}.tar.gz weed-volume-normal
|
|
rm weed-volume-normal
|
|
|
|
- name: Upload release assets
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: |
|
|
weed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz
|
|
weed-volume_${{ matrix.asset_suffix }}.tar.gz
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Upload artifacts
|
|
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: rust-volume-${{ matrix.asset_suffix }}
|
|
path: |
|
|
weed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz
|
|
weed-volume_${{ matrix.asset_suffix }}.tar.gz
|
|
|
|
build-rust-volume-darwin:
|
|
permissions:
|
|
contents: write
|
|
runs-on: macos-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- target: x86_64-apple-darwin
|
|
asset_suffix: darwin_amd64
|
|
- target: aarch64-apple-darwin
|
|
asset_suffix: darwin_arm64
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Install protobuf compiler
|
|
run: brew install protobuf
|
|
|
|
- name: Install Rust toolchain
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: ${{ matrix.target }}
|
|
|
|
- name: Cache cargo registry and target
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
~/.cargo/registry
|
|
~/.cargo/git
|
|
seaweed-volume/target
|
|
key: rust-release-${{ matrix.target }}-${{ hashFiles('seaweed-volume/Cargo.lock') }}
|
|
restore-keys: |
|
|
rust-release-${{ matrix.target }}-
|
|
|
|
- name: Build Rust volume server (large disk)
|
|
env:
|
|
SEAWEEDFS_COMMIT: ${{ github.sha }}
|
|
run: |
|
|
cd seaweed-volume
|
|
cargo build --release --target ${{ matrix.target }}
|
|
|
|
- name: Build Rust volume server (normal)
|
|
env:
|
|
SEAWEEDFS_COMMIT: ${{ github.sha }}
|
|
run: |
|
|
cd seaweed-volume
|
|
cargo build --release --target ${{ matrix.target }} --no-default-features
|
|
|
|
- name: Package binaries
|
|
run: |
|
|
cp seaweed-volume/target/${{ matrix.target }}/release/weed-volume weed-volume-large-disk
|
|
tar czf weed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz weed-volume-large-disk
|
|
rm weed-volume-large-disk
|
|
|
|
cp seaweed-volume/target/${{ matrix.target }}/release/weed-volume weed-volume-normal
|
|
tar czf weed-volume_${{ matrix.asset_suffix }}.tar.gz weed-volume-normal
|
|
rm weed-volume-normal
|
|
|
|
- name: Upload release assets
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: |
|
|
weed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz
|
|
weed-volume_${{ matrix.asset_suffix }}.tar.gz
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Upload artifacts
|
|
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: rust-volume-${{ matrix.asset_suffix }}
|
|
path: |
|
|
weed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz
|
|
weed-volume_${{ matrix.asset_suffix }}.tar.gz
|
|
|
|
build-rust-volume-windows:
|
|
permissions:
|
|
contents: write
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Install protobuf compiler
|
|
run: choco install protoc -y
|
|
|
|
- name: Install Rust toolchain
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Cache cargo registry and target
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
~/.cargo/registry
|
|
~/.cargo/git
|
|
seaweed-volume/target
|
|
key: rust-release-windows-${{ hashFiles('seaweed-volume/Cargo.lock') }}
|
|
restore-keys: |
|
|
rust-release-windows-
|
|
|
|
- name: Build Rust volume server (large disk)
|
|
env:
|
|
SEAWEEDFS_COMMIT: ${{ github.sha }}
|
|
run: |
|
|
cd seaweed-volume
|
|
cargo build --release
|
|
|
|
- name: Build Rust volume server (normal)
|
|
env:
|
|
SEAWEEDFS_COMMIT: ${{ github.sha }}
|
|
run: |
|
|
cd seaweed-volume
|
|
cargo build --release --no-default-features
|
|
|
|
- name: Package binaries
|
|
shell: bash
|
|
run: |
|
|
cp seaweed-volume/target/release/weed-volume.exe weed-volume-large-disk.exe
|
|
7z a weed-volume_large_disk_windows_amd64.zip weed-volume-large-disk.exe
|
|
rm weed-volume-large-disk.exe
|
|
|
|
cp seaweed-volume/target/release/weed-volume.exe weed-volume-normal.exe
|
|
7z a weed-volume_windows_amd64.zip weed-volume-normal.exe
|
|
rm weed-volume-normal.exe
|
|
|
|
- name: Upload release assets
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: |
|
|
weed-volume_large_disk_windows_amd64.zip
|
|
weed-volume_windows_amd64.zip
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Upload artifacts
|
|
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: rust-volume-windows_amd64
|
|
path: |
|
|
weed-volume_large_disk_windows_amd64.zip
|
|
weed-volume_windows_amd64.zip
|