* Added redis database and redis flush worker
* updated digest validation
* adding test coverage for scan_keys function
* adding test coverage
* added tests for scan function
* added coverage for flush to database function
* added coverage for gnuicorn worker initialization
* Replaced mock methods in the test with actual function calls
---------
Co-authored-by: shudeshp <shudeshp@redhat.com>
* ui: Add account settings to the new UI (PROJQUAY-9209)
- avatar functionality
- handle current logged in user avatar
- change pw
- change account type
- enable notifications
- delete account
- CLI config
- use react-hook-form
- fix checkbox state with modal
- fixes user save and lazy loads settings tab
- add e2e tests
- fix other tests failing on CI
* fix(web): address PR review feedback for user settings
- Add success alert and redirect after account conversion
- Fix error handling in ChangeAccountTypeModal
- Remove duplicate account conversion UI from BillingInformation
- Add conditional rendering for CLI auth types in CLIConfiguration
- Fix AlertVariant import in ChangeAccountTypeModal
Co-authored-by: Claude <noreply@anthropic.com>
* feat(web): add account settings link to user dropdown menu
Add a new "Account Settings" menu item to the user dropdown in the
header toolbar, making it easier for users to access their settings.
- Import UserCogIcon for the settings icon
- Add navigation handler for account-settings itemId
- Add Account Settings MenuItem before Logout in Actions menu group
- Navigate to /organization/{username}?tab=Settings when clicked
Co-authored-by: Claude <noreply@anthropic.com>
* fix(web): restore data-testid and fix Quota tab content in Settings
Recent account settings changes (7e864bbc) broke all quota.cy.ts tests by:
1. Removing data-testid attribute from Tab components
2. Using JSX instead of function for Quota tab content
This restores data-testid={tab.name} to enable test selectors and wraps
the Quota content in an arrow function to match other tabs.
Co-authored-by: Claude <noreply@anthropic.com>
---------
Co-authored-by: mfrances <mfrances@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
* ui: Add Manifest Layers tab to Tag Details in new UI (PROJQUAY-9269)
* fix(ui): address feedback for manifest layers feature (PROJQUAY-9269)
- Accessibility: Add ARIA labels and semantic HTML to layer components
- Error handling: Display error state when manifest fetch fails
- Performance: Memoize layer reversal operation
- Fix typo in UseImageSize variable name
- Improve React key generation to avoid undefined keys
- Remove redundant key prop in LabelsReadOnly
- Add missing dependency to useEffect in TagDetails
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Brady Pratt <bpratt@redhat.com>
* fix(ui): prevent security state reset on URL param changes (PROJQUAY-9269)
Split useEffect into two separate effects to avoid clearing cached security
data when URL parameters change. Previously, adding a digest parameter (e.g.,
clicking vulnerability counts) would trigger a full state reset, causing the
Security Report and Packages tabs to show loading spinners indefinitely.
Now security state only resets when navigating to a different tag (org/repo/tag
changes), not when URL search params change. This preserves cached security
data when switching between tabs with URL parameters.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Brady Pratt <bpratt@redhat.com>
* fix(ui): ensure unique keys for layers with duplicate blob digests (PROJQUAY-9269)
Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Brady Pratt <bpratt@redhat.com>
---------
Signed-off-by: Brady Pratt <bpratt@redhat.com>
Co-authored-by: mfrances <mfrances@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
Add visual indicator for Cosign-signed tags in React UI to match
Angular UI functionality. Tags signed with Cosign now display a
shield icon next to the tag name with a tooltip.
Implementation:
- Add cosign_signature_tag fields to Tag interface
- Create client-side Cosign signature detection utilities
- Scan tags for pattern sha256-[digest].sig and map to signed manifests
- Display PatternFly shield icon inline with signed tags
- Add Cypress test for icon visibility
Signed-off-by: Brady Pratt <bpratt@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
* Add ngnix routing logic to default to react UI for downstream
* Remove defaulting from env, update Makefile to build react by default for local
* Add cypress test for signin and create account workflow
* Add missing routes + fallback to backend server
* Hide UI toggle when defaulting to new UI
* Adds forgot password + recovery email, recaptcha, missing login checks
* Add external login screen + support for other login types for new UI
* Add new screen for update user after external login
* Add authorized apps section under external logins tab
* Implement updateuser react component + fix cypress test
* Fix external login OAuth flow for react
* switch logic to default to new ui
* Add DEFAULT_UI: angular to config for cypress CI
* Fix cypress tests for oauth-callback
* Rebase and fix merge conflicts
---------
Signed-off-by: harishsurf <hgovinda@redhat.com>
* ui: fix Popper positioning in FilterInput advanced search (PROJQUAY-9272)
The advanced search panel with "Use regular expressions" checkbox was not
appearing in the correct position. The Popper component was being appended
to the SearchInput element itself, causing CSS positioning issues where the
panel would overlay on top of the search input instead of appearing below it.
Fixed by implementing the containerRef pattern (matching Menu.tsx):
- Added containerRef to wrap SearchInput and Popper in a container div
- Changed appendTo from querySelector to containerRef.current
- Simplified Popper props to minimal working set (triggerRef, popper,
isVisible, appendTo)
- Removed invalid props for PatternFly 5 Popper API
The panel now correctly appears below the advanced search button and the
checkbox toggles regex mode as expected.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Brady Pratt <bpratt@redhat.com>
* Revert "ui: mark regex search test as skipped (PROJQUAY-9272) (#4342)"
This reverts commit c725d025e3.
* feat(ui): show empty on empty results
when filtering in non-regex mode - using a special character that
doesn't match anything causes the no repos available (permissions) page
to show. Instead, show the search bar with empty results
Signed-off-by: Brady Pratt <bpratt@redhat.com>
---------
Signed-off-by: Brady Pratt <bpratt@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
this adds functionality to filter out cosign signature tags (.sig),
SBOM tags (.sbom), and attestation tags (.att) from the tags list.
users can toggle visibility with a button in the toolbar, matching
the behavior from the angular UI. when repositories contain many tags
with signatures (1K+), this prevents UI cluttering by hiding signature
artifacts by default.
implementation:
- added showSignaturesState recoil atom to track toggle state
- added isCosignSignatureTag() utility to detect signature patterns
- added "Show/Hide Signatures" button to tags toolbar
- signature tags are hidden by default (showSignatures: false)
- filter applied before pagination and sorting
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Signed-off-by: Brady Pratt <bpratt@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
set the REGISTRY_TITLE if available, default to `Quay` otherwise. Update
it to match in both the signin and root pages
Signed-off-by: Brady Pratt <bpratt@redhat.com>
consolidates UseCreateOrganization and UseDeleteOrganizations into
UseOrganizations to eliminate duplicate code and ensure consistent
query cache invalidation. previously, newly created/deleted orgs
didn't appear in the UI because invalidation keys didn't match the
query keys used to fetch data.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Signed-off-by: Brady Pratt <bpratt@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
* web: make team name clickable in Teams View (PROJQUAY-9347)
users can now click team name to navigate to team management page
where team description can be edited, matching old Angular UI behavior
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Brady Pratt <bpratt@redhat.com>
* web: show team desc if no members (PROJQUAY-9347)
allow setting the team description even if there are no members yet
Signed-off-by: Brady Pratt <bpratt@redhat.com>
---------
Signed-off-by: Brady Pratt <bpratt@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
* abstracted quay table and hook, added sort to repo, org, tags tables
* security report and usage logs tables
* robot acct list and permissions tables
* default permissions and member view tables
* team view and build history tables
* notification and packages tables
* collaborators manage members and tag history tables
* sort numerically
* fix last accessed sort
* display teams tables correctly
* fix teams badge sort in members table
* collaborators table fix
* fix tests
This PR adds the OAuth application workflow to the new Quay UI.
All UI components and functionality that existed in the legacy UI should now be working in the new React-based UI with Patternfly 5. Also added a full test suite for the OAuth application functionality.
* Update cipher-base to version 1.0.6
* update web package-lock.json
---------
Co-authored-by: Antonio Carlos Royo <aroyo@aroyo-thinkpadp1gen7.rmtco.csb>
* ui: add retry logic for user api to prevent infinite api call (PROJQUAY-9124)
* use <LoadingPage> component when loading <PluginMain>
* Make fetching token async to avoid race condition leading to infinte API call
* Revert "ui: add retry logic for user api to prevent infinite api call (PROJQUAY-9124)"
Signed-off-by: harishsurf <hgovinda@redhat.com>
This reverts commit 5f0b79a643.
---------
Signed-off-by: harishsurf <hgovinda@redhat.com>
* oauth: Fallback to depricated_sub when sub has new value (PROJQUAY-9124)
Signed-off-by: harishsurf <hgovinda@redhat.com>
* Add test for rhsso backward compatability for deprecated_sub
* Address review comments
* Fix circular import
* Add additional tests for codecov
---------
Signed-off-by: harishsurf <hgovinda@redhat.com>
* ui: add banner for console.redhat.com for SSO issue (PROJQUAY-9124)
* Add error handling when user is undefined
---------
Signed-off-by: harishsurf <hgovinda@redhat.com>
This adds react code and patternfly components to handle Mirroring in the new Quay UI. Functionality should be equivalent to the old Angular code, and new test suite is passing locally. Added the react-hook-form library to simplify and reduce redundant form code. Also added the new Skopeo timeout interval field.
Instead of displaying loading screen while waiting for repository list to load, display the list immediately and load the repositories in the background so the list is immediately usable.
* mirror: Add job timeout to mirror configurations (PROJQUAY-7249)
Previous global job timeout of 5 minutes was inadequate for big images. The timeout should now be configurable in much the same way as sync is. Minimum job length is 300 seconds/5 minutes.
The PR is still work in progress.
* Fix init db, remove reference to user data in logs
* Fix tests, change repo mirror configuration
* Fix tests, make mirroring cancellable through UI
* Add cancel mirror test, change HTML document to reflect mirror timeout
* Flake8 doesn't like when '==' is used with 'None'
* Fix mirror registry tests
* Add new cypress data to fix cypress tests
* Added ability to define upload chunk size to RADOS driver, small changes to repo mirror HTML page
* Fix database migration to follow HEAD
* Upload new database data for Cypress tests
* Make skopeo_timeout_interval mandatory on API calls
---------
Co-authored-by: Ivan Bazulic <ibazulic@redhat.com>
This adds react code and patternfly components to handle notifications in the new Quay UI, and display them using a notification drawer and header badge.
projquay-8633 accepting dates in DD MMM YYYY format + calendar button is visible + fixing alignment across entire toolbox + improved logic for consistency across different browser language settings
* ui: implement change to render modelcard stored in layers (PROJQUAY-8412)
When a manifest has certain annotations or artifactTypes, render the
applicable modelcard markdown in a new tags detail tab.
* removing untar when fetching model card
* removing extra api calls
* Add modelcar check tests
---------
Co-authored-by: bcaton <bcaton@redhat.com>
* marketplace: splittable sku for MW02702 (PROJQUAY-8151)
* Alembic migration to drop unique constraint on the orgrhsubscriptions
table
* Can split sub quantities of MW02702 across multiple orgs
* Can specify quantity for the MW02702 SKU across orgs on react UI
* Update angular UI to allow user to specify quantities for MW02702
There's a flake in the web/cypress/e2e/repository-permissions.cy.ts test where it is intermittently unable to type in the "Search for user, add/create robot account" search dropdown which occasionally fails the test. Since updating cypress the test fails consistently. This changes waits and clicks on the input allowing the type to complete and the dropdown to populate.
* ui: update regex pattern in helpertext for team name(PROJQUAY-8110)
Signed-off-by: harishsurf <hgovinda@redhat.com>
* old ui: update regex pattern for validating team name
---------
Signed-off-by: harishsurf <hgovinda@redhat.com>