minfraud 2.4.0 → 2.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14d6fda0782c4f12ecd3599b4d6f3887be93845fca267490bbc64ad6bf5e3518
4
- data.tar.gz: 0dbcb74c203b066c41ad1d85b25e236a63c9e2904a87064bece9ce69a60eecc6
3
+ metadata.gz: b2c683916a690e43c095a9fcb4b08118b5516919245fc5bf47d8b7b1de51f2be
4
+ data.tar.gz: 65135f9eb185edacfdc737d195cd283b77e6a548b49854f4b4964f8d7d061d39
5
5
  SHA512:
6
- metadata.gz: 74a6d172a649d417c89ca8a22a454407e54d70a19cea0583594165a2de23ac9df889478675fadad4becade61a84ac7fb39950ae890cd8d98c80e2dcdb6a2d38d
7
- data.tar.gz: 7c9c52f1929869e043878b4f74c40d488fa5a44df587b63362a537b14b8f3602a4c78b51abeb18ab2404bf49ba2662b38919a5470de8270f2b53dc1ea2b80071
6
+ metadata.gz: b5642ec35609ebe7463b8a252593247d2676df99fafcf374ddca1c8463160ede4e4dc2c7b3adbf398ec54daf23640e9625443a60723e4afe01098caede9ee66a
7
+ data.tar.gz: 7276700318812cd0bd9b306237018cba29107a5723b8c4ddf6f76d0ed2394deea191655f149069d1cf0c11b5864725fc834805b42c39afc1daf2c616ee0a30ba
data/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.5.0 (2024-04-16)
4
+
5
+ * Equivalent domain names are now normalized when `hash_address` is used.
6
+ For example, `googlemail.com` will become `gmail.com`.
7
+ * Periods are now removed from `gmail.com` email address local parts when
8
+ `hash_address` is used. For example, `f.o.o@gmail.com` will become
9
+ `foo@gmail.com`.
10
+ * Fastmail alias subdomain email addresses are now normalized when
11
+ `hash_address` is used. For example, `alias@user.fastmail.com` will
12
+ become `user@fastmail.com`.
13
+ * Additional `yahoo.com` email addresses now have aliases removed from
14
+ their local part when `hash_address` is used. For example,
15
+ `foo-bar@yahoo.com` will become `foo@yahoo.com` for additional
16
+ `yahoo.com` domains.
17
+ * Duplicate `.com`s are now removed from email domain names when
18
+ `hash_address` is used. For example, `example.com.com` will become
19
+ `example.com`.
20
+ * Certain TLD typos are now normalized when `hash_address` is used. For
21
+ example, `example.comcom` will become `example.com`.
22
+ * Additional `gmail.com` domain names with leading digits are now
23
+ normalized when `hash_address` is used. For example, `100gmail.com` will
24
+ become `gmail.com`.
25
+ * Additional `gmail.com` typos are now normalized when `hash_address` is
26
+ used. For example, `gmali.com` will become `gmail.com`.
27
+ * When `hash_address` is used, all trailing periods are now removed from an
28
+ email address domain. Previously only a single period was removed.
29
+ * When `hash_address` is used, the local part of an email address is now
30
+ normalized to NFC.
31
+
3
32
  ## v2.4.0 (2024-01-12)
4
33
 
5
34
  * Ruby 2.7+ is now required. If you're using Ruby 2.5 or 2.6, please use
data/README.dev.md CHANGED
@@ -1,4 +1,28 @@
1
+ # Prereqs
2
+
3
+ * You must have a local Ruby environment that can run the tests
4
+ via `rake`.
5
+ * You must have the [GitHub CLI tool (gh)](https://cli.github.com/)
6
+ installed, in your path, and logged into an account that can
7
+ make GitHub releases on the repo.
8
+ * Your environment also must have `bash`, `git`, `perl`, and `sed`
9
+ available.
10
+
1
11
  # How to release
2
12
 
3
- See
4
- [here](https://github.com/maxmind/MaxMind-DB-Reader-ruby/blob/main/README.dev.md).
13
+ * Review open issues and PRs to see if anything needs to be addressed
14
+ before release.
15
+ * Create a branch e.g. `horgh/release` and switch to it.
16
+ * `main` is protected.
17
+ * Set the release version and release date in `CHANGELOG.md`. Be sure
18
+ the version follows [Semantic Versioning](https://semver.org/).
19
+ * Commit these changes.
20
+ * Run `dev-bin/release.sh`.
21
+ * Verify the release on the GitHub Releases page.
22
+ * If everything goes well, the authorized releasers will receive an email
23
+ to review the pending deployment. If you are an authorized releaser,
24
+ you will need to approve the release deployment run. If you are not,
25
+ you will have to wait for an authorized releaser to do so.
26
+ * Double check it looks okay at https://rubygems.org/gems/minfraud and
27
+ https://www.rubydoc.info/gems/minfraud.
28
+ * Make a PR and get it merged.
@@ -88,43 +88,316 @@ module Minfraud
88
88
  local_part, domain = address.split('@', 2)
89
89
  return nil if !local_part || !domain
90
90
 
91
+ local_part = local_part.unicode_normalize(:nfc)
92
+
91
93
  domain = clean_domain(domain)
92
94
 
93
- if domain == 'yahoo.com'
95
+ if YAHOO_DOMAINS.key?(domain)
94
96
  local_part.sub!(/\A([^-]+)-.*\z/, '\1')
95
97
  else
96
98
  local_part.sub!(/\A([^+]+)\+.*\z/, '\1')
97
99
  end
98
100
 
101
+ if domain == 'gmail.com'
102
+ local_part.gsub!('.', '')
103
+ end
104
+
105
+ domain_parts = domain.split('.')
106
+ if domain_parts.length > 2
107
+ possible_domain = domain_parts[1..].join('.')
108
+ if FASTMAIL_DOMAINS.key?(possible_domain)
109
+ domain = possible_domain
110
+ if local_part != ''
111
+ local_part = domain_parts[0]
112
+ end
113
+ end
114
+ end
115
+
99
116
  "#{local_part}@#{domain}"
100
117
  end
101
118
 
102
119
  TYPO_DOMAINS = {
103
120
  # gmail.com
104
- '35gmai.com' => 'gmail.com',
105
- '636gmail.com' => 'gmail.com',
121
+ 'gmai.com' => 'gmail.com',
106
122
  'gamil.com' => 'gmail.com',
107
- 'gmail.comu' => 'gmail.com',
123
+ 'gmali.com' => 'gmail.com',
108
124
  'gmial.com' => 'gmail.com',
109
125
  'gmil.com' => 'gmail.com',
126
+ 'gmaill.com' => 'gmail.com',
127
+ 'gmailm.com' => 'gmail.com',
128
+ 'gmailo.com' => 'gmail.com',
129
+ 'gmailyhoo.com' => 'gmail.com',
110
130
  'yahoogmail.com' => 'gmail.com',
111
131
  # outlook.com
112
132
  'putlook.com' => 'outlook.com',
113
133
  }.freeze
114
134
  private_constant :TYPO_DOMAINS
115
135
 
136
+ TYPO_TLDS = {
137
+ 'comm' => 'com',
138
+ 'commm' => 'com',
139
+ 'commmm' => 'com',
140
+ 'comn' => 'com',
141
+
142
+ 'cbm' => 'com',
143
+ 'ccm' => 'com',
144
+ 'cdm' => 'com',
145
+ 'cem' => 'com',
146
+ 'cfm' => 'com',
147
+ 'cgm' => 'com',
148
+ 'chm' => 'com',
149
+ 'cim' => 'com',
150
+ 'cjm' => 'com',
151
+ 'ckm' => 'com',
152
+ 'clm' => 'com',
153
+ 'cmm' => 'com',
154
+ 'cnm' => 'com',
155
+ 'cpm' => 'com',
156
+ 'cqm' => 'com',
157
+ 'crm' => 'com',
158
+ 'csm' => 'com',
159
+ 'ctm' => 'com',
160
+ 'cum' => 'com',
161
+ 'cvm' => 'com',
162
+ 'cwm' => 'com',
163
+ 'cxm' => 'com',
164
+ 'cym' => 'com',
165
+ 'czm' => 'com',
166
+
167
+ 'col' => 'com',
168
+ 'con' => 'com',
169
+
170
+ 'dom' => 'com',
171
+ 'don' => 'com',
172
+ 'som' => 'com',
173
+ 'son' => 'com',
174
+ 'vom' => 'com',
175
+ 'von' => 'com',
176
+ 'xom' => 'com',
177
+ 'xon' => 'com',
178
+
179
+ 'clam' => 'com',
180
+ 'colm' => 'com',
181
+ 'comcom' => 'com',
182
+ }.freeze
183
+ private_constant :TYPO_TLDS
184
+
185
+ EQUIVALENT_DOMAINS = {
186
+ 'googlemail.com' => 'gmail.com',
187
+ 'pm.me' => 'protonmail.com',
188
+ 'proton.me' => 'protonmail.com',
189
+ 'yandex.by' => 'yandex.ru',
190
+ 'yandex.com' => 'yandex.ru',
191
+ 'yandex.kz' => 'yandex.ru',
192
+ 'yandex.ua' => 'yandex.ru',
193
+ 'ya.ru' => 'yandex.ru',
194
+ }.freeze
195
+ private_constant :EQUIVALENT_DOMAINS
196
+
197
+ FASTMAIL_DOMAINS = {
198
+ '123mail.org' => true,
199
+ '150mail.com' => true,
200
+ '150ml.com' => true,
201
+ '16mail.com' => true,
202
+ '2-mail.com' => true,
203
+ '4email.net' => true,
204
+ '50mail.com' => true,
205
+ 'airpost.net' => true,
206
+ 'allmail.net' => true,
207
+ 'bestmail.us' => true,
208
+ 'cluemail.com' => true,
209
+ 'elitemail.org' => true,
210
+ 'emailcorner.net' => true,
211
+ 'emailengine.net' => true,
212
+ 'emailengine.org' => true,
213
+ 'emailgroups.net' => true,
214
+ 'emailplus.org' => true,
215
+ 'emailuser.net' => true,
216
+ 'eml.cc' => true,
217
+ 'f-m.fm' => true,
218
+ 'fast-email.com' => true,
219
+ 'fast-mail.org' => true,
220
+ 'fastem.com' => true,
221
+ 'fastemail.us' => true,
222
+ 'fastemailer.com' => true,
223
+ 'fastest.cc' => true,
224
+ 'fastimap.com' => true,
225
+ 'fastmail.cn' => true,
226
+ 'fastmail.co.uk' => true,
227
+ 'fastmail.com' => true,
228
+ 'fastmail.com.au' => true,
229
+ 'fastmail.de' => true,
230
+ 'fastmail.es' => true,
231
+ 'fastmail.fm' => true,
232
+ 'fastmail.fr' => true,
233
+ 'fastmail.im' => true,
234
+ 'fastmail.in' => true,
235
+ 'fastmail.jp' => true,
236
+ 'fastmail.mx' => true,
237
+ 'fastmail.net' => true,
238
+ 'fastmail.nl' => true,
239
+ 'fastmail.org' => true,
240
+ 'fastmail.se' => true,
241
+ 'fastmail.to' => true,
242
+ 'fastmail.tw' => true,
243
+ 'fastmail.uk' => true,
244
+ 'fastmail.us' => true,
245
+ 'fastmailbox.net' => true,
246
+ 'fastmessaging.com' => true,
247
+ 'fea.st' => true,
248
+ 'fmail.co.uk' => true,
249
+ 'fmailbox.com' => true,
250
+ 'fmgirl.com' => true,
251
+ 'fmguy.com' => true,
252
+ 'ftml.net' => true,
253
+ 'h-mail.us' => true,
254
+ 'hailmail.net' => true,
255
+ 'imap-mail.com' => true,
256
+ 'imap.cc' => true,
257
+ 'imapmail.org' => true,
258
+ 'inoutbox.com' => true,
259
+ 'internet-e-mail.com' => true,
260
+ 'internet-mail.org' => true,
261
+ 'internetemails.net' => true,
262
+ 'internetmailing.net' => true,
263
+ 'jetemail.net' => true,
264
+ 'justemail.net' => true,
265
+ 'letterboxes.org' => true,
266
+ 'mail-central.com' => true,
267
+ 'mail-page.com' => true,
268
+ 'mailandftp.com' => true,
269
+ 'mailas.com' => true,
270
+ 'mailbolt.com' => true,
271
+ 'mailc.net' => true,
272
+ 'mailcan.com' => true,
273
+ 'mailforce.net' => true,
274
+ 'mailftp.com' => true,
275
+ 'mailhaven.com' => true,
276
+ 'mailingaddress.org' => true,
277
+ 'mailite.com' => true,
278
+ 'mailmight.com' => true,
279
+ 'mailnew.com' => true,
280
+ 'mailsent.net' => true,
281
+ 'mailservice.ms' => true,
282
+ 'mailup.net' => true,
283
+ 'mailworks.org' => true,
284
+ 'ml1.net' => true,
285
+ 'mm.st' => true,
286
+ 'myfastmail.com' => true,
287
+ 'mymacmail.com' => true,
288
+ 'nospammail.net' => true,
289
+ 'ownmail.net' => true,
290
+ 'petml.com' => true,
291
+ 'postinbox.com' => true,
292
+ 'postpro.net' => true,
293
+ 'proinbox.com' => true,
294
+ 'promessage.com' => true,
295
+ 'realemail.net' => true,
296
+ 'reallyfast.biz' => true,
297
+ 'reallyfast.info' => true,
298
+ 'rushpost.com' => true,
299
+ 'sent.as' => true,
300
+ 'sent.at' => true,
301
+ 'sent.com' => true,
302
+ 'speedpost.net' => true,
303
+ 'speedymail.org' => true,
304
+ 'ssl-mail.com' => true,
305
+ 'swift-mail.com' => true,
306
+ 'the-fastest.net' => true,
307
+ 'the-quickest.com' => true,
308
+ 'theinternetemail.com' => true,
309
+ 'veryfast.biz' => true,
310
+ 'veryspeedy.net' => true,
311
+ 'warpmail.net' => true,
312
+ 'xsmail.com' => true,
313
+ 'yepmail.net' => true,
314
+ 'your-mail.com' => true,
315
+ }.freeze
316
+ private_constant :FASTMAIL_DOMAINS
317
+
318
+ YAHOO_DOMAINS = {
319
+ 'y7mail.com' => true,
320
+ 'yahoo.at' => true,
321
+ 'yahoo.be' => true,
322
+ 'yahoo.bg' => true,
323
+ 'yahoo.ca' => true,
324
+ 'yahoo.cl' => true,
325
+ 'yahoo.co.id' => true,
326
+ 'yahoo.co.il' => true,
327
+ 'yahoo.co.in' => true,
328
+ 'yahoo.co.kr' => true,
329
+ 'yahoo.co.nz' => true,
330
+ 'yahoo.co.th' => true,
331
+ 'yahoo.co.uk' => true,
332
+ 'yahoo.co.za' => true,
333
+ 'yahoo.com' => true,
334
+ 'yahoo.com.ar' => true,
335
+ 'yahoo.com.au' => true,
336
+ 'yahoo.com.br' => true,
337
+ 'yahoo.com.co' => true,
338
+ 'yahoo.com.hk' => true,
339
+ 'yahoo.com.hr' => true,
340
+ 'yahoo.com.mx' => true,
341
+ 'yahoo.com.my' => true,
342
+ 'yahoo.com.pe' => true,
343
+ 'yahoo.com.ph' => true,
344
+ 'yahoo.com.sg' => true,
345
+ 'yahoo.com.tr' => true,
346
+ 'yahoo.com.tw' => true,
347
+ 'yahoo.com.ua' => true,
348
+ 'yahoo.com.ve' => true,
349
+ 'yahoo.com.vn' => true,
350
+ 'yahoo.cz' => true,
351
+ 'yahoo.de' => true,
352
+ 'yahoo.dk' => true,
353
+ 'yahoo.ee' => true,
354
+ 'yahoo.es' => true,
355
+ 'yahoo.fi' => true,
356
+ 'yahoo.fr' => true,
357
+ 'yahoo.gr' => true,
358
+ 'yahoo.hu' => true,
359
+ 'yahoo.ie' => true,
360
+ 'yahoo.in' => true,
361
+ 'yahoo.it' => true,
362
+ 'yahoo.lt' => true,
363
+ 'yahoo.lv' => true,
364
+ 'yahoo.nl' => true,
365
+ 'yahoo.no' => true,
366
+ 'yahoo.pl' => true,
367
+ 'yahoo.pt' => true,
368
+ 'yahoo.ro' => true,
369
+ 'yahoo.se' => true,
370
+ 'yahoo.sk' => true,
371
+ 'ymail.com' => true,
372
+ }.freeze
373
+ private_constant :YAHOO_DOMAINS
374
+
116
375
  def clean_domain(domain)
117
376
  domain = domain.strip
118
377
 
119
- # We could use delete_suffix!, but that is in Ruby 2.5+ only.
120
- domain.sub!(/\.\z/, '')
378
+ domain.sub!(/\.+\z/, '')
121
379
 
122
380
  domain = SimpleIDN.to_ascii(domain)
123
381
 
382
+ domain.sub!(/(?:\.com){2,}$/, '.com')
383
+ domain.sub!(/^\d+(?:gmail?\.com)$/, 'gmail.com')
384
+
385
+ idx = domain.rindex('.')
386
+ if !idx.nil?
387
+ tld = domain[idx + 1..]
388
+ if TYPO_TLDS.key?(tld)
389
+ domain = "#{domain[0, idx]}.#{TYPO_TLDS[tld]}"
390
+ end
391
+ end
392
+
124
393
  if TYPO_DOMAINS.key?(domain)
125
394
  domain = TYPO_DOMAINS[domain]
126
395
  end
127
396
 
397
+ if EQUIVALENT_DOMAINS.key?(domain)
398
+ domain = EQUIVALENT_DOMAINS[domain]
399
+ end
400
+
128
401
  domain
129
402
  end
130
403
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Minfraud
4
4
  # The Gem version.
5
- VERSION = '2.4.0'
5
+ VERSION = '2.5.0'
6
6
  end
data/minfraud.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.required_ruby_version = '>= 2.7.0'
19
19
 
20
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^.gitignore$|^(?:\.github|dev-bin|spec)/}) }
21
21
  spec.bindir = 'exe'
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minfraud
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kushnir.yb
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-01-12 00:00:00.000000000 Z
12
+ date: 2024-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: connection_pool
@@ -156,11 +156,6 @@ executables: []
156
156
  extensions: []
157
157
  extra_rdoc_files: []
158
158
  files:
159
- - ".github/dependabot.yml"
160
- - ".github/workflows/release.yml"
161
- - ".github/workflows/rubocop.yml"
162
- - ".github/workflows/test.yml"
163
- - ".gitignore"
164
159
  - ".rspec"
165
160
  - ".rubocop.yml"
166
161
  - CHANGELOG.md
@@ -172,7 +167,6 @@ files:
172
167
  - Rakefile
173
168
  - bin/console
174
169
  - bin/setup
175
- - dev-bin/release.sh
176
170
  - lib/minfraud.rb
177
171
  - lib/minfraud/assessments.rb
178
172
  - lib/minfraud/components/account.rb
@@ -1,11 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: bundler
4
- directory: "/"
5
- schedule:
6
- interval: daily
7
- open-pull-requests-limit: 10
8
- - package-ecosystem: "github-actions"
9
- directory: "/"
10
- schedule:
11
- interval: daily
@@ -1,28 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- workflow_dispatch:
5
- pull_request:
6
- push:
7
- branches:
8
- - main
9
- release:
10
- types:
11
- - published
12
-
13
- jobs:
14
- push:
15
- if: github.event_name == 'release' && github.event.action == 'published'
16
- runs-on: ubuntu-latest
17
- environment: release
18
- permissions:
19
- id-token: write
20
- steps:
21
- - uses: actions/checkout@v4
22
- - name: Set up Ruby
23
- uses: ruby/setup-ruby@v1
24
- with:
25
- bundler-cache: true
26
- ruby-version: ruby
27
-
28
- - uses: rubygems/release-gem@v1
@@ -1,18 +0,0 @@
1
- name: Run rubocop
2
-
3
- on:
4
- push:
5
- pull_request:
6
- schedule:
7
- - cron: '4 0 * * SUN'
8
-
9
- jobs:
10
- rubocop:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@v4
14
- - uses: ruby/setup-ruby@v1
15
- with:
16
- ruby-version: 3.3
17
- - run: bundle install
18
- - run: bundle exec rake -t rubocop
@@ -1,36 +0,0 @@
1
- name: Run tests
2
-
3
- on:
4
- push:
5
- pull_request:
6
- schedule:
7
- - cron: '4 1 * * SUN'
8
-
9
- jobs:
10
- test:
11
- runs-on: ${{ matrix.os }}
12
- strategy:
13
- fail-fast: false
14
- matrix:
15
- os: [ubuntu-latest, windows-latest, macos-latest]
16
- version:
17
- [
18
- 2.7,
19
- '3.0',
20
- 3.1,
21
- 3.2,
22
- 3.3,
23
- jruby,
24
- ]
25
- exclude:
26
- - os: windows-latest
27
- version: jruby
28
- steps:
29
- - uses: actions/checkout@v4
30
- with:
31
- submodules: true
32
- - uses: ruby/setup-ruby@v1
33
- with:
34
- ruby-version: ${{ matrix.version }}
35
- - run: bundle install
36
- - run: bundle exec rake -t spec
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /coverage
2
- pkg
3
- .project
4
- Gemfile.lock
5
- .rvmrc
6
- *.rbc
7
- .yardoc
8
- *~
9
- .DS_Store
data/dev-bin/release.sh DELETED
@@ -1,59 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -eu -o pipefail
4
-
5
- changelog=$(cat CHANGELOG.md)
6
-
7
- regex='
8
- ## v([0-9]+\.[0-9]+\.[0-9]+) \(([0-9]{4}-[0-9]{2}-[0-9]{2})\)
9
-
10
- ((.|
11
- )*)
12
- '
13
-
14
- if [[ ! $changelog =~ $regex ]]; then
15
- echo "Could not find date line in change log!"
16
- exit 1
17
- fi
18
-
19
- version="${BASH_REMATCH[1]}"
20
- date="${BASH_REMATCH[2]}"
21
- notes="$(echo "${BASH_REMATCH[3]}" | sed -n -E '/^## v[0-9]+\.[0-9]+\.[0-9]+/,$!p')"
22
-
23
- echo "$notes"
24
- if [[ "$date" != "$(date +"%Y-%m-%d")" ]]; then
25
- echo "$date is not today!"
26
- exit 1
27
- fi
28
-
29
- tag="v$version"
30
-
31
- if [ -n "$(git status --porcelain)" ]; then
32
- echo ". is not clean." >&2
33
- exit 1
34
- fi
35
-
36
- perl -pi -e "s/(?<=VERSION = \').+?(?=\')/$version/g" lib/minfraud/version.rb
37
-
38
- echo $"Test results:"
39
-
40
- rake
41
-
42
- echo $'\nDiff:'
43
- git diff
44
-
45
- echo $'\nRelease notes:'
46
- echo "$notes"
47
-
48
- read -e -p "Commit changes and push to origin? " should_push
49
-
50
- if [ "$should_push" != "y" ]; then
51
- echo "Aborting"
52
- exit 1
53
- fi
54
-
55
- git commit -m "Update for $tag" -a
56
-
57
- git push
58
-
59
- gh release create --target "$(git branch --show-current)" -t "$version" -n "$notes" "$tag"