image_optim 0.31.3 → 0.31.4

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: edffa5fea26babe4654e681a829753b7df3d5d80a158a7b3d2974e97b46a49a5
4
- data.tar.gz: 467cdc261c726ac97b5252b6b93507e4fac6e5d3804bd7fc17636ba32a6f565a
3
+ metadata.gz: 28ea4eea777b5a6eac029c628c28509b70d65f5784ef16466c26b758d189d88b
4
+ data.tar.gz: b4cdec32a6fde2d92b7c3382b14fb90c094e523e46c79fd8fc24d21737348167
5
5
  SHA512:
6
- metadata.gz: '0379e12d0d4ef8dd0af9e047a728bc9acf0177136b83b9b4aced834238067d0ab3248350bc1813cc76b33eaa3fc5751032a72c14f03a81d3dad9eed61abb0b99'
7
- data.tar.gz: 68489aa06564d6f8555adf409c23454fb4b9d57fa74117cd9b1174787ad65bc56a101a8cce9e455ba0e3474f1a1b7e8c8b9707549768be1bb3a94a063c200721
6
+ metadata.gz: ad0b465ae7de080c2af44efaaeea7a7b17b8bc343faa0f8034105b027362abfc952bf72fead0d9c30f368a94cb74a1a7d2e19d49b07c626f49bfb59b99f4de69
7
+ data.tar.gz: 8d7070adae2ff71fe71df2ffaf25addb42acdddca2a427bcfad3f91cd3138d0fccfc2b3284d2cf146dd8f513be9c88a4b9c2f378d6564bcfdf629f5f6ee492cf
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
@@ -10,49 +10,69 @@ jobs:
10
10
  strategy:
11
11
  matrix:
12
12
  ruby:
13
- - '2.0'
14
- - '2.1'
15
- - '2.2'
16
- - '2.3'
17
- - '2.4'
18
- - '2.5'
19
- - '2.6'
13
+ - '1.9.3'
20
14
  - '2.7'
21
15
  - '3.0'
22
16
  - '3.1'
23
17
  - '3.2'
24
- - jruby-9.3
18
+ - '3.3'
25
19
  - jruby-9.4
26
20
  fail-fast: false
27
21
  steps:
28
- - uses: actions/checkout@v3
22
+ - uses: actions/checkout@v4
29
23
  - uses: ruby/setup-ruby@v1
30
24
  with:
31
25
  ruby-version: "${{ matrix.ruby }}"
32
26
  bundler-cache: true
33
- - run: sudo npm install -g svgo
34
- - run: curl -L "https://github.com/shssoichiro/oxipng/releases/download/v4.0.3/oxipng-4.0.3-x86_64-unknown-linux-musl.tar.gz" | tar -xz -C /usr/local/bin --strip-components 1 --wildcards '*oxipng'
27
+ - run: npm install -g svgo
35
28
  - run: bundle exec image_optim --info
36
29
  - run: bundle exec rspec
30
+ containers:
31
+ runs-on: ubuntu-latest
32
+ container: ${{ matrix.container }}
33
+ strategy:
34
+ matrix:
35
+ container:
36
+ - debian:buster
37
+ - debian:bullseye
38
+ - debian:bookworm
39
+ # - alpine
40
+ fail-fast: false
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ - run: |
44
+ if command -v apt-get &> /dev/null; then
45
+ apt-get update
46
+ apt-get -y install make gcc git curl imagemagick ruby ruby-dev rubygems
47
+ fi
48
+ - run: |
49
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
50
+ . ~/.nvm/nvm.sh
51
+ nvm install 20
52
+ echo "PATH=$PATH" >> $GITHUB_ENV
53
+ - run: npm install -g svgo
54
+ - run: gem install bundler || gem install bundler --version '< 2.4'
55
+ - run: bundle install
56
+ - run: bundle exec bin/image_optim --info
57
+ - run: bundle exec rspec
37
58
  windows:
38
59
  runs-on: windows-latest
39
60
  strategy:
40
61
  matrix:
41
62
  ruby:
42
- - '2.6'
43
63
  - '2.7'
44
64
  - '3.0'
45
65
  - '3.1'
46
66
  - '3.2'
67
+ - '3.3'
47
68
  fail-fast: false
48
- continue-on-error: ${{ matrix.ruby == '3.2' }}
49
69
  steps:
50
- - uses: actions/checkout@v3
70
+ - uses: actions/checkout@v4
51
71
  - uses: ruby/setup-ruby@v1
52
72
  with:
53
73
  ruby-version: "${{ matrix.ruby }}"
54
74
  bundler-cache: true
55
- - uses: actions/cache@v2
75
+ - uses: actions/cache@v4
56
76
  with:
57
77
  path: "$HOME/bin"
58
78
  key: ${{ runner.os }}
@@ -67,18 +87,26 @@ jobs:
67
87
  - run: npm install -g svgo
68
88
  - run: bundle exec image_optim --info
69
89
  - run: bundle exec rspec
90
+ update_worker_options_in_readme:
91
+ runs-on: ubuntu-latest
92
+ steps:
93
+ - uses: actions/checkout@v4
94
+ - uses: ruby/setup-ruby@v1
95
+ with:
96
+ ruby-version: '3'
97
+ bundler-cache: true
98
+ - run: script/update_worker_options_in_readme -n
70
99
  coverage:
71
100
  runs-on: ubuntu-latest
72
101
  env:
73
102
  CC_TEST_REPORTER_ID: b433c6540d220a2da0663670c9b260806bafdb3a43c6f22b2e81bfb1f87b12fe
74
103
  steps:
75
- - uses: actions/checkout@v3
104
+ - uses: actions/checkout@v4
76
105
  - uses: ruby/setup-ruby@v1
77
106
  with:
78
107
  ruby-version: '3'
79
108
  bundler-cache: true
80
- - run: sudo npm install -g svgo
81
- - run: curl -L "https://github.com/shssoichiro/oxipng/releases/download/v4.0.3/oxipng-4.0.3-x86_64-unknown-linux-musl.tar.gz" | tar -xz -C /usr/local/bin --strip-components 1 --wildcards '*oxipng'
82
- - uses: paambaati/codeclimate-action@v2.7.5
109
+ - run: npm install -g svgo
110
+ - uses: paambaati/codeclimate-action@v9
83
111
  with:
84
112
  coverageCommand: bundle exec rspec
@@ -8,7 +8,7 @@ jobs:
8
8
  rubocop:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/checkout@v3
11
+ - uses: actions/checkout@v4
12
12
  - uses: ruby/setup-ruby@v1
13
13
  with:
14
14
  ruby-version: '3'
data/.rubocop.yml CHANGED
@@ -88,6 +88,9 @@ Style/AccessorGrouping:
88
88
  Style/Alias:
89
89
  EnforcedStyle: prefer_alias_method
90
90
 
91
+ Style/ArgumentsForwarding:
92
+ Enabled: false
93
+
91
94
  Style/DoubleNegation:
92
95
  Enabled: false
93
96
 
data/CHANGELOG.markdown CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## unreleased
4
4
 
5
+ ## v0.31.4 (2024-11-19)
6
+
7
+ * Added `--svgo-allow-lossy` and `--svgo-precision` options to use svgo in lossy mode. This sets svgo `--precision`, which can result in substantially smaller svgs (see [#211](https://github.com/toy/image_optim/issues/211) for some experiments). Lower values are more lossy. 3 is the default, but many SVGs will work well even with 0 or 1. Like all worker specific lossy flags, this is also enabled with `--allow-lossy`. [#210](https://github.com/toy/image_optim/issues/210) [#211](https://github.com/toy/image_optim/issues/211) [@gurgeous](https://github.com/gurgeous)
8
+
5
9
  ## v0.31.3 (2023-02-17)
6
10
 
7
11
  * Support Psych4/Ruby 3.1 changes to use safe_yaml methods by default [#203](https://github.com/toy/image_optim/issues/203) [#204](https://github.com/toy/image_optim/pull/204) [@oscillot](https://github.com/oscillot) [@toy](https://github.com/toy)
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012-2023 Ivan Kuchin
1
+ Copyright (c) 2012-2024 Ivan Kuchin
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.markdown CHANGED
@@ -375,6 +375,8 @@ Worker has no options
375
375
  ### svgo:
376
376
  * `:disable_plugins` — List of plugins to disable *(defaults to `[]`)*
377
377
  * `:enable_plugins` — List of plugins to enable *(defaults to `[]`)*
378
+ * `:allow_lossy` — Allow precision option *(defaults to `false`)*
379
+ * `:precision` — Number of digits in the fractional part `0`..`20`, ignored in default/lossless mode *(defaults to `3`)*
378
380
 
379
381
  <!---</worker-options>-->
380
382
 
@@ -390,4 +392,4 @@ In separate file [CHANGELOG.markdown](CHANGELOG.markdown).
390
392
 
391
393
  ## Copyright
392
394
 
393
- Copyright (c) 2012-2023 Ivan Kuchin. See [LICENSE.txt](LICENSE.txt) for details.
395
+ Copyright (c) 2012-2024 Ivan Kuchin. See [LICENSE.txt](LICENSE.txt) for details.
data/image_optim.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'image_optim'
5
- s.version = '0.31.3'
5
+ s.version = '0.31.4'
6
6
  s.summary = %q{Command line tool and ruby interface to optimize (lossless compress, optionally lossy) jpeg, png, gif and svg images using external utilities (advpng, gifsicle, jhead, jpeg-recompress, jpegoptim, jpegrescan, jpegtran, optipng, oxipng, pngcrush, pngout, pngquant, svgo)}
7
7
  s.homepage = "https://github.com/toy/#{s.name}"
8
8
  s.authors = ['Ivan Kuchin']
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  'changelog_uri' => "https://github.com/toy/#{s.name}/blob/master/CHANGELOG.markdown",
16
16
  'documentation_uri' => "https://www.rubydoc.info/gems/#{s.name}/#{s.version}",
17
17
  'source_code_uri' => "https://github.com/toy/#{s.name}",
18
- }
18
+ } if s.respond_to?(:metadata=)
19
19
 
20
20
  s.files = `git ls-files`.split("\n")
21
21
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -34,8 +34,8 @@ class ImageOptim
34
34
  def help
35
35
  text = super
36
36
 
37
- # reserve one column
38
- columns = terminal_columns - 1
37
+ # reserve one column and limit to 120
38
+ columns = [terminal_columns - 1, 120].min
39
39
  # 1 for distance between summary and description
40
40
  # 2 for additional indent
41
41
  wrapped_indent = summary_indent + (' ' * (summary_width + 1 + 2))
@@ -43,20 +43,7 @@ class ImageOptim
43
43
  # don't try to wrap if there is too little space for description
44
44
  return text if wrapped_width < 20
45
45
 
46
- wrapped = ''.dup
47
- text.split("\n").each do |line|
48
- if line.length <= columns
49
- wrapped << line << "\n"
50
- else
51
- indented = line =~ /^\s/
52
- wrapped << line.slice!(wrap_regex(columns)) << "\n"
53
- line.scan(wrap_regex(wrapped_width)) do |part|
54
- wrapped << wrapped_indent if indented
55
- wrapped << part << "\n"
56
- end
57
- end
58
- end
59
- wrapped
46
+ wrapped_text(text, wrapped_width, wrapped_indent, columns)
60
47
  end
61
48
 
62
49
  private
@@ -66,6 +53,27 @@ class ImageOptim
66
53
  stty_columns ? stty_columns.to_i : `tput cols`.to_i
67
54
  end
68
55
 
56
+ def wrapped_text(text, wrapped_width, wrapped_indent, columns)
57
+ wrapped = []
58
+ text.split("\n").each do |line|
59
+ if line.length <= columns
60
+ wrapped << line << "\n"
61
+ else
62
+ wrapped << line.slice!(wrap_regex(columns)).rstrip << "\n"
63
+ if line =~ /^\s/
64
+ line.scan(wrap_regex(wrapped_width)) do |part|
65
+ wrapped << wrapped_indent << part.rstrip << "\n"
66
+ end
67
+ else
68
+ line.scan(wrap_regex(columns)) do |part|
69
+ wrapped << part.rstrip << "\n"
70
+ end
71
+ end
72
+ end
73
+ end
74
+ wrapped.join(nil)
75
+ end
76
+
69
77
  def wrap_regex(width)
70
78
  /.*?.{1,#{width}}(?:\s|\z)/
71
79
  end
@@ -96,30 +104,25 @@ ImageOptim::Runner::OptionParser::DEFINE = proc do |op, options|
96
104
  |
97
105
  TEXT
98
106
 
99
- op.on('--config-paths PATH1,PATH2', Array, 'Config paths to use instead of ' \
100
- 'default ones') do |paths|
107
+ op.on('--config-paths PATH1,PATH2', Array, 'Config paths to use instead of default ones') do |paths|
101
108
  options[:config_paths] = paths
102
109
  end
103
110
 
104
111
  op.separator nil
105
112
 
106
- op.on('-r', '-R', '--recursive', 'Recursively scan directories ' \
107
- 'for images') do |recursive|
113
+ op.on('-r', '-R', '--recursive', 'Recursively scan directories for images') do |recursive|
108
114
  options[:recursive] = recursive
109
115
  end
110
116
 
111
- op.on("--exclude-dir 'GLOB'", 'Glob for excluding directories ' \
112
- '(defaults to .*)') do |glob|
117
+ op.on("--exclude-dir 'GLOB'", 'Glob for excluding directories (defaults to .*)') do |glob|
113
118
  options[:exclude_dir_glob] = glob
114
119
  end
115
120
 
116
- op.on("--exclude-file 'GLOB'", 'Glob for excluding files ' \
117
- '(defaults to .*)') do |glob|
121
+ op.on("--exclude-file 'GLOB'", 'Glob for excluding files (defaults to .*)') do |glob|
118
122
  options[:exclude_file_glob] = glob
119
123
  end
120
124
 
121
- op.on("--exclude 'GLOB'", 'Set glob for excluding both directories and ' \
122
- 'files') do |glob|
125
+ op.on("--exclude 'GLOB'", 'Set glob for excluding both directories and files') do |glob|
123
126
  options[:exclude_file_glob] = options[:exclude_dir_glob] = glob
124
127
  end
125
128
 
@@ -129,41 +132,42 @@ ImageOptim::Runner::OptionParser::DEFINE = proc do |op, options|
129
132
  options[:show_progress] = show_progress
130
133
  end
131
134
 
132
- op.on('--[no-]threads N', Integer, 'Number of threads or disable ' \
133
- '(defaults to number of processors)') do |threads|
135
+ op.on('--[no-]threads N', Integer, 'Number of threads or disable (defaults to number of processors)') do |threads|
134
136
  options[:threads] = threads
135
137
  end
136
138
 
137
- op.on('--[no-]nice N', Integer, 'Nice level, priority of all used tools ' \
138
- 'with higher value meaning lower priority, in range -20..19, negative ' \
139
- 'values can be set only if run by root user (defaults to 10)') do |nice|
139
+ op.on(
140
+ '--[no-]nice N',
141
+ Integer,
142
+ 'Nice level, priority of all used tools with higher value meaning lower priority, in range -20..19, negative ' \
143
+ 'values can be set only if run by root user (defaults to 10)'
144
+ ) do |nice|
140
145
  options[:nice] = nice
141
146
  end
142
147
 
143
- op.on('--[no-]pack', 'Require image_optim_pack or disable it, ' \
144
- 'by default image_optim_pack will be used if available, ' \
145
- 'will turn on skip-missing-workers unless explicitly disabled') do |pack|
148
+ op.on(
149
+ '--[no-]pack',
150
+ 'Require image_optim_pack or disable it, by default image_optim_pack will be used if available, will turn on ' \
151
+ 'skip-missing-workers unless explicitly disabled'
152
+ ) do |pack|
146
153
  options[:pack] = pack
147
154
  end
148
155
 
149
156
  op.separator nil
150
157
  op.separator ' Caching:'
151
158
 
152
- op.on('--cache-dir DIR', 'Cache optimized images ' \
153
- 'into the specified directory') do |cache_dir|
159
+ op.on('--cache-dir DIR', 'Cache optimized images into the specified directory') do |cache_dir|
154
160
  options[:cache_dir] = cache_dir
155
161
  end
156
162
 
157
- op.on('--cache-worker-digests', 'Cache worker digests ' \
158
- '(updating workers invalidates cache)') do |cache_worker_digests|
163
+ op.on('--cache-worker-digests', 'Cache worker digests (updating workers invalidates cache)') do |cache_worker_digests|
159
164
  options[:cache_worker_digests] = cache_worker_digests
160
165
  end
161
166
 
162
167
  op.separator nil
163
168
  op.separator ' Disabling workers:'
164
169
 
165
- op.on('--[no-]skip-missing-workers', 'Skip workers with missing or ' \
166
- 'problematic binaries') do |skip|
170
+ op.on('--[no-]skip-missing-workers', 'Skip workers with missing or problematic binaries') do |skip|
167
171
  options[:skip_missing_workers] = skip
168
172
  end
169
173
 
@@ -177,8 +181,7 @@ ImageOptim::Runner::OptionParser::DEFINE = proc do |op, options|
177
181
  op.separator nil
178
182
  op.separator ' Worker options:'
179
183
 
180
- op.on('--allow-lossy', 'Allow lossy workers and ' \
181
- 'optimizations') do |allow_lossy|
184
+ op.on('--allow-lossy', 'Allow lossy workers and optimizations') do |allow_lossy|
182
185
  options[:allow_lossy] = allow_lossy
183
186
  end
184
187
 
@@ -229,9 +232,12 @@ ImageOptim::Runner::OptionParser::DEFINE = proc do |op, options|
229
232
  op.separator nil
230
233
  op.separator ' Common options:'
231
234
 
232
- op.on_tail('-v', '--verbose', 'Verbose output (show global and worker ' \
233
- 'config, binary resolution log, information about each tool invocation, ' \
234
- 'backtrace of exception)') do
235
+ op.on_tail(
236
+ '-v',
237
+ '--verbose',
238
+ 'Verbose output (show global and worker config, binary resolution log, information about each tool invocation, ' \
239
+ 'backtrace of exception)'
240
+ ) do
235
241
  options[:verbose] = true
236
242
  end
237
243
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'image_optim/option_helpers'
3
4
  require 'image_optim/worker'
4
5
 
5
6
  class ImageOptim
@@ -16,6 +17,24 @@ class ImageOptim
16
17
  Array(v).map(&:to_s)
17
18
  end
18
19
 
20
+ ALLOW_LOSSY_OPTION =
21
+ option(:allow_lossy, false, 'Allow precision option'){ |v| !!v }
22
+
23
+ PRECISION_OPTION =
24
+ option(:precision, 3, 'Number of digits in the fractional part ' \
25
+ '`0`..`20`, ignored in default/lossless mode') \
26
+ do |v, opt_def|
27
+ if allow_lossy
28
+ OptionHelpers.limit_with_range(v.to_i, 0..20)
29
+ else
30
+ if v != opt_def.default
31
+ warn "#{self.class.bin_sym} #{opt_def.name} #{v} ignored " \
32
+ 'in default/lossless mode'
33
+ end
34
+ opt_def.default
35
+ end
36
+ end
37
+
19
38
  def optimize(src, dst, options = {})
20
39
  args = %W[
21
40
  --input #{src}
@@ -27,6 +46,7 @@ class ImageOptim
27
46
  enable_plugins.each do |plugin_name|
28
47
  args.unshift "--enable=#{plugin_name}"
29
48
  end
49
+ args.unshift "--precision=#{precision}" if allow_lossy
30
50
  execute(:svgo, args, options) && optimized?(src, dst)
31
51
  end
32
52
  end
@@ -51,8 +51,21 @@ def update_readme(text)
51
51
  end
52
52
 
53
53
  readme = File.read(README_FILE)
54
- if (readme = update_readme(readme))
55
- File.write(README_FILE, readme)
54
+ program_name = File.basename($PROGRAM_NAME, '.*')
55
+ case ARGV
56
+ when []
57
+ if (readme = update_readme(readme))
58
+ File.write(README_FILE, readme)
59
+ else
60
+ abort 'Did not update worker options'
61
+ end
62
+ when %w[-n]
63
+ updated = update_readme(readme)
64
+ unless updated == readme
65
+ puts "Run #{program_name} to update work options in readme"
66
+ IO.popen('diff -u README.markdown -', 'w'){ |f| f << updated }
67
+ exit 1
68
+ end
56
69
  else
57
- abort 'Did not update worker options'
70
+ abort "#{program_name} [-n] (-n to change exit code instead of updating)"
58
71
  end
@@ -101,7 +101,16 @@ describe ImageOptim::Runner::OptionParser do
101
101
  allow(parser).to receive(:terminal_columns).and_return(80)
102
102
 
103
103
  expect(parser.help.split("\n")).
104
- to all(satisfy{ |line| line.length <= 80 })
104
+ to all(satisfy{ |line| line.length < 80 })
105
+ end
106
+
107
+ it 'wraps texts even for too wide terminals' do
108
+ parser = OptionParser.new({})
109
+
110
+ allow(parser).to receive(:terminal_columns).and_return(1000)
111
+
112
+ expect(parser.help.split("\n")).
113
+ to all(satisfy{ |line| line.length <= 120 })
105
114
  end
106
115
  end
107
116
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'image_optim/worker/svgo'
5
+
6
+ describe ImageOptim::Worker::Svgo do
7
+ describe 'precision option' do
8
+ describe 'default' do
9
+ subject{ described_class::PRECISION_OPTION.default }
10
+
11
+ it{ is_expected.to eq(3) }
12
+ end
13
+
14
+ describe 'value' do
15
+ let(:subject){ described_class.new(ImageOptim.new, options).precision }
16
+
17
+ context 'when lossy not allowed' do
18
+ context 'by default' do
19
+ let(:options){ {} }
20
+
21
+ it{ is_expected.to eq(3) }
22
+ end
23
+
24
+ context 'when value is passed through options' do
25
+ let(:options){ {precision: 5} }
26
+
27
+ it 'warns and keeps default' do
28
+ expect_any_instance_of(described_class).
29
+ to receive(:warn).with(%r{ignored in default/lossless mode})
30
+ is_expected.to eq(3)
31
+ end
32
+ end
33
+ end
34
+
35
+ context 'when lossy allowed' do
36
+ context 'by default' do
37
+ let(:options){ {allow_lossy: true} }
38
+
39
+ it{ is_expected.to eq(3) }
40
+ end
41
+
42
+ context 'when value is passed through options' do
43
+ let(:options){ {allow_lossy: true, precision: 5} }
44
+
45
+ it 'sets the value without warning' do
46
+ expect_any_instance_of(described_class).not_to receive(:warn)
47
+ is_expected.to eq(5)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_optim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.31.3
4
+ version: 0.31.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Kuchin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-17 00:00:00.000000000 Z
11
+ date: 2024-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fspath
@@ -173,8 +173,8 @@ executables:
173
173
  extensions: []
174
174
  extra_rdoc_files: []
175
175
  files:
176
+ - ".github/dependabot.yml"
176
177
  - ".github/workflows/check.yml"
177
- - ".github/workflows/codeql.yml"
178
178
  - ".github/workflows/rubocop.yml"
179
179
  - ".gitignore"
180
180
  - ".pre-commit-hooks.yaml"
@@ -256,6 +256,7 @@ files:
256
256
  - spec/image_optim/worker/optipng_spec.rb
257
257
  - spec/image_optim/worker/oxipng_spec.rb
258
258
  - spec/image_optim/worker/pngquant_spec.rb
259
+ - spec/image_optim/worker/svgo_spec.rb
259
260
  - spec/image_optim/worker_spec.rb
260
261
  - spec/image_optim_spec.rb
261
262
  - spec/images/broken_jpeg
@@ -293,7 +294,7 @@ licenses:
293
294
  metadata:
294
295
  bug_tracker_uri: https://github.com/toy/image_optim/issues
295
296
  changelog_uri: https://github.com/toy/image_optim/blob/master/CHANGELOG.markdown
296
- documentation_uri: https://www.rubydoc.info/gems/image_optim/0.31.3
297
+ documentation_uri: https://www.rubydoc.info/gems/image_optim/0.31.4
297
298
  source_code_uri: https://github.com/toy/image_optim
298
299
  post_install_message: |
299
300
  Rails image assets optimization is extracted into image_optim_rails gem
@@ -312,7 +313,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
312
313
  - !ruby/object:Gem::Version
313
314
  version: '0'
314
315
  requirements: []
315
- rubygems_version: 3.3.26
316
+ rubygems_version: 3.5.23
316
317
  signing_key:
317
318
  specification_version: 4
318
319
  summary: Command line tool and ruby interface to optimize (lossless compress, optionally
@@ -344,6 +345,7 @@ test_files:
344
345
  - spec/image_optim/worker/optipng_spec.rb
345
346
  - spec/image_optim/worker/oxipng_spec.rb
346
347
  - spec/image_optim/worker/pngquant_spec.rb
348
+ - spec/image_optim/worker/svgo_spec.rb
347
349
  - spec/image_optim/worker_spec.rb
348
350
  - spec/image_optim_spec.rb
349
351
  - spec/images/broken_jpeg
@@ -1,30 +0,0 @@
1
- name: codeql
2
- on:
3
- push:
4
- pull_request:
5
- schedule:
6
- - cron: '43 20 * * 0'
7
-
8
- jobs:
9
- analyze:
10
- runs-on: ubuntu-latest
11
- permissions:
12
- actions: read
13
- contents: read
14
- security-events: write
15
-
16
- strategy:
17
- fail-fast: false
18
- matrix:
19
- language: [ 'ruby' ]
20
-
21
- steps:
22
- - uses: actions/checkout@v3
23
-
24
- - uses: github/codeql-action/init@v1
25
- with:
26
- languages: ${{ matrix.language }}
27
-
28
- - uses: github/codeql-action/autobuild@v1
29
-
30
- - uses: github/codeql-action/analyze@v1