From 34c4a7f546e4043047b7878971e804b59398d1f0 Mon Sep 17 00:00:00 2001 From: Jasmin Eilers <4738799+jaeilers@users.noreply.github.com> Date: Fri, 15 May 2026 11:59:46 +0200 Subject: [PATCH] feat: Replace custom scripts with lefthook --- Gemfile | 1 + Gemfile.lock | 3 ++ .../project.pbxproj | 8 ++--- lefthook.yml | 7 +++++ scripts/pre-commit | 28 ------------------ scripts/setup_pre_commit_hook.sh | 29 ------------------- scripts/swift-format.sh | 15 ---------- 7 files changed, 15 insertions(+), 76 deletions(-) create mode 100644 lefthook.yml delete mode 100644 scripts/pre-commit delete mode 100755 scripts/setup_pre_commit_hook.sh delete mode 100755 scripts/swift-format.sh diff --git a/Gemfile b/Gemfile index 484334d..4c9849e 100644 --- a/Gemfile +++ b/Gemfile @@ -2,3 +2,4 @@ source "https://rubygems.org" gem "fastlane" gem "slather" +gem "lefthook" diff --git a/Gemfile.lock b/Gemfile.lock index 2b299c8..9e8b442 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -189,6 +189,7 @@ GEM json (2.19.5) jwt (2.10.2) base64 + lefthook (2.1.6) logger (1.7.0) mini_magick (4.13.2) mini_mime (1.1.5) @@ -284,6 +285,7 @@ PLATFORMS DEPENDENCIES fastlane + lefthook slather CHECKSUMS @@ -352,6 +354,7 @@ CHECKSUMS jmespath (1.6.2) sha256=238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1 json (2.19.5) sha256=218a18553e4801d579ca7e0f5bc72bafd776d7397238a1fb4e74db5b0a812c59 jwt (2.10.2) sha256=31e1ee46f7359883d5e622446969fe9c118c3da87a0b1dca765ce269c3a0c4f4 + lefthook (2.1.6) sha256=e5c4c46f789c54961de030bf324f3fb38989a6adc944a6e8df50b4d432ebaf1d logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 mini_magick (4.13.2) sha256=71d6258e0e8a3d04a9a0a09784d5d857b403a198a51dd4f882510435eb95ddd9 mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef diff --git a/NSAttributedStringBuilder.xcodeproj/project.pbxproj b/NSAttributedStringBuilder.xcodeproj/project.pbxproj index 5cbecbf..20a42fc 100644 --- a/NSAttributedStringBuilder.xcodeproj/project.pbxproj +++ b/NSAttributedStringBuilder.xcodeproj/project.pbxproj @@ -97,7 +97,7 @@ DD46728E2FAE0373002C870E /* Frameworks */, DD46728F2FAE0373002C870E /* Resources */, DD4672F92FAE0963002C870E /* Swiftlint Run Script */, - DD4672FA2FAE098A002C870E /* SwiftFormat Commit Hook Run Script */, + DD4672FA2FAE098A002C870E /* Install Commit Hooks Run Script */, ); buildRules = ( ); @@ -210,7 +210,7 @@ shellPath = /bin/sh; shellScript = "if [[ \"$(uname -m)\" == arm64 ]]; then\n export PATH=\"/opt/homebrew/bin:$PATH\"\nfi\n\nif command -v swiftlint >/dev/null 2>&1\nthen\n swiftlint\nelse\n echo \"warning: `swiftlint` command not found - See https://github.com/realm/SwiftLint#installation for installation instructions.\"\nfi\n"; }; - DD4672FA2FAE098A002C870E /* SwiftFormat Commit Hook Run Script */ = { + DD4672FA2FAE098A002C870E /* Install Commit Hooks Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -219,14 +219,14 @@ ); inputPaths = ( ); - name = "SwiftFormat Commit Hook Run Script"; + name = "Install Commit Hooks Run Script"; outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Installs the swift-format pre-commit hook\nbash \"${SRCROOT}/scripts/setup_pre_commit_hook.sh\"\n"; + shellScript = "# Installs commit hooks\nif [[ -d \"$HOME/.rbenv\" ]]; then\n export PATH=~/.rbenv/shims:$PATH\n bundle exec lefthook install\nelse\n echo \"warning: Please install rbenv\"\nfi\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..3a5b034 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,7 @@ +pre-commit: + parallel: true + fail_on_changes: "always" + fail_on_changes_diff: false + jobs: + - name: Format Swift files & abort commit if needed + run: swiftformat Sources --config .swiftformat diff --git a/scripts/pre-commit b/scripts/pre-commit deleted file mode 100644 index bf88f29..0000000 --- a/scripts/pre-commit +++ /dev/null @@ -1,28 +0,0 @@ -# This pre-commit hook executes swift-format. - -if ! (which swiftformat > /dev/null); then - echo "⚠️ SwiftFormat is not installed. Please install SwiftFormat via homebrew: brew install swiftformat" - exit 1 -fi - -STAGED_SWIFT_FILES=$(git --no-pager diff --staged --name-only --diff-filter=d | grep .swift) -ROOT_PATH=$(git rev-parse --show-toplevel) -CONFIG_PATH="${ROOT_PATH}/.swiftformat" -SOURCE_PATH="${ROOT_PATH}/Sources" - -if [[ -z "$STAGED_SWIFT_FILES" ]]; then - echo "No staged swift files that could be formatted." - exit 0 -fi - -PRE_FORMAT_HASH=$(echo "$STAGED_SWIFT_FILES" | xargs git --no-pager diff | md5) - -swiftformat "$SOURCE_PATH" \ - --config "$CONFIG_PATH" - -POST_FORMAT_HASH=$(echo "$STAGED_SWIFT_FILES" | xargs git --no-pager diff | md5) - -if [[ "$PRE_FORMAT_HASH" != "$POST_FORMAT_HASH" ]]; then - echo "⚠️ Abort commit. Files have been modified during commit." - exit 1 -fi diff --git a/scripts/setup_pre_commit_hook.sh b/scripts/setup_pre_commit_hook.sh deleted file mode 100755 index 1117381..0000000 --- a/scripts/setup_pre_commit_hook.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -set -e - -setup_pre_commit_hook() { - - ROOT_PATH=$(git rev-parse --show-toplevel) - SHEBANG="#!/bin/sh" - MODIFY_WARNING="# Do not modify this file! This file was auto-generated. The source can be found in ${ROOT_PATH}/scripts/pre-commit." - FILE_NAME="pre-commit" - - SOURCE_PATH="${ROOT_PATH}/scripts/$FILE_NAME" - DESTINATION_PATH="${ROOT_PATH}/.git/hooks/$FILE_NAME" - - if [[ -e "$DESTINATION_PATH" ]]; then - echo "Pre-Commit hook is already installed." - exit 0 - fi - - echo "$SHEBANG" > "$DESTINATION_PATH" - echo "$MODIFY_WARNING" >> "$DESTINATION_PATH" - cat "$SOURCE_PATH" >> "$DESTINATION_PATH" - echo "$MODIFY_WARNING" >> "$DESTINATION_PATH" - - chmod +x "$DESTINATION_PATH" - -} - -setup_pre_commit_hook diff --git a/scripts/swift-format.sh b/scripts/swift-format.sh deleted file mode 100755 index 10ae0a0..0000000 --- a/scripts/swift-format.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -e - -if ! (which swiftformat > /dev/null); then - echo "⚠️ SwiftFormat is not installed. Download from https://github.com/nicklockwood/SwiftFormat" - exit 1 -fi - -ROOT_PATH=$(git rev-parse --show-toplevel) -CONFIG_PATH="${ROOT_PATH}/.swiftformat" -SOURCE_PATH="${ROOT_PATH}/Sources" - -swiftformat "$SOURCE_PATH" \ - --config "$CONFIG_PATH"