Skip to content

Commit

Permalink
added script to migrate janus plugins (#14)
Browse files Browse the repository at this point in the history
* added script to migrate janus plugins

Signed-off-by: Kashish Mittal <[email protected]>

* update docs

Signed-off-by: Kashish Mittal <[email protected]>

* update docs

Signed-off-by: Kashish Mittal <[email protected]>

* update docs

Signed-off-by: Kashish Mittal <[email protected]>

* update CONTRIBUTING.md

Signed-off-by: Kashish Mittal <[email protected]>

* fix type errors

Signed-off-by: Kashish Mittal <[email protected]>

---------

Signed-off-by: Kashish Mittal <[email protected]>
  • Loading branch information
04kash authored Oct 23, 2024
1 parent c4e4a29 commit 59a02bc
Show file tree
Hide file tree
Showing 4 changed files with 670 additions and 1 deletion.
47 changes: 47 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ The `redhat-developer/rhdh-plugins` repository is designed as a collaborative sp
- [Creating new plugins or packages in a Workspace](#creating-new-plugins-or-packages-in-a-workspace)
- [Migrating a plugin](#migrating-a-plugin)
- [Manual migration steps](#manual-migration-steps)
- [Using the cli to migrate plugins from janus-idp/backstage-plugins](#using-the-cli-to-migrate-plugins-from-janus-idpbackstage-plugins)
- [API Reports](#api-reports)
- [Submitting a Pull Request](#submitting-a-pull-request)

Expand Down Expand Up @@ -183,6 +184,52 @@ cp -r ../existing-plugins/plugins/plugin-name plugins/

9. In the original repository, update the plugin to indicate that it has been moved to the `redhat-developer/rhdh-plugins` repository. You may wish to deprecate the old version on npm.

### Using the cli to migrate plugins from janus-idp/backstage-plugins

1. Prepare your environment by cloning a fork of both the `janus-idp/backstage-plugins` and the `backstage/rhdh-plugins` repositories

2. In both repositories, create a new branch:

- For `janus-idp/backstage-plugins`:

```bash
git checkout -b "deprecate-workspace-name"
```

- For `backstage/rhdh-plugins`:
```bash
git checkout -b "migrate-workspace-name"
```

3. In the `backstage/rhdh-plugins` repository, execute the janus-plugin migrate command.- Usage:`yarn rhdh-cli janus-plugin migrate --monorepo-path [path_to_backstage_plugins]--workspace-name [workspace_name] --branch [branch_name] --maintainers [maintainer1],[maintainer2],[maintainer3],...`

- The `path_to_backstage_plugins` is the path to the `backstage-plugins` project where the plugin(s) you want to migrate live.
- The `workspace-name` is the name of the workspace you wish to create in the `rhdh-plugins` project. All plugins in the `backstage-plugins` that either are exactly or start with `@janus-idp/backstage-plugin-[workspace_name]` will be migrated to this new workspace.
- The `branch_name` is the name of the branch in the `backstage-plugins` project where the changes to add a deprecate note for the migrated plugins will be made.
- The `maintainers` array of arguments is the github usernames of those individuals that should be listed as the maintainers for the migrated plugins. Please separate each maintainer by a comma while supplying this value.

- example usage:
```bash
yarn rhdh-cli janus-plugin migrate --monorepo-path ../backstage-plugins --workspace-name workspace-name --branch deprecate-workspace-name --maintainers @maintainer1,@maintainer2,@maintainer3
```

4. The script will generate changesets in both repositories. Be sure to commit these changes and open pull requests.

> [!IMPORTANT]
> This script updates metadata commonly found across all plugins. Please review your migrated plugins to ensure that all references to "janus" have been updated to point to "rhdh-plugins."

5. If you run into CI issues take a look at [this github gist](https://gist.github.com/Fortune-Ndlovu/1562789f3905b4fe818b9079a3032982) which outlines the process taken to migrate argocd plugins in great detail.

6. Check if the migrated plugins need to be added to janus-idp/backstage-showcase. If they do, create a wrapper for them following the steps below:

- In `dynamic-plugins> wrappers` create a directory, name it based on your plugin (eg: `backstage-community-plugin-3scale-backend`)
- Create a `src` directory within it
- Add a `index.ts` file to this src directory and export from the plugin package here. Eg: `export * from '@backstage-community/plugin-3scale-backend';`
- In `dynamic-plugins> wrappers > backstage-community-plugin-3scale-backend` (or whatever you named your wrapper directory), add a `package.json` file. Add your plugin package in dependencies.
- [Frontend plugin `package.json` example](https://github.com/janus-idp/backstage-showcase/blob/main/dynamic-plugins/wrappers/backstage-community-plugin-redhat-argocd/package.json)
- [Backend plugin `package.json` example](https://github.com/janus-idp/backstage-showcase/blob/main/dynamic-plugins/wrappers/backstage-community-plugin-3scale-backend/package.json)
- run `yarn export-dynamic` to generate dist-dynamic directory

## API Reports

This repository uses [API Extractor](https://api-extractor.com/) and TSDoc comments to generate API Reports in Markdown format, similar to those used in Backstage. If you make changes to the API or add a new plugin then you will need either generate a new API Report or update an existing API Report. If you don't do this the CI build will fail when you create your Pull Request.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ Contributions are welcome! To contribute a plugin, please follow the guidelines

## Plugins Workflow

The rhdh-plugins repository is organized into multiple workspaces, with each workspace containing a plugin or a set of related plugins. Each workspace operates independently, with its own release cycle and dependencies managed via npm. When a new changeset is added (each workspace has its own .changesets directory), a "Version packages ($workspace_name)" PR is automatically generated. Merging this PR triggers the release of all plugins in the workspace and updates the corresponding CHANGELOG files.
The `rhdh-plugins` repository is organized into multiple workspaces, with each workspace containing a plugin or a set of related plugins. Each workspace operates independently, with its own release cycle and dependencies managed via npm. When a new changeset is added (each workspace has its own `.changesets` directory), a "Version packages ($workspace_name)" PR is automatically generated. Merging this PR triggers the release of all plugins in the workspace and updates the corresponding `CHANGELOG` files.
16 changes: 16 additions & 0 deletions workspaces/repo-tools/packages/cli/src/commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,22 @@ function lazy(
}

export const registerCommands = (program: Command) => {
program
.command('janus-plugin')
.command('migrate')
.requiredOption('--monorepo-path [path]', 'Path to the monorepo')
.requiredOption(
'--workspace-name [name]',
'Name of the workspace that will be created, the plugins will be pulled automatically from the monorepo',
)
.option('--branch [branch]', 'use a branch for deprecation commits')
.option('--maintainers <names...>', 'List of maintainers', value =>
value.split(','),
)
.action(
lazy(() => import('./plugin/janus-migration').then(m => m.default)),
);

program
.command('workspace')
.command('create')
Expand Down
Loading

0 comments on commit 59a02bc

Please sign in to comment.