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.
- cstar_forge-0.3.0/.github/PULL_REQUEST_TEMPLATE.md +30 -0
- cstar_forge-0.3.0/.github/workflows/close_jira_ticket.yaml +56 -0
- cstar_forge-0.3.0/.github/workflows/create_jira_tickets.sh +188 -0
- cstar_forge-0.3.0/.github/workflows/deploy.yaml +48 -0
- cstar_forge-0.3.0/.github/workflows/finalize_release_notes.yaml +70 -0
- cstar_forge-0.3.0/.github/workflows/lock-artifacts.yaml +50 -0
- cstar_forge-0.3.0/.github/workflows/open_jira_ticket.yaml +39 -0
- cstar_forge-0.3.0/.github/workflows/pypipublish.yaml +61 -0
- cstar_forge-0.3.0/.github/workflows/tests.yaml +167 -0
- cstar_forge-0.3.0/.github/workflows/update_release_notes.yaml +59 -0
- cstar_forge-0.3.0/.gitignore +164 -0
- cstar_forge-0.3.0/.pre-commit-config.yaml +36 -0
- cstar_forge-0.3.0/LICENSE +201 -0
- cstar_forge-0.3.0/PKG-INFO +175 -0
- cstar_forge-0.3.0/README.md +126 -0
- cstar_forge-0.3.0/ci/finalize_release_notes.py +101 -0
- cstar_forge-0.3.0/ci/update_release_notes.py +645 -0
- cstar_forge-0.3.0/coverage.toml +13 -0
- cstar_forge-0.3.0/cstar_forge/__init__.py +26 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/GoA-10th_deg/Assets/.gitkeep +0 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/GoA-10th_deg/Domain.yaml +30 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/NEP-4th_deg/Assets/.gitkeep +0 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/NEP-4th_deg/Domain.yaml +31 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/PAC_2fth_deg/Assets/.gitkeep +0 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/PAC_2fth_deg/Domain.yaml +26 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/ccs-12km/Assets/.gitkeep +0 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/ccs-12km/Domain.yaml +27 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/gulf-guinea-toy/Assets/.gitkeep +0 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/gulf-guinea-toy/Domain.yaml +22 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/hvalfjordur-0/Assets/.gitkeep +0 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/hvalfjordur-0/Domain.yaml +23 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/wio-toy/Assets/.gitkeep +0 -0
- cstar_forge-0.3.0/cstar_forge/catalog/DomainSpec/wio-toy/Domain.yaml +22 -0
- cstar_forge-0.3.0/cstar_forge/catalog/ForcingSpec/glorys-era5-unified/Forcing.yaml +54 -0
- cstar_forge-0.3.0/cstar_forge/catalog/Machines/MacOS.yaml +4 -0
- cstar_forge-0.3.0/cstar_forge/catalog/Machines/NERSC_perlmutter.yaml +6 -0
- cstar_forge-0.3.0/cstar_forge/catalog/Machines/RCAC_anvil.yaml +5 -0
- cstar_forge-0.3.0/cstar_forge/catalog/ModelSpec/cson_roms-marbl_v0.1/model.yaml +196 -0
- cstar_forge-0.3.0/cstar_forge/catalog/ModelSpec/pio-dev/model.yaml +104 -0
- cstar_forge-0.3.0/cstar_forge/catalog/OutputSpec/standard/Output.yaml +135 -0
- cstar_forge-0.3.0/cstar_forge/catalog/blueprints/cson_roms-marbl_v0.1_wio-toy_10procs.forge_blueprint.yaml +554 -0
- cstar_forge-0.3.0/cstar_forge/catalog.py +53 -0
- cstar_forge-0.3.0/cstar_forge/config.py +639 -0
- cstar_forge-0.3.0/cstar_forge/diagnostics/__init__.py +28 -0
- cstar_forge-0.3.0/cstar_forge/diagnostics/glodap.py +186 -0
- cstar_forge-0.3.0/cstar_forge/domain_catalog.py +1127 -0
- cstar_forge-0.3.0/cstar_forge/forge/__init__.py +7 -0
- cstar_forge-0.3.0/cstar_forge/forge/_yaml_representers.py +36 -0
- cstar_forge-0.3.0/cstar_forge/forge/app.py +125 -0
- cstar_forge-0.3.0/cstar_forge/forge/executor.py +2034 -0
- cstar_forge-0.3.0/cstar_forge/forge/forge_blueprint.py +1036 -0
- cstar_forge-0.3.0/cstar_forge/forge/forge_blueprint_engine.py +427 -0
- cstar_forge-0.3.0/cstar_forge/forge/glorys_subchunk.py +335 -0
- cstar_forge-0.3.0/cstar_forge/forge/host.py +54 -0
- cstar_forge-0.3.0/cstar_forge/forge/input_data.py +1844 -0
- cstar_forge-0.3.0/cstar_forge/forge/namelist_model.py +599 -0
- cstar_forge-0.3.0/cstar_forge/forge/settings.py +365 -0
- cstar_forge-0.3.0/cstar_forge/forge/source_data.py +843 -0
- cstar_forge-0.3.0/cstar_forge/forge/source_registry.py +126 -0
- cstar_forge-0.3.0/cstar_forge/forge/util.py +180 -0
- cstar_forge-0.3.0/cstar_forge/forge-blueprint-wizard-app.ipynb +37 -0
- cstar_forge-0.3.0/cstar_forge/forge-blueprint-wizard.ipynb +63 -0
- cstar_forge-0.3.0/cstar_forge/forge_blueprint_resolve.py +952 -0
- cstar_forge-0.3.0/cstar_forge/forge_blueprint_wizard.py +4365 -0
- cstar_forge-0.3.0/cstar_forge/models.py +256 -0
- cstar_forge-0.3.0/cstar_forge/parsers.py +545 -0
- cstar_forge-0.3.0/cstar_forge/run.py +324 -0
- cstar_forge-0.3.0/cstar_forge/utils.py +118 -0
- cstar_forge-0.3.0/cstar_forge.egg-info/PKG-INFO +175 -0
- cstar_forge-0.3.0/cstar_forge.egg-info/SOURCES.txt +269 -0
- cstar_forge-0.3.0/cstar_forge.egg-info/dependency_links.txt +1 -0
- cstar_forge-0.3.0/cstar_forge.egg-info/requires.txt +33 -0
- cstar_forge-0.3.0/cstar_forge.egg-info/scm_file_list.json +266 -0
- cstar_forge-0.3.0/cstar_forge.egg-info/scm_version.json +8 -0
- cstar_forge-0.3.0/cstar_forge.egg-info/top_level.txt +1 -0
- cstar_forge-0.3.0/cworthy-logo.png +0 -0
- cstar_forge-0.3.0/deps.md +0 -0
- cstar_forge-0.3.0/dev-setup.sh +453 -0
- cstar_forge-0.3.0/docs/INSTALLATION-CHANGES.md +38 -0
- cstar_forge-0.3.0/docs/InputData-RomsMarblInputData.md +697 -0
- cstar_forge-0.3.0/docs/InputData-intro.md +288 -0
- cstar_forge-0.3.0/docs/assets/csforge.png +0 -0
- cstar_forge-0.3.0/docs/catalog.ipynb +519 -0
- cstar_forge-0.3.0/docs/dev-notes/README.md +22 -0
- cstar_forge-0.3.0/docs/dev-notes/architecture-decomposition-plan.md +189 -0
- cstar_forge-0.3.0/docs/dev-notes/executor-portability-plan.md +183 -0
- cstar_forge-0.3.0/docs/dev-notes/forge-blueprint-inventory.md +267 -0
- cstar_forge-0.3.0/docs/dev-notes/forge-blueprint-parameter-audit.md +478 -0
- cstar_forge-0.3.0/docs/dev-notes/roms-tools-options-integration.md +178 -0
- cstar_forge-0.3.0/docs/developer-guide.md +368 -0
- cstar_forge-0.3.0/docs/domain-generation-overview.md +93 -0
- cstar_forge-0.3.0/docs/forge-blueprint-example.wio-toy.yaml +551 -0
- cstar_forge-0.3.0/docs/installation.md +287 -0
- cstar_forge-0.3.0/docs/machine-config.md +152 -0
- cstar_forge-0.3.0/docs/model-spec-example.ipynb +273 -0
- cstar_forge-0.3.0/docs/model-spec-intro.md +96 -0
- cstar_forge-0.3.0/docs/model-spec-settings.md +79 -0
- cstar_forge-0.3.0/docs/overview.md +98 -0
- cstar_forge-0.3.0/docs/reference-domains.md +10 -0
- cstar_forge-0.3.0/docs/reference-machines.md +16 -0
- cstar_forge-0.3.0/docs/reference-models-yml.md +7 -0
- cstar_forge-0.3.0/docs/reference-roms-marbl-blueprint-settings.md +9 -0
- cstar_forge-0.3.0/docs/reference-roms-marbl-blueprint.md +13 -0
- cstar_forge-0.3.0/docs/releases.md +56 -0
- cstar_forge-0.3.0/docs/roms-tools-contributor-guide.md +130 -0
- cstar_forge-0.3.0/docs/source-data-developer.md +382 -0
- cstar_forge-0.3.0/docs/source-data-example.md +33 -0
- cstar_forge-0.3.0/docs/source-data-intro.md +30 -0
- cstar_forge-0.3.0/environment.yml +65 -0
- cstar_forge-0.3.0/favicon.ico +0 -0
- cstar_forge-0.3.0/legacy/README.md +20 -0
- 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
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_cdr_forcing.yaml +295 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.boundary-bgc.yaml +39 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.boundary-physics.yaml +51 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.river.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.surface-bgc.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.surface-physics.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_forcing.tidal.yaml +33 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_grid.yaml +21 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_4procs/_initial_conditions.yaml +50 -0
- 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
- 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
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_cdr_forcing.yaml +259 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.boundary-bgc.yaml +39 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.boundary-physics.yaml +46 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.river.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.surface-bgc.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.surface-physics.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_forcing.tidal.yaml +33 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_grid.yaml +21 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_Gulf_of_Alaska_sm_8procs/_initial_conditions.yaml +45 -0
- 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
- 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
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.boundary-bgc.yaml +34 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.boundary-physics.yaml +36 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.river.yaml +76 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.surface-bgc.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.surface-physics.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_forcing.tidal.yaml +30 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_grid.yaml +19 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_gulf-guinea-toy_10procs/_initial_conditions.yaml +35 -0
- 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
- 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
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_cdr_forcing.yaml +224 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.boundary-bgc.yaml +38 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.boundary-physics.yaml +42 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.river.yaml +108 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.surface-bgc.yaml +36 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.surface-physics.yaml +36 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_forcing.tidal.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_grid.yaml +21 -0
- cstar_forge-0.3.0/legacy/blueprints/MacOS/cson_roms-marbl_v0.1_test-tiny_1procs/_initial_conditions.yaml +40 -0
- 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
- 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
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.boundary-bgc.yaml +35 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.boundary-physics.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.river.yaml +92 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.surface-bgc.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.surface-physics.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_forcing.tidal.yaml +30 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_grid.yaml +19 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_1120procs/_initial_conditions.yaml +36 -0
- 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
- 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
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.boundary-bgc.yaml +35 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.boundary-physics.yaml +37 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.river.yaml +92 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.surface-bgc.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.surface-physics.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_forcing.tidal.yaml +30 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_grid.yaml +19 -0
- cstar_forge-0.3.0/legacy/blueprints/NERSC_perlmutter/cson_roms-marbl_v0.1_ccs-12km_352procs/_initial_conditions.yaml +36 -0
- 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
- 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
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.boundary-bgc.yaml +34 -0
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.boundary-physics.yaml +36 -0
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.river.yaml +92 -0
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.surface-bgc.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.surface-physics.yaml +32 -0
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_forcing.tidal.yaml +30 -0
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_grid.yaml +19 -0
- cstar_forge-0.3.0/legacy/blueprints/RCAC_anvil/cson_roms-marbl_v0.1_ccs-12km_280procs/_initial_conditions.yaml +35 -0
- 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
- cstar_forge-0.3.0/legacy/legacy_notebook/__init__.py +6 -0
- cstar_forge-0.3.0/legacy/legacy_notebook/compute.py +325 -0
- cstar_forge-0.3.0/legacy/legacy_notebook/nb_engine.py +383 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/benchmark-scaling-plot.ipynb +1024 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/benchmark_scaling.py +152 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/domains-bm-scaling-no-bgc.yaml +144 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/domains-bm-scaling.yaml +144 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14983237.err +14 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14984790.err +240 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14987714.err +0 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14988860.err +88 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14988891.err +90 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14989609.err +48 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/output/logs/benchmark-scaling-14990805.err +42 -0
- cstar_forge-0.3.0/legacy/workflows/computing-benchmarks/run-benchmark-scaling.sh +97 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecBuilder-demo.ipynb +2866 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecEngine-build-all.ipynb +678 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecEngine-build-nested.ipynb +287 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/CStarSpecEngine-build-one.ipynb +381 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/legacy/README.md +9 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecBuilder-demo_RCAC_anvil.ipynb +889 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecBuilder_PAC_nested.ipynb +1936 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecEngine-build-PAC_nesting.ipynb +5760 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/CStarSpecEngine-build-one_RCAC_anvil.ipynb +392 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/RCAC_anvil/PAC_domains-nested.yaml +92 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/CStarSpecBuilder-demo_macos.ipynb +815 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/CStarSpecBuilder_PAC_nested.py +290 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/CStarSpecBuilder_PersianGulf.ipynb +925 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_inner.yaml +24 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_middle_down.yaml +17 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_middle_up.yaml +26 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_outer_down.yaml +17 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/outputs/forge-user/macos/runtime_outer_up.yaml +25 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/templates/domains-nested.yaml +92 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/templates/domains.yaml +102 -0
- cstar_forge-0.3.0/legacy/workflows/generate-models/templates/executed/forge/MacOS/CStarSpecBuilder-demo_MacOS.ipynb +2635 -0
- 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
- cstar_forge-0.3.0/legacy/workflows/skill-assessment/templates/pm_compare-to-glodap.ipynb +1064 -0
- cstar_forge-0.3.0/legacy/workflows/skill-assessment/workflow.yaml +20 -0
- cstar_forge-0.3.0/legacy/workflows/source-data/ensure_glorys.py +172 -0
- cstar_forge-0.3.0/legacy/workflows/source-data/setup.py +9 -0
- cstar_forge-0.3.0/legacy/workflows/visualization/outputs/forge-user/cson-plot.ipynb +167 -0
- cstar_forge-0.3.0/legacy/workflows/visualization/outputs/papermill/pm_movie-maker_cson_roms-marbl_v0.1_ccs-12km_pCO2SURF.ipynb +1966 -0
- cstar_forge-0.3.0/legacy/workflows/visualization/settings.yaml +20 -0
- cstar_forge-0.3.0/legacy/workflows/visualization/templates/pm_movie-maker.ipynb +1443 -0
- cstar_forge-0.3.0/legacy/workflows/visualization/workflow.yaml +22 -0
- cstar_forge-0.3.0/myst.yml +60 -0
- cstar_forge-0.3.0/pixi.lock +15823 -0
- cstar_forge-0.3.0/pyproject.toml +157 -0
- cstar_forge-0.3.0/pytest.ini +18 -0
- cstar_forge-0.3.0/run-wizard-app.sh +22 -0
- cstar_forge-0.3.0/scripts/export-lock-artifacts.py +284 -0
- cstar_forge-0.3.0/scripts/harden-env.sh +162 -0
- cstar_forge-0.3.0/scripts/migrate_opt_to_namelist.py +579 -0
- cstar_forge-0.3.0/scripts/register-kernel.sh +150 -0
- cstar_forge-0.3.0/set-repo-versions.sh +76 -0
- cstar_forge-0.3.0/setup.cfg +4 -0
- cstar_forge-0.3.0/templates/compile-time/cppdefs.opt.j2 +427 -0
- cstar_forge-0.3.0/templates/run-time/marbl_in +276 -0
- cstar_forge-0.3.0/tests/README.md +40 -0
- cstar_forge-0.3.0/tests/__init__.py +1 -0
- cstar_forge-0.3.0/tests/conftest.py +71 -0
- cstar_forge-0.3.0/tests/fixtures/__init__.py +1 -0
- cstar_forge-0.3.0/tests/fixtures/cdr_forcing_sample.yaml +224 -0
- cstar_forge-0.3.0/tests/fixtures/cstar_forge/__init__.py +3 -0
- cstar_forge-0.3.0/tests/fixtures/golden_model_settings_test-tiny.json +313 -0
- cstar_forge-0.3.0/tests/fixtures/golden_namelist_test-tiny.nml +318 -0
- cstar_forge-0.3.0/tests/fixtures/setup.py +8 -0
- cstar_forge-0.3.0/tests/fixtures/test-environment.yml +8 -0
- cstar_forge-0.3.0/tests/test_config.py +660 -0
- cstar_forge-0.3.0/tests/test_core.py +2427 -0
- cstar_forge-0.3.0/tests/test_dev-setup.sh +273 -0
- cstar_forge-0.3.0/tests/test_dev_setup.py +291 -0
- cstar_forge-0.3.0/tests/test_domain_catalog.py +186 -0
- cstar_forge-0.3.0/tests/test_domain_catalog_github.py +79 -0
- cstar_forge-0.3.0/tests/test_forge_app_boundary.py +121 -0
- cstar_forge-0.3.0/tests/test_forge_blueprint.py +2855 -0
- cstar_forge-0.3.0/tests/test_forge_blueprint_wizard.py +1087 -0
- cstar_forge-0.3.0/tests/test_input_data.py +2540 -0
- cstar_forge-0.3.0/tests/test_models.py +211 -0
- cstar_forge-0.3.0/tests/test_models_comprehensive.py +506 -0
- cstar_forge-0.3.0/tests/test_namelist_model.py +284 -0
- cstar_forge-0.3.0/tests/test_parsers.py +282 -0
- cstar_forge-0.3.0/tests/test_roms_tools_coverage.py +222 -0
- cstar_forge-0.3.0/tests/test_settings.py +542 -0
- cstar_forge-0.3.0/tests/test_source_data.py +581 -0
- 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
|