* feat(ui): add repository activity heatmap (PROJQUAY-9353)
Implements an activity heatmap showing last 90 days of repository
pull/push activity to match feature available in Angular UI.
Features:
- Continuous week-by-week calendar grid layout
- Smart month labels (Aug, Sep, Oct) with spacing optimization
- Day labels (Mon, Wed, Fri) positioned clearly
- 5-level color scaling from gray (no activity) to dark blue (high activity)
- Interactive tooltips with date and action counts
- Full-width responsive design
- PatternFly design system integration
- ARIA labels for accessibility
Technical implementation:
- Custom React component using SVG rendering
- API integration with includeStats=true endpoint
- Color-coded cells based on activity intensity
- Tooltip with high contrast for dark/light mode support
Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Brady Pratt <bpratt@redhat.com>
* fix(test): resolve builds.cy.ts failures from includeStats param change (PROJQUAY-9353)
Fixed 21 failing Cypress tests in builds.cy.ts caused by two issues:
1. Updated all repository detail API intercepts to use includeStats=true
instead of includeStats=false to match the actual API call changed
in the heatmap feature implementation
2. Added optional chaining to error.response?.status in ErrorHandling.ts
to prevent null reference errors when error.response is undefined
All 27 tests now pass (previously 6 passing, 21 failing).
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: Claude <noreply@anthropic.com>
* feat(ui): add Information tab as default for repository view (PROJQUAY-9556)
Adds a new Information tab to the repository details page that displays:
- Repository description (editable for users with write permissions)
- Pull commands (podman and docker)
- Repository activity placeholder (to be implemented later)
The Information tab now appears first and is the default tab when viewing
a repository, replacing Tags as the default. This matches the behavior of
the old Angular UI and provides users with essential repository information
upfront.
Updated existing Cypress tests to navigate to the Tags tab explicitly where
needed, and added new tests to verify the Information tab is the default.
Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Brady Pratt <bpratt@redhat.com>
* feat(ui): add markdown rendering for repository descriptions (PROJQUAY-9556)
Repository descriptions now support markdown formatting including:
- GitHub Flavored Markdown (headings, lists, links, etc.)
- Code blocks with syntax highlighting and copy-to-clipboard functionality
- Tables styled with PatternFly components
- Inline code formatting
This restores markdown capability that existed in the legacy UI and uses
the same react-markdown implementation pattern as ModelCard. The edit
mode now indicates markdown support to guide users.
Co-authored-by: Claude <noreply@anthropic.com>
* refactor(ui): use PatternFly design tokens for markdown styling (PROJQUAY-9556)
Replaces hardcoded inline styles with CSS classes using PatternFly design
tokens for better consistency with the design system:
- Inline code: Uses global BackgroundColor, spacer, BorderRadius, and
FontFamily tokens
- Table cells: Uses global BorderColor and spacer tokens
This improves theme consistency and makes the styling more maintainable
by leveraging the PatternFly design system instead of magic values.
Also adds TypeScript types to MarkdownCodeBlock event handlers for better
type safety.
Co-authored-by: Claude <noreply@anthropic.com>
* clean up additional tests
Signed-off-by: Brady Pratt <bpratt@redhat.com>
---------
Signed-off-by: Brady Pratt <bpratt@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
* 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>
* 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>
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>
* 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>
* logs: Audit export logs requests (PROJQUAY-7679))
We add the ability to audit export logs requests that were previously not tracked.
* Add UI elements to properly render new audit log
* Truncate date/time column on exterme zooms
* Add initdb.py entries
* Fix migration and add test db data
* Add test database and fix migration paths
* Changed logging mechanism to grab raised exceptions
* Fix improper import
* Add date/time timestamp to saved metadata
* Change message on export logs screen in UI
* Changed message in old UI as well
* Change log description in new UI too
* Simplify call logic and add additonal information to logged errors
Previous assumption made use of the config media type only, which is not the case
if a manifest's artifact type is explicitly set. i.e the config's media type and
artifact type are different, and the artifact type take precedence for filtering.
* resolving conflicts
* database: adding subject_backfilled index to manifest table (PROJQUAY-7360) (#2963)
adding subject_backfilled index to manifest table
* adding index to last_ran_ms and updating alembic head
* minor fixes
* updating cypress data
---------
Co-authored-by: Brandon Caton <bcaton@redhat.com>
* registry: implements the OCI 1.1 referrers API
Migrations:
- Adds a subject column for lookup
- Adds a subject_backfilled column to track status of the backfilling
of existing manifests
- Adds a manifest_json column making use of postgres' JSONB support,
for future use.
Manifestsubjectbackfillworker: Indexes existing manifests for possible
existing subject field.
* Deprecate IGNORE_UNKNOWN_MEDIATYPES
* Cleanup
* feat: Add support for auto pruning at repository level (PROJQUAY-6354)
* Add repositoryautoprunepolicy table to alembic migration script
* Add repository auto-prune policy endpoints
* Add UI for repository auto-pruning policies
* case: apply repo auto-prune policy when no namespace policy given
* case: both namespace and repo pruning policy are given
* Add tests for repository autoprune endpoint
* Add cypress test for repository auto-prune
* Add repo auto-prune policy clean-up for repository deletion
* Add repository auto pruning tables to quay db snapshot for cypress tests
* Address review comments
* Add more tests + fix CI + reformat files
* Address review comments #2
---------
Signed-off-by: harishsurf <hgovinda@redhat.com>
* Adds handling for when a subscription returned from the subscription watch api has a quantity greater than 1. Number of private repos should be correctly calculated using the quantity.
* Updates ui so that subscriptions can only be added to an org as a group, i.e. a subscription with quantity = 2 cannot be split across organizations.
Adds the table to view configured build triggers for a repository. Includes enabling/disabling, deletion, viewing credentials, and notifying of automatically disabled triggers.
* ui: breadcrumbs fix when org and repo names are identical (PROJQUAY-6504)
* eslint fix
* add tests for team name identical to org and repo name
* format fix
* revert db inserts for queueitem and log table
* ui: fix tab visibility for teams and membership (PROJQUAY-6333)
* Add readonly checks when user doesn't have sufficient permissions
* Add test for non-admin user of a team
---------
Signed-off-by: harishsurf <hgovinda@redhat.com>
* add migration for orgrhskus table
* add endpoints for managing and listing skus bound to an org
* create checks in billing flow to look for org-bound skus
* refactor RH marketplace api objects to be more usable in tests
* update cypress test db data and exclude it from pre-commit hook formatting
Allows superusers to trigger a calculation of the deduplicated registry size. A superuser can go to the organization panel of the superuser page and select Calculate to queue a calculation of the registry total. The total will only be calculated when requested. Includes warning to user of increase of database load when running calculation.
* ui: Merge quay-ui into quay (PROJQUAY-5315)
Merging the new patternfly UI into the monorepo quay.
Any future changes will need to be opened on the quay repo