Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
982fef8
Enhance macOS support by adding ARM architecture builds and updating …
anchapin Jul 9, 2025
f1fb1ae
Refactor macOS build process to use aqtinstall for Qt Installer Frame…
anchapin Jul 9, 2025
86bf9b0
Refactor Qt Installer Framework installation in macOS and Windows bui…
anchapin Jul 9, 2025
b5f7853
Refactor Qt Installer Framework installation in macOS and Windows bui…
anchapin Jul 9, 2025
2ebfb66
Refactor string concatenation in various files for improved readabili…
anchapin Jul 9, 2025
0efa629
Fix GitHub Actions workflow build issues
anchapin Jul 9, 2025
1cba366
Fix Windows pip upgrade permission issue
anchapin Jul 9, 2025
03a7c26
Add cleanup step for corrupted dependency files
anchapin Jul 9, 2025
2a248da
Enhanced dependency cleanup and verification
anchapin Jul 10, 2025
abfb57b
Fix path handling in Qt Installer Framework installation steps
anchapin Jul 10, 2025
76ade06
Fix CI: Use x64 OpenStudio-server for ARM64 builds
anchapin Jul 10, 2025
27113bb
Update OpenStudio-server filename for macOS ARM64 architecture
anchapin Jul 10, 2025
5c48500
Fix architecture detection and error handling in build process
anchapin Jul 10, 2025
44a314c
Fix macOS ARM build issues
anchapin Jul 10, 2025
c5d7a38
Fix macOS ARM build: Remove redundant pre-download and improve file i…
anchapin Jul 10, 2025
30b60e2
Enhance architecture handling in packaging and build scripts for macOS
anchapin Jul 10, 2025
08b5e12
Fix fs-jetpack inspect API usage for Ubuntu workflow compatibility
anchapin Jul 10, 2025
8807d90
Enhance AWS credentials configuration in build workflow and increase …
anchapin Jul 10, 2025
70625ec
Remove AWS credentials requirement and add dependency accessibility test
anchapin Jul 10, 2025
b313d6e
Fix workflow failures: ARM64 dependency corruption and Qt IFW issues
anchapin Jul 10, 2025
f67209b
Fix merge-stream compatibility error in downloadDeps function
anchapin Jul 10, 2025
bd70ae9
Add Claude Code and Claude Flow files to .gitignore
anchapin Jul 10, 2025
fde54fa
Add memory/ directory to .gitignore
anchapin Jul 10, 2025
62c7690
Simplify workflow by removing troubleshooting additions
anchapin Jul 10, 2025
6f86c43
Simplify build.js to focus only on ARM64 architecture support
anchapin Jul 10, 2025
e3c3588
Remove non-ARM64 changes from PR scope
anchapin Jul 10, 2025
78398d9
Remove all JavaScript app code changes from ARM64 PR
anchapin Jul 10, 2025
4632871
Refactor build.js using DRY principle for ARM64 manifest lookups
anchapin Jul 10, 2025
6066590
Update aqtinstall installation command to use --break-system-packages…
anchapin Jul 10, 2025
c87f134
Fix Python command for aqtinstall tool installation on macOS and Windows
anchapin Jul 10, 2025
5e92eac
Add OpenStudio 3.10.0 ARM64 package for Darwin platform in manifest
anchapin Jul 10, 2025
bdb3df9
Temporarily disable lint in build process to fix ARM64 build
anchapin Jul 10, 2025
d850238
Enhance dependency management by adding download, verification, and e…
anchapin Jul 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 67 additions & 20 deletions .github/workflows/build_pat.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,24 @@ jobs:
# fail-fast: Default is true, switch to false to allow one platform to fail and still run others
fail-fast: false
matrix:
name: [Ubuntu, macOS, Windows_2022]
name: [Ubuntu, macOS-Intel, macOS-ARM, Windows_2022]
include:
- name: Ubuntu
os: ubuntu-22.04
node-version: 18
allow_failure: false
- name: macOS
- name: macOS-Intel
os: macos-13
node-version: 18
allow_failure: false
arch: x86_64
MACOSX_DEPLOYMENT_TARGET: 10.15
SDKROOT: /Applications/Xcode_11.7.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
DEVELOPER_DIR: /Applications/Xcode_13.2.1.app/Contents/Developer
- name: macOS-ARM
os: macos-14
node-version: 18
allow_failure: false
arch: arm64
MACOSX_DEPLOYMENT_TARGET: 12.1
- name: Windows_2022
os: windows-2022
node-version: 18
Expand All @@ -54,19 +59,54 @@ jobs:
sudo apt update
sudo apt install cmake
elif [ "$RUNNER_OS" == "macOS" ]; then
curl -L -O https://download.qt.io/archive/qt-installer-framework/4.3.0/QtInstallerFramework-macOS-x64-4.3.0.dmg
hdiutil attach -mountpoint ./qtfiw_installer QtInstallerFramework-macOS-x64-4.3.0.dmg
echo "ls ./qtfiw_installer"
sudo ./qtfiw_installer/QtInstallerFramework-macOS-x64-4.3.0.app/Contents/MacOS/QtInstallerFramework-macOS-x64-4.3.0 --verbose --script ./ci/install_script_qtifw.qs
ls ~/Qt/QtIFW-4.3.0 || true
echo "~/Qt/QtIFW-4.3.0/bin/" >> $GITHUB_PATH
# Create and activate Python virtual environment
python3 -m venv venv
source venv/bin/activate

# Upgrade pip and install aqtinstall
pip install --upgrade pip
pip install aqtinstall

# Verify installation
pip show aqtinstall

# Install Qt Installer Framework
python -m aqt install-tool -O ${{ github.workspace }}/Qt/ mac desktop tools_ifw

# Find the actual installed version directory
QT_IFW_DIR=$(find ${{ github.workspace }}/Qt/Tools/QtInstallerFramework -maxdepth 1 -type d -name "*" | head -1)
if [ -d "$QT_IFW_DIR" ]; then
echo "Qt Installer Framework installed successfully at: $QT_IFW_DIR"
echo "$QT_IFW_DIR/bin/" >> $GITHUB_PATH
else
echo "Qt Installer Framework installation failed"
exit 1
fi
echo MACOSX_DEPLOYMENT_TARGET=${{ matrix.MACOSX_DEPLOYMENT_TARGET }} >> $GITHUB_ENV
# echo CMAKE_MACOSX_DEPLOYMENT_TARGET='-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET' >> $GITHUB_ENV
elif [ "$RUNNER_OS" == "Windows" ]; then
curl -L -O https://download.qt.io/archive/qt-installer-framework/4.3.0/QtInstallerFramework-windows-x86-4.3.0.exe
./QtInstallerFramework-windows-x86-4.3.0.exe --verbose --script ./ci/install_script_qtifw.qs
dir "C:/Qt/"
echo "C:/Qt/QtIFW-4.3.0/bin" >> $GITHUB_PATH
# Create and activate Python virtual environment
python3 -m venv venv
source venv/bin/activate

# Upgrade pip and install aqtinstall
pip install --upgrade pip
pip install aqtinstall

# Verify installation
pip show aqtinstall

# Install Qt Installer Framework
python -m aqt install-tool -O ${{ github.workspace }}/Qt/ windows desktop tools_ifw

# Find the actual installed version directory
QT_IFW_DIR=$(find ${{ github.workspace }}/Qt/Tools/QtInstallerFramework -maxdepth 1 -type d -name "*" | head -1)
if [ -d "$QT_IFW_DIR" ]; then
echo "Qt Installer Framework installed successfully at: $QT_IFW_DIR"
echo "$QT_IFW_DIR/bin" >> $GITHUB_PATH
else
echo "Qt Installer Framework installation failed"
exit 1
fi
#echo "Setting CMAKE_GENERATOR options equivalent to ='-G \"Visual Studio 16 2019\" -A x64'"
#echo CMAKE_GENERATOR='Visual Studio 16 2019' >> $GITHUB_ENV
#echo CMAKE_GENERATOR_PLATFORM=x64 >> $GITHUB_ENV
Expand Down Expand Up @@ -96,7 +136,7 @@ jobs:
echo "Using vcvarsall to initialize the development environment"
call vcvarsall.bat x64
cmake -G "Visual Studio 17 2022" -A x64 ..
cmake --build . --target package -j ${{ env.N }} --config Release
cmake --build . --target package -j %N% --config Release

- name: Configure CMake & build (Linux)
working-directory: ./build
Expand All @@ -120,10 +160,17 @@ jobs:
shell: bash
run: |
set -x
cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=11 \
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
-DCMAKE_BUILD_TYPE=Release \
../
if [ "${{ matrix.arch }}" = "arm64" ]; then
cmake -DCMAKE_OSX_ARCHITECTURES="arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.MACOSX_DEPLOYMENT_TARGET }}" \
-DCMAKE_BUILD_TYPE=Release \
../
else
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.MACOSX_DEPLOYMENT_TARGET }}" \
-DCMAKE_BUILD_TYPE=Release \
../
fi
cmake --build . --target package -j $N

- name: Save artifact
Expand Down
8 changes: 7 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,13 @@ set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Parametric Analysis Tool")
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.openstudio.net")
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}")
if(CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")

Copilot AI Jul 9, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This only handles single-architecture builds; consider detecting a semicolon-separated list (e.g. "arm64;x86_64") for universal builds or adding an explicit branch for multi-arch cases.

Copilot uses AI. Check for mistakes.
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-arm64")
elseif(CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64")
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-x86_64")
else()
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}")
endif()
set(CPACK_PACKAGE_CONTACT "openstudio@nrel.gov")

include(CPack)
Expand Down
15 changes: 11 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,15 @@ We tested our Linux-specific instructions on Ubuntu 22.04, but they should also
```
* Run the appropriate command to generate the files.
* MacOS:
```
cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=11 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DCMAKE_BUILD_TYPE=Release ../
```
**Note:** For ARM64 (Apple Silicon) specific builds, use:
```
cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=12.1 -DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_BUILD_TYPE=Release ../
```

For Intel-specific builds, use:
```
cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES="x86_64" -DCMAKE_BUILD_TYPE=Release ../
```
* Windows:
```
cmake -G "Visual Studio 17 2022" -A x64 ../
Expand Down Expand Up @@ -120,6 +126,7 @@ We tested our Linux-specific instructions on Ubuntu 22.04, but they should also
```

7. The installer package should now be ready to use.
* MacOS: `./build/ParametricAnalysisTool-x.x.x-Darwin.dmg`
* MacOS ARM64: `./build/ParametricAnalysisTool-x.x.x-Darwin-arm64.dmg`
* MacOS Intel: `./build/ParametricAnalysisTool-x.x.x-Darwin-x86_64.dmg`
* Windows: `./build/ParametricAnalysisTool-x.x.x-Windows.exe`
* Linux: `./build/ParametricAnalysisTool-x.x.x-Linux.deb`
18 changes: 9 additions & 9 deletions app/app/analysis/analysisController.js
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ export class AnalysisController {
}],
onRegisterApi: function (gridApi) {
vm.gridApis[measure.instanceId] = gridApi;
gridApi.edit.on.afterCellEdit(vm.$scope, function (rowEntity, colDef, newValue, oldValue) {
gridApi.edit.on.afterCellEdit(vm.$scope, (rowEntity, colDef, newValue, oldValue) => {
if (newValue != oldValue) {
// if (vm.Message.showDebug()) vm.$log.debug('CELL has changed in: ', measure.instanceId, ' old val: ', oldValue, ' new val: ', newValue);
if (vm.Message.showDebug()) vm.$log.debug('rowEntity: ', rowEntity);
Expand All @@ -357,7 +357,7 @@ export class AnalysisController {
vm.$log.error(`Cannot change cell to value: ${newValue}. ${rowEntity.name} is not a variable. Setting value to first option's value.`);
// TODO: need a user toastr here?
// set to value of firstOption
let firstOptionId = vm.getFirstOptionId(rowEntity);
const firstOptionId = vm.getFirstOptionId(rowEntity);
rowEntity[colDef.name] = rowEntity[firstOptionId];
}
}
Expand Down Expand Up @@ -959,7 +959,7 @@ export class AnalysisController {
const opt = vm.getDefaultOptionColDef();
opt.display_name = _.startCase(option.id);
opt.field = option.id;
opt.instanceId = measure.instanceId; // explicitly set this just in case
opt.instanceId = measure.instanceId; // explicitly set this just in case
vm.$scope.gridOptions[measure.instanceId].columnDefs.push(opt);
} else {
vm.$log.error('option id does not match expected format (option_<ID>)');
Expand Down Expand Up @@ -1229,7 +1229,7 @@ export class AnalysisController {
if (!_.isEmpty(result.filePaths)) {
const scriptPath = result.filePaths[0];
if (vm.Message.showDebug()) vm.$log.debug('script path:', scriptPath);
let scriptFilename = scriptPath.replace(/^.*[\\\/]/, ''); // old name
let scriptFilename = scriptPath.replace(/^.*[\\/]/, ''); // old name
// rename to initialize.sh or finalize.sh
if (_.includes(type, 'initialization')) {
scriptFilename = 'initialize.sh';
Expand Down Expand Up @@ -1264,7 +1264,7 @@ export class AnalysisController {
vm.jetpack.remove(vm.Project.getProjectDir().path('scripts', newType, vm.$scope.serverScripts[type].file));
vm.jetpack.remove(vm.Project.getProjectDir().path('scripts', newType, _.replace(vm.$scope.serverScripts[type].file, '.sh', '.args')));
vm.$scope.serverScripts[type].file = null;

}

addScriptArgument(type) {
Expand Down Expand Up @@ -1299,7 +1299,7 @@ export class AnalysisController {
// copy and select the file
const seedModelPath = result.filePaths[0];
if (vm.Message.showDebug()) vm.$log.debug('Seed Model:', seedModelPath);
const seedModelFilename = seedModelPath.replace(/^.*[\\\/]/, '');
const seedModelFilename = seedModelPath.replace(/^.*[\\/]/, '');
vm.jetpack.copy(seedModelPath, vm.Project.getProjectDir().path('seeds/' + seedModelFilename), {overwrite: true});
if (vm.Message.showDebug()) vm.$log.debug('Seed Model name: ', seedModelFilename);
// update seeds
Expand Down Expand Up @@ -1351,7 +1351,7 @@ export class AnalysisController {
// copy and select the file
const weatherFilePath = result.filePaths[0];
if (vm.Message.showDebug()) vm.$log.debug('Weather File:', weatherFilePath);
const weatherFilename = weatherFilePath.replace(/^.*[\\\/]/, '');
const weatherFilename = weatherFilePath.replace(/^.*[\\/]/, '');
// TODO: for now this isn't set to overwrite (if file already exists in project, it won't copy the new one
vm.jetpack.copy(weatherFilePath, vm.Project.getProjectDir().path('weather/' + weatherFilename));
if (vm.Message.showDebug()) vm.$log.debug('Weather file name: ', weatherFilename);
Expand Down Expand Up @@ -1568,8 +1568,8 @@ export class AnalysisController {
arg.display_name_short = arg.display_name_short ? arg.display_name_short : arg.name;
if (!arg.inputs) arg.inputs = {};
// name and displayName should be already defined
arg.inputs.relationship = _.isNil(arg.inputs.relationship) ? null : arg.inputs.relationship;
arg.inputs.choiceDisplayNames = _.isNil(arg.choice_display_names) ? [] : arg.choice_display_names;
arg.inputs.relationship = _.isNil(arg.inputs.relationship) ? null : arg.inputs.relationship;
arg.inputs.choiceDisplayNames = _.isNil(arg.choice_display_names) ? [] : arg.choice_display_names;
arg.inputs.variableSetting = _.isNil(arg.inputs.variableSetting) ? 'Argument' : arg.inputs.variableSetting;
if (arg.inputs.variableSetting == 'Discrete' || arg.inputs.variableSetting == 'Pivot') {
arg.inputs.distribution = _.isNil(arg.inputs.distribution) ? 'Discrete' : arg.inputs.distribution;
Expand Down
8 changes: 4 additions & 4 deletions app/app/project/osServerService.js
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ export class OsServer {
const vm = this;
const deferred = vm.$q.defer();

const command = '\"' + vm.cliPath + '\" openstudio_version';
const command = '"' + vm.cliPath + '" openstudio_version';
vm.$log.info('get openstudio version command: ', command);

const child = vm.exec(command,
Expand Down Expand Up @@ -540,9 +540,9 @@ export class OsServer {
// run META CLI will return status code: 0 = success, 1 = failure
// start local server needs path to oscli (vm.cliPath)
if (vm.platform == 'win32')
vm.startServerCommand = '\"' + vm.rubyPath + '\" \"' + vm.metaCLIPath + '\"' + ' start_local --worker-number=' + vm.numWorkers + ' --energyplus-exe-path=' + '\"' + vm.energyplusEXEPath + '\"' + ' --openstudio-exe-path=' + '\"' + vm.cliPath + '\"' + ' --ruby-lib-path=' + '\"' + vm.openstudioBindingsDirPath + '\"' + ' --mongo-dir=' + '\"' + vm.mongoDirPath + '\" --debug \"' + vm.Project.projectDir.path() + '\"';
vm.startServerCommand = '"' + vm.rubyPath + '" "' + vm.metaCLIPath + '"' + ' start_local --worker-number=' + vm.numWorkers + ' --energyplus-exe-path=' + '"' + vm.energyplusEXEPath + '"' + ' --openstudio-exe-path=' + '"' + vm.cliPath + '"' + ' --ruby-lib-path=' + '"' + vm.openstudioBindingsDirPath + '"' + ' --mongo-dir=' + '"' + vm.mongoDirPath + '" --debug "' + vm.Project.projectDir.path() + '"';
else
vm.startServerCommand = '\"' + vm.rubyPath + '\" \"' + vm.metaCLIPath + '\"' + ' start_local --worker-number=' + vm.numWorkers + ' --energyplus-exe-path=' + '\"' + vm.energyplusEXEPath + '\"' + ' --openstudio-exe-path=' + '\"' + vm.cliPath + '\"' + ' --ruby-lib-path=' + '\"' + vm.openstudioBindingsDirPath + '\"' + ' --mongo-dir=' + '\"' + vm.mongoDirPath + '\" --debug \"' + vm.Project.projectDir.path() + '\"';
vm.startServerCommand = '"' + vm.rubyPath + '" "' + vm.metaCLIPath + '"' + ' start_local --worker-number=' + vm.numWorkers + ' --energyplus-exe-path=' + '"' + vm.energyplusEXEPath + '"' + ' --openstudio-exe-path=' + '"' + vm.cliPath + '"' + ' --ruby-lib-path=' + '"' + vm.openstudioBindingsDirPath + '"' + ' --mongo-dir=' + '"' + vm.mongoDirPath + '" --debug "' + vm.Project.projectDir.path() + '"';
vm.$log.info('start server command: ', vm.startServerCommand);

// fire off start_local and capture the child immediately
Expand Down Expand Up @@ -717,7 +717,7 @@ export class OsServer {
if (vm.Message.showDebug()) vm.$log.debug('vm.Project:', vm.Project);
if (vm.Message.showDebug()) vm.$log.debug('vm.Project.projectDir:', vm.Project.projectDir.path());

vm.stopServerCommand = '\"' + vm.rubyPath + '\" \"' + vm.metaCLIPath + '\"' + ' stop_local ' + '\"' + vm.Project.projectDir.path() + '\"';
vm.stopServerCommand = '"' + vm.rubyPath + '" "' + vm.metaCLIPath + '"' + ' stop_local ' + '"' + vm.Project.projectDir.path() + '"';
vm.$log.info('stop server command: ', vm.stopServerCommand);

// do nothing if server is stopped and start is not in progress
Expand Down
4 changes: 2 additions & 2 deletions app/app/project/projectService.js
Original file line number Diff line number Diff line change
Expand Up @@ -568,7 +568,7 @@ export class Project {

if (!file.unpackDirName) {
// use same name if no name is provided
file.unpackDirName = file.dirToInclude.replace(/^.*[\\\/]/, '');
file.unpackDirName = file.dirToInclude.replace(/^.*[\\/]/, '');
}
const absPath = path.resolve(vm.projectDir.path(), file.dirToInclude);
if (vm.Message.showDebug()) vm.$log.debug('RESOLVED PATH: ', absPath, ' unpack DIR: ', file.unpackDirName);
Expand Down Expand Up @@ -1709,7 +1709,7 @@ export class Project {

vm.setProjectDir(projectDir);
if (vm.Message.showDebug()) vm.$log.debug('in set project: projectDir: ', vm.projectDir.path());
vm.setProjectName(projectDir.path().replace(/^.*[\\\/]/, ''));
vm.setProjectName(projectDir.path().replace(/^.*[\\/]/, ''));
if (vm.Message.showDebug()) vm.$log.debug('project name: ', vm.projectName);

vm.mongoDir = jetpack.dir(path.resolve(vm.projectDir.path() + '/data/db'));
Expand Down
4 changes: 2 additions & 2 deletions app/app/reports/reportsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,10 @@ export class ReportsController {
var report = {};
if (vm.os.platform() == 'win32') {
report.name = html_report.split('\\').pop().replace('.html', '');
report.url = html_report.replace('app\\app\\', 'app\\');//).replace("\\","/");
report.url = html_report.replace('app\\app\\', 'app\\');
} else {
report.name = html_report.split('/').pop().replace('.html', '');
report.url = html_report.replace('app/app/', 'app/');//).replace("\\","/");
report.url = html_report.replace('app/app/', 'app/');
if (vm.Message.showDebug()) vm.$log.debug('REPORT name: ', report.name);
if (vm.Message.showDebug()) vm.$log.debug('REPORT url: ', report.url);
}
Expand Down
27 changes: 26 additions & 1 deletion manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
"platform": "darwin",
"arch": "x64",
"type": "energyplus"
}, {
"name": "EnergyPlus-25.1.0-darwin-arm64.tar.gz",
"platform": "darwin",
"arch": "arm64",
"type": "energyplus"
}, {
"name": "EnergyPlus-25.1.0-linux.tar.gz",
"platform": "linux",
Expand All @@ -26,6 +31,11 @@
"platform": "darwin",
"arch": "x64",
"type": "ruby"
}, {
"name": "ruby-3.2.2-darwin-arm64.tar.gz",
"platform": "darwin",
"arch": "arm64",
"type": "ruby"
}, {
"name": "ruby-3.2.2-linux.tar.gz",
"platform": "linux",
Expand All @@ -42,6 +52,11 @@
"platform": "darwin",
"arch": "x64",
"type": "mongo"
}, {
"name": "mongodb-6.0.8-darwin-arm64.tar.gz",
"platform": "darwin",
"arch": "arm64",
"type": "mongo"
}, {
"name": "mongodb-6.0.8-linux.tar.gz",
"platform": "linux",
Expand All @@ -58,11 +73,16 @@
"platform": "darwin",
"arch": "x64",
"type": "openstudio"
}, {
"name": "OpenStudio-3.10.0+86d7e215a1-Darwin-arm64.tar.gz",
"platform": "darwin",
"arch": "arm64",
"type": "openstudio"
}, {
"name": "OpenStudio-3.10.0-Linux.tar.gz",
"platform": "linux",
"arch": "x64",
"type": "OpenStudio"
"type": "openstudio"
}],
"openstudioServer": [{
"name": "OpenStudio-server-5873e0d21d-win32.tar.gz",
Expand All @@ -74,6 +94,11 @@
"platform": "darwin",
"arch": "x64",
"type": "OpenStudio-server"
}, {
"name": "OpenStudio-server-5873e0d21d-darwin-arm64.tar.gz",
"platform": "darwin",
"arch": "arm64",
"type": "OpenStudio-server"
}, {
"name": "OpenStudio-server-5873e0d21d-linux.tar.gz",
"platform": "linux",
Expand Down
Loading
Loading