chore: enhance CI tests (#3344)
* chore: add swift linter * chore: add clang linters * chore: add kotlin linter * chore(ci): update workflows * chore(ci): clean workflows
This commit is contained in:
parent
26043335e1
commit
91d7135562
34
.github/workflows/check-android.yml
vendored
Normal file
34
.github/workflows/check-android.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
name: Check Android
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- '.github/workflows/check-android.yml'
|
||||||
|
- 'android/**'
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- '.github/workflows/check-android.yml'
|
||||||
|
- 'android/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Kotlin-Lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- run: |
|
||||||
|
curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.0.0/ktlint && chmod a+x ktlint && sudo mv ktlint /usr/local/bin/
|
||||||
|
- name: run ktlint
|
||||||
|
working-directory: ./android/
|
||||||
|
run: |
|
||||||
|
ktlint --reporter=checkstyle,output=build/ktlint-report.xml --relative --editorconfig=./.editorconfig
|
||||||
|
continue-on-error: true
|
||||||
|
- uses: yutailang0119/action-ktlint@v3
|
||||||
|
with:
|
||||||
|
report-path: ./android/build/*.xml
|
||||||
|
continue-on-error: false
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ktlint-report
|
||||||
|
path: ./android/build/*.xml
|
31
.github/workflows/check-clang.yml
vendored
Normal file
31
.github/workflows/check-clang.yml
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
name: Check CLang
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- '.github/workflows/check-clang.yml'
|
||||||
|
- 'ios/**'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- '.github/workflows/check-clang.yml'
|
||||||
|
- 'ios/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CLang-Format:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install clang-format
|
||||||
|
run: sudo apt-get install clang-format
|
||||||
|
- name: Check ios clang formatting
|
||||||
|
run: |
|
||||||
|
find ios -type f \( -name "*.h" -o -name "*.cpp" -o -name "*.m" -o -name "*.mm" \) -print0 | while read -d $'\0' file; do
|
||||||
|
clang-format -style=file:./ios/.clang-format -i "$file"
|
||||||
|
done
|
||||||
|
shell: bash
|
||||||
|
- name: Check for changes
|
||||||
|
run: git diff --exit-code HEAD
|
41
.github/workflows/check-ios.yml
vendored
Normal file
41
.github/workflows/check-ios.yml
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
name: Check iOS
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- '.github/workflows/check-ios.yml'
|
||||||
|
- 'ios/**'
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- '.github/workflows/check-ios.yml'
|
||||||
|
- 'ios/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Swift-Lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Lint with SwiftLint
|
||||||
|
uses: norio-nomura/action-swiftlint@master
|
||||||
|
with:
|
||||||
|
args: --strict
|
||||||
|
env:
|
||||||
|
WORKING_DIRECTORY: ios
|
||||||
|
Swift-Format:
|
||||||
|
runs-on: macOS-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: ./ios
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install SwiftFormat
|
||||||
|
run: brew install swiftformat
|
||||||
|
|
||||||
|
- name: Format Swift code
|
||||||
|
run: swiftformat --verbose .
|
||||||
|
|
||||||
|
- name: Verify formatted code is unchanged
|
||||||
|
run: git diff --exit-code HEAD
|
14
android/.editorconfig
Normal file
14
android/.editorconfig
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[*.{kt,kts}]
|
||||||
|
indent_style=space
|
||||||
|
indent_size=2
|
||||||
|
continuation_indent_size=4
|
||||||
|
insert_final_newline=true
|
||||||
|
max_line_length=160
|
||||||
|
ktlint_code_style=android_studio
|
||||||
|
ktlint_standard=enabled
|
||||||
|
ktlint_experimental=enabled
|
||||||
|
ktlint_standard_filename=disabled # dont require PascalCase filenames
|
||||||
|
ktlint_standard_no-wildcard-imports=disabled # allow .* imports
|
||||||
|
ktlint_function_signature_body_expression_wrapping=multiline
|
||||||
|
ij_kotlin_allow_trailing_comma_on_call_site=false
|
||||||
|
ij_kotlin_allow_trailing_comma=false
|
25
ios/.clang-format
Normal file
25
ios/.clang-format
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Config for clang-format version 16
|
||||||
|
|
||||||
|
# standard
|
||||||
|
BasedOnStyle: llvm
|
||||||
|
Standard: c++14
|
||||||
|
|
||||||
|
# Indentation
|
||||||
|
IndentWidth: 2
|
||||||
|
ColumnLimit: 140
|
||||||
|
|
||||||
|
# Includes
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
|
||||||
|
# Pointer and reference alignment
|
||||||
|
PointerAlignment: Left
|
||||||
|
ReferenceAlignment: Left
|
||||||
|
ReflowComments: true
|
||||||
|
|
||||||
|
# Line breaking options
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
AllowShortFunctionsOnASingleLine: Empty
|
||||||
|
IndentCaseLabels: true
|
||||||
|
NamespaceIndentation: Inner
|
13
ios/.swiftformat
Normal file
13
ios/.swiftformat
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
--allman false
|
||||||
|
--indent 2
|
||||||
|
--exclude Pods,Generated
|
||||||
|
|
||||||
|
--disable andOperator
|
||||||
|
--disable redundantReturn
|
||||||
|
--disable wrapMultilineStatementBraces
|
||||||
|
--disable organizeDeclarations
|
||||||
|
--disable redundantSelf
|
||||||
|
|
||||||
|
--enable markTypes
|
||||||
|
|
||||||
|
--enable isEmpty
|
51
ios/.swiftlint.yml
Normal file
51
ios/.swiftlint.yml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
disabled_rules:
|
||||||
|
- identifier_name
|
||||||
|
- trailing_comma
|
||||||
|
- todo
|
||||||
|
- type_body_length
|
||||||
|
- file_length
|
||||||
|
- cyclomatic_complexity
|
||||||
|
- function_body_length
|
||||||
|
opt_in_rules:
|
||||||
|
- contains_over_filter_count
|
||||||
|
- contains_over_filter_is_empty
|
||||||
|
- contains_over_first_not_nil
|
||||||
|
- contains_over_range_nil_comparison
|
||||||
|
- empty_collection_literal
|
||||||
|
- empty_count
|
||||||
|
- empty_string
|
||||||
|
- first_where
|
||||||
|
- flatmap_over_map_reduce
|
||||||
|
- last_where
|
||||||
|
- reduce_boolean
|
||||||
|
- reduce_into
|
||||||
|
- yoda_condition
|
||||||
|
- vertical_whitespace_opening_braces
|
||||||
|
- vertical_whitespace_closing_braces
|
||||||
|
- vertical_parameter_alignment_on_call
|
||||||
|
- untyped_error_in_catch
|
||||||
|
- unowned_variable_capture
|
||||||
|
- unavailable_function
|
||||||
|
- switch_case_on_newline
|
||||||
|
- static_operator
|
||||||
|
- strict_fileprivate
|
||||||
|
- sorted_imports
|
||||||
|
- sorted_first_last
|
||||||
|
- required_enum_case
|
||||||
|
- redundant_type_annotation
|
||||||
|
- redundant_nil_coalescing
|
||||||
|
- attributes
|
||||||
|
- convenience_type
|
||||||
|
analyzer_rules:
|
||||||
|
- explicit_self
|
||||||
|
- unused_declaration
|
||||||
|
- unused_import
|
||||||
|
|
||||||
|
excluded: # paths to ignore during linting. Takes precedence over `included`.
|
||||||
|
- Pods
|
||||||
|
|
||||||
|
# Adjust rule numbers
|
||||||
|
line_length: 160
|
||||||
|
|
||||||
|
# reporter type (xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging)
|
||||||
|
reporter: "xcode"
|
@ -23,6 +23,7 @@
|
|||||||
"@types/react": "~18.0.0",
|
"@types/react": "~18.0.0",
|
||||||
"@types/react-native": "0.72.3",
|
"@types/react-native": "0.72.3",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
||||||
|
"@jamesacarr/eslint-formatter-github-actions": "^0.2.0",
|
||||||
"eslint": "^8.19.0",
|
"eslint": "^8.19.0",
|
||||||
"eslint-plugin-jest": "^27.4.2",
|
"eslint-plugin-jest": "^27.4.2",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
@ -45,7 +46,9 @@
|
|||||||
"xbasic": "yarn --cwd examples/basic",
|
"xbasic": "yarn --cwd examples/basic",
|
||||||
"docs": "yarn --cwd docs build",
|
"docs": "yarn --cwd docs build",
|
||||||
"release": "release-it",
|
"release": "release-it",
|
||||||
"test": "echo no test available"
|
"test": "echo no test available",
|
||||||
|
"check-ios": "scripts/swift-format.sh && scripts/swift-lint.sh && scripts/clang-format.sh",
|
||||||
|
"check-android": "scripts/kotlin-lint.sh"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"android",
|
"android",
|
||||||
|
26
scripts/bootstrap.js
vendored
Normal file
26
scripts/bootstrap.js
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const child_process = require('child_process');
|
||||||
|
|
||||||
|
const root = path.resolve(__dirname, '..');
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
const options = {
|
||||||
|
cwd: process.cwd(),
|
||||||
|
env: process.env,
|
||||||
|
stdio: 'inherit',
|
||||||
|
encoding: 'utf-8',
|
||||||
|
};
|
||||||
|
|
||||||
|
let result;
|
||||||
|
|
||||||
|
if (process.cwd() !== root || args.length) {
|
||||||
|
// We're not in the root of the project, or additional arguments were passed
|
||||||
|
// In this case, forward the command to `yarn`
|
||||||
|
result = child_process.spawnSync('yarn', args, options);
|
||||||
|
} else {
|
||||||
|
// If `yarn` is run without arguments, perform bootstrap
|
||||||
|
result = child_process.spawnSync('yarn', ['bootstrap'], options);
|
||||||
|
}
|
||||||
|
|
||||||
|
process.exitCode = result.status;
|
9
scripts/clang-format.sh
Executable file
9
scripts/clang-format.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if which clang-format >/dev/null; then
|
||||||
|
find ios -type f \( -name "*.h" -o -name "*.cpp" -o -name "*.m" -o -name "*.mm" \) -print0 | while read -d $'\0' file; do
|
||||||
|
clang-format -style=file:./ios/.clang-format -i "$file"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "[ERROR]: clang-format is not installed - Install with 'brew install clang-format' (or manually from https://clang.llvm.org/docs/ClangFormat.html)"
|
||||||
|
fi
|
7
scripts/kotlin-lint.sh
Executable file
7
scripts/kotlin-lint.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if which ktlint >/dev/null; then
|
||||||
|
cd android && ktlint --color --relative --editorconfig=./.editorconfig -F ./**/*.kt*
|
||||||
|
else
|
||||||
|
echo "[ERROR]: KTLint is not installed - Install with 'brew install ktlint' (or manually from https://github.com/pinterest/ktlint)"
|
||||||
|
fi
|
7
scripts/swift-format.sh
Executable file
7
scripts/swift-format.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if which swiftformat >/dev/null; then
|
||||||
|
cd ios && swiftformat --quiet .
|
||||||
|
else
|
||||||
|
echo "[ERROR]: SwiftFormat is not installed -Install with 'brew install swiftformat' (or manually from https://github.com/nicklockwood/SwiftFormat)"
|
||||||
|
fi
|
7
scripts/swift-lint.sh
Executable file
7
scripts/swift-lint.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if which swiftlint >/dev/null; then
|
||||||
|
cd ios && swiftlint --quiet --fix && swiftlint --quiet
|
||||||
|
else
|
||||||
|
echo "[ERROR]: SwiftLint is not installed - Install with 'brew install swiftlint' (or manually from https://github.com/realm/SwiftLint)"
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user