checkoff 0.207.0 → 0.208.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: c4713373a7b26b525f483da5a69475a54e581d88e9a2d62c248704253f1a7b9e
4
- data.tar.gz: 7f3df307162f35d5ae06a744caac036aa758e2bdfa6b70c031c1cf9d873a0a24
3
+ metadata.gz: 7942023f02e281c392a83c840d17c775b34feeccf295822faae41b90fd1c866e
4
+ data.tar.gz: 563a27004a03f007de1a379ff2a612c0ee8e1c66a2edec2a23ed0ba9a3ec6f46
5
5
  SHA512:
6
- metadata.gz: 340121e39c1a3189a732e0e12f2eeb2e0dde07ec6bf2455b12fe2e9ccb71ded6684895c301771567127bf0fb231a2e91908dba90371f70864bdc9458e19d79ee
7
- data.tar.gz: cabcae1b4f49b00a039fc98c727df77d9fb5988198fd44086a3ddf4231808de9ec38e486e2d98de23b402684449b1d32cfb3ed66181a572c69e4e41416e8e5ab
6
+ metadata.gz: 1f3c0dddcaedb88b032b36635b726c53b9b4f7966d06d93a8bb9a84da425cf4611be202064deadc2a00338579d616f16d99f31e922ac7c7cfd712355eee82745
7
+ data.tar.gz: '087d1c0f801fc7864a6d4abb93ad7609f21b1c4a10bda4932c506aece41f8420df741c5b5e2bc5a4ac511dacaab4824e61fb4318f54a64535bff2d9cf32ee73c'
data/.circleci/config.yml CHANGED
@@ -22,7 +22,8 @@ commands:
22
22
  eval "$(pyenv init --path)"
23
23
  eval "$(pyenv virtualenv-init -)"
24
24
  eval "$(rbenv init -)"
25
- export BUNDLE_PATH=vendor/bundle
25
+ # keep this in a single place for both main and child builds for cachability
26
+ export BUNDLE_PATH="$(pwd)/vendor/bundle"
26
27
 
27
28
  <<parameters.command>>
28
29
  environment:
@@ -35,8 +36,8 @@ commands:
35
36
  - checkout
36
37
  - restore_cache:
37
38
  keys:
38
- - gems-v2-{{ checksum "Gemfile.lock" }}
39
- - gems-v2-
39
+ - gems-v3-{{ checksum "Gemfile.lock" }}-
40
+ - gems-v3-
40
41
  - gems-
41
42
  - restore_cache:
42
43
  keys:
@@ -53,8 +54,15 @@ commands:
53
54
  - run:
54
55
  name: Initialize packages
55
56
  command: |
56
- export BUNDLE_PATH=vendor/bundle
57
+ # measuring slows down the script - only enable when you
58
+ # want to debug where this is spending time
59
+
60
+ # export FIX_SH_TIMING_LOG=/tmp/fix_sh_timing.log
61
+
62
+ export BUNDLE_PATH="$(pwd)/vendor/bundle"
57
63
  './fix.sh'
64
+ - store_artifacts:
65
+ path: /tmp/fix_sh_timing.log
58
66
  - run:
59
67
  name: Verify Gemfile.lock
60
68
  command: |
@@ -64,9 +72,10 @@ commands:
64
72
  exit 1
65
73
  fi
66
74
  - save_cache:
67
- key: gems-v2-{{ checksum "Gemfile.lock" }}
75
+ key: gems-v3-{{ checksum "Gemfile.lock" }}-{{ checksum ".ruby-version" }}
68
76
  paths:
69
77
  - "vendor/bundle"
78
+ - ".yardoc"
70
79
  - save_cache:
71
80
  key: wheels-v1-3.12.1-{{ checksum "requirements_dev.txt" }}
72
81
  paths:
@@ -101,9 +110,14 @@ commands:
101
110
  label: Run brakeman
102
111
  command: |
103
112
  bundle exec brakeman --no-pager --force
113
+ - run_with_languages:
114
+ label: Run Rubocop
115
+ command: |
116
+ bundle exec rubocop
104
117
  - run_with_languages:
105
118
  label: Ratchet rubocop quality
106
119
  command: |
120
+ set -x
107
121
  bundle exec rubocop --regenerate-todo --no-exclude-limit --auto-gen-only-exclude --no-auto-gen-timestamp
108
122
  if [ -f .rubocop_todo.yml ]
109
123
  then
@@ -216,8 +230,6 @@ jobs:
216
230
  - image: apiology/circleci-ruby:latest
217
231
  steps:
218
232
  - set_up_environment
219
- - run: git config user.email 'vince@broz.cc'
220
- - run: git config user.name 'Vince Broz'
221
233
  - run_with_languages:
222
234
  label: Make RubyGems release
223
235
  command: |
@@ -23,6 +23,17 @@ module Overcommit
23
23
 
24
24
  private
25
25
 
26
+ # @param stderr [String]
27
+ #
28
+ # @return [Array<String>]
29
+ def remove_harmless_glitches(stderr)
30
+ stderr.split("\n").reject do |line|
31
+ line.include?('[WARN]') ||
32
+ line.include?('warning: parser/current is loading') ||
33
+ line.include?('Please see https://github.com/whitequark')
34
+ end
35
+ end
36
+
26
37
  # @param errors [Array<String>]
27
38
  # @param file [String]
28
39
  # @return [void]
@@ -30,7 +41,7 @@ module Overcommit
30
41
  result = execute(['bundle', 'exec', 'solargraph', 'typecheck', '--level', 'strong', *files])
31
42
  return if result.success?
32
43
 
33
- stderr = result.stderr.split("\n").reject { _1.include? '[WARN]' }
44
+ stderr = remove_harmless_glitches(result.stderr)
34
45
  raise result.stderr unless stderr.empty?
35
46
 
36
47
  # @type [String]
data/Gemfile CHANGED
@@ -5,11 +5,43 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in checkoff.gemspec
6
6
  gemspec
7
7
 
8
- gem 'bump'
9
- gem 'bundler'
8
+ group :development, :test do
9
+ gem 'bundler'
10
+ gem 'mdl'
11
+ gem 'minitest'
12
+ gem 'minitest-profile'
13
+ gem 'minitest-reporters'
14
+ gem 'mocha', ['>= 2']
15
+ # ensure recent definitions
16
+ gem 'rbs'
17
+ # ensure version with branch coverage
18
+ gem 'simplecov', ['>=0.18.0']
19
+ gem 'simplecov-lcov'
20
+ gem 'undercover'
21
+ gem 'webmock'
22
+ end
10
23
 
11
- gem 'brakeman'
12
- gem 'mdl'
24
+ group :development do
25
+ gem 'brakeman'
26
+ gem 'bump'
27
+ gem 'overcommit', ['>=0.64.1', '<0.65.0']
28
+ gem 'punchlist', ['>=1.3.1']
29
+ gem 'rubocop', ['~> 1.52']
30
+ gem 'rubocop-minitest'
31
+ gem 'rubocop-performance'
32
+ gem 'rubocop-rake'
33
+ # ensure version with RSpec/VerifiedDoubleReference
34
+ gem 'rubocop-rspec', ['>=2.10.0']
35
+ # https://github.com/castwide/solargraph/pull/727
36
+ # gem "solargraph", [">=0.50.0"]
37
+ gem 'solargraph',
38
+ git: 'https://github.com/apiology/solargraph',
39
+ branch: 'master'
40
+ gem 'solargraph-rails',
41
+ git: 'https://github.com/apiology/solargraph-rails',
42
+ branch: 'main'
43
+ gem 'yard'
44
+ end
13
45
 
14
46
  # not a direct dependency - but updates a lot and confuses
15
47
  # bump+overcommit+bundler when it unexpectedly updates during the
@@ -17,29 +49,8 @@ gem 'mdl'
17
49
  #
18
50
  # https://app.circleci.com/pipelines/github/apiology/checkoff/1209/workflows/863fa0ce-097e-4a6b-a49f-f6ed62b29908/jobs/2320
19
51
  gem 'mime-types', ['=3.5.1']
20
- gem 'minitest-profile'
21
- gem 'minitest-reporters'
22
- gem 'mocha', ['>= 2']
23
- gem 'ostruct'
24
- gem 'overcommit', ['>=0.64.0', '<0.65.0']
25
52
  gem 'pry'
26
- gem 'punchlist', ['>=1.3.1']
27
53
  gem 'rake'
28
- gem 'rbs'
29
- gem 'rubocop', ['~> 1.52']
30
- gem 'rubocop-minitest'
31
- gem 'rubocop-performance'
32
- gem 'rubocop-rake'
33
- # ensure version with branch coverage
34
- gem 'simplecov', ['>=0.18.0']
35
- gem 'simplecov-lcov'
36
- gem 'solargraph',
37
- git: 'https://github.com/apiology/solargraph',
38
- branch: 'master'
39
- gem 'undercover'
40
- gem 'webmock'
41
- gem 'yard'
42
-
43
54
  # ruby-asana gem is pending key bugfixes for checkoff as of
44
55
  # 2021-07-29:
45
56
  #
data/Gemfile.lock CHANGED
@@ -31,10 +31,19 @@ GIT
31
31
  tilt (~> 2.0)
32
32
  yard (~> 0.9, >= 0.9.24)
33
33
 
34
+ GIT
35
+ remote: https://github.com/apiology/solargraph-rails
36
+ revision: 9dc37915bd4f3b169046e34db6fb32193ab347d8
37
+ branch: main
38
+ specs:
39
+ solargraph-rails (1.1.0)
40
+ activesupport
41
+ solargraph
42
+
34
43
  PATH
35
44
  remote: .
36
45
  specs:
37
- checkoff (0.207.0)
46
+ checkoff (0.208.0)
38
47
  activesupport
39
48
  asana (> 0.10.0)
40
49
  cache_method
@@ -128,7 +137,7 @@ GEM
128
137
  kramdown-parser-gfm (1.1.0)
129
138
  kramdown (~> 2.0)
130
139
  language_server-protocol (3.17.0.3)
131
- logger (1.6.1)
140
+ logger (1.6.2)
132
141
  mdl (0.13.0)
133
142
  kramdown (~> 2.3)
134
143
  kramdown-parser-gfm (~> 1.1)
@@ -139,6 +148,7 @@ GEM
139
148
  mime-types (3.5.1)
140
149
  mime-types-data (~> 3.2015)
141
150
  mime-types-data (3.2023.1205)
151
+ mini_portile2 (2.8.8)
142
152
  minitest (5.21.1)
143
153
  minitest-profile (0.0.2)
144
154
  minitest-reporters (1.6.1)
@@ -157,9 +167,10 @@ GEM
157
167
  multi_xml (0.6.0)
158
168
  multipart-post (2.3.0)
159
169
  mutex_m (0.3.0)
160
- nokogiri (1.16.7-aarch64-linux)
170
+ nokogiri (1.16.7)
171
+ mini_portile2 (~> 2.8.2)
161
172
  racc (~> 1.4)
162
- nokogiri (1.16.7-arm-linux)
173
+ nokogiri (1.16.7-aarch64-linux)
163
174
  racc (~> 1.4)
164
175
  nokogiri (1.16.7-arm64-darwin)
165
176
  racc (~> 1.4)
@@ -173,11 +184,10 @@ GEM
173
184
  multi_json (~> 1.3)
174
185
  multi_xml (~> 0.5)
175
186
  rack (>= 1.2, < 4)
176
- ostruct (0.6.1)
177
- overcommit (0.64.0)
187
+ overcommit (0.64.1)
178
188
  childprocess (>= 0.6.3, < 6)
179
189
  iniparse (~> 1.4)
180
- rexml (~> 3.2)
190
+ rexml (>= 3.3.9)
181
191
  parallel (1.23.0)
182
192
  parser (3.2.2.4)
183
193
  ast (~> 2.4.1)
@@ -196,7 +206,7 @@ GEM
196
206
  regexp_parser (2.8.3)
197
207
  reverse_markdown (2.1.1)
198
208
  nokogiri
199
- rexml (3.2.6)
209
+ rexml (3.3.9)
200
210
  rubocop (1.59.0)
201
211
  json (~> 2.3)
202
212
  language_server-protocol (>= 3.17.0)
@@ -218,6 +228,8 @@ GEM
218
228
  rubocop-ast (>= 1.30.0, < 2.0)
219
229
  rubocop-rake (0.6.0)
220
230
  rubocop (~> 1.0)
231
+ rubocop-rspec (3.0.0)
232
+ rubocop (~> 1.40)
221
233
  ruby-progressbar (1.13.0)
222
234
  ruby2_keywords (0.0.5)
223
235
  rugged (1.6.3)
@@ -263,11 +275,11 @@ DEPENDENCIES
263
275
  checkoff!
264
276
  mdl
265
277
  mime-types (= 3.5.1)
278
+ minitest
266
279
  minitest-profile
267
280
  minitest-reporters
268
281
  mocha (>= 2)
269
- ostruct
270
- overcommit (>= 0.64.0, < 0.65.0)
282
+ overcommit (>= 0.64.1, < 0.65.0)
271
283
  pry
272
284
  punchlist (>= 1.3.1)
273
285
  rake
@@ -276,12 +288,14 @@ DEPENDENCIES
276
288
  rubocop-minitest
277
289
  rubocop-performance
278
290
  rubocop-rake
291
+ rubocop-rspec (>= 2.10.0)
279
292
  simplecov (>= 0.18.0)
280
293
  simplecov-lcov
281
294
  solargraph!
295
+ solargraph-rails!
282
296
  undercover
283
297
  webmock
284
298
  yard
285
299
 
286
300
  BUNDLED WITH
287
- 2.3.27
301
+ 2.5.23
data/Makefile CHANGED
@@ -45,7 +45,7 @@ pip_install: requirements_dev.txt.installed ## Install Python dependencies
45
45
 
46
46
  # bundle install doesn't get run here so that we can catch it below in
47
47
  # fresh-checkout and fresh-rbenv cases
48
- Gemfile.lock: Gemfile
48
+ Gemfile.lock: Gemfile checkoff.gemspec
49
49
 
50
50
  # Ensure any Gemfile.lock changes ensure a bundle is installed.
51
51
  Gemfile.lock.installed: Gemfile.lock
@@ -98,6 +98,11 @@ update_from_cookiecutter: ## Bring in changes from template project used to crea
98
98
  git checkout cookiecutter-template && git push --no-verify
99
99
  git checkout main; overcommit --sign && overcommit --sign pre-commit && git checkout main && git pull && git checkout -b update-from-cookiecutter-$$(date +%Y-%m-%d-%H%M)
100
100
  git merge cookiecutter-template || true
101
+ git checkout --ours Gemfile.lock || true
102
+ # update frequently security-flagged gems while we're here
103
+ bundle update --conservative rexml || true
104
+ git add Gemfile.lock || true
105
+ bundle install || true
101
106
  bundle exec overcommit --install || true
102
107
  @echo
103
108
  @echo "Please resolve any merge conflicts below and push up a PR with:"
@@ -4,86 +4,83 @@
4
4
 
5
5
  require 'overcommit'
6
6
  require 'optparse'
7
+ require 'set'
7
8
 
8
9
  # frozen_string_literal: true
9
10
 
10
- require 'set'
11
-
12
- module Overcommit::HookContext
13
- # Simulates a pre-commit context representing all commits on the
14
- # current feature branch, useful for automated CI scripts in large
15
- # projects where not all unchanged files are assumed to pass.
16
- class FeatureBranch < Base
17
- # @return [Array<String>]
18
- def modified_files
19
- # use git cli to get the list of files changed on this feature branch
20
- # @sg-ignore
21
- # @type [Array<String>]
22
- @modified_files ||= begin
11
+ module Overcommit
12
+ module HookContext
13
+ # Simulates a pre-commit context representing all commits on the
14
+ # current feature branch, useful for automated CI scripts in large
15
+ # projects where not all unchanged files are assumed to pass.
16
+ class FeatureBranch < Base
17
+ # @return [Array<String>]
18
+ def modified_files
19
+ # use git cli to get the list of files changed on this feature branch
23
20
  # @sg-ignore
24
21
  # @type [Array<String>]
25
- relative_filenames = `git diff --name-only origin/main...HEAD`.split("\n")
26
- absolute_filenames = relative_filenames.map { |f| File.expand_path(f) }
27
- absolute_filenames.select { |f| File.exist?(f) }
22
+ @modified_files ||= begin
23
+ # @sg-ignore
24
+ # @type [Array<String>]
25
+ relative_filenames = `git diff --name-only origin/main...HEAD`.split("\n")
26
+ absolute_filenames = relative_filenames.map { |f| File.expand_path(f) }
27
+ absolute_filenames.select { |f| File.exist?(f) }
28
+ end
28
29
  end
29
- end
30
30
 
31
- # @param file [String]
32
- #
33
- # @return [Set]
34
- def modified_lines_in_file(file)
35
- modified_lines = Set.new
31
+ # @param file [String]
32
+ #
33
+ # @return [Set]
34
+ def modified_lines_in_file(file)
35
+ # use git cli to get the list of lines changed in this file on this feature branch
36
+ # @sg-ignore
37
+ # @type [Array<String>]
38
+ lines = `git diff -U0 origin/main...HEAD -- #{file}`.split("\n")
39
+
40
+ modified_lines = Set.new
36
41
 
37
- # use git cli to get the list of lines changed in this file on this feature branch
38
- # @sg-ignore
39
- # @type [Array<String>]
40
- lines = `git diff -U0 origin/main...HEAD -- #{file}`.split("\n")
42
+ lines.each do |line|
43
+ next unless line =~ /^@@ -\d+,\d+ \+(\d+),(\d+)/
41
44
 
42
- lines.each do |line|
43
- if line =~ /^@@ -\d+,\d+ \+(\d+),(\d+)/
44
45
  first_line = Regexp.last_match(1).to_i
45
46
  last_line = first_line + Regexp.last_match(2).to_i - 1
46
- # add each line # to modified_lines
47
- (first_line..last_line).each do |line_number|
48
- modified_lines << line_number
49
- end
47
+ this_file_lines = (first_line..last_line)
48
+ modified_lines.merge(this_file_lines)
50
49
  end
51
- end
52
50
 
53
- modified_lines
54
- end
51
+ modified_lines.to_set
52
+ end
55
53
 
56
- def hook_class_name
57
- 'PreCommit'
58
- end
54
+ def hook_class_name
55
+ 'PreCommit'
56
+ end
59
57
 
60
- def hook_type_name
61
- 'pre_commit'
62
- end
58
+ def hook_type_name
59
+ 'pre_commit'
60
+ end
63
61
 
64
- def hook_script_name
65
- 'pre-commit'
66
- end
62
+ def hook_script_name
63
+ 'pre-commit'
64
+ end
67
65
 
68
- def initial_commit?
69
- return @initial_commit unless @initial_commit.nil?
66
+ def initial_commit?
67
+ return @initial_commit unless @initial_commit.nil?
70
68
 
71
- @initial_commit = Overcommit::GitRepo.initial_commit?
72
- end
69
+ @initial_commit = Overcommit::GitRepo.initial_commit?
70
+ end
73
71
 
74
- private
72
+ private
75
73
 
76
- # @param file [IO]
77
- #
78
- # @return [Integer]
79
- def count_lines(file)
80
- File.foreach(file).count
74
+ # @param file [IO]
75
+ #
76
+ # @return [Integer]
77
+ def count_lines(file)
78
+ File.foreach(file).count
79
+ end
81
80
  end
82
81
  end
83
82
  end
84
83
 
85
- # Returns the configuration for this repository.
86
-
87
84
  # Used for ease of stubbing in tests
88
85
  # @param status [Integer] The exit status to return
89
86
  # @return [void]
@@ -94,7 +91,7 @@ end
94
91
  # @return [Overcommit::Logger]
95
92
  def log
96
93
  # @sg-ignore
97
- @log ||= Overcommit::Logger.new(STDOUT)
94
+ @log ||= Overcommit::Logger.new($stdout)
98
95
  end
99
96
 
100
97
  # @param options [Hash]
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #
3
4
  # https://gist.github.com/castwide/28b349566a223dfb439a337aea29713e
4
5
  #
data/fix.sh CHANGED
@@ -1,5 +1,22 @@
1
1
  #!/bin/bash -eu
2
2
 
3
+ if [ -n "${FIX_SH_TIMING_LOG+x}" ]; then
4
+ rm -f "${FIX_SH_TIMING_LOG}"
5
+ fi
6
+
7
+ debug_timing() {
8
+ if [ -n "${FIX_SH_TIMING_LOG+x}" ]; then
9
+ # shellcheck disable=SC2034
10
+ _lastcmd=$(ruby -e "puts (Time.now.to_f * 1000).to_i")
11
+ last_command='start'
12
+ # shellcheck disable=SC2154
13
+ trap '_now=$(ruby -e "puts (Time.now.to_f * 1000).to_i"); duration=$((_now - _lastcmd)); echo ${duration} ms: $last_command >> '"${FIX_SH_TIMING_LOG}"'; last_command="$BASH_COMMAND" >> '"${FIX_SH_TIMING_LOG}"'; _lastcmd=$_now' DEBUG
14
+ fi
15
+ }
16
+
17
+ # copy this into any function you want to debug further
18
+ debug_timing
19
+
3
20
  set -o pipefail
4
21
 
5
22
  apt_upgraded=0
@@ -98,6 +115,24 @@ ensure_dev_library() {
98
115
  fi
99
116
  }
100
117
 
118
+ ensure_binary_library() {
119
+ library_base_name=${1:?library base name - like libfoo}
120
+ homebrew_package=${2:?homebrew package}
121
+ apt_package=${3:-${homebrew_package}}
122
+ if ! [ -f /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/"${library_base_name}*.dylib" ] && \
123
+ ! [ -f /opt/homebrew/lib/"${library_base_name}*.dylib" ] && \
124
+ ! [ -f /usr/lib/"${library_base_name}.so" ] && \
125
+ ! [ -f /usr/lib/x86_64-linux-gnu/"${library_base_name}.so" ] && \
126
+ ! [ -f /usr/local/lib/"${library_base_name}.so" ] && \
127
+ ! [ -f /usr/local/opt/"${homebrew_package}/lib/${library_base_name}*.dylib" ]
128
+ then
129
+ if ! compgen -G "/opt/homebrew/Cellar/${homebrew_package}"*/*/"lib/${library_base_name}"*.dylib
130
+ then
131
+ install_package "${homebrew_package}" "${apt_package}"
132
+ fi
133
+ fi
134
+ }
135
+
101
136
  ensure_ruby_build_requirements() {
102
137
  ensure_dev_library readline/readline.h readline libreadline-dev
103
138
  ensure_dev_library zlib.h zlib zlib1g-dev
@@ -108,7 +143,12 @@ ensure_ruby_build_requirements() {
108
143
  ensure_latest_ruby_build_definitions() {
109
144
  ensure_rbenv
110
145
 
111
- git -C "$(rbenv root)"/plugins/ruby-build pull
146
+ # last_pulled_unix_epoch="$(stat -f '%m' "$(rbenv root)"/plugins/ruby-build/.git/FETCH_HEAD)"
147
+ # # if not pulled in last 24 hours
148
+ # if [ $(( $(date +%s) - last_pulled_unix_epoch )) -gt $(( 24 * 60 * 60 )) ]
149
+ # then
150
+ git -C "$(rbenv root)"/plugins/ruby-build pull
151
+ # fi
112
152
  }
113
153
 
114
154
  # You can find out which feature versions are still supported / have
@@ -193,10 +233,7 @@ ensure_bundle() {
193
233
  #
194
234
  # This affects nokogiri, which will try to reinstall itself in
195
235
  # Docker builds where it's already installed if this is not run.
196
- for platform in arm64-darwin-23 x86_64-darwin-23 x86_64-linux x86_64-linux-musl aarch64-linux arm64-linux
197
- do
198
- grep "${platform:?}" Gemfile.lock >/dev/null 2>&1 || bundle lock --add-platform "${platform:?}"
199
- done
236
+ bundle lock --add-platform arm64-darwin-23 x86_64-darwin-23 x86_64-linux x86_64-linux-musl aarch64-linux arm64-linux
200
237
  }
201
238
 
202
239
  set_ruby_local_version() {
@@ -258,6 +295,20 @@ ensure_pyenv() {
258
295
  fi
259
296
  }
260
297
 
298
+ ensure_package() {
299
+ homebrew_package=${1:?homebrew package}
300
+ apt_package=${2:-${homebrew_package}}
301
+ binary=${3:-${homebrew_package}}
302
+ if ! [ -f /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/bin/"${binary}" ] && \
303
+ ! [ -f /opt/homebrew/bin/"${binary}" ] && \
304
+ ! [ -f /usr/bin/"${binary}" ] && \
305
+ ! [ -f /usr/local/bin/"${binary}" ] && \
306
+ ! [ -f /usr/local/opt/"${homebrew_package}"/bin/"${binary}" ]
307
+ then
308
+ install_package "${homebrew_package}" "${apt_package}"
309
+ fi
310
+ }
311
+
261
312
  install_package() {
262
313
  homebrew_package=${1:?homebrew package}
263
314
  apt_package=${2:-${homebrew_package}}
@@ -337,9 +388,15 @@ ensure_python_versions() {
337
388
  ensure_pyenv_virtualenvs() {
338
389
  latest_python_version="$(cut -d' ' -f1 <<< "${python_versions}")"
339
390
  virtualenv_name="checkoff-${latest_python_version}"
340
- pyenv virtualenv "${latest_python_version}" "${virtualenv_name}" || true
391
+ if ! [ -d ~/".pyenv/versions/${virtualenv_name}" ]
392
+ then
393
+ pyenv virtualenv "${latest_python_version}" "${virtualenv_name}" || true
394
+ fi
341
395
  # You can use this for your global stuff!
342
- pyenv virtualenv "${latest_python_version}" mylibs || true
396
+ if ! [ -d ~/".pyenv/versions/mylibs" ]
397
+ then
398
+ pyenv virtualenv "${latest_python_version}" mylibs || true
399
+ fi
343
400
  # shellcheck disable=SC2086
344
401
  pyenv local "${virtualenv_name}" ${python_versions} mylibs
345
402
  }
@@ -376,6 +433,7 @@ ensure_overcommit() {
376
433
  if [ -d .git ]
377
434
  then
378
435
  bundle exec overcommit --install
436
+ bundle exec overcommit --sign
379
437
  bundle exec overcommit --sign pre-commit
380
438
  else
381
439
  >&2 echo 'Not in a git repo; not installing git hooks'
@@ -383,9 +441,9 @@ ensure_overcommit() {
383
441
  }
384
442
 
385
443
  ensure_rugged_packages_installed() {
386
- install_package icu4c libicu-dev # needed by rugged, needed by undercover
387
- install_package pkg-config # needed by rugged, needed by undercover
388
- install_package cmake # needed by rugged, needed by undercover
444
+ ensure_binary_library libicuio icu4c libicu-dev # needed by rugged, needed by undercover
445
+ ensure_package pkg-config # needed by rugged, needed by undercover
446
+ ensure_package cmake # needed by rugged, needed by undercover
389
447
  }
390
448
 
391
449
  ensure_rbenv
@@ -3,5 +3,5 @@
3
3
  # Command-line and gem client for Asana (unofficial)
4
4
  module Checkoff
5
5
  # Version of library
6
- VERSION = '0.207.0'
6
+ VERSION = '0.208.0'
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.207.0
4
+ version: 0.208.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz