minfraud 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
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"