Skip to content

Commit 8dbbd3c

Browse files
committed
fix(acceptance): reuse published staging candidate and validate scalar outputs
1 parent 112b0cb commit 8dbbd3c

24 files changed

Lines changed: 85 additions & 45 deletions

‎.github/workflows/build.yaml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ jobs:
3434
.venv/bin/python scripts/cwl-docs.py --validate --output acceptance-results/cwl-docs
3535
.venv/bin/python scripts/wrap-pattern.py --output acceptance-results/wrapped
3636
for cwl in acceptance-results/wrapped/*.cwl; do .venv/bin/cwltool --validate "$cwl"; done
37+
- name: Test the processing runner
38+
run: |
39+
cd runner
40+
../.venv/bin/python -m nose2 -v
3741
- name: Start authenticated disposable S3
3842
run: |
3943
printf '%s' '{"identities":[{"name":"test","credentials":[{"accessKey":"test","secretKey":"test"}],"actions":["Admin","Read","Write","List","Tagging"]}]}' > /tmp/s3.json

‎CHANGELOG.md‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
# Changelog
22

3-
## ## [0.3.1] - 2026-10-08
3+
## [2.0.0] - Unreleased
4+
5+
- Use CWL v1.2 and embedded typed input contracts throughout the twelve patterns.
6+
- Compose standalone wrapped applications with eoap-cwlwrap and mastering GHCR staging artifacts.
7+
- Hash-lock the Python 3.12 environment and pin processing images by digest.
8+
- Validate all twelve real-data workflows and four optional-input/output cases, including S3 STAC and raster checks.
9+
- Replace stale practice notebooks with executable examples, typed lesson documentation and diagrams.
10+
- Add acceptance and guarded publication CI for original and wrapped CWL artifacts.
11+
12+
## [0.3.1] - 2026-10-08
413

514
### Fixed
615

‎README.md‎

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,20 @@ spectral band and vegetation index definitions. Existing shared OGC and
131131
GeoJSON schemas remain explicit imports. Metadata and port documentation are
132132
validated by `python scripts/cwl-docs.py --validate --output /tmp/cwl-docs`.
133133

134-
Notebooks use current eoap-cwlwrap/cwl-loader APIs and serialize composed
135-
processes with dump_cwl. Wrapper-introduced URI definitions are embedded in
136-
the resulting document. Diagram rendering uses local Graphviz and displays
137-
PlantUML source. Ordinary box labels avoid Graphviz record-node flat-edge
138-
failures. Python 3.12 or newer is required.
139-
140-
Staging retries incomplete network transfers at most three times, retaining
141-
completed assets; exhausted retries and non-network failures remain errors.
142-
Kubernetes deployment and notebook acceptance tasks are maintained in the
143-
`application-package-patterns` folder of dev-platform-eoap.
134+
The lessons are Markdown pages backed by twelve executable CWL examples. `eoap-cwlwrap` composes each example with the mastering stage-in/out commands; wrapper-introduced URI definitions are embedded in the resulting standalone document. No CWL packing step is used.
135+
136+
Install and validate the release environment:
137+
138+
```bash
139+
uv venv --python 3.12 .venv
140+
uv pip sync --python .venv/bin/python --require-hashes requirements-notebooks.txt
141+
source .venv/bin/activate
142+
task test:contracts
143+
task wrap
144+
```
145+
146+
Run all twelve patterns and four optional-input/output cases against real Landsat and DEM data using the `application-package-patterns` module in [dev-platform-eoap](https://github.com/eoap/dev-platform-eoap). Its `task labs` uses Calrissian on Kubernetes and the deployed SeaweedFS S3 endpoint. For a local Podman runner, configure `PATTERNS_S3_ENDPOINT`, prepare the bucket with `python scripts/prepare-s3.py`, then run `python scripts/run-acceptance.py --runner cwltool`.
147+
148+
The acceptance runner verifies published STAC links, readable raster assets, coordinate reference systems and intersection with the requested area. Pattern 6 returns a scalar normalized-index mean; its acceptance check verifies a finite value within [-1, 1]. Evidence includes execution logs, outputs and scientific checks for each case.
149+
150+
The staging provenance and immutable GHCR image references are recorded in `mastering-staging.lock.json`. Deployment uses GitHub resources and published containers; it requires no sibling host checkout.

‎RELEASE_NOTES.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Application Package Patterns 2.0.0
22

3-
The twelve patterns now expose typed CWL v1.2 contracts with embedded custom definitions. eoap-cwlwrap 0.32.0 composes standalone workflows using the mastering 2.0.0 stage-in and stage-out commands and immutable GHCR container digests. Directory staging no longer injects copies of Python staging scripts.
3+
The twelve patterns now expose typed CWL v1.2 contracts with embedded custom definitions. eoap-cwlwrap 0.32.0 composes standalone workflows using the mastering 2.0.1-rc.44.1 stage-in and stage-out commands and immutable GHCR container digests. Directory staging no longer injects copies of Python staging scripts.
44

55
Real Landsat processing and S3 publication are checked across all twelve patterns and four optional-port cases. Acceptance validates metadata and standalone CWL, verifies returned STAC links and raster assets on authenticated S3, and builds the static Markdown documentation strictly. Dependencies are hash-locked for Python 3.12; AMD64 is the acceptance architecture.
66

‎docs/pattern-1.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ symbols:
176176

177177
## Run the wrapped pattern
178178

179-
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes mastering 2.0.0 staging, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
179+
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes the locked mastering staging artifacts, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
180180

181181
```bash
182182
python scripts/run-acceptance.py --case pattern-1

‎docs/pattern-10.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ symbols:
337337

338338
## Run the wrapped pattern
339339

340-
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes mastering 2.0.0 staging, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
340+
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes the locked mastering staging artifacts, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
341341

342342
```bash
343343
python scripts/run-acceptance.py --case pattern-10

‎docs/pattern-11.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ symbols:
178178

179179
## Run the wrapped pattern
180180

181-
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes mastering 2.0.0 staging, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
181+
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes the locked mastering staging artifacts, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
182182

183183
```bash
184184
python scripts/run-acceptance.py --case pattern-11

‎docs/pattern-12.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ symbols:
347347

348348
## Run the wrapped pattern
349349

350-
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes mastering 2.0.0 staging, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
350+
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes the locked mastering staging artifacts, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
351351

352352
```bash
353353
python scripts/run-acceptance.py --case pattern-12

‎docs/pattern-2.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ symbols:
178178

179179
## Run the wrapped pattern
180180

181-
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes mastering 2.0.0 staging, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
181+
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes the locked mastering staging artifacts, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
182182

183183
```bash
184184
python scripts/run-acceptance.py --case pattern-2

‎docs/pattern-3.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ symbols:
176176

177177
## Run the wrapped pattern
178178

179-
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes mastering 2.0.0 staging, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
179+
The application uses local File/Directory ports. `eoap-cwlwrap` converts these to typed URI references and composes the locked mastering staging artifacts, using immutable GHCR container digests. Configure `PATTERNS_S3_ENDPOINT` for your S3 service.
180180

181181
```bash
182182
python scripts/run-acceptance.py --case pattern-3

0 commit comments

Comments
 (0)