From 0f0a14bf6cd927aa5dfc3e68961f6a768fab672e Mon Sep 17 00:00:00 2001 From: Jaewon Hur Date: Thu, 12 Feb 2026 12:34:02 -0800 Subject: [PATCH 1/3] Check unused imports --- Makefile | 4 +-- scripts/check-unused-imports.sh | 55 +++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100755 scripts/check-unused-imports.sh diff --git a/Makefile b/Makefile index 31816886c..a0f673564 100644 --- a/Makefile +++ b/Makefile @@ -55,13 +55,13 @@ all: init-block build: @echo Building container binaries... @$(SWIFT) --version - @$(SWIFT) build -c $(BUILD_CONFIGURATION) $(SWIFT_CONFIGURATION) + @$(SWIFT) build -c $(BUILD_CONFIGURATION) $(SWIFT_CONFIGURATION) $(BUILD_OPTIONS) .PHONY: cli cli: @echo Building container CLI... @$(SWIFT) --version - @$(SWIFT) build -c $(BUILD_CONFIGURATION) $(SWIFT_CONFIGURATION) --product container + @$(SWIFT) build -c $(BUILD_CONFIGURATION) $(SWIFT_CONFIGURATION) --product container $(BUILD_OPTIONS) @echo Installing container CLI to bin/... @mkdir -p bin @install "$(BUILD_BIN_DIR)/container" "bin/container" diff --git a/scripts/check-unused-imports.sh b/scripts/check-unused-imports.sh new file mode 100755 index 000000000..09e65127a --- /dev/null +++ b/scripts/check-unused-imports.sh @@ -0,0 +1,55 @@ +#!/bin/bash -e +# Copyright © 2026 Apple Inc. and the container project authors. +# +# 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 +# +# https://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. + +echo "Checking existence of swiftlint..." + +if ! command -v swiftlint >/dev/null; then + echo "swiftlint not found in PATH" + echo "please install swiftlint. You can run brew install swiftlint" + exit 1 +fi + +PROJECT_ROOT="$(realpath "${BASH_SOURCE[0]}/../../")" +BUILD_LOG=${PROJECT_ROOT}/.build/build.log +LINT_LOG=${PROJECT_ROOT}/.build/swiftlint.log + +echo 'Building `container` with verbose flag' +if [ ! -f ${BUILD_LOG} ]; +then + make -C ${PROJECT_ROOT} clean + make -C ${PROJECT_ROOT} BUILD_OPTIONS="-v &>${BUILD_LOG}" +fi + +# Get changed Swift files from git diff main +CHANGED_SWIFT_FILES=$(git diff main --name-only | grep '\.swift$' || true) + +if [ -z "$CHANGED_SWIFT_FILES" ]; then + echo "No Swift files changed, skipping swiftlint analysis" + touch ${LINT_LOG} +else + echo "Analyzing changed Swift files:" + # Convert to absolute paths and pass to swiftlint + ABSOLUTE_PATHS=() + while IFS= read -r file; do + if [ -n "$file" ]; then + echo " - $file" + ABSOLUTE_PATHS+=("${PROJECT_ROOT}/${file}") + fi + done <<< "$CHANGED_SWIFT_FILES" + swiftlint analyze --compiler-log-path ${BUILD_LOG} "${ABSOLUTE_PATHS[@]}" 2>/dev/null > ${LINT_LOG} + + echo -e "\nUnused imports:\n" + cat ${LINT_LOG} | grep "Unused Import" +fi From 2146e11751325e6e42b16aed029a9a9cf9abec02 Mon Sep 17 00:00:00 2001 From: Jaewon Hur Date: Thu, 12 Feb 2026 13:19:10 -0800 Subject: [PATCH 2/3] Update getting PROJECT_ROOT --- scripts/check-unused-imports.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/check-unused-imports.sh b/scripts/check-unused-imports.sh index 09e65127a..c51c4c9bf 100755 --- a/scripts/check-unused-imports.sh +++ b/scripts/check-unused-imports.sh @@ -21,7 +21,7 @@ if ! command -v swiftlint >/dev/null; then exit 1 fi -PROJECT_ROOT="$(realpath "${BASH_SOURCE[0]}/../../")" +PROJECT_ROOT="$(git rev-parse --show-toplevel)" BUILD_LOG=${PROJECT_ROOT}/.build/build.log LINT_LOG=${PROJECT_ROOT}/.build/swiftlint.log From 12fe078b77a22a77108008e7d643065d3d0883a8 Mon Sep 17 00:00:00 2001 From: Jaewon Hur Date: Thu, 19 Feb 2026 13:45:29 -0800 Subject: [PATCH 3/3] Add .swiftlint.yml --- .swiftlint.yml | 2 ++ scripts/check-unused-imports.sh | 7 ++----- 2 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 .swiftlint.yml diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 000000000..c57d1d2b0 --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,2 @@ +analyzer_rules: + - unused_import diff --git a/scripts/check-unused-imports.sh b/scripts/check-unused-imports.sh index c51c4c9bf..e7ccc38cc 100755 --- a/scripts/check-unused-imports.sh +++ b/scripts/check-unused-imports.sh @@ -26,11 +26,8 @@ BUILD_LOG=${PROJECT_ROOT}/.build/build.log LINT_LOG=${PROJECT_ROOT}/.build/swiftlint.log echo 'Building `container` with verbose flag' -if [ ! -f ${BUILD_LOG} ]; -then - make -C ${PROJECT_ROOT} clean - make -C ${PROJECT_ROOT} BUILD_OPTIONS="-v &>${BUILD_LOG}" -fi +make -C ${PROJECT_ROOT} clean +make -C ${PROJECT_ROOT} BUILD_OPTIONS="-v &>${BUILD_LOG}" # Get changed Swift files from git diff main CHANGED_SWIFT_FILES=$(git diff main --name-only | grep '\.swift$' || true)