xn_gem_release_tasks 0.1.32
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 +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +4 -0
- data/lib/xn_gem_release_tasks.rb +257 -0
- data/lib/xn_gem_release_tasks/version.rb +3 -0
- data/xn_gem_release_tasks.gemspec +28 -0
- metadata +124 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 86046bab22ff9bbf11df93e18a01f0950a92ef52
|
4
|
+
data.tar.gz: 9b06d6e41626bc29b729c182aa955ffdde654d03
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8727c76cacd176b7b77d7cd547b3d085fb4610db402eddd4f7e28088616aff586904d8d11a1be7eaec2037735f5f7c7f7dba486dcda4c8128211eb14e7d81032
|
7
|
+
data.tar.gz: 20eb0241049bec175385238b4344b0fc8970e5c8b26d3d4e5593700ac52639e8a409bb0aaec78374472ff2c3d0b92ac48d2da1744471174d40efb4e52f91f87e
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Darrick Wiebe
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# GemReleaseTasks
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'gem_release_tasks'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install gem_release_tasks
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
TODO: Write usage instructions here
|
24
|
+
|
25
|
+
## Contributing
|
26
|
+
|
27
|
+
1. Fork it ( https://github.com/[my-github-username]/gem_release_tasks/fork )
|
28
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
29
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
30
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
31
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,257 @@
|
|
1
|
+
require "xn_gem_release_tasks/version"
|
2
|
+
require 'rake'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
class GemHelper
|
7
|
+
def perform_git_push(options = '')
|
8
|
+
cmd = "git push origin master:master #{options}"
|
9
|
+
out, code = sh_with_code(cmd)
|
10
|
+
raise "Couldn't git push. `#{cmd}' failed with the following output:\n\n#{out}\n" unless code == 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def version
|
14
|
+
XNGemReleaseTasks::NAMESPACE::VERSION
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
module XNGemReleaseTasks
|
21
|
+
V = /(?<before>\s*\bVERSION\s*=\s*")(?<major>\d+)\.(?<minor>\d+)\.(?<point>\d+)(?:\.(?<pre>\w+))?(?<after>".*)/
|
22
|
+
|
23
|
+
def self.ensure_setup
|
24
|
+
raise "Must run XNGemReleaseTasks.setup(LibModule, 'path/to/version.rb') first" unless NAMESPACE
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.change_version
|
28
|
+
ensure_setup
|
29
|
+
f = File.read(NAMESPACE::VERSION_FILE)
|
30
|
+
lines = f.each_line.map do |line|
|
31
|
+
match = V.match line
|
32
|
+
if match
|
33
|
+
yield line, match[:before], match[:major], match[:minor], match[:point], match[:pre], match[:after]
|
34
|
+
else
|
35
|
+
line
|
36
|
+
end
|
37
|
+
end
|
38
|
+
File.open(NAMESPACE::VERSION_FILE, 'w') do |f|
|
39
|
+
f.puts lines.join
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.reload_version
|
44
|
+
ensure_setup
|
45
|
+
NAMESPACE.send :remove_const, :VERSION
|
46
|
+
load NAMESPACE::VERSION_FILE
|
47
|
+
NAMESPACE::VERSION
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.setup(namespace, version_file)
|
51
|
+
raise "namespace must be a module" unless namespace.is_a? Module
|
52
|
+
raise "namespace does not have a current version" unless namespace::VERSION
|
53
|
+
raise "#{ version_file } file does not exist" unless File.exist? version_file
|
54
|
+
raise "You may not set up XNGemReleaseTasks multiple times" if defined? NAMESPACE
|
55
|
+
self.const_set :NAMESPACE, namespace
|
56
|
+
namespace.const_set :VERSION_FILE, version_file
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.gemspec
|
60
|
+
eval(File.read(Dir['*.gemspec'].first))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
task :validate_gemspec do
|
65
|
+
gemspec = XNGemReleaseTasks.gemspec
|
66
|
+
gemspec.validate
|
67
|
+
end
|
68
|
+
|
69
|
+
def command(task_name, name, &block)
|
70
|
+
s = `which #{name}`
|
71
|
+
if s == ""
|
72
|
+
task(task_name, &block)
|
73
|
+
else
|
74
|
+
task task_name do
|
75
|
+
# noop
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
desc "Ensures we are on a relesae version, and increments if we already are."
|
81
|
+
task :increment_release_version do
|
82
|
+
XNGemReleaseTasks.change_version do |line, before, major, minor, point, pre, after|
|
83
|
+
if pre
|
84
|
+
"#{before}#{major}.#{minor}.#{point}#{after}\n"
|
85
|
+
else
|
86
|
+
"#{before}#{major}.#{minor}.#{point.next}#{after}\n"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "Ensures we are on a release version, but does not increment version number"
|
92
|
+
task :set_release_version do
|
93
|
+
XNGemReleaseTasks.change_version do |line, before, major, minor, point, pre, after|
|
94
|
+
"#{before}#{major}.#{minor}.#{point}#{after}\n"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
desc "Increments a release version number and adds .pre. Does not increment a version that is already .pre."
|
99
|
+
task :set_development_version do
|
100
|
+
XNGemReleaseTasks.change_version do |line, before, major, minor, point, pre, after|
|
101
|
+
if pre
|
102
|
+
line
|
103
|
+
else
|
104
|
+
"#{before}#{major}.#{minor}.#{point.next}.pre#{after}\n"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
task :is_clean do
|
110
|
+
if ENV['TRAVIS_BRANCH'] == 'master'
|
111
|
+
true
|
112
|
+
else
|
113
|
+
sh "git status | grep 'working directory clean'"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
task :is_on_master do
|
118
|
+
if ENV['TRAVIS_BRANCH'] == 'master'
|
119
|
+
true
|
120
|
+
else
|
121
|
+
unless ENV['IGNORE_BRANCH'] == 'true'
|
122
|
+
sh "git status | grep 'On branch master'"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
task :is_on_origin_master do
|
128
|
+
if ENV['TRAVIS_BRANCH'] == 'master'
|
129
|
+
true
|
130
|
+
else
|
131
|
+
unless ENV['IGNORE_BRANCH'] == 'true'
|
132
|
+
result = `git log HEAD...origin/master | grep . || echo ok`
|
133
|
+
fail "Not on origin/master" unless result.chomp == 'ok'
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
task :is_up_to_date do
|
139
|
+
if ENV['TRAVIS_BRANCH'] == 'master'
|
140
|
+
true
|
141
|
+
else
|
142
|
+
sh "git pull | grep 'Already up-to-date.'"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
task :is_release_version do
|
147
|
+
unless XNGemReleaseTasks.reload_version =~ /^\d+\.\d+\.\d+$/
|
148
|
+
fail "Not on a release version: #{ XNGemReleaseTasks::NAMESPACE::VERSION }"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
task :prepare_release_push => [:is_clean, :is_on_master, :is_up_to_date, :set_release_version]
|
153
|
+
|
154
|
+
task :_only_push_release do
|
155
|
+
XNGemReleaseTasks.reload_version
|
156
|
+
if `git status | grep 'working directory clean'` == ''
|
157
|
+
skip_ci = '[skip ci] ' if ENV['TRAVIS_SECURE_ENV_VARS']
|
158
|
+
if sh "git add #{XNGemReleaseTasks::NAMESPACE::VERSION_FILE} && git commit -m '#{skip_ci}Version #{ XNGemReleaseTasks::NAMESPACE::VERSION }'"
|
159
|
+
sh "git push"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
task :only_push_release => [:prepare_release_push, :_only_push_release]
|
165
|
+
|
166
|
+
task :next_dev_cycle => [:is_clean, :set_development_version] do
|
167
|
+
XNGemReleaseTasks.reload_version
|
168
|
+
sh "git add #{XNGemReleaseTasks::NAMESPACE::VERSION_FILE} && git commit -m '[skip ci] New development cycle with version #{ XNGemReleaseTasks::NAMESPACE::VERSION }' && git push"
|
169
|
+
end
|
170
|
+
|
171
|
+
desc "Configure environment"
|
172
|
+
task :env do
|
173
|
+
path = `echo $PATH`
|
174
|
+
home = `echo $HOME`
|
175
|
+
unless path.include? "#{home}/bin"
|
176
|
+
puts "Configuring path..."
|
177
|
+
`mkdir -p $HOME/bin`
|
178
|
+
if File.exist? "#{home}/.zshrc"
|
179
|
+
profile = "#{home}/.zshrc"
|
180
|
+
else
|
181
|
+
profile = "#{home}/.bashrc"
|
182
|
+
end
|
183
|
+
`echo 'export PATH="$PATH:$HOME/bin"' >> #{profile} && source #{profile}`
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
desc "Install Leiningen, the clojure build tool"
|
188
|
+
command(:install_lein, '$HOME/bin/lein') do
|
189
|
+
if File.exist? 'project.clj'
|
190
|
+
Rake::Task['env'].invoke
|
191
|
+
puts "Installing Leiningen..."
|
192
|
+
`curl "https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein" -o "$HOME/bin/lein"`
|
193
|
+
`chmod a+x $HOME/bin/lein`
|
194
|
+
`lein`
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
desc "Run Leiningen tests"
|
199
|
+
task :lein_test => [:install_lein] do
|
200
|
+
if File.exist? 'project.clj'
|
201
|
+
puts "Running Leiningen tests..."
|
202
|
+
`lein test`
|
203
|
+
else
|
204
|
+
puts "Not a Clojure project"
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
task :validate_major_push do
|
209
|
+
gemspec = XNGemReleaseTasks.gemspec
|
210
|
+
unless gemspec.version.to_s.include? "pre"
|
211
|
+
Rake::Task['is_clean'].invoke
|
212
|
+
Rake::Task['is_on_master'].invoke
|
213
|
+
Rake::Task['is_up_to_date'].invoke
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
desc "Build gem and push to s3"
|
218
|
+
task :up => [:validate_gemspec, :validate_major_push, :lein_test, :build, :spec, :_up]
|
219
|
+
|
220
|
+
task :_up do
|
221
|
+
gemspec = XNGemReleaseTasks.gemspec
|
222
|
+
if defined?(gemspec.platform) and gemspec.platform != '' and gemspec.platform != 'ruby'
|
223
|
+
gem = "#{gemspec.name}-#{gemspec.version}-#{gemspec.platform}.gem"
|
224
|
+
else
|
225
|
+
gem = "#{gemspec.name}-#{gemspec.version}.gem"
|
226
|
+
end
|
227
|
+
source = ENV['GEMINABOX']
|
228
|
+
unless source
|
229
|
+
config = YAML.load_file("#{ENV['HOME']}/.gemrc") rescue {}
|
230
|
+
sources = config[:sources] || config['sources'] || []
|
231
|
+
source = sources.grep(/^https:\/\/\w+:\w+@gems.xnlogic.com\/?$/).first
|
232
|
+
end
|
233
|
+
overwrite = "-o" if gemspec.version =~ /\.pre/
|
234
|
+
raise "No authorized source pointing to https://gems.xnlogic.com found in your gem config" unless source
|
235
|
+
sh "gem inabox #{overwrite} -g #{source} pkg/#{gem}"
|
236
|
+
end
|
237
|
+
|
238
|
+
# Set a dependency to replace the :release task. For example, the following would cause :up to be used to
|
239
|
+
# release instead of :release. That allows the local_release task to work in either case.
|
240
|
+
#
|
241
|
+
# task release_with: :up
|
242
|
+
#
|
243
|
+
task :release_with do |this|
|
244
|
+
if this.prerequisites.empty?
|
245
|
+
Rake::Task[:release].invoke
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
desc "Release a new version locally rather than after a successful Travis build"
|
250
|
+
task :local_release => [:only_push_release, :release_with, :next_dev_cycle, :after_release]
|
251
|
+
|
252
|
+
desc "Push a release candidate to Travis CI to release if it builds successfully"
|
253
|
+
task :push_release => [:only_push_release, :next_dev_cycle, :after_release]
|
254
|
+
|
255
|
+
task :release => [:is_clean, :is_on_origin_master, :is_release_version]
|
256
|
+
|
257
|
+
task :after_release
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'xn_gem_release_tasks/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "xn_gem_release_tasks"
|
8
|
+
spec.version = XNGemReleaseTasks::VERSION
|
9
|
+
spec.authors = ["Darrick Wiebe"]
|
10
|
+
spec.email = ["dw@xnlogic.com"]
|
11
|
+
spec.summary = %q{Simple set of rake tasks for enforcing development and release consistency}
|
12
|
+
spec.description =
|
13
|
+
%q{Develop on .pre branches, only allow releases from non-.pre clean, up-to-date master. Designed to allow Travis CI to do the
|
14
|
+
push when on a release version, after passing tests.}
|
15
|
+
spec.homepage = "https://xnlogic.com"
|
16
|
+
spec.license = "MIT"
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0")
|
19
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_dependency "geminabox"
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "travis"
|
27
|
+
spec.add_development_dependency "builder"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xn_gem_release_tasks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.32
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Darrick Wiebe
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: geminabox
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '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: '1.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: travis
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: builder
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: |-
|
84
|
+
Develop on .pre branches, only allow releases from non-.pre clean, up-to-date master. Designed to allow Travis CI to do the
|
85
|
+
push when on a release version, after passing tests.
|
86
|
+
email:
|
87
|
+
- dw@xnlogic.com
|
88
|
+
executables: []
|
89
|
+
extensions: []
|
90
|
+
extra_rdoc_files: []
|
91
|
+
files:
|
92
|
+
- ".gitignore"
|
93
|
+
- Gemfile
|
94
|
+
- LICENSE.txt
|
95
|
+
- README.md
|
96
|
+
- Rakefile
|
97
|
+
- lib/xn_gem_release_tasks.rb
|
98
|
+
- lib/xn_gem_release_tasks/version.rb
|
99
|
+
- xn_gem_release_tasks.gemspec
|
100
|
+
homepage: https://xnlogic.com
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata: {}
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options: []
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
requirements: []
|
119
|
+
rubyforge_project:
|
120
|
+
rubygems_version: 2.4.5
|
121
|
+
signing_key:
|
122
|
+
specification_version: 4
|
123
|
+
summary: Simple set of rake tasks for enforcing development and release consistency
|
124
|
+
test_files: []
|