diff --git a/.githooks/prepare-commit-msg b/.githooks/prepare-commit-msg new file mode 100755 index 00000000..dcac0b12 --- /dev/null +++ b/.githooks/prepare-commit-msg @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + +import sys, re, os +from subprocess import check_output +from sys import getdefaultencoding + +getdefaultencoding() # utf-8 + +valid_commit_style = '^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style)(\(\S+\))?\!?: .+' +merge_commit_style = '^(m|M)erge .+' + +success_title = 'SUCCESS' +success_color = '92m' + +error_title = 'ERROR' +error_message = 'Incorrect commit message style!\nThe commit pattern:' +error_commit_pattern = ' type(scope): message | type: message \n' +error_color = '91m' + +breaking_changes_message = 'If commit include Breaking changes use ! after type or scope:' +colored_breaking_changes_message = 'If commit include \033[91mBreaking changes\033[00m use \033[91m!\033[00m after type or scope:' +breaking_changes_commit_pattern = ' type(scope)!: message | type!: message \n' + +available_types_message = 'Available commit types:' +available_commit_types = ['build: Changes that affect the build system or external dependencies', + 'ci: Changes to our CI configuration files and scripts', + 'docs: Documentation only changes', + 'feat: A new feature. Correlates with MINOR in SemVer', + 'fix: A bug fix. Correlates with PATCH in SemVer', + 'perf: A code change that improves performance', + 'refactor: A code change that neither fixes', + 'revert: A revert to previous commit', + 'style: Changes that do not affect the meaning of the code (white-space, formatting, etc)'] + +is_GUI_client = False + +def print_result_header(result_title, color): + if not is_GUI_client: + print("[\033[96mcommit lint\033[00m] [\033[{}{}\033[00m]\n".format(color, result_title)) + +def print_pattern(pattern): + if is_GUI_client: + print(pattern) + else: + print("\033[96m{}\033[00m".format(pattern)) + +def print_error_message(): + print_result_header(error_title, error_color) + + print(error_message) + print_pattern(error_commit_pattern) + + if is_GUI_client: + print(breaking_changes_message) + else: + print(colored_breaking_changes_message) + + print_pattern(breaking_changes_commit_pattern) + print_available_commit_types() + +def print_available_commit_types(): + print(available_types_message) + + for commit_type in available_commit_types: + print(" - %s" %commit_type) + +def write_commit_message(fh, commit_msg): + fh.seek(0, 0) + fh.write(commit_msg) + +def lint_commit_message(fh, commit_msg): + is_merge_commit = re.findall(merge_commit_style, commit_msg) + is_valid_commit = re.findall(valid_commit_style, commit_msg) + + if is_valid_commit or is_merge_commit: + print_result_header(success_title, success_color) + write_commit_message(fh, commit_msg) + sys.exit(os.EX_OK) + else: + print_error_message() + sys.exit(os.EX_DATAERR) + +def run_script(): + commit_msg_filepath = sys.argv[1] + + with open(commit_msg_filepath, 'r+') as fh: + commit_msg = fh.read() + lint_commit_message(fh, commit_msg) + +try: + sys.stdin = open("/dev/tty", "r") + is_GUI_client = False +except: + is_GUI_client = True + +run_script() \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 482ab47e..a936054e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ - **Update**: code with new swiftlint rules. - **Update**: RxSwift to 6.0.0. +### 0.13.1 +- **Fix**: LeadKit.podspec file. + +### 0.13.0 +- **Add**: Githook `prepare-commit-msg` to check commit's style. +- **Add**: Setup script. + ### 0.12.0 - **Add**: StatefulButton & RoundedStatefulButton to TIUIElements. - **Add**: added CACornerMask rounding extension to TIUIElements. diff --git a/LeadKit.podspec b/LeadKit.podspec index eb1959a9..2fea1c32 100644 --- a/LeadKit.podspec +++ b/LeadKit.podspec @@ -68,7 +68,8 @@ Pod::Spec.new do |s| "Sources/Structures/DrawingOperations/CALayerDrawingOperation.swift", "Sources/Structures/DrawingOperations/RoundDrawingOperation.swift", "Sources/Structures/DrawingOperations/BorderDrawingOperation.swift", - "Sources/Structures/DataLoading/PaginationDataLoading/*" + "Sources/Structures/DataLoading/PaginationDataLoading/*", + "Sources/Extensions/UIInterfaceOrientation/*" ] ss.tvos.exclude_files = [ "Sources/Classes/Controllers/BaseConfigurableController.swift", @@ -101,7 +102,9 @@ Pod::Spec.new do |s| "Sources/Protocols/Views/SeparatorCell/*", "Sources/Protocols/TableKit/**/*", "Sources/Protocols/Controllers/SearchResultsViewController.swift", - "Sources/Structures/DataLoading/PaginationDataLoading/*" + "Sources/Structures/DataLoading/PaginationDataLoading/*", + "Sources/Extensions/UIInterfaceOrientation/*", + "Sources/Classes/Controllers/BaseOrientationController.swift" ] ss.dependency "RxSwift", '~> 6.0.0' diff --git a/README.md b/README.md index 73a91c28..89b1404e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # LeadKit -LeadKit is the iOS framework with a bunch of tools for rapid app development. +LeadKit is the iOS framework with a bunch of tools for rapid app development. ## Additional + This repository contains the following additional frameworks: - [TIUIKitCore](TIUIKitCore) - core ui elements and protocols from LeadKit. - [TITransitions](TITransitions) - set of custom transitions to present controller. @@ -10,6 +11,14 @@ This repository contains the following additional frameworks: - [TISwiftUtils](TISwiftUtils) - a bunch of useful helpers for development. - [TITableKitUtils](TITableKitUtils) - Set of helpers for TableKit classes. +## Contributing + +- Run following script in framework's folder: +``` +./setup +``` + +- Make sure the commit message codestyle is followed. More about [Semantic Commit Messages](docs/semantic-commit-messages.md). ## Installation @@ -29,4 +38,4 @@ source 'https://github.com/TouchInstinct/Podspecs.git' pod 'TISwiftUtils', 'x.y.z' pod 'TIFoundationUtils', 'x.y.z' # ... -``` +``` \ No newline at end of file diff --git a/docs/semantic-commit-messages.md b/docs/semantic-commit-messages.md new file mode 100644 index 00000000..05b41ed7 --- /dev/null +++ b/docs/semantic-commit-messages.md @@ -0,0 +1,42 @@ +# Semantic Commit Messages + +The repository has adopted the following style of commits: + `(): ` | `: ` + +--- + +If a commit contains *Breaking Changes*, use `!` to show it: + `()!: ` | `!: ` + +## Example + +```sh +feat: add Cocoapods support +^--^ ^------------^ +| | +| +-> Summary in present tense. +| ++-------> Commit type. +``` + +## Available commit types + +- `feat`: A new feature. Correlates with MINOR in SemVer +- `fix`: A bug fix. Correlates with PATCH in SemVer +- `build`: Changes that affect the build system or external dependencies +- `ci`: Changes to our CI configuration files and scripts +- `docs`: Documentation only changes +- `perf`: A code change which improves performance +- `refactor`: A code change that neither fixes +- `revert`: A revert to previous commit +- `style`: Changes that do not affect the meaning of the code (white-space, formatting, etc). + +## Changelog + +Each release's Changelog is made up of commits that are either feat, fix or contain Breaking Changes, so you should be naming things carefully. + +## References + +- https://www.conventionalcommits.org/ +- https://seesparkbox.com/foundry/semantic_commit_messages +- http://karma-runner.github.io/1.0/dev/git-commit-msg.html \ No newline at end of file diff --git a/setup b/setup new file mode 100755 index 00000000..97d7cd9d --- /dev/null +++ b/setup @@ -0,0 +1,7 @@ +# Find source dir +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +cd "$DIR" + +# Configure githooks folder path +git config core.hooksPath .githooks \ No newline at end of file