From 33d3f71e006354b8b8ed70b6c7f62021f4ed6289 Mon Sep 17 00:00:00 2001 From: Si Beaumont Date: Tue, 14 May 2024 05:09:54 +0100 Subject: [PATCH] Update API breakage CI script (#143) * Update API breakage CI script * restate sendable conformance to avoid warning/as-error --------- Co-authored-by: Konrad `ktoso` Malawski --- Sources/CoreMetrics/Metrics.swift | 2 +- scripts/check_no_api_breakages.sh | 82 +++---------------------------- 2 files changed, 8 insertions(+), 76 deletions(-) diff --git a/Sources/CoreMetrics/Metrics.swift b/Sources/CoreMetrics/Metrics.swift index 196fd3a..324c15e 100644 --- a/Sources/CoreMetrics/Metrics.swift +++ b/Sources/CoreMetrics/Metrics.swift @@ -176,7 +176,7 @@ extension FloatingPointCounter: CustomStringConvertible { /// A gauge is a metric that represents a single numerical value that can arbitrarily go up and down. /// Gauges are typically used for measured values like temperatures or current memory usage, but also "counts" that can go up and down, like the number of active threads. /// Gauges are modeled as `Recorder` with a sample size of 1 and that does not perform any aggregation. -public final class Gauge: Recorder { +public final class Gauge: Recorder, @unchecked Sendable { /// Create a new `Gauge`. /// /// - parameters: diff --git a/scripts/check_no_api_breakages.sh b/scripts/check_no_api_breakages.sh index 9aa989c..986fdda 100755 --- a/scripts/check_no_api_breakages.sh +++ b/scripts/check_no_api_breakages.sh @@ -17,7 +17,7 @@ ## ## This source file is part of the SwiftNIO open source project ## -## Copyright (c) 2017-2018 Apple Inc. and the SwiftNIO project authors +## Copyright (c) 2017-2020 Apple Inc. and the SwiftNIO project authors ## Licensed under Apache License v2.0 ## ## See LICENSE.txt for license information @@ -29,44 +29,15 @@ set -eu -# repodir -function all_modules() { - local repodir="$1" - ( - set -eu - cd "$repodir" - swift package dump-package | jq '.products | - map(select(.type | has("library") )) | - map(.name) | .[]' | tr -d '"' - ) -} - -# repodir tag output -function build_and_do() { - local repodir=$1 - local tag=$2 - local output=$3 - - ( - cd "$repodir" - git checkout -q "$tag" - swift build - while read -r module; do - swift api-digester -sdk "$sdk" -dump-sdk -module "$module" \ - -o "$output/$module.json" -I "$repodir/.build/debug" - done < <(all_modules "$repodir") - ) -} - function usage() { echo >&2 "Usage: $0 REPO-GITHUB-URL NEW-VERSION OLD-VERSIONS..." echo >&2 - echo >&2 "This script requires a Swift 5.1+ toolchain." + echo >&2 "This script requires a Swift 5.2+ toolchain." echo >&2 echo >&2 "Examples:" echo >&2 - echo >&2 "Check between master and tag 2.1.1 of swift-nio:" - echo >&2 " $0 https://github.com/apple/swift-nio master 2.1.1" + echo >&2 "Check between main and tag 2.1.1 of swift-nio:" + echo >&2 " $0 https://github.com/apple/swift-nio main 2.1.1" echo >&2 echo >&2 "Check between HEAD and commit 64cf63d7 using the provided toolchain:" echo >&2 " xcrun --toolchain org.swift.5120190702a $0 ../some-local-repo HEAD 64cf63d7" @@ -77,12 +48,6 @@ if [[ $# -lt 3 ]]; then exit 1 fi -sdk=/ -if [[ "$(uname -s)" == Darwin ]]; then - sdk=$(xcrun --show-sdk-path) -fi - -hash jq 2> /dev/null || { echo >&2 "ERROR: jq must be installed"; exit 1; } tmpdir=$(mktemp -d /tmp/.check-api_XXXXXX) repo_url=$1 new_tag=$2 @@ -91,46 +56,13 @@ shift 2 repodir="$tmpdir/repo" git clone "$repo_url" "$repodir" git -C "$repodir" fetch -q origin '+refs/pull/*:refs/remotes/origin/pr/*' -errors=0 +cd "$repodir" +git checkout -q "$new_tag" for old_tag in "$@"; do - mkdir "$tmpdir/api-old" - mkdir "$tmpdir/api-new" - echo "Checking public API breakages from $old_tag to $new_tag" - build_and_do "$repodir" "$new_tag" "$tmpdir/api-new/" - build_and_do "$repodir" "$old_tag" "$tmpdir/api-old/" - - for f in "$tmpdir/api-new"/*; do - f=$(basename "$f") - report="$tmpdir/$f.report" - if [[ ! -f "$tmpdir/api-old/$f" ]]; then - echo "NOTICE: NEW MODULE $f" - continue - fi - - echo -n "Checking $f... " - swift api-digester -sdk "$sdk" -diagnose-sdk \ - --input-paths "$tmpdir/api-old/$f" -input-paths "$tmpdir/api-new/$f" 2>&1 \ - > "$report" 2>&1 - - if ! shasum "$report" | grep -q cefc4ee5bb7bcdb7cb5a7747efa178dab3c794d5; then - echo ERROR - echo >&2 "==============================" - echo >&2 "ERROR: public API change in $f" - echo >&2 "==============================" - cat >&2 "$report" - errors=$(( errors + 1 )) - else - echo OK - fi - done - rm -rf "$tmpdir/api-new" "$tmpdir/api-old" + swift package diagnose-api-breaking-changes "$old_tag" done -if [[ "$errors" == 0 ]]; then - echo "OK, all seems good" -fi echo done -exit "$errors"