Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
57 changes: 41 additions & 16 deletions .github/workflows/app_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ jobs:
echo "There are $N threads available"
echo "N=$N" >> $GITHUB_ENV

# Detect fork PRs — secrets are unavailable for external forks, so
# codesigning and artifact upload steps must be skipped for them.
if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]]; then
echo "IS_FORK_PR=true" >> $GITHUB_ENV
else
echo "IS_FORK_PR=false" >> $GITHUB_ENV
fi

if [ "$RUNNER_OS" == "Linux" ]; then
echo "Install needed system dependencies for OPENGL (due to Qt) for Linux"
sudo apt update -qq
Expand Down Expand Up @@ -205,6 +213,7 @@ jobs:
sudo xcode-select -s "/Applications/Xcode_16.4.app/Contents/Developer/"

echo "Untapping unused taps to avoid Homebrew trust warnings"
brew uninstall --force bicep || true
brew untap aws/tap azure/bicep || true

echo "Using brew to install ninja"
Expand Down Expand Up @@ -232,7 +241,7 @@ jobs:

- name: "Configure for codesigning"
id: codesigning
if: runner.os == 'macOS'
if: runner.os == 'macOS' && env.IS_FORK_PR != 'true'
run: |
set -x
cd $RUNNER_TEMP
Expand Down Expand Up @@ -274,8 +283,13 @@ jobs:

cd .. && rm -Rf codesigning

- name: "Install patched QtIFW (macOS)"
if: runner.os == 'macOS'
run: |
set -x
brew list aria2 || brew install aria2
mkdir $RUNNER_TEMP/QtIFW && cd $RUNNER_TEMP/QtIFW
# Download my patched QtIFW
mkdir QtIFW && cd QtIFW
aria2c https://github.com/jmarrec/QtIFW-fixup/releases/download/v5.0.0-dev-with-fixup/QtIFW-5.0.0-${{ matrix.arch }}.zip
xattr -r -d com.apple.quarantine ./QtIFW-5.0.0-${{ matrix.arch }}.zip
unzip QtIFW-5.0.0-${{ matrix.arch }}.zip
Expand Down Expand Up @@ -329,7 +343,7 @@ jobs:
echo "::endgroup::"

begin_group "Remotes"
conan remote add --force nrel-v2 https://conan.openstudio.net/artifactory/api/conan/conan-v2
conan remote add --force nlr-v2 https://conan.openstudio.net/artifactory/api/conan/conan-v2
conan remote list
echo "::endgroup::"

Expand Down Expand Up @@ -540,15 +554,21 @@ jobs:
fi

if [ "$RUNNER_OS" == "macOS" ]; then
CODESIGNING_ARGS=()
if [ "$IS_FORK_PR" != "true" ]; then
CODESIGNING_ARGS=(
"-DCPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION:STRING=Developer ID Application: The Energy Coalition (UG9S5ZLM34)"
"-DCPACK_CODESIGNING_NOTARY_PROFILE_NAME:STRING=OpenStudioApplication"
"-DCPACK_CODESIGNING_MACOS_IDENTIFIER:STRING=org.openstudiocoalition.OpenStudioApplication"
)
fi
cmake --preset conan-release -DQT_INSTALL_DIR:PATH=${{ env.QT_INSTALL_DIR }} \
-DBUILD_DOCUMENTATION:BOOL=${{ env.BUILD_DOCUMENTATION }} \
-DBUILD_PACKAGE:BOOL=${{ env.BUILD_PACKAGE }} \
-DCPACK_BINARY_TGZ:BOOL=ON \
-DANALYTICS_API_SECRET:STRING=${{ secrets.ANALYTICS_API_SECRET }} \
-DANALYTICS_MEASUREMENT_ID:STRING=${{ secrets.ANALYTICS_MEASUREMENT_ID }} \
-DCPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION:STRING="Developer ID Application: The Energy Coalition (UG9S5ZLM34)" \
-DCPACK_CODESIGNING_NOTARY_PROFILE_NAME:STRING=OpenStudioApplication \
-DCPACK_CODESIGNING_MACOS_IDENTIFIER:STRING=org.openstudiocoalition.OpenStudioApplication
"${CODESIGNING_ARGS[@]}"
else
cmake --preset conan-release -DQT_INSTALL_DIR:PATH=${{ env.QT_INSTALL_DIR }} \
-DBUILD_DOCUMENTATION:BOOL=${{ env.BUILD_DOCUMENTATION }} \
Expand Down Expand Up @@ -605,7 +625,8 @@ jobs:
-WaitForCompletion -Force

- name: Archive binary artifacts
uses: actions/upload-artifact@v4
if: env.IS_FORK_PR != 'true'
uses: actions/upload-artifact@v5
# build/_CPack_Packages/win64/IFW/*.exe
# build/_CPack_Packages/Linux/DEB/*.deb
# build/_CPack_Packages/Darwin/IFW/*.dmg
Expand All @@ -614,13 +635,14 @@ jobs:
path: build/${{ matrix.BINARY_PKG_PATH }}/*.${{ env.BINARY_EXT }}

- name: Archive TGZ or ZIP artifacts
uses: actions/upload-artifact@v4
if: env.IS_FORK_PR != 'true'
uses: actions/upload-artifact@v5
with:
name: OpenStudioApplication-${{ env.OS_APP_VERSION }}.${{ github.sha }}-${{ matrix.os }}.${{ env.COMPRESSED_EXT }}
path: build/${{ matrix.COMPRESSED_PKG_PATH }}/*.${{ env.COMPRESSED_EXT }}

- name: Full Test Package signing for IFW and TGZ
if: runner.os == 'macOS'
if: runner.os == 'macOS' && env.IS_FORK_PR != 'true'
working-directory: ./build
shell: bash
run: |
Expand All @@ -632,8 +654,8 @@ jobs:
echo "::endgroup::"

- name: Upload otool info as artifact
if: runner.os == 'macOS'
uses: actions/upload-artifact@v4
if: runner.os == 'macOS' && env.IS_FORK_PR != 'true'
uses: actions/upload-artifact@v5
with:
name: otool_infos_cpack_${{ matrix.os }}_${{ matrix.arch }}
path: build/otool*json
Expand All @@ -656,7 +678,8 @@ jobs:
$XVFBCMD ctest -j -T test --output-on-failure --no-compress-output -C $BUILD_TYPE || true

- name: Archive test results?
uses: actions/upload-artifact@v4
if: env.IS_FORK_PR != 'true'
uses: actions/upload-artifact@v5
with:
name: OpenStudioApplication-${{ env.OS_APP_VERSION }}.${{ github.sha }}-${{ matrix.os }}-Test.xml
path: build/Testing/**/*.xml
Expand All @@ -678,7 +701,8 @@ jobs:
$XVFBCMD Products/SpacesSurfaces_Benchmark --benchmark_out_format=csv --benchmark_out='bench_results_SpacesSurfaces.csv' || true

- name: Archive benchmark results?
uses: actions/upload-artifact@v4
if: env.IS_FORK_PR != 'true'
uses: actions/upload-artifact@v5
with:
name: OpenStudioApplication-${{ env.OS_APP_VERSION }}.${{ github.sha }}-${{ matrix.os }}-bench_results.csv
path: build/bench_results_*.csv
Expand Down Expand Up @@ -723,6 +747,7 @@ jobs:
test_package_macos:
name: Test Built Package on macOS
needs: build
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ${{ matrix.os }}
strategy:
# fail-fast: Default is true, switch to false to allow one platform to fail and still run others
Expand All @@ -749,13 +774,13 @@ jobs:
path: checkout

#- name: Gather Test Package from Artifacts
# uses: actions/download-artifact@v4
# uses: actions/download-artifact@v5
# with:
# name: OpenStudioApplication-${{ needs.build.outputs.OS_APP_VERSION }}.${{ github.sha }}-${{ matrix.binary_os }}.${{ matrix.COMPRESSED_EXT }}
# path: package

- name: Gather Dmg Package from Artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
with:
name: OpenStudioApplication-${{ needs.build.outputs.OS_APP_VERSION }}.${{ github.sha }}-${{ matrix.binary_os }}.${{ matrix.BINARY_EXT }}
path: dmg
Expand Down Expand Up @@ -810,7 +835,7 @@ jobs:
hdiutil detach ./temp_mount/

- name: Upload otool info as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: otool_info_dmg_${{ matrix.os }}_${{ matrix.arch }}
path: dmg/otool*json
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
load: true
tags: osapp-build:latest
cache-from: type=gha,scope=osapp-build
cache-to: type=gha,scope=osapp-build,mode=max
cache-to: ${{ github.event.pull_request.head.repo.full_name == github.repository && 'type=gha,scope=osapp-build,mode=max' || '' }}

- name: Configure (Conan install + CMake configure)
run: make configure
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/manual_cli_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ jobs:
# fail-fast: Default is true, switch to false to allow one platform to fail and still run others
fail-fast: false
matrix:
os: [ubuntu-20.04, ubuntu-22.04, windows-2022, macos-13, macos-arm64]
os: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel, macos-15]
include:
- os: ubuntu-20.04
- os: ubuntu-24.04
SELF_HOSTED: false
PLATFORM_NAME: Linux
BINARY_EXT: deb
Expand All @@ -36,22 +36,22 @@ jobs:
PLATFORM_NAME: Windows
BINARY_EXT: exe
COMPRESSED_EXT: zip
- os: macos-13
- os: macos-15-intel
SELF_HOSTED: false
PLATFORM_NAME: Darwin
BINARY_EXT: dmg
COMPRESSED_EXT: tar.gz
MACOSX_DEPLOYMENT_TARGET: 11.0
- os: macos-arm64
SELF_HOSTED: true
MACOSX_DEPLOYMENT_TARGET: 13.0
- os: macos-15
SELF_HOSTED: false
PLATFORM_NAME: Darwin
BINARY_EXT: dmg
COMPRESSED_EXT: tar.gz
MACOSX_DEPLOYMENT_TARGET: 12.1
MACOSX_DEPLOYMENT_TARGET: 13.0

steps:
- name: Download binary installer
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
id: downloader
with:
pattern: OpenStudioApplication-*-${{ matrix.os }}.${{ matrix.COMPRESSED_EXT }}
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/release_notes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ jobs:
release-notes:
name: Create changelog
runs-on: ubuntu-latest
permissions:
contents: write
issues: read
pull-requests: read

steps:
- uses: actions/checkout@v5
Expand All @@ -28,7 +32,7 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gem install github_api
gem install octokit
pip install requests
ruby ./developer/ruby/GitHubIssueStats.rb > changelog.txt
Expand Down
4 changes: 2 additions & 2 deletions BUILDING.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Building with conan v2

Check you have `conan >= 2`, and add the `nrel-v2` remote to grab `ruby`.
Check you have `conan >= 2`, and add the `nlr-v2` remote to grab `ruby`.

```shell
conan --version
conan remote add -f nrel-v2 http://conan.openstudio.net/artifactory/api/conan/conan-v2
conan remote add -f nlr-v2 http://conan.openstudio.net/artifactory/api/conan/conan-v2
```

## Install the conan dependencies into a build folder
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ endif()

# TODO: Modify the more specific variables as needed to indicate prerelease, etc
# Keep in beta in-between release cycles. Set to empty string (or comment out) for official)
set(PROJECT_VERSION_PRERELEASE "rc1")
set(PROJECT_VERSION_PRERELEASE "rc2")

# OpenStudio version: Only include Major.Minor.Patch, eg "3.0.0", even if you have a prerelease tag
set(OPENSTUDIOAPPLICATION_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
Expand Down
8 changes: 4 additions & 4 deletions developer/doc/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

## 1. Project Purpose

The **OpenStudio Application** is a cross-platform (Windows, macOS, Linux) graphical user interface for whole-building energy modeling. It provides a Qt 6 GUI on top of the **[OpenStudio SDK](https://github.com/NREL/OpenStudio)** (NREL), which in turn drives EnergyPlus simulations and Radiance daylighting analysis.
The **OpenStudio Application** is a cross-platform (Windows, macOS, Linux) graphical user interface for whole-building energy modeling. It provides a Qt 6 GUI on top of the **[OpenStudio SDK](https://github.com/NatLabRockies/OpenStudio)** (NLR), which in turn drives EnergyPlus simulations and Radiance daylighting analysis.

Users model building envelopes, thermal zones, HVAC systems, loads, schedules, geometry, and OpenStudio Measures through a tab-based interface. The application is maintained by the **OpenStudio Coalition** and is fully open source.

Expand All @@ -40,7 +40,7 @@ C4Context
Person(user, "Energy Modeler", "Uses the GUI to create, configure, and simulate building energy models")

System(app, "OpenStudio Application", "Qt 6 GUI for whole-building energy modeling (.osm files)")
System_Ext(bcl, "Building Component Library (BCL)", "Remote library of measures and components (NREL hosted)")
System_Ext(bcl, "Building Component Library (BCL)", "Remote library of measures and components (NLR hosted)")
System_Ext(sdk, "OpenStudio SDK", "C++ library providing the model layer, geometry, HVAC objects, workflow execution, Ruby/Python bindings")
System_Ext(eplus, "EnergyPlus", "Whole-building energy simulation engine (launched as a subprocess by the SDK)")
System_Ext(radiance, "Radiance", "Daylight simulation engine (optional, invoked by SDK workflows)")
Expand Down Expand Up @@ -144,8 +144,8 @@ The project uses **CMake Presets** with **Conan 2** for reproducible builds acro

```bash
# 1. Install Conan 2, CMake ≥3.10.2, Qt 6.5.2 (via aqtinstall), compiler
# 2. Add NREL Conan remote
conan remote add -f nrel-v2 http://conan.openstudio.net/artifactory/api/conan/conan-v2
# 2. Add NLR Conan remote
conan remote add -f nlr-v2 http://conan.openstudio.net/artifactory/api/conan/conan-v2

# 3. Install dependencies
conan install . --output-folder=../OSApp-build-release --build=missing \
Expand Down
2 changes: 1 addition & 1 deletion developer/doc/libraries/shared_gui_components.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Key responsibilities:
- **Grid system** — a generic multi-column tabular view for OpenStudio model objects
- **Form controls** — typed input widgets for real, integer, boolean, and string model fields
- **Measure management** — discovery, update-checking, and execution of OpenStudio Measures
- **BCL integration** — browse and download building components and measures from NREL's BCL
- **BCL integration** — browse and download building components and measures from NLR's BCL
- **Common dialogs** — network proxy, progress bars, wait dialogs

---
Expand Down
Loading
Loading