goodcheck 2.4.3 → 2.5.2
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/.github/dependabot.yml +18 -0
- data/.github/workflows/release.yml +16 -0
- data/.github/workflows/test.yml +46 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +21 -0
- data/README.md +111 -52
- data/Rakefile +41 -2
- data/docusaurus/website/package.json +1 -1
- data/docusaurus/website/versioned_docs/version-2.4.3/rules.md +80 -0
- data/docusaurus/website/versions.json +6 -0
- data/docusaurus/website/yarn.lock +1335 -1471
- data/goodcheck.gemspec +4 -4
- data/goodcheck.yml +10 -0
- data/lib/goodcheck.rb +1 -2
- data/lib/goodcheck/buffer.rb +45 -1
- data/lib/goodcheck/cli.rb +6 -2
- data/lib/goodcheck/commands/check.rb +9 -7
- data/lib/goodcheck/commands/config_loading.rb +1 -1
- data/lib/goodcheck/commands/test.rb +32 -4
- data/lib/goodcheck/config_loader.rb +2 -2
- data/lib/goodcheck/glob.rb +1 -1
- data/lib/goodcheck/import_loader.rb +17 -1
- data/lib/goodcheck/issue.rb +1 -0
- data/lib/goodcheck/trigger.rb +2 -0
- data/lib/goodcheck/version.rb +1 -1
- metadata +36 -20
- data/.travis.yml +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a8fa2f7ee1e8534b3495e3d77a0d0cfb8b49eeaefc77a6507fee9604e0b829a
|
4
|
+
data.tar.gz: 5cd0ac1288b2bb90978998410ff93e234ec08bc645b2ace741f339e0e0b811b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbadbb4097eb8ba35fff5845ade562e47830c197297176118f5144ad984132331f890ef9f7b1e30f14e66ae9d43df64819fb7794dd3059f22fe46e75fcd76a6a
|
7
|
+
data.tar.gz: 3728f7b3037174382675361fa05be02e0f1bf1ede5cb6aadacef2098c062568a95e560a10eed72bffd12baac171b636279738ecf3cccd78be11526922bba50bb
|
@@ -0,0 +1,18 @@
|
|
1
|
+
version: 2
|
2
|
+
updates:
|
3
|
+
- package-ecosystem: bundler
|
4
|
+
directory: "/"
|
5
|
+
schedule:
|
6
|
+
interval: monthly
|
7
|
+
time: "09:00"
|
8
|
+
timezone: Asia/Tokyo
|
9
|
+
open-pull-requests-limit: 10
|
10
|
+
versioning-strategy: increase
|
11
|
+
- package-ecosystem: npm
|
12
|
+
directory: "/docusaurus/website"
|
13
|
+
schedule:
|
14
|
+
interval: monthly
|
15
|
+
time: "09:00"
|
16
|
+
timezone: Asia/Tokyo
|
17
|
+
open-pull-requests-limit: 10
|
18
|
+
versioning-strategy: increase
|
@@ -0,0 +1,16 @@
|
|
1
|
+
name: Release
|
2
|
+
|
3
|
+
on: push
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
release:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
steps:
|
9
|
+
- uses: actions/checkout@v2
|
10
|
+
- uses: softprops/action-gh-release@v1
|
11
|
+
if: startsWith(github.ref, 'refs/tags/')
|
12
|
+
with:
|
13
|
+
body: |
|
14
|
+
See the [changelog](https://github.com/${{ github.repository }}/blob/${{ github.sha }}/CHANGELOG.md) for more details.
|
15
|
+
env:
|
16
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
name: Test
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby: [2.4, 2.5, 2.6, 2.7]
|
11
|
+
steps:
|
12
|
+
- uses: actions/checkout@v2
|
13
|
+
- uses: ruby/setup-ruby@v1
|
14
|
+
with:
|
15
|
+
ruby-version: ${{ matrix.ruby }}
|
16
|
+
- run: |
|
17
|
+
gem install bundler --no-document
|
18
|
+
bundle config set path vendor/bundle
|
19
|
+
bundle install --jobs=4 --retry=3
|
20
|
+
- run: bundle exec rake
|
21
|
+
|
22
|
+
build-docs:
|
23
|
+
runs-on: ubuntu-latest
|
24
|
+
steps:
|
25
|
+
- uses: actions/checkout@v2
|
26
|
+
- uses: ruby/setup-ruby@v1
|
27
|
+
with:
|
28
|
+
ruby-version: 2.7
|
29
|
+
- run: |
|
30
|
+
gem install bundler --no-document
|
31
|
+
bundle config set path vendor/bundle
|
32
|
+
bundle install --jobs=4 --retry=3
|
33
|
+
- run: bundle exec rake docs:build
|
34
|
+
|
35
|
+
benchmark:
|
36
|
+
runs-on: ubuntu-latest
|
37
|
+
steps:
|
38
|
+
- uses: actions/checkout@v2
|
39
|
+
- uses: ruby/setup-ruby@v1
|
40
|
+
with:
|
41
|
+
ruby-version: 2.7
|
42
|
+
- run: |
|
43
|
+
gem install bundler --no-document
|
44
|
+
bundle config set path vendor/bundle
|
45
|
+
bundle install --jobs=4 --retry=3
|
46
|
+
- run: bundle exec rake benchmark:run[10000]
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,27 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 2.5.2 (2020-08-31)
|
6
|
+
|
7
|
+
* Fix the pattern of disable lines for Slash-asterisk and add support for JSX [#131](https: //github.com/sider/goodcheck/pull/131)
|
8
|
+
|
9
|
+
## 2.5.1 (2020-03-09)
|
10
|
+
|
11
|
+
* Replace `httpclient` with `net/http` [#115](https://github.com/sider/goodcheck/pull/115)
|
12
|
+
|
13
|
+
## 2.5.0 (2020-02-27)
|
14
|
+
|
15
|
+
* Add disable lines via inline comments [#101](https://github.com/sider/goodcheck/pull/101) (thanks to [@dcwither](https://github.com/dcwither)). See [README](https://github.com/sider/goodcheck#disabling-rules-with-inline-comments) for details.
|
16
|
+
|
17
|
+
## 2.4.5 (2019-12-13)
|
18
|
+
|
19
|
+
* Replace ActiveSupport's `Regexp#multiline?` extension [#97](https://github.com/sider/goodcheck/pull/97) (thanks to [@issei126](https://github.com/issei126))
|
20
|
+
|
21
|
+
## 2.4.4 (2019-11-19)
|
22
|
+
|
23
|
+
* Check dot files (except for `.git`, `.svn`, `.hg`) [#91](https://github.com/sider/goodcheck/pull/91)
|
24
|
+
* Improve `test` command output [#93](https://github.com/sider/goodcheck/pull/93)
|
25
|
+
|
5
26
|
## 2.4.3 (2019-11-07)
|
6
27
|
|
7
28
|
* Change LICENSE to MIT [#76](https://github.com/sider/goodcheck/pull/76)
|
data/README.md
CHANGED
@@ -8,25 +8,43 @@ What if a misspelling like `Github` for `GitHub` can be found automatically?
|
|
8
8
|
|
9
9
|
Give Goodcheck a try to do them instead of you! 🎉
|
10
10
|
|
11
|
-
Goodcheck is a customizable linter.
|
12
|
-
You can define pairs of patterns and messages.
|
11
|
+
Goodcheck is a customizable linter. You can define pairs of patterns and messages.
|
13
12
|
It checks your program and when it detects a piece of text matching with the defined patterns, it prints your message which tells your teammates why it should be revised and how.
|
14
13
|
Some part of the code reviewing process can be automated.
|
15
14
|
With Goodcheck the only thing you have to do is define the rules, pairing patterns with messages, and then those same patterns won’t bother you anymore. 😆
|
16
15
|
|
16
|
+
## Table of contents
|
17
|
+
|
18
|
+
- [Installation](#installation)
|
19
|
+
- [Quickstart](#quickstart)
|
20
|
+
- [Defining rules](#defining-rules)
|
21
|
+
- [Pattern](#pattern)
|
22
|
+
- [Glob](#glob)
|
23
|
+
- [A rule with _negated_ pattern](#a-rule-with-negated-pattern)
|
24
|
+
- [A rule without pattern](#a-rule-without-pattern)
|
25
|
+
- [Triggers](#triggers)
|
26
|
+
- [Importing rules](#importing-rules)
|
27
|
+
- [Excluding files](#excluding-files)
|
28
|
+
- [Commands](#commands)
|
29
|
+
- [Downloaded rules](#downloaded-rules)
|
30
|
+
- [Disabling rules with inline comments](#disabling-rules-with-inline-comments)
|
31
|
+
- [Docker images](#docker-images)
|
32
|
+
- [Development](#development)
|
33
|
+
- [Contributing](#contributing)
|
34
|
+
|
17
35
|
## Installation
|
18
36
|
|
19
|
-
```
|
37
|
+
```shell-session
|
20
38
|
$ gem install goodcheck
|
21
39
|
```
|
22
40
|
|
23
|
-
Or you can use `bundler
|
41
|
+
Or you can use [`bundler`](https://bundler.io)!
|
24
42
|
|
25
|
-
If you would not like to install Goodcheck to system (e.g. you would not like to install Ruby 2.4 or higher), you can use a
|
43
|
+
If you would not like to install Goodcheck to system (e.g. you would not like to install Ruby 2.4 or higher), you can use a [Docker image](#docker-images).
|
26
44
|
|
27
45
|
## Quickstart
|
28
46
|
|
29
|
-
```
|
47
|
+
```shell-session
|
30
48
|
$ goodcheck init
|
31
49
|
$ vim goodcheck.yml
|
32
50
|
$ goodcheck check
|
@@ -40,9 +58,9 @@ Then run `check` command, and it will print matched texts.
|
|
40
58
|
|
41
59
|
You can download a [printable cheatsheet](cheatsheet.pdf) from this repository.
|
42
60
|
|
43
|
-
##
|
61
|
+
## Defining rules
|
44
62
|
|
45
|
-
|
63
|
+
A `goodcheck.yml` example of the configuration is like the following:
|
46
64
|
|
47
65
|
```yaml
|
48
66
|
rules:
|
@@ -51,7 +69,7 @@ rules:
|
|
51
69
|
message: |
|
52
70
|
GitHub is GitHub, not Github
|
53
71
|
|
54
|
-
You may misspelling the name of the service!
|
72
|
+
You may be misspelling the name of the service!
|
55
73
|
justification:
|
56
74
|
- When you mean a service different from GitHub
|
57
75
|
- When GitHub is renamed
|
@@ -64,36 +82,38 @@ rules:
|
|
64
82
|
- <a>Signup via Github</a>
|
65
83
|
```
|
66
84
|
|
67
|
-
|
85
|
+
A *rule* hash under a `rules` list contains the following keys:
|
68
86
|
|
69
|
-
* `id
|
70
|
-
* `pattern
|
71
|
-
* `message
|
72
|
-
* `justification
|
73
|
-
* `glob
|
74
|
-
* `pass
|
75
|
-
* `fail
|
87
|
+
* `id` - a string to identify rules (required)
|
88
|
+
* [`pattern`](#pattern) - a *pattern* or a sequence of *pattern*s (optional)
|
89
|
+
* `message` - a string to tell writers why the code piece should be revised (required)
|
90
|
+
* `justification` - a sequence of strings to tell writers when an exception can be allowed (optional)
|
91
|
+
* [`glob`](#glob) - a *glob* or a sequence of *glob*s (optional)
|
92
|
+
* `pass` - a string or a sequence of strings, which does not match the given pattern (optional)
|
93
|
+
* `fail` - a string or a sequence of strings, which does match the given pattern (optional)
|
76
94
|
|
77
|
-
###
|
95
|
+
### Pattern
|
78
96
|
|
79
|
-
A
|
97
|
+
A pattern can be a *literal pattern*, *regexp pattern*, *token pattern*, or a string.
|
80
98
|
|
81
99
|
#### String literal
|
82
100
|
|
83
|
-
|
101
|
+
A string literal represents a *literal pattern* or *regexp pattern*.
|
84
102
|
|
85
103
|
```yaml
|
86
104
|
pattern:
|
87
105
|
- This is a literal pattern
|
88
106
|
- /This is a regexp pattern/
|
107
|
+
- /This is a regexp pattern with the casefold option/i
|
108
|
+
- /This is a regexp pattern with the multiline option/m
|
89
109
|
```
|
90
110
|
|
91
|
-
If
|
111
|
+
If a string value begins with `/` and ends with `/`, it is a *regexp pattern*.
|
92
112
|
You can optionally specify regexp options like `/casefold/i` or `/multiline/m`.
|
93
113
|
|
94
|
-
####
|
114
|
+
#### Literal pattern
|
95
115
|
|
96
|
-
*literal pattern* allows you to construct a regexp which matches exactly to the `literal` string.
|
116
|
+
A *literal pattern* allows you to construct a regexp which matches exactly to the `literal` string.
|
97
117
|
|
98
118
|
```yaml
|
99
119
|
id: com.sample.GitHub
|
@@ -106,9 +126,9 @@ message: Write GitHub, not Github
|
|
106
126
|
All regexp meta characters included in the `literal` value will be escaped.
|
107
127
|
`case_sensitive` is an optional key and the default is `true`.
|
108
128
|
|
109
|
-
####
|
129
|
+
#### Regexp pattern
|
110
130
|
|
111
|
-
*regexp pattern* allows you to write a regexp with meta chars.
|
131
|
+
A *regexp pattern* allows you to write a regexp with meta chars.
|
112
132
|
|
113
133
|
```yaml
|
114
134
|
id: com.sample.digits
|
@@ -124,12 +144,12 @@ justification:
|
|
124
144
|
It accepts two optional attributes, `case_sensitive` and `multiline`.
|
125
145
|
The default values of `case_sensitive` and `multiline` are `true` and `false` respectively.
|
126
146
|
|
127
|
-
The regexp will be passed to `Regexp.compile
|
147
|
+
The regexp will be passed to [`Regexp.compile`](https://ruby-doc.org/core-2.7.0/Regexp.html#method-c-compile).
|
128
148
|
The precise definition of regular expressions can be found in the documentation for Ruby.
|
129
149
|
|
130
|
-
####
|
150
|
+
#### Token pattern
|
131
151
|
|
132
|
-
*token pattern* compiles to a *tokenized* regexp.
|
152
|
+
A *token pattern* compiles to a *tokenized* regexp.
|
133
153
|
|
134
154
|
```yaml
|
135
155
|
id: com.sample.no-blink
|
@@ -162,9 +182,9 @@ pattern:
|
|
162
182
|
color: true
|
163
183
|
```
|
164
184
|
|
165
|
-
The variable binding consists of *
|
185
|
+
The variable binding consists of a *name* and *type* (`${name:type}`), where `color` and `string` in the example above respectively. You have to add a key of the variable *name* in `where` attribute.
|
166
186
|
|
167
|
-
We have 8 built-in
|
187
|
+
We have 8 built-in types:
|
168
188
|
|
169
189
|
* `string`
|
170
190
|
* `int`
|
@@ -175,7 +195,7 @@ We have 8 built-in patterns:
|
|
175
195
|
* `word`
|
176
196
|
* `identifier`
|
177
197
|
|
178
|
-
You can find the exact definitions of the types in the definition of `Goodcheck::Pattern::Token` (`@@TYPES`).
|
198
|
+
You can find the exact definitions of the types in the definition of [`Goodcheck::Pattern::Token`](lib/goodcheck/pattern.rb) (`@@TYPES`).
|
179
199
|
|
180
200
|
You can omit the type of variable binding.
|
181
201
|
|
@@ -197,14 +217,21 @@ If parens or brackets are surrounding the variable, Goodcheck tries to match wit
|
|
197
217
|
- `backgroundColor={{ red: red(), green: green(), blue: green()-1 }}` Matches (`color=="{ red: red(), green: green(), blue: green()-1 }"`)
|
198
218
|
- `backgroundColor={ {{{{{{}}}}}} }` Matches (`color==" {{{{{{}}}}}"`)
|
199
219
|
|
200
|
-
###
|
220
|
+
### Glob
|
201
221
|
|
202
|
-
A *glob* can be a string
|
222
|
+
A *glob* can be a string or a hash.
|
203
223
|
|
204
224
|
```yaml
|
225
|
+
glob: "**/test/**/*.rb"
|
226
|
+
# or
|
205
227
|
glob:
|
206
228
|
pattern: "legacy/**/*.rb"
|
207
229
|
encoding: EUC-JP
|
230
|
+
# or
|
231
|
+
glob:
|
232
|
+
- "**/test/**/*.rb"
|
233
|
+
- pattern: "legacy/**/*.rb"
|
234
|
+
encoding: EUC-JP
|
208
235
|
```
|
209
236
|
|
210
237
|
The hash can have an optional `encoding` attribute.
|
@@ -237,13 +264,12 @@ You can define the _negated_ rules for the opposite, _something is missing in a
|
|
237
264
|
rules:
|
238
265
|
- id: negated
|
239
266
|
not:
|
240
|
-
pattern:
|
241
|
-
<!DOCTYPE html>
|
267
|
+
pattern: <!DOCTYPE html>
|
242
268
|
message: Write a doctype on HTML files.
|
243
269
|
glob: "**/*.html"
|
244
270
|
```
|
245
271
|
|
246
|
-
### A rule without
|
272
|
+
### A rule without pattern
|
247
273
|
|
248
274
|
You can define a rule without `pattern`.
|
249
275
|
The rule emits an issue on each file specified with `glob`.
|
@@ -259,15 +285,15 @@ rules:
|
|
259
285
|
|
260
286
|
The output will be something like:
|
261
287
|
|
262
|
-
```
|
288
|
+
```shell-session
|
263
289
|
$ goodcheck check
|
264
290
|
db/schema.rb:-:# This file is auto-generated from the current state of the database. Instead: Read the operation manual for DB migration: https://example.com/guides/123
|
265
291
|
```
|
266
292
|
|
267
293
|
### Triggers
|
268
294
|
|
269
|
-
Version 2.0.0 introduces a new abstraction to define patterns, trigger
|
270
|
-
You can continue using `pattern`s in
|
295
|
+
Version 2.0.0 introduces a new abstraction to define patterns, called *trigger*.
|
296
|
+
You can continue using `pattern`s in *rule*, but using `trigger` allows more flexible pattern definition and more precise testing.
|
271
297
|
|
272
298
|
```yaml
|
273
299
|
rules:
|
@@ -303,13 +329,25 @@ import:
|
|
303
329
|
- https://some.host/shared/rules.yml
|
304
330
|
```
|
305
331
|
|
306
|
-
The value of `import` can be
|
332
|
+
The value of `import` can be a sequence of:
|
307
333
|
|
308
334
|
- A string which represents an absolute file path,
|
309
335
|
- A string which represents a relative file path from the config file, or
|
310
|
-
- A http/https URL which represents the location of rules
|
336
|
+
- A http/https URL which represents the location of rules.
|
337
|
+
|
338
|
+
The rules file is a YAML file with an sequence of rules:
|
339
|
+
|
340
|
+
```yaml
|
341
|
+
- id: rule1
|
342
|
+
pattern: Some pattern 1
|
343
|
+
message: Some message 1
|
344
|
+
|
345
|
+
- id: rule2
|
346
|
+
pattern: Some pattern 2
|
347
|
+
message: Some message 2
|
311
348
|
|
312
|
-
|
349
|
+
# ...
|
350
|
+
```
|
313
351
|
|
314
352
|
## Excluding files
|
315
353
|
|
@@ -319,9 +357,10 @@ The rules file is a YAML file with an array of rules.
|
|
319
357
|
exclude:
|
320
358
|
- node_modules
|
321
359
|
- vendor
|
360
|
+
- **/test/**/*.txt
|
322
361
|
```
|
323
362
|
|
324
|
-
The value of `exclude` can be a string or
|
363
|
+
The value of `exclude` can be a string or a sequence of strings representing the glob pattern for excluded files.
|
325
364
|
|
326
365
|
## Commands
|
327
366
|
|
@@ -342,7 +381,7 @@ You can pass:
|
|
342
381
|
* Directory paths, or
|
343
382
|
* Paths to files.
|
344
383
|
|
345
|
-
When you omit `targets`, it checks all files in
|
384
|
+
When you omit `targets`, it checks all files in `.` (the current directory).
|
346
385
|
|
347
386
|
Available options are:
|
348
387
|
|
@@ -377,7 +416,7 @@ Available options are:
|
|
377
416
|
* `-c [CONFIG]`, `--config=[CONFIG]` to specify the configuration file.
|
378
417
|
* `-v`, `--verbose` to be verbose.
|
379
418
|
* `--debug` to print all debug messages.
|
380
|
-
* `--force` to ignore downloaded caches
|
419
|
+
* `--force` to ignore downloaded caches.
|
381
420
|
|
382
421
|
### `goodcheck pattern [options] ids...`
|
383
422
|
|
@@ -395,11 +434,29 @@ The *goodcheck home directory* is `~/.goodcheck`, but you can customize the loca
|
|
395
434
|
|
396
435
|
The cache expires in 3 minutes.
|
397
436
|
|
398
|
-
##
|
437
|
+
## Disabling rules with inline comments
|
438
|
+
|
439
|
+
You can disable rule warnings on a specific line using line comments supported by common languages.
|
440
|
+
|
441
|
+
For example, for Ruby:
|
442
|
+
|
443
|
+
```rb
|
444
|
+
# goodcheck-disable-next-line
|
445
|
+
puts "Github"
|
446
|
+
puts "Github" # goodcheck-disable-line
|
447
|
+
```
|
448
|
+
|
449
|
+
For JavaScript:
|
450
|
+
|
451
|
+
```js
|
452
|
+
// goodcheck-disable-next-line
|
453
|
+
console.log("Github")
|
454
|
+
console.log("Github") // goodcheck-disable-line
|
455
|
+
```
|
399
456
|
|
400
|
-
|
457
|
+
## Docker images
|
401
458
|
|
402
|
-
|
459
|
+
We provide Docker images of Goodcheck on [Docker Hub](https://hub.docker.com/r/sider/goodcheck) so that you can try Goodcheck without installing them.
|
403
460
|
|
404
461
|
```bash
|
405
462
|
$ docker pull sider/goodcheck
|
@@ -407,11 +464,11 @@ $ docker run -t --rm -v "$(pwd):/work" sider/goodcheck check
|
|
407
464
|
```
|
408
465
|
|
409
466
|
The default `latest` tag points to the latest release of Goodcheck.
|
410
|
-
You can pick a version of Goodcheck from [tags page](https://hub.docker.com/r/sider/goodcheck/tags).
|
467
|
+
You can pick a version of Goodcheck from the [Docker Hub tags page](https://hub.docker.com/r/sider/goodcheck/tags).
|
411
468
|
|
412
469
|
## Development
|
413
470
|
|
414
|
-
After checking out the
|
471
|
+
After checking out the repository, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
415
472
|
|
416
473
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
417
474
|
|
@@ -419,8 +476,10 @@ To release a new version, follows the steps below:
|
|
419
476
|
|
420
477
|
1. Update the version number in [`version.rb`](lib/goodcheck/version.rb).
|
421
478
|
2. Add the new version's entry to the [changelog](CHANGELOG.md).
|
422
|
-
3.
|
423
|
-
4.
|
479
|
+
3. Update the documentation via `bundle exec rake docs:update_version`.
|
480
|
+
4. Commit the above changes like `git commit -m 'Version 1.2.3'`.
|
481
|
+
5. Run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
482
|
+
6. Publish the updated documentation like `GIT_USER=some_user USE_SSH=true bundle exec rake docs:publish`.
|
424
483
|
|
425
484
|
## Contributing
|
426
485
|
|