Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
db9ae4a
adding localization to nightly jobs
teknaS47 Jan 19, 2026
e505afd
Merge branch 'main' into localization-it-jp
teknaS47 Jan 20, 2026
683c6ae
changing user settings persistence to browser
teknaS47 Jan 21, 2026
75698a7
Merge branch 'main' into localization-it-jp
teknaS47 Jan 21, 2026
edff4e2
adding rulesync generated files
teknaS47 Jan 22, 2026
657d4bd
Merge branch 'main' into localization-it-jp
teknaS47 Jan 22, 2026
8c54675
adding artifact dir
teknaS47 Jan 22, 2026
51b2492
Merge branch 'main' into localization-it-jp
teknaS47 Jan 27, 2026
fc83344
fixes
teknaS47 Jan 27, 2026
2dbe5db
Merge branch 'main' into localization-it-jp
teknaS47 Jan 27, 2026
c18f5b9
fix
teknaS47 Jan 27, 2026
6f28333
Merge branch 'localization-it-jp' of https://github.com/teknaS47/back…
teknaS47 Jan 27, 2026
c2819a5
Merge branch 'main' into localization-it-jp
teknaS47 Jan 27, 2026
fac8aef
fixes
teknaS47 Jan 27, 2026
0e9a6bc
Merge branch 'main' into localization-it-jp
teknaS47 Jan 27, 2026
5433665
Merge branch 'main' into localization-it-jp
teknaS47 Jan 28, 2026
14f2849
fixes
teknaS47 Jan 28, 2026
9aff7b4
fix
teknaS47 Jan 28, 2026
4a0bab5
fix
teknaS47 Jan 28, 2026
908febf
Merge branch 'main' into localization-it-jp
teknaS47 Jan 28, 2026
39c67f4
Merge branch 'main' into localization-it-jp
teknaS47 Jan 28, 2026
914ceb8
Merge branch 'main' into localization-it-jp
teknaS47 Jan 28, 2026
0fcddc2
Merge branch 'main' into localization-it-jp
teknaS47 Jan 28, 2026
8ee5db7
e2e localization for it and ja
teknaS47 Jan 29, 2026
9f87e0b
Merge branch 'main' into localization-it-jp
teknaS47 Jan 29, 2026
69cdfc5
Merge branch 'localization-it-jp' into localization-it-jp-updates
teknaS47 Jan 29, 2026
ccdb75b
chore: regenerate .claude rules from .rulesync
teknaS47 Jan 29, 2026
f2a9b0b
Merge branch 'main' into localization-it-jp
teknaS47 Jan 30, 2026
5225ff3
Merge branch 'main' into localization-it-jp
teknaS47 Feb 2, 2026
952f9d1
fixes
teknaS47 Feb 2, 2026
28c3743
fixes
teknaS47 Feb 2, 2026
d4f2ba3
fixes
teknaS47 Feb 2, 2026
2335a17
Merge branch 'main' into localization-it-jp
teknaS47 Feb 2, 2026
36861a6
fix
teknaS47 Feb 2, 2026
c8222e4
Merge branch 'main' into localization-it-jp
teknaS47 Feb 2, 2026
ef19d47
Rebase upstream/main into localization-it-jp
teknaS47 Feb 2, 2026
308a12a
Merge branch 'main' into localization-it-jp
teknaS47 Feb 2, 2026
42934aa
fix
teknaS47 Feb 2, 2026
0f71a27
Merge branch 'main' into localization-it-jp
teknaS47 Feb 2, 2026
1ad16ba
Merge branch 'main' into localization-it-jp
teknaS47 Feb 3, 2026
e3b322d
rebase with PR 4020
teknaS47 Feb 3, 2026
18c8404
add artifacts_subdir param to testing functions for localization
teknaS47 Feb 3, 2026
dbdfa87
Adding Italian and Japanese e2e and nightly jobs
teknaS47 Feb 3, 2026
90e4d50
Merge branch 'main' into localization-it-jp
teknaS47 Feb 3, 2026
e833848
Merge branch 'main' into localization-it-jp
teknaS47 Feb 3, 2026
e813dc7
extension changes and fixes
teknaS47 Feb 3, 2026
d086418
Merge branch 'main' into localization-it-jp
teknaS47 Feb 3, 2026
f26f001
extension changes and fixes
teknaS47 Feb 3, 2026
2d16061
Merge branch 'localization-it-jp' of https://github.com/teknaS47/back…
teknaS47 Feb 3, 2026
4d66fe3
Merge branch 'main' into localization-it-jp
teknaS47 Feb 4, 2026
154afe3
quick start fix
teknaS47 Feb 4, 2026
b425141
Merge branch 'main' into localization-it-jp
teknaS47 Feb 4, 2026
57fea78
skipped quickstart for italian locale due to bug
teknaS47 Feb 4, 2026
638f20c
Merge branch 'main' into localization-it-jp
teknaS47 Feb 4, 2026
c12c3e8
Merge branch 'main' into localization-it-jp
teknaS47 Feb 4, 2026
e0bd868
Merge branch 'main' into localization-it-jp
teknaS47 Feb 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/memories/add_extension_metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Create `catalog-entities/extensions/plugins/{plugin-name}.yaml`:
### Step 4: Validate Files

```bash
# Navigate to marketplace directory
# Navigate to extensions directory
cd catalog-entities/extensions

# Download schemas to temp directory (ajv doesn't support remote schemas well)
Expand Down
13 changes: 13 additions & 0 deletions .claude/memories/ci-e2e-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ test.beforeAll(async ({ }, testInfo) => {
- `showcase-runtime`: Runtime environment tests
- `showcase-sanity-plugins`: Plugin sanity checks
- `showcase-upgrade`: Upgrade scenario tests
- `showcase-localization-fr`: French localization tests
- `any-test`: Use for debugging when you need to run a specific tests

**Note**: All project names are defined in `e2e-tests/playwright/projects.json` as the single source of truth. This file is consumed by:
Expand Down Expand Up @@ -110,6 +111,14 @@ test.beforeAll(async ({ }, testInfo) => {
- Audit logging functionality
- Compliance verification

7. **Localization Tests** (`playwright/e2e/localization/`)
- Verify UI displays correctly translated strings
- Currently supports **French (fr)** only
- Runs as part of OCP nightly job (skipped for OSD-GCP)
- Uses `showcase-localization-fr` Playwright project
- Translation files located in `translations/` directory
- Test helper: `e2e-tests/playwright/e2e/localization/locale.ts`

### Test Execution

#### CI/CD Pipeline Execution
Expand Down Expand Up @@ -155,6 +164,9 @@ yarn showcase-auth-providers # Auth provider tests
# Plugin tests
yarn showcase-sanity-plugins # Plugin sanity tests

# Localization tests
yarn showcase-localization-fr # French localization tests

# Utility scripts
yarn lint:check # Lint checking
yarn lint:fix # Lint fixing
Expand Down Expand Up @@ -496,6 +508,7 @@ The choice of config map depends on the **Playwright test project** being execut
- `showcase-runtime` - Runtime environment tests
- `showcase-sanity-plugins` - Plugin sanity tests
- `showcase-upgrade` - Upgrade scenario tests
- `showcase-localization-fr` - French localization tests
- `showcase-auth-providers` - Authentication provider tests (uses special deployment process)

#### **app-config-rhdh-rbac.yaml** (RBAC Configuration)
Expand Down
205 changes: 205 additions & 0 deletions .claude/rules/add_extension_metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
---
paths: 'catalog-entities/extensions/**, docs/dynamic-plugins/**'
---
# RHDH Extensions Catalog - Plugin Metadata Workflow

This cursor rule provides an automated workflow for adding dynamic plugin metadata to the RHDH Extensions Catalog.

## Important Documentation

**Primary Reference**: Read `catalog-entities/extensions/README.md` for:
- Detailed YAML structure and field explanations
- Complete examples (3scale plugin)
- RHDH-local testing setup
- Troubleshooting guide

This rule focuses on the **workflow automation** and **validation** aspects not covered in the README.

## Prerequisites

Before starting, ensure you have:

1. **Successfully exported plugin** from [RHDH Plugin Export Overlays](https://github.com/redhat-developer/rhdh-plugin-export-overlays)
- OCI URL from build output (e.g., `oci://ghcr.io/redhat-developer/rhdh-plugin-export-overlays/aws-ecs:pr_1426__0.6.0!aws-ecs`)
- Plugin version and integrity information

2. **Required tools installed**:
```bash
# Check if tools are installed
command -v yq &> /dev/null || echo "❌ Install yq (Go version): brew install yq (macOS) or snap install yq (Linux)"
command -v ajv &> /dev/null || echo "❌ Install ajv-cli: npm install -g ajv-cli"
command -v gh &> /dev/null || echo "❌ Install GitHub CLI: brew install gh (macOS)"
```

**Important**: Ensure you have the **Go-based version of yq** (mikefarah/yq), not the Python version (kislyuk/yq).
Verify with: `yq --version` (should show "mikefarah/yq")

## Interactive Information Gathering

When adding a plugin, gather the following information:

### Required Information
1. **Plugin Identification**
- Plugin name (e.g., `aws-ecs`, `todo`)
- NPM package name (e.g., `@aws/amazon-ecs-plugin-for-backstage`)
- Namespace (e.g., `rhdh` for Red Hat maintained, `community` for community plugins)

2. **Technical Details**
- OCI URL from overlay build
- Plugin version
- Backstage version compatibility
- Role: `frontend-plugin` or `backend-plugin`

3. **User-Facing Information**
- Title and short description (2-3 lines for tile view)
- Long description (markdown, for expanded view)
- Category (one of: AI, Analytics, CI/CD, Cloud, Compliance, Cost, Developer Tools, Docs, Feature Flags, Kubernetes, Monitoring, Productivity, Reporting, Search, Security, Storage, Supply Chain, Testing)
- Tags (lowercase, kebab-case)
- Support level: `production`, `tech-preview`, or `dev-preview`

4. **Links**
- Homepage/documentation URL
- Source code repository
- Bug tracker URL

## Workflow Steps

### Step 1: Create Feature Branch

```bash
# Ensure we're on latest main
git fetch origin && git checkout main && git pull origin main

# Create feature branch
git checkout -b add-{plugin-name}-plugin-metadata
```

### Step 2: Tool Verification

```bash
# Verify required tools
for tool in yq ajv gh; do
command -v $tool &> /dev/null && echo "✓ $tool installed" || echo "❌ $tool missing"
done

# Verify yq is the Go version
yq --version | grep -q "mikefarah" && echo "✓ yq is Go version (mikefarah/yq)" || echo "❌ Wrong yq version - install mikefarah/yq"
```

### Step 3: Create/Edit Plugin Metadata

Create `catalog-entities/extensions/plugins/{plugin-name}.yaml`:
- Use `catalog-entities/extensions/plugins/3scale.yaml` as a template
- See README for complete field descriptions

### Step 4: Validate Files

```bash
# Navigate to extensions directory
cd catalog-entities/extensions

# Download schemas to temp directory (ajv doesn't support remote schemas well)
mkdir -p /tmp/rhdh-schemas
curl -s "https://raw.githubusercontent.com/redhat-developer/rhdh-plugins/main/workspaces/extensions/json-schema/packages.json" \
-o /tmp/rhdh-schemas/packages.json
curl -s "https://raw.githubusercontent.com/redhat-developer/rhdh-plugins/main/workspaces/extensions/json-schema/plugins.json" \
-o /tmp/rhdh-schemas/plugins.json

# Convert YAML to JSON and validate Package against local schema
echo "Validating packages/{plugin-name}.yaml..."
yq eval packages/{plugin-name}.yaml -o json > /tmp/rhdh-schemas/package-temp.json
ajv validate -s /tmp/rhdh-schemas/packages.json -d /tmp/rhdh-schemas/package-temp.json

# Convert YAML to JSON and validate Plugin against local schema
echo "Validating plugins/{plugin-name}.yaml..."
yq eval plugins/{plugin-name}.yaml -o json > /tmp/rhdh-schemas/plugin-temp.json
ajv validate -s /tmp/rhdh-schemas/plugins.json -d /tmp/rhdh-schemas/plugin-temp.json

# Clean up temp files
rm /tmp/rhdh-schemas/package-temp.json /tmp/rhdh-schemas/plugin-temp.json
```

**Note**: This uses the Go-based `yq` syntax (`yq eval file.yaml -o json`). If validation fails, check that you have the correct yq version installed.

### Step 5: Test Locally (Optional)

Follow the RHDH-local testing instructions in the README:
1. Clone `rhdh-local` repository
2. Mount your local catalog in `compose.yaml`
3. Set `catalog.processingInterval: { seconds: 15 }` in `app-config.yaml`
4. Start with `docker compose up -d`
5. Check http://localhost:7007 → Catalog → Extensions

### Step 6: Create Pull Request

```bash
# Stage changes
git add catalog-entities/extensions/packages/{plugin-name}.yaml
git add catalog-entities/extensions/plugins/{plugin-name}.yaml

# Commit with descriptive message
git commit -m "feat: add {plugin-name} plugin to RHDH extensions

- Added Package entity with OCI URL and version
- Added Plugin entity with description and metadata

# Create PR
gh pr create --title "feat: add {plugin-name} plugin to extensions" \
--body "## Summary
- Added {plugin-name} plugin metadata to Extensions Catalog
- Package: \`{npm-package-name}\` version {version}
- Support level: {support-level}

## Checklist
- [ ] Package and Plugin YAML files created
- [ ] Schemas validate successfully
- [ ] Tested locally with rhdh-local (if applicable)"
```

## Validation Checklist

Before submitting:
- [ ] Tools installed (`yq` Go version, `ajv-cli`, `gh`)
- [ ] Package YAML validates against schema
- [ ] Plugin YAML validates against schema
- [ ] Namespace consistent between Package and Plugin
- [ ] OCI URL correctly formatted
- [ ] All required fields populated

## Common Issues

### Schema Validation Fails
```bash
# Debug by checking JSON conversion (using Go-based yq)
yq eval your-file.yaml -o json | jq '.'

# Common issues:
# - Missing required fields
# - Wrong field types
# - Invalid enum values (e.g., wrong category)
```

### Wrong yq Version
```bash
# Check if you have the Go version
yq --version

# Should show: yq (https://github.com/mikefarah/yq/) version X.X.X

# If you have the Python version (kislyuk/yq), uninstall and install Go version:
# macOS: brew install mikefarah/yq/yq
# Linux: snap install yq
```

### OCI URL Format
Correct format: `oci://registry/path:tag!package-name`
- Must include `!package-name` suffix
- Tag typically includes PR number and version

## References

- [README with detailed documentation](../../catalog-entities/extensions/README.md)
- [Extension Schemas](https://github.com/redhat-developer/rhdh-plugins/tree/main/workspaces/extensions/json-schema)
- [RHDH Local Testing](https://github.com/redhat-developer/rhdh-local)
- [Dynamic Plugins Documentation](https://docs.redhat.com/en/documentation/red_hat_developer_hub)
- [RHDH Plugin Catalog](https://gitlab.cee.redhat.com/rhidp/rhdh-plugin-catalog/-/blob/rhdh-1-rhel-9/catalog-index) (RH VPN Required)
Loading
Loading