From 3d75acadd38de588c4fadbe614ddb63ffd82cbfa Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 14 Sep 2026 07:31:34 +0800 Subject: [PATCH] fix(release): include CLI in Linux artifacts (#7794) --- .github/workflows/build.yml | 64 +++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0eace9759..1e2f6cf79 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -406,11 +406,16 @@ jobs: # Force rebuild by touching build.rs touch rustfs/build.rs + BINARY_ARGS=(--bin rustfs) + if [[ "${{ matrix.platform }}" == "linux" ]]; then + BINARY_ARGS+=(--bin rustfs-cli) + fi + if [[ "${{ matrix.cross }}" == "true" ]]; then # All cross targets in the matrix are Linux; zigbuild handles them. - cargo zigbuild --release --target ${{ matrix.target }} -p rustfs --bin rustfs + cargo zigbuild --release --target ${{ matrix.target }} -p rustfs "${BINARY_ARGS[@]}" else - cargo build --release --target ${{ matrix.target }} -p rustfs --bin rustfs + cargo build --release --target ${{ matrix.target }} -p rustfs "${BINARY_ARGS[@]}" fi - name: Create release package @@ -498,17 +503,24 @@ jobs: BINARY_NAME="rustfs" fi - # Verify the binary exists before packaging - if [[ ! -f "$BINARY_NAME" ]]; then - echo "❌ Binary $BINARY_NAME not found in $(pwd)" - if [[ "${{ matrix.platform }}" == "windows" ]]; then - dir - else - ls -la - fi - exit 1 + BINARY_FILES=("$BINARY_NAME") + if [[ "${{ matrix.platform }}" == "linux" ]]; then + BINARY_FILES+=("rustfs-cli") fi + # Verify the binaries exist before packaging + for binary in "${BINARY_FILES[@]}"; do + if [[ ! -f "$binary" ]]; then + echo "❌ Binary $binary not found in $(pwd)" + if [[ "${{ matrix.platform }}" == "windows" ]]; then + dir + else + ls -la + fi + exit 1 + fi + done + # Universal packaging function package_zip() { local src=$1 @@ -526,8 +538,12 @@ jobs: } # Create the zip package - echo "Start packaging: $BINARY_NAME -> ../../../${PACKAGE_NAME}.zip" - package_zip "$BINARY_NAME" "../../../${PACKAGE_NAME}.zip" + echo "Start packaging: ${BINARY_FILES[*]} -> ../../../${PACKAGE_NAME}.zip" + if [[ "${{ matrix.platform }}" == "linux" ]]; then + zip "../../../${PACKAGE_NAME}.zip" "${BINARY_FILES[@]}" + else + package_zip "$BINARY_NAME" "../../../${PACKAGE_NAME}.zip" + fi cd ../../.. @@ -601,6 +617,28 @@ jobs: echo "🔧 Build type: ${BUILD_TYPE}" echo "📊 Version: ${VERSION}" + - name: Verify packaged Linux CLI + if: matrix.platform == 'linux' + shell: bash + run: | + set -euo pipefail + + package_file="${{ steps.package.outputs.package_file }}" + archive_members="$(unzip -Z1 "$package_file" | sort)" + expected_members=$'rustfs\nrustfs-cli' + if [[ "$archive_members" != "$expected_members" ]]; then + echo "Linux package must contain exactly rustfs and rustfs-cli" >&2 + printf '%s\n' "$archive_members" >&2 + exit 1 + fi + + if [[ "${{ matrix.target }}" == "x86_64-unknown-linux-gnu" ]]; then + cli_dir="$(mktemp -d)" + trap 'rm -rf "$cli_dir"' EXIT + unzip -q "$package_file" rustfs-cli -d "$cli_dir" + "$cli_dir/rustfs-cli" --help >/dev/null + fi + - name: Verify packaged console if: matrix.target == 'x86_64-unknown-linux-gnu' shell: bash