diff --git a/.github/workflows/soundness.yml b/.github/workflows/soundness.yml index 35a50d70a..cd3f196aa 100644 --- a/.github/workflows/soundness.yml +++ b/.github/workflows/soundness.yml @@ -35,3 +35,17 @@ jobs: - name: Run soundness checks run: | ./dev/check-generated-code.sh + + check-imports: + name: Check imports have access level + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Mark the workspace as safe + run: git config --global --add safe.directory ${GITHUB_WORKSPACE} + - name: Check import access level + run: | + ./dev/check-imports.sh diff --git a/Sources/GRPCCore/Call/Server/ServerContext+RPCCancellationHandle.swift b/Sources/GRPCCore/Call/Server/ServerContext+RPCCancellationHandle.swift index 5e0f63367..f958978b8 100644 --- a/Sources/GRPCCore/Call/Server/ServerContext+RPCCancellationHandle.swift +++ b/Sources/GRPCCore/Call/Server/ServerContext+RPCCancellationHandle.swift @@ -14,7 +14,7 @@ * limitations under the License. */ -import Synchronization +private import Synchronization extension ServerContext { @TaskLocal diff --git a/Sources/GRPCInProcessTransport/Syscalls.swift b/Sources/GRPCInProcessTransport/Syscalls.swift index 96737a791..df49a49f2 100644 --- a/Sources/GRPCInProcessTransport/Syscalls.swift +++ b/Sources/GRPCInProcessTransport/Syscalls.swift @@ -15,11 +15,11 @@ */ #if canImport(Darwin) -import Darwin +private import Darwin #elseif canImport(Glibc) -import Glibc +private import Glibc #elseif canImport(Musl) -import Musl +private import Musl #endif enum System { diff --git a/dev/check-imports.sh b/dev/check-imports.sh new file mode 100755 index 000000000..1ff7fd982 --- /dev/null +++ b/dev/check-imports.sh @@ -0,0 +1,29 @@ +#!/bin/bash +## Copyright 2025, gRPC Authors All rights reserved. +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +set -euo pipefail + +log() { printf -- "** %s\n" "$*" >&2; } + +here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +root="${here}/.." + +log "Checking all imports have an access level" +if grep -r "^import " --exclude-dir="Documentation.docc" "${root}/Sources"; then + # Matches are bad! + exit 1 +else + exit 0 +fi