Implemented include releases functionality with query parameter handling - #678
Implemented include releases functionality with query parameter handling#678stijnpotters1 wants to merge 18 commits into
Conversation
…nto feat/include-specific-releases
…d on protected branches and release status
…improved layout handling
…version and actions components
…s for improved mini node creation
There was a problem hiding this comment.
Pull request overview
This PR adds “included releases” filtering to the release graph by introducing a ?range= query parameter (Maven version-range syntax), persisting it through OAuth redirects, and exposing UI affordances to widen the active range from the “skipped versions” modal.
Changes:
- Introduces
release-rangeparsing/serialization + range operations and integrates them into graph filtering. - Adds range state handling in
GraphStateService/AppComponent/ReleaseGraphComponent(URL sync, defaults, reset). - Extends the skipped-versions modal with “include” actions (include whole skipped lines or selected pending versions) and a new pill-button icon.
Reviewed changes
Copilot reviewed 26 out of 27 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/frontend/src/app/services/graph-state.service.ts | Stores release-range state and includes range in graph query params + OAuth temp storage. |
| src/main/frontend/src/app/services/graph-state.service.spec.ts | Tests for range query param + OAuth temp storage behavior. |
| src/main/frontend/src/app/pipes/release-range.ts | New version-range parsing/serialization + range operations (merge, coverage, membership). |
| src/main/frontend/src/app/pipes/release-range.spec.ts | Unit tests for parsing, serialization, and range operations. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/release-skipped-versions.ts | Adds include/pending logic and emits requested ranges to widen the graph range. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/release-skipped-versions.spec.ts | Tests include/pending behaviors and “already included” logic. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/release-skipped-versions.scss | Adds styling for include-related UI (but currently duplicates/unused styling). |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/release-skipped-versions.html | Renders include buttons per version and include-actions footer. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/include-version-button/include-version-button.component.ts | New include button component (included/pending states, click behavior). |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/include-version-button/include-version-button.component.scss | Styles for include version button. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/include-version-button/include-version-button.component.html | Markup for include version button. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/include-actions/include-actions.component.ts | New include-actions footer component for include-all + apply-pending. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/include-actions/include-actions.component.scss | Styles for include-actions footer. |
| src/main/frontend/src/app/pages/release-graph/release-skipped-versions/include-actions/include-actions.component.html | Markup for include-actions footer + range hint text. |
| src/main/frontend/src/app/pages/release-graph/release-node.service.ts | Applies range visibility to branches and master trimming; computes default ranges. |
| src/main/frontend/src/app/pages/release-graph/release-node.service.spec.ts | Adds/updates tests for range filtering and default range computation. |
| src/main/frontend/src/app/pages/release-graph/release-graph.component.ts | Reads/writes range query param, applies default ranges, range error UI, and range reset. |
| src/main/frontend/src/app/pages/release-graph/release-graph.component.spec.ts | Tests URL/default range behavior, rebuild triggers, errors, and reset flow. |
| src/main/frontend/src/app/pages/release-graph/release-graph.component.scss | Styles for range error UI and reset button. |
| src/main/frontend/src/app/pages/release-graph/release-graph.component.html | Adds range error panel and “Default range” pill button; wires range inputs/outputs. |
| src/main/frontend/src/app/pages/header/header.component.ts | Persists range to OAuth temp storage before redirect. |
| src/main/frontend/src/app/pages/header/header.component.spec.ts | Updates header tests for new GraphStateService calls. |
| src/main/frontend/src/app/components/pill-button/pill-button.component.ts | Adds a new list icon type. |
| src/main/frontend/src/app/components/pill-button/pill-button.component.scss | Adds CSS for the new list icon. |
| src/main/frontend/src/app/components/pill-button/icons/list.svg | New list icon SVG asset. |
| src/main/frontend/src/app/app.component.ts | Restores range state after OAuth and syncs range from URL on graph routes. |
| src/main/frontend/cypress/e2e/release-details.cy.ts | Updates E2E assertions to tolerate query params on /graph. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…ed parameter access
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 28 out of 29 changed files in this pull request and generated no new comments.
Suppressed comments (1)
src/main/frontend/src/app/pipes/release-range.ts:230
parseBoundaryonly rejects boundaries wheretoBoundaryKey(...)returns a negative key. For an exclusive lower bound at the maximum allowed version (e.g.(99999,)withMAX_SEGMENT = 99_999),upperKeyOfToken(version) + 1overflows into a bound that exceedsMAX_SEGMENT, effectively creating a range that can include out-of-range versions instead of being treated as empty/invalid.
Consider also rejecting keys that exceed the maximum representable key derived from MAX_SEGMENT so exclusive bounds at the top end correctly fail as “no version at all”.
const key = toBoundaryKey(version, isInclusive, side);
if (key < 0) return failure(entry, 'it holds no version at all');
return { bound: toBound(key) };



Options to include specific releases or the whole batch

When included all releases for example:
