openstudio-ee 0.12.3 → 0.12.4

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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.coverage +0 -0
  3. data/.github/workflows/test-with-openstudio.yml +109 -74
  4. data/.gitignore +21 -0
  5. data/.rubocop.yml +15 -2
  6. data/CHANGELOG.md +3 -0
  7. data/Gemfile +7 -8
  8. data/README.md +1 -0
  9. data/WORKFLOW_CHANGES.md +74 -0
  10. data/lib/measures/AddDaylightSensors/measure.rb +79 -79
  11. data/lib/measures/AddDaylightSensors/measure.xml +4 -4
  12. data/lib/measures/AddOverhangsByProjectionFactor/measure.rb +38 -41
  13. data/lib/measures/AddOverhangsByProjectionFactor/measure.xml +4 -4
  14. data/lib/measures/EnableDemandControlledVentilation/measure.rb +37 -40
  15. data/lib/measures/EnableDemandControlledVentilation/measure.xml +4 -4
  16. data/lib/measures/EnableEconomizerControl/measure.rb +36 -37
  17. data/lib/measures/EnableEconomizerControl/measure.xml +4 -4
  18. data/lib/measures/GLHEProExportLoadsforGroundHeatExchangerSizing/measure.rb +27 -41
  19. data/lib/measures/GLHEProExportLoadsforGroundHeatExchangerSizing/measure.xml +4 -4
  20. data/lib/measures/GLHEProGFunctionImport/measure.rb +11 -15
  21. data/lib/measures/GLHEProGFunctionImport/measure.xml +4 -4
  22. data/lib/measures/GLHEProSetupExportLoadsforGroundHeatExchangerSizing/measure.rb +5 -9
  23. data/lib/measures/GLHEProSetupExportLoadsforGroundHeatExchangerSizing/measure.xml +3 -3
  24. data/lib/measures/ImproveFanBeltEfficiency/measure.rb +78 -95
  25. data/lib/measures/ImproveFanBeltEfficiency/measure.xml +6 -6
  26. data/lib/measures/ImproveMotorEfficiency/measure.rb +75 -100
  27. data/lib/measures/ImproveMotorEfficiency/measure.xml +6 -6
  28. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.rb +137 -130
  29. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.xml +4 -4
  30. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.rb +114 -115
  31. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.xml +3 -3
  32. data/lib/measures/IncreaseInsulationRValueForRoofs/measure.rb +137 -130
  33. data/lib/measures/IncreaseInsulationRValueForRoofs/measure.xml +4 -4
  34. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.rb +114 -115
  35. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.xml +3 -3
  36. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.rb +69 -63
  37. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.xml +6 -6
  38. data/lib/measures/ReduceLightingLoadsByPercentage/measure.rb +77 -66
  39. data/lib/measures/ReduceLightingLoadsByPercentage/measure.xml +6 -6
  40. data/lib/measures/ReduceNightTimeElectricEquipmentLoads/measure.rb +45 -43
  41. data/lib/measures/ReduceNightTimeElectricEquipmentLoads/measure.xml +4 -4
  42. data/lib/measures/ReduceNightTimeLightingLoads/measure.rb +45 -43
  43. data/lib/measures/ReduceNightTimeLightingLoads/measure.xml +4 -4
  44. data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.rb +58 -52
  45. data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.xml +6 -6
  46. data/lib/measures/ReduceVentilationByPercentage/measure.rb +49 -46
  47. data/lib/measures/ReduceVentilationByPercentage/measure.xml +6 -6
  48. data/lib/measures/add_variable_speed_rtu_control_logic/measure.rb +31 -23
  49. data/lib/measures/add_variable_speed_rtu_control_logic/measure.xml +4 -4
  50. data/lib/measures/create_variable_speed_rtu/measure.rb +166 -174
  51. data/lib/measures/create_variable_speed_rtu/measure.xml +6 -6
  52. data/lib/measures/fan_assist_night_ventilation/measure.rb +33 -32
  53. data/lib/measures/fan_assist_night_ventilation/measure.xml +4 -4
  54. data/lib/measures/nze_hvac/measure.rb +72 -62
  55. data/lib/measures/nze_hvac/measure.xml +4 -4
  56. data/lib/measures/replace_water_heater_mixed_with_thermal_storage_chilled_water/measure.rb +16 -19
  57. data/lib/measures/replace_water_heater_mixed_with_thermal_storage_chilled_water/measure.xml +4 -4
  58. data/lib/measures/window_enhancement/LICENSE.md +14 -0
  59. data/lib/measures/window_enhancement/README.md +112 -0
  60. data/lib/measures/window_enhancement/docs/.gitkeep +0 -0
  61. data/lib/measures/window_enhancement/measure.py +386 -0
  62. data/lib/measures/window_enhancement/measure.xml +128 -0
  63. data/lib/measures/window_enhancement/resources/EC3_lookup.py +321 -0
  64. data/lib/measures/window_enhancement/resources/Test_API.py +32 -0
  65. data/lib/measures/window_enhancement/resources/__pycache__/EC3_lookup.cpython-39.pyc +0 -0
  66. data/lib/measures/window_enhancement/resources/__pycache__/Original_EC3_lookup.py +322 -0
  67. data/lib/measures/window_enhancement/resources/__pycache__/Test_API.cpython-39.pyc +0 -0
  68. data/lib/measures/window_enhancement/resources/calculate_perimeter.py +39 -0
  69. data/lib/measures/window_enhancement/test_output.log +39 -0
  70. data/lib/openstudio/ee_measures/version.rb +1 -1
  71. data/openstudio-ee.gemspec +10 -8
  72. data/test-workflow-locally.sh +152 -0
  73. metadata +64 -35
  74. data/Jenkinsfile +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df1790aecccab8862b8062bb615715fdbf51296e763148c83e1568ce4e2e97bd
4
- data.tar.gz: 070f71c2a8980353452611614ce81bb1af7cf6dea524ddc0a3322b3b90e6ecb0
3
+ metadata.gz: 2e611eb3abfa758253b2637c0fbe2a6417af81f616aef789b080d3c59e21a921
4
+ data.tar.gz: 738fa87404869c4db7cfa5d3c7d6053b49b5a12e8b8228b1686b4d970367e851
5
5
  SHA512:
6
- metadata.gz: 162015a8ca816b9090b0db274fc936a69e123c562d048ff30f7768ded0ed3af1405f1ac1752fa525c5231fbef6eb87656457f9e6407bb0bd1e74823fd1ed5582
7
- data.tar.gz: 8c0dc4ec828cd56f98a6b855d9c875d7beb5637490f9ec0aa85c32dd74d11cc6c28c0f644ae22dc501a6aa06083a27033aefca07c4558e0cb4257cc336daa0f1
6
+ metadata.gz: b6f8cb5ccf030061a8033acc9f86ea09c3abd6372ef1747fda427f73041a74995d4df2d1c72ebb2f38e8891a9c05c59a2937977244902d976897de77308e115f
7
+ data.tar.gz: d497de4e70389ddfff91ba6a64e448b3e39aba2c123479889a2f5e63341ef03679a6bea1644037f80137a4c63d416bf116a0f72697257af7f9d417f5c980683b
data/.coverage ADDED
Binary file
@@ -11,98 +11,133 @@ jobs:
11
11
  DEPLOY_PATH: ${{ github.repository }}/${{ github.ref_name }}/${{ github.run_number }} # Path for S3 deployment
12
12
  S3_BUCKET: ext-gem-dashboard
13
13
 
14
- container: # Define the Docker container for the job. All subsequent steps run inside it.
15
- image: nrel/openstudio:3.10.0
16
- options: -u root -e "LANG=en_US.UTF-8" # These options are passed to the 'docker run' command internally
17
-
18
14
  steps:
19
- - name: Checkout Repository
20
- # The repository will be checked out inside the 'nrel/openstudio:3.10.0' container
21
- uses: actions/checkout@v4 # Use v4 for better security and features
15
+ - name: Login to Docker Hub
16
+ # Authenticate with Docker Hub using repository secrets to access nrel/openstudio:develop
17
+ uses: docker/login-action@v3
22
18
  with:
23
- submodules: true # Set to true if your repository uses Git submodules
24
-
25
- - name: Install Node.js and AWS CLI
26
- # Install required dependencies for AWS actions to work in the OpenStudio container
27
- shell: bash
28
- run: |
29
- echo "Installing Node.js and AWS CLI..."
30
-
31
- # Update package list
32
- apt-get update
33
-
34
- # Install curl and other dependencies
35
- apt-get install -y curl unzip
36
-
37
- # Install Node.js (using NodeSource repository for latest LTS)
38
- curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
39
- apt-get install -y nodejs
19
+ username: ${{ secrets.DOCKERHUB_USERNAME }} # Ensure this secret exists in your repository or organization settings
20
+ password: ${{ secrets.DOCKERHUB_TOKEN }} # Ensure this secret exists in your repository or organization settings
40
21
 
41
- # Install AWS CLI v2
42
- curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
43
- unzip awscliv2.zip
44
- ./aws/install
45
-
46
- # Verify installations
47
- echo "Node.js version: $(node --version)"
48
- echo "npm version: $(npm --version)"
49
- echo "AWS CLI version: $(aws --version)"
22
+ - name: Checkout Repository
23
+ # Checkout the repository to the runner's workspace
24
+ uses: actions/checkout@v4
25
+ with:
26
+ submodules: true
50
27
 
51
- # Clean up
52
- rm -rf awscliv2.zip aws/
28
+ - name: Cache Bundle Dependencies
29
+ # Cache gem dependencies to speed up builds and improve reliability
30
+ uses: actions/cache@v4
31
+ with:
32
+ path: vendor/bundle
33
+ key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
34
+ restore-keys: |
35
+ ${{ runner.os }}-gems-
53
36
 
54
- - name: Verify Environment and Run Measures
55
- # All 'run' commands in this job now execute inside the specified Docker container.
56
- shell: bash # Specify the shell if needed, though bash is default for Ubuntu runners
37
+ - name: Run Tests in OpenStudio Container
38
+ # Run all tests inside the OpenStudio develop container with proper authentication
57
39
  run: |
58
- # Fix git ownership issue in container
59
- git config --global --add safe.directory /__w/openstudio-load-flexibility-measures-gem/openstudio-load-flexibility-measures-gem
40
+ # Pull the develop image now that we're authenticated
41
+ docker pull nrel/openstudio:develop
60
42
 
61
- echo "OpenStudio Version: $(openstudio --version)"
62
- echo "Ruby Version: $(ruby -v)"
63
- echo "Listing OpenStudio Gems: $(openstudio gem_list)"
64
-
65
- # Install dependencies before running tests
66
- echo "Installing gem dependencies..."
67
- bundle install
68
-
69
- echo "Running spec tests..."
70
- rake spec
71
- echo "Running measures with verbose output:"
72
- # This command will execute within the container.
73
- # Ensure that './lib/measures' is the correct path relative to the checkout.
74
- openstudio --verbose measure -r ./lib/measures
75
-
76
- # The output for 'test' should now be generated directly into the workspace
77
- # within the container, which is mounted from the host.
78
- # No 'docker cp' is needed as the workspace is shared.
79
- ls -al ./test # Verify the output directory exists and contains files
43
+ # Run the container with all our test commands
44
+ docker run --rm \
45
+ -u root \
46
+ -e "LANG=en_US.UTF-8" \
47
+ -v "${{ github.workspace }}:/workspace" \
48
+ -w /workspace \
49
+ nrel/openstudio:develop \
50
+ bash -c '
51
+ set -e
52
+
53
+ echo "Starting OpenStudio EE Gem tests..."
54
+ echo "Ruby: $(ruby -v)"
55
+ echo "OpenStudio: $(openstudio openstudio_version)"
56
+
57
+ # Fix git ownership issue in container
58
+ git config --global --add safe.directory "*"
59
+
60
+ # Install system dependencies
61
+ apt-get update -qq
62
+ apt-get install -y -qq curl unzip ca-certificates
63
+
64
+ # Install Node.js and AWS CLI (required for some tests)
65
+ curl -fsSL https://deb.nodesource.com/setup_20.x | DEBIAN_FRONTEND=noninteractive bash -
66
+ DEBIAN_FRONTEND=noninteractive apt-get install -y -qq nodejs
67
+
68
+ curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o /tmp/awscliv2.zip
69
+ unzip -q /tmp/awscliv2.zip -d /tmp/
70
+ /tmp/aws/install
71
+ rm -rf /tmp/aws /tmp/awscliv2.zip
72
+
73
+ # Install gem dependencies
74
+ echo "Installing gem dependencies..."
75
+
76
+ # Clean up bundler environment
77
+ unset BUNDLE_GEMFILE BUNDLE_PATH BUNDLE_BIN_PATH
78
+
79
+ # Install bundler and configure
80
+ gem install bundler -v 2.4.10 --no-document
81
+ bundle config set --local path vendor/bundle
82
+ bundle config set --local force_ruby_platform true
83
+
84
+ # Install gems
85
+ bundle install --retry 3 --jobs 4
86
+
87
+ # Run test suite
88
+ echo "Running tests..."
89
+ bundle exec rake
90
+ bundle exec rake openstudio:list_measures
91
+ bundle exec rake openstudio:update_measures
92
+ bundle exec rake openstudio:test_with_openstudio
93
+
94
+ # Archive test results
95
+ if [ -d "test" ]; then
96
+ mv test test_with_cli_bundler
97
+ fi
98
+
99
+ dir_name=$(find . -type d -name "test_results" | head -1)
100
+ if [ -n "$dir_name" ]; then
101
+ mv "$dir_name" test_results_dashboard_cli_bundler
102
+ fi
103
+
104
+ echo "Tests completed successfully!"
105
+ '
80
106
 
81
107
  - name: Configure AWS Credentials
82
- # This step is crucial for authenticating with AWS S3
83
- uses: aws-actions/configure-aws-credentials@v4 # Use v4 for updated features
108
+ # Configure AWS credentials for S3 deployment
109
+ uses: aws-actions/configure-aws-credentials@v4
84
110
  with:
85
111
  aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
86
- aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # Assuming this is your secret name
87
- aws-region: ${{ secrets.AWS_DEFAULT_REGION }} # Replace with your AWS region, e.g., us-east-1
112
+ aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
113
+ aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
88
114
 
89
115
  - name: Sync files to S3 with branch and build in path
90
116
  shell: bash
91
117
  run: |
92
118
  echo "Deploying to s3://${{ env.S3_BUCKET }}/${{ env.DEPLOY_PATH }}/"
93
- # Ensure './test_results' is the correct source directory for the files to upload to S3.
94
- dir_name=$(find -type d -name "test_results")
95
- # It must match the output directory from the 'Run Measures' step.
96
- aws s3 sync $dir_name s3://${{ env.S3_BUCKET }}/${{ env.DEPLOY_PATH }}/ \
97
- --delete \
98
- --acl public-read \
99
- --cache-control "max-age=0, no-cache, no-store, must-revalidate"
100
- echo "S3 sync complete."
101
- echo "https://${{ env.S3_BUCKET }}.s3.amazonaws.com/${{ env.DEPLOY_PATH }}/dashboard/index.html"
102
- echo dir_name=$dir_name >> $GITHUB_ENV # Save the directory name to an environment variable for later use
119
+ # Use the renamed test_results directory
120
+ dir_name="test_results_dashboard_cli_bundler"
121
+ if [ -d "$dir_name" ]; then
122
+ echo "TEST_RESULTS_DIR=$dir_name" >> $GITHUB_ENV
123
+ if ! aws s3 sync $dir_name s3://${{ env.S3_BUCKET }}/${{ env.DEPLOY_PATH }}/ \
124
+ --delete \
125
+ --acl public-read \
126
+ --cache-control "max-age=0, no-cache, no-store, must-revalidate"; then
127
+ echo "::error::Failed to sync results to S3"
128
+ exit 1
129
+ fi
130
+ echo "✅ S3 sync complete."
131
+ echo "🌐 Dashboard URL: https://${{ env.S3_BUCKET }}.s3.amazonaws.com/${{ env.DEPLOY_PATH }}/dashboard/index.html"
132
+ else
133
+ echo "::error::Test results directory $dir_name not found"
134
+ echo "::error::Available directories:"
135
+ ls -la
136
+ exit 1
137
+ fi
103
138
 
104
139
  - name: Archive static site as artifact
105
140
  uses: actions/upload-artifact@v4
106
141
  with:
107
142
  name: static-html-artifact
108
- path: ${{ env.dir_name }} # Path should be relative to the GitHub workspace, which is shared with the container
143
+ path: test_results_dashboard_cli_bundler
data/.gitignore CHANGED
@@ -10,8 +10,11 @@
10
10
  /spec/reports/
11
11
  /tmp/
12
12
  /test/
13
+ /test_results_dashboard_cli_bundler/
14
+ /test_with_cli_bundler/
13
15
  /lib/measures/test_results
14
16
  /lib/measures/*/tests/output
17
+ /vendor/bundle/
15
18
 
16
19
  .rubocop*s3*
17
20
 
@@ -30,3 +33,21 @@ lib/test/*
30
33
 
31
34
  # Ignore measure tester gem local test results
32
35
  test_results/
36
+
37
+ lib/measures/window_enhancement/__pycache__
38
+ lib/measures/window_enhancement/tests/__pycache__
39
+ lib/measures/window_enhancement/resources/__pycache__
40
+ lib/measures/window_enhancement/tests/.pytest_cache
41
+ lib/measures/window_enhancement/tests/example_model/run
42
+ **/__pycache__/
43
+ config.ini
44
+
45
+ # Environment variables (contains secrets)
46
+ .env
47
+
48
+ # Act secrets file
49
+ .secrets
50
+
51
+ # Act configuration file
52
+ .actrc
53
+ node_modules
data/.rubocop.yml CHANGED
@@ -1,7 +1,20 @@
1
+ inherit_mode:
2
+ merge:
3
+ - Exclude
4
+
1
5
  AllCops:
6
+ NewCops: enable
2
7
  Exclude:
3
8
  - 'spec/test_measures/**/*'
9
+ - 'vendor/**/*' # Standard exclusion for all vendor code
10
+ - '.bundle/**/*' # Bundler cache directory
11
+ - 'tmp/**/*' # Temporary files
12
+ - 'node_modules/**/*' # Node.js dependencies (if applicable)
13
+ # Standard RuboCop behavior - these settings are actually defaults
14
+ DisabledByDefault: false
4
15
 
5
- require: rubocop-performance
16
+ require:
17
+ - rubocop-performance
18
+ - rubocop-rake
6
19
  inherit_from:
7
- - http://s3.amazonaws.com/openstudio-resources/styles/rubocop_v4.yml
20
+ - http://s3.amazonaws.com/openstudio-resources/styles/rubocop_v6.yml
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # OpenStudio(R) EE Gem
2
2
 
3
+ ## Version 0.12.4
4
+ * Adding first version of window enhancement measure. This is python measure that has extra dependencies, and also requires an EC3 API key. It looks up content on EC3, stores embodied carbon data in the OpenStudio model and updates the window performance. You can not use it to only update window performance without using the EC3 database.
5
+
3
6
  ## Version 0.12.3
4
7
  * Update dependency for extension gem from 0.9.2 to 0.9.3
5
8
 
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'http://rubygems.org'
3
+ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
@@ -10,15 +10,14 @@ gemspec
10
10
  # Windows: set FAVOR_LOCAL_GEMS=1
11
11
  # Note that if allow_local is true, but the gem is not found locally, then it will
12
12
  # checkout the latest version (develop) from github.
13
- allow_local = ENV['FAVOR_LOCAL_GEMS']
13
+ allow_local = ENV.fetch('FAVOR_LOCAL_GEMS', nil)
14
14
 
15
15
  # Delete when these branchesa are merged and released
16
- #gem 'openstudio-extension', github: 'NREL/OpenStudio-extension-gem', branch: 'wenyi-fix-build-temp', ref: "34a39a24aee2259de"
17
- #gem 'openstudio-standards', github: 'NREL/openstudio-standards', tag: 'v0.6.0.rc2', ref: "1c42110"
18
- #gem 'openstudio_measure_tester', :git => 'https://github.com/NREL/OpenStudio-measure-tester-gem.git', :branch => 'wenyi-dependencies-update'
19
- #gem 'openstudio-workflow', :git => 'https://github.com/NREL/OpenStudio-workflow-gem.git', :branch => 'develop', ref: "32126e9b9f6"
20
- #gem 'bcl', :git => 'https://github.com/wenyikuang/bcl-gem.git', :branch => 'develop'
21
-
16
+ # gem 'openstudio-extension', github: 'NREL/OpenStudio-extension-gem', branch: 'wenyi-fix-build-temp', ref: "34a39a24aee2259de"
17
+ # gem 'openstudio-standards', github: 'NREL/openstudio-standards', tag: 'v0.6.0.rc2', ref: "1c42110"
18
+ # gem 'openstudio_measure_tester', :git => 'https://github.com/NREL/OpenStudio-measure-tester-gem.git', :branch => 'wenyi-dependencies-update'
19
+ # gem 'openstudio-workflow', :git => 'https://github.com/NREL/OpenStudio-workflow-gem.git', :branch => 'develop', ref: "32126e9b9f6"
20
+ # gem 'bcl', :git => 'https://github.com/wenyikuang/bcl-gem.git', :branch => 'develop'
22
21
 
23
22
  # uncomment when you want CI to use develop branch of extension gem
24
23
  # gem 'openstudio-extension', github: 'NREL/OpenStudio-extension-gem', branch: 'develop'
data/README.md CHANGED
@@ -23,6 +23,7 @@ Or install it yourself as:
23
23
 
24
24
  |OpenStudio EE Gem|OpenStudio|Ruby|
25
25
  |:--------------:|:----------:|:--------:|
26
+ | 0.12.4 | 3.10 | 3.2.2 |
26
27
  | 0.12.3 | 3.10 | 3.2.2 |
27
28
  | 0.12.2 | 3.10 | 3.2.2 |
28
29
  | 0.12.1 | 3.10 | 3.2.2 |
@@ -0,0 +1,74 @@
1
+ # GitHub Actions Workflow Improvements
2
+
3
+ ## Overview
4
+ This document describes the improvements made to the `.github/workflows/test-with-openstudio.yml` workflow file to enhance reliability, maintainability, and debugging capabilities.
5
+
6
+ ## Changes Made
7
+
8
+ ### 1. Docker Image Update
9
+ - **Changed**: `nrel/openstudio:3.10.0` → `nrel/openstudio:develop`
10
+ - **Rationale**: Access to latest features and improvements
11
+ - **Risk**: Potential instability from using development image
12
+ - **Mitigation**: Local testing script provided for validation
13
+
14
+ ### 2. Locale Configuration Fix
15
+ - **Added**: `locales` package installation and `locale-gen en_US.UTF-8`
16
+ - **Problem Solved**: Container was configured with `LANG=en_US.UTF-8` but locale wasn't generated
17
+ - **Impact**: Prevents encoding issues and locale-related errors
18
+
19
+ ### 3. Git Configuration Correction
20
+ - **Changed**: Fixed hardcoded repository path from `openstudio-load-flexibility-measures-gem`
21
+ - **New**: Uses `git config --global --add safe.directory "*"` for broader compatibility
22
+ - **Problem Solved**: Git ownership issues in Docker container
23
+
24
+ ### 4. Enhanced Environment Diagnostics
25
+ - **Added**: Bundle version information and environment details
26
+ - **Changed**: `openstudio --version` → `openstudio openstudio_version` for more specific output
27
+ - **Benefit**: Better debugging information in workflow logs
28
+
29
+ ### 5. Simplified Test Execution
30
+ - **Removed**: Redundant double-run approach with error suppression
31
+ - **Added**: Proper error handling with GitHub Actions error annotations
32
+ - **Improved**: Clear success indicators with ✅ emojis
33
+ - **Benefit**: Faster execution, clearer failure points, better debugging
34
+
35
+ ### 6. Robust Error Handling
36
+ - **Added**: `::error::` annotations for GitHub Actions integration
37
+ - **Added**: Immediate exit on critical failures
38
+ - **Added**: Success confirmations for each step
39
+ - **Benefit**: Clear failure identification and faster debugging
40
+
41
+ ### 7. Improved S3 Sync Logic
42
+ - **Added**: Explicit error handling for S3 sync failures
43
+ - **Added**: Directory existence validation with detailed error messages
44
+ - **Fixed**: Environment variable handling for artifact upload
45
+ - **Benefit**: More reliable deployment and better failure diagnostics
46
+
47
+ ## Testing Strategy
48
+
49
+ ### Local Testing
50
+ 1. Use the provided `test-workflow-locally.sh` script
51
+ 2. Validates Docker image availability and basic functionality
52
+ 3. Tests bundle install and basic rake tasks
53
+
54
+ ### Integration Testing
55
+ 1. Push changes to a test branch
56
+ 2. Monitor GitHub Actions execution
57
+ 3. Validate S3 deployment and artifact creation
58
+
59
+ ## Rollback Plan
60
+ If issues arise with the `:develop` image:
61
+ 1. Revert to `nrel/openstudio:3.10.0`
62
+ 2. Keep all other improvements (locale, error handling, etc.)
63
+
64
+ ## Monitoring
65
+ - Watch for new error patterns in GitHub Actions logs
66
+ - Monitor S3 deployment success rates
67
+ - Check artifact upload reliability
68
+
69
+ ## Benefits
70
+ 1. **Reliability**: Better error handling and clearer failure points
71
+ 2. **Debuggability**: Enhanced logging and error messages
72
+ 3. **Maintainability**: Simplified logic without redundant operations
73
+ 4. **Robustness**: Proper locale setup and git configuration
74
+ 5. **Visibility**: GitHub Actions error annotations and success indicators