cstar-forge 0.3.0__tar.gz

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 (271) hide show
  1. cstar_forge-0.3.0/.github/PULL_REQUEST_TEMPLATE.md +30 -0
  2. cstar_forge-0.3.0/.github/workflows/close_jira_ticket.yaml +56 -0
  3. cstar_forge-0.3.0/.github/workflows/create_jira_tickets.sh +188 -0
  4. cstar_forge-0.3.0/.github/workflows/deploy.yaml +48 -0
  5. cstar_forge-0.3.0/.github/workflows/finalize_release_notes.yaml +70 -0
  6. cstar_forge-0.3.0/.github/workflows/lock-artifacts.yaml +50 -0
  7. cstar_forge-0.3.0/.github/workflows/open_jira_ticket.yaml +39 -0
  8. cstar_forge-0.3.0/.github/workflows/pypipublish.yaml +61 -0
  9. cstar_forge-0.3.0/.github/workflows/tests.yaml +167 -0
  10. cstar_forge-0.3.0/.github/workflows/update_release_notes.yaml +59 -0
  11. cstar_forge-0.3.0/.gitignore +164 -0
  12. cstar_forge-0.3.0/.pre-commit-config.yaml +36 -0
  13. cstar_forge-0.3.0/LICENSE +201 -0
  14. cstar_forge-0.3.0/PKG-INFO +175 -0
  15. cstar_forge-0.3.0/README.md +126 -0
  16. cstar_forge-0.3.0/ci/finalize_release_notes.py +101 -0
  17. cstar_forge-0.3.0/ci/update_release_notes.py +645 -0
  18. cstar_forge-0.3.0/coverage.toml +13 -0
  19. cstar_forge-0.3.0/cstar_forge/__init__.py +26 -0
  20. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/GoA-10th_deg/Assets/.gitkeep +0 -0
  21. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/GoA-10th_deg/Domain.yaml +30 -0
  22. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/NEP-4th_deg/Assets/.gitkeep +0 -0
  23. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/NEP-4th_deg/Domain.yaml +31 -0
  24. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/PAC_2fth_deg/Assets/.gitkeep +0 -0
  25. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/PAC_2fth_deg/Domain.yaml +26 -0
  26. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/ccs-12km/Assets/.gitkeep +0 -0
  27. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/ccs-12km/Domain.yaml +27 -0
  28. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/gulf-guinea-toy/Assets/.gitkeep +0 -0
  29. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/gulf-guinea-toy/Domain.yaml +22 -0
  30. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/hvalfjordur-0/Assets/.gitkeep +0 -0
  31. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/hvalfjordur-0/Domain.yaml +23 -0
  32. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/wio-toy/Assets/.gitkeep +0 -0
  33. cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/wio-toy/Domain.yaml +22 -0
  34. cstar_forge-0.3.0/cstar_forge/catalog/ForcingSpec/glorys-era5-unified/Forcing.yaml +54 -0
  35. cstar_forge-0.3.0/cstar_forge/catalog/Machines/MacOS.yaml +4 -0
  36. cstar_forge-0.3.0/cstar_forge/catalog/Machines/NERSC_perlmutter.yaml +6 -0
  37. cstar_forge-0.3.0/cstar_forge/catalog/Machines/RCAC_anvil.yaml +5 -0
  38. cstar_forge-0.3.0/cstar_forge/catalog/ModelSpec/cson_roms-marbl_v0.1/model.yaml +196 -0
  39. cstar_forge-0.3.0/cstar_forge/catalog/ModelSpec/pio-dev/model.yaml +104 -0
  40. cstar_forge-0.3.0/cstar_forge/catalog/OutputSpec/standard/Output.yaml +135 -0
  41. cstar_forge-0.3.0/cstar_forge/catalog/blueprints/cson_roms-marbl_v0.1_wio-toy_10procs.forge_blueprint.yaml +554 -0
  42. cstar_forge-0.3.0/cstar_forge/catalog.py +53 -0
  43. cstar_forge-0.3.0/cstar_forge/config.py +639 -0
  44. cstar_forge-0.3.0/cstar_forge/diagnostics/__init__.py +28 -0
  45. cstar_forge-0.3.0/cstar_forge/diagnostics/glodap.py +186 -0
  46. cstar_forge-0.3.0/cstar_forge/domain_catalog.py +1127 -0
  47. cstar_forge-0.3.0/cstar_forge/forge/__init__.py +7 -0
  48. cstar_forge-0.3.0/cstar_forge/forge/_yaml_representers.py +36 -0
  49. cstar_forge-0.3.0/cstar_forge/forge/app.py +125 -0
  50. cstar_forge-0.3.0/cstar_forge/forge/executor.py +2034 -0
  51. cstar_forge-0.3.0/cstar_forge/forge/forge_blueprint.py +1036 -0
  52. cstar_forge-0.3.0/cstar_forge/forge/forge_blueprint_engine.py +427 -0
  53. cstar_forge-0.3.0/cstar_forge/forge/glorys_subchunk.py +335 -0
  54. cstar_forge-0.3.0/cstar_forge/forge/host.py +54 -0
  55. cstar_forge-0.3.0/cstar_forge/forge/input_data.py +1844 -0
  56. cstar_forge-0.3.0/cstar_forge/forge/namelist_model.py +599 -0
  57. cstar_forge-0.3.0/cstar_forge/forge/settings.py +365 -0
  58. cstar_forge-0.3.0/cstar_forge/forge/source_data.py +843 -0
  59. cstar_forge-0.3.0/cstar_forge/forge/source_registry.py +126 -0
  60. cstar_forge-0.3.0/cstar_forge/forge/util.py +180 -0
  61. cstar_forge-0.3.0/cstar_forge/forge-blueprint-wizard-app.ipynb +37 -0
  62. cstar_forge-0.3.0/cstar_forge/forge-blueprint-wizard.ipynb +63 -0
  63. cstar_forge-0.3.0/cstar_forge/forge_blueprint_resolve.py +952 -0
  64. cstar_forge-0.3.0/cstar_forge/forge_blueprint_wizard.py +4365 -0
  65. cstar_forge-0.3.0/cstar_forge/models.py +256 -0
  66. cstar_forge-0.3.0/cstar_forge/parsers.py +545 -0
  67. cstar_forge-0.3.0/cstar_forge/run.py +324 -0
  68. cstar_forge-0.3.0/cstar_forge/utils.py +118 -0
  69. cstar_forge-0.3.0/cstar_forge.egg-info/PKG-INFO +175 -0
  70. cstar_forge-0.3.0/cstar_forge.egg-info/SOURCES.txt +269 -0
  71. cstar_forge-0.3.0/cstar_forge.egg-info/dependency_links.txt +1 -0
  72. cstar_forge-0.3.0/cstar_forge.egg-info/requires.txt +33 -0
  73. cstar_forge-0.3.0/cstar_forge.egg-info/scm_file_list.json +266 -0
  74. cstar_forge-0.3.0/cstar_forge.egg-info/scm_version.json +8 -0
  75. cstar_forge-0.3.0/cstar_forge.egg-info/top_level.txt +1 -0
  76. cstar_forge-0.3.0/cworthy-logo.png +0 -0
  77. cstar_forge-0.3.0/deps.md +0 -0
  78. cstar_forge-0.3.0/dev-setup.sh +453 -0
  79. cstar_forge-0.3.0/docs/INSTALLATION-CHANGES.md +38 -0
  80. cstar_forge-0.3.0/docs/InputData-RomsMarblInputData.md +697 -0
  81. cstar_forge-0.3.0/docs/InputData-intro.md +288 -0
  82. cstar_forge-0.3.0/docs/assets/csforge.png +0 -0
  83. cstar_forge-0.3.0/docs/catalog.ipynb +519 -0
  84. cstar_forge-0.3.0/docs/dev-notes/README.md +22 -0
  85. cstar_forge-0.3.0/docs/dev-notes/architecture-decomposition-plan.md +189 -0
  86. cstar_forge-0.3.0/docs/dev-notes/executor-portability-plan.md +183 -0
  87. cstar_forge-0.3.0/docs/dev-notes/forge-blueprint-inventory.md +267 -0
  88. cstar_forge-0.3.0/docs/dev-notes/forge-blueprint-parameter-audit.md +478 -0
  89. cstar_forge-0.3.0/docs/dev-notes/roms-tools-options-integration.md +178 -0
  90. cstar_forge-0.3.0/docs/developer-guide.md +368 -0
  91. cstar_forge-0.3.0/docs/domain-generation-overview.md +93 -0
  92. cstar_forge-0.3.0/docs/forge-blueprint-example.wio-toy.yaml +551 -0
  93. cstar_forge-0.3.0/docs/installation.md +287 -0
  94. cstar_forge-0.3.0/docs/machine-config.md +152 -0
  95. cstar_forge-0.3.0/docs/model-spec-example.ipynb +273 -0
  96. cstar_forge-0.3.0/docs/model-spec-intro.md +96 -0
  97. cstar_forge-0.3.0/docs/model-spec-settings.md +79 -0
  98. cstar_forge-0.3.0/docs/overview.md +98 -0
  99. cstar_forge-0.3.0/docs/reference-domains.md +10 -0
  100. cstar_forge-0.3.0/docs/reference-machines.md +16 -0
  101. cstar_forge-0.3.0/docs/reference-models-yml.md +7 -0
  102. cstar_forge-0.3.0/docs/reference-roms-marbl-blueprint-settings.md +9 -0
  103. cstar_forge-0.3.0/docs/reference-roms-marbl-blueprint.md +13 -0
  104. cstar_forge-0.3.0/docs/releases.md +56 -0
  105. cstar_forge-0.3.0/docs/roms-tools-contributor-guide.md +130 -0
  106. cstar_forge-0.3.0/docs/source-data-developer.md +382 -0
  107. cstar_forge-0.3.0/docs/source-data-example.md +33 -0
  108. cstar_forge-0.3.0/docs/source-data-intro.md +30 -0
  109. cstar_forge-0.3.0/environment.yml +65 -0
  110. cstar_forge-0.3.0/favicon.ico +0 -0
  111. cstar_forge-0.3.0/legacy/README.md +20 -0
  112. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/B_cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs.yaml +120 -0
  113. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_cdr_forcing.yaml +295 -0
  114. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.boundary-bgc.yaml +39 -0
  115. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.boundary-physics.yaml +51 -0
  116. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.river.yaml +37 -0
  117. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.surface-bgc.yaml +37 -0
  118. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.surface-physics.yaml +37 -0
  119. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.tidal.yaml +33 -0
  120. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_grid.yaml +21 -0
  121. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_initial_conditions.yaml +50 -0
  122. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/settings_B_cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs.yaml +212 -0
  123. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/B_cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs.yaml +120 -0
  124. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_cdr_forcing.yaml +259 -0
  125. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.boundary-bgc.yaml +39 -0
  126. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.boundary-physics.yaml +46 -0
  127. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.river.yaml +37 -0
  128. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.surface-bgc.yaml +37 -0
  129. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.surface-physics.yaml +37 -0
  130. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.tidal.yaml +33 -0
  131. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_grid.yaml +21 -0
  132. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_initial_conditions.yaml +45 -0
  133. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/settings_B_cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs.yaml +212 -0
  134. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/B_cson_roms-marbl_v0.1_gulf-guinea-toy_10procs.yaml +111 -0
  135. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.boundary-bgc.yaml +34 -0
  136. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.boundary-physics.yaml +36 -0
  137. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.river.yaml +76 -0
  138. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.surface-bgc.yaml +32 -0
  139. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.surface-physics.yaml +32 -0
  140. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.tidal.yaml +30 -0
  141. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_grid.yaml +19 -0
  142. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_initial_conditions.yaml +35 -0
  143. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/settings_B_cson_roms-marbl_v0.1_gulf-guinea-toy_10procs.yaml +194 -0
  144. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/B_cson_roms-marbl_v0.1_test-tiny_1procs.yaml +120 -0
  145. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_cdr_forcing.yaml +224 -0
  146. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.boundary-bgc.yaml +38 -0
  147. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.boundary-physics.yaml +42 -0
  148. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.river.yaml +108 -0
  149. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.surface-bgc.yaml +36 -0
  150. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.surface-physics.yaml +36 -0
  151. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.tidal.yaml +32 -0
  152. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_grid.yaml +21 -0
  153. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_initial_conditions.yaml +40 -0
  154. cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/settings_B_cson_roms-marbl_v0.1_test-tiny_1procs.yaml +209 -0
  155. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/B_cson_roms-marbl_v0.1_ccs-12km_1120procs.yaml +108 -0
  156. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.boundary-bgc.yaml +35 -0
  157. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.boundary-physics.yaml +37 -0
  158. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.river.yaml +92 -0
  159. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.surface-bgc.yaml +32 -0
  160. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.surface-physics.yaml +32 -0
  161. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.tidal.yaml +30 -0
  162. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_grid.yaml +19 -0
  163. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_initial_conditions.yaml +36 -0
  164. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/settings_B_cson_roms-marbl_v0.1_ccs-12km_1120procs.yaml +184 -0
  165. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/B_cson_roms-marbl_v0.1_ccs-12km_352procs.yaml +108 -0
  166. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.boundary-bgc.yaml +35 -0
  167. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.boundary-physics.yaml +37 -0
  168. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.river.yaml +92 -0
  169. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.surface-bgc.yaml +32 -0
  170. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.surface-physics.yaml +32 -0
  171. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.tidal.yaml +30 -0
  172. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_grid.yaml +19 -0
  173. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_initial_conditions.yaml +36 -0
  174. cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/settings_B_cson_roms-marbl_v0.1_ccs-12km_352procs.yaml +184 -0
  175. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/B_cson_roms-marbl_v0.1_ccs-12km_280procs.yaml +108 -0
  176. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.boundary-bgc.yaml +34 -0
  177. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.boundary-physics.yaml +36 -0
  178. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.river.yaml +92 -0
  179. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.surface-bgc.yaml +32 -0
  180. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.surface-physics.yaml +32 -0
  181. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.tidal.yaml +30 -0
  182. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_grid.yaml +19 -0
  183. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_initial_conditions.yaml +35 -0
  184. cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/settings_B_cson_roms-marbl_v0.1_ccs-12km_280procs.yaml +184 -0
  185. cstar_forge-0.3.0/legacy/legacy_notebook/__init__.py +6 -0
  186. cstar_forge-0.3.0/legacy/legacy_notebook/compute.py +325 -0
  187. cstar_forge-0.3.0/legacy/legacy_notebook/nb_engine.py +383 -0
  188. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/benchmark-scaling-plot.ipynb +1024 -0
  189. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/benchmark_scaling.py +152 -0
  190. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/domains-bm-scaling-no-bgc.yaml +144 -0
  191. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/domains-bm-scaling.yaml +144 -0
  192. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14983237.err +14 -0
  193. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14984790.err +240 -0
  194. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14987714.err +0 -0
  195. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14988860.err +88 -0
  196. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14988891.err +90 -0
  197. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14989609.err +48 -0
  198. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14990805.err +42 -0
  199. cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/run-benchmark-scaling.sh +97 -0
  200. cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecBuilder-demo.ipynb +2866 -0
  201. cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecEngine-build-all.ipynb +678 -0
  202. cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecEngine-build-nested.ipynb +287 -0
  203. cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecEngine-build-one.ipynb +381 -0
  204. cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/README.md +9 -0
  205. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecBuilder-demo_RCAC_anvil.ipynb +889 -0
  206. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecBuilder_PAC_nested.ipynb +1936 -0
  207. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecEngine-build-PAC_nesting.ipynb +5760 -0
  208. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecEngine-build-one_RCAC_anvil.ipynb +392 -0
  209. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/PAC_domains-nested.yaml +92 -0
  210. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/CStarSpecBuilder-demo_macos.ipynb +815 -0
  211. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/CStarSpecBuilder_PAC_nested.py +290 -0
  212. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/CStarSpecBuilder_PersianGulf.ipynb +925 -0
  213. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_inner.yaml +24 -0
  214. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_middle_down.yaml +17 -0
  215. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_middle_up.yaml +26 -0
  216. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_outer_down.yaml +17 -0
  217. cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_outer_up.yaml +25 -0
  218. cstar_forge-0.3.0/legacy/workflows/generate-models/templates/domains-nested.yaml +92 -0
  219. cstar_forge-0.3.0/legacy/workflows/generate-models/templates/domains.yaml +102 -0
  220. cstar_forge-0.3.0/legacy/workflows/generate-models/templates/executed/forge/MacOS/CStarSpecBuilder-demo_MacOS.ipynb +2635 -0
  221. cstar_forge-0.3.0/legacy/workflows/skill-assessment/outputs/papermill/pm_compare-to-glodap_cson_roms-marbl_v0.1_ccs-12km.ipynb +1262 -0
  222. cstar_forge-0.3.0/legacy/workflows/skill-assessment/templates/pm_compare-to-glodap.ipynb +1064 -0
  223. cstar_forge-0.3.0/legacy/workflows/skill-assessment/workflow.yaml +20 -0
  224. cstar_forge-0.3.0/legacy/workflows/source-data/ensure_glorys.py +172 -0
  225. cstar_forge-0.3.0/legacy/workflows/source-data/setup.py +9 -0
  226. cstar_forge-0.3.0/legacy/workflows/visualization/outputs/forge-user/cson-plot.ipynb +167 -0
  227. cstar_forge-0.3.0/legacy/workflows/visualization/outputs/papermill/pm_movie-maker_cson_roms-marbl_v0.1_ccs-12km_pCO2SURF.ipynb +1966 -0
  228. cstar_forge-0.3.0/legacy/workflows/visualization/settings.yaml +20 -0
  229. cstar_forge-0.3.0/legacy/workflows/visualization/templates/pm_movie-maker.ipynb +1443 -0
  230. cstar_forge-0.3.0/legacy/workflows/visualization/workflow.yaml +22 -0
  231. cstar_forge-0.3.0/myst.yml +60 -0
  232. cstar_forge-0.3.0/pixi.lock +15823 -0
  233. cstar_forge-0.3.0/pyproject.toml +157 -0
  234. cstar_forge-0.3.0/pytest.ini +18 -0
  235. cstar_forge-0.3.0/run-wizard-app.sh +22 -0
  236. cstar_forge-0.3.0/scripts/export-lock-artifacts.py +284 -0
  237. cstar_forge-0.3.0/scripts/harden-env.sh +162 -0
  238. cstar_forge-0.3.0/scripts/migrate_opt_to_namelist.py +579 -0
  239. cstar_forge-0.3.0/scripts/register-kernel.sh +150 -0
  240. cstar_forge-0.3.0/set-repo-versions.sh +76 -0
  241. cstar_forge-0.3.0/setup.cfg +4 -0
  242. cstar_forge-0.3.0/templates/compile-time/cppdefs.opt.j2 +427 -0
  243. cstar_forge-0.3.0/templates/run-time/marbl_in +276 -0
  244. cstar_forge-0.3.0/tests/README.md +40 -0
  245. cstar_forge-0.3.0/tests/__init__.py +1 -0
  246. cstar_forge-0.3.0/tests/conftest.py +71 -0
  247. cstar_forge-0.3.0/tests/fixtures/__init__.py +1 -0
  248. cstar_forge-0.3.0/tests/fixtures/cdr_forcing_sample.yaml +224 -0
  249. cstar_forge-0.3.0/tests/fixtures/cstar_forge/__init__.py +3 -0
  250. cstar_forge-0.3.0/tests/fixtures/golden_model_settings_test-tiny.json +313 -0
  251. cstar_forge-0.3.0/tests/fixtures/golden_namelist_test-tiny.nml +318 -0
  252. cstar_forge-0.3.0/tests/fixtures/setup.py +8 -0
  253. cstar_forge-0.3.0/tests/fixtures/test-environment.yml +8 -0
  254. cstar_forge-0.3.0/tests/test_config.py +660 -0
  255. cstar_forge-0.3.0/tests/test_core.py +2427 -0
  256. cstar_forge-0.3.0/tests/test_dev-setup.sh +273 -0
  257. cstar_forge-0.3.0/tests/test_dev_setup.py +291 -0
  258. cstar_forge-0.3.0/tests/test_domain_catalog.py +186 -0
  259. cstar_forge-0.3.0/tests/test_domain_catalog_github.py +79 -0
  260. cstar_forge-0.3.0/tests/test_forge_app_boundary.py +121 -0
  261. cstar_forge-0.3.0/tests/test_forge_blueprint.py +2855 -0
  262. cstar_forge-0.3.0/tests/test_forge_blueprint_wizard.py +1087 -0
  263. cstar_forge-0.3.0/tests/test_input_data.py +2540 -0
  264. cstar_forge-0.3.0/tests/test_models.py +211 -0
  265. cstar_forge-0.3.0/tests/test_models_comprehensive.py +506 -0
  266. cstar_forge-0.3.0/tests/test_namelist_model.py +284 -0
  267. cstar_forge-0.3.0/tests/test_parsers.py +282 -0
  268. cstar_forge-0.3.0/tests/test_roms_tools_coverage.py +222 -0
  269. cstar_forge-0.3.0/tests/test_settings.py +542 -0
  270. cstar_forge-0.3.0/tests/test_source_data.py +581 -0
  271. cstar_forge-0.3.0/tests/test_write_namelist.py +307 -0
@@ -0,0 +1,30 @@
1
+ # Summary
2
+ <!-- Feel free to remove sections irrelevant to this PR or leave the default `N/A` content -->
3
+
4
+ ## Breaking Changes
5
+ <!-- List any breaking changes to interfaces, changes to inputs or outputs, or procedural changes -->
6
+ - N/A
7
+
8
+ ## New Features
9
+ <!-- List any new capabilities added -->
10
+ - N/A
11
+
12
+ ## Bug Fixes
13
+ <!-- List any behavioral changes resulting from pre-existing code performing in an unexpected manner -->
14
+ - N/A
15
+
16
+ ## Improvements
17
+ <!-- List any improvements made to existing code or processes -->
18
+ - N/A
19
+
20
+ ## Miscellaneous
21
+ <!-- List any non-code-related changes, such as CI, packaging, or documentation -->
22
+ - N/A
23
+
24
+
25
+ ## Code Review Checklist
26
+ <!-- Feel free to remove check-list items irrelevant to this PR -->
27
+ - [ ] Closes #xxxx
28
+ - [ ] New functionality has documentation, type hint coverage, and tests
29
+ - [ ] Tests and `pre-commit run --all-files` are passing
30
+
@@ -0,0 +1,56 @@
1
+ name: Close Jira Ticket on Issue Close
2
+
3
+ on:
4
+ issues:
5
+ types: [closed]
6
+
7
+ jobs:
8
+ close-jira-ticket:
9
+ runs-on: ubuntu-latest
10
+ if: contains(github.event.issue.labels.*.name, 'jira-story')
11
+ steps:
12
+ - name: Extract Jira Story Key from Issue Comment
13
+ id: extract_story_key
14
+ uses: actions/github-script@v6
15
+ with:
16
+ script: |
17
+ // Fetch all comments on the closed issue
18
+ const { data: comments } = await github.rest.issues.listComments({
19
+ owner: context.repo.owner,
20
+ repo: context.repo.repo,
21
+ issue_number: context.issue.number
22
+ });
23
+
24
+ // Find the comment containing the Jira link
25
+ const jiraComment = comments.find(comment => comment.body.includes('This issue has been linked to Jira story'));
26
+ if (!jiraComment) {
27
+ core.setFailed("No Jira comment found with story key.");
28
+ return;
29
+ }
30
+
31
+ // Extract the Jira story key from the comment
32
+ const match = jiraComment.body.match(/\[(.*?)\]\(https:\/\/cworthy\.atlassian\.net\/browse\/.*?\)/);
33
+ if (!match || match.length < 2) {
34
+ core.setFailed("Jira story key not found in the comment.");
35
+ return;
36
+ }
37
+ const storyKey = match[1];
38
+
39
+ // Print the extracted story key
40
+ console.log("Extracted STORY_KEY:", storyKey);
41
+
42
+ core.setOutput("story_key", storyKey);
43
+
44
+ - name: Close Jira Ticket
45
+ env:
46
+ JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN_MENDOCINO }}
47
+ JIRA_EMAIL: ${{ secrets.JIRA_EMAIL_MENDOCINO }}
48
+ STORY_KEY: ${{ steps.extract_story_key.outputs.story_key }}
49
+ run: |
50
+ story_key="${{ steps.extract_story_key.outputs.story_key }}"
51
+ jira_domain="https://cworthy.atlassian.net"
52
+
53
+ curl -s -w "%{http_code}" -o response.json -X POST -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
54
+ -H "Content-Type: application/json" \
55
+ --data '{"transition": {"id": "31"}}' \
56
+ "$jira_domain/rest/api/3/issue/$story_key/transitions"
@@ -0,0 +1,188 @@
1
+ #!/bin/bash
2
+
3
+ ######################################
4
+ # FORMAT THE TICKET SUMMARY:
5
+
6
+ # Escape double quotes in ISSUE_TITLE
7
+ ESCAPED_TITLE="${ISSUE_TITLE//\"/\\\"}"
8
+
9
+ ##############################
10
+ # FORMAT THE TICKET DESCRIPTION:
11
+
12
+ ## Escape double quotes and newlines in ISSUE_BODY
13
+ ESCAPED_BODY="${ISSUE_BODY//\"/\\\"}"
14
+
15
+ ## This is literally the only way to replace newlines with spaces that the Jira API accepts:
16
+ IFS=' ' read -r -d '' ESCAPED_BODY <<<"$ESCAPED_BODY"
17
+
18
+ ## Add link back to original GitHub URL
19
+ ESCAPED_BODY="${ESCAPED_BODY} --- [View the original GitHub issue|$GITHUB_ISSUE_URL]"
20
+
21
+ ##############################
22
+ # DETERMINE ASSIGNEES
23
+
24
+ # Trim and set GITHUB_ASSIGNEE_USERNAME if needed
25
+ GITHUB_ASSIGNEE_USERNAME=$(echo "$GITHUB_ASSIGNEE_USERNAME" | xargs)
26
+
27
+
28
+ # Get the current active sprint for our board
29
+ RESPONSE=$(curl -s -w "%{http_code}" -o sprint_response.json -u "$JIRA_EMAIL_MENDOCINO:$JIRA_API_TOKEN_MENDOCINO" \
30
+ -H "Content-Type: application/json" \
31
+ -X GET \
32
+ "https://cworthy.atlassian.net/rest/agile/1.0/board/$JIRA_BOARD_ID/sprint?state=active")
33
+
34
+ echo "Jira response (Code $RESPONSE):"
35
+ cat sprint_response.json
36
+
37
+ ACTIVE_SPRINT_ID=$(jq ".values.[0].id" < sprint_response.json)
38
+
39
+
40
+ ##############################
41
+ # CREATE THE STORY
42
+
43
+ # note that customfield_10020 is our sprint field
44
+ # one could figure that out again someday by searching through the results of their GET issue fields endpoint
45
+
46
+ # Create the JSON payload, adding assignee if there is one
47
+ if [[ -n "$GITHUB_ASSIGNEE_USERNAME" ]]; then
48
+ # Map GitHub username to Jira account ID
49
+ JIRA_ASSIGNEE_ID=$(echo "$JIRA_USERID_MAP" | jq ".$GITHUB_ASSIGNEE_USERNAME" | tr -d '"')
50
+ cat > payload.json <<EOF
51
+ {
52
+ "fields": {
53
+ "project": { "key": "$JIRA_BOARD_KEY" },
54
+ "summary": "$ESCAPED_TITLE",
55
+ "description": "$ESCAPED_BODY",
56
+ "issuetype": { "name": "Story" },
57
+ "assignee": { "accountId": "$JIRA_ASSIGNEE_ID" },
58
+ "$JIRA_SPRINT_FIELD_ID": $ACTIVE_SPRINT_ID
59
+ }
60
+ }
61
+ EOF
62
+ else
63
+ cat > payload.json <<EOF
64
+ {
65
+ "fields": {
66
+ "project": { "key": "$JIRA_BOARD_KEY" },
67
+ "summary": "$ESCAPED_TITLE",
68
+ "description": "$ESCAPED_BODY",
69
+ "issuetype": { "name": "Story" },
70
+ "$JIRA_SPRINT_FIELD_ID": $ACTIVE_SPRINT_ID
71
+ }
72
+ }
73
+ EOF
74
+ fi
75
+
76
+ # Display the JSON content for verification
77
+ echo "Generated JSON payload:"
78
+ cat payload.json
79
+
80
+ # Make the API request to create the main story
81
+ RESPONSE=$(curl -s -w "%{http_code}" -o response.json -X POST -u "$JIRA_EMAIL_MENDOCINO:$JIRA_API_TOKEN_MENDOCINO" \
82
+ -H "Content-Type: application/json" \
83
+ -d @payload.json \
84
+ "https://cworthy.atlassian.net/rest/api/2/issue")
85
+
86
+ echo "Jira response (Code $RESPONSE):"
87
+ cat response.json
88
+
89
+ # Check if curl was successful
90
+ if [[ $? -ne 0 || "$RESPONSE" -ne 201 ]]; then
91
+ echo "Error: Failed to make a request to Jira API."
92
+ exit 1
93
+ fi
94
+
95
+ ##############################
96
+ # FORMAT SUBTASKS:
97
+
98
+ # Extract the ID of the story created above
99
+ STORY_ID=$(jq -r '.key' response.json)
100
+
101
+ # Verify STORY_ID is not empty
102
+ if [[ -z "$STORY_ID" ]]; then
103
+ echo "Error: STORY_ID is empty. Failed to retrieve a valid story ID."
104
+ exit 1
105
+ fi
106
+
107
+ # Use readarray to populate TASKS array directly from matching lines in ISSUE_BODY
108
+ readarray -t TASKS < <(echo "$ISSUE_BODY" | grep -E '^- \[[ x]\] ')
109
+
110
+ # If there are tasks, create subtasks
111
+ if [[ ${#TASKS[@]} -gt 0 ]]; then
112
+ echo "Creating subtasks for tasks found in the issue..."
113
+
114
+ for TASK in "${TASKS[@]}"; do
115
+ # Remove the `- [ ]` or `- [x]` prefix from each TASK
116
+ CLEANED_TASK=$(echo "$TASK" | sed 's/^- \[[ x]\] //')
117
+
118
+ # Check for presence of colon and split based on that
119
+ if [[ "$CLEANED_TASK" == *:* ]]; then
120
+ # Split into summary and description based on the first colon
121
+ TASK_SUMMARY="${CLEANED_TASK%%:*}"
122
+ TASK_DESCRIPTION="${CLEANED_TASK#*:}"
123
+ else
124
+ # If no colon, treat the whole line as the summary and leave description empty
125
+ TASK_SUMMARY="$CLEANED_TASK"
126
+ TASK_DESCRIPTION=""
127
+ fi
128
+
129
+
130
+ ## Trim any extra whitespace or newlines in summary and description
131
+ TASK_SUMMARY=$(echo "$TASK_SUMMARY" | tr -d '\n' | tr -d '\r' | xargs)
132
+ TASK_DESCRIPTION=$(echo "$TASK_DESCRIPTION" | tr -d '\n' | tr -d '\r' | xargs)
133
+
134
+ ## Escape double quotes in the summary and description
135
+ ESCAPED_TASK_SUMMARY="${TASK_SUMMARY//\"/\\\"}"
136
+ ESCAPED_TASK_DESCRIPTION="${TASK_DESCRIPTION//\"/\\\"}"
137
+ ESCAPED_TASK_SUMMARY="${ESCAPED_TASK_SUMMARY//$'\n'/ }"
138
+ ESCAPED_TASK_DESCRIPTION="${ESCAPED_TASK_DESCRIPTION//$'\n'/ }"
139
+
140
+ # Create JSON payload for each subtask with summary and description
141
+ if [[ -n "$JIRA_ASSIGNEE_ID" ]]; then
142
+ cat > subtask.json <<EOF
143
+ {
144
+ "fields": {
145
+ "project": { "key": "$JIRA_BOARD_KEY" },
146
+ "summary": "$ESCAPED_TASK_SUMMARY",
147
+ "description": "$ESCAPED_TASK_DESCRIPTION",
148
+ "issuetype": { "id": "$JIRA_SUBTASK_ISSUETYPE_ID" },
149
+ "parent": { "key": "$STORY_ID" },
150
+ "assignee": { "accountId": "$JIRA_ASSIGNEE_ID" }
151
+ }
152
+ }
153
+ EOF
154
+ else
155
+ cat > subtask.json <<EOF
156
+ {
157
+ "fields": {
158
+ "project": { "key": "$JIRA_BOARD_KEY" },
159
+ "summary": "$ESCAPED_TASK_SUMMARY",
160
+ "description": "$ESCAPED_TASK_DESCRIPTION",
161
+ "issuetype": { "id": "$JIRA_SUBTASK_ISSUETYPE_ID" },
162
+ "parent": { "key": "$STORY_ID" }
163
+ }
164
+ }
165
+ EOF
166
+ fi
167
+ echo "Generated JSON payload for subtask:"
168
+ cat subtask.json
169
+
170
+ # Make the API request to create each subtask
171
+ SUBTASK_RESPONSE=$(curl -s -w "%{http_code}" -o subtask_response.json -X POST -u "$JIRA_EMAIL_MENDOCINO:$JIRA_API_TOKEN_MENDOCINO" \
172
+ -H "Content-Type: application/json" \
173
+ -d @subtask.json \
174
+ "https://cworthy.atlassian.net/rest/api/2/issue")
175
+
176
+ # Check if subtask creation was successful
177
+ if [[ $? -ne 0 || "$SUBTASK_RESPONSE" -ne 201 ]]; then
178
+ echo "Error: Failed to create subtask for '$TASK_SUMMARY'. Response:"
179
+ cat subtask_response.json
180
+ exit 1
181
+ else
182
+ echo "Subtask created successfully for '$TASK_SUMMARY'."
183
+ cat subtask_response.json
184
+ fi
185
+ done
186
+ else
187
+ echo "No tasks found in the issue body. No subtasks created."
188
+ fi
@@ -0,0 +1,48 @@
1
+ # This file was created automatically with `jupyter-book init --gh-pages` 🪄 💚
2
+ # Ensure your GitHub Pages settings for this repository are set to deploy with **GitHub Actions**.
3
+ name: Jupyter Book (via myst) GitHub Pages Deploy
4
+ on:
5
+ workflow_dispatch:
6
+ push:
7
+ # Runs on pushes targeting the default branch
8
+ branches: [main]
9
+ env:
10
+ # `BASE_URL` determines, relative to the root of the domain, the URL that your site is served from.
11
+ # E.g., if your site lives at `https://mydomain.org/myproject`, set `BASE_URL=/myproject`.
12
+ # If, instead, your site lives at the root of the domain, at `https://mydomain.org`, set `BASE_URL=''`.
13
+ BASE_URL: /${{ github.event.repository.name }}
14
+
15
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
16
+ permissions:
17
+ contents: read
18
+ pages: write
19
+ id-token: write
20
+ # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
21
+ # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
22
+ concurrency:
23
+ group: 'pages'
24
+ cancel-in-progress: false
25
+ jobs:
26
+ deploy:
27
+ environment:
28
+ name: github-pages
29
+ url: ${{ steps.deployment.outputs.page_url }}
30
+ runs-on: ubuntu-latest
31
+ steps:
32
+ - uses: actions/checkout@v4
33
+ - name: Setup Pages
34
+ uses: actions/configure-pages@v3
35
+ - uses: actions/setup-node@v4
36
+ with:
37
+ node-version: 18.x
38
+ - name: Install Jupyter Book (via myst)
39
+ run: npm install -g jupyter-book
40
+ - name: Build HTML Assets
41
+ run: jupyter-book build --html
42
+ - name: Upload artifact
43
+ uses: actions/upload-pages-artifact@v3
44
+ with:
45
+ path: './_build/html'
46
+ - name: Deploy to GitHub Pages
47
+ id: deployment
48
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,70 @@
1
+ name: Finalize Release Notes
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ tag:
7
+ description: "Release tag to finalize (e.g. 0.2.0)"
8
+ required: true
9
+ type: string
10
+
11
+ jobs:
12
+ finalize-release-notes:
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ contents: write
16
+ pull-requests: write
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ with:
21
+ # Full history needed so we can switch branches and push
22
+ fetch-depth: 0
23
+ token: ${{ secrets.GITHUB_TOKEN }}
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: "3.12"
29
+
30
+ - name: Configure git identity
31
+ run: |
32
+ git config user.name "github-actions[bot]"
33
+ git config user.email "github-actions[bot]@users.noreply.github.com"
34
+
35
+ - name: Checkout or create next_release_notes branch
36
+ run: |
37
+ if git ls-remote --exit-code --heads origin next_release_notes; then
38
+ git checkout -b next_release_notes origin/next_release_notes
39
+ else
40
+ git checkout -b next_release_notes
41
+ fi
42
+
43
+ - name: Run finalize release notes script
44
+ run: python ci/finalize_release_notes.py "${{ inputs.tag }}"
45
+
46
+ - name: Commit and push if there are changes
47
+ run: |
48
+ git add docs/releases.md
49
+ if git diff --staged --quiet; then
50
+ echo "No release note changes — nothing to commit."
51
+ else
52
+ git commit -m "Finalize release notes for ${{ inputs.tag }}"
53
+ git push origin next_release_notes
54
+ fi
55
+
56
+ - name: Open pull request to main
57
+ env:
58
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59
+ run: |
60
+ # Note: PRs opened with the default GITHUB_TOKEN do not trigger
61
+ # other workflows (e.g. docs build, tests) on the PR itself.
62
+ if gh pr list --base main --head next_release_notes --state open --json number --jq '.[0]' | grep -q .; then
63
+ echo "PR from next_release_notes to main already open — skipping creation."
64
+ else
65
+ gh pr create \
66
+ --base main \
67
+ --head next_release_notes \
68
+ --title "Finalize release notes for ${{ inputs.tag }}" \
69
+ --body "Automated finalization of release notes for \`${{ inputs.tag }}\`."
70
+ fi
@@ -0,0 +1,50 @@
1
+ name: Export Lock Artifacts
2
+
3
+ # Renders plain conda/pip consumption artifacts (conda explicit spec +
4
+ # pinned pypi requirements.txt, per platform) from pixi.lock via
5
+ # scripts/export-lock-artifacts.py. Always uploaded as a workflow artifact;
6
+ # additionally attached to the GitHub release when triggered by one, so
7
+ # non-pixi consumers (see docs/installation.md) have something to download.
8
+
9
+ on:
10
+ workflow_dispatch:
11
+ release:
12
+ types: [published]
13
+
14
+ jobs:
15
+ export:
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: write
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: "3.12"
27
+
28
+ - name: Install script dependency (pyyaml)
29
+ run: python -m pip install pyyaml
30
+
31
+ - name: Set up pixi
32
+ uses: prefix-dev/setup-pixi@v0
33
+ with:
34
+ pixi-version: v0.76.1
35
+ cache: true
36
+
37
+ - name: Export lock artifacts (dev environment)
38
+ run: python scripts/export-lock-artifacts.py --env dev --outdir lock-artifacts
39
+
40
+ - name: Upload lock artifacts
41
+ uses: actions/upload-artifact@v4
42
+ with:
43
+ name: lock-artifacts
44
+ path: lock-artifacts/
45
+
46
+ - name: Attach artifacts to release
47
+ if: github.event_name == 'release'
48
+ env:
49
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50
+ run: gh release upload "$GITHUB_REF_NAME" lock-artifacts/* --clobber
@@ -0,0 +1,39 @@
1
+ name: Create Jira Ticket on Label
2
+
3
+ on:
4
+ issues:
5
+ types: [labeled]
6
+
7
+ jobs:
8
+ create_jira_ticket:
9
+ if: contains(github.event.label.name, 'jira-story')
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout Repository
13
+ uses: actions/checkout@v2
14
+
15
+ - name: Run Jira Ticket Creation Script
16
+ env:
17
+ JIRA_EMAIL_MENDOCINO: ${{ secrets.JIRA_EMAIL_MENDOCINO }}
18
+ JIRA_API_TOKEN_MENDOCINO: ${{ secrets.JIRA_API_TOKEN_MENDOCINO }}
19
+ JIRA_BOARD_ID: ${{ vars.JIRA_BOARD_ID }}
20
+ JIRA_BOARD_KEY: ${{ vars.JIRA_BOARD_KEY }}
21
+ JIRA_USERID_MAP: ${{ vars.JIRA_USERID_MAP }}
22
+ JIRA_SPRINT_FIELD_ID: ${{ vars.JIRA_SPRINT_FIELD_ID }}
23
+ JIRA_SUBTASK_ISSUETYPE_ID: ${{ vars.JIRA_SUBTASK_ISSUETYPE_ID }}
24
+ ISSUE_TITLE: "${{ github.event.issue.title }}"
25
+ ISSUE_BODY: "${{ github.event.issue.body }}"
26
+ GITHUB_ISSUE_URL: "https://github.com/${{ github.repository }}/issues/${{ github.event.issue.number }}"
27
+ GITHUB_ASSIGNEE_USERNAME: "${{ github.event.issue.assignee.login }}"
28
+ run: |
29
+ .github/workflows/create_jira_tickets.sh
30
+ STORY_KEY=$(jq -r '.key' response.json)
31
+ echo "STORY_KEY=$STORY_KEY" >> $GITHUB_ENV
32
+ - name: Comment on GitHub Issue
33
+ run: |
34
+ # Comment on the GitHub issue with the Jira story key
35
+ COMMENT_BODY="This issue has been linked to Jira story [$STORY_KEY](https://cworthy.atlassian.net/browse/$STORY_KEY)."
36
+ curl -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
37
+ -H "Accept: application/vnd.github.v3+json" \
38
+ -d "{\"body\": \"$COMMENT_BODY\"}" \
39
+ "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments"
@@ -0,0 +1,61 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ build:
10
+ name: Build sdist and wheel
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ # setuptools_scm needs the full history (and tags) to derive the
16
+ # version from the release tag; a shallow checkout would silently
17
+ # fall back to fallback_version = "0.1.0" regardless of the tag.
18
+ fetch-depth: 0
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: Install build
26
+ run: python -m pip install --upgrade build
27
+
28
+ - name: Build sdist and wheel
29
+ run: python -m build
30
+
31
+ - name: Smoke-install the built wheel
32
+ run: |
33
+ python -m venv /tmp/smoke-env
34
+ /tmp/smoke-env/bin/pip install dist/*.whl
35
+ /tmp/smoke-env/bin/python -c "import cstar_forge"
36
+
37
+ - name: Upload build artifacts
38
+ uses: actions/upload-artifact@v4
39
+ with:
40
+ name: dist
41
+ path: dist/
42
+
43
+ publish:
44
+ name: Publish to PyPI
45
+ needs: build
46
+ runs-on: ubuntu-latest
47
+ environment:
48
+ name: pypi
49
+ url: https://pypi.org/p/cstar-forge
50
+ permissions:
51
+ # Required for PyPI trusted publishing (OIDC) — no API token needed.
52
+ id-token: write
53
+ steps:
54
+ - name: Download build artifacts
55
+ uses: actions/download-artifact@v4
56
+ with:
57
+ name: dist
58
+ path: dist/
59
+
60
+ - name: Publish to PyPI
61
+ uses: pypa/gh-action-pypi-publish@release/v1