urbanopt-cli 0.11.1 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dee18d6e4ea1f143b0616e07f3874368ec3a22c819dd218dd1e9f89301ff059e
4
- data.tar.gz: e75496190b9ef64631426f7d583cc8e9d4232f10afa74b03f3dd17108b96409a
3
+ metadata.gz: 6e5df564dfc3eb3721c92cdbd5b891f4dbe30f25fdbd1675a524bb83405c693e
4
+ data.tar.gz: 77066270f710fd6e0740b6b4f19a594d9c1678f627e0d44899ef0441631dcfb8
5
5
  SHA512:
6
- metadata.gz: d380c0760876f4a91e6a04d90cbf4d8e8c7e8fb38310eee6f539d97450410e26ccafd7d1c7fdbf723ff3a82365c8ae58967a75324a49d3545b53c9f31c7cb349
7
- data.tar.gz: 7646d91864f845fb4ed641ac347e90fe1bede2a7247727abaa70bdddd553163ed1ffaa0a9b4a14ef3139ac7ed95dba478c20937ad01b73a6db3abdf33345e063
6
+ metadata.gz: b90a53b3af3ff7c9834e2f1d0d258055dd87ec086605e2f4192ba3f8e8d265c9eeca1b244315c821c69a4d789dfb02cca25b75208939631e2d5e58af111aca81
7
+ data.tar.gz: 91167c44034b9c50ae4399a08d11d11145271f65dea54da400cf7a6b8ac27cb1c3c3dc77961b243f49e6bd6ce0f1c7f8eb4faab51ab81266b9cec92f243d8a44
@@ -1,8 +1,9 @@
1
1
  name: CLI CI
2
2
 
3
3
  on:
4
- # Run on weeknights, and also whenever a push is made
5
- push:
4
+ workflow_dispatch:
5
+ # Run on demand and weeknights
6
+ # push:
6
7
  schedule:
7
8
  # # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
8
9
  # # 5:24 am UTC (11:24pm MDT the day before) every weekday night in MDT
@@ -16,6 +17,7 @@ env:
16
17
  # If CI is then successful, we have a breaking change in a dependency somewhere.
17
18
  FAVOR_LOCAL_GEMS: true
18
19
  GEM_DEVELOPER_KEY: ${{ secrets.GEM_DEVELOPER_KEY }}
20
+ # RUBYLIB: /usr/local/openstudio-3.7.0/Ruby
19
21
  UO_NUM_PARALLEL: 4
20
22
  # GHA machines have 4 cores. Trying to run more concurrently will slow everything down.
21
23
  # https://github.blog/2024-01-17-github-hosted-runners-double-the-power-for-open-source/
@@ -32,10 +34,12 @@ jobs:
32
34
  steps:
33
35
  - uses: actions/checkout@v4
34
36
  - name: Change Owner of Container Working Directory
35
- # working dir permissions workaround from https://github.com/actions/runner-images/issues/6775#issuecomment-1377299658
36
- run: chown root:root .
37
+ # working dir permissions workaround from https://github.com/actions/runner-images/issues/6775s#issuecomment-1377299658
38
+ run: |
39
+ chown root:root .
37
40
  - name: Install Ruby dependencies
38
41
  run: |
42
+ which ruby
39
43
  ruby --version
40
44
  bundle update
41
45
  bundle exec certified-update
@@ -60,6 +64,5 @@ jobs:
60
64
  if: failure()
61
65
  with:
62
66
  name: rspec_results
63
- path: |
64
- spec/test_directory**/
67
+ path: artifact.zip
65
68
  retention-days: 7 # save for 1 week then delete
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 0.12.0
4
+ Date Range: 02/08/2024 - 05/15/2024
5
+
6
+ ### Exciting New Features 🎉
7
+ * Update CLI sub-commands to be consistent across commands by @vtnate in https://github.com/urbanopt/urbanopt-cli/pull/455
8
+ * Update commands, paths, and example files for Reopt v3 by @vtnate in https://github.com/urbanopt/urbanopt-cli/pull/463
9
+ ### Other Changes
10
+ * Update installer 0.11.1 by @tijcolem in https://github.com/urbanopt/urbanopt-cli/pull/452
11
+ * adding rescue blocks to catch errors by @kflemin in https://github.com/urbanopt/urbanopt-cli/pull/454
12
+ * update error handling for installing python and dependencies by @kflemin in https://github.com/urbanopt/urbanopt-cli/pull/458
13
+
14
+ **Full Changelog**: https://github.com/urbanopt/urbanopt-cli/compare/v0.11.1...v0.12.0
15
+
3
16
  ## Version 0.11.1
4
17
  Date Range: 01/26/2024 - 02/08/2024
5
18
 
data/CMakeLists.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  cmake_minimum_required(VERSION 3.10.2)
2
2
  cmake_policy(SET CMP0048 NEW)
3
3
 
4
- project(URBANoptCLI VERSION 0.11.0)
4
+ project(URBANoptCLI VERSION 0.11.1)
5
5
 
6
6
  include(FindOpenStudioSDK.cmake)
7
7
 
@@ -89,16 +89,21 @@ option(BUILD_PACKAGE "Build package" OFF)
89
89
  # need to update the MD5sum for each platform and url below
90
90
  if(UNIX)
91
91
  if(APPLE)
92
- set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20240202-darwin.tar.gz")
93
- set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "27dad609451f5b0e7835efbcb8e362b7")
92
+ set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20240220-darwin.tar.gz")
93
+ set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "1f735d71eab98df9be7b72f9d5d8a940")
94
94
  else()
95
- set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20240202-linux.tar.gz")
96
- set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "2182c1ca7bcd85505db4700f4937d181")
95
+ if (ARCH MATCHES "arm64")
96
+ set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20240220-linux-arm.tar.gz")
97
+ set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "ceb41bdd108a77bc43c6d260725a399f")
98
+ else()
99
+ set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20240220-linux.tar.gz")
100
+ set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "715c40a3bf59d539a18a03ad3932ca67")
101
+ endif()
97
102
  endif()
98
103
  elseif(WIN32)
99
104
  if(CMAKE_CL_64)
100
- set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20240202-windows.tar.gz")
101
- set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "7a7cc4f928646363bd57b41e10caebca")
105
+ set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20240220-windows.tar.gz")
106
+ set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "944c39e178651173a03efae1d99713e3")
102
107
  endif()
103
108
  endif()
104
109
 
@@ -24,6 +24,11 @@ else()
24
24
  set(OPENSTUDIO_EXT "tar.gz")
25
25
  elseif(UNIX)
26
26
  if(LSB_RELEASE_VERSION_SHORT MATCHES "20.04")
27
+ if (ARCH MATCHES "arm64")
28
+ set(OPENSTUDIO_EXPECTED_HASH d98b3d3d133a7c5bc1b9581553d23811)
29
+ else()
30
+ set(OPENSTUDIO_EXPECTED_HASH 1e48f36417d3d118d6a10f1a7d61f46e)
31
+ endif()
27
32
  set(OPENSTUDIO_EXPECTED_HASH 5c006e5e66e5e859206a63626ea2966f)
28
33
  set(OPENSTUDIO_PLATFORM "Ubuntu-20.04-x86_64")
29
34
  else() # Assumes 20.04
data/Gemfile CHANGED
@@ -40,16 +40,16 @@ gem 'parser', '3.2.2.2'
40
40
  # if allow_local && File.exist?('../urbanopt-reopt-gem')
41
41
  # gem 'urbanopt-reopt', path: '../urbanopt-reopt-gem'
42
42
  # elsif allow_local
43
- # gem 'urbanopt-reopt', github: 'URBANopt/urbanopt-reopt-gem', branch: 'develop'
43
+ # gem 'urbanopt-reopt', github: 'URBANopt/urbanopt-reopt-gem', branch: 'develop'
44
44
  # end
45
45
 
46
46
  # if allow_local && File.exist?('../urbanopt-reporting-gem')
47
47
  # gem 'urbanopt-reporting', path: '../urbanopt-reporting-gem'
48
48
  # elsif allow_local
49
- # gem 'urbanopt-reporting', github: 'URBANopt/urbanopt-reporting-gem', branch: 'develop'
49
+ # gem 'urbanopt-reporting', github: 'URBANopt/urbanopt-reporting-gem', branch: 'develop'
50
50
  # end
51
51
 
52
- #if allow_local && File.exist?('../urbanopt-rnm-us-gem')
52
+ # if allow_local && File.exist?('../urbanopt-rnm-us-gem')
53
53
  # gem 'urbanopt-rnm-us', path: '../urbanopt-rnm-us-gem'
54
54
  # elsif allow_local
55
55
  # gem 'urbanopt-rnm-us', github: 'URBANopt/urbanopt-rnm-us-gem', branch: 'develop'
data/bin/console CHANGED
@@ -3,12 +3,5 @@
3
3
  require 'bundler/setup'
4
4
  require 'uo_cli'
5
5
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
6
  require 'irb'
14
7
  IRB.start(__FILE__)
@@ -51,7 +51,7 @@ if allow_local && File.exist?('../openstudio-load-flexibility-measures-gem')
51
51
  elsif allow_local
52
52
  gem 'openstudio-load-flexibility-measures', github: 'NREL/openstudio-load-flexibility-measures-gem', branch: 'develop'
53
53
  else
54
- gem 'openstudio-load-flexibility-measures', '~> 0.8.0'
54
+ gem 'openstudio-load-flexibility-measures', '~> 0.8.0'
55
55
  end
56
56
 
57
57
  if allow_local && File.exist?('../openstudio-ee-gem')
@@ -78,7 +78,7 @@ else
78
78
  gem 'openstudio-geb', '~> 0.4.0'
79
79
  end
80
80
 
81
- if allow_local && File.exists?('../urbanopt-geojson-gem')
81
+ if allow_local && File.exist?('../urbanopt-geojson-gem')
82
82
  gem 'urbanopt-geojson', path: '../../urbanopt-geojson-gem'
83
83
  elsif allow_local
84
84
  gem 'urbanopt-geojson', github: 'URBANopt/urbanopt-geojson-gem', branch: 'develop'
@@ -94,5 +94,5 @@ if allow_local && File.exist?('../urbanopt-reporting-gem')
94
94
  elsif allow_local
95
95
  gem 'urbanopt-reporting', github: 'URBANopt/urbanopt-reporting-gem', branch: 'develop'
96
96
  else
97
- gem 'urbanopt-reporting', '~> 0.9.1'
97
+ gem 'urbanopt-reporting', '~> 0.10.0'
98
98
  end
@@ -1105,6 +1105,6 @@ module URBANopt
1105
1105
 
1106
1106
  return osw
1107
1107
  end
1108
- end # end class
1108
+ end
1109
1109
  end
1110
1110
  end
@@ -3,7 +3,6 @@
3
3
  # See also https://github.com/urbanopt/urbanopt-cli/blob/develop/LICENSE.md
4
4
  # *********************************************************************************
5
5
 
6
-
7
6
  def residential_template(args, template, climate_zone)
8
7
  '''Assign arguments from tsv files.'''
9
8
 
@@ -44,7 +43,6 @@ def residential_template(args, template, climate_zone)
44
43
  { args[:heating_system_type] => 'iecc/heating_system.tsv',
45
44
  args[:cooling_system_type] => 'iecc/cooling_system.tsv',
46
45
  args[:heat_pump_type] => 'iecc/heat_pump.tsv' }.each do |type, path|
47
-
48
46
  if type != 'none'
49
47
  filepath = File.join(File.dirname(__FILE__), path)
50
48
  lookup_tsv = get_lookup_tsv(args, filepath)
@@ -3,7 +3,6 @@
3
3
  # See also https://github.com/urbanopt/urbanopt-cli/blob/develop/LICENSE.md
4
4
  # *********************************************************************************
5
5
 
6
-
7
6
  def residential(scenario, feature, args, building_type)
8
7
  '''Assign arguments from geojson file.'''
9
8
 
@@ -125,7 +125,7 @@ class BuildResidentialModel < OpenStudio::Measure::ModelMeasure
125
125
 
126
126
  standards_number_of_living_units = units.size
127
127
  else
128
- xml_building_folder = "xml_building"
128
+ xml_building_folder = 'xml_building'
129
129
  hpxml_dir = File.join(File.dirname(__FILE__), "../../#{xml_building_folder}/#{args[:hpxml_dir]}")
130
130
 
131
131
  if !File.exist?(hpxml_dir)
@@ -158,7 +158,6 @@ class BuildResidentialModel < OpenStudio::Measure::ModelMeasure
158
158
 
159
159
  hpxml_path = File.expand_path(args[:hpxml_path])
160
160
  units.each_with_index do |unit, unit_num|
161
-
162
161
  measures = {}
163
162
  if !unit.key?('hpxml_path') # create a single new HPXML file describing all dwelling units of the feature
164
163
 
@@ -167,7 +166,7 @@ class BuildResidentialModel < OpenStudio::Measure::ModelMeasure
167
166
  full_measure_path = File.join(measures_dir, measure_subdir, 'measure.rb')
168
167
  check_file_exists(full_measure_path, runner)
169
168
 
170
- measure_args = args.clone.collect { |k, v| [k.to_s, v] }.to_h
169
+ measure_args = args.clone.transform_keys(&:to_s)
171
170
  measure_args['hpxml_path'] = hpxml_path
172
171
  if unit_num > 0
173
172
  measure_args['existing_hpxml_path'] = hpxml_path
@@ -208,7 +207,7 @@ class BuildResidentialModel < OpenStudio::Measure::ModelMeasure
208
207
  FileUtils.cp(File.expand_path(unit['hpxml_path']), hpxml_path)
209
208
 
210
209
  end
211
- end # end units.each_with_index do |unit, unit_num|
210
+ end
212
211
 
213
212
  # call BuildResidentialScheduleFile / HPXMLtoOpenStudio after HPXML file is created
214
213
  measures = {}
@@ -10,7 +10,7 @@ require_relative '../../../mappers/residential/util'
10
10
  require_relative '../../../mappers/residential/template//util'
11
11
  require 'openstudio'
12
12
  require 'openstudio/measure/ShowRunnerOutput'
13
- require_relative '../measure.rb'
13
+ require_relative '../measure'
14
14
  require 'csv'
15
15
 
16
16
  class BuildResidentialModelTest < Minitest::Test
@@ -21,14 +21,14 @@ class BuildResidentialModelTest < Minitest::Test
21
21
  FileUtils.mkdir_p(@run_path)
22
22
 
23
23
  @args = {}
24
- _initialize_arguments()
24
+ _initialize_arguments
25
25
  end
26
26
 
27
27
  def teardown
28
28
  FileUtils.rm_rf(@run_path)
29
29
  end
30
30
 
31
- def _initialize_arguments()
31
+ def _initialize_arguments
32
32
  # BuildResidentialModel arguments
33
33
  @args[:hpxml_path] = @hpxml_path
34
34
  @args[:output_dir] = @run_path
@@ -77,7 +77,7 @@ class BuildResidentialModelTest < Minitest::Test
77
77
 
78
78
  @args[:geometry_building_num_units] = 4
79
79
 
80
- _test_measure()
80
+ _test_measure
81
81
  end
82
82
 
83
83
  def test_schedules_type
@@ -88,8 +88,8 @@ class BuildResidentialModelTest < Minitest::Test
88
88
  schedules_types.each do |schedules_type|
89
89
  @args[:schedules_type] = schedules_type
90
90
 
91
- _apply_residential()
92
- _test_measure()
91
+ _apply_residential
92
+ _test_measure
93
93
  end
94
94
  end
95
95
 
@@ -118,7 +118,7 @@ class BuildResidentialModelTest < Minitest::Test
118
118
  end
119
119
  end
120
120
 
121
- _apply_residential()
121
+ _apply_residential
122
122
  _test_measure(expected_errors: expected_errors)
123
123
  end
124
124
  end
@@ -157,7 +157,7 @@ class BuildResidentialModelTest < Minitest::Test
157
157
  end
158
158
  end
159
159
 
160
- _apply_residential()
160
+ _apply_residential
161
161
  _test_measure(expected_errors: expected_errors)
162
162
  end
163
163
  end
@@ -182,8 +182,8 @@ class BuildResidentialModelTest < Minitest::Test
182
182
  @args[:geometry_building_num_units] = feature_number_of_residential_units
183
183
  @number_of_bedrooms = feature_number_of_bedrooms
184
184
 
185
- _apply_residential()
186
- _test_measure()
185
+ _apply_residential
186
+ _test_measure
187
187
  end
188
188
  end
189
189
  end
@@ -210,8 +210,8 @@ class BuildResidentialModelTest < Minitest::Test
210
210
  @args[:geometry_building_num_units] = feature_number_of_residential_units
211
211
  @number_of_occupants = feature_number_of_occupants
212
212
 
213
- _apply_residential()
214
- _test_measure()
213
+ _apply_residential
214
+ _test_measure
215
215
  end
216
216
  end
217
217
  end
@@ -244,7 +244,7 @@ class BuildResidentialModelTest < Minitest::Test
244
244
  expected_errors = ['Conditioned basement/crawlspace foundation type for apartment units is not currently supported.']
245
245
  end
246
246
 
247
- _apply_residential()
247
+ _apply_residential
248
248
  _test_measure(expected_errors: expected_errors)
249
249
  end
250
250
  end
@@ -264,8 +264,8 @@ class BuildResidentialModelTest < Minitest::Test
264
264
  @system_type = feature_system_type
265
265
  @heating_system_fuel_type = feature_heating_system_fuel_type
266
266
 
267
- _apply_residential()
268
- _test_measure()
267
+ _apply_residential
268
+ _test_measure
269
269
  end
270
270
  end
271
271
  end
@@ -278,17 +278,17 @@ class BuildResidentialModelTest < Minitest::Test
278
278
 
279
279
  feature_templates.each do |feature_template|
280
280
  @args = {}
281
- _initialize_arguments()
281
+ _initialize_arguments
282
282
 
283
283
  @template = feature_template
284
284
 
285
- _apply_residential()
286
- _apply_residential_template()
287
- _test_measure()
285
+ _apply_residential
286
+ _apply_residential_template
287
+ _test_measure
288
288
  end
289
289
  end
290
290
 
291
- def _apply_residential()
291
+ def _apply_residential
292
292
  residential_simulation(@args, @timestep, @run_period, @calendar_year, @weather_filename)
293
293
  residential_geometry_unit(@args, @building_type, @floor_area, @number_of_bedrooms, @geometry_unit_orientation, @geometry_unit_aspect_ratio, @occupancy_calculation_type, @number_of_occupants, @maximum_roof_height)
294
294
  residential_geometry_foundation(@args, @foundation_type)
@@ -299,7 +299,7 @@ class BuildResidentialModelTest < Minitest::Test
299
299
  residential_appliances(@args)
300
300
  end
301
301
 
302
- def _apply_residential_template()
302
+ def _apply_residential_template
303
303
  residential_template(@args, @template, @climate_zone)
304
304
  end
305
305
 
@@ -317,7 +317,7 @@ class BuildResidentialModelTest < Minitest::Test
317
317
  # populate argument with specified hash value if specified
318
318
  arguments.each do |arg|
319
319
  temp_arg_var = arg.clone
320
- if @args.has_key?(arg.name.to_sym)
320
+ if @args.key?(arg.name.to_sym)
321
321
  assert(temp_arg_var.setValue(@args[arg.name.to_sym]))
322
322
  end
323
323
  argument_map[arg.name] = temp_arg_var
@@ -332,7 +332,7 @@ class BuildResidentialModelTest < Minitest::Test
332
332
  # show_output(result) unless result.value.valueName == 'Fail'
333
333
  assert_equal('Fail', result.value.valueName)
334
334
 
335
- error_msgs = result.errors.map { |x| x.logMessage }
335
+ error_msgs = result.errors.map(&:logMessage)
336
336
  expected_errors.each do |expected_error|
337
337
  assert_includes(error_msgs, expected_error)
338
338
  end
@@ -1,6 +1,6 @@
1
1
  [
2
- { "name": "ThermalNetwork", "version": "0.2.3"},
3
- { "name": "urbanopt-ditto-reader", "version": "0.6.3"},
4
- { "name": "NREL-disco", "version": "0.5.0"},
5
- { "name": "geojson-modelica-translator", "version": "0.6.0"}
2
+ { "name": "ThermalNetwork", "version": "0.2.5"},
3
+ { "name": "urbanopt-ditto-reader", "version": "0.6.4"},
4
+ { "name": "NREL-disco", "version": "0.5.1"},
5
+ { "name": "geojson-modelica-translator", "version": "0.7.0"}
6
6
  ]
@@ -39,7 +39,7 @@ function Get-Python {
39
39
  Remove-Item $path
40
40
  }
41
41
  if ($result.ExitCode -ne 0) {
42
- $msg = "Failed to run Python installer: ExitCode=${result.ExitCode}"
42
+ $msg = "Failed to run Python installer: ExitCode=${result.ExitCode}"
43
43
  Write-Error $msg
44
44
  exit $result.ExitCode
45
45
  }