Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ This repository contains configuration and driver code for running an end-to-end

## Quickstart

This section provides a recipe for an end-to-end run of Nested EAGLE on Ursa.
This section provides a recipe for an end-to-end run of Nested EAGLE on Ursa. GNU `make` version 3.82 or higher is required.

In the `src/` directory:

**1. Run `make env cudascript=ursa`.**

This step creates the runtime software environment, comprising conda virtual environments to support data prep, training, inference, and verification. The `conda/` subdirectory it creates is self-contained and can be removed and recreated by running the `make env` command again, as long as pipeline steps are not currently running.

Developers who will be modifying Python driver code should replace `make env` with `make devenv`, which will create the same environments but also install additional code-quality tools for formatting, linting, shellchecking, typechecking, and unit testing.
Developers who will be modifying Python driver code should replace `make env` with `make devenv`, which will create the same environments but also install additional code-quality tools for formatting, linting, shellchecking, typechecking, and YAML linting.

**2. Run `make config compose=base:ursa >eagle.yaml` to create the EAGLE YAML config.**

Expand Down Expand Up @@ -256,9 +256,10 @@ After successful completion, the following `make` targets will be available:

``` bash
make format # format Python code
make lint # run the linter on Python code
make shellcheck # run shellcheck on Bash scripts
make typecheck # run the typechecker on Python code
make lint # run a linter on Python code
make shellcheck # run a checker on Bash scripts
make typecheck # run a typechecker on Python code
make yamllint # run a linter on YAML configs
make test # all of the above except formatting
```

Expand Down
9 changes: 7 additions & 2 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ENVS = data inference prewxvx training wxvx
HELPERS = prewxvx vx zarr
PACKAGE = eagle
STEPS = data grids-and-meshes inference prewxvx-global prewxvx-lam training vx-grid-global vx-grid-lam vx-obs-global vx-obs-lam zarr-gfs zarr-hrrr
TOOLING = config devenv env format lint realize shellcheck test typecheck validate
TOOLING = config devenv env format lint realize shellcheck test typecheck validate yamllint

activate = @source conda/etc/profile.d/conda.sh && conda activate $(1)
check = @$(if $(1),,$(error $(2)= argument required))
Expand Down Expand Up @@ -98,7 +98,7 @@ shellcheck:
@echo "=> Checking shell scripts"
@(set -x && shellcheck --format=gcc --severity=info --shell=bash $(BASHSRCS))

test: lint shellcheck typecheck
test: lint shellcheck typecheck yamllint
Copy link
Contributor Author

Choose a reason for hiding this comment

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

make test will now also run make yamllint, though the latter can also be requested independently.


training:
$(call activate,training)
Expand Down Expand Up @@ -146,6 +146,11 @@ vx-obs-global:
vx-obs-lam:
@$(make) vx truth=grid2obs extent=lam

yamllint:
$(call activate,base)
@echo "=> Linting YAML configs"
@(set -x && yamllint --no-warnings config/)

Comment on lines +149 to +153
Copy link
Contributor

@AnilKumar-NOAA AnilKumar-NOAA Mar 5, 2026

Choose a reason for hiding this comment

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

each recipe line runs in a separate shell. conda activate base line won’t affect the later yamllint. meaning yamllint will run in whatever environment Make happens to have.
possible suggestion
yamllint:
@echo "=> Linting YAML configs"
$(call activate,base) && (set -x && yamllint --no-warnings config/)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The .ONESHELL: directive higher in the Makefile ensures that all recipe lines run in the same shell.

Copy link
Contributor

Choose a reason for hiding this comment

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

yes. Thats great!

zarr:
$(call activate,data)
ifeq ($(task),?)
Expand Down
2 changes: 2 additions & 0 deletions src/config/base.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# This is the base EAGLE config. It currently configures the Nested EAGLE case.

# yamllint disable rule:anchors rule:line-length
Copy link
Contributor Author

Choose a reason for hiding this comment

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

When final configs are created by composing multiple YAML files together, it may be that one config contains a YAML alias for which no corresponding anchor is apparently available -- but it will be available after composition.

EAGLE YAML configs may also have long lines.


app:
base: /path/to/eagle/src
experiment_name: default
Expand Down
2 changes: 2 additions & 0 deletions src/config/ursa.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Configuration for the NOAA RDHPCS Ursa platform.

# yamllint disable rule:anchors rule:line-length

app:
gpu:
batchargs: &gpu-batchargs
Expand Down
Loading
Loading