mirror of
https://github.com/apple/swift-nio.git
synced 2026-05-20 20:30:36 +00:00
Motivation * `check_benchmark_thresholds.sh` was updated to check for exit code 2 from `swift package benchmark thresholds check` to distinguish threshold regression from build errors. * It seems SwiftPM's `CommandPlugin` infrastructure always exits with code 1 when `performCommand` throws, regardless of the error's raw value. So the exit code is never 2, causing all regressions to fall through to the `else` branch and be misreported as build errors, with no diff output. Modifications * Remove the `rc == 2` check and instead attempt `thresholds update` for any non-zero `rc` from `thresholds check`. * Use the result of `thresholds update` to distinguish regression (success) from build error (failure). * Remove `--exit-code` from `git diff` to prevent `set -uo pipefail` from aborting the script before output is fully flushed. Result * Benchmark threshold regressions correctly output the `=== BEGIN DIFF ===` section again. * Actual build errors are still correctly detected and reported.
60 lines
2.1 KiB
Bash
Executable File
60 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
##===----------------------------------------------------------------------===##
|
|
##
|
|
## This source file is part of the SwiftNIO open source project
|
|
##
|
|
## Copyright (c) 2025 Apple Inc. and the SwiftNIO project authors
|
|
## Licensed under Apache License v2.0
|
|
##
|
|
## See LICENSE.txt for license information
|
|
## See CONTRIBUTORS.txt for the list of SwiftNIO project authors
|
|
##
|
|
## SPDX-License-Identifier: Apache-2.0
|
|
##
|
|
##===----------------------------------------------------------------------===##
|
|
|
|
set -uo pipefail
|
|
|
|
log() { printf -- "** %s\n" "$*" >&2; }
|
|
error() { printf -- "** ERROR: %s\n" "$*" >&2; }
|
|
fatal() { error "$@"; exit 1; }
|
|
|
|
# Parameter environment variables
|
|
if [ -z "$SWIFT_VERSION" ]; then
|
|
fatal "SWIFT_VERSION must be specified."
|
|
fi
|
|
|
|
benchmark_package_path="${BENCHMARK_PACKAGE_PATH:-"."}"
|
|
swift_version="${SWIFT_VERSION:-""}"
|
|
|
|
# Any parameters to the script are passed along to SwiftPM
|
|
swift_package_arguments=("$@")
|
|
|
|
#"swift package --package-path ${{ inputs.benchmark_package_path }} ${{ inputs.swift_package_arguments }} benchmark baseline check --check-absolute-path ${{ inputs.benchmark_package_path }}/Thresholds/${SWIFT_VERSION}/"
|
|
swift package --package-path "$benchmark_package_path" "${swift_package_arguments[@]}" benchmark thresholds check --format metricP90AbsoluteThresholds --path "${benchmark_package_path}/Thresholds/${swift_version}/"
|
|
rc="$?"
|
|
|
|
# Benchmarks are unchanged, nothing to recalculate
|
|
if [[ "$rc" == 0 ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Non-zero exit from 'thresholds check' means thresholds regressed or a build
|
|
# error occurred. Try 'thresholds update' to distinguish: if it also fails, it
|
|
# was a build error; if it succeeds, thresholds were updated.
|
|
log "Recalculating thresholds..."
|
|
|
|
swift package --package-path "$benchmark_package_path" "${swift_package_arguments[@]}" benchmark thresholds update --format metricP90AbsoluteThresholds --path "${benchmark_package_path}/Thresholds/${swift_version}/"
|
|
update_rc="$?"
|
|
|
|
if [[ "$update_rc" != 0 ]]; then
|
|
error "Benchmark failed to run due to build error."
|
|
exit $update_rc
|
|
fi
|
|
|
|
echo "=== BEGIN DIFF ===" # use echo, not log for clean output to be scraped
|
|
git diff HEAD
|
|
exit 1
|
|
|
|
|