diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index 81065f9623..c6c335fce0 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -67,6 +67,17 @@ jobs: clang --version clang-format --version + - name: Install Swiftly + run: | + SWIFTLY_FILE="swiftly-$(uname -m).tar.gz" + curl -sL https://download.swift.org/swiftly/linux/swiftly-x86_64.tar.gz -o $SWIFTLY_FILE + tar zxf $SWIFTLY_FILE + + ./swiftly init --quiet-shell-followup + . "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" + hash -r + sudo apt-get -y install libcurl4-openssl-dev + - name: Lint run: yarn lint diff --git a/.gitignore b/.gitignore index 1870007b3f..0467cca1e1 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,6 @@ node_modules.bak # Sentry React Native Monorepo /packages/core/README.md .env.sentry-build-plugin + +# SwiftLint +swiftlint/* diff --git a/package.json b/package.json index bafd2709c8..cac7281f7b 100644 --- a/package.json +++ b/package.json @@ -7,13 +7,13 @@ "clean": "lerna run clean", "circularDepCheck": "lerna run circularDepCheck", "test": "lerna run test", - "fix": "run-s fix:lerna fix:android fix:kotlin fix:clang", + "fix": "run-s fix:lerna fix:android fix:kotlin fix:clang fix:swift", "fix:lerna": "lerna run fix", "fix:android": "run-s 'java:format fix' java:pmd", "fix:clang": "run-s 'clang:format fix'", "fix:swift": "run-s 'swift:lint fix'", "fix:kotlin": "npx ktlint --relative --format '!**/node_modules/**'", - "lint": "run-s lint:lerna lint:android lint:kotlin lint:clang", + "lint": "run-s lint:lerna lint:android lint:kotlin lint:clang lint:swift ", "lint:lerna": "lerna run lint", "lint:android": "run-s 'java:format lint' java:pmd", "lint:clang": "run-s 'clang:format lint'", @@ -28,7 +28,6 @@ "set-version-samples": "lerna run set-version" }, "devDependencies": { - "@expo/swiftlint": "^0.57.1", "@naturalcycles/ktlint": "^1.13.0", "@sentry/cli": "2.55.0", "downlevel-dts": "^0.11.0", diff --git a/scripts/swiftlint.sh b/scripts/swiftlint.sh index 9c7b2ec5a8..bd0cb23f3f 100755 --- a/scripts/swiftlint.sh +++ b/scripts/swiftlint.sh @@ -11,15 +11,57 @@ fi # Set the mode based on the first argument mode=$1 -DARWIN_PATH="$(dirname "$0")/../node_modules/@expo/swiftlint/bin/darwin-arm64/swiftlint" -LINUX_PATH="$(dirname "$0")/../node_modules/@expo/swiftlint/bin/linux-x64/swiftlint" +SWIFT_PATH=$(which swift 2>/dev/null || true) + +if [ -z "$SWIFT_PATH" ]; then + echo "SwiftLint requires swift, which is not installed or not found in PATH" + echo "To install Swift:" + echo " * ubuntu: follow steps here: https://www.swift.org/install/" + echo " * arch: yay -S swift-bin" + exit 1 +fi + +LINUX_BIN="https://github.com/realm/SwiftLint/releases/download/0.61.0/swiftlint_linux_amd64.zip" +LINUX_SHA="sha256:02f4f580bbb27fb618dbfa24ce2f14c926461c85c26941289f58340151b63ae4" +DARWIN_BIN="https://github.com/realm/SwiftLint/releases/download/0.61.0/portable_swiftlint.zip" +DARWIN_SHA="sha256:2342f3784307a02117e18f745fcd350c6acc6cab0e521c0c0e01c32a53a3b274" if [[ "$OSTYPE" == "darwin"* ]]; then - CMD="$DARWIN_PATH" + EXPECTED_SHA="$DARWIN_SHA" + EXPECTED_BIN="$DARWIN_BIN" else - CMD="$LINUX_PATH" + EXPECTED_SHA="$LINUX_SHA" + EXPECTED_BIN="$LINUX_BIN" fi +# Make ../swiftlint folder if it doesn't exist +SWIFTLINT_DIR="$(dirname "$0")/../swiftlint" +mkdir -p "$SWIFTLINT_DIR" + +# Skip download if sha256sum swiftlint.sha matches EXPECTED_SHA +SHA_FILE="$SWIFTLINT_DIR/swiftlint.sha" +if [ -f "$SHA_FILE" ] && [ "$(cat "$SHA_FILE")" = "$EXPECTED_SHA" ]; then + echo "SwiftLint already downloaded and verified." +else + echo "Clearing swiftlint folder..." + rm -rf "$SWIFTLINT_DIR"/* + + echo "Downloading SwiftLint..." + curl -L "$EXPECTED_BIN" -o "$SWIFTLINT_DIR/swiftlint.zip" + unzip "$SWIFTLINT_DIR/swiftlint.zip" -d "$SWIFTLINT_DIR" + # Save sha256sum of swiftlint.zip to ../swiftlint/swiftlint.sha + echo "$EXPECTED_SHA" > "$SHA_FILE" + # Remove swiftlint.zip + rm "$SWIFTLINT_DIR/swiftlint.zip" +fi + +if [ ! -f "$SHA_FILE" ] || [ "$(cat "$SHA_FILE")" != "$EXPECTED_SHA" ]; then + echo "Invalid SwiftLint, sha doesn't match the expected download." + exit 1 +fi + +CMD="$(dirname "$0")/../swiftlint/swiftlint" + if [ "$mode" = "fix" ]; then $CMD --fix elif [ "$mode" = "lint" ]; then diff --git a/yarn.lock b/yarn.lock index 10283949b6..6d5b843955 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5916,15 +5916,6 @@ __metadata: languageName: node linkType: hard -"@expo/swiftlint@npm:^0.57.1": - version: 0.57.1 - resolution: "@expo/swiftlint@npm:0.57.1" - dependencies: - "@expo/spawn-async": ^1.5.0 - checksum: 87f744bb45cc3a4aa2a40424d21995547c138eef4d4918a3990859c9f143acd3ce463ff3f0c421c0b3e95a694abf7d8fcb8c8545dbe00d81767fc461a68c8378 - languageName: node - linkType: hard - "@expo/vector-icons@npm:^14.0.0": version: 14.0.2 resolution: "@expo/vector-icons@npm:14.0.2" @@ -28327,7 +28318,6 @@ __metadata: version: 0.0.0-use.local resolution: "sentry-react-native@workspace:." dependencies: - "@expo/swiftlint": ^0.57.1 "@naturalcycles/ktlint": ^1.13.0 "@sentry/cli": 2.55.0 downlevel-dts: ^0.11.0