openstudio_measure_tester 0.1.7 → 0.3.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 +5 -5
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +25 -0
- data/Gemfile +2 -2
- data/Jenkinsfile +10 -0
- data/LICENSE.md +1 -1
- data/README.md +9 -5
- data/Rakefile +2 -0
- data/bin/console +1 -0
- data/bin/run_measure_tests +4 -3
- data/lib/openstudio_measure_tester.rb +5 -3
- data/lib/openstudio_measure_tester/core_ext.rb +3 -1
- data/lib/openstudio_measure_tester/coverage.rb +3 -1
- data/lib/openstudio_measure_tester/dashboard.rb +32 -2
- data/lib/openstudio_measure_tester/minitest_result.rb +10 -8
- data/lib/openstudio_measure_tester/openstudio_style.rb +12 -10
- data/lib/openstudio_measure_tester/openstudio_testing_result.rb +4 -2
- data/lib/openstudio_measure_tester/rake_task.rb +4 -2
- data/lib/openstudio_measure_tester/rubocop_result.rb +4 -2
- data/lib/openstudio_measure_tester/runner.rb +89 -62
- data/lib/openstudio_measure_tester/version.rb +4 -2
- data/openstudio_measure_tester.gemspec +29 -25
- metadata +57 -56
- data/.travis.yml +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fadfcba5d12f6b9ebbb36237521c99fd08ffd36cc8f14fab967e607800abf902
|
4
|
+
data.tar.gz: 41a3b63176ed3bb96554216d5dc50cd668c42648faf32ef0f36d20d30b5595f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b42fc88d7ee1221a215a7fb079a7e22633e6b1f7f70b7ee9b96551325a2d9259d03998efd024a7d5e7a6ff95bd4b9f2795f4edbb03f8645577c1edc7952bd212
|
7
|
+
data.tar.gz: 2df445991da6b52f06e8bff11452a47d26003ca72491a3b6490f3fa97aabc662e32e3acdda2679d660a1f164b8fcf89cb3ddddb91767768266d737443e4e0f67
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
# Version 0.3.0
|
2
|
+
|
3
|
+
* Upgrade to Ruby 2.7.0
|
4
|
+
|
5
|
+
# Version 0.2.3
|
6
|
+
|
7
|
+
* Use updated rubocop style (v3)
|
8
|
+
* Update instructions on running tests in Docker.
|
9
|
+
|
10
|
+
# Version 0.2.2
|
11
|
+
|
12
|
+
* Revert to using Rubocop 0.54 to support non-native gems in OpenStudio CLI.
|
13
|
+
|
14
|
+
# Version 0.2.1
|
15
|
+
|
16
|
+
* Update to SimpleCov 0.18.2
|
17
|
+
* Pessimistically version dependencies
|
18
|
+
|
19
|
+
# Version 0.2.0
|
20
|
+
|
21
|
+
* Remove support for Ruby 2.2.4. Use Ruby ~> 2.5.x
|
22
|
+
* Remove NREL's fork of simplecov
|
23
|
+
* Update copyrights
|
24
|
+
* Remove travis and leverage NREL's Jenkins CI
|
25
|
+
|
1
26
|
# Version 0.1.7
|
2
27
|
|
3
28
|
* Support running measure tester in the directory of the measure.rb with OpenStudio CLI (e.g. `openstudio measure -r .`)
|
data/Gemfile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'http://rubygems.org'
|
2
4
|
|
3
5
|
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
6
|
|
5
7
|
# Specify your gem's dependencies in openstudio_measure_tester.gemspec
|
6
8
|
gemspec
|
7
|
-
|
8
|
-
gem 'simplecov', github: 'NREL/simplecov'
|
data/Jenkinsfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
//Jenkins pipelines are stored in shared libraries. Please see: https://github.com/NREL/cbci_jenkins_libs
|
2
|
+
|
3
|
+
@Library('cbci_shared_libs@ruby_270') _
|
4
|
+
|
5
|
+
// Build for PR to develop branch only.
|
6
|
+
if ((env.CHANGE_ID) && (env.CHANGE_TARGET) ) { // check if set
|
7
|
+
|
8
|
+
openstudio_measure_tester_gem()
|
9
|
+
|
10
|
+
}
|
data/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008-
|
1
|
+
OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
4
4
|
that the following conditions are met:
|
data/README.md
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# OpenStudio® Measure Tester
|
2
2
|
|
3
|
-
[](https://travis-ci.org/NREL/OpenStudio-measure-tester-gem)
|
4
3
|
[](https://badge.fury.io/rb/openstudio_measure_tester)
|
5
4
|
|
6
5
|
The OpenStudio Measure Tester is a rubygem that exposes rake tasks for testing OpenStudio measures.
|
@@ -71,17 +70,22 @@ The OpenStudio Measure Tester is a rubygem that exposes rake tasks for testing O
|
|
71
70
|
# Testing in Docker
|
72
71
|
|
73
72
|
```bash
|
73
|
+
docker run -it -v $(pwd):/root/test -w '/root' ubuntu:18.04 bash
|
74
74
|
|
75
|
+
# within container
|
75
76
|
apt-get update && apt-get install -y curl
|
76
77
|
curl -sLO https://raw.githubusercontent.com/NREL/OpenStudio-server/develop/docker/deployment/scripts/install_ruby.sh
|
77
|
-
curl -sLO https://raw.githubusercontent.com/NREL/OpenStudio-server/develop/
|
78
|
+
curl -sLO https://raw.githubusercontent.com/NREL/OpenStudio-server/develop/ci/travis/install_openstudio.sh
|
78
79
|
chmod +x install_ruby.sh
|
79
80
|
chmod +x install_openstudio.sh
|
80
|
-
./install_ruby.sh 2.
|
81
|
-
./install_openstudio.sh
|
81
|
+
./install_ruby.sh 2.5.5 28a945fdf340e6ba04fc890b98648342e3cccfd6d223a48f3810572f11b2514c
|
82
|
+
./install_openstudio.sh 3.0.0 1c9617fa4e
|
82
83
|
export RUBYLIB=/usr/Ruby
|
83
|
-
```
|
84
84
|
|
85
|
+
cd /root/test
|
86
|
+
bundle update
|
87
|
+
bundle exec rake
|
88
|
+
```
|
85
89
|
|
86
90
|
# Releasing
|
87
91
|
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/bin/run_measure_tests
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'openstudio_measure_tester'
|
4
5
|
|
@@ -12,11 +13,11 @@ end
|
|
12
13
|
begin
|
13
14
|
runner = OpenStudioMeasureTester::Runner.new(measure_dir)
|
14
15
|
runner.run_all(Dir.pwd)
|
15
|
-
rescue StandardError =>
|
16
|
+
rescue StandardError => e
|
16
17
|
puts
|
17
18
|
puts '!!!!!!!!!!!!!!!!!!!!! Error Occurred !!!!!!!!!!!!!!!!!!!!!'
|
18
|
-
puts
|
19
|
-
puts
|
19
|
+
puts e.message
|
20
|
+
puts e.backtrace
|
20
21
|
puts '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
|
21
22
|
puts
|
22
23
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -34,8 +36,8 @@ require 'minitest'
|
|
34
36
|
require 'simplecov'
|
35
37
|
|
36
38
|
begin
|
37
|
-
require 'git'
|
38
|
-
rescue LoadError =>
|
39
|
+
require 'git'
|
40
|
+
rescue LoadError => e
|
39
41
|
puts 'Could not load git, will not be able to report git information'
|
40
42
|
end
|
41
43
|
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -1,3 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
########################################################################################################################
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
7
|
+
# following conditions are met:
|
8
|
+
#
|
9
|
+
# (1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
10
|
+
# disclaimer.
|
11
|
+
#
|
12
|
+
# (2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
|
13
|
+
# following disclaimer in the documentation and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# (3) Neither the name of the copyright holder nor the names of any contributors may be used to endorse or promote
|
16
|
+
# products derived from this software without specific prior written permission from the respective party.
|
17
|
+
#
|
18
|
+
# (4) Other than as required in clauses (1) and (2), distributions in any form of modifications or other derivative
|
19
|
+
# works may not use the "OpenStudio" trademark, "OS", "os", or any other confusingly similar designation without
|
20
|
+
# specific prior written permission from Alliance for Sustainable Energy, LLC.
|
21
|
+
#
|
22
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
23
|
+
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
24
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR
|
25
|
+
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
26
|
+
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
27
|
+
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
########################################################################################################################
|
30
|
+
|
1
31
|
require 'erb'
|
2
32
|
module OpenStudioMeasureTester
|
3
33
|
class Dashboard
|
@@ -15,7 +45,7 @@ module OpenStudioMeasureTester
|
|
15
45
|
end
|
16
46
|
|
17
47
|
def render
|
18
|
-
rendered = ERB.new(@template, 0,
|
48
|
+
rendered = ERB.new(@template, 0, nil, '@html').result(binding)
|
19
49
|
save_dir = "#{@test_results_directory}/dashboard"
|
20
50
|
|
21
51
|
# Render the dashboard
|
@@ -24,7 +54,7 @@ module OpenStudioMeasureTester
|
|
24
54
|
# copy over all the resource files to display the website correctly.
|
25
55
|
resource_path = File.expand_path('../../dashboard', File.dirname(__FILE__))
|
26
56
|
# KAF: for some reason, not overwriting the files. delete them from destination first
|
27
|
-
FileUtils.remove_dir("#{save_dir}/css") if Dir.exist?"#{save_dir}/css"
|
57
|
+
FileUtils.remove_dir("#{save_dir}/css") if Dir.exist? "#{save_dir}/css"
|
28
58
|
FileUtils.remove_dir("#{save_dir}/js") if Dir.exist? "#{save_dir}/js"
|
29
59
|
FileUtils.cp_r("#{resource_path}/css", "#{save_dir}/css", remove_destination: true)
|
30
60
|
FileUtils.cp_r("#{resource_path}/js", "#{save_dir}/js", remove_destination: true)
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -65,7 +67,7 @@ module OpenStudioMeasureTester
|
|
65
67
|
json_data = JSON.parse(File.read(file), symbolize_names: true)
|
66
68
|
|
67
69
|
# Test if the measure has already been parse, if so, then continue
|
68
|
-
next if @measure_results.
|
70
|
+
next if @measure_results.key?(json_data[:measure_name])
|
69
71
|
|
70
72
|
mhash = {}
|
71
73
|
mhash[:tested_class] = json_data[:measure_name]
|
@@ -87,10 +89,10 @@ module OpenStudioMeasureTester
|
|
87
89
|
mhash[:measure_failures] = 0
|
88
90
|
mhash[:measure_skipped] = 0
|
89
91
|
mhash[:issues] = {
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
92
|
+
errors: [],
|
93
|
+
failures: [],
|
94
|
+
skipped: [],
|
95
|
+
compatibility_error: json_data[:compatible] ? 0 : 1
|
94
96
|
}
|
95
97
|
|
96
98
|
# find the report XML - if it exists
|
@@ -127,7 +129,7 @@ module OpenStudioMeasureTester
|
|
127
129
|
@total_failures += mhash[:measure_failures]
|
128
130
|
@total_skipped += mhash[:measure_skipped]
|
129
131
|
@total_compatibility_errors += mhash[:measure_compatibility_errors]
|
130
|
-
@total_loaded
|
132
|
+
@total_loaded &&= mhash[:loaded]
|
131
133
|
@total_load_errors.concat(mhash[:load_errors])
|
132
134
|
end
|
133
135
|
|
@@ -147,7 +149,7 @@ module OpenStudioMeasureTester
|
|
147
149
|
@summary[:total_loaded] = @total_loaded
|
148
150
|
@summary[:total_load_errors] = @total_load_errors
|
149
151
|
@summary[:by_measure] = @measure_results
|
150
|
-
|
152
|
+
|
151
153
|
# pp @summary
|
152
154
|
|
153
155
|
FileUtils.mkdir "#{@path_to_results}/" unless Dir.exist? "#{@path_to_results}/"
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -96,7 +98,7 @@ module OpenStudioMeasureTester
|
|
96
98
|
severity: :warning,
|
97
99
|
file_type: :test
|
98
100
|
}, {
|
99
|
-
regex:
|
101
|
+
regex: %r{require .openstudio/ruleset },
|
100
102
|
check_type: :if_exists,
|
101
103
|
message: "Require openstudio/ruleset/* is deprecated. Use require 'openstudio/measure/*'",
|
102
104
|
type: :syntax,
|
@@ -166,10 +168,10 @@ module OpenStudioMeasureTester
|
|
166
168
|
begin
|
167
169
|
# there seems to be a race condition with the infoExtractor method
|
168
170
|
measure_info = infoExtractor(measure, OpenStudio::Model::OptionalModel.new, OpenStudio::OptionalWorkspace.new)
|
169
|
-
rescue NameError =>
|
170
|
-
log_message("Unable to parse info from measure. Error: '#{
|
171
|
-
rescue StandardError =>
|
172
|
-
log_message("Unknown error extracting measure info. Error #{
|
171
|
+
rescue NameError => e
|
172
|
+
log_message("Unable to parse info from measure. Error: '#{e}'", :general, :error)
|
173
|
+
rescue StandardError => e
|
174
|
+
log_message("Unknown error extracting measure info. Error #{e}", :general, :error)
|
173
175
|
end
|
174
176
|
|
175
177
|
measure_hash = generate_measure_hash(measure_dir, measure, measure_info)
|
@@ -236,11 +238,11 @@ module OpenStudioMeasureTester
|
|
236
238
|
def run_regex_checks(measure_dir)
|
237
239
|
def check(data, check)
|
238
240
|
if check[:check_type] == :if_exists
|
239
|
-
if data
|
241
|
+
if data.match?(check[:regex])
|
240
242
|
log_message(check[:message], check[:type], check[:severity])
|
241
243
|
end
|
242
244
|
elsif check[:check_type] == :if_missing
|
243
|
-
if data
|
245
|
+
if !data&.match?(check[:regex])
|
244
246
|
log_message(check[:message], check[:type], check[:severity])
|
245
247
|
end
|
246
248
|
end
|
@@ -273,11 +275,11 @@ module OpenStudioMeasureTester
|
|
273
275
|
clean_name = name
|
274
276
|
|
275
277
|
# Check for parenthetical names
|
276
|
-
if clean_name
|
278
|
+
if clean_name.match?(/\(.+?\)/)
|
277
279
|
log_message("#{name_type} '#{name}' appears to have units. Set units in the setUnits method.", severity)
|
278
280
|
end
|
279
281
|
|
280
|
-
if clean_name
|
282
|
+
if clean_name.match?(/\?|\.|\#/)
|
281
283
|
log_message("#{name_type} '#{name}' cannot contain ?#.[] characters.", :syntax, severity)
|
282
284
|
end
|
283
285
|
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -58,7 +60,7 @@ module OpenStudioMeasureTester
|
|
58
60
|
if !logs.empty?
|
59
61
|
sha = logs.first.sha
|
60
62
|
end
|
61
|
-
rescue StandardError =>
|
63
|
+
rescue StandardError => e
|
62
64
|
puts 'Could not find .git for measure(s), will not be able to report git information'
|
63
65
|
end
|
64
66
|
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -69,7 +71,7 @@ module OpenStudioMeasureTester
|
|
69
71
|
desc 'Run RuboCop Auto Correct on Measures'
|
70
72
|
task :auto_correct do
|
71
73
|
# original_dir is the location where Rakefile exists, Dir.pwd is where the rake task was called.
|
72
|
-
runner = OpenStudioMeasureTester::Runner.new(Rake.application.original_dir
|
74
|
+
runner = OpenStudioMeasureTester::Runner.new(Rake.application.original_dir)
|
73
75
|
|
74
76
|
exit runner.run_rubocop(false, true)
|
75
77
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -65,7 +67,7 @@ module OpenStudioMeasureTester
|
|
65
67
|
end
|
66
68
|
|
67
69
|
def parse_results
|
68
|
-
Dir[File.join(@path_to_results,'rubocop-results.xml')].each do |file|
|
70
|
+
Dir[File.join(@path_to_results, 'rubocop-results.xml')].each do |file|
|
69
71
|
puts "Parsing Rubocop report #{file}"
|
70
72
|
|
71
73
|
measure_names = []
|
@@ -1,3 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
########################################################################################################################
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
7
|
+
# following conditions are met:
|
8
|
+
#
|
9
|
+
# (1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
10
|
+
# disclaimer.
|
11
|
+
#
|
12
|
+
# (2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
|
13
|
+
# following disclaimer in the documentation and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# (3) Neither the name of the copyright holder nor the names of any contributors may be used to endorse or promote
|
16
|
+
# products derived from this software without specific prior written permission from the respective party.
|
17
|
+
#
|
18
|
+
# (4) Other than as required in clauses (1) and (2), distributions in any form of modifications or other derivative
|
19
|
+
# works may not use the "OpenStudio" trademark, "OS", "os", or any other confusingly similar designation without
|
20
|
+
# specific prior written permission from Alliance for Sustainable Energy, LLC.
|
21
|
+
#
|
22
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
23
|
+
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
24
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR
|
25
|
+
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
26
|
+
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
27
|
+
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
########################################################################################################################
|
30
|
+
|
1
31
|
module OpenStudioMeasureTester
|
2
32
|
# The runner is the workhorse that executes the tests. This class does not invoke Rake and can be run
|
3
33
|
# as a library method or as a CLI call
|
@@ -196,73 +226,70 @@ module OpenStudioMeasureTester
|
|
196
226
|
num_tests = 0
|
197
227
|
openstudio_version = OpenStudio::VersionString.new(OpenStudio.openStudioVersion)
|
198
228
|
Dir["#{@base_dir}/**/*_Test.rb", "#{@base_dir}/**/*_test.rb"].uniq.each do |file|
|
199
|
-
|
229
|
+
file = File.expand_path(file)
|
230
|
+
measure_dir = File.expand_path(File.join(File.dirname(file), '..'))
|
231
|
+
|
232
|
+
# check measure xml
|
233
|
+
compatible = {
|
234
|
+
compatible: true,
|
235
|
+
message: '',
|
236
|
+
openstudio_version: openstudio_version.str,
|
237
|
+
measure_min_version: 'None',
|
238
|
+
measure_max_version: 'None',
|
239
|
+
loaded: false,
|
240
|
+
load_errors: []
|
241
|
+
}
|
200
242
|
begin
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
loaded: false,
|
212
|
-
load_errors: []
|
213
|
-
}
|
214
|
-
begin
|
215
|
-
measure = OpenStudio::BCLMeasure.new(measure_dir)
|
216
|
-
compatible[:measure_name] = measure.className
|
217
|
-
measure.files.each do |f|
|
218
|
-
if f.fileName == 'measure.rb'
|
219
|
-
if !f.minCompatibleVersion.empty?
|
220
|
-
min_version = f.minCompatibleVersion.get
|
221
|
-
compatible[:measure_min_version] = min_version.str
|
222
|
-
if openstudio_version < min_version
|
223
|
-
compatible[:compatible] = false
|
224
|
-
compatible[:message] = "OpenStudio Version #{openstudio_version.str} < Min Version #{min_version.str}"
|
225
|
-
end
|
243
|
+
measure = OpenStudio::BCLMeasure.new(measure_dir)
|
244
|
+
compatible[:measure_name] = measure.className
|
245
|
+
measure.files.each do |f|
|
246
|
+
if f.fileName == 'measure.rb'
|
247
|
+
if !f.minCompatibleVersion.empty?
|
248
|
+
min_version = f.minCompatibleVersion.get
|
249
|
+
compatible[:measure_min_version] = min_version.str
|
250
|
+
if openstudio_version < min_version
|
251
|
+
compatible[:compatible] = false
|
252
|
+
compatible[:message] = "OpenStudio Version #{openstudio_version.str} < Min Version #{min_version.str}"
|
226
253
|
end
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
254
|
+
end
|
255
|
+
if !f.maxCompatibleVersion.empty?
|
256
|
+
max_version = f.maxCompatibleVersion.get
|
257
|
+
compatible[:measure_max_version] = max_version.str
|
258
|
+
if openstudio_version > max_version
|
259
|
+
compatible[:compatible] = false
|
260
|
+
compatible[:message] = "OpenStudio Version #{openstudio_version.str} > Max Version #{max_version.str}"
|
234
261
|
end
|
235
262
|
end
|
236
263
|
end
|
237
|
-
rescue StandardError => exception
|
238
|
-
compatible[:compatible] = false
|
239
|
-
compatible[:message] = exception.message
|
240
264
|
end
|
265
|
+
rescue StandardError => e
|
266
|
+
compatible[:compatible] = false
|
267
|
+
compatible[:message] = e.message
|
268
|
+
end
|
241
269
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
270
|
+
if !compatible[:compatible]
|
271
|
+
puts "Measure not compatible: #{measure_dir}, #{compatible[:message]}"
|
272
|
+
next
|
273
|
+
end
|
246
274
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
end
|
275
|
+
# load test
|
276
|
+
puts "Loading file for testing: #{file}"
|
277
|
+
begin
|
278
|
+
load file
|
279
|
+
compatible[:loaded] = true
|
280
|
+
num_tests += 1
|
281
|
+
rescue StandardError, LoadError => e
|
282
|
+
compatible[:load_errors] << e.message
|
283
|
+
end
|
284
|
+
|
285
|
+
ensure
|
286
|
+
# Write out the compatibility
|
287
|
+
# write out to a file that the measure is not applicable
|
288
|
+
os_compatible_file = "#{@base_dir}/test_results/minitest/compatibility/#{compatible[:measure_name]}.json"
|
289
|
+
puts os_compatible_file
|
290
|
+
FileUtils.mkdir_p File.dirname(os_compatible_file) unless Dir.exist? File.dirname(os_compatible_file)
|
291
|
+
File.open(os_compatible_file, 'w') do |f|
|
292
|
+
f << JSON.pretty_generate(compatible)
|
266
293
|
end
|
267
294
|
end
|
268
295
|
|
@@ -295,11 +322,11 @@ module OpenStudioMeasureTester
|
|
295
322
|
# openstudio_measure_tester.rb file, so it will not run.
|
296
323
|
begin
|
297
324
|
Minitest.run ['--verbose']
|
298
|
-
rescue StandardError =>
|
325
|
+
rescue StandardError => e
|
299
326
|
puts
|
300
327
|
puts '!!!!!!!!!!!!!!!!!!!!! Minitest Error Occurred !!!!!!!!!!!!!!!!!!!!!'
|
301
|
-
puts
|
302
|
-
puts
|
328
|
+
puts e.message
|
329
|
+
puts e.backtrace
|
303
330
|
puts '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
|
304
331
|
puts
|
305
332
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
4
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
7
|
# following conditions are met:
|
@@ -27,5 +29,5 @@
|
|
27
29
|
########################################################################################################################
|
28
30
|
|
29
31
|
module OpenStudioMeasureTester
|
30
|
-
VERSION = '0.
|
32
|
+
VERSION = '0.3.0'.freeze
|
31
33
|
end
|
@@ -1,38 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
lib = File.expand_path('lib', __dir__)
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
5
|
require 'openstudio_measure_tester/version'
|
4
6
|
|
5
7
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.version
|
8
|
-
spec.authors
|
9
|
-
spec.email
|
8
|
+
spec.name = 'openstudio_measure_tester'
|
9
|
+
spec.version = OpenStudioMeasureTester::VERSION
|
10
|
+
spec.authors = ['Nicholas Long', 'Katherine Fleming', 'Daniel Macumber', 'Robert Guglielmetti']
|
11
|
+
spec.email = ['nicholas.long@nrel.gov']
|
10
12
|
|
11
|
-
spec.
|
12
|
-
spec.
|
13
|
-
spec.
|
13
|
+
spec.homepage = 'https://openstudio.nrel.gov'
|
14
|
+
spec.summary = 'Testing framework for OpenStudio measures'
|
15
|
+
spec.description = 'Testing framework for OpenStudio measures'
|
16
|
+
spec.metadata = {
|
17
|
+
'bug_tracker_uri' => 'https://github.com/NREL/OpenStudio-measure-tester-gem/issues',
|
18
|
+
'changelog_uri' => 'https://github.com/NREL/OpenStudio-measure-tester-gem/blob/develop/CHANGELOG.md',
|
19
|
+
# 'documentation_uri' => 'https://www.rubydoc.info/gems/openstudio_measure_tester/#{gem.version}',
|
20
|
+
'source_code_uri' => "https://github.com/NREL/OpenStudio-measure-tester-gem/tree/v#{spec.version}"
|
21
|
+
}
|
14
22
|
|
15
|
-
spec.files
|
23
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
16
24
|
f.match(%r{^(test|spec|features)/})
|
17
25
|
end
|
18
|
-
spec.bindir
|
19
|
-
spec.executables
|
26
|
+
spec.bindir = 'exe'
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
28
|
spec.require_paths = ['lib']
|
21
29
|
|
22
|
-
spec.
|
23
|
-
spec.add_development_dependency 'rspec', '3.7.0'
|
30
|
+
spec.required_ruby_version = '~> 2.7.0'
|
24
31
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
spec.
|
34
|
-
spec.
|
35
|
-
spec.add_dependency 'rake', '12.3.1'
|
36
|
-
spec.add_dependency 'rubocop-checkstyle_formatter', '0.4'
|
37
|
-
spec.add_dependency 'simplecov', '0.16.1'
|
32
|
+
spec.add_dependency 'git', '~> 1.6.0'
|
33
|
+
spec.add_dependency 'minitest', '~> 5.14.0'
|
34
|
+
spec.add_dependency 'minitest-reporters', '~> 1.4.2'
|
35
|
+
spec.add_dependency 'rake', '~> 13.0'
|
36
|
+
spec.add_dependency 'rubocop', '~> 0.54.0'
|
37
|
+
spec.add_dependency 'rubocop-checkstyle_formatter', '~> 0.4.0'
|
38
|
+
spec.add_dependency 'simplecov', '~> 0.18.2'
|
39
|
+
|
40
|
+
spec.add_development_dependency 'bundler', '>= 2.1.0'
|
41
|
+
spec.add_development_dependency 'rspec', '~> 3.9'
|
38
42
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio_measure_tester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas Long
|
@@ -11,134 +11,134 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2021-02-15 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
17
|
+
name: git
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
20
|
- - "~>"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
23
|
-
type: :
|
22
|
+
version: 1.6.0
|
23
|
+
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.6.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: minitest
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
|
-
- -
|
34
|
+
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
37
|
-
type: :
|
36
|
+
version: 5.14.0
|
37
|
+
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- -
|
41
|
+
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 5.14.0
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
|
-
name:
|
45
|
+
name: minitest-reporters
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- -
|
48
|
+
- - "~>"
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
50
|
+
version: 1.4.2
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
|
-
- -
|
55
|
+
- - "~>"
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
57
|
+
version: 1.4.2
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
59
|
+
name: rake
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- -
|
62
|
+
- - "~>"
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
64
|
+
version: '13.0'
|
65
65
|
type: :runtime
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - "~>"
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version:
|
71
|
+
version: '13.0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
|
-
name:
|
73
|
+
name: rubocop
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
|
-
- -
|
76
|
+
- - "~>"
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version:
|
78
|
+
version: 0.54.0
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - "~>"
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
85
|
+
version: 0.54.0
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
|
-
name:
|
87
|
+
name: rubocop-checkstyle_formatter
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- -
|
90
|
+
- - "~>"
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
92
|
+
version: 0.4.0
|
93
93
|
type: :runtime
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
99
|
+
version: 0.4.0
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
|
-
name:
|
101
|
+
name: simplecov
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- -
|
104
|
+
- - "~>"
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version:
|
106
|
+
version: 0.18.2
|
107
107
|
type: :runtime
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- -
|
111
|
+
- - "~>"
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version:
|
113
|
+
version: 0.18.2
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
115
|
+
name: bundler
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
|
-
- -
|
118
|
+
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version:
|
121
|
-
type: :
|
120
|
+
version: 2.1.0
|
121
|
+
type: :development
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- -
|
125
|
+
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
127
|
+
version: 2.1.0
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
|
-
name:
|
129
|
+
name: rspec
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
|
-
- -
|
132
|
+
- - "~>"
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version:
|
135
|
-
type: :
|
134
|
+
version: '3.9'
|
135
|
+
type: :development
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
|
-
- -
|
139
|
+
- - "~>"
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
141
|
+
version: '3.9'
|
142
142
|
description: Testing framework for OpenStudio measures
|
143
143
|
email:
|
144
144
|
- nicholas.long@nrel.gov
|
@@ -148,11 +148,10 @@ extra_rdoc_files: []
|
|
148
148
|
files:
|
149
149
|
- ".gitignore"
|
150
150
|
- ".rspec"
|
151
|
-
- ".rubocop-http---s3-amazonaws-com-openstudio-resources-styles-rubocop-yml"
|
152
151
|
- ".rubocop.yml"
|
153
|
-
- ".travis.yml"
|
154
152
|
- CHANGELOG.md
|
155
153
|
- Gemfile
|
154
|
+
- Jenkinsfile
|
156
155
|
- LICENSE.md
|
157
156
|
- README.md
|
158
157
|
- Rakefile
|
@@ -184,24 +183,26 @@ files:
|
|
184
183
|
- openstudio_measure_tester.gemspec
|
185
184
|
homepage: https://openstudio.nrel.gov
|
186
185
|
licenses: []
|
187
|
-
metadata:
|
186
|
+
metadata:
|
187
|
+
bug_tracker_uri: https://github.com/NREL/OpenStudio-measure-tester-gem/issues
|
188
|
+
changelog_uri: https://github.com/NREL/OpenStudio-measure-tester-gem/blob/develop/CHANGELOG.md
|
189
|
+
source_code_uri: https://github.com/NREL/OpenStudio-measure-tester-gem/tree/v0.3.0
|
188
190
|
post_install_message:
|
189
191
|
rdoc_options: []
|
190
192
|
require_paths:
|
191
193
|
- lib
|
192
194
|
required_ruby_version: !ruby/object:Gem::Requirement
|
193
195
|
requirements:
|
194
|
-
- - "
|
196
|
+
- - "~>"
|
195
197
|
- !ruby/object:Gem::Version
|
196
|
-
version:
|
198
|
+
version: 2.7.0
|
197
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
200
|
requirements:
|
199
201
|
- - ">="
|
200
202
|
- !ruby/object:Gem::Version
|
201
203
|
version: '0'
|
202
204
|
requirements: []
|
203
|
-
|
204
|
-
rubygems_version: 2.4.5.1
|
205
|
+
rubygems_version: 3.1.4
|
205
206
|
signing_key:
|
206
207
|
specification_version: 4
|
207
208
|
summary: Testing framework for OpenStudio measures
|
data/.travis.yml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
sudo: true
|
2
|
-
language: ruby
|
3
|
-
rvm:
|
4
|
-
- 2.2.4
|
5
|
-
matrix:
|
6
|
-
include:
|
7
|
-
- env: OPENSTUDIO_VERSION=2.4.0 && OPENSTUDIO_SHA=f58a3e1808 && RUBYLIB=/usr/Ruby
|
8
|
-
- env: OPENSTUDIO_VERSION=2.5.1 && OPENSTUDIO_SHA=4f268e2854 && RUBYLIB=/usr/Ruby
|
9
|
-
before_install: gem install bundler -v 1.16.2
|
10
|
-
before_script:
|
11
|
-
- curl -sLO https://raw.githubusercontent.com/NREL/OpenStudio-server/develop/docker/deployment/scripts/install_openstudio.sh
|
12
|
-
- chmod +x install_openstudio.sh
|
13
|
-
- sudo ./install_openstudio.sh $OPENSTUDIO_VERSION $OPENSTUDIO_SHA
|
14
|
-
script:
|
15
|
-
- bundle exec rake
|