snakommit 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +104 -0
- data/CHANGELOG.md +55 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +81 -0
- data/LICENSE +21 -0
- data/README.md +275 -0
- data/Rakefile +58 -0
- data/bin/sk +9 -0
- data/bin/snakommit +10 -0
- data/lib/snakommit/cli.rb +371 -0
- data/lib/snakommit/config.rb +154 -0
- data/lib/snakommit/git.rb +212 -0
- data/lib/snakommit/hooks.rb +258 -0
- data/lib/snakommit/performance.rb +328 -0
- data/lib/snakommit/prompt.rb +472 -0
- data/lib/snakommit/templates.rb +146 -0
- data/lib/snakommit/version.rb +5 -0
- data/lib/snakommit.rb +35 -0
- data/snakommit.gemspec +38 -0
- metadata +194 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0fa7760fe40ddf90aac4e7c28b71eb1935ab5f1b9f704f990cc377a4294b724b
|
4
|
+
data.tar.gz: 2f5835b7d423667bf56fee1c2df02091d7cf9502ac7b80910658c93990d6043f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6bf5b5878c2871fa3df4837921387a8fceadd542919c40e2b449d83da83f2aded6ef5b804f7ea32878c23028123e16796bcb4a81c6bff273410a67c92343165c
|
7
|
+
data.tar.gz: 6f32299d57207644a3c9100146e1fa0066c1c82b1bfe2065b7d332d312ba41f1702e1d7d2682aafb6dde141aa1434c6e49ca04afe074bad2b4d0f8e076fd0607
|
data/.gitignore
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig
|
2
|
+
# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,go
|
3
|
+
# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,macos,go
|
4
|
+
|
5
|
+
### Go ###
|
6
|
+
# If you prefer the allow list template instead of the deny list, see community template:
|
7
|
+
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
8
|
+
#
|
9
|
+
# Binaries for programs and plugins
|
10
|
+
*.exe
|
11
|
+
*.exe~
|
12
|
+
*.dll
|
13
|
+
*.so
|
14
|
+
*.dylib
|
15
|
+
|
16
|
+
# Test binary, built with `go test -c`
|
17
|
+
*.test
|
18
|
+
|
19
|
+
# Output of the go coverage tool, specifically when used with LiteIDE
|
20
|
+
*.out
|
21
|
+
|
22
|
+
# Dependency directories (remove the comment below to include it)
|
23
|
+
# vendor/
|
24
|
+
|
25
|
+
# Go workspace file
|
26
|
+
go.work
|
27
|
+
|
28
|
+
### macOS ###
|
29
|
+
# General
|
30
|
+
.DS_Store
|
31
|
+
.AppleDouble
|
32
|
+
.LSOverride
|
33
|
+
|
34
|
+
# Icon must end with two \r
|
35
|
+
Icon
|
36
|
+
|
37
|
+
|
38
|
+
# Thumbnails
|
39
|
+
._*
|
40
|
+
|
41
|
+
# Files that might appear in the root of a volume
|
42
|
+
.DocumentRevisions-V100
|
43
|
+
.fseventsd
|
44
|
+
.Spotlight-V100
|
45
|
+
.TemporaryItems
|
46
|
+
.Trashes
|
47
|
+
.VolumeIcon.icns
|
48
|
+
.com.apple.timemachine.donotpresent
|
49
|
+
|
50
|
+
# Directories potentially created on remote AFP share
|
51
|
+
.AppleDB
|
52
|
+
.AppleDesktop
|
53
|
+
Network Trash Folder
|
54
|
+
Temporary Items
|
55
|
+
.apdisk
|
56
|
+
|
57
|
+
### macOS Patch ###
|
58
|
+
# iCloud generated files
|
59
|
+
*.icloud
|
60
|
+
|
61
|
+
### VisualStudioCode ###
|
62
|
+
.vscode/*
|
63
|
+
!.vscode/settings.json
|
64
|
+
!.vscode/tasks.json
|
65
|
+
!.vscode/launch.json
|
66
|
+
!.vscode/extensions.json
|
67
|
+
!.vscode/*.code-snippets
|
68
|
+
|
69
|
+
# Local History for Visual Studio Code
|
70
|
+
.history/
|
71
|
+
|
72
|
+
# Built Visual Studio Code Extensions
|
73
|
+
*.vsix
|
74
|
+
|
75
|
+
### VisualStudioCode Patch ###
|
76
|
+
# Ignore all local history of files
|
77
|
+
.history
|
78
|
+
.ionide
|
79
|
+
|
80
|
+
# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,go
|
81
|
+
|
82
|
+
# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option)
|
83
|
+
|
84
|
+
*.gem
|
85
|
+
|
86
|
+
# Gem builds
|
87
|
+
*.gem
|
88
|
+
|
89
|
+
# RubyGems credentials
|
90
|
+
/.rubygems
|
91
|
+
/.gem/credentials
|
92
|
+
|
93
|
+
# Test coverage
|
94
|
+
/coverage/
|
95
|
+
/.nyc_output/
|
96
|
+
|
97
|
+
# IDE files
|
98
|
+
.idea/
|
99
|
+
.vscode/
|
100
|
+
*.sublime-project
|
101
|
+
*.sublime-workspace
|
102
|
+
|
103
|
+
# Ruby debugger
|
104
|
+
.byebug_history
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [Unreleased]
|
9
|
+
### Added
|
10
|
+
- CI/CD pipeline for automated testing and releases
|
11
|
+
- Automated RubyGems publishing
|
12
|
+
|
13
|
+
## [0.1.1] - 2023-04-01
|
14
|
+
### Added
|
15
|
+
- Support for emoji in commit messages with toggle capability
|
16
|
+
- Performance optimization features including caching and batch processing
|
17
|
+
- Enhanced Git hooks integration with automatic install/uninstall
|
18
|
+
- Custom emoji configuration with YAML file support
|
19
|
+
- Added comprehensive credits and acknowledgements
|
20
|
+
- Added `sk` command as a shorter alias for `snakommit`
|
21
|
+
- File selection persistence between sessions
|
22
|
+
- Quick emoji toggle with `sk emoji on|off` command
|
23
|
+
- Self-update functionality with `sk update` command
|
24
|
+
|
25
|
+
## [0.1.0] - 2025-03-09
|
26
|
+
### Added
|
27
|
+
- Initial release
|
28
|
+
- Interactive CLI for creating conventional commit messages
|
29
|
+
- Automatic Git repository detection
|
30
|
+
- File staging assistance (`git add` functionality)
|
31
|
+
- Customizable commit types and scopes
|
32
|
+
- Breaking change detection
|
33
|
+
- Issue reference linking
|
34
|
+
|
35
|
+
## 🚀 Roadmap
|
36
|
+
|
37
|
+
Future releases will focus on:
|
38
|
+
|
39
|
+
### Performance Optimizations
|
40
|
+
- [ ] Parallel processing for large repositories
|
41
|
+
- [ ] Smart caching of Git operations
|
42
|
+
- [ ] Optimized file status detection
|
43
|
+
- [ ] Performance profiling and monitoring
|
44
|
+
|
45
|
+
### Additional Commit Message Templates
|
46
|
+
- [ ] Support for more conventional formats
|
47
|
+
- [ ] Custom template creation UI
|
48
|
+
- [ ] Import/export of templates
|
49
|
+
- [ ] Enhanced validation rules
|
50
|
+
|
51
|
+
### Enhanced Git Hooks Integration
|
52
|
+
- [ ] Pre-push hook integration
|
53
|
+
- [ ] Custom hook scripting
|
54
|
+
- [ ] CI/CD system integration
|
55
|
+
- [ ] Repository-specific configurations
|
data/Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'tty-prompt', '~> 0.23.1' # For interactive prompts
|
4
|
+
gem 'tty-spinner', '~> 0.9.3' # For loading spinners
|
5
|
+
gem 'tty-color', '~> 0.6.0' # For colorized output
|
6
|
+
gem 'tty-screen', '~> 0.8.1' # For screen dimensions
|
7
|
+
gem 'pastel', '~> 0.8.0' # For minimal terminal colors
|
8
|
+
gem 'git', '~> 1.12' # For Git integration
|
9
|
+
|
10
|
+
group :development, :test do
|
11
|
+
gem 'rake', '~> 13.0' # For running tasks
|
12
|
+
gem 'minitest', '~> 5.16' # For testing
|
13
|
+
gem 'rspec', '~> 3.10' # For testing
|
14
|
+
gem 'rubocop', '~> 1.25.1' # For code linting
|
15
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
addressable (2.8.7)
|
5
|
+
public_suffix (>= 2.0.2, < 7.0)
|
6
|
+
ast (2.4.2)
|
7
|
+
diff-lcs (1.6.0)
|
8
|
+
git (1.19.1)
|
9
|
+
addressable (~> 2.8)
|
10
|
+
rchardet (~> 1.8)
|
11
|
+
minitest (5.25.4)
|
12
|
+
parallel (1.24.0)
|
13
|
+
parser (3.3.7.1)
|
14
|
+
ast (~> 2.4.1)
|
15
|
+
racc
|
16
|
+
pastel (0.8.0)
|
17
|
+
tty-color (~> 0.5)
|
18
|
+
public_suffix (5.1.1)
|
19
|
+
racc (1.8.1)
|
20
|
+
rainbow (3.1.1)
|
21
|
+
rake (13.2.1)
|
22
|
+
rchardet (1.8.0)
|
23
|
+
regexp_parser (2.10.0)
|
24
|
+
rexml (3.4.1)
|
25
|
+
rspec (3.13.0)
|
26
|
+
rspec-core (~> 3.13.0)
|
27
|
+
rspec-expectations (~> 3.13.0)
|
28
|
+
rspec-mocks (~> 3.13.0)
|
29
|
+
rspec-core (3.13.3)
|
30
|
+
rspec-support (~> 3.13.0)
|
31
|
+
rspec-expectations (3.13.3)
|
32
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
33
|
+
rspec-support (~> 3.13.0)
|
34
|
+
rspec-mocks (3.13.2)
|
35
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
36
|
+
rspec-support (~> 3.13.0)
|
37
|
+
rspec-support (3.13.2)
|
38
|
+
rubocop (1.25.1)
|
39
|
+
parallel (~> 1.10)
|
40
|
+
parser (>= 3.1.0.0)
|
41
|
+
rainbow (>= 2.2.2, < 4.0)
|
42
|
+
regexp_parser (>= 1.8, < 3.0)
|
43
|
+
rexml
|
44
|
+
rubocop-ast (>= 1.15.1, < 2.0)
|
45
|
+
ruby-progressbar (~> 1.7)
|
46
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
47
|
+
rubocop-ast (1.30.0)
|
48
|
+
parser (>= 3.2.1.0)
|
49
|
+
ruby-progressbar (1.13.0)
|
50
|
+
tty-color (0.6.0)
|
51
|
+
tty-cursor (0.7.1)
|
52
|
+
tty-prompt (0.23.1)
|
53
|
+
pastel (~> 0.8)
|
54
|
+
tty-reader (~> 0.8)
|
55
|
+
tty-reader (0.9.0)
|
56
|
+
tty-cursor (~> 0.7)
|
57
|
+
tty-screen (~> 0.8)
|
58
|
+
wisper (~> 2.0)
|
59
|
+
tty-screen (0.8.2)
|
60
|
+
tty-spinner (0.9.3)
|
61
|
+
tty-cursor (~> 0.7)
|
62
|
+
unicode-display_width (2.6.0)
|
63
|
+
wisper (2.0.1)
|
64
|
+
|
65
|
+
PLATFORMS
|
66
|
+
ruby
|
67
|
+
|
68
|
+
DEPENDENCIES
|
69
|
+
git (~> 1.12)
|
70
|
+
minitest (~> 5.16)
|
71
|
+
pastel (~> 0.8.0)
|
72
|
+
rake (~> 13.0)
|
73
|
+
rspec (~> 3.10)
|
74
|
+
rubocop (~> 1.25.1)
|
75
|
+
tty-color (~> 0.6.0)
|
76
|
+
tty-prompt (~> 0.23.1)
|
77
|
+
tty-screen (~> 0.8.1)
|
78
|
+
tty-spinner (~> 0.9.3)
|
79
|
+
|
80
|
+
BUNDLED WITH
|
81
|
+
1.17.2
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 Antonia_LP
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,275 @@
|
|
1
|
+
# Snakommit
|
2
|
+
|
3
|
+
Snakommit is a high-performance, interactive commit manager tool similar to Commitizen. It helps teams maintain consistent commit message formats by guiding developers through the process of creating standardized commit messages.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
- Interactive CLI for creating conventional commit messages
|
8
|
+
- Automatic Git repository detection
|
9
|
+
- File staging assistance (`git add` functionality)
|
10
|
+
- Customizable commit types and scopes
|
11
|
+
- Breaking change detection
|
12
|
+
- Issue reference linking
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
### Prerequisites
|
17
|
+
|
18
|
+
- Ruby >= 2.5
|
19
|
+
- Git
|
20
|
+
|
21
|
+
### Install from source
|
22
|
+
|
23
|
+
You have multiple options to install Snakommit:
|
24
|
+
|
25
|
+
#### Option 1: Install to /usr/local/bin (requires sudo)
|
26
|
+
|
27
|
+
```bash
|
28
|
+
# Clone the repository
|
29
|
+
git clone git@github.com:antonia-pl/snakommit.git
|
30
|
+
cd snakommit
|
31
|
+
|
32
|
+
# Install dependencies
|
33
|
+
bundle install
|
34
|
+
|
35
|
+
# Create a symlink to use the tool globally
|
36
|
+
sudo ln -s "$(pwd)/bin/snakommit" /usr/local/bin/snakommit
|
37
|
+
```
|
38
|
+
|
39
|
+
#### Option 2: Install to your home directory (no sudo required)
|
40
|
+
|
41
|
+
```bash
|
42
|
+
# Clone the repository
|
43
|
+
git clone git@github.com:antonia-pl/snakommit.git
|
44
|
+
cd snakommit
|
45
|
+
|
46
|
+
# Install dependencies
|
47
|
+
bundle install
|
48
|
+
|
49
|
+
# Create a bin directory in your home folder (if it doesn't exist)
|
50
|
+
mkdir -p ~/bin
|
51
|
+
|
52
|
+
# Create a symlink in your home bin directory
|
53
|
+
ln -s "$(pwd)/bin/snakommit" ~/bin/snakommit
|
54
|
+
|
55
|
+
# Add this line to your ~/.zshrc or ~/.bash_profile and restart your terminal
|
56
|
+
# export PATH="$HOME/bin:$PATH"
|
57
|
+
```
|
58
|
+
|
59
|
+
#### Option 3: Run directly from the repository
|
60
|
+
|
61
|
+
```bash
|
62
|
+
# Clone the repository
|
63
|
+
git clone git@github.com:antonia-pl/snakommit.git
|
64
|
+
cd snakommit
|
65
|
+
|
66
|
+
# Install dependencies
|
67
|
+
bundle install
|
68
|
+
|
69
|
+
# Run snakommit directly
|
70
|
+
ruby -Ilib bin/snakommit
|
71
|
+
```
|
72
|
+
|
73
|
+
### Install via Homebrew (Coming soon)
|
74
|
+
|
75
|
+
```bash
|
76
|
+
/!\ - (coming soon) - TODO
|
77
|
+
```
|
78
|
+
|
79
|
+
## Usage
|
80
|
+
|
81
|
+
Simply run `snakommit` (or its shorter alias `sk`) in your Git repository:
|
82
|
+
|
83
|
+
```bash
|
84
|
+
snakommit # or 'sk' for short
|
85
|
+
```
|
86
|
+
|
87
|
+
This will launch the interactive commit flow that will:
|
88
|
+
|
89
|
+
1. Check if you're in a Git repository
|
90
|
+
2. Detect changes in your working directory
|
91
|
+
3. Help you stage files if needed
|
92
|
+
4. Guide you through creating a standardized commit message
|
93
|
+
5. Commit your changes
|
94
|
+
|
95
|
+
### Commands
|
96
|
+
|
97
|
+
- `snakommit` or `sk` - Run the default commit flow
|
98
|
+
- `snakommit emoji [on|off]` or `sk emoji [on|off]` - Quick toggle for emoji in commit messages
|
99
|
+
- `snakommit update` or `sk update` - Check for and install the latest version
|
100
|
+
- `snakommit help` or `sk help` - Show help information
|
101
|
+
- `snakommit version` or `sk version` - Show version information
|
102
|
+
- `snakommit templates` or `sk templates` - Manage emoji for commit types
|
103
|
+
- `snakommit hooks` or `sk hooks` - Manage Git hooks integration
|
104
|
+
|
105
|
+
## Configuration
|
106
|
+
|
107
|
+
Snakommit uses a YAML configuration file located at `~/.snakommit.yml`. A default configuration is created on first run, which you can customize to fit your project needs.
|
108
|
+
|
109
|
+
Example configuration:
|
110
|
+
|
111
|
+
```yaml
|
112
|
+
types:
|
113
|
+
- name: feat
|
114
|
+
description: A new feature
|
115
|
+
- name: fix
|
116
|
+
description: A bug fix
|
117
|
+
# ... more types
|
118
|
+
scopes:
|
119
|
+
- ui
|
120
|
+
- api
|
121
|
+
- database
|
122
|
+
# ... custom scopes for your project
|
123
|
+
max_subject_length: 100
|
124
|
+
max_body_line_length: 72
|
125
|
+
```
|
126
|
+
|
127
|
+
## Troubleshooting
|
128
|
+
|
129
|
+
### Command not found after installation
|
130
|
+
|
131
|
+
If you encounter a "command not found" error after installation:
|
132
|
+
|
133
|
+
1. Make sure the symlink was created successfully
|
134
|
+
2. If you installed to ~/bin, ensure your PATH includes this directory
|
135
|
+
3. Try running with the full path to the executable
|
136
|
+
|
137
|
+
### Permission issues
|
138
|
+
|
139
|
+
If you encounter permission issues during installation:
|
140
|
+
|
141
|
+
1. Try the alternative installation methods that don't require sudo
|
142
|
+
2. Ensure your Ruby environment has the correct permissions
|
143
|
+
3. Check that the executable bit is set on the bin/snakommit file:
|
144
|
+
|
145
|
+
```bash
|
146
|
+
chmod +x bin/snakommit
|
147
|
+
```
|
148
|
+
|
149
|
+
## Development
|
150
|
+
|
151
|
+
### Testing
|
152
|
+
|
153
|
+
Snakommit has a comprehensive test suite that covers its functionality. The test suite is built using Minitest and includes unit tests, integration tests, and performance tests.
|
154
|
+
|
155
|
+
#### Running Tests
|
156
|
+
|
157
|
+
Run all the tests:
|
158
|
+
|
159
|
+
```bash
|
160
|
+
bundle exec rake test
|
161
|
+
```
|
162
|
+
|
163
|
+
Run specific types of tests:
|
164
|
+
|
165
|
+
```bash
|
166
|
+
# Run only unit tests (fast)
|
167
|
+
bundle exec rake test_unit
|
168
|
+
|
169
|
+
# Run only performance tests
|
170
|
+
bundle exec rake test_performance
|
171
|
+
|
172
|
+
# Run tests for a specific component
|
173
|
+
bundle exec rake test_git
|
174
|
+
bundle exec rake test_config
|
175
|
+
bundle exec rake test_templates
|
176
|
+
bundle exec rake test_hooks
|
177
|
+
|
178
|
+
# Run tests with verbose output
|
179
|
+
bundle exec rake test_verbose
|
180
|
+
|
181
|
+
# Run both tests and linting
|
182
|
+
bundle exec rake
|
183
|
+
```
|
184
|
+
|
185
|
+
#### Writing Tests
|
186
|
+
|
187
|
+
When adding new features or fixing bugs, please add or update the corresponding tests. The test files are located in the `test/` directory and follow the pattern `test/component_test.rb`.
|
188
|
+
|
189
|
+
Each test file contains a class that inherits from `Minitest::Test` and includes test methods that start with `test_`.
|
190
|
+
|
191
|
+
For more detailed information about testing Snakommit, see [TESTING.md](TESTING.md).
|
192
|
+
|
193
|
+
### CI/CD
|
194
|
+
|
195
|
+
Snakommit uses GitHub Actions for continuous integration and deployment:
|
196
|
+
|
197
|
+
- **Automated testing** on multiple Ruby versions for all pushes and pull requests
|
198
|
+
- **Automated releases** to RubyGems when a new version is tagged
|
199
|
+
- **Automated version bumping** via workflow dispatch
|
200
|
+
|
201
|
+
To create a new release:
|
202
|
+
|
203
|
+
1. Go to the GitHub Actions tab
|
204
|
+
2. Select the "Release" workflow
|
205
|
+
3. Click "Run workflow"
|
206
|
+
4. Choose the type of version bump (patch, minor, or major)
|
207
|
+
|
208
|
+
This will automatically:
|
209
|
+
- Run all tests
|
210
|
+
- Bump the version in the codebase
|
211
|
+
- Update the CHANGELOG
|
212
|
+
- Create a Git tag and GitHub release
|
213
|
+
- Publish to RubyGems.org
|
214
|
+
|
215
|
+
## License
|
216
|
+
|
217
|
+
MIT
|
218
|
+
|
219
|
+
## 📝 Credits & Inspiration
|
220
|
+
|
221
|
+
Snakommit was inspired by and builds upon these fantastic projects:
|
222
|
+
|
223
|
+
### Similar Tools
|
224
|
+
- [Commitizen](https://github.com/commitizen/cz-cli) - The original concept of CLI interface for conventional commits
|
225
|
+
- [Conventional Commits](https://www.conventionalcommits.org/) - The specification for commit messages
|
226
|
+
- [Gitmoji](https://gitmoji.dev/) - For emoji integration in commit messages
|
227
|
+
|
228
|
+
### Other Inspiration
|
229
|
+
- [Semantic Release](https://github.com/semantic-release/semantic-release) - For commit message structure and formatting
|
230
|
+
- [AngularJS Commit Guidelines](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits) - The foundation of conventional commits
|
231
|
+
|
232
|
+
## Updating
|
233
|
+
|
234
|
+
To update Snakommit to the latest version, simply run:
|
235
|
+
|
236
|
+
```bash
|
237
|
+
sk update
|
238
|
+
```
|
239
|
+
|
240
|
+
This will check if a newer version is available on RubyGems.org and install it if found. If you want to force a reinstall of the latest version, you can use:
|
241
|
+
|
242
|
+
```bash
|
243
|
+
sk update --force
|
244
|
+
```
|
245
|
+
|
246
|
+
System-wide installations may require administrator privileges, which the tool will prompt for if needed.
|
247
|
+
|
248
|
+
## Performance
|
249
|
+
|
250
|
+
Snakommit has been optimized to offer the best possible performance, even on large projects. Here are the key improvements integrated:
|
251
|
+
|
252
|
+
### Intelligent Caching
|
253
|
+
|
254
|
+
- Expensive Git operations (like getting staged/unstaged files) are cached with a short TTL to optimize performance
|
255
|
+
- Commit type formatting results with emojis are cached to avoid unnecessary recalculations
|
256
|
+
- Configuration is cached with invalidation based on file modification date
|
257
|
+
|
258
|
+
### Batch Processing
|
259
|
+
|
260
|
+
- Batch processing is used for file operations to reduce system calls
|
261
|
+
- Automatic parallelization options for large operations when the `parallel` gem is available
|
262
|
+
|
263
|
+
### Performance Monitoring
|
264
|
+
|
265
|
+
- An integrated monitoring system measures the performance of critical operations
|
266
|
+
- In DEBUG mode (`SNAKOMMIT_DEBUG=1`), detailed performance information is displayed
|
267
|
+
- Benchmarking and profiling utilities are available for developers
|
268
|
+
|
269
|
+
### Optimized Memory Management
|
270
|
+
|
271
|
+
- Efficient use of system resources
|
272
|
+
- Proactive cache cleaning to reduce memory footprint
|
273
|
+
- Command pooling to minimize process creation overhead
|
274
|
+
|
275
|
+
These optimizations allow Snakommit to remain fast and responsive even on large repositories with many files.
|
data/Rakefile
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rake/testtask"
|
3
|
+
|
4
|
+
# Standard test task
|
5
|
+
desc "Run tests"
|
6
|
+
Rake::TestTask.new(:test) do |t|
|
7
|
+
t.libs << "test"
|
8
|
+
t.libs << "lib"
|
9
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
10
|
+
end
|
11
|
+
|
12
|
+
# Verbose test task
|
13
|
+
desc "Run tests with verbose output"
|
14
|
+
Rake::TestTask.new(:test_verbose) do |t|
|
15
|
+
t.libs << "test"
|
16
|
+
t.libs << "lib"
|
17
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
18
|
+
t.verbose = true
|
19
|
+
t.warning = true
|
20
|
+
end
|
21
|
+
|
22
|
+
# Performance tests only
|
23
|
+
desc "Run only performance tests"
|
24
|
+
Rake::TestTask.new(:test_performance) do |t|
|
25
|
+
t.libs << "test"
|
26
|
+
t.libs << "lib"
|
27
|
+
t.test_files = FileList["test/performance_test.rb"]
|
28
|
+
t.verbose = true
|
29
|
+
end
|
30
|
+
|
31
|
+
# Unit tests only (excluding performance tests)
|
32
|
+
desc "Run unit tests (excluding performance tests)"
|
33
|
+
Rake::TestTask.new(:test_unit) do |t|
|
34
|
+
t.libs << "test"
|
35
|
+
t.libs << "lib"
|
36
|
+
t.test_files = FileList["test/**/*_test.rb"] - FileList["test/performance_test.rb"]
|
37
|
+
end
|
38
|
+
|
39
|
+
# Individual component tests
|
40
|
+
%w[config git templates hooks].each do |component|
|
41
|
+
desc "Run #{component} tests"
|
42
|
+
Rake::TestTask.new("test_#{component}") do |t|
|
43
|
+
t.libs << "test"
|
44
|
+
t.libs << "lib"
|
45
|
+
t.test_files = FileList["test/#{component}_test.rb"]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
begin
|
50
|
+
require "rubocop/rake_task"
|
51
|
+
RuboCop::RakeTask.new
|
52
|
+
task default: %i[test rubocop]
|
53
|
+
rescue LoadError
|
54
|
+
task default: %i[test]
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Run all tests and checks"
|
58
|
+
task :ci => [:test_unit, :test_performance, :rubocop]
|
data/bin/sk
ADDED
data/bin/snakommit
ADDED