puppeteer-ruby 0.29.0 → 0.31.4
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 +4 -4
- data/CHANGELOG.md +35 -2
- data/README.md +12 -8
- data/docs/api_coverage.md +359 -0
- data/lib/puppeteer.rb +5 -167
- data/lib/puppeteer/browser_runner.rb +1 -1
- data/lib/puppeteer/connection.rb +11 -1
- data/lib/puppeteer/dom_world.rb +141 -154
- data/lib/puppeteer/element_handle.rb +15 -11
- data/lib/puppeteer/env.rb +7 -3
- data/lib/puppeteer/frame.rb +31 -24
- data/lib/puppeteer/launcher/base.rb +8 -0
- data/lib/puppeteer/page.rb +129 -111
- data/lib/puppeteer/page/pdf_options.rb +15 -15
- data/lib/puppeteer/puppeteer.rb +164 -0
- data/lib/puppeteer/version.rb +2 -2
- data/lib/puppeteer/wait_task.rb +17 -22
- data/lib/puppeteer/web_socket.rb +2 -0
- data/lib/puppeteer/web_socket_transport.rb +2 -0
- data/puppeteer-ruby.gemspec +5 -2
- metadata +20 -12
- data/.circleci/config.yml +0 -92
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -17
- data/.github/ISSUE_TEMPLATE/feature_request.md +0 -15
- data/.github/stale.yml +0 -16
- data/.github/workflows/docs.yml +0 -45
- data/.github/workflows/reviewdog.yml +0 -15
- data/.gitignore +0 -19
- data/.travis.yml +0 -7
@@ -52,24 +52,24 @@ class Puppeteer::Page
|
|
52
52
|
end
|
53
53
|
|
54
54
|
PAPER_FORMATS = {
|
55
|
-
letter
|
56
|
-
legal
|
57
|
-
tabloid
|
58
|
-
ledger
|
59
|
-
a0
|
60
|
-
a1
|
61
|
-
a2
|
62
|
-
a3
|
63
|
-
a4
|
64
|
-
a5
|
65
|
-
a6
|
55
|
+
'letter' => PaperSize.new(width: 8.5, height: 11),
|
56
|
+
'legal' => PaperSize.new(width: 8.5, height: 14),
|
57
|
+
'tabloid' => PaperSize.new(width: 11, height: 17),
|
58
|
+
'ledger' => PaperSize.new(width: 17, height: 11),
|
59
|
+
'a0' => PaperSize.new(width: 33.1, height: 46.8),
|
60
|
+
'a1' => PaperSize.new(width: 23.4, height: 33.1),
|
61
|
+
'a2' => PaperSize.new(width: 16.54, height: 23.4),
|
62
|
+
'a3' => PaperSize.new(width: 11.7, height: 16.54),
|
63
|
+
'a4' => PaperSize.new(width: 8.27, height: 11.7),
|
64
|
+
'a5' => PaperSize.new(width: 5.83, height: 8.27),
|
65
|
+
'a6' => PaperSize.new(width: 4.13, height: 5.83),
|
66
66
|
}
|
67
67
|
|
68
68
|
UNIT_TO_PIXELS = {
|
69
|
-
px
|
70
|
-
in
|
71
|
-
cm
|
72
|
-
mm
|
69
|
+
'px' => 1,
|
70
|
+
'in' => 96,
|
71
|
+
'cm' => 37.8,
|
72
|
+
'mm' => 3.78,
|
73
73
|
}
|
74
74
|
|
75
75
|
# @param parameter [String|Integer|nil]
|
@@ -0,0 +1,164 @@
|
|
1
|
+
class Puppeteer::Puppeteer
|
2
|
+
# @param project_root [String]
|
3
|
+
# @param prefereed_revision [String]
|
4
|
+
# @param is_puppeteer_core [String]
|
5
|
+
def initialize(project_root:, preferred_revision:, is_puppeteer_core:)
|
6
|
+
@project_root = project_root
|
7
|
+
@preferred_revision = preferred_revision
|
8
|
+
@is_puppeteer_core = is_puppeteer_core
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param product [String]
|
12
|
+
# @param executable_path [String]
|
13
|
+
# @param ignore_default_args [Array<String>|nil]
|
14
|
+
# @param handle_SIGINT [Boolean]
|
15
|
+
# @param handle_SIGTERM [Boolean]
|
16
|
+
# @param handle_SIGHUP [Boolean]
|
17
|
+
# @param timeout [Integer]
|
18
|
+
# @param dumpio [Boolean]
|
19
|
+
# @param env [Hash]
|
20
|
+
# @param pipe [Boolean]
|
21
|
+
# @param args [Array<String>]
|
22
|
+
# @param user_data_dir [String]
|
23
|
+
# @param devtools [Boolean]
|
24
|
+
# @param headless [Boolean]
|
25
|
+
# @param ignore_https_errors [Boolean]
|
26
|
+
# @param default_viewport [Puppeteer::Viewport|nil]
|
27
|
+
# @param slow_mo [Integer]
|
28
|
+
# @return [Puppeteer::Browser]
|
29
|
+
def launch(
|
30
|
+
product: nil,
|
31
|
+
executable_path: nil,
|
32
|
+
ignore_default_args: nil,
|
33
|
+
handle_SIGINT: nil,
|
34
|
+
handle_SIGTERM: nil,
|
35
|
+
handle_SIGHUP: nil,
|
36
|
+
timeout: nil,
|
37
|
+
dumpio: nil,
|
38
|
+
env: nil,
|
39
|
+
pipe: nil,
|
40
|
+
args: nil,
|
41
|
+
user_data_dir: nil,
|
42
|
+
devtools: nil,
|
43
|
+
headless: nil,
|
44
|
+
ignore_https_errors: nil,
|
45
|
+
default_viewport: nil,
|
46
|
+
slow_mo: nil
|
47
|
+
)
|
48
|
+
options = {
|
49
|
+
executable_path: executable_path,
|
50
|
+
ignore_default_args: ignore_default_args,
|
51
|
+
handle_SIGINT: handle_SIGINT,
|
52
|
+
handle_SIGTERM: handle_SIGTERM,
|
53
|
+
handle_SIGHUP: handle_SIGHUP,
|
54
|
+
timeout: timeout,
|
55
|
+
dumpio: dumpio,
|
56
|
+
env: env,
|
57
|
+
pipe: pipe,
|
58
|
+
args: args,
|
59
|
+
user_data_dir: user_data_dir,
|
60
|
+
devtools: devtools,
|
61
|
+
headless: headless,
|
62
|
+
ignore_https_errors: ignore_https_errors,
|
63
|
+
default_viewport: default_viewport,
|
64
|
+
slow_mo: slow_mo,
|
65
|
+
}
|
66
|
+
|
67
|
+
@product_name ||= product
|
68
|
+
browser = launcher.launch(options)
|
69
|
+
if block_given?
|
70
|
+
begin
|
71
|
+
yield(browser)
|
72
|
+
ensure
|
73
|
+
browser.close
|
74
|
+
end
|
75
|
+
else
|
76
|
+
browser
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# @param browser_ws_endpoint [String]
|
81
|
+
# @param browser_url [String]
|
82
|
+
# @param transport [Puppeteer::WebSocketTransport]
|
83
|
+
# @param ignore_https_errors [Boolean]
|
84
|
+
# @param default_viewport [Puppeteer::Viewport|nil]
|
85
|
+
# @param slow_mo [Integer]
|
86
|
+
# @return [Puppeteer::Browser]
|
87
|
+
def connect(
|
88
|
+
browser_ws_endpoint: nil,
|
89
|
+
browser_url: nil,
|
90
|
+
transport: nil,
|
91
|
+
ignore_https_errors: nil,
|
92
|
+
default_viewport: nil,
|
93
|
+
slow_mo: nil
|
94
|
+
)
|
95
|
+
options = {
|
96
|
+
browser_ws_endpoint: browser_ws_endpoint,
|
97
|
+
browser_url: browser_url,
|
98
|
+
transport: transport,
|
99
|
+
ignore_https_errors: ignore_https_errors,
|
100
|
+
default_viewport: default_viewport,
|
101
|
+
slow_mo: slow_mo,
|
102
|
+
}.compact
|
103
|
+
browser = launcher.connect(options)
|
104
|
+
if block_given?
|
105
|
+
begin
|
106
|
+
yield(browser)
|
107
|
+
ensure
|
108
|
+
browser.disconnect
|
109
|
+
end
|
110
|
+
else
|
111
|
+
browser
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# @return [String]
|
116
|
+
def executable_path
|
117
|
+
launcher.executable_path
|
118
|
+
end
|
119
|
+
|
120
|
+
private def launcher
|
121
|
+
@launcher ||= Puppeteer::Launcher.new(
|
122
|
+
project_root: @project_root,
|
123
|
+
preferred_revision: @preferred_revision,
|
124
|
+
is_puppeteer_core: @is_puppeteer_core,
|
125
|
+
product: @product_name,
|
126
|
+
)
|
127
|
+
end
|
128
|
+
|
129
|
+
# @return [String]
|
130
|
+
def product
|
131
|
+
launcher.product
|
132
|
+
end
|
133
|
+
|
134
|
+
# @return [Puppeteer::Devices]
|
135
|
+
def devices
|
136
|
+
Puppeteer::Devices
|
137
|
+
end
|
138
|
+
|
139
|
+
# # @return {Object}
|
140
|
+
# def errors
|
141
|
+
# # ???
|
142
|
+
# end
|
143
|
+
|
144
|
+
# @param args [Array<String>]
|
145
|
+
# @param user_data_dir [String]
|
146
|
+
# @param devtools [Boolean]
|
147
|
+
# @param headless [Boolean]
|
148
|
+
# @return [Array<String>]
|
149
|
+
def default_args(args: nil, user_data_dir: nil, devtools: nil, headless: nil)
|
150
|
+
options = {
|
151
|
+
args: args,
|
152
|
+
user_data_dir: user_data_dir,
|
153
|
+
devtools: devtools,
|
154
|
+
headless: headless,
|
155
|
+
}.compact
|
156
|
+
launcher.default_args(options)
|
157
|
+
end
|
158
|
+
|
159
|
+
# @param {!BrowserFetcher.Options=} options
|
160
|
+
# @return {!BrowserFetcher}
|
161
|
+
def createBrowserFetcher(options = {})
|
162
|
+
BrowserFetcher.new(@project_root, options)
|
163
|
+
end
|
164
|
+
end
|
data/lib/puppeteer/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = '0.
|
1
|
+
module Puppeteer
|
2
|
+
VERSION = '0.31.4'
|
3
3
|
end
|
data/lib/puppeteer/wait_task.rb
CHANGED
@@ -135,18 +135,17 @@ class Puppeteer::WaitTask
|
|
135
135
|
/**
|
136
136
|
* @return {!Promise<*>}
|
137
137
|
*/
|
138
|
-
function pollMutation() {
|
139
|
-
const success = predicate(...args);
|
140
|
-
if (success)
|
141
|
-
return Promise.resolve(success);
|
138
|
+
async function pollMutation() {
|
139
|
+
const success = await predicate(...args);
|
140
|
+
if (success) return Promise.resolve(success);
|
142
141
|
let fulfill;
|
143
142
|
const result = new Promise((x) => (fulfill = x));
|
144
|
-
const observer = new MutationObserver(() => {
|
143
|
+
const observer = new MutationObserver(async () => {
|
145
144
|
if (timedOut) {
|
146
145
|
observer.disconnect();
|
147
146
|
fulfill();
|
148
147
|
}
|
149
|
-
const success = predicate(...args);
|
148
|
+
const success = await predicate(...args);
|
150
149
|
if (success) {
|
151
150
|
observer.disconnect();
|
152
151
|
fulfill(success);
|
@@ -159,38 +158,34 @@ class Puppeteer::WaitTask
|
|
159
158
|
});
|
160
159
|
return result;
|
161
160
|
}
|
162
|
-
function pollRaf() {
|
161
|
+
async function pollRaf() {
|
163
162
|
let fulfill;
|
164
163
|
const result = new Promise((x) => (fulfill = x));
|
165
|
-
onRaf();
|
164
|
+
await onRaf();
|
166
165
|
return result;
|
167
|
-
function onRaf() {
|
166
|
+
async function onRaf() {
|
168
167
|
if (timedOut) {
|
169
168
|
fulfill();
|
170
169
|
return;
|
171
170
|
}
|
172
|
-
const success = predicate(...args);
|
173
|
-
if (success)
|
174
|
-
|
175
|
-
else
|
176
|
-
requestAnimationFrame(onRaf);
|
171
|
+
const success = await predicate(...args);
|
172
|
+
if (success) fulfill(success);
|
173
|
+
else requestAnimationFrame(onRaf);
|
177
174
|
}
|
178
175
|
}
|
179
|
-
function pollInterval(pollInterval) {
|
176
|
+
async function pollInterval(pollInterval) {
|
180
177
|
let fulfill;
|
181
178
|
const result = new Promise((x) => (fulfill = x));
|
182
|
-
onTimeout();
|
179
|
+
await onTimeout();
|
183
180
|
return result;
|
184
|
-
function onTimeout() {
|
181
|
+
async function onTimeout() {
|
185
182
|
if (timedOut) {
|
186
183
|
fulfill();
|
187
184
|
return;
|
188
185
|
}
|
189
|
-
const success = predicate(...args);
|
190
|
-
if (success)
|
191
|
-
|
192
|
-
else
|
193
|
-
setTimeout(onTimeout, pollInterval);
|
186
|
+
const success = await predicate(...args);
|
187
|
+
if (success) fulfill(success);
|
188
|
+
else setTimeout(onTimeout, pollInterval);
|
194
189
|
}
|
195
190
|
}
|
196
191
|
}
|
data/lib/puppeteer/web_socket.rb
CHANGED
data/puppeteer-ruby.gemspec
CHANGED
@@ -12,7 +12,9 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.homepage = 'https://github.com/YusukeIwaki/puppeteer-ruby'
|
13
13
|
|
14
14
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
15
|
-
`git ls-files -z`.split("\x0").reject
|
15
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
16
|
+
f.match(%r{^(test|spec|features)/}) || f.include?(".git") || f.include?(".circleci") || f.start_with?("development/")
|
17
|
+
end
|
16
18
|
end
|
17
19
|
spec.bindir = 'exe'
|
18
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
@@ -23,11 +25,12 @@ Gem::Specification.new do |spec|
|
|
23
25
|
spec.add_dependency 'mime-types', '>= 3.0'
|
24
26
|
spec.add_development_dependency 'bundler', '~> 2.2.3'
|
25
27
|
spec.add_development_dependency 'chunky_png'
|
28
|
+
spec.add_development_dependency 'dry-inflector'
|
26
29
|
spec.add_development_dependency 'pry-byebug'
|
27
30
|
spec.add_development_dependency 'rake', '~> 13.0.3'
|
28
31
|
spec.add_development_dependency 'rspec', '~> 3.10.0 '
|
29
32
|
spec.add_development_dependency 'rspec_junit_formatter' # for CircleCI.
|
30
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
33
|
+
spec.add_development_dependency 'rubocop', '~> 1.12.0'
|
31
34
|
spec.add_development_dependency 'rubocop-rspec'
|
32
35
|
spec.add_development_dependency 'sinatra'
|
33
36
|
spec.add_development_dependency 'webrick'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppeteer-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.31.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: dry-inflector
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: pry-byebug
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +156,14 @@ dependencies:
|
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
159
|
+
version: 1.12.0
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: 1.
|
166
|
+
version: 1.12.0
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: rubocop-rspec
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,16 +227,8 @@ executables: []
|
|
213
227
|
extensions: []
|
214
228
|
extra_rdoc_files: []
|
215
229
|
files:
|
216
|
-
- ".circleci/config.yml"
|
217
|
-
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
218
|
-
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
219
|
-
- ".github/stale.yml"
|
220
|
-
- ".github/workflows/docs.yml"
|
221
|
-
- ".github/workflows/reviewdog.yml"
|
222
|
-
- ".gitignore"
|
223
230
|
- ".rspec"
|
224
231
|
- ".rubocop.yml"
|
225
|
-
- ".travis.yml"
|
226
232
|
- CHANGELOG.md
|
227
233
|
- Dockerfile
|
228
234
|
- Gemfile
|
@@ -231,6 +237,7 @@ files:
|
|
231
237
|
- bin/console
|
232
238
|
- bin/setup
|
233
239
|
- docker-compose.yml
|
240
|
+
- docs/api_coverage.md
|
234
241
|
- lib/puppeteer.rb
|
235
242
|
- lib/puppeteer/aria_query_handler.rb
|
236
243
|
- lib/puppeteer/browser.rb
|
@@ -282,6 +289,7 @@ files:
|
|
282
289
|
- lib/puppeteer/page/pdf_options.rb
|
283
290
|
- lib/puppeteer/page/screenshot_options.rb
|
284
291
|
- lib/puppeteer/page/screenshot_task_queue.rb
|
292
|
+
- lib/puppeteer/puppeteer.rb
|
285
293
|
- lib/puppeteer/query_handler_manager.rb
|
286
294
|
- lib/puppeteer/remote_object.rb
|
287
295
|
- lib/puppeteer/request.rb
|
data/.circleci/config.yml
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
version: 2.1
|
2
|
-
|
3
|
-
rspec_chrome_job: &rspec_chrome_job
|
4
|
-
steps:
|
5
|
-
- checkout
|
6
|
-
- run:
|
7
|
-
command: gem install bundler:2.2.3 && bundle install
|
8
|
-
- run:
|
9
|
-
name: rspec
|
10
|
-
command: |
|
11
|
-
DEBUG=1 bundle exec rspec --profile 10 \
|
12
|
-
--format RspecJunitFormatter \
|
13
|
-
--out test_results/rspec.xml \
|
14
|
-
--format documentation
|
15
|
-
|
16
|
-
jobs:
|
17
|
-
rspec_chrome_ruby2_6:
|
18
|
-
docker:
|
19
|
-
- image: circleci/ruby:2.6.6-buster-node-browsers
|
20
|
-
<<: *rspec_chrome_job
|
21
|
-
|
22
|
-
rspec_chrome_ruby2_7:
|
23
|
-
docker:
|
24
|
-
- image: circleci/ruby:2.7.2-buster-node-browsers
|
25
|
-
<<: *rspec_chrome_job
|
26
|
-
|
27
|
-
rspec_chrome_ruby3_0:
|
28
|
-
docker:
|
29
|
-
- image: circleci/ruby:3.0.0-buster-node-browsers
|
30
|
-
<<: *rspec_chrome_job
|
31
|
-
|
32
|
-
rspec_firefox:
|
33
|
-
docker:
|
34
|
-
- image: circleci/ruby:2.7.2-buster-node-browsers
|
35
|
-
steps:
|
36
|
-
- checkout
|
37
|
-
- run:
|
38
|
-
command: gem install bundler:2.2.3 && bundle install
|
39
|
-
- run:
|
40
|
-
name: install firefox-nightly
|
41
|
-
command: |
|
42
|
-
wget -O nightly.tar.bz2 "https://download.mozilla.org/?product=firefox-nightly-latest-ssl&os=linux64&lang=en-US"
|
43
|
-
tar xf nightly.tar.bz2
|
44
|
-
- run:
|
45
|
-
name: rspec
|
46
|
-
command: |
|
47
|
-
DEBUG=1 PUPPETEER_PRODUCT_RSPEC=firefox \
|
48
|
-
PUPPETEER_EXECUTABLE_PATH_RSPEC=${CIRCLE_WORKING_DIRECTORY/#\~/$HOME}/firefox/firefox \
|
49
|
-
bundle exec rspec --profile 10 \
|
50
|
-
--format RspecJunitFormatter \
|
51
|
-
--out test_results/rspec.xml \
|
52
|
-
--format documentation spec/integration/
|
53
|
-
|
54
|
-
deploy:
|
55
|
-
docker:
|
56
|
-
- image: circleci/ruby:2.6.3-stretch-node
|
57
|
-
steps:
|
58
|
-
- checkout
|
59
|
-
- run:
|
60
|
-
command: gem install bundler:2.2.3 && bundle install
|
61
|
-
- run:
|
62
|
-
name: rake build
|
63
|
-
command: rake build
|
64
|
-
- run:
|
65
|
-
name: setup API key
|
66
|
-
command: |
|
67
|
-
mkdir -p ~/.gem/
|
68
|
-
echo "---" > ~/.gem/credentials
|
69
|
-
echo ":rubygems_api_key: $RUBYGEMS_API_KEY" >> ~/.gem/credentials
|
70
|
-
chmod 600 ~/.gem/credentials
|
71
|
-
- run:
|
72
|
-
name: Check Puppeteer::version
|
73
|
-
command: bundle exec ruby -e 'raise "invalid Puppeteer::VERSION" unless Puppeteer::VERSION == ENV["CIRCLE_TAG"]'
|
74
|
-
- run:
|
75
|
-
name: gem push
|
76
|
-
command: gem push pkg/puppeteer-ruby-$CIRCLE_TAG.gem
|
77
|
-
|
78
|
-
workflows:
|
79
|
-
ci:
|
80
|
-
jobs:
|
81
|
-
- rspec_chrome_ruby2_6
|
82
|
-
- rspec_chrome_ruby2_7
|
83
|
-
- rspec_chrome_ruby3_0
|
84
|
-
- rspec_firefox
|
85
|
-
rubygems-deploy:
|
86
|
-
jobs:
|
87
|
-
- deploy:
|
88
|
-
filters:
|
89
|
-
tags:
|
90
|
-
only: /^[0-9]\.[0-9]+\.[0-9].*/
|
91
|
-
branches:
|
92
|
-
ignore: /.*/
|