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