Skip to content

nextchanges: Attribute stacked-PR fragments to the PR that added them - #6546

Merged
janniklasrose merged 2 commits into
mainfrom
janniklasrose/changelog-preview-gh-stack
Sep 9, 2026
Merged

nextchanges: Attribute stacked-PR fragments to the PR that added them#6546
janniklasrose merged 2 commits into
mainfrom
janniklasrose/changelog-preview-gh-stack

Conversation

@janniklasrose

Copy link
Copy Markdown
Member

Changes

Fix tools/validate_nextchanges.py to attribute each .nextchanges/ fragment
to the PR that actually introduced it, rather than always the current PR.

The changelog-preview check requires every fragment's trailing PR link to name
the current PR. It infers the expected PR from the squash-merge commit subject
((#N)), falling back to the current PR for fragments not yet on main. That
fallback is wrong for a gh-stacked PR: the fragments inherited from earlier
PRs in the stack are added by ordinary branch commits (no (#N) subject), so
they were attributed to the top PR — and CI failed even though each fragment
already carried the correct link to the earlier PR.

Concretely, #6544 (stacked on the
SDK bump #6448) failed with:

.nextchanges/dependency-updates/bump-sdk-0.177.0.md: trailing PR link #6448 must include the PR that added this fragment (#6544)

Fix

A fragment that already exists on the PR's base branch was introduced by an
earlier PR (upstream, or lower in the stack), so it is no longer attributed to
the current PR — it keeps its own link and is only required to be well-formed.
Fragments the PR genuinely adds still must name the current PR, as before.

  • infer_expected_pr returns None (no specific PR imposed) when the fragment
    is present on the base branch (fragment_on_base), instead of falling back to
    the current PR.
  • The base branch is BASE_REF (github.event.pull_request.base.ref) in CI, or
    a best-effort gh lookup locally (detect_base_ref / current_branch_base,
    mirroring the existing PR detection).
  • The changelog-preview workflow now passes BASE_REF to the validate step.

Behavior is unchanged for non-stacked PRs, pushes to main (fragments keep their
(#N) attribution), and the merge queue's shallow checkout (PR-link checks are
already skipped there).

Tests

  • Existing doctests pass (python -m doctest tools/validate_nextchanges.py).
  • Reproduced a two-branch stack in a scratch repo: the old code fails on the
    inherited fragment with the same error as Bump Terraform provider from v1.128.0 to v1.131.0 #6544; with BASE_REF set to the
    base branch it passes. The genuinely-new fragment still requires the top PR's
    link.

This pull request and its description were written by Isaac.

validate_nextchanges.py required every fragment's trailing PR link to name
the current PR. For a gh-stacked PR, the fragments inherited from earlier PRs
in the stack are added by ordinary branch commits (no squash "(#N)" subject),
so they were mis-attributed to the top PR and CI failed even though each
fragment already linked its own PR. For example, #6544 failed because it
carried #6448's SDK-bump fragment: "trailing PR link #6448 must include the
PR that added this fragment (#6544)".

Attribute a fragment to the current PR only when it isn't already present on
the PR's base branch; a fragment inherited from an earlier PR in the stack
keeps its own link and is no longer re-checked against the top PR. The base
branch is BASE_REF (github.event.pull_request.base.ref) in CI, or a
best-effort gh lookup locally.

Co-authored-by: Isaac <no-reply@databricks.com>
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 819d6a5

Run: 34124199473

Env 💚​RECOVERED ✅​pass 🙈​skip Time
💚​ aws linux 1 275 15 9:16
💚​ aws windows 1 277 13 5:54
💚​ azure linux 1 274 15 11:21
💚​ azure windows 1 276 13 8:12
💚​ gcp linux 1 275 15 9:24
💚​ gcp windows 1 277 13 6:53
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
💚​ TestAccept 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
Top 10 slowest tests (at least 2 minutes):
duration env testname
4:03 gcp windows TestAccept
3:55 azure windows TestAccept
3:55 aws linux TestAccept
3:51 gcp linux TestAccept
3:51 azure linux TestAccept
3:45 aws windows TestAccept
3:00 gcp windows TestFilerWorkspaceFilesExtensionsDelete
2:43 azure windows TestFilerWorkspaceFilesExtensionsStat
2:39 aws linux TestFilerWorkspaceFilesExtensionsDelete
2:25 azure windows TestFilerWorkspaceFilesExtensionsReadDir

@denik

denik commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Sometimes there is a reason to include more PRs,

* Some change (#123456, 1234567)

will this script accept this?

@janniklasrose

janniklasrose commented Sep 7, 2026

Copy link
Copy Markdown
Member Author

Sometimes there is a reason to include more PRs,
* Some change (#123456, 1234567)
will this script accept this?

@denik Yes, this is already accepted and this PR simply allows gh stack.

Tested to verify all following (still) scenarios work:

  1. later PR doesn't think it owns earlier PR's fragment
    1. pr-A adds fragment.md with (#pr-A)
    2. pr-B doesn't touch fragment.md
  2. later PR can modify earlier PR's fragment
    1. pr-A adds fragment.md with (#pr-A)
    2. pr-B modifies fragment.md with (#pr-A, #pr-B)
  3. later PR can add fragment for both PRs
    1. pr-A does nothing
    2. pr-B adds fragment.md with (#pr-A, #pr-B)

Comment thread tools/validate_nextchanges.py
@janniklasrose
janniklasrose requested a review from denik September 7, 2026 12:35
Print the error to stderr before returning False so a git tooling failure is
visible in CI logs, matching current_branch_pr / current_branch_base.

Co-authored-by: Isaac <no-reply@databricks.com>
@janniklasrose
janniklasrose added this pull request to the merge queue Sep 9, 2026
Merged via the queue into main with commit 34d3c3b Sep 9, 2026
36 checks passed
@janniklasrose
janniklasrose deleted the janniklasrose/changelog-preview-gh-stack branch September 9, 2026 11:48
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 34d3c3b

Run: 34347662625

Env ❌​FAIL 🟨​KNOWN 🤯​MISS 🙈​SKIP ✅​pass 🙈​skip Time
❌​ aws linux 11 271 1 1245 1015 354:47
❌​ aws windows 6 131 1 1296 1038 346:55
❌​ azure linux 37 1 1 1306 1065 352:18
❌​ azure windows 22 36 1 1194 1086 347:44
❌​ gcp linux 12 80 1 1240 1067 356:15
❌​ gcp windows 8 118 1 1112 1090 347:09
498 interesting tests: 415 MISS, 81 FAIL, 1 KNOWN, 1 SKIP
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
🟨​ TestAccept 🤯​M 🤯​M 🟨​K 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/config_edits 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_fields 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_missing_state 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/json_status_missing_state/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_files 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_json 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_basic 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_multiple 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/target_override 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert 🤯​M 🙈​s ✅​p 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/debug/fetch-repository-info 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/debug/fetch-repository-info/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/debug/fetch-repository-info/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/snapshot-comparison 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/snapshot-comparison/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
❌​ TestAccept/bundle/deploy/spark-jar-task 🤯​M ❌​F ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
❌​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ❌​F ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/alert 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/catalog 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/catalog/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/cluster 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN=1 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=/READPLAN= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN=1 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=/READPLAN= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/experiment 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
❌​ TestAccept/bundle/deployment/bind/pipelines/recreate 🤯​M ✅​p ✅​p ✅​p ✅​p ❌​F
🤯​ TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
❌​ TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ❌​F
🤯​ TestAccept/bundle/deployment/bind/registered-model 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/schema 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/secret-scope 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/secret-scope/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/secret-scope/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/vector_search_endpoint 🤯​M ✅​p ✅​p ✅​p ✅​p ✅​p
Top 50 slowest tests (at least 2 minutes):
duration env testname
28:04 aws windows TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
26:23 aws windows TestAccept/bundle/resources/clusters/deploy/data_security_mode/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
21:45 aws linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
19:22 aws linux TestAccept/bundle/resources/clusters/deploy/simple/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
16:09 gcp windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
16:01 aws windows TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
15:07 aws linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
14:38 aws linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
13:58 gcp linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
13:52 aws linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
13:37 gcp linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
13:29 gcp windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
13:26 aws linux TestAccept/bundle/resources/clusters/deploy/data_security_mode/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
12:50 aws windows TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1
11:49 aws linux TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
10:05 aws linux TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1
9:28 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:22 gcp linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
9:21 azure windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:18 aws windows TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:18 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
9:10 azure windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:08 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:06 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:04 aws linux TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
8:54 aws linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:52 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
8:44 aws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
8:38 aws windows TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
8:37 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
8:36 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
8:31 aws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
8:29 azure linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:27 aws windows TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
8:26 aws windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:22 aws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
8:20 gcp windows TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:14 aws linux TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
8:13 aws windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
8:10 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
8:04 gcp linux TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:55 aws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
7:51 azure windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:51 azure linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:47 aws windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:45 aws linux TestAccept/bundle/resources/clusters/deploy/data_security_mode/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:34 aws linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:31 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1
7:29 azure windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:26 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
(323 table rows omitted to keep the report under 60000 bytes)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants