diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index e90ecc03..f645b45c 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -156,6 +156,8 @@ jobs: xcodebuild -scheme cmux -configuration Release -derivedDataPath build-arm \ -destination 'platform=macOS,arch=arm64' \ -clonedSourcePackagesDirPath .spm-cache \ + ARCHS="arm64" \ + ONLY_ACTIVE_ARCH=YES \ CODE_SIGNING_ALLOWED=NO ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-Nightly build - name: Build universal app (Release) @@ -167,15 +169,23 @@ jobs: ONLY_ACTIVE_ARCH=NO \ CODE_SIGNING_ALLOWED=NO ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-Nightly build - - name: Verify universal binaries + - name: Verify nightly binary architectures run: | set -euo pipefail + ARM_APP_BINARY="build-arm/Build/Products/Release/cmux.app/Contents/MacOS/cmux" + ARM_CLI_BINARY="build-arm/Build/Products/Release/cmux.app/Contents/Resources/bin/cmux" APP_BINARY="build-universal/Build/Products/Release/cmux.app/Contents/MacOS/cmux" CLI_BINARY="build-universal/Build/Products/Release/cmux.app/Contents/Resources/bin/cmux" + ARM_APP_ARCHS="$(lipo -archs "$ARM_APP_BINARY")" + ARM_CLI_ARCHS="$(lipo -archs "$ARM_CLI_BINARY")" APP_ARCHS="$(lipo -archs "$APP_BINARY")" CLI_ARCHS="$(lipo -archs "$CLI_BINARY")" + echo "Arm app binary architectures: $ARM_APP_ARCHS" + echo "Arm CLI binary architectures: $ARM_CLI_ARCHS" echo "App binary architectures: $APP_ARCHS" echo "CLI binary architectures: $CLI_ARCHS" + [[ "$ARM_APP_ARCHS" == "arm64" ]] + [[ "$ARM_CLI_ARCHS" == "arm64" ]] [[ "$APP_ARCHS" == *arm64* && "$APP_ARCHS" == *x86_64* ]] [[ "$CLI_ARCHS" == *arm64* && "$CLI_ARCHS" == *x86_64* ]] diff --git a/tests/test_nightly_universal_build.sh b/tests/test_nightly_universal_build.sh index b6b9e63a..e86dbf36 100644 --- a/tests/test_nightly_universal_build.sh +++ b/tests/test_nightly_universal_build.sh @@ -11,25 +11,31 @@ if ! awk ' in_arm && /^ - name:/ { in_arm=0 } in_universal && /^ - name:/ { in_universal=0 } in_arm && /-destination '\''platform=macOS,arch=arm64'\''/ { saw_arm_destination=1 } + in_arm && /ARCHS="arm64"/ { saw_arm_archs=1 } + in_arm && /ONLY_ACTIVE_ARCH=YES/ { saw_arm_only_active_arch=1 } in_universal && /-destination '\''generic\/platform=macOS'\''/ { saw_universal_destination=1 } in_universal && /ARCHS="arm64 x86_64"/ { saw_universal_archs=1 } in_universal && /ONLY_ACTIVE_ARCH=NO/ { saw_universal_only_active_arch=1 } END { - exit !(saw_arm_destination && saw_universal_destination && saw_universal_archs && saw_universal_only_active_arch) + exit !(saw_arm_destination && saw_arm_archs && saw_arm_only_active_arch && saw_universal_destination && saw_universal_archs && saw_universal_only_active_arch) } ' "$WORKFLOW_FILE"; then - echo "FAIL: nightly workflow must build both Apple Silicon and universal variants explicitly" + echo "FAIL: nightly workflow must force Apple Silicon nightly to arm64-only and universal nightly to both slices" exit 1 fi if ! awk ' - /^ - name: Verify universal binaries/ { in_verify=1; next } + /^ - name: Verify nightly binary architectures/ { in_verify=1; next } in_verify && /^ - name:/ { in_verify=0 } + in_verify && /lipo -archs "\$ARM_APP_BINARY"/ { saw_arm_app=1 } + in_verify && /lipo -archs "\$ARM_CLI_BINARY"/ { saw_arm_cli=1 } in_verify && /lipo -archs "\$APP_BINARY"/ { saw_app=1 } in_verify && /lipo -archs "\$CLI_BINARY"/ { saw_cli=1 } - END { exit !(saw_app && saw_cli) } + in_verify && /\[\[ "\$ARM_APP_ARCHS" == "arm64" \]\]/ { saw_arm_app_assert=1 } + in_verify && /\[\[ "\$ARM_CLI_ARCHS" == "arm64" \]\]/ { saw_arm_cli_assert=1 } + END { exit !(saw_arm_app && saw_arm_cli && saw_app && saw_cli && saw_arm_app_assert && saw_arm_cli_assert) } ' "$WORKFLOW_FILE"; then - echo "FAIL: nightly workflow must verify both app and CLI universal slices with lipo" + echo "FAIL: nightly workflow must verify arm-only and universal slices with lipo" exit 1 fi