feat(WD-33199): Apply design to Releases form UI#313
feat(WD-33199): Apply design to Releases form UI#313immortalcodes wants to merge 6 commits intoreleases-manager-feature-branchfrom
Conversation
…es, remove unused components
…eep cloning and equality checks
There was a problem hiding this comment.
Pull request overview
Implements a new Releases manager experience in the web UI (tabbed “Update releases” / “Update checksums” views with shared layout/status bar) and adds corresponding backend endpoints/services to fetch, merge, and submit releases.yaml updates via the GitHub API.
Changes:
- Adds a new Releases UI shell + routes, including checksum CRUD UX and a shared status bar.
- Introduces backend Releases services (GitHub client + YAML parser/merger) and new
/api/get-releases+/api/update-releasesendpoints. - Expands CI and tests (Python test job + new unit tests) and updates tooling/dependencies (ruamel.yaml, Python 3.12).
Reviewed changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| webapp/tests/test_releases_manager.py | Adds unit tests for releases YAML parsing and GitHub client/service behavior. |
| webapp/tests/test_gdrive.py | Adjusts gdrive init test to monkeypatch service build failure. |
| webapp/tests/conftest.py | Adds DB/session fixtures for Python tests. |
| webapp/schemas.py | Adds request schema for update-releases API. |
| webapp/routes/releases.py | Adds API routes to fetch and update releases data. |
| webapp/releases_manager.py | Implements YAML parsing/merging + GitHub workflow to create branch/PR and commit updates. |
| webapp/github.py | Refactors GitHub API layer into a shared base + separate repository vs releases APIs. |
| webapp/app.py | Registers the new releases blueprint. |
| webapp/init.py | Tweaks Flask JSON sorting behavior and dev logging level. |
| static/client/store/types.ts | Adds panel state for the checksum side panel. |
| static/client/store/app.ts | Implements toggle handler for the checksum side panel. |
| static/client/services/api/types/releases.ts | Defines TS types/guards for releases payloads and tagged YAML fields. |
| static/client/services/api/services/releases.ts | Adds client service functions for releases API calls. |
| static/client/services/api/partials/ReleasesApiClass.ts | Adds API class for releases endpoints. |
| static/client/services/api/index.ts | Wires ReleasesApiClass into the API client. |
| static/client/services/api/hooks/releases.ts | Adds a react-query hook to fetch releases data. |
| static/client/services/api/constants.ts | Adds releases endpoint constants. |
| static/client/pages/Releases/utils.ts | Adds deep-clone + deep-equality helpers and label formatting. |
| static/client/pages/Releases/UpdateReleasesPage.tsx | Renders the releases field editor view. |
| static/client/pages/Releases/UpdateChecksumsPage.tsx | Renders checksum categories, edit/add panel, and status-bar integration. |
| static/client/pages/Releases/ReleasesLayout.tsx | Adds shared layout with secondary nav + status bar + outlet context. |
| static/client/pages/Releases/index.ts | Exports Releases layout entrypoint. |
| static/client/pages/Releases/hooks/useReleaseFormState.ts | Adds form state, dirty tracking, checksum CRUD, and submit logic. |
| static/client/pages/Releases/components/TaggedFieldInput.tsx | Adds UI for editing custom-tagged YAML scalars/mappings. |
| static/client/pages/Releases/components/ReleasesStatusBar.tsx | Adds sticky status bar with PR/demo links and submit/add actions. |
| static/client/pages/Releases/components/ReleasesSecondaryNav.tsx | Adds tab-style secondary navigation for releases pages. |
| static/client/pages/Releases/components/ReleaseField.tsx | Adds standardized label+input row with dirty highlighting and tag support. |
| static/client/pages/Releases/components/ChecksumCategoryTable.tsx | Adds accordion/table UI for checksum categories. |
| static/client/pages/Releases/components/AddChecksumPanel.tsx | Adds side panel to add/edit checksum entries. |
| static/client/pages/Releases/_ReleasesLayout.scss | Adds layout/status bar/accordion styling for Releases pages. |
| static/client/pages/Releases/_ReleaseForm.scss | Adds form field styling and dirty-state visuals. |
| static/client/pages/Main/Main.tsx | Adds /app/releases/* routes to the router. |
| static/client/components/Navigation/Navigation.tsx | Adds “Releases” entry to side navigation and collapses nav on releases pages. |
| static/client/components/MainLayout/MainLayout.tsx | Adds showSearch toggle used by Releases layout. |
| static/client/App.scss | Imports releases SCSS and includes additional icon mixins. |
| requirements.txt | Adds ruamel.yaml dependency. |
| pyproject.toml | Bumps required Python version to >= 3.12. |
| package.json | Splits test scripts into test-js and test-python. |
| .github/workflows/CI.yml | Splits CI tests into separate JS and Python jobs (adds postgres service). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // Register the "Add checksum" handler so the status bar can trigger it | ||
| useEffect(() => { | ||
| registerAddChecksum(handleOpenAdd); | ||
| return () => registerAddChecksum(null); | ||
| }); |
There was a problem hiding this comment.
This effect runs on every render (no dependency array) and its cleanup runs before the next effect, so it will repeatedly register/unregister the callback and can cause a render loop in the parent (hasAddChecksum flips false/true). Add an appropriate dependency array so registration only happens when registerAddChecksum/handleOpenAdd change, and keep the cleanup only for unmount.
…ng and maintainability
Done
Applies the Figma design to the Releases manager form UI, refactoring layout and improving UX across the Releases management pages.
ReleasesLayout(shared shell) and separateUpdateReleasesPage/UpdateChecksumsPageroute pagesReleasesSecondaryNavfor tab-style navigation between the two pagesReleasesStatusBarwith dirty-field count, Save and Reset actions, and an "Add checksum" button surfaced from the child pageReleaseFieldcomponent — label + input row with consistent grid layout and icon supportChecksumCategoryTableandAddChecksumPanelcomponents for checksum management with inline add/remove UXTaggedFieldInputcomponent — multi-value chip input for tagged fields_ReleasesLayout.scss,_ReleaseForm.scss) replacing inline styles; grid-based two-column layout matching the Figma specuseReleaseFormStatehook extracted to manage dirty tracking, field/checksum CRUD, and submit logicQA
http://localhost:8104/appFixes