Skip to content

Conversation

@spencer-tb
Copy link
Contributor

🗒️ Description

Note this is a WIP and a draft PR. Optimizes the full fixture release workflow by parallelizing fixture generation across forks. Instead of running separate stable and develop fills sequentially, we now:

  • Phase 1: Generate all pre-allocation groups once --generate-pre-alloc-groups
  • Phase 2: Fill fixtures for each fork in parallel (with multiple workers) using shared pre-alloc groups --use-pre-alloc-groups --fork=X
  • Phase 3: Merge fork outputs into fixtures_stable.tar.gz and fixtures_develop.tar.gz

This reduces duplication since stable fixtures (Frontier -> Prague) are a subset of develop fixtures (Frontier -> BPO4).

Key Changes

Modifies the enginex pre-allocation fill flags:

  • --generate-pre-alloc-groups now runs only Phase 1 (previously ran both phases).
  • --use-pre-alloc-groups --generate-all-formats runs Phase 2 only with all fixture formats.
  • Explicit phase flags take priority over --generate-all-formats.

Adds a new merge fixtures script, used at the end of the new release workflow:

  • Merges per-fork fixture artifacts into combined tarballs
  • Uses existing generate_fixtures_index() for proper index/hash generation
  • Includes pre_alloc groups in output

Creates a new release_fixture_full.yaml workflow, stages below:

  • configure: Determines fork lists dynamically from codebase
  • generate-pre-alloc: Phase 1 job (single runner)
  • fill-fork: Phase 2 matrix job (parallel per fork)
  • merge-fixtures: Phase 3 job (merges into stable/develop)
  • release: Creates GitHub release

Remaining Todos

  • Validate update fill flags, add test cases here.
  • Add tests for a limit on tests, to validate the Phase 1 to Phase 2 steps with a small subset of tests.
  • Add tests for the Phase 2 to Phase 3 section when merging fixture runners, all these tests should run in CI.

🔗 Related Issues or PRs

N/A.

✅ Checklist

  • All: Ran fast tox checks to avoid unnecessary CI fails, see also Code Standards and Enabling Pre-commit Checks:
    uvx tox -e static
  • All: PR title adheres to the repo standard - it will be used as the squash commit message and should start type(scope):.
  • All: Considered adding an entry to CHANGELOG.md.
  • All: Considered updating the online docs in the ./docs/ directory.
  • All: Set appropriate labels for the changes (only maintainers can apply labels).

Cute Animal Picture

Put a link to a cute animal picture inside the parenthesis-->

@spencer-tb spencer-tb added C-feat Category: an improvement or new feature A-ci Area: Continuous Integration labels Dec 10, 2025
@spencer-tb
Copy link
Contributor Author

spencer-tb commented Dec 10, 2025

@spencer-tb
Copy link
Contributor Author

Note this is just a concept for now. After chatting with @danceratopz we both came to the same conclusion seperately that we should have an index file, that splits tests to fill across runners. The suggestion is to use the pytest-split plugin to split tests by worker based on their fill duration. One issue with this approach is that we would lose the fixture file folder structure. TBC.

@SamWilsn SamWilsn changed the base branch from forks/osaka to forks/amsterdam December 17, 2025 05:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-ci Area: Continuous Integration C-feat Category: an improvement or new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants