This playbook outlines the steps to create a plugin for Backstage that integrates with GitHub to do user specified tasks.
- GitHub repository URL.
- Access token with appropriate permissions for accessing the repository.
- Infer the name of the plugin from the task or feature request from the provided prompt as
<use-case>. - Navigate to the root directory of the Backstage project already set up and present in the home directory or provided by the user.
- Run
yarn new --select plugincommand to create a new plugin named<use-case>. - Ask user to provide the
GitHub repository URLandaccess tokenif not already provided. - Update the
app-config.ymlfile with the GitHub access token by adding the following:
integrations:
github:
- host: github.com
token: <github-access-token>- Navigate to the created directory inside plugins (
plugins/<use-case>). - Remove the existing components inside the
plugins/<use-case>/src/componentsdirectory. - Create a new component folder inside components
components/<use-case>. - create a new component
index.tsxinsidecomponents/<use-case>. - Use
api.github.com/repos/<owner>/<repo>/<use-case>to fetch data from the GitHub API. - Implement the plugin-specified features using React without
githubAuthApiorgithub oAuthuse github token directly. - Add necessary hooks for fetching data from the GitHub API in the
plugins/<use-case>/src/hooksdirectory. - Add necessary utility funtions in the
plugins/<use-case>/src/utilsdirectory.
- Update the
src/routes.tswith plugin-id - Update the
src/plugin.tswith the component import and plugin-id. - Update the
src/index.tswith the plugin import. - Update the
src/types.tsdirectory with the necessary components.
- Open the
dev/index.tsfile in the plugin directory. - Import and register the
<use-case>component:
- Add necessary changes in the
packages/backend/src/plugins/catalog.tsfile. - Update other necessary files in the backend to support the plugin.
- Update the
App.tsxfile in thepackages/app/srcdirectory. - Import the
<use-case>component and add it to theApp.tsxfile. - Create a new route for the
<use-case>component in the routes function.
- Import and update the plugin in the
packages/app/src/components/catalog/EntityPage.tsxfile. - Import and update the plugin in the
packages/app/src/components/Root/Root.tsxfile. - Import and update the plugin in the
packages/app/src/components/Search/SearchPage.tsxfile.
- Stop any running Backstage development servers.
- Start the Backstage development server by running
yarn dev. - Check for the plugin on the catalog page.
- Navigate to the
<ngrok-frontend-url>/<use-case>endpoint in the browser to test the plugin. - Ignore the Invalid Host/Origin header error in the browser console.
- Ignore the 101 ws error on the ngrok backend terminal.
- Update the README.md file in the plugin directory with the following steps:
- Instructions to create a new plugin.
- Details on implementing the component.
- Any other necessary steps or changes needed by the user.
- Do not change port 3000 and port 7007 in the app-config.yaml file.
- Never Create a fresh Backstage project for the plugin.
- Do not change the ports in the
app-config.ymlfile of 3000 and 7007. - Ignore the Invalid Host/Origin header error in the browser console.
- Ignore the 101 ws error on the ngrok backend terminal.
- No need for github oAuth app clientID and client secret for the plugin use github token directly.
- No need for a backend Secret
- Never restart currently running ngrok tunnels.
- Follow the latest react and backstage conventions for creating components
https://react.dev/blog/2023/03/16/introducing-react-dev - Ensure that the access token used for GitHub integration has appropriate permissions.
- Do not use React.FC for any components.
- Do not push anything on Git Hub.
- Keep the plugin structure organized and follow best practices.
- Utilize TypeScript for type safety and better development experience.
- Document any additional features or configurations provided by the plugin.
- Never Create a fresh Backstage project for the plugin.