glyptodont 0.3.0 → 1.0.0
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 +4 -4
- data/.githooks/commit-msg +29 -0
- data/.githooks/pre-commit +13 -0
- data/.github/conventional-commits-since +1 -0
- data/.github/dependabot.yml +17 -0
- data/.github/workflows/dependabot-automerge.yml +30 -0
- data/.github/workflows/main.yml +72 -16
- data/.github/workflows/publish-gem.yml +42 -0
- data/.github/workflows/release-please.yml +28 -0
- data/.release-please-manifest.json +3 -0
- data/.rubocop.yml +5 -1
- data/.tool-versions +3 -1
- data/CHANGELOG.md +117 -22
- data/Gemfile +1 -1
- data/README.md +37 -52
- data/Rakefile +5 -0
- data/cliff.toml +62 -0
- data/docs/.nojekyll +0 -0
- data/docs/glyptodon.png +0 -0
- data/docs/index.html +272 -0
- data/docs/sitemap.xml +6 -0
- data/exe/glyptodont +1 -2
- data/glyptodont.gemspec +4 -3
- data/lib/glyptodont/checker.rb +2 -2
- data/lib/glyptodont/configuration.rb +2 -3
- data/lib/glyptodont/version.rb +1 -1
- data/lib/glyptodont.rb +2 -2
- data/release-please-config.json +12 -0
- data/script/bootstrap +13 -16
- data/script/check-commit-messages +34 -0
- data/script/console +9 -1
- data/script/install-hooks +15 -0
- data/script/setup +2 -0
- data/script/test +11 -6
- metadata +23 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b0bdb41b7c944725ff0cc501c8ee3b64d77fd8aa5cee211d1697ce43fe8547d1
|
|
4
|
+
data.tar.gz: 5d1a40a6f07b45b89487775ffad5d92ce3a84982ee19db732d13b8066e56ca68
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: efdfeb5ca64d4c3f41b6320b7d7de4df52d02cc5dd68bf223c036c769c8b8477240e2b57336de69cbdbe8878cda22d7b3dfe56b6fe826d143f2342d11a9deb38
|
|
7
|
+
data.tar.gz: 3672461a3f02c7572bae1289e4db373efde349a1d00ff34ee94cd142efbd1c8accdf3df4622e324395d70af9ee9b5136aba2d31e613f772664f7ca8b8f7812a9
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Validate conventional commit message format.
|
|
3
|
+
# See https://www.conventionalcommits.org/
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
msg_file="$1"
|
|
8
|
+
if [ ! -f "$msg_file" ]; then
|
|
9
|
+
echo "commit-msg: no message file" >&2
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
first_line=$(head -n 1 "$msg_file")
|
|
14
|
+
|
|
15
|
+
# Allow merge and revert commits
|
|
16
|
+
case "$first_line" in
|
|
17
|
+
Merge\ *) exit 0 ;;
|
|
18
|
+
Revert\ *) exit 0 ;;
|
|
19
|
+
esac
|
|
20
|
+
|
|
21
|
+
# Conventional: type(scope)?!?: description
|
|
22
|
+
# Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore
|
|
23
|
+
if echo "$first_line" | grep -qE '^(feat|fix|docs|style|refactor|perf|test|build|ci|chore)(\([a-zA-Z0-9_.-]+\))?!?: .+'; then
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
echo "commit-msg: commit message must follow Conventional Commits (e.g. feat: add X, fix: resolve Y)." >&2
|
|
28
|
+
echo " First line: $first_line" >&2
|
|
29
|
+
exit 1
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Run project checks before allowing a commit.
|
|
3
|
+
# Requires Mise and script/test (RuboCop + RSpec).
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
cd "$(git rev-parse --show-toplevel)"
|
|
8
|
+
|
|
9
|
+
if [ -f ".tool-versions" ] && command -v mise >/dev/null 2>&1; then
|
|
10
|
+
mise exec -- ./script/test
|
|
11
|
+
else
|
|
12
|
+
./script/test
|
|
13
|
+
fi
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ffd9343
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
2
|
+
|
|
3
|
+
version: 2
|
|
4
|
+
updates:
|
|
5
|
+
- package-ecosystem: "bundler"
|
|
6
|
+
directory: "/"
|
|
7
|
+
schedule:
|
|
8
|
+
interval: "weekly"
|
|
9
|
+
commit-message:
|
|
10
|
+
prefix: "deps"
|
|
11
|
+
|
|
12
|
+
- package-ecosystem: "github-actions"
|
|
13
|
+
directory: "/"
|
|
14
|
+
schedule:
|
|
15
|
+
interval: "weekly"
|
|
16
|
+
commit-message:
|
|
17
|
+
prefix: "ci"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Enable auto-merge on Dependabot PRs so GitHub merges them when required status checks pass.
|
|
2
|
+
# Configure "Require status checks to pass before merging" in branch protection for the default branch.
|
|
3
|
+
|
|
4
|
+
name: Dependabot automerge
|
|
5
|
+
|
|
6
|
+
on: pull_request
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
dependabot:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
19
|
+
steps:
|
|
20
|
+
- name: Dependabot metadata
|
|
21
|
+
id: metadata
|
|
22
|
+
uses: dependabot/fetch-metadata@v2
|
|
23
|
+
with:
|
|
24
|
+
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
25
|
+
|
|
26
|
+
- name: Enable auto-merge
|
|
27
|
+
run: gh pr merge --auto --merge "$PR_URL"
|
|
28
|
+
env:
|
|
29
|
+
PR_URL: ${{ github.event.pull_request.html_url }}
|
|
30
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
data/.github/workflows/main.yml
CHANGED
|
@@ -1,26 +1,82 @@
|
|
|
1
1
|
name: Ruby
|
|
2
2
|
|
|
3
|
-
on: [push,pull_request]
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
env:
|
|
6
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
4
7
|
|
|
5
8
|
jobs:
|
|
9
|
+
glyptodont:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- name: Checkout
|
|
13
|
+
uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Set up Ruby
|
|
16
|
+
uses: ruby/setup-ruby@v1
|
|
17
|
+
with:
|
|
18
|
+
ruby-version: "3.2"
|
|
19
|
+
bundler-cache: false
|
|
20
|
+
|
|
21
|
+
- name: Install Glyptodont
|
|
22
|
+
run: gem install glyptodont
|
|
23
|
+
|
|
24
|
+
- name: Check TODOs
|
|
25
|
+
run: glyptodont
|
|
26
|
+
|
|
27
|
+
commit-messages:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout
|
|
31
|
+
uses: actions/checkout@v6
|
|
32
|
+
with:
|
|
33
|
+
fetch-depth: 0
|
|
34
|
+
|
|
35
|
+
- name: Check commit messages
|
|
36
|
+
run: |
|
|
37
|
+
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
|
38
|
+
range="${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}"
|
|
39
|
+
else
|
|
40
|
+
before="${{ github.event.before }}"
|
|
41
|
+
if [ "$before" = "0000000000000000000000000000000000000000" ] || [ -z "$before" ]; then
|
|
42
|
+
range="${{ github.sha }}"
|
|
43
|
+
else
|
|
44
|
+
range="$before..${{ github.sha }}"
|
|
45
|
+
fi
|
|
46
|
+
fi
|
|
47
|
+
./script/check-commit-messages "$range"
|
|
48
|
+
|
|
6
49
|
build:
|
|
50
|
+
needs: commit-messages
|
|
7
51
|
strategy:
|
|
8
52
|
fail-fast: false
|
|
9
53
|
matrix:
|
|
10
|
-
ruby: [
|
|
54
|
+
ruby: ["3.2", "3.3", "3.4", "4.0"]
|
|
11
55
|
runs-on: ubuntu-latest
|
|
12
56
|
steps:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
57
|
+
- name: Checkout
|
|
58
|
+
uses: actions/checkout@v6
|
|
59
|
+
|
|
60
|
+
- name: Set up Mise
|
|
61
|
+
uses: jdx/mise-action@v3
|
|
62
|
+
with:
|
|
63
|
+
tool_versions: |
|
|
64
|
+
ruby ${{ matrix.ruby }}
|
|
65
|
+
cmake
|
|
66
|
+
cache: true
|
|
67
|
+
|
|
68
|
+
- name: Cache Bundler
|
|
69
|
+
uses: actions/cache@v5
|
|
70
|
+
with:
|
|
71
|
+
path: vendor/bundle
|
|
72
|
+
key: bundle-${{ runner.os }}-${{ matrix.ruby }}-${{ hashFiles('**/Gemfile.lock') }}
|
|
73
|
+
restore-keys: |
|
|
74
|
+
bundle-${{ runner.os }}-${{ matrix.ruby }}-
|
|
75
|
+
|
|
76
|
+
- name: Install Bundler and gems
|
|
77
|
+
run: |
|
|
78
|
+
bundle config set path vendor/bundle
|
|
79
|
+
bundle install --jobs 4 --retry 3
|
|
80
|
+
|
|
81
|
+
- name: Run the CI build
|
|
82
|
+
run: ./script/cibuild
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Publish to RubyGems.org when a version tag is pushed (e.g. by merging a Release Please PR).
|
|
2
|
+
# Uses RubyGems Trusted Publishing (OIDC); no API key needed.
|
|
3
|
+
# One-time setup: add this repo and workflow on https://rubygems.org (Trusted Publishers).
|
|
4
|
+
|
|
5
|
+
name: Publish gem
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
tags:
|
|
10
|
+
- "v*"
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
push:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
id-token: write
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout
|
|
24
|
+
uses: actions/checkout@v6
|
|
25
|
+
with:
|
|
26
|
+
persist-credentials: false
|
|
27
|
+
|
|
28
|
+
- name: Set up Mise
|
|
29
|
+
uses: jdx/mise-action@v3
|
|
30
|
+
with:
|
|
31
|
+
tool_versions: |
|
|
32
|
+
ruby 4.0
|
|
33
|
+
cmake
|
|
34
|
+
cache: true
|
|
35
|
+
|
|
36
|
+
- name: Install Bundler and gems
|
|
37
|
+
run: |
|
|
38
|
+
bundle config set path vendor/bundle
|
|
39
|
+
bundle install --jobs 4 --retry 3
|
|
40
|
+
|
|
41
|
+
- name: Publish to RubyGems.org
|
|
42
|
+
uses: rubygems/release-gem@v1
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Release Please
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
- master
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: write
|
|
11
|
+
pull-requests: write
|
|
12
|
+
|
|
13
|
+
env:
|
|
14
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
release-please:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout
|
|
21
|
+
uses: actions/checkout@v6
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
|
|
25
|
+
- name: Release Please
|
|
26
|
+
uses: googleapis/release-please-action@v4
|
|
27
|
+
with:
|
|
28
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
data/.rubocop.yml
CHANGED
data/.tool-versions
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -3,50 +3,145 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
-
and this project adheres to
|
|
7
|
-
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0](https://github.com/johnsyweb/glyptodont/compare/v0.3.0...v1.0.0) (2026-03-11)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### ⚠ BREAKING CHANGES
|
|
12
|
+
|
|
13
|
+
* drop support for Ruby < 3.2 (EOL); require Ruby 3.2+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* do not require bundler/setup in executable ([83d4f0c](https://github.com/johnsyweb/glyptodont/commit/83d4f0ce45654ee683a807860dd28e81f44170e5))
|
|
18
|
+
* use release-please-config.json so Release Please finds config ([c8c7f1b](https://github.com/johnsyweb/glyptodont/commit/c8c7f1b1f3cb6716e47838c2a744c03473c9f77d))
|
|
19
|
+
* use release-please-config.json so Release Please finds config ([16f0f13](https://github.com/johnsyweb/glyptodont/commit/16f0f13a1b9fe6d3f3e03d20b28ea68e3fb31fe0))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Miscellaneous Chores
|
|
23
|
+
|
|
24
|
+
* drop support for Ruby < 3.2 (EOL); require Ruby 3.2+ ([0c0fbcd](https://github.com/johnsyweb/glyptodont/commit/0c0fbcde6748c7dca61bb2f8b09955b2b011a8c1))
|
|
8
25
|
|
|
9
26
|
## [Unreleased]
|
|
10
27
|
|
|
11
|
-
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- xp
|
|
31
|
+
- drop support for Ruby < 3.2 (EOL); require Ruby 3.2+
|
|
32
|
+
- add conventional commits changelog and release workflow
|
|
33
|
+
- enforce conventional commits and run checks before each commit
|
|
34
|
+
- add Release Please release bot
|
|
35
|
+
- publish gem to RubyGems via Trusted Publishing on tag push
|
|
36
|
+
- add documentation page for GitHub Pages
|
|
37
|
+
- set homepage to docs at www.johnsy.com/glyptodont/
|
|
38
|
+
- add Dependabot and automerge workflow for dependency updates
|
|
39
|
+
- remove automerge setup note from README
|
|
40
|
+
- check conventional commits only from first conventional commit onwards
|
|
41
|
+
- add .nojekyll so GitHub Pages does not use Jekyll
|
|
42
|
+
|
|
43
|
+
## [0.3.1] - 2026-03-11
|
|
12
44
|
|
|
13
|
-
|
|
45
|
+
### Fixed
|
|
14
46
|
|
|
15
|
-
|
|
47
|
+
- Do not require `bundler/setup` in the executable. The gem now runs correctly when the current directory has a Gemfile (e.g. in CI or when running in the gem's own repo).
|
|
16
48
|
|
|
17
|
-
|
|
49
|
+
## [0.3.0] - 2022-03-23
|
|
18
50
|
|
|
19
51
|
### Changed
|
|
20
52
|
|
|
21
|
-
-
|
|
53
|
+
- Fix link
|
|
54
|
+
|
|
55
|
+
- tyop
|
|
56
|
+
|
|
57
|
+
- Support Ruby 2.5 through 3.1
|
|
58
|
+
|
|
59
|
+
- Add Rubocop plugins
|
|
60
|
+
|
|
61
|
+
- Improve gem description
|
|
62
|
+
|
|
63
|
+
- Gemspec/RequireMFA
|
|
64
|
+
|
|
65
|
+
- Lint/AmbiguousOperatorPrecedence
|
|
66
|
+
|
|
67
|
+
- Update Changelog
|
|
68
|
+
|
|
69
|
+
- Add keywords option/configuration for TODO synonyms
|
|
70
|
+
|
|
71
|
+
- v0.3.0
|
|
72
|
+
|
|
73
|
+
- 2022
|
|
74
|
+
|
|
75
|
+
- Changelog for v0.3.0
|
|
76
|
+
|
|
77
|
+
- Fix anchor
|
|
22
78
|
|
|
23
|
-
[#4]: https://github.com/johnsyweb/glyptodont/pull/4
|
|
24
|
-
[#5]: https://github.com/johnsyweb/glyptodont/pull/5
|
|
25
|
-
[Unreleased]: https://github.com/johnsyweb/glyptodont/compare/v0.2.0..v0.3.0
|
|
26
79
|
|
|
27
80
|
## [0.2.0] - 2021-03-28
|
|
28
81
|
|
|
29
|
-
###
|
|
82
|
+
### Changed
|
|
83
|
+
|
|
84
|
+
- TODOs have moved
|
|
85
|
+
|
|
86
|
+
- Cache the annotator for a file
|
|
87
|
+
|
|
88
|
+
- See also!
|
|
89
|
+
|
|
90
|
+
- return empty hash if the config file is empty
|
|
91
|
+
|
|
92
|
+
- add rspec-its
|
|
93
|
+
|
|
94
|
+
- add cmd-line options into config
|
|
95
|
+
|
|
96
|
+
- pass ARGV to the initializer not the check
|
|
97
|
+
|
|
98
|
+
- report all old TODOs, use age of the youngest in message
|
|
99
|
+
|
|
100
|
+
- passing case wasn't handling the new threshold checking, fixed now
|
|
101
|
+
|
|
102
|
+
- Style
|
|
103
|
+
|
|
104
|
+
- Move requirements around
|
|
105
|
+
|
|
106
|
+
- Extract #stale_todos and #oldest_age
|
|
30
107
|
|
|
31
|
-
-
|
|
32
|
-
|
|
108
|
+
- Spec for counter
|
|
109
|
+
|
|
110
|
+
- Update configuration file
|
|
111
|
+
|
|
112
|
+
- Document new configuration options
|
|
113
|
+
|
|
114
|
+
- Changelog for v0.2.0
|
|
115
|
+
|
|
116
|
+
- Fake configuration to make tests pass again
|
|
117
|
+
|
|
118
|
+
- Run rubocop in ci
|
|
119
|
+
|
|
120
|
+
- Bump version
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
## [0.1.0] - 2021-03-16
|
|
33
124
|
|
|
34
125
|
### Changed
|
|
35
126
|
|
|
36
|
-
-
|
|
127
|
+
- Initial version
|
|
37
128
|
|
|
38
|
-
|
|
129
|
+
- //xkcd.com/149/
|
|
39
130
|
|
|
40
|
-
-
|
|
131
|
+
- Allow for excluding certain lines
|
|
41
132
|
|
|
42
|
-
|
|
43
|
-
[#2]: https://github.com/johnsyweb/glyptodont/pull/2
|
|
44
|
-
[#3]: https://github.com/johnsyweb/glyptodont/pull/3
|
|
133
|
+
- Handle missing / empty configuration
|
|
45
134
|
|
|
46
|
-
|
|
135
|
+
- All or nothing
|
|
47
136
|
|
|
48
|
-
|
|
137
|
+
- Use OptionParser to document command-line options
|
|
49
138
|
|
|
50
|
-
-
|
|
139
|
+
- Please Read Me
|
|
51
140
|
|
|
141
|
+
- Test more Rubies
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
[Unreleased]: https://github.com/johnsyweb/glyptodont/compare/v0.3.0..HEAD
|
|
145
|
+
[0.3.0]: https://github.com/johnsyweb/glyptodont/compare/v0.2.0..v0.3.0
|
|
146
|
+
[0.2.0]: https://github.com/johnsyweb/glyptodont/compare/v0.1.0..v0.2.0
|
|
52
147
|
[0.1.0]: https://github.com/johnsyweb/glyptodont/releases/tag/v0.1.0
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -16,17 +16,40 @@ _done_, this gem is for ***you***!
|
|
|
16
16
|
This was written after I was bitten by a TODO not being _done_ at work. I expect
|
|
17
17
|
to build it into our CI pipeline and see what it catches.
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
[Dependabot](https://docs.github.com/en/code-security/dependabot) is configured
|
|
20
|
+
to open PRs for Bundler and GitHub Actions (weekly). A workflow enables
|
|
21
|
+
auto-merge on those PRs so GitHub merges them when required status checks pass.
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
`
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
After checking out the project, install [Mise](https://mise.jdx.dev/) (the only
|
|
24
|
+
external prerequisite). Then run `script/setup`: it installs everything in
|
|
25
|
+
`.tool-versions` (Ruby and CMake), the gem dependencies, and Git hooks that
|
|
26
|
+
enforce [Conventional Commits](https://www.conventionalcommits.org/) and run
|
|
27
|
+
`script/test` (RuboCop + RSpec) before each commit. Run `script/test` manually
|
|
28
|
+
when needed; you can also run `script/console` for an interactive prompt.
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
To install this gem onto your local machine, run `bundle exec rake install`.
|
|
31
|
+
|
|
32
|
+
### Releasing
|
|
33
|
+
|
|
34
|
+
This project uses [Conventional Commits](https://www.conventionalcommits.org/).
|
|
35
|
+
Releases can be created in two ways.
|
|
36
|
+
|
|
37
|
+
**Release bot (recommended)**
|
|
38
|
+
[Release Please](https://github.com/googleapis/release-please-action) runs on pushes to
|
|
39
|
+
`main`/`master`. It opens a **Release PR** that updates `lib/glyptodont/version.rb` and
|
|
40
|
+
`CHANGELOG.md` from conventional commits. Merge that PR to create the Git tag and
|
|
41
|
+
GitHub Release; the gem is then published to [rubygems.org](https://rubygems.org) via
|
|
42
|
+
[Trusted Publishing](https://guides.rubygems.org/trusted-publishing/) (no API key in CI).
|
|
43
|
+
|
|
44
|
+
**Manual release**
|
|
45
|
+
With [git-cliff](https://git-cliff.org/) installed (e.g. `mise install`):
|
|
46
|
+
|
|
47
|
+
1. Bump the version in `lib/glyptodont/version.rb` (e.g. `0.4.0`).
|
|
48
|
+
2. Commit the version bump.
|
|
49
|
+
3. Run `bundle exec rake release` to create the tag, push it, and publish the gem.
|
|
50
|
+
4. Run `rake changelog` (or `mise exec -- rake changelog`), then commit and push the updated `CHANGELOG.md`.
|
|
51
|
+
|
|
52
|
+
## Getting started [](https://github.com/johnsyweb/glyptodont) [](https://rubygems.org/gems/glyptodont)
|
|
30
53
|
|
|
31
54
|
Add this line to your application's Gemfile:
|
|
32
55
|
|
|
@@ -46,52 +69,14 @@ Or install it yourself as:
|
|
|
46
69
|
gem install glyptodont
|
|
47
70
|
```
|
|
48
71
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
Usage: glyptodont [options]
|
|
53
|
-
-d, --directory DIRECTORY Git repository to search for TODOs (default '.')
|
|
54
|
-
-t, --threshold TODOS Maximum number of TODOs to allow (default 10)
|
|
55
|
-
-m, --max-age DAYS Maximum number of days to allow TODOs to stay (default 14)
|
|
56
|
-
-k, --keywords TODO,WORDS Keywords to treat as 'TODO' (default FIXME,HACK,TODO,XXX)
|
|
57
|
-
--version Show version
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Configuration
|
|
61
|
-
|
|
62
|
-
glyptodont looks for an optional `.glyptodont.yaml` configuration file in the
|
|
63
|
-
root of the directory being scanned.
|
|
64
|
-
|
|
65
|
-
### Sections
|
|
66
|
-
|
|
67
|
-
- `threshold`: Maximum number of TODOs to allow. Can be overridden by
|
|
68
|
-
command-line options.
|
|
69
|
-
- `max_age_in_days`: Maximum number of days to allow TODOs to stay. Can be
|
|
70
|
-
overridden by command-line options.
|
|
71
|
-
- `ignore`: List of `file_name:line_number` pairs to ignore when researching
|
|
72
|
-
TODOs. This may be useful if you have, for example, Spanish language text in
|
|
73
|
-
your project or you talk about TODOs a lot :-)
|
|
74
|
-
- `keywords`: List of synonyms for TODO in your project. I've seen some
|
|
75
|
-
interesting alternatives over the years.
|
|
76
|
-
|
|
77
|
-
### _Exempli gratiā_
|
|
78
|
-
|
|
79
|
-
```yaml
|
|
80
|
-
---
|
|
81
|
-
threshold: 1
|
|
82
|
-
max_age_in_days: 1
|
|
83
|
-
ignore:
|
|
84
|
-
- README.md:11
|
|
85
|
-
- lib/glyptodont/checkers/counter.rb:30
|
|
86
|
-
- lib/glyptodont/todo_researcher.rb:33
|
|
87
|
-
- spec/checkers/counter_spec.rb:20
|
|
88
|
-
```
|
|
72
|
+
For usage, command-line options, configuration (`.glyptodont.yaml`), and CI
|
|
73
|
+
examples (GitHub Actions, Buildkite, Docker), see the [documentation](https://www.johnsy.com/glyptodont/).
|
|
89
74
|
|
|
90
75
|
## Requirements
|
|
91
76
|
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
77
|
+
- [Mise](https://mise.jdx.dev/) — install once; `script/setup` uses it to install
|
|
78
|
+
Ruby and CMake from `.tool-versions`.
|
|
79
|
+
- Git — for development and for the rugged gem at runtime.
|
|
95
80
|
|
|
96
81
|
## Contributing
|
|
97
82
|
|
data/Rakefile
CHANGED
|
@@ -9,4 +9,9 @@ require "rubocop/rake_task"
|
|
|
9
9
|
|
|
10
10
|
RuboCop::RakeTask.new
|
|
11
11
|
|
|
12
|
+
desc "Regenerate CHANGELOG.md from conventional commits (requires git-cliff, e.g. via mise)"
|
|
13
|
+
task :changelog do
|
|
14
|
+
system("git cliff -o CHANGELOG.md") || abort("changelog task failed")
|
|
15
|
+
end
|
|
16
|
+
|
|
12
17
|
task default: %i[spec rubocop]
|
data/cliff.toml
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# git-cliff configuration for conventional commits
|
|
2
|
+
# https://git-cliff.org/docs/configuration
|
|
3
|
+
|
|
4
|
+
[changelog]
|
|
5
|
+
header = """
|
|
6
|
+
# Changelog
|
|
7
|
+
|
|
8
|
+
All notable changes to this project will be documented in this file.
|
|
9
|
+
|
|
10
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
11
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
body = """
|
|
15
|
+
{% if version -%}
|
|
16
|
+
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
17
|
+
{% else -%}
|
|
18
|
+
## [Unreleased]
|
|
19
|
+
{% endif -%}
|
|
20
|
+
{% for group, commits in commits | group_by(attribute="group") %}
|
|
21
|
+
### {{ group | upper_first }}
|
|
22
|
+
{% for commit in commits %}
|
|
23
|
+
- {{ commit.message | split(pat="\n") | first | trim }}
|
|
24
|
+
{% endfor %}
|
|
25
|
+
{% endfor %}
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
footer = """
|
|
29
|
+
{% for release in releases -%}
|
|
30
|
+
{% if release.version -%}
|
|
31
|
+
{% if release.previous.version -%}
|
|
32
|
+
[{{ release.version | trim_start_matches(pat="v") }}]: https://github.com/johnsyweb/glyptodont/compare/{{ release.previous.version }}..{{ release.version }}
|
|
33
|
+
{% else -%}
|
|
34
|
+
[{{ release.version | trim_start_matches(pat="v") }}]: https://github.com/johnsyweb/glyptodont/releases/tag/{{ release.version }}
|
|
35
|
+
{% endif -%}
|
|
36
|
+
{% else -%}
|
|
37
|
+
[Unreleased]: https://github.com/johnsyweb/glyptodont/compare/{{ release.previous.version }}..HEAD
|
|
38
|
+
{% endif -%}
|
|
39
|
+
{% endfor %}
|
|
40
|
+
"""
|
|
41
|
+
trim = true
|
|
42
|
+
|
|
43
|
+
[git]
|
|
44
|
+
conventional_commits = true
|
|
45
|
+
filter_unconventional = false
|
|
46
|
+
commit_parsers = [
|
|
47
|
+
{ message = "^Merge ", skip = true },
|
|
48
|
+
{ message = "^merge ", skip = true },
|
|
49
|
+
{ message = "^feat!?", group = "Added" },
|
|
50
|
+
{ message = "^fix!?", group = "Fixed" },
|
|
51
|
+
{ message = "^perf", group = "Changed" },
|
|
52
|
+
{ message = "^refactor", group = "Changed" },
|
|
53
|
+
{ message = "^chore", group = "Changed" },
|
|
54
|
+
{ message = "^style", group = "Changed" },
|
|
55
|
+
{ message = "^docs", group = "Changed" },
|
|
56
|
+
{ message = "^test", group = "Changed" },
|
|
57
|
+
{ message = "^ci", group = "Changed" },
|
|
58
|
+
{ message = "^build", group = "Changed" },
|
|
59
|
+
{ message = "^.*!:", group = "Changed" },
|
|
60
|
+
{ message = "^.*", group = "Changed" },
|
|
61
|
+
]
|
|
62
|
+
sort_commits = "oldest"
|
data/docs/.nojekyll
ADDED
|
File without changes
|
data/docs/glyptodon.png
ADDED
|
Binary file
|