excavate 0.3.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9ea70e2de46706b2324d98253d9012d175a706fc010478a0ccb1b6af00fc02e
4
- data.tar.gz: 51c3c8e44013e17201114f4315b4314d9f44dc645c41d3f8627f81353b0269b1
3
+ metadata.gz: fa5e513f27e2996c18e3b006569540ec1c06c8b178460e2241a891e42fddcfda
4
+ data.tar.gz: 3a0c7b6f1829f2a1d2ff4645d8b40d677a54b693351a883b53b2feb47d29b9b3
5
5
  SHA512:
6
- metadata.gz: 4f1c1c62794e14c5272cb8c9881dd50a8be3992c446086c0a5f58cecf51100458f962ddaeec1d2d329a0d3e03cff328bb287a9183ab5315534ba203fb1758544
7
- data.tar.gz: 79a3aac7b28480c4a1675b68877e21e192d311099f348aaebc84ae157d966e6bb56c2dffe53c25aeea331a08286aa7b34e8e92fd015cb8588514da8340092d85
6
+ metadata.gz: 7176e3bb221ef27aa16bb666f278d2081030c28778380fa40b5cdd44737fef9b5a76e9f7b7475dfaceaf33583b7caea80590f39e3a2a5f614f9a957baf082af8
7
+ data.tar.gz: '0359c8ea5ac50e2ad79c8c453b81a5dea7c2a11c1c1e9accf0844aa5f6ea110a3cfe692819c8c786c45a1191cce2d26259135832238fb268a31e913696cac951'
@@ -0,0 +1,92 @@
1
+ name: test-and-release
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ tags: [ 'v*' ]
7
+ pull_request:
8
+
9
+ concurrency:
10
+ group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}'
11
+ cancel-in-progress: true
12
+
13
+ env:
14
+ BUNDLER_VER: 2.3.24
15
+ # Forcing bundler version to ensure that it is consistent everywhere and
16
+ # does not cause bundler gem reinstalls
17
+ # bundler/rubygems 2.3.22 is a minimal requirement to support gnu/musl differentiation
18
+ # https://github.com/rubygems/rubygems/pull/4488
19
+
20
+ jobs:
21
+ test:
22
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
23
+ runs-on: ${{ matrix.os }}
24
+ continue-on-error: false
25
+ strategy:
26
+ fail-fast: false
27
+ matrix:
28
+ ruby: [ '2.7', '3.0', '3.1' ]
29
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
30
+
31
+ steps:
32
+ - uses: actions/checkout@v3
33
+
34
+ - uses: ruby/setup-ruby@v1
35
+ with:
36
+ ruby-version: ${{ matrix.ruby }}
37
+ bundler: ${{ env.BUNDLER_VER }}
38
+ bundler-cache: true
39
+
40
+ - run: bundle exec rspec
41
+
42
+ metanorma:
43
+ name: Test with Metanorma on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
44
+ runs-on: ${{ matrix.os }}
45
+ continue-on-error: false
46
+ strategy:
47
+ fail-fast: false
48
+ matrix:
49
+ ruby: [ '2.7', '3.0', '3.1' ]
50
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
51
+ steps:
52
+ - uses: actions/checkout@v3
53
+ with:
54
+ repository: metanorma/metanorma
55
+
56
+ - uses: metanorma/metanorma-build-scripts/inkscape-setup-action@main
57
+
58
+ - uses: actions/checkout@v3
59
+ with:
60
+ path: "excavate"
61
+
62
+ - run: 'echo ''gem "excavate", path: "./excavate"'' > Gemfile.devel'
63
+
64
+ # https://github.com/rubygems/rubygems/issues/5160
65
+ - if: matrix.ruby == '3.0'
66
+ uses: ruby/setup-ruby@v1
67
+ with:
68
+ ruby-version: ${{ matrix.ruby }}
69
+ bundler-cache: true
70
+ bundler: ${{ env.BUNDLER_VER }}
71
+ rubygems: latest
72
+
73
+ - if: matrix.ruby != '3.0'
74
+ uses: ruby/setup-ruby@v1
75
+ with:
76
+ ruby-version: ${{ matrix.ruby }}
77
+ bundler: ${{ env.BUNDLER_VER }}
78
+ bundler-cache: true
79
+
80
+ - run: bundle exec rake
81
+
82
+ release:
83
+ name: Release gem
84
+ needs: [ test, metanorma ]
85
+ runs-on: ubuntu-latest
86
+ if: contains(github.ref, 'refs/tags/v')
87
+ steps:
88
+ - uses: actions/checkout@v3
89
+
90
+ - uses: cadwallion/publish-rubygems-action@master
91
+ env:
92
+ RUBYGEMS_API_KEY: ${{secrets.FONTIST_CI_RUBYGEMS_API_KEY}}
data/.rubocop.yml CHANGED
@@ -1,2 +1,15 @@
1
1
  inherit_from:
2
2
  - 'https://raw.githubusercontent.com/fontist/oss-guides/master/ci/rubocop.yml'
3
+
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.7
7
+ SuggestExtensions: false
8
+ Exclude:
9
+ - 'pkg/**/*'
10
+
11
+ Gemspec/RequireMFA:
12
+ Enabled: false
13
+
14
+ Layout/LineLength:
15
+ Max: 160
data/Gemfile CHANGED
@@ -3,10 +3,3 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
-
7
- gem "gem-release"
8
- gem "rake", "~> 13.0"
9
- gem "rspec", "~> 3.2"
10
- gem "rubocop", "0.75.0"
11
- gem "rubocop-performance"
12
- gem "rubocop-rails"
data/Rakefile CHANGED
@@ -1,4 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- task default: %i[]
4
+ require "rspec/core/rake_task"
5
+ require "rubocop/rake_task"
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+ RuboCop::RakeTask.new
9
+
10
+ task default: %i[spec rubocop]
data/excavate.gemspec CHANGED
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "Extract nested archives with a single command."
13
13
  spec.homepage = "https://github.com/fontist/excavate"
14
14
  spec.license = "BSD-3-Clause"
15
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
15
16
 
16
17
  spec.metadata["homepage_uri"] = spec.homepage
17
18
  spec.metadata["source_code_uri"] = "https://github.com/fontist/excavate"
@@ -20,17 +21,25 @@ Gem::Specification.new do |spec|
20
21
  # Specify which files should be added to the gem when it is released.
21
22
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
23
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features|bin)/}) }
24
+ `git ls-files -z`.split("\x0").reject do |f|
25
+ f.match(%r{\A(?:test|spec|features|bin)/})
26
+ end
24
27
  end
25
28
  spec.bindir = "exe"
26
29
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
27
30
  spec.require_paths = ["lib"]
28
31
 
29
32
  spec.add_runtime_dependency "arr-pm", "~> 0.0"
30
- spec.add_runtime_dependency "ffi-libarchive-binary", "~> 0.0"
33
+ spec.add_runtime_dependency "bundler", "~> 2.3", ">= 2.3.24"
34
+ spec.add_runtime_dependency "ffi-libarchive-binary", "~> 0.3"
31
35
  spec.add_runtime_dependency "libmspack", "~> 0.1"
32
36
  spec.add_runtime_dependency "ruby-ole", "~> 1.0"
33
37
  spec.add_runtime_dependency "rubyzip", "~> 2.3"
34
- spec.add_runtime_dependency "seven_zip_ruby", "~> 1.0"
35
38
  spec.add_runtime_dependency "thor", "~> 1.0"
39
+
40
+ spec.add_development_dependency "rspec", "~> 3.0"
41
+ spec.add_development_dependency "rubocop", "~> 1.7"
42
+ spec.add_development_dependency "rubocop-performance", "~> 1.15"
43
+
44
+ spec.metadata["rubygems_mfa_required"] = "false"
36
45
  end
@@ -17,14 +17,12 @@ module Excavate
17
17
  @archive = archive
18
18
  end
19
19
 
20
- def files(recursive_packages: false, files: [], filter: nil)
20
+ def files(recursive_packages: false, files: [], filter: nil, &block)
21
21
  target = Dir.mktmpdir
22
22
  extract(target, recursive_packages: recursive_packages,
23
23
  files: files, filter: filter)
24
24
 
25
- all_files_in(target).map do |file|
26
- yield file
27
- end
25
+ all_files_in(target).map(&block)
28
26
  ensure
29
27
  FileUtils.rm_rf(target)
30
28
  end
@@ -155,11 +153,7 @@ module Excavate
155
153
  end
156
154
 
157
155
  def extract_recursively(archive, target)
158
- if File.directory?(archive)
159
- duplicate_dir(archive, target)
160
- else
161
- extract_once(archive, target)
162
- end
156
+ extract_to_directory(archive, target)
163
157
 
164
158
  all_files_in(target).each do |file|
165
159
  next unless archive?(file)
@@ -168,6 +162,16 @@ module Excavate
168
162
  end
169
163
  end
170
164
 
165
+ def extract_to_directory(archive, target)
166
+ if File.directory?(archive)
167
+ duplicate_dir(archive, target)
168
+ elsif !archive?(archive)
169
+ copy_file(archive, target)
170
+ else
171
+ extract_once(archive, target)
172
+ end
173
+ end
174
+
171
175
  def duplicate_dir(source, target)
172
176
  Dir.chdir(source) do
173
177
  (Dir.entries(".") - [".", ".."]).each do |entry|
@@ -176,6 +180,10 @@ module Excavate
176
180
  end
177
181
  end
178
182
 
183
+ def copy_file(archive, target)
184
+ FileUtils.cp(archive, target)
185
+ end
186
+
179
187
  def extract_once(archive, target)
180
188
  extension = normalized_extension(archive)
181
189
  extractor_class = TYPES[extension]
@@ -19,7 +19,7 @@ module Excavate
19
19
 
20
20
  def open_cab(archive)
21
21
  decompressor = LibMsPack::CabDecompressor.new
22
- cab = Utils.silence_stream(STDERR) do
22
+ cab = Utils.silence_stream($stderr) do
23
23
  decompressor.search(archive)
24
24
  end
25
25
 
@@ -14,30 +14,38 @@ module Excavate
14
14
 
15
15
  private
16
16
 
17
+ def extract_cpio_inner_new(entry, file, target)
18
+ path = File.join(target, entry.name)
19
+ if entry.directory?
20
+ FileUtils.mkdir_p(path)
21
+ else
22
+ FileUtils.mkdir_p(File.dirname(path))
23
+ File.write(path, file.read, mode: "wb")
24
+ end
25
+ end
26
+
17
27
  def extract_cpio_new_format(target)
18
28
  File.open(@archive, "rb") do |archive_file|
19
29
  CPIO::ASCIIReader.new(archive_file).each do |entry, file|
20
- path = File.join(target, entry.name)
21
- if entry.directory?
22
- FileUtils.mkdir_p(path)
23
- else
24
- FileUtils.mkdir_p(File.dirname(path))
25
- File.write(path, file.read, mode: "wb")
26
- end
30
+ extract_cpio_inner_new(entry, file, target)
27
31
  end
28
32
  end
29
33
  end
30
34
 
35
+ def extract_cpio_inner_old(entry, target)
36
+ path = File.expand_path(entry.filename, target)
37
+ if entry.directory?
38
+ FileUtils.mkdir_p(path)
39
+ else
40
+ FileUtils.mkdir_p(File.dirname(path))
41
+ File.write(path, entry.data, mode: "wb")
42
+ end
43
+ end
44
+
31
45
  def extract_cpio_old_format(target)
32
46
  File.open(@archive, "rb") do |archive_file|
33
47
  CPIO::ArchiveReader.new(archive_file).each_entry do |entry|
34
- path = File.expand_path(entry.filename, target)
35
- if entry.directory?
36
- FileUtils.mkdir_p(path)
37
- else
38
- FileUtils.mkdir_p(File.dirname(path))
39
- File.write(path, entry.data, mode: "wb")
40
- end
48
+ extract_cpio_inner_old(entry, target)
41
49
  end
42
50
  end
43
51
  end
@@ -1,9 +1,11 @@
1
1
  require "arr-pm"
2
2
 
3
+ H_MAGIC = "\x8e\xad\xe8\x01\x00\x00\x00\x00".force_encoding("BINARY")
4
+
3
5
  # fix for Ruby 3.0
4
- unless RPM::File::Header::HEADER_MAGIC == "\x8e\xad\xe8\x01\x00\x00\x00\x00".force_encoding("BINARY")
6
+ unless RPM::File::Header::HEADER_MAGIC == H_MAGIC
5
7
  RPM::File::Header.send(:remove_const, "HEADER_MAGIC")
6
- RPM::File::Header.const_set("HEADER_MAGIC", "\x8e\xad\xe8\x01\x00\x00\x00\x00".force_encoding("BINARY"))
8
+ RPM::File::Header.const_set(:HEADER_MAGIC, H_MAGIC)
7
9
  end
8
10
 
9
11
  module Excavate
@@ -25,7 +27,7 @@ module Excavate
25
27
  archive_format = tags[:payloadformat]
26
28
  compression_format = tags[:payloadcompressor] == "gzip" ? "gz" : tags[:payloadcompressor]
27
29
  basename = File.basename(archive, ".*")
28
- filename = basename + "." + archive_format + "." + compression_format
30
+ filename = "#{basename}.#{archive_format}.#{compression_format}"
29
31
  File.join(dir, filename)
30
32
  end
31
33
  end
@@ -1,13 +1,24 @@
1
- require "seven_zip_ruby"
1
+ require "ffi-libarchive-binary"
2
2
 
3
3
  module Excavate
4
4
  module Extractors
5
5
  class SevenZipExtractor < Extractor
6
6
  def extract(target)
7
- File.open(@archive, "rb") do |file|
8
- SevenZipRuby::Reader.extract_all(file, target)
7
+ Dir.chdir(target) do
8
+ extract_with_libarchive
9
9
  end
10
10
  end
11
+
12
+ def extract_with_libarchive
13
+ flags = ::Archive::EXTRACT_PERM
14
+ reader = ::Archive::Reader.open_filename(@archive)
15
+
16
+ reader.each_entry do |entry|
17
+ reader.extract(entry, flags.to_i)
18
+ end
19
+
20
+ reader.close
21
+ end
11
22
  end
12
23
  end
13
24
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Excavate
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excavate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-23 00:00:00.000000000 Z
11
+ date: 2022-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: arr-pm
@@ -24,20 +24,40 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.3'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.3.24
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '2.3'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.3.24
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: ffi-libarchive-binary
29
49
  requirement: !ruby/object:Gem::Requirement
30
50
  requirements:
31
51
  - - "~>"
32
52
  - !ruby/object:Gem::Version
33
- version: '0.0'
53
+ version: '0.3'
34
54
  type: :runtime
35
55
  prerelease: false
36
56
  version_requirements: !ruby/object:Gem::Requirement
37
57
  requirements:
38
58
  - - "~>"
39
59
  - !ruby/object:Gem::Version
40
- version: '0.0'
60
+ version: '0.3'
41
61
  - !ruby/object:Gem::Dependency
42
62
  name: libmspack
43
63
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +101,7 @@ dependencies:
81
101
  - !ruby/object:Gem::Version
82
102
  version: '2.3'
83
103
  - !ruby/object:Gem::Dependency
84
- name: seven_zip_ruby
104
+ name: thor
85
105
  requirement: !ruby/object:Gem::Requirement
86
106
  requirements:
87
107
  - - "~>"
@@ -95,19 +115,47 @@ dependencies:
95
115
  - !ruby/object:Gem::Version
96
116
  version: '1.0'
97
117
  - !ruby/object:Gem::Dependency
98
- name: thor
118
+ name: rspec
99
119
  requirement: !ruby/object:Gem::Requirement
100
120
  requirements:
101
121
  - - "~>"
102
122
  - !ruby/object:Gem::Version
103
- version: '1.0'
104
- type: :runtime
123
+ version: '3.0'
124
+ type: :development
105
125
  prerelease: false
106
126
  version_requirements: !ruby/object:Gem::Requirement
107
127
  requirements:
108
128
  - - "~>"
109
129
  - !ruby/object:Gem::Version
110
- version: '1.0'
130
+ version: '3.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rubocop
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.7'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '1.7'
145
+ - !ruby/object:Gem::Dependency
146
+ name: rubocop-performance
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '1.15'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '1.15'
111
159
  description: Extract nested archives with a single command.
112
160
  email:
113
161
  - open.source@ribose.com
@@ -116,9 +164,7 @@ executables:
116
164
  extensions: []
117
165
  extra_rdoc_files: []
118
166
  files:
119
- - ".github/workflows/metanorma.yml"
120
- - ".github/workflows/release.yml"
121
- - ".github/workflows/rspec.yml"
167
+ - ".github/workflows/test-and-release.yml"
122
168
  - ".gitignore"
123
169
  - ".rspec"
124
170
  - ".rubocop.yml"
@@ -154,6 +200,7 @@ metadata:
154
200
  homepage_uri: https://github.com/fontist/excavate
155
201
  source_code_uri: https://github.com/fontist/excavate
156
202
  changelog_uri: https://github.com/fontist/excavate
203
+ rubygems_mfa_required: 'false'
157
204
  post_install_message:
158
205
  rdoc_options: []
159
206
  require_paths:
@@ -162,14 +209,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
209
  requirements:
163
210
  - - ">="
164
211
  - !ruby/object:Gem::Version
165
- version: '0'
212
+ version: 2.7.0
166
213
  required_rubygems_version: !ruby/object:Gem::Requirement
167
214
  requirements:
168
215
  - - ">="
169
216
  - !ruby/object:Gem::Version
170
217
  version: '0'
171
218
  requirements: []
172
- rubygems_version: 3.0.3.1
219
+ rubygems_version: 3.3.7
173
220
  signing_key:
174
221
  specification_version: 4
175
222
  summary: Extract nested archives with a single command.
@@ -1,35 +0,0 @@
1
- name: metanorma
2
-
3
- on:
4
- push:
5
- branches: [ master ]
6
- pull_request:
7
-
8
- jobs:
9
- test:
10
- name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
11
- runs-on: ${{ matrix.os }}
12
- continue-on-error: ${{ matrix.experimental }}
13
- strategy:
14
- fail-fast: false
15
- matrix:
16
- ruby: [ '2.5', '2.6', '2.7', '3.0' ]
17
- os: [ ubuntu-latest, windows-latest, macos-latest ]
18
- experimental: [ true ]
19
- steps:
20
- - uses: actions/checkout@master
21
- with:
22
- repository: metanorma/metanorma
23
-
24
- - uses: actions/checkout@master
25
- with:
26
- path: "excavate"
27
-
28
- - run: 'echo ''gem "excavate", path: "./excavate"'' > Gemfile.devel'
29
-
30
- - uses: ruby/setup-ruby@v1
31
- with:
32
- ruby-version: ${{ matrix.ruby }}
33
- bundler-cache: true
34
-
35
- - run: bundle exec rake
@@ -1,36 +0,0 @@
1
- name: release
2
-
3
- on:
4
- push:
5
- tags:
6
- - 'v*'
7
-
8
- jobs:
9
- release:
10
- runs-on: ubuntu-18.04
11
- steps:
12
- - uses: actions/checkout@v1
13
-
14
- - uses: ruby/setup-ruby@v1
15
- with:
16
- ruby-version: '2.6'
17
-
18
- - run: bundle config set path 'vendor/bundle'
19
-
20
- - run: bundle install --jobs 4 --retry 3
21
-
22
- - run: bundle exec rspec
23
-
24
- - name: Publish to rubygems.org
25
- env:
26
- RUBYGEMS_API_KEY: ${{secrets.FONTIST_CI_RUBYGEMS_API_KEY}}
27
- run: |
28
- gem install gem-release
29
- touch ~/.gem/credentials
30
- cat > ~/.gem/credentials << EOF
31
- ---
32
- :rubygems_api_key: ${RUBYGEMS_API_KEY}
33
- EOF
34
- chmod 0600 ~/.gem/credentials
35
- git status
36
- gem release
@@ -1,47 +0,0 @@
1
- name: rspec
2
-
3
- on:
4
- push:
5
- branches: [ master, main ]
6
- pull_request:
7
-
8
- jobs:
9
- build:
10
- name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
11
- runs-on: ${{ matrix.os }}
12
- continue-on-error: ${{ matrix.experimental }}
13
- strategy:
14
- fail-fast: false
15
- matrix:
16
- ruby: [ '2.4', '2.5', '2.6', '2.7' ]
17
- os: [ ubuntu-latest, windows-latest, macos-latest ]
18
- experimental: [ false ]
19
- include:
20
- - ruby: '3.0'
21
- os: 'ubuntu-latest'
22
- experimental: true
23
- - ruby: '3.0'
24
- os: 'windows-latest'
25
- experimental: true
26
- - ruby: '3.0'
27
- os: 'macos-latest'
28
- experimental: true
29
-
30
- steps:
31
- - uses: actions/checkout@master
32
-
33
- - uses: ruby/setup-ruby@v1
34
- with:
35
- ruby-version: ${{ matrix.ruby }}
36
-
37
- - uses: actions/cache@v1
38
- with:
39
- path: vendor/bundle
40
- key: bundle-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/*.gemspec') }}
41
- restore-keys: bundle-${{ matrix.os }}-${{ matrix.ruby }}
42
-
43
- - run: bundle config set path 'vendor/bundle'
44
-
45
- - run: bundle install --jobs 4 --retry 3
46
-
47
- - run: bundle exec rspec