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 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
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # This is an alias for snakommit
5
+ require 'snakommit'
6
+
7
+ # Just forward all arguments to the snakommit CLI
8
+ cli = Snakommit::CLI.new
9
+ cli.run(ARGV)
data/bin/snakommit ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
6
+
7
+ require 'snakommit'
8
+
9
+ # Parse command line options and run the appropriate command
10
+ Snakommit::CLI.new.run(ARGV)