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 +4 -4
- data/.github/workflows/nightly_ci_build.yml +9 -6
- data/CHANGELOG.md +13 -0
- data/CMakeLists.txt +12 -7
- data/FindOpenStudioSDK.cmake +5 -0
- data/Gemfile +3 -3
- data/bin/console +0 -7
- data/example_files/Gemfile +3 -3
- data/example_files/mappers/Baseline.rb +1 -1
- data/example_files/mappers/residential/template/util.rb +0 -2
- data/example_files/mappers/residential/util.rb +0 -1
- data/example_files/measures/BuildResidentialModel/measure.rb +3 -4
- data/example_files/measures/BuildResidentialModel/tests/test_build_residential_model.rb +23 -23
- data/example_files/python_deps/dependencies.json +4 -4
- data/example_files/python_deps/install_python.ps1 +1 -1
- data/example_files/reopt/base_assumptions.json +121 -144
- data/example_files/reopt/multiPV_assumptions.json +160 -180
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +89 -43
- data/scripts/setup-env-gitbash.sh +1 -2
- data/scripts/setup-env-unix.sh +1 -1
- data/scripts/setup-env.bat +3 -4
- data/scripts/setup-env.ps1 +6 -7
- data/uo_cli.gemspec +3 -3
- metadata +8 -9
- data/example_files/Gemfile.lock +0 -177
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e5df564dfc3eb3721c92cdbd5b891f4dbe30f25fdbd1675a524bb83405c693e
|
4
|
+
data.tar.gz: 77066270f710fd6e0740b6b4f19a594d9c1678f627e0d44899ef0441631dcfb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b90a53b3af3ff7c9834e2f1d0d258055dd87ec086605e2f4192ba3f8e8d265c9eeca1b244315c821c69a4d789dfb02cca25b75208939631e2d5e58af111aca81
|
7
|
+
data.tar.gz: 91167c44034b9c50ae4399a08d11d11145271f65dea54da400cf7a6b8ac27cb1c3c3dc77961b243f49e6bd6ce0f1c7f8eb4faab51ab81266b9cec92f243d8a44
|
@@ -1,8 +1,9 @@
|
|
1
1
|
name: CLI CI
|
2
2
|
|
3
3
|
on:
|
4
|
-
|
5
|
-
|
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/
|
36
|
-
run:
|
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.
|
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-
|
93
|
-
set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "
|
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
|
-
|
96
|
-
|
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-
|
101
|
-
set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "
|
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
|
|
data/FindOpenStudioSDK.cmake
CHANGED
@@ -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
|
-
#
|
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
|
-
#
|
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__)
|
data/example_files/Gemfile
CHANGED
@@ -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
|
-
|
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.
|
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.
|
97
|
+
gem 'urbanopt-reporting', '~> 0.10.0'
|
98
98
|
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 =
|
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.
|
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
|
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
|
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.
|
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
|
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
|
-
{ "name": "urbanopt-ditto-reader", "version": "0.6.
|
4
|
-
{ "name": "NREL-disco", "version": "0.5.
|
5
|
-
{ "name": "geojson-modelica-translator", "version": "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
|
}
|