Skip to content

Merge master into dev (test-data cache redesign) - #841

Merged
d-chambers merged 9 commits into
devfrom
merge-master-dev-839
Aug 8, 2026
Merged

Merge master into dev (test-data cache redesign)#841
d-chambers merged 9 commits into
devfrom
merge-master-dev-839

Conversation

@d-chambers

@d-chambers d-chambers commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Description

Routine master → dev sync bringing over the test-data cache redesign (#839) plus the zizmor hardening (#835), action SHA pins (#837), and stable-docs pre-release fixes (#825).

Non-trivial conflict resolutions, since dev's CI had diverged:

  • Workflows (runtests.yml, run_min_dep_tests.yml): kept dev's structure (OS matrix from shared vars, tmate debug flow, qmd doc tests, network-tests job, fail-fast: false) and applied master's cache changes on top — prime-test-data-cache step in the existing setup jobs, workflow-level DFS_DATA_DIR, no more cache-number plumbing, registry path filters, SHA-pinned actions (including dev's previously unpinned tmate/setup-python/setup-node).
  • mamba-install-dascore: kept dev's weekly environment-cache key and python-gil pin; replaced the old export/restore/prime/save block with the shared prime action (dev's restore-keys prefix-reuse idea is superseded — a cold prime is now one ~20 s clone).
  • downloader.py: kept dev's config-driven refactor (get_config().downloader_cache_dir, fetcher proxy, retry support) and dropped its LARGE_REGISTRY_FILES/exclude_large machinery, which existed only to keep the now-deleted whale_1.hdf5 out of fixtures and priming; call sites in test_common_io.py and benchmarks/test_io_benchmarks.py updated. The config-override test now clears DFS_DATA_DIR first, since pooch prefers that env var over the configured path (and CI sets it globally).
  • Dev-only workflows ported to the new cache: test_free_threaded.yml and test_wasm.yml used the deleted priming scripts; both now use the shared prime-test-data-cache action (the WASM suite previously seeded via XDG_CACHE_HOME and a private cache key — it now shares the one cross-OS cache).
  • Deduplicated persist-credentials lines both branches had added independently, and applied zizmor fixes to the dev-only workflows it had never audited.

Please merge with a merge commit (not squash) to preserve the sync history.

Changelog

none

Checklist

I have (if applicable):

  • referenced the GitHub issue this PR closes.
  • documented the new feature with docstrings and/or appropriate doc page.
  • included tests. See testing guidelines.
  • added the "ready_for_review" tag once the PR is ready to be reviewed.

Summary by CodeRabbit

  • New Features

    • Added shared test-data caching across CI workflows to reduce repeated downloads.
    • Enabled trusted publishing for package releases.
    • Added automated security auditing for workflow configurations.
  • Documentation

    • Updated test-data contribution guidance and cache procedures.
    • Improved coordinate tutorial examples and explanations.
  • Bug Fixes

    • Updated test-data handling to include all registry entries consistently.
  • Chores

    • Improved build configuration and dependency maintenance.
    • Strengthened workflow reliability and security through pinned actions and restricted permissions.

d-chambers and others added 7 commits August 4, 2026 21:16
# Conflicts:
#	.github/actions/load-shared-vars/action.yml
#	.github/actions/mamba-install-dascore/action.yml
#	.github/scripts/cache_test_data.py
#	.github/scripts/export_test_data_cache_env.py
#	.github/workflows/build_deploy_stable_docs.yaml
#	.github/workflows/run_min_dep_tests.yml
#	.github/workflows/runtests.yml
#	dascore/utils/downloader.py
#	docs/tutorial/coords.qmd
#	tests/test_utils/test_downloader.py
@d-chambers d-chambers added the ready_for_review PR is ready for review label Aug 8, 2026
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6b1fabb8-6f0f-4db5-8a17-67efd5d28db6

📥 Commits

Reviewing files that changed from the base of the PR and between 62536ca and 7c4f373.

📒 Files selected for processing (2)
  • docs/tutorial/coords.qmd
  • tests/test_utils/test_downloader.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/tutorial/coords.qmd
  • tests/test_utils/test_downloader.py

📝 Walkthrough

Walkthrough

Changes

The pull request centralizes CI test-data caching, replaces shared environment variables with step outputs, pins GitHub Actions, adds workflow auditing, updates registry handling, switches versioning to setuptools_scm, and revises documentation.

CI cache and workflow integration

Layer / File(s) Summary
Shared test-data cache priming
.github/actions/prime-test-data-cache/action.yml, .github/scripts/prime_test_data.py, .github/actions/mamba-install-dascore/action.yml, .github/actions/load-shared-vars/action.yml, .gitignore
A shared action restores or creates the cross-OS cache. The priming script validates registry paths and hashes before copying files.
Workflow cache and output adoption
.github/workflows/*
Workflows use DFS_DATA_DIR, shared-variable outputs, explicit permissions, and the cache action. Manual cache-number handling is removed.
Action pinning and auditing
.github/actions/prep_doc_build/action.yml, .github/dependabot.yml, .pre-commit-config.yaml
Action references are pinned, Dependabot manages monthly updates, and zizmor audits workflows.

Registry and test-data handling

Layer / File(s) Summary
Complete registry retrieval
dascore/utils/downloader.py, dascore/data_registry.txt, benchmarks/*, tests/test_io/test_common_io.py, tests/test_utils/test_downloader.py
Large-file filtering is removed. Registry consumers now process all remaining entries.
Test-data hosting policy
docs/contributing/adding_test_data.qmd, benchmarks/readme.md
The documentation requires DASDAE-hosted test data and describes cache invalidation and reset procedures.

Build and documentation updates

Layer / File(s) Summary
Build backend and version source
pyproject.toml
Build requirements are updated, scikit-build is removed, and dynamic versions use setuptools_scm.
Coordinate tutorial corrections
docs/tutorial/coords.qmd
The tutorial updates coordinate-manager output and coordinate-dropping examples.

Possibly related PRs

Suggested labels: CI, documentation

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the master-to-dev sync and its primary test-data cache redesign change.
Description check ✅ Passed The description explains the sync scope, conflict resolutions, related changes, and completes all checklist items.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch merge-master-dev-839

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added the CI continuous integration label Aug 8, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/tutorial/coords.qmd (1)

53-53: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Restore coverage for CoordString and CoordSegmented.

CoordString and CoordSegmented are implemented coordinat types, but docs/tutorial/coords.qmd does not document them. Add tutorial examples, or remove the classes if these coordinates are no longer part of the public API.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tutorial/coords.qmd` at line 53, Update the “Update” section in
docs/tutorial/coords.qmd to document the public CoordString and CoordSegmented
coordinate types with tutorial examples; only remove those classes instead if
they are intentionally no longer part of the public API.

Source: MCP tools

🧹 Nitpick comments (1)
tests/test_utils/test_downloader.py (1)

33-33: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Add positive coverage for complete registry retrieval.

The deleted test covered only the old exclusion path. Add a test that compares get_registry_df()["name"] with every non-comment entry in dascore/data_registry.txt. This protects the new contract from a future filter regression.

Proposed test
+    def test_dataframe_contains_all_registry_entries(self, registry_df):
+        expected = [
+            line.split(maxsplit=1)[0]
+            for line in REGISTRY_PATH.read_text().splitlines()
+            if line and not line.startswith("#")
+        ]
+        assert registry_df["name"].tolist() == expected
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_utils/test_downloader.py` at line 33, Add a positive test in the
downloader test module that reads every non-comment entry from
dascore/data_registry.txt and asserts it exactly matches
get_registry_df()["name"]. Preserve the registry ordering and exclude only
comment lines when constructing the expected entries, ensuring future filtering
regressions are detected.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/tutorial/coords.qmd`:
- Line 72: Update the comment describing the update step to use “shortening end
time” instead of “shorting end time,” while preserving the rest of the wording.
- Around line 123-144: Update the `snap()` tutorial example to use a fixed,
explicitly unsorted coordinate instead of `np.random.rand(10)`. Assert that the
input is unsorted and that the snapped coordinate is sorted and evenly sampled,
while retaining the min/max preservation assertions.
- Line 11: Update the first link in the tutorial paragraph to display the exact
API name BaseCoord, matching its dascore.core.coords.BaseCoord target and later
references. Before merging, run the API-documentation link validation to ensure
.cross_ref.json contains this target.

---

Outside diff comments:
In `@docs/tutorial/coords.qmd`:
- Line 53: Update the “Update” section in docs/tutorial/coords.qmd to document
the public CoordString and CoordSegmented coordinate types with tutorial
examples; only remove those classes instead if they are intentionally no longer
part of the public API.

---

Nitpick comments:
In `@tests/test_utils/test_downloader.py`:
- Line 33: Add a positive test in the downloader test module that reads every
non-comment entry from dascore/data_registry.txt and asserts it exactly matches
get_registry_df()["name"]. Preserve the registry ordering and exclude only
comment lines when constructing the expected entries, ensuring future filtering
regressions are detected.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6eedcc40-9d5f-49d9-b251-c1abc4fc946d

📥 Commits

Reviewing files that changed from the base of the PR and between 4a26888 and 6590569.

📒 Files selected for processing (29)
  • .github/actions/load-shared-vars/action.yml
  • .github/actions/mamba-install-dascore/action.yml
  • .github/actions/prep_doc_build/action.yml
  • .github/actions/prime-test-data-cache/action.yml
  • .github/dependabot.yml
  • .github/scripts/cache_test_data.py
  • .github/scripts/export_test_data_cache_env.py
  • .github/scripts/prime_test_data.py
  • .github/workflows/build_deploy_master_docs.yaml
  • .github/workflows/build_deploy_stable_docs.yaml
  • .github/workflows/get_coverage.yml
  • .github/workflows/lint.yml
  • .github/workflows/profile.yml
  • .github/workflows/run_min_dep_tests.yml
  • .github/workflows/runtests.yml
  • .github/workflows/test_doc_build.yml
  • .github/workflows/test_free_threaded.yml
  • .github/workflows/test_wasm.yml
  • .github/workflows/upload_pypi.yml
  • .gitignore
  • .pre-commit-config.yaml
  • benchmarks/test_io_benchmarks.py
  • dascore/data_registry.txt
  • dascore/utils/downloader.py
  • docs/contributing/adding_test_data.qmd
  • docs/tutorial/coords.qmd
  • pyproject.toml
  • tests/test_io/test_common_io.py
  • tests/test_utils/test_downloader.py
💤 Files with no reviewable changes (3)
  • dascore/data_registry.txt
  • .github/scripts/export_test_data_cache_env.py
  • .github/scripts/cache_test_data.py

Comment thread docs/tutorial/coords.qmd Outdated
Comment thread docs/tutorial/coords.qmd Outdated
Comment thread docs/tutorial/coords.qmd Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 65905697fc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/tutorial/coords.qmd Outdated
:::

In order to manage coordinate labels and array manipulations, DASCore implements two classes, [`BaseCoord`](`dascore.core.coords.BaseCoord`), which has several associated subclasses corresponding to different types of coordinates, and [CoordManager](`dascore.core.coordmanager.CoordManager`) which manages a group of coordinates. Much like the [`Patch`](`dascore.core.patch.Patch`), instances of both of these classes are immutable (to the extent possible), so they cannot be modified in place but have methods which return new instances.
In order to manage coordinate labels and array manipulations, DASCore implements two classes, [BaseCoordinate](`dascore.core.coords.BaseCoord`), which has several associated subclasses corresponding to different types of coordinates, and [CoordManager](`dascore.core.coordmanager.CoordManager`) which manages a group of coordinates. Much like the [`Patch`](`dascore.core.patch.Patch`), instances of both of these classes are immutable (to the extent possible), so they cannot be modified in place but have methods which return new instances.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve the current coordinate tutorial during the merge

When this lands on dev, the conflict resolution replaces the current tutorial with older master content: this line renames the actual BaseCoord class to the nonexistent BaseCoordinate, while later hunks delete the usage and limitation sections for the still-implemented CoordSegmented and string-coordinate APIs. Preserve the parent tutorial sections so the documentation remains consistent with dascore/core/coords.py and its existing tests.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 7c4f373 — restored the dev tutorial (string + segmented coordinate sections, BaseCoord name) and re-applied the two master-side fixes it lacked. Also purged the stale rerere recording that caused this.

@coderabbitai coderabbitai Bot added the documentation Improvements or additions to documentation label Aug 8, 2026
@codecov

codecov Bot commented Aug 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (4a26888) to head (7c4f373).
⚠️ Report is 1 commits behind head on dev.

Additional details and impacted files
@@            Coverage Diff            @@
##               dev      #841   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          164       164           
  Lines        17948     17950    +2     
=========================================
+ Hits         17948     17950    +2     
Flag Coverage Δ
network 48.50% <100.00%> (-0.02%) ⬇️
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown

✅ Documentation built:
👉 Download
Note: You must be logged in to github and a DASDAE member to access the link.

@d-chambers

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: 62536cae18

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

A stale rerere recording resolved the coords.qmd conflict to older
master content, dropping the string and segmented coordinate sections
and the corrected class name. Restore the dev version and re-apply the
two master-side fixes it lacked (print target and the drop-coordinate
example). The recorded resolution has been forgotten so it cannot
reapply.
@d-chambers

Copy link
Copy Markdown
Contributor Author

Addressed the review round in 7c4f373: the coords.qmd conflict had been auto-resolved from a stale rerere recording to older master content — restored the dev tutorial (covers CoordString/CoordSegmented per the out-of-diff comment) plus the two master-side fixes, and added the suggested positive registry-coverage test.

@d-chambers
d-chambers merged commit 80116a2 into dev Aug 8, 2026
27 checks passed
@d-chambers
d-chambers deleted the merge-master-dev-839 branch August 8, 2026 19:39
@coderabbitai coderabbitai Bot mentioned this pull request Aug 8, 2026
4 tasks
@d-chambers d-chambers removed the ready_for_review PR is ready for review label Aug 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CI continuous integration documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant