feat(scorecard): add support for the New Frontend System (NFS)#2487
feat(scorecard): add support for the New Frontend System (NFS)#2487rohitratannagar wants to merge 61 commits intoredhat-developer:mainfrom
Conversation
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Review Summary by QodoAdd New Frontend System (NFS) support to scorecard plugin
WalkthroughsDescription• Add New Frontend System (NFS) support to scorecard plugin • Create app-next package with NFS-based Backstage application • Implement scorecard catalog module with configurable entity kinds • Add scorecard translations module for internationalization support Diagramflowchart LR
A["scorecard plugin"] -->|"exports alpha API"| B["alpha.tsx"]
B -->|"provides"| C["scorecardApi"]
B -->|"provides"| D["createScorecardCatalogModule"]
B -->|"provides"| E["scorecardTranslationsModule"]
F["app-next package"] -->|"imports"| B
F -->|"creates app with"| C
F -->|"creates app with"| D
F -->|"creates app with"| E
File Changes1. workspaces/scorecard/packages/app-next/public/index.html
|
Changed Packages
|
Code Review by Qodo
1.
|
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
| const filter = | ||
| options?.entityKinds?.length && | ||
| `kind:${options.entityKinds.map(k => k.toLowerCase()).join(',')}`; | ||
| return EntityContentBlueprint.make({ | ||
| name: 'scorecard', | ||
| params: { | ||
| ...defaultScorecardEntityContentParams, | ||
| ...(filter && { filter }), | ||
| }, |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
|
/cc @rohitkrai03 |
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
66d63f5 to
22e3a7c
Compare
…l formatting (redhat-developer#2400) * feat(mcp-integrations): align mcp-integrations with upstream MCP tool formatting Signed-off-by: John Collier <jcollier@redhat.com> * Add changeset Signed-off-by: John Collier <jcollier@redhat.com> * Clean up Signed-off-by: John Collier <jcollier@redhat.com> * yarn.lock + app-config cleanup Signed-off-by: John Collier <jcollier@redhat.com> --------- Signed-off-by: John Collier <jcollier@redhat.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…#2404) Signed-off-by: Kim Tsao <ktsao@redhat.com>
* feat(translations): added i18n cli tools
Signed-off-by: Yi Cai <yicai@redhat.com>
* fixed bugs
Signed-off-by: Yi Cai <yicai@redhat.com>
* feat(translations-cli): add download and deploy commands with multi-repo support
- Add download command to fetch completed translations from Memsource
- Support downloading all completed jobs or specific job IDs
- Support filtering by languages
- Auto-detects repo type and filters files accordingly
- Add deploy command to deploy translations to TypeScript files
- Universal deployment script supporting rhdh-plugins, community-plugins, and rhdh
- Auto-detects repository structure and plugin locations
- Handles different file naming conventions ({lang}.ts vs {plugin}-{lang}.ts)
- Correctly handles import paths (./ref, ./translations, external @backstage packages)
- Updates existing files and creates new translation files
- Automatically updates index.ts files to register translations
- Add comprehensive documentation
- Complete workflow guide for download and deployment
- Multi-repo deployment documentation
- Step-by-step instructions for all three repositories
- Update yarn.lock with latest dependencies
* fix(translations-cli): resolve SonarQube security and code quality issues
- Replace execSync with safe spawnSync to prevent command injection
- Create safeExecSync, commandExists, and safeExecSyncOrThrow utilities
- Use separate command and args arrays for safer execution
- Cross-platform support (Windows/Unix) for command existence checks
- Applied to upload, download, deploy, and config commands
- Remove code duplication to improve maintainability
- Extract key counting logic to countTranslationKeys() utility
- Extract download command args to buildDownloadJobArgs() helper
- Extract job listing args to buildListJobsArgs() helper
- Extract job download logic to downloadJob() helper function
- Fix regex operator precedence in PO file parsing
- Group alternation explicitly: /(^["']|["']$)/g
- Makes operator precedence clear for SonarQube compliance
- Applied to 3 locations in loadFile.ts
All changes are refactoring only - no functional changes to workflow.
Build and lint checks pass successfully.
* fix SonarQube issue p1
Signed-off-by: Yi Cai <yicai@redhat.com>
* updated the workflow to address comments
Signed-off-by: Yi Cai <yicai@redhat.com>
* chore: update yarn.lock to sync with package.json
* resolve failed ci checks
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolve failed ci checks
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolve failed ci checks
Signed-off-by: Yi Cai <yicai@redhat.com>
* yarn dedupe
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolve failed ci checks
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved sonarCloud issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved sonarCloud issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved sonarCloud issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved security hotspots issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved security hotspots issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved security hotspots issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved security hotspots issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved security hotspots issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* resolved security hotspots issues
Signed-off-by: Yi Cai <yicai@redhat.com>
* code cleanup
Signed-off-by: Yi Cai <yicai@redhat.com>
* improvements
Signed-off-by: Yi Cai <yicai@redhat.com>
* updated deploy command to copy translation to BCP
Signed-off-by: Yi Cai <yicai@redhat.com>
* fixed sonarQube issue
Signed-off-by: Yi Cai <yicai@redhat.com>
* fixed failed CI check
Signed-off-by: Yi Cai <yicai@redhat.com>
* code cleanup
Signed-off-by: Yi Cai <yicai@redhat.com>
* fixed tsc issue
Signed-off-by: Yi Cai <yicai@redhat.com>
* added red hat plugin filter to generate command
Signed-off-by: Yi Cai <yicai@redhat.com>
* fixed tsc:full errors
Signed-off-by: Yi Cai <yicai@redhat.com>
* addressed review comments
Signed-off-by: Yi Cai <yicai@redhat.com>
* yarn dedupe and rebase
Signed-off-by: Yi Cai <yicai@redhat.com>
---------
Signed-off-by: Yi Cai <yicai@redhat.com>
…he rhdh translations-cli (redhat-developer#2414) * chore(translations): add changeset to release an initial version of the rhdh translations-cli Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com> * chore(translations): removed unused axios dependency Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com> * chore(translations): release cli independ from plugin Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com> --------- Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…redhat-developer#2394) * feat(x2a): Introducing projects by groups. Additional RBAC hardening. - require x2a permissions to access the UI - enforce better the x2a permissions on the endpoints - projects can be optionally owned by a Backstage group, still defaults to the logged-in user Signed-off-by: Marek Libra <marek.libra@gmail.com> * review --------- Signed-off-by: Marek Libra <marek.libra@gmail.com>
…edhat-developer#2371) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: JessicaJHee <73968480+JessicaJHee@users.noreply.github.com>
* migrate dry-run action Signed-off-by: Stephanie <yangcao@redhat.com> * add changeset Signed-off-by: Stephanie <yangcao@redhat.com> * update yarn.loc Signed-off-by: Stephanie <yangcao@redhat.com> --------- Signed-off-by: Stephanie <yangcao@redhat.com>
…r#2424) * migrate to use scaffolderClient instead Signed-off-by: Stephanie <yangcao@redhat.com> * add changeset Signed-off-by: Stephanie <yangcao@redhat.com> --------- Signed-off-by: Stephanie <yangcao@redhat.com>
… layout (no localeSkip in app-legacy) Made-with: Cursor
39eff40 to
8096358
Compare
Made-with: Cursor
8096358 to
5a68d7b
Compare
|
| import { githubAuthApiRef, gitlabAuthApiRef } from '@backstage/core-plugin-api'; | ||
| import { getThemes } from '@red-hat-developer-hub/backstage-plugin-theme'; | ||
| import { ScorecardHomepageCard } from '@red-hat-developer-hub/backstage-plugin-scorecard'; | ||
| import scorecardPlugin, { |
There was a problem hiding this comment.
no need to import the scorecardPlugin
set
app:
title: Homepage Backstage App
baseUrl: http://localhost:3000
**packages: all**
in your app-config.yaml, this will load all the plugins automatically
| * Custom sign-in page (legacy component). SignInPageBlueprint and ThemeBlueprint | ||
| * are deprecated; sign-in and themes are provided via convertLegacyAppOptions. | ||
| */ | ||
| const customSignInPage = (props: React.ComponentProps<typeof SignInPage>) => ( |
There was a problem hiding this comment.
you should be able to create a Signin module with the SigninPageComponent and use the module in the app plugin.
Ref: https://github.com/redhat-developer/rhdh-plugins/pull/2423/changes#diff-f515cdc8542a346bed901c9cbae817539136c2a1fb2932fa827202bcaa098a2c
| * Legacy options: themes (RHDH light/dark) and SignInPage. | ||
| * Replaces deprecated SignInPageBlueprint and ThemeBlueprint modules. | ||
| */ | ||
| const legacyConvertedOptions = convertLegacyAppOptions({ |
There was a problem hiding this comment.
After the theme migration PR (#2356) is merged, we can use the rhdhThemeModule
| import catalogPlugin from '@backstage/plugin-catalog/alpha'; | ||
| import scaffolderPlugin from '@backstage/plugin-scaffolder/alpha'; | ||
| import userSettingsPlugin from '@backstage/plugin-user-settings/alpha'; | ||
| import rbac from '@backstage-community/plugin-rbac/alpha'; |
There was a problem hiding this comment.
not needed. same reason as above
| /** | ||
| * Options for when to show the Scorecard tab on catalog entity pages. | ||
| * Pass these from the app (e.g. app-next App.tsx) to control visibility. | ||
| * @public |
There was a problem hiding this comment.
| * @public | |
| * @alpha |
| /** | ||
| * Creates the Scorecard entity tab extension with optional filter. | ||
| * Use this when the app wants to control which entity kinds show the Scorecard tab. | ||
| * @public |
There was a problem hiding this comment.
| * @public | |
| * @alpha |
| /** | ||
| * Creates a module that registers the Scorecard entity tab with the given options. | ||
| * Pass entity kinds from the app (e.g. in app-next App.tsx) to control which entities show the tab. | ||
| * @public |
There was a problem hiding this comment.
| * @public | |
| * @alpha |
| }); | ||
| } | ||
|
|
||
| /** Module registering Scorecard translations in app */ |
There was a problem hiding this comment.
| /** Module registering Scorecard translations in app */ | |
| /** Module registering Scorecard translations in app */ | |
| /** | |
| * @alpha | |
| */ |
| }, | ||
| }); | ||
|
|
||
| /** Main Scorecard frontend plugin */ |
There was a problem hiding this comment.
| /** Main Scorecard frontend plugin */ | |
| /** Main Scorecard frontend plugin */ | |
| /** | |
| * @alpha | |
| */ |




Hey, I just made a Pull Request!
Description
Fixes
scorecard entity tab -- when options are passed
Screen.Recording.2026-03-06.at.3.34.08.PM.mov
scorecard entity tab -- when options are not passed (Scorecard is shown for each kind of entity)
Screen.Recording.2026-03-06.at.3.38.40.PM.mov
Legacy App after changes
Screen.Recording.2026-03-06.at.4.00.03.PM.mov
✔️ Checklist