diff --git a/.changeset/breezy-poems-grab.md b/.changeset/breezy-poems-grab.md new file mode 100644 index 0000000000..ac250b9c7e --- /dev/null +++ b/.changeset/breezy-poems-grab.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights-backend': patch +--- + +TechInsightsBackend: Added missing 'scheduler' to code examples diff --git a/.changeset/breezy-seas-exist.md b/.changeset/breezy-seas-exist.md new file mode 100644 index 0000000000..2b061f11a8 --- /dev/null +++ b/.changeset/breezy-seas-exist.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +The template editor now shows the cause of request errors that happen during a dry-run. diff --git a/.changeset/bright-balloons-hide.md b/.changeset/bright-balloons-hide.md new file mode 100644 index 0000000000..5163e72dc1 --- /dev/null +++ b/.changeset/bright-balloons-hide.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Change BackstageIconLinkVertical style to use pallette instead of explicit color diff --git a/.changeset/calm-experts-buy.md b/.changeset/calm-experts-buy.md new file mode 100644 index 0000000000..d95844e298 --- /dev/null +++ b/.changeset/calm-experts-buy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-node': minor +--- + +Added local publishing target directory `config`: `techdocs.publisher.local.publishDirectory` diff --git a/.changeset/create-app-1656408352.md b/.changeset/create-app-1656408352.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1656408352.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. diff --git a/.changeset/curly-candles-battle.md b/.changeset/curly-candles-battle.md new file mode 100644 index 0000000000..9a4d850fd1 --- /dev/null +++ b/.changeset/curly-candles-battle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Bumped `codemirror` dependencies to `v6.0.0`. diff --git a/.changeset/forty-seals-complain.md b/.changeset/forty-seals-complain.md new file mode 100644 index 0000000000..b2435b2d3a --- /dev/null +++ b/.changeset/forty-seals-complain.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Improve error messaging when passing in malformed auth diff --git a/.changeset/green-actors-argue.md b/.changeset/green-actors-argue.md new file mode 100644 index 0000000000..e21fbb040c --- /dev/null +++ b/.changeset/green-actors-argue.md @@ -0,0 +1,19 @@ +--- +'@backstage/cli': minor +--- + +**BREAKING**: Removed the following deprecated package commands: + +- `app:build` - Use `package build` instead +- `app:serve` - Use `package start` instead +- `backend:build` - Use `package build` instead +- `backend:bundle` - Use `package build` instead +- `backend:dev` - Use `package start` instead +- `plugin:build` - Use `package build` instead +- `plugin:serve` - Use `package start` instead +- `build` - Use `package build` instead +- `lint` - Use `package lint` instead +- `prepack` - Use `package prepack` instead +- `postpack` - Use `package postpack` instead + +In order to replace these you need to have [migrated to using package roles](https://backstage.io/docs/tutorials/package-role-migration). diff --git a/.changeset/happy-boxes-melt.md b/.changeset/happy-boxes-melt.md new file mode 100644 index 0000000000..c478e783d3 --- /dev/null +++ b/.changeset/happy-boxes-melt.md @@ -0,0 +1,6 @@ +--- +'@techdocs/cli': patch +'@backstage/plugin-techdocs-node': patch +--- + +Fix the flag parsing for `legacyCopyReadmeMdToIndexMd` in `techdocs-cli generate` command, and decouple it's logic from the `techdocs-ref` flag. diff --git a/.changeset/lemon-goats-obey.md b/.changeset/lemon-goats-obey.md new file mode 100644 index 0000000000..7bdb59bd61 --- /dev/null +++ b/.changeset/lemon-goats-obey.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-apache-airflow': minor +--- + +Exposed DagTableComponent as standalone component + added a prop to get only select DAGs instead of the full list diff --git a/.changeset/metal-singers-matter.md b/.changeset/metal-singers-matter.md new file mode 100644 index 0000000000..2c8d370790 --- /dev/null +++ b/.changeset/metal-singers-matter.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Upgrade `@rollup/plugin-node-resolve` to `^13.0.6` diff --git a/.changeset/plenty-clouds-guess.md b/.changeset/plenty-clouds-guess.md new file mode 100644 index 0000000000..cc56bd604d --- /dev/null +++ b/.changeset/plenty-clouds-guess.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Added an option for the auth backend router to select the algorithm for the JWT token signing keys diff --git a/.changeset/popular-pots-yell.md b/.changeset/popular-pots-yell.md new file mode 100644 index 0000000000..f0decc9fb8 --- /dev/null +++ b/.changeset/popular-pots-yell.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-auth-backend': minor +--- + +**BREAKING**: Removed all directly exported auth provider factories, option types, and sign-in resolvers. For example: `AwsAlbProviderOptions`, `bitbucketUserIdSignInResolver`, `createGithubProvider`. These are all still accessible via the `providers` export. For example, use `providers.github.create()` rather than `createGithubProvider()`, and `providers.bitbucket.resolvers.userIdMatchingUserEntityAnnotation()` rather than `bitbucketUserIdSignInResolver`. + +**BREAKING**: Removed the exported `AuthProviderFactoryOptions` type as well as the deprecated option fields of the `AuthProviderFactory` callback. This includes the `tokenManager`, `tokenIssuer`, `discovery`, and `catalogApi` fields. Existing usage of these should be replaced with the new utilities in the `resolverContext` field. The deprecated `TokenIssuer` type is now also removed, since it is no longer used. + +**BREAKING**: Removed `getEntityClaims`, use `getDefaultOwnershipEntityRefs` instead. + +**DEPRECATION**: Deprecated `AtlassianAuthProvider` as it was unintentionally exported. diff --git a/.changeset/pre.json b/.changeset/pre.json index 500bf4ac83..2bba491efc 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -156,7 +156,69 @@ "@backstage/plugin-user-settings": "0.4.5", "@backstage/plugin-vault": "0.1.0", "@backstage/plugin-vault-backend": "0.1.0", - "@backstage/plugin-xcmetrics": "0.2.26" + "@backstage/plugin-xcmetrics": "0.2.26", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.0.0", + "@backstage/plugin-catalog-backend-module-openapi": "0.0.0" }, - "changesets": [] + "changesets": [ + "beige-horses-scream", + "breezy-poems-grab", + "breezy-seas-exist", + "bright-balloons-hide", + "calm-experts-buy", + "chilled-mirrors-grab", + "create-app-1656408352", + "curly-candles-battle", + "curvy-weeks-matter", + "eleven-mice-collect", + "forty-seals-complain", + "great-roses-pump", + "green-actors-argue", + "happy-boxes-melt", + "large-kangaroos-poke", + "lemon-goats-obey", + "metal-singers-matter", + "modern-ducks-lay", + "nasty-zoos-cross", + "nervous-humans-sip", + "plenty-clouds-guess", + "polite-eagles-invite", + "popular-pots-yell", + "pretty-masks-live", + "purple-beans-march", + "quiet-pens-notice", + "red-games-decide", + "renovate-4b5ff24", + "renovate-9454dab", + "rude-llamas-lie", + "search-lightning-cult", + "search-turtles-itch", + "serious-zebras-joke", + "shaggy-melons-drive", + "sharp-numbers-taste", + "sharp-planes-turn", + "shiny-turkeys-doubt", + "short-olives-train", + "shy-cameras-develop", + "silent-coats-brake", + "silver-needles-unite", + "smooth-sheep-hide", + "strange-tables-flash", + "strange-trains-collect", + "strong-lies-explain", + "sweet-plants-sparkle", + "tame-guests-wave", + "techdocs-eyes-sit", + "techdocs-gorgeous-plants-sniff", + "techdocs-sheep-talk", + "techdocs-the-whole-pulse", + "thick-radios-drive", + "twelve-candles-jump", + "two-crews-accept", + "unlucky-stingrays-juggle", + "weak-bananas-deliver", + "weak-llamas-repeat", + "wet-dolphins-act", + "wicked-icons-grin" + ] } diff --git a/.changeset/pretty-masks-live.md b/.changeset/pretty-masks-live.md new file mode 100644 index 0000000000..c45ad1e77f --- /dev/null +++ b/.changeset/pretty-masks-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-model': patch +--- + +Added type predicates for all entity types, e.g. isUserEntity diff --git a/.changeset/quiet-pens-notice.md b/.changeset/quiet-pens-notice.md new file mode 100644 index 0000000000..aa6aeb049d --- /dev/null +++ b/.changeset/quiet-pens-notice.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Improve plural handling in logging output for secrets diff --git a/.changeset/red-games-decide.md b/.changeset/red-games-decide.md index ca5ff580b4..208cecfc0a 100644 --- a/.changeset/red-games-decide.md +++ b/.changeset/red-games-decide.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-api-docs-module-protoc-gen-doc': major +'@backstage/plugin-api-docs-module-protoc-gen-doc': minor --- Added the new `grpcDocsApiWidget` to render `protoc-gen-doc` generated descriptors by the `grpc-docs` package. diff --git a/.changeset/renovate-4b5ff24.md b/.changeset/renovate-4b5ff24.md new file mode 100644 index 0000000000..4867c345d8 --- /dev/null +++ b/.changeset/renovate-4b5ff24.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Updated dependency `run-script-webpack-plugin` to `^0.1.0`. diff --git a/.changeset/rude-llamas-lie.md b/.changeset/rude-llamas-lie.md new file mode 100644 index 0000000000..918d61da6d --- /dev/null +++ b/.changeset/rude-llamas-lie.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault': patch +--- + +Export missing parameters and added them to the api-report. Also adapted the API to the expected response from the backend diff --git a/.changeset/search-lightning-cult.md b/.changeset/search-lightning-cult.md new file mode 100644 index 0000000000..79cd256e77 --- /dev/null +++ b/.changeset/search-lightning-cult.md @@ -0,0 +1,24 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': minor +--- + +**BREAKING**: In order to remain interoperable with all currently supported +deployments of Elasticsearch, this package will now conditionally use either +the `@elastic/elasticsearch` or `@opensearch-project/opensearch` client when +communicating with your deployed cluster. + +If you do not rely on types exported from this package, or if you do not make +use of the `createElasticSearchClientOptions` or `newClient` methods on the +`ElasticSearchSearchEngine` class, then upgrading to this version should not +require any further action on your part. Everything will continue to work as it +always has. + +If you _do_ rely on either of the above methods or any underlying types, some +changes may be needed to your custom code. A type guard is now exported by this +package (`isOpenSearchCompatible(options)`), which you may use to help clarify +which client options are compatible with which client constructors. + +If you are using this package with the `search.elasticsearch.provider` set to +`aws`, and you are making use of the `newClient` method in particular, you may +wish to start using the `@opensearch-project/opensearch` client in your custom +code. diff --git a/.changeset/search-turtles-itch.md b/.changeset/search-turtles-itch.md new file mode 100644 index 0000000000..2da26fc64a --- /dev/null +++ b/.changeset/search-turtles-itch.md @@ -0,0 +1,13 @@ +--- +'@backstage/plugin-search': patch +--- + +To allow people to use a global search context in the search modal, the code for the search modal has been changed to only create a local search context if there is no parent context already defined. + +If you want to continue using a local context even if you define a global one, you will have to wrap the modal in a new local context manually: + +```tsx + + + +``` diff --git a/.changeset/serious-zebras-joke.md b/.changeset/serious-zebras-joke.md new file mode 100644 index 0000000000..78f38ca967 --- /dev/null +++ b/.changeset/serious-zebras-joke.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Support displaying subtitle text in `SidebarSubmenuItem` diff --git a/.changeset/sharp-numbers-taste.md b/.changeset/sharp-numbers-taste.md new file mode 100644 index 0000000000..4819aca18f --- /dev/null +++ b/.changeset/sharp-numbers-taste.md @@ -0,0 +1,7 @@ +--- +'@backstage/errors': minor +--- + +The `ResponseError.fromResponse` now accepts a more narrow response type, in order to avoid incompatibilities between different fetch implementations. + +The `response` property of `ResponseError` has also been narrowed to a new `ConsumedResponse` type that omits all the properties for consuming the body of the response. This is not considered a breaking change as it was always an error to try to consume the body of the response. diff --git a/.changeset/sharp-planes-turn.md b/.changeset/sharp-planes-turn.md new file mode 100644 index 0000000000..47f6a6176d --- /dev/null +++ b/.changeset/sharp-planes-turn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault-backend': minor +--- + +Throw exceptions instead of swallow them, remove some exported types from the `api-report`, small changes in the API responses & expose the vault `baseUrl` to the frontend as well diff --git a/.changeset/shiny-turkeys-doubt.md b/.changeset/shiny-turkeys-doubt.md new file mode 100644 index 0000000000..edac39182c --- /dev/null +++ b/.changeset/shiny-turkeys-doubt.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org': patch +--- + +Render namespaces for teams with subtitles in `MyGroupsSidebarItem` diff --git a/.changeset/shy-cameras-develop.md b/.changeset/shy-cameras-develop.md new file mode 100644 index 0000000000..c62a9a56e3 --- /dev/null +++ b/.changeset/shy-cameras-develop.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog-backend-module-openapi': minor +--- + +Add basic OpenAPI \$ref support. + +For more information see [here](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-openapi). diff --git a/.changeset/silent-coats-brake.md b/.changeset/silent-coats-brake.md new file mode 100644 index 0000000000..b1cfbacb6a --- /dev/null +++ b/.changeset/silent-coats-brake.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog': patch +'@backstage/plugin-catalog-backend': patch +--- + +Use entity type predicates from catalog-model diff --git a/.changeset/silver-needles-unite.md b/.changeset/silver-needles-unite.md new file mode 100644 index 0000000000..b5fed7e615 --- /dev/null +++ b/.changeset/silver-needles-unite.md @@ -0,0 +1,26 @@ +--- +'@backstage/plugin-home': patch +--- + +Added support for customizing the time format used in the `HeaderWorldClock` component + +Here's an example of how this can be used in the `HomePage.tsx` found in `\packages\app\src\components\home` to change the clock to be in the 24hr time format: + +```diff ++const timeFormat: Intl.DateTimeFormatOptions = { ++ hour: '2-digit', ++ minute: '2-digit', ++ hour12: false, ++}; + +export const homePage = ( + +
} pageTitleOverride="Home"> ++ +
+ + + + + +``` diff --git a/.changeset/strange-tables-flash.md b/.changeset/strange-tables-flash.md new file mode 100644 index 0000000000..b42069aa64 --- /dev/null +++ b/.changeset/strange-tables-flash.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-stack-overflow': patch +'@backstage/plugin-stack-overflow-backend': patch +--- + +app-config is now picked up properly. diff --git a/.changeset/strange-trains-collect.md b/.changeset/strange-trains-collect.md new file mode 100644 index 0000000000..3da9aff515 --- /dev/null +++ b/.changeset/strange-trains-collect.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +The max content size for dry-run files has been reduced from 256k to 64k. diff --git a/.changeset/strong-lies-explain.md b/.changeset/strong-lies-explain.md new file mode 100644 index 0000000000..d9657be6b4 --- /dev/null +++ b/.changeset/strong-lies-explain.md @@ -0,0 +1,5 @@ +--- +'@backstage/theme': patch +--- + +Adds optional `htmlFontSize` property and also sets typography design tokens for h5 and h6 in base theme. diff --git a/.changeset/techdocs-eyes-sit.md b/.changeset/techdocs-eyes-sit.md new file mode 100644 index 0000000000..a09410a4fb --- /dev/null +++ b/.changeset/techdocs-eyes-sit.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-backend': patch +--- + +Add sample headings on the documented component homepage. diff --git a/.changeset/techdocs-sheep-talk.md b/.changeset/techdocs-sheep-talk.md new file mode 100644 index 0000000000..b17408d7a4 --- /dev/null +++ b/.changeset/techdocs-sheep-talk.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Remove the 60% factor from the font size calculation of headers to use the exact size defined in BackstageTheme. diff --git a/.changeset/twelve-candles-jump.md b/.changeset/twelve-candles-jump.md new file mode 100644 index 0000000000..9d0cccd0ba --- /dev/null +++ b/.changeset/twelve-candles-jump.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-ldap': patch +--- + +Add possibility to resolve relations by RDN, in addition to UUID and DN diff --git a/.changeset/two-crews-accept.md b/.changeset/two-crews-accept.md new file mode 100644 index 0000000000..9540f97cb5 --- /dev/null +++ b/.changeset/two-crews-accept.md @@ -0,0 +1,15 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +Add the possibility in the `GitlabDiscoveryEntityProvider` to scan the whole project instead of concrete groups. For that, use a configuration like this one, where the group parameter is omitted (not mandatory anymore): + +```yaml +catalog: + providers: + gitlab: + yourProviderId: + host: gitlab-host # Identifies one of the hosts set up in the integrations + branch: main # Optional. Uses `master` as default + entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` +``` diff --git a/.changeset/weak-bananas-deliver.md b/.changeset/weak-bananas-deliver.md new file mode 100644 index 0000000000..f46c7b7bfe --- /dev/null +++ b/.changeset/weak-bananas-deliver.md @@ -0,0 +1,28 @@ +--- +'@backstage/plugin-pagerduty': minor +--- + +Introduces a new annotation `pagerduty.com/service-id` that can be used instead of the `pagerduty.com/integration-key` annotation. +_Note: If both annotations are specified on a given Entity, then the `pagerduty.com/integration-key` annotation will be prefered_ + +**BREAKING** The `PagerDutyClient.fromConfig` static method now expects a `FetchApi` compatible object and has been refactored to +accept 2 arguments: config and ClientApiDependencies +The `PagerDutyClient` now relies on a `fetchApi` being available to execute `fetch` requests. + +**BREAKING** A new query method `getServiceByEntity` that is used to query for Services by either the `integrationKey` or `serviceId` +annotation values if they are defined. The `integrationKey` value is preferred currently over `serviceId`. As such, the previous +`getServiceByIntegrationKey` method has been removed. + +**BREAKING** The return values for each Client query method has been changed to return an object instead of raw values. +For example, the `getIncidentsByServiceId` query method now returns an object in the shape of `{ incidents: Incident[] }` +instead of just `Incident[]`. +This same pattern goes for `getChangeEventsByServiceId` and `getOnCallByPolicyId` functions. + +**BREAKING** All public exported types that relate to entities within PagerDuty have been prefixed with `PagerDuty` (e.g. `ServicesResponse` is now `PagerDutyServicesResponse` and `User` is now `PagerDutyUser`) + +In addition, various enhancements/bug fixes were introduced: + +- The `PagerDutyCard` component now wraps error and loading messages with an `InfoCard` to contain errors/messages. This enforces a consistent experience on the EntityPage +- If no service can be found for the provided integration key, a new Error Message Empty State component will be shown instead of an error alert +- Introduces the `fetchApi` to replace standard `window.fetch` + - ensures that Identity Authorization is respected and provided in API requests diff --git a/.changeset/weak-llamas-repeat.md b/.changeset/weak-llamas-repeat.md new file mode 100644 index 0000000000..a86ce3a964 --- /dev/null +++ b/.changeset/weak-llamas-repeat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-backend': minor +--- + +Added local publishing target directory `config`: `techdocs.publisher.local.publishDirectory` diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3401dc5b2b..7127fb1da2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,8 +8,7 @@ yarn.lock @backstage/reviewers @backstage-service */yarn.lock @backstage/reviewers @backstage-service /.changeset/cost-insights-* @backstage/reviewers @backstage/silver-lining -/.changeset/search-* @backstage/reviewers @backstage/techdocs-core -/.changeset/techdocs-* @backstage/reviewers @backstage/techdocs-core +/.changeset @backstage/reviewers @backstage/techdocs-core /cypress/src/integration/plugins/techdocs.spec.ts @backstage/reviewers @backstage/techdocs-core /docs/assets/search @backstage/reviewers @backstage/techdocs-core /docs/features/search @backstage/reviewers @backstage/techdocs-core diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index d0f8dc1e79..ffada71523 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -55,7 +55,7 @@ jobs: run: ls microsite/build/backstage && ls microsite/build/backstage/storybook - name: Deploy both microsite and storybook to gh-pages - uses: JamesIves/github-pages-deploy-action@v4.3.3 + uses: JamesIves/github-pages-deploy-action@v4.3.4 with: branch: gh-pages folder: microsite/build/backstage diff --git a/ADOPTERS.md b/ADOPTERS.md index 538ae8b11e..b72da367b1 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -3,7 +3,7 @@ _If you're using Backstage in your organization, please try to add your company name to this list. This really helps the project to gain momentum and credibility. It's a small contribution back to the project with a big impact._ | Organization | Contact | Description of Use | -| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Spotify](https://www.spotify.com) | [@leemills83](https://github.com/leemills83) | Main interface towards all of Spotify's infrastructure and technical documentation. | | [bol.com](https://www.bol.com) | [@sagacity](https://github.com/sagacity) | Initial work being done to unify platform tooling. | | [DFDS](https://www.dfds.com) | [@carlsendk](https://github.com/carlsendk) | V2 self-service platform. | @@ -34,9 +34,9 @@ _If you're using Backstage in your organization, please try to add your company | [Netflix](https://www.netflix.com/) | [bleathem](https://github.com/bleathem) | Our Backstage implementation will be the front door to a unified experience connecting our internal platform products across important workflows with integrated knowledge and support. | | [b.well](https://www.icanbwell.com/) | [Jacob Rosales](https://github.com/jrosales) | Foundation for our engineering portal and cloud insights. | | [PagerDuty](https://www.pagerduty.com/) | [Mark Shaw](https://github.com/markshawtoronto) | Developer portal, initially focused on software templates and tech-docs. | -| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process ๐ŸŒ•๐Ÿš€๐Ÿง‘โ€๐Ÿš€ | +| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process ๐ŸŒ•๐Ÿš€๐Ÿง‘โ€๐Ÿš€ | | [FundApps](https://www.fundapps.co/) | [Elliot Greenwood](https://github.com/egnwd) | Developer Portal - A place for us to keep track of our projects and documentation for all services and processes | -| [DAZN](https://dazn.com/) | [Lou Bichard](https://twitter.com/loujaybee), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). | +| [DAZN](https://dazn.com/) | [Lou Bichard](https://twitter.com/loujaybee), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). | | [HelloFresh](https://www.hellofresh.de/) | [@iammuho](https://github.com/iammuho), [@ElenaForester](https://github.com/ElenaForester), [@diegomarangoni](https://github.com/diegomarangoni) | Our developer portal at HelloFresh - Spread across an organisation of 500+ engineers globally. | | [FactSet](https://www.factset.com/) | [@kuangp](https://github.com/kuangp) | Developer portal to provide discoverability to all internal components, APIs, documentation, and scaffold templates with integrations to our internal infrastructure tools. | | [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | @@ -161,7 +161,7 @@ _If you're using Backstage in your organization, please try to add your company | [OVHcloud](https://www.ovhcloud.com/fr/) | [Jean-Philippe Blary](https://github.com/blaryjp), [Arnaud Bauer](mailto:arnaud.bauer@ovhcloud.com), [Flavien Chantelot](https://github.com/Dorn-) | We're providing Backstage to our collaborators to ease their daily jobs, and let them extends it using plugins. | | [Procter & Gamble](https://us.pg.com/) | [Binita Nayak](https://github.com/binitan), [Josh Rose](https://github.com/joshuarose), [RJ Winkler](https://github.com/rjwink) | P&G leverages Backstage to build internal developer portal to ensure developers' happiness. This developer portal shall act as single source of information needed by development teams to seamlessly create, find and maintain their software components/resources/documentation. | | [SANS Institute](https://www.sans.org) | [Christopher Klewin](mailto:cklewin@sans.org) | Developer portal for centralized visibility, reporting, and tooling across multiple organizations. | -| [Okay](https://www.okayhq.com/) | [Tomas Barreto](mailto:tomas@okayhq.com) | Service catalog, developer portal, and technical documentation | +| [Okay](https://www.okayhq.com/) | [Tomas Barreto](mailto:tomas@okayhq.com) | Service catalog, developer portal, and technical documentation | | [Kaluza](https://www.kaluza.com) | [James Condren](mailto:james.condron@kaluza.com) | To provide an automated golden path to developers, with a focus on discovery and documentation | | [LinkedIn](https://linkedin.com) | [Joshua Lawrence](mailto:jlawrence@linkedin.com) | We are building a platform for internal web tools | | [Forto](https://forto.com) | [Rodolfo Matos](mailto:rodolfo.matos@forto.com) | Still in a experimental phase/assessing the organisational fit. We will be using it mostly a developer portal -- pretty standard use case. | @@ -171,15 +171,18 @@ _If you're using Backstage in your organization, please try to add your company | [AEB](https://www.aeb.com/) | [David Fankhรคnel](mailto:dfl@aeb.com) | Central developer platform for creating new apps via templates, getting an overview via software catalog, etc | | [SALTO Systems](https://saltosystems.com) | [Ian Cowley](mailto:i.cowley@saltosystems.com) | Currently using Backstage as an internal documentation portal. | | [Lummo](https://lummo.com) | [Anjul Sahu](mailto:anjul@lummo.com) | We are building the internal developer portal using Backstage and bringing up all integrations and service information at one place. | -| [Frontside](https://frontside.com) | [Taras Mankovski](mailto:taras@frontside.com) | +| [Frontside](https://frontside.com) | [Taras Mankovski](mailto:taras@frontside.com) | | | [Stepstone](https://www.stepstone.com/en/) | [Neil Kennedy](mailto:neil.kennedy@stepstone.com) | StepStone is using Backstage to solve problems around ownership and visibility of our applications. We have thousands of repos, multiple legacy systems and a growing platform that is hard to maintain. Backstage is forming the centre of our push to embrace the chaos. | | [idwall](https://idwall.co) | [Rodrigo Catรฃo Araujo](mailto:rodrigo@idwall.co) | Developer Portal for internal engineers to access service catalog, documentation, observability, infrastructure and internal tooling. | | [Jaguar Land Rover](https://www.jaguarlandrover.com) | [Josh Walker](mailto:jwalke18@jaguarlandrover.com) | Users can request a Gitlab user, which creates a commit with the Terraform code. | -| [Glovo](http://glovoapp.com/) | [Yaser Toutah](mailto:yaser.toutah@glovoapp.com) | Developer Portal to improve our Developer Experience, identify ownership and track metadata for our services and tools. It's our Service Catalog. In addition to that, we use it for Service Creation, and much more. | +| [Glovo](http://glovoapp.com/) | [Yaser Toutah](mailto:yaser.toutah@glovoapp.com) | Developer Portal to improve our Developer Experience, identify ownership and track metadata for our services and tools. It's our Service Catalog. In addition to that, we use it for Service Creation, and much more. | | [Dixa](https://dixa.com) | [Jens Mรธller](mailto:jsc@dixa.com) | We are in early stages, but using it to get overview of our repositories and ownership of these. We want among many things to use it for compliance and easier access to key metrics for our repos. | | [Notino](https://notino.com) | [Jan Remunda](mailto:jan.remunda@notino.com) | Backstage is our developer portal. We use it as service catalog and for technical documentation. | | [Polarpoint](https://polarpoint.io/) | [Surj Bains](https://github.com/polarpoint-io) | We are using Backstage as our Developer portal as well as for hosting our DevOps portal for software catalog. | | [Niche](https://niche.com) | [Zach Romitz](mailto:zach.romitz@niche.com) | We are using the Software Catalog, Software Templates, API documentation, and Techdocs to try and centralize service information. | -| [Mercedes-Benz.io](https://www.mercedes-benz.io/) | [Manuel Santos](https://github.com/manusant) | At Mercedes-Benz we use it as a developer portal with software catalog, TechDocs, Scaffolding and custom plugins. It provides an overview of our tech ecosystem to our product development teams. The portal also serves as a way to foster collaboration among the numerous companies of the Mercedes-Benz Group. - - +| [Mercedes-Benz.io](https://www.mercedes-benz.io/) | [Manuel Santos](https://github.com/manusant) | At Mercedes-Benz we use it as a developer portal with software catalog, TechDocs, Scaffolding and custom plugins. It provides an overview of our tech ecosystem to our product development teams. The portal also serves as a way to foster collaboration among the numerous companies of the Mercedes-Benz Group. | +| [Funding Circle](https://www.fundingcircle.com/) | [Ariel Pacciaroni](https://github.com/arielpacciaroni) | We are building the internal developer portal using Backstage project and centralizing all services information at one place. The portal helps us track down repositories ownership as well as direct access to key information on every component. | +| [Clarivate](https://www.clarivate.com) | [Gabriele Carteni](mailto:gabriele.carteni@clarivate.com) | We are building our Developer Portal using Backstage to have a better control over our software ecosystem, integrate SDLC tools and promote best practices | +| [Cho Tot](https://www.chotot.com) | [Chotot Team](mailto:sre@chotot.vn) | Internal developer portal, service catalog with CI/CD tools. | +| [William Hill](https://www.williamhillgroup.com/) | [Pat Mills](mailto:pat.mills@williamhill.com), [Nathan Flynn](mailto:nflynn@williamhill.co.uk), and [Nishkarsh Raj](mailto:nishkarsh.raj@williamhill.co.uk) | William Hill are leveraging Backstage to build our Engineering Portal. Our mission is to centralize the software catalog inventory to enable service discoverability, reduce the onboarding time for new Engineers, provide a single pane of glass to accelerate Developer Productivity and Save Engineers time. Our aspiration is to create an InnerSource community focussed on organization-wide patterns that are re-usable and can be self-served with the Scaffolder. | +| [Vodafone NewZealand Limited](https://vodafone.co.nz) | [Ankit Gupta](mailto:ankit.gupta@vodafone.nz), [DevOps COE](mailto:devopstooling@vodafone.nz) | Vodafone NZ are leveraging Backstage to build centralised and self service Engineering Portal. Our mission is to standardised Pipeline templates across the Engineering teams, One shop stop to create the pipelines and repository with a template approach which reduces creation part from days to minutes and no wait time for developers. A unified view for Azure DevOps pipeline, Azure Repo pull requests, Deployment status from Azure RedHat Openshift-ArgoCD and SonarQube Security and code quality scans report on a single pan to provide a streamlined view for all microservices across the app stack. | diff --git a/README.md b/README.md index 5dba1fdf52..a6e740a427 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ![headline](docs/assets/headline.png) +> ๐Ÿ– From July 7th due to Summer Vacations for some of the maintainers, expect the project to move a little slower than normal, and support to be limited. Normal service will resume on August 8th ๐Ÿ + # [Backstage](https://backstage.io) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) diff --git a/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md b/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md index 2b3e02c18b..3cedf5634b 100644 --- a/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md +++ b/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md @@ -122,10 +122,7 @@ When using ALB auth you can configure it as described [here](https://backstage.i - replace the content of `packages/backend/plugin/auth.ts` with the below and tweak it according to your needs. ```ts -import { - createRouter, - createAwsAlbProvider, -} from '@backstage/plugin-auth-backend'; +import { createRouter, providers } from '@backstage/plugin-auth-backend'; import { DEFAULT_NAMESPACE, stringifyEntityRef, @@ -145,7 +142,7 @@ export default async function createPlugin({ database, discovery, providerFactories: { - awsalb: createAwsAlbProvider({ + awsalb: providers.awsAlb.create({ authHandler: async ({ fullProfile }) => { let email: string | undefined = undefined; if (fullProfile.emails && fullProfile.emails.length > 0) { diff --git a/cypress/yarn.lock b/cypress/yarn.lock index 0fc9da99b6..1ccce4ea24 100644 --- a/cypress/yarn.lock +++ b/cypress/yarn.lock @@ -304,9 +304,9 @@ cross-spawn@^7.0.0: which "^2.0.1" cypress@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/cypress/-/cypress-10.1.0.tgz#6514a26c721822a02bc194e9a7f72c3142aea174" - integrity sha512-aQ4JVZVib4Xd9FZW8IRZfKelUvqF4y5A+oUbNvn8TlsBmEfIg3m5Xd6Mt6PVU/jHiVJ9Psl905B3ZPnrDcmyuQ== + version "10.2.0" + resolved "https://registry.npmjs.org/cypress/-/cypress-10.2.0.tgz#ca078abfceb13be2a33cbba6e0e80ded770f542a" + integrity sha512-+i9lY5ENlfi2mJwsggzR+XASOIgMd7S/Gd3/13NCpv596n3YSplMAueBTIxNLcxDpTcIksp+9pM3UaDrJDpFqA== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" diff --git a/docs/FAQ.md b/docs/FAQ.md index 96d49ff060..f695a59410 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -223,8 +223,7 @@ For more information, see our No, this is not a service offering. We build the piece of software, and someone in your infrastructure team is responsible for -[deploying](https://backstage.io/docs/getting-started/deployment-k8s) and -maintaining it. +[deploying](https://backstage.io/docs/deployment) and maintaining it. ### How secure is Backstage? diff --git a/docs/auth/bitbucket/provider.md b/docs/auth/bitbucket/provider.md index c54fb75ffa..36859dab45 100644 --- a/docs/auth/bitbucket/provider.md +++ b/docs/auth/bitbucket/provider.md @@ -57,7 +57,7 @@ In order to use the Bitbucket provider for sign-in, you must configure it with a `signIn.resolver`. See the [Sign-In Resolver documentation](../identity-resolver.md) for more details on how this is done. Note that for the Bitbucket provider, you'll want to use -`bitbucket` as the provider ID, and `createBitbucketProvider` for the provider +`bitbucket` as the provider ID, and `providers.bitbucket.create` for the provider factory. The `@backstage/plugin-auth-backend` plugin also comes with two built-in @@ -74,16 +74,14 @@ same way, but uses the Bitbucket user ID instead, and matches on the The following is an example of how to use one of the built-in resolvers: ```ts -import { - createBitbucketProvider, - bitbucketUsernameSignInResolver, -} from '@backstage/plugin-auth-backend'; +import { providers } from '@backstage/plugin-auth-backend'; // ... providerFactories: { - bitbucket: createBitbucketProvider({ + bitbucket: providers.bitbucket.create({ signIn: { - resolver: bitbucketUsernameSignInResolver, + resolver: + providers.bitbucket.resolvers.usernameMatchingUserEntityAnnotation(), }, }), }, diff --git a/docs/auth/identity-resolver.md b/docs/auth/identity-resolver.md index b314954105..06ada040e4 100644 --- a/docs/auth/identity-resolver.md +++ b/docs/auth/identity-resolver.md @@ -110,6 +110,7 @@ Now let's look at the example, with the rest of the commentary being made with i the code comments: ```ts +// File: packages/backend/src/plugins/auth.ts import { createRouter, providers, @@ -170,11 +171,21 @@ property of each of the auth provider integrations. For example, the Google prov a built in resolver that works just like the one we defined above: ```ts -providers.google.create({ - signIn: { - resolver: providers.google.resolvers.emailLocalPartMatchingUserEntityName(), - }, -}); +// File: packages/backend/src/plugins/auth.ts +export default async function createPlugin( + // ... + return await createRouter({ + // ... + providerFactories: { + // ... + google: providers.google.create({ + signIn: { + resolver: providers.google.resolvers.emailLocalPartMatchingUserEntityName(), + }, + }); + } + }) +) ``` There are also other options, like the this one that looks up a user @@ -195,40 +206,49 @@ that happens during sign-in you can replace `ctx.signInWithCatalogUser` with a s of lower-level calls: ```ts +// File: packages/backend/src/plugins/auth.ts import { getDefaultOwnershipRefs } from '@backstage/plugin-auth-backend'; -// This example only shows the resolver function itself. -async ({ profile: { email } }, ctx) => { - if (!email) { - throw new Error('User profile contained no email'); - } +export default async function createPlugin( + // ... + return await createRouter({ + // ... + providerFactories: { + // ... + google: async ({ profile: { email } }, ctx) => { + if (!email) { + throw new Error('User profile contained no email'); + } - // This step calls the catalog to look up a user entity. You could for example - // replace it with a call to a different external system. - const { entity } = await ctx.findCatalogUser({ - annotations: { - 'acme.org/email': email, - }, - }); + // This step calls the catalog to look up a user entity. You could for example + // replace it with a call to a different external system. + const { entity } = await ctx.findCatalogUser({ + annotations: { + 'acme.org/email': email, + }, + }); - // In this step we extract the ownership references from the user entity using - // the standard logic. It uses a reference to the entity itself, as well as the - // target of each `memberOf` relation where the target is of the kind `Group`. - // - // If you replace the catalog lookup with something does not return - // an entity you will need to replace this step as well. - // - // You might also replace it if you for example want to filter out certain groups. - const ownershipRefs = getDefaultOwnershipRefs(entity); + // In this step we extract the ownership references from the user entity using + // the standard logic. It uses a reference to the entity itself, as well as the + // target of each `memberOf` relation where the target is of the kind `Group`. + // + // If you replace the catalog lookup with something that does not return + // an entity you will need to replace this step as well. + // + // You might also replace it if you for example want to filter out certain groups. + const ownershipRefs = getDefaultOwnershipRefs(entity); - // The last step is to issue the token, where we might provide more options in the future. - return ctx.issueToken({ - claims: { - sub: stringifyEntityRef(entity), - ent: ownershipRefs, - }, - }); -}; + // The last step is to issue the token, where we might provide more options in the future. + return ctx.issueToken({ + claims: { + sub: stringifyEntityRef(entity), + ent: ownershipRefs, + }, + }); + }; + } + }) +) ``` ## Sign-In without Users in the Catalog @@ -252,38 +272,47 @@ check like in the example below, or you might for example look up the GitHub org that the user belongs to using the user access token in the provided result object. ```ts +// File: packages/backend/src/plugins/auth.ts import { DEFAULT_NAMESPACE, stringifyEntityRef, } from '@backstage/catalog-model'; -// This example only shows the resolver function itself. -async ({ profile }, ctx) => { - if (!profile.email) { - throw new Error( - 'Login failed, user profile does not contain an email', - ); - } - // Split the email into the local part and the domain. - const [localPart, domain] = profile.email.split('@'); +export default async function createPlugin( + // ... + return await createRouter({ + // ... + providerFactories: { + // ... + google: async ({ profile }, ctx) => { + if (!profile.email) { + throw new Error( + 'Login failed, user profile does not contain an email', + ); + } + // Split the email into the local part and the domain. + const [localPart, domain] = profile.email.split('@'); - // Next we verify the email domain. It is recommended to include this - // kind of check if you don't look up the user in an external service. - if (domain !== 'acme.org') { - throw new Error('Login failed, user email domain check failed'); - } + // Next we verify the email domain. It is recommended to include this + // kind of check if you don't look up the user in an external service. + if (domain !== 'acme.org') { + throw new Error('Login failed, user email domain check failed'); + } - // By using `stringifyEntityRef` we ensure that the reference is formatted correctly - const userEntityRef = stringifyEntityRef({ - kind: 'User', - name: localPart, - namespace: DEFAULT_NAMESPACE, - }); + // By using `stringifyEntityRef` we ensure that the reference is formatted correctly + const userEntityRef = stringifyEntityRef({ + kind: 'User', + name: localPart, + namespace: DEFAULT_NAMESPACE, + }); - return ctx.issueToken({ - claims: { - sub: userEntityRef, - ent: [userEntityRef], - }, - }); -}, + return ctx.issueToken({ + claims: { + sub: userEntityRef, + ent: [userEntityRef], + }, + }); + }, + } + }) +) ``` ## AuthHandler @@ -304,7 +333,7 @@ export default async function createPlugin( return await createRouter({ ... providerFactories: { - google: createGoogleProvider({ + google: providers.google.create({ authHandler: async ({ fullProfile // Type: passport.Profile, idToken // Type: (Optional) string, diff --git a/docs/features/search/search-engines.md b/docs/features/search/search-engines.md index 9bb8b8c343..a5ff780c8a 100644 --- a/docs/features/search/search-engines.md +++ b/docs/features/search/search-engines.md @@ -80,15 +80,16 @@ const searchEngine = await ElasticSearchSearchEngine.initialize({ const indexBuilder = new IndexBuilder({ logger: env.logger, searchEngine }); ``` -For the engine to be available, your backend package needs a dependency into +For the engine to be available, your backend package needs a dependency on package `@backstage/plugin-search-backend-module-elasticsearch`. ElasticSearch needs some additional configuration before it is ready to use within your instance. The configuration options are documented in the [configuration schema definition file.](https://github.com/backstage/backstage/blob/master/plugins/search-backend-module-elasticsearch/config.d.ts) -The underlying functionality is using official ElasticSearch client version 7.x, -meaning that ElasticSearch version 7 is the only one confirmed to be supported. +The underlying functionality uses either the official ElasticSearch client +version 7.x (meaning that ElasticSearch version 7 is the only one confirmed to +be supported), or the OpenSearch client, when the `aws` provider is configured. Should you need to create your own bespoke search experiences that require more than just a query translator (such as faceted search or Relay pagination), you @@ -97,9 +98,19 @@ search clients. The version of the client need not be the same as one used internally by the elastic search engine plugin. For example: ```typescript -import { Client } from '@elastic/elastic-search'; +import { isOpenSearchCompatible } from '@backstage/plugin-search-backend-module-elasticsearch'; +import { Client as ElasticClient } from '@elastic/elastic-search'; +import { Client as OpenSearchClient } from '@opensearch-project/opensearch'; -const client = searchEngine.newClient(options => new Client(options)); +const client = searchEngine.newClient(options => { + // In reality, you would only import / instantiate one of the following, but + // for illustrative purposes, here are both: + if (isOpenSearchCompatible(options)) { + return new OpenSearchClient(options); + } else { + return new ElasticClient(options); + } +}); ``` #### Set custom index template diff --git a/docs/features/techdocs/configuration.md b/docs/features/techdocs/configuration.md index d14850da77..9440d9a824 100644 --- a/docs/features/techdocs/configuration.md +++ b/docs/features/techdocs/configuration.md @@ -74,6 +74,12 @@ techdocs: type: 'local' + # Optional when techdocs.publisher.type is set to 'local'. + + local: + # (Optional). Set this to specify where the generated documentation is stored. + publishDirectory: '/path/to/local/directory' + # Required when techdocs.publisher.type is set to 'googleGcs'. Skip otherwise. googleGcs: diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index 59780d2a01..3413f32875 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -155,6 +155,8 @@ auth: clientSecret: YOUR CLIENT SECRET ``` +### Add sign-in option to the frontend + Backstage will re-read the configuration. If there's no errors, that's great! We can continue with the last part of the configuration. The next step is needed to change the sign-in page, this you actually need to add in the source code. @@ -185,10 +187,11 @@ components: { }, ``` -> Since [v1.1.0](https://github.com/backstage/backstage/releases/tag/v1.1.0-next.3), you must provide an [explicit sign-in resolver](../auth/identity-resolver.md). +> Note: The default Backstage app comes with a guest Sign In Resolver. This resolver makes all users share a single "guest" identity and is only intended as a minimum requirement to quickly get up and running. You can read more about how [Sign In Resolvers](../auth/identity-resolver.md#sign-in-resolvers) play a role in creating a [Backstage User Identity](../auth/identity-resolver.md#backstage-user-identity) for logged in users. -That should be it. You can stop your Backstage App. When you start it again and -go to your Backstage portal in your browser, you should have your login prompt! +Restart Backstage from the terminal, by stopping it with `Control-C`, and starting it with `yarn dev` . You should be welcomed by a login prompt! + +> Note: Sometimes the frontend starts before the backend resulting in errors on the sign in page. Wait for the backend to start and then reload Backstage to proceed. To learn more about Authentication in Backstage, here are some docs you could read: diff --git a/docs/getting-started/homepage.md b/docs/getting-started/homepage.md index 2f86380b13..eac76b5fdc 100644 --- a/docs/getting-started/homepage.md +++ b/docs/getting-started/homepage.md @@ -157,7 +157,7 @@ export const HomePage = () => { return ( - + ); diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index 8c2f6bc865..d560b97eae 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -21,7 +21,7 @@ guide to do a repository-based installation. ### Prerequisites -- Access to a Linux-based operating system, such as Linux, MacOS or +- Access to a Unix-based operating system, such as Linux, MacOS or [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/) - An account with elevated rights to install the dependencies - `curl` or `wget` installed diff --git a/docs/getting-started/project-structure.md b/docs/getting-started/project-structure.md index cbe84db2e0..8dca898ae7 100644 --- a/docs/getting-started/project-structure.md +++ b/docs/getting-started/project-structure.md @@ -28,7 +28,7 @@ the code. sub-folder which is used for a markdown spellchecker. - [`.yarn/`](https://github.com/backstage/backstage/tree/master/.yarn) - - Backstage ships with it's own `yarn` implementation. This allows us to have + Backstage ships with its own `yarn` implementation. This allows us to have better control over our `yarn.lock` file and hopefully avoid problems due to yarn versioning differences. diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index c607a6550e..6a420462c0 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -45,7 +45,7 @@ catalog: anotherProviderId: # another identifier organization: myorg project: myproject - repository: '*' # this will match all repos starting with service-* + repository: '*' # this will match all repos path: /src/*/catalog-info.yaml # this will search for files deep inside the /src folder yetAotherProviderId: # guess, what? Another one :) host: selfhostedazure.yourcompany.com diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index ea151e9415..aad73c8209 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -22,7 +22,7 @@ catalog: yourProviderId: host: gitlab-host # Identifies one of the hosts set up in the integrations branch: main # Optional. Uses `master` as default - group: example-group # Group and subgroup (if needed) to look for repositories + group: example-group # Optional. Group and subgroup (if needed) to look for repositories. If not present the whole project will be scanned entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` ``` diff --git a/docs/overview/versioning-policy.md b/docs/overview/versioning-policy.md index 7430f3c200..282906c580 100644 --- a/docs/overview/versioning-policy.md +++ b/docs/overview/versioning-policy.md @@ -135,3 +135,21 @@ package export. accessed via `/beta` or `/alpha` imports. - `@alpha` - here be dragons. Not visible in the main package entry point, alpha exports must be accessed via `/alpha` imports. + +## Node.js Releases + +The Backstage project uses [Node.js](https://nodejs.org/) for both its development +tooling and backend runtime. In order for expectations to be clear we use the +following schedule for determining the [Node.js releases](https://nodejs.org/en/about/releases/) that we support: + +- At any given point in time we support exactly two adjacent even-numbered + releases of Node.js, for example v12 and v14. +- Three months before a Node.js release becomes _Active LTS_ we switch support + to that release and the previous one. This is halfway through the _Current LTS_ + cycle for that release and occurs at the end of July every year. + +When we say _Supporting_ a Node.js release, that means the following: + +- The CI pipeline in the main Backstage repo tests towards the supported releases, and we encourage any other Backstage related projects to do the same. +- New Backstage projects created with `@backstage/create-app` will have their `engines.node` version set accordingly. +- Dropping compatibility with unsupported releases is not considered a breaking change. This includes using new syntax or APIs, as well as bumping dependencies that drop support for these versions. diff --git a/docs/releases/v1.4.0-next.0-changelog.md b/docs/releases/v1.4.0-next.0-changelog.md new file mode 100644 index 0000000000..c6b9fd7cf9 --- /dev/null +++ b/docs/releases/v1.4.0-next.0-changelog.md @@ -0,0 +1,1365 @@ +# Release v1.4.0-next.0 + +## @backstage/catalog-model@1.1.0-next.0 + +### Minor Changes + +- 1380b389dc: Adding an optional type field to entity links to group and categorize links + +### Patch Changes + +- c3cfc83af2: Updated JSDoc to be MDX compatible. + +## @backstage/plugin-api-docs-module-protoc-gen-doc@0.1.0-next.0 + +### Minor Changes + +- e0328f2107: Added the new `grpcDocsApiWidget` to render `protoc-gen-doc` generated descriptors by the `grpc-docs` package. + +## @backstage/plugin-kubernetes-backend@0.7.0-next.0 + +### Minor Changes + +- 0791af993f: Refactor `KubernetesObjectsProvider` with new methods, `KubernetesServiceLocator` now takes an `Entity` instead of `serviceId` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-kubernetes-common@0.4.0-next.0 + +## @backstage/plugin-kubernetes-common@0.4.0-next.0 + +### Minor Changes + +- 0791af993f: Refactor `KubernetesObjectsProvider` with new methods, `KubernetesServiceLocator` now takes an `Entity` instead of `serviceId` + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + +## @backstage/plugin-pagerduty@0.5.0-next.0 + +### Minor Changes + +- 8798f8d93f: Introduces a new annotation `pagerduty.com/service-id` that can be used instead of the `pagerduty.com/integration-key` annotation. + _Note: If both annotations are specified on a given Entity, then the `pagerduty.com/integration-key` annotation will be prefered_ + + **BREAKING** The `PagerDutyClient.fromConfig` static method now expects a `FetchApi` compatible object and has been refactored to + accept 2 arguments: config and ClientApiDependencies + The `PagerDutyClient` now relies on a `fetchApi` being available to execute `fetch` requests. + + **BREAKING** A new query method `getServiceByEntity` that is used to query for Services by either the `integrationKey` or `serviceId` + annotation values if they are defined. The `integrationKey` value is preferred currently over `serviceId`. As such, the previous + `getServiceByIntegrationKey` method has been removed. + + **BREAKING** The return values for each Client query method has been changed to return an object instead of raw values. + For example, the `getIncidentsByServiceId` query method now returns an object in the shape of `{ incidents: Incident[] }` + instead of just `Incident[]`. + This same pattern goes for `getChangeEventsByServiceId` and `getOnCallByPolicyId` functions. + + **BREAKING** All public exported types that relate to entities within PagerDuty have been prefixed with `PagerDuty` (e.g. `ServicesResponse` is now `PagerDutyServicesResponse` and `User` is now `PagerDutyUser`) + + In addition, various enhancements/bug fixes were introduced: + + - The `PagerDutyCard` component now wraps error and loading messages with an `InfoCard` to contain errors/messages. This enforces a consistent experience on the EntityPage + - If no service can be found for the provided integration key, a new Error Message Empty State component will be shown instead of an error alert + - Introduces the `fetchApi` to replace standard `window.fetch` + - ensures that Identity Authorization is respected and provided in API requests + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-scaffolder@1.4.0-next.0 + +### Minor Changes + +- 3500c13a33: A new template editor has been added which is accessible via the context menu on the top right hand corner of the Create page. It allows you to load a template from a local directory, edit it with a preview, execute it in dry-run mode, and view the results. Note that the [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API) must be supported by your browser for this to be available. + + To support the new template editor the `ScaffolderApi` now has an optional `dryRun` method, which is implemented by the default `ScaffolderClient`. + +### Patch Changes + +- 37539e29d8: The template editor now shows the cause of request errors that happen during a dry-run. +- 842282ecf9: Bumped `codemirror` dependencies to `v6.0.0`. +- 464bb0e6c8: The max content size for dry-run files has been reduced from 256k to 64k. +- a7c0b34d70: Swap usage of `MaterialTable` with `Table` from `core-components` +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/plugin-scaffolder-common@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + +## @backstage/plugin-scaffolder-backend@1.4.0-next.0 + +### Minor Changes + +- 3500c13a33: Added a new `/v2/dry-run` endpoint that allows for a synchronous dry run of a provided template. A `supportsDryRun` option has been added to `createTemplateAction`, which signals whether the action should be executed during dry runs. When enabled, the action context will have the new `isDryRun` property set to signal if the action is being executed during a dry run. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-scaffolder-common@1.1.2-next.0 + +## @backstage/plugin-vault-backend@0.2.0-next.0 + +### Minor Changes + +- 5ebf2c7023: Throw exceptions instead of swallow them, remove some exported types from the `api-report`, small changes in the API responses & expose the vault `baseUrl` to the frontend as well + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/backend-test-utils@0.1.26-next.0 + +## @backstage/app-defaults@1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/core-app-api@1.0.4-next.0 + +## @backstage/backend-common@0.14.1-next.0 + +### Patch Changes + +- b1edb5cfd9: Fix parsing of S3 URLs for the default region. +- c3cfc83af2: Updated JSDoc to be MDX compatible. +- Updated dependencies + - @backstage/integration@1.2.2-next.0 + +## @backstage/backend-tasks@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/backend-test-utils@0.1.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/cli@0.17.3-next.0 + +## @backstage/catalog-client@1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + +## @backstage/cli@0.17.3-next.0 + +### Patch Changes + +- d2256c0384: Fix `webpack-dev-server` deprecations. + +## @backstage/core-app-api@1.0.4-next.0 + +### Patch Changes + +- 8fe2357101: The `signOut` method of the `IdentityApi` will now navigate the user back to the base URL of the app as indicated by the `app.baseUrl` config. + +## @backstage/core-components@0.9.6-next.0 + +### Patch Changes + +- c3cfc83af2: Updated JSDoc to be MDX compatible. + +## @backstage/create-app@0.4.29-next.0 + +### Patch Changes + +- bc87604c26: Added an explicit `node-gyp` dependency to the root `package.json`. This is to work around a bug in older versions of `node-gyp` that causes Python execution to fail on macOS. + + You can add this workaround to your existing project by adding `node-gyp` as a `devDependency` in your root `package.json` file: + + ```diff + "devDependencies": { + + "node-gyp": "^9.0.0" + }, + ``` + +## @backstage/dev-utils@1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/app-defaults@1.0.4-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + +## @backstage/integration@1.2.2-next.0 + +### Patch Changes + +- 8829e175f2: Allow frontend visibility for `integrations` itself. + +## @backstage/integration-react@1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + +## @techdocs/cli@1.1.3-next.0 + +### Patch Changes + +- 14ce0d9347: Fixed a bug that prevented docker images from being pulled by default when generating TechDocs. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-techdocs-node@1.1.3-next.0 + +## @backstage/test-utils@1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.0.4-next.0 + +## @backstage/plugin-adr@0.1.2-next.0 + +### Patch Changes + +- 7d47e7e512: Track discover event and result rank for `AdrSearchResultListItem` +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-adr-common@0.1.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + +## @backstage/plugin-adr-backend@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-adr-common@0.1.2-next.0 + +## @backstage/plugin-adr-common@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + +## @backstage/plugin-airbrake@0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/dev-utils@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + +## @backstage/plugin-airbrake-backend@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-allure@0.1.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-analytics-module-ga@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-apache-airflow@0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-api-docs@0.8.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-app-backend@0.3.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-auth-backend@0.14.2-next.0 + +### Patch Changes + +- 859346bfbb: Updated dependency `google-auth-library` to `^8.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-auth-node@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-azure-devops@0.1.23-next.0 + +### Patch Changes + +- e049e41048: Exporting azureDevOpsApiRef, AzureGitTagsIcon, and all hooks for the benefit of other plugins. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-azure-devops-backend@0.3.13-next.0 + +### Patch Changes + +- 13a232ec22: Added comments to example to help avoid confusion as to where lines need to be added +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-badges@0.2.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-badges-backend@0.1.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-bazaar@0.1.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/cli@0.17.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-bazaar-backend@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/backend-test-utils@0.1.26-next.0 + +## @backstage/plugin-bitbucket-cloud-common@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.2.2-next.0 + +## @backstage/plugin-bitrise@0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-catalog@1.3.1-next.0 + +### Patch Changes + +- dcaf1cb418: Previously, the color of the Entity Context Menu (in the Entity Page Header) was hardcoded as `white`. + + This was an issue for themes that use a header with a white background. By default, the color of the icon is now `theme.palette.bursts.fontColor`. + + It can now also be overridden in the theme, which is only necessary if the header title, subtitle and three-dots icon need to have different colors. For example: + + ```typescript + export function createThemeOverrides(theme: BackstageTheme): Overrides { + return { + PluginCatalogEntityContextMenu: { + button: { + color: 'blue', + }, + }, + ... + }, + ... + } + ``` + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + +## @backstage/plugin-catalog-backend@1.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-scaffolder-common@1.1.2-next.0 + +## @backstage/plugin-catalog-backend-module-aws@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + +## @backstage/plugin-catalog-backend-module-azure@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.1.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.1.1-next.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + +## @backstage/plugin-catalog-graph@0.2.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-catalog-graphql@0.3.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + +## @backstage/plugin-catalog-import@0.8.10-next.0 + +### Patch Changes + +- 272106fdad: Support use without `integrations` or only integrations without frontend visible properties (e.g., `bitbucketCloud`) being configured by checking `integrations.github` directly without attempting to load `integrations`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + +## @backstage/plugin-catalog-react@1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-cicd-statistics@0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-cicd-statistics@0.1.9-next.0 + +## @backstage/plugin-circleci@0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-cloudbuild@0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-code-climate@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-code-coverage@0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-code-coverage-backend@0.1.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-codescene@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-config-schema@0.1.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-cost-insights@0.11.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-dynatrace@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-explore@0.3.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-firehydrant@0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-fossa@0.2.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-gcalendar@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-gcp-projects@0.3.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-git-release-manager@0.3.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + +## @backstage/plugin-github-actions@0.5.7-next.0 + +### Patch Changes + +- 217f919f0a: Minor cleanup of the API surface. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-github-deployments@0.1.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + +## @backstage/plugin-github-pull-requests-board@0.1.1-next.0 + +### Patch Changes + +- c6690d9d24: Fix bug on fetching teams repositories where were being filtered by type service unnecessarily +- 04e1504e85: Support namespaced teams and fetch all kinds +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-gitops-profiles@0.3.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-gocd@0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-graphiql@0.2.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-graphql-backend@0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-catalog-graphql@0.3.11-next.0 + +## @backstage/plugin-home@0.4.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-stack-overflow@0.1.3-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-ilert@0.1.33-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-jenkins@0.7.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-jenkins-backend@0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-kafka@0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-kafka-backend@0.2.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + +## @backstage/plugin-kubernetes@0.6.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-kubernetes-common@0.4.0-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-lighthouse@0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-newrelic@0.3.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-newrelic-dashboard@0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-org@0.5.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-periskop@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-periskop-backend@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-permission-backend@0.5.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + +## @backstage/plugin-permission-node@0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + +## @backstage/plugin-proxy-backend@0.2.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-rollbar@0.4.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-rollbar-backend@0.1.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + - @backstage/integration@1.2.2-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + - @backstage/integration@1.2.2-next.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + +## @backstage/plugin-scaffolder-common@1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + +## @backstage/plugin-search@0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + +## @backstage/plugin-search-backend@0.5.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + - @backstage/plugin-search-backend-node@0.6.3-next.0 + +## @backstage/plugin-search-backend-module-elasticsearch@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@0.6.3-next.0 + +## @backstage/plugin-search-backend-module-pg@0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-search-backend-node@0.6.3-next.0 + +## @backstage/plugin-search-backend-node@0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + +## @backstage/plugin-search-react@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-sentry@0.3.45-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-shortcuts@0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-sonarqube@0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-splunk-on-call@0.3.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-stack-overflow@0.1.3-next.0 + +### Patch Changes + +- 12ae3eed2f: - Publicly exports `StackOverflowIcon`. + - `HomePageStackOverflowQuestions` accepts optional icon property. +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-home@0.4.23-next.0 + +## @backstage/plugin-tech-insights@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-tech-insights-backend@0.4.2-next.0 + +### Patch Changes + +- 2ef58ab539: TechInsightsBackend: Added missing 'scheduler' to code examples +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-tech-insights-node@0.3.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-tech-insights-node@0.3.2-next.0 + +## @backstage/plugin-tech-insights-node@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + +## @backstage/plugin-tech-radar@0.5.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-techdocs@1.2.1-next.0 + +### Patch Changes + +- 3cbebf710e: Reorder browser tab title in Techdocs pages to have the site name first. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/plugin-techdocs@1.2.1-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + +## @backstage/plugin-techdocs-backend@1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-techdocs-node@1.1.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + +## @backstage/plugin-techdocs-node@1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + +## @backstage/plugin-techdocs-react@1.0.2-next.0 + +### Patch Changes + +- c3cfc83af2: Updated JSDoc to be MDX compatible. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-todo@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-todo-backend@0.1.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## @backstage/plugin-user-settings@0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @backstage/plugin-vault@0.1.1-next.0 + +### Patch Changes + +- 5ebf2c7023: Export missing parameters and added them to the api-report. Also adapted the API to the expected response from the backend +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + +## @backstage/plugin-xcmetrics@0.2.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## example-app@0.2.73-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.4.0-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/plugin-stack-overflow@0.1.3-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/cli@0.17.3-next.0 + - @backstage/plugin-azure-devops@0.1.23-next.0 + - @backstage/plugin-techdocs@1.2.1-next.0 + - @backstage/plugin-catalog-import@0.8.10-next.0 + - @backstage/plugin-pagerduty@0.5.0-next.0 + - @backstage/plugin-github-actions@0.5.7-next.0 + - @backstage/plugin-airbrake@0.3.7-next.0 + - @backstage/plugin-api-docs@0.8.7-next.0 + - @backstage/plugin-badges@0.2.31-next.0 + - @backstage/plugin-catalog-graph@0.2.19-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/plugin-circleci@0.3.7-next.0 + - @backstage/plugin-cloudbuild@0.3.7-next.0 + - @backstage/plugin-code-coverage@0.1.34-next.0 + - @backstage/plugin-cost-insights@0.11.29-next.0 + - @backstage/plugin-dynatrace@0.1.1-next.0 + - @backstage/plugin-explore@0.3.38-next.0 + - @backstage/plugin-gocd@0.1.13-next.0 + - @backstage/plugin-home@0.4.23-next.0 + - @backstage/plugin-jenkins@0.7.6-next.0 + - @backstage/plugin-kafka@0.3.7-next.0 + - @backstage/plugin-kubernetes@0.6.7-next.0 + - @backstage/plugin-lighthouse@0.3.7-next.0 + - @backstage/plugin-newrelic-dashboard@0.1.15-next.0 + - @backstage/plugin-org@0.5.7-next.0 + - @backstage/plugin-rollbar@0.4.7-next.0 + - @backstage/plugin-search@0.9.1-next.0 + - @backstage/plugin-sentry@0.3.45-next.0 + - @backstage/plugin-tech-insights@0.2.3-next.0 + - @backstage/plugin-todo@0.2.9-next.0 + - @backstage/app-defaults@1.0.4-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-apache-airflow@0.1.15-next.0 + - @backstage/plugin-gcalendar@0.3.3-next.0 + - @backstage/plugin-gcp-projects@0.3.26-next.0 + - @backstage/plugin-graphiql@0.2.39-next.0 + - @backstage/plugin-newrelic@0.3.25-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + - @backstage/plugin-shortcuts@0.2.8-next.0 + - @backstage/plugin-tech-radar@0.5.14-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.0 + - @backstage/plugin-user-settings@0.4.6-next.0 + +## example-backend@0.2.73-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights-backend@0.4.2-next.0 + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + - @backstage/plugin-auth-backend@0.14.2-next.0 + - @backstage/plugin-kubernetes-backend@0.7.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-azure-devops-backend@0.3.13-next.0 + - example-app@0.2.73-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-app-backend@0.3.34-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/plugin-badges-backend@0.1.28-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/plugin-code-coverage-backend@0.1.32-next.0 + - @backstage/plugin-graphql-backend@0.1.24-next.0 + - @backstage/plugin-jenkins-backend@0.1.24-next.0 + - @backstage/plugin-kafka-backend@0.2.27-next.0 + - @backstage/plugin-permission-backend@0.5.9-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + - @backstage/plugin-proxy-backend@0.2.28-next.0 + - @backstage/plugin-rollbar-backend@0.1.31-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.0 + - @backstage/plugin-search-backend@0.5.4-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@0.1.6-next.0 + - @backstage/plugin-search-backend-module-pg@0.3.5-next.0 + - @backstage/plugin-search-backend-node@0.6.3-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.0 + - @backstage/plugin-tech-insights-node@0.3.2-next.0 + - @backstage/plugin-techdocs-backend@1.1.3-next.0 + - @backstage/plugin-todo-backend@0.1.31-next.0 + - @backstage/catalog-client@1.0.4-next.0 + +## techdocs-cli-embedded-app@0.2.72-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/cli@0.17.3-next.0 + - @backstage/plugin-techdocs@1.2.1-next.0 + - @backstage/app-defaults@1.0.4-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + +## @internal/plugin-todo-list@1.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + +## @internal/plugin-todo-list-backend@1.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 diff --git a/docs/releases/v1.4.0-next.1-changelog.md b/docs/releases/v1.4.0-next.1-changelog.md new file mode 100644 index 0000000000..0780178d4d --- /dev/null +++ b/docs/releases/v1.4.0-next.1-changelog.md @@ -0,0 +1,1474 @@ +# Release v1.4.0-next.1 + +## @backstage/cli@0.18.0-next.1 + +### Minor Changes + +- 96a82d9791: **BREAKING**: Removed the following deprecated package commands: + + - `app:build` - Use `package build` instead + - `app:serve` - Use `package start` instead + - `backend:build` - Use `package build` instead + - `backend:bundle` - Use `package build` instead + - `backend:dev` - Use `package start` instead + - `plugin:build` - Use `package build` instead + - `plugin:serve` - Use `package start` instead + - `build` - Use `package build` instead + - `lint` - Use `package lint` instead + - `prepack` - Use `package prepack` instead + - `postpack` - Use `package postpack` instead + + In order to replace these you need to have [migrated to using package roles](https://backstage.io/docs/tutorials/package-role-migration). + +### Patch Changes + +- 86640214f0: Upgrade `@rollup/plugin-node-resolve` to `^13.0.6` +- e661242844: Updated dependency `run-script-webpack-plugin` to `^0.1.0`. +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + - @backstage/config-loader@1.1.3-next.0 + +## @backstage/errors@1.1.0-next.0 + +### Minor Changes + +- 6d61b44466: The `ResponseError.fromResponse` now accepts a more narrow response type, in order to avoid incompatibilities between different fetch implementations. + + The `response` property of `ResponseError` has also been narrowed to a new `ConsumedResponse` type that omits all the properties for consuming the body of the response. This is not considered a breaking change as it was always an error to try to consume the body of the response. + +## @backstage/plugin-apache-airflow@0.2.0-next.1 + +### Minor Changes + +- 01f976ea72: Exposed DagTableComponent as standalone component + added a prop to get only select DAGs instead of the full list + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + +## @backstage/plugin-auth-backend@0.15.0-next.1 + +### Minor Changes + +- 9d4040777e: **BREAKING**: Removed all directly exported auth provider factories, option types, and sign-in resolvers. For example: `AwsAlbProviderOptions`, `bitbucketUserIdSignInResolver`, `createGithubProvider`. These are all still accessible via the `providers` export. For example, use `providers.github.create()` rather than `createGithubProvider()`, and `providers.bitbucket.resolvers.userIdMatchingUserEntityAnnotation()` rather than `bitbucketUserIdSignInResolver`. + + **BREAKING**: Removed the exported `AuthProviderFactoryOptions` type as well as the deprecated option fields of the `AuthProviderFactory` callback. This includes the `tokenManager`, `tokenIssuer`, `discovery`, and `catalogApi` fields. Existing usage of these should be replaced with the new utilities in the `resolverContext` field. The deprecated `TokenIssuer` type is now also removed, since it is no longer used. + + **BREAKING**: Removed `getEntityClaims`, use `getDefaultOwnershipEntityRefs` instead. + + **DEPRECATION**: Deprecated `AtlassianAuthProvider` as it was unintentionally exported. + +### Patch Changes + +- f2cf79d62e: Added an option for the auth backend router to select the algorithm for the JWT token signing keys +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-auth-node@0.2.3-next.1 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.0-next.0 + +### Minor Changes + +- 67503d159e: Add basic OpenAPI \\$ref support. + + For more information see [here](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-openapi). + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-search-backend-module-elasticsearch@0.2.0-next.1 + +### Minor Changes + +- c5af773757: **BREAKING**: In order to remain interoperable with all currently supported + deployments of Elasticsearch, this package will now conditionally use either + the `@elastic/elasticsearch` or `@opensearch-project/opensearch` client when + communicating with your deployed cluster. + + If you do not rely on types exported from this package, or if you do not make + use of the `createElasticSearchClientOptions` or `newClient` methods on the + `ElasticSearchSearchEngine` class, then upgrading to this version should not + require any further action on your part. Everything will continue to work as it + always has. + + If you _do_ rely on either of the above methods or any underlying types, some + changes may be needed to your custom code. A type guard is now exported by this + package (`isOpenSearchCompatible(options)`), which you may use to help clarify + which client options are compatible with which client constructors. + + If you are using this package with the `search.elasticsearch.provider` set to + `aws`, and you are making use of the `newClient` method in particular, you may + wish to start using the `@opensearch-project/opensearch` client in your custom + code. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-techdocs-backend@1.2.0-next.1 + +### Minor Changes + +- 860765ff45: Added local publishing target directory `config`: `techdocs.publisher.local.publishDirectory` + +### Patch Changes + +- 726577958f: Add sample headings on the documented component homepage. +- Updated dependencies + - @backstage/plugin-techdocs-node@1.2.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-techdocs-node@1.2.0-next.1 + +### Minor Changes + +- 860765ff45: Added local publishing target directory `config`: `techdocs.publisher.local.publishDirectory` + +### Patch Changes + +- a5d73da942: Fix the flag parsing for `legacyCopyReadmeMdToIndexMd` in `techdocs-cli generate` command, and decouple it's logic from the `techdocs-ref` flag. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/app-defaults@1.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## @backstage/backend-common@0.14.1-next.1 + +### Patch Changes + +- 0fc57887e8: Improve plural handling in logging output for secrets +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/config-loader@1.1.3-next.0 + +## @backstage/backend-tasks@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## @backstage/backend-test-utils@0.1.26-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.18.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + +## @backstage/catalog-client@1.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + +## @backstage/catalog-model@1.1.0-next.1 + +### Patch Changes + +- f1dcc6f3c6: Added type predicates for all entity types, e.g. isUserEntity +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + +## @backstage/config-loader@1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + +## @backstage/core-components@0.9.6-next.1 + +### Patch Changes + +- 3c440ea77e: Change BackstageIconLinkVertical style to use pallette instead of explicit color +- 7e115d42f9: Support displaying subtitle text in `SidebarSubmenuItem` +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## @backstage/create-app@0.4.29-next.1 + +### Patch Changes + +- Bumped create-app version. + +## @backstage/dev-utils@1.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/app-defaults@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/test-utils@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/integration@1.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + +## @backstage/integration-react@1.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + +## @techdocs/cli@1.1.3-next.1 + +### Patch Changes + +- a5d73da942: Fix the flag parsing for `legacyCopyReadmeMdToIndexMd` in `techdocs-cli generate` command, and decouple it's logic from the `techdocs-ref` flag. +- Updated dependencies + - @backstage/plugin-techdocs-node@1.2.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + +## @backstage/test-utils@1.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## @backstage/theme@0.2.16-next.0 + +### Patch Changes + +- 4c09c09102: Adds optional `htmlFontSize` property and also sets typography design tokens for h5 and h6 in base theme. + +## @backstage/plugin-adr@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-adr-common@0.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## @backstage/plugin-adr-backend@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-adr-common@0.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-adr-common@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-airbrake@0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/dev-utils@1.0.4-next.1 + - @backstage/test-utils@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-allure@0.1.23-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-analytics-module-ga@0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-api-docs@0.8.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-app-backend@0.3.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/config-loader@1.1.3-next.0 + +## @backstage/plugin-auth-node@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## @backstage/plugin-azure-devops@0.1.23-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-badges@0.2.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-badges-backend@0.1.28-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + +## @backstage/plugin-bazaar@0.1.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/cli@0.18.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-bitrise@0.1.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-catalog@1.3.1-next.1 + +### Patch Changes + +- f1dcc6f3c6: Use entity type predicates from catalog-model +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## @backstage/plugin-catalog-backend@1.2.1-next.1 + +### Patch Changes + +- f1dcc6f3c6: Use entity type predicates from catalog-model +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-catalog-backend-module-aws@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-catalog-backend-module-azure@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-catalog-backend-module-github@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.5-next.1 + +### Patch Changes + +- 49ff472c0b: Add the possibility in the `GitlabDiscoveryEntityProvider` to scan the whole project instead of concrete groups. For that, use a configuration like this one, where the group parameter is omitted (not mandatory anymore): + + ```yaml + catalog: + providers: + gitlab: + yourProviderId: + host: gitlab-host # Identifies one of the hosts set up in the integrations + branch: main # Optional. Uses `master` as default + entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` + ``` + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.1-next.1 + +### Patch Changes + +- fbfbff6bf7: Add possibility to resolve relations by RDN, in addition to UUID and DN +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + +## @backstage/plugin-catalog-common@1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-catalog-graph@0.2.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-catalog-import@0.8.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-catalog-react@1.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## @backstage/plugin-circleci@0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-cloudbuild@0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-code-climate@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-code-coverage@0.1.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-code-coverage-backend@0.1.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-codescene@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-config-schema@0.1.30-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-cost-insights@0.11.29-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-dynatrace@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-explore@0.3.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-firehydrant@0.1.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-fossa@0.2.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-gcalendar@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-gcp-projects@0.3.26-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-git-release-manager@0.3.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-github-actions@0.5.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-github-deployments@0.1.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-github-pull-requests-board@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-gitops-profiles@0.3.25-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-gocd@0.1.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-graphiql@0.2.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-home@0.4.23-next.1 + +### Patch Changes + +- a46e317a75: Added support for customizing the time format used in the `HeaderWorldClock` component + + Here's an example of how this can be used in the `HomePage.tsx` found in `\packages\app\src\components\home` to change the clock to be in the 24hr time format: + + ```diff + +const timeFormat: Intl.DateTimeFormatOptions = { + + hour: '2-digit', + + minute: '2-digit', + + hour12: false, + +}; + + export const homePage = ( + +
} pageTitleOverride="Home"> + + +
+ + + + + + ``` + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-stack-overflow@0.1.3-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-ilert@0.1.33-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-jenkins@0.7.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-jenkins-common@0.1.6-next.0 + +## @backstage/plugin-jenkins-backend@0.1.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-jenkins-common@0.1.6-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + +## @backstage/plugin-jenkins-common@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + +## @backstage/plugin-kafka@0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-kafka-backend@0.2.27-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## @backstage/plugin-kubernetes@0.6.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-kubernetes-backend@0.7.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## @backstage/plugin-lighthouse@0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-newrelic@0.3.25-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-newrelic-dashboard@0.1.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-org@0.5.7-next.1 + +### Patch Changes + +- 1e984b11fc: Render namespaces for teams with subtitles in `MyGroupsSidebarItem` +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-pagerduty@0.5.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-periskop@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-permission-backend@0.5.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + +## @backstage/plugin-permission-common@0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + +## @backstage/plugin-permission-node@0.6.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + +## @backstage/plugin-permission-react@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 + +## @backstage/plugin-rollbar@0.4.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-scaffolder@1.4.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## @backstage/plugin-scaffolder-backend@1.4.0-next.1 + +### Patch Changes + +- 801d606909: Improve error messaging when passing in malformed auth +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-search@0.9.1-next.1 + +### Patch Changes + +- 509c4092f0: To allow people to use a global search context in the search modal, the code for the search modal has been changed to only create a local search context if there is no parent context already defined. + + If you want to continue using a local context even if you define a global one, you will have to wrap the modal in a new local context manually: + + ```tsx + + + + ``` + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## @backstage/plugin-search-backend@0.5.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-search-backend-module-pg@0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-search-backend-node@0.6.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-search-common@0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 + +## @backstage/plugin-search-react@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-sentry@0.3.45-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-shortcuts@0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-sonarqube@0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-splunk-on-call@0.3.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-stack-overflow@0.1.3-next.1 + +### Patch Changes + +- 52b4f796e3: app-config is now picked up properly. +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/plugin-home@0.4.23-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-stack-overflow-backend@0.1.3-next.0 + +### Patch Changes + +- 52b4f796e3: app-config is now picked up properly. +- Updated dependencies + - @backstage/plugin-search-common@0.3.6-next.0 + +## @backstage/plugin-tech-insights@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-tech-insights-backend@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/catalog-client@1.0.4-next.1 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## @backstage/plugin-tech-radar@0.5.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-techdocs@1.2.1-next.1 + +### Patch Changes + +- 726577958f: Remove the 60% factor from the font size calculation of headers to use the exact size defined in BackstageTheme. +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-techdocs@1.2.1-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/test-utils@1.1.2-next.1 + - @backstage/plugin-search-react@0.2.2-next.1 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + +## @backstage/plugin-todo@0.2.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-todo-backend@0.1.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + +## @backstage/plugin-user-settings@0.4.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @backstage/plugin-vault@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## @backstage/plugin-vault-backend@0.2.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/backend-test-utils@0.1.26-next.1 + +## @backstage/plugin-xcmetrics@0.2.27-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## example-app@0.2.73-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/cli@0.18.0-next.1 + - @backstage/plugin-apache-airflow@0.2.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-search@0.9.1-next.1 + - @backstage/plugin-org@0.5.7-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/plugin-home@0.4.23-next.1 + - @backstage/plugin-stack-overflow@0.1.3-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-techdocs@1.2.1-next.1 + - @backstage/app-defaults@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-airbrake@0.3.7-next.1 + - @backstage/plugin-api-docs@0.8.7-next.1 + - @backstage/plugin-azure-devops@0.1.23-next.1 + - @backstage/plugin-badges@0.2.31-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-catalog-graph@0.2.19-next.1 + - @backstage/plugin-catalog-import@0.8.10-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-circleci@0.3.7-next.1 + - @backstage/plugin-cloudbuild@0.3.7-next.1 + - @backstage/plugin-code-coverage@0.1.34-next.1 + - @backstage/plugin-cost-insights@0.11.29-next.1 + - @backstage/plugin-dynatrace@0.1.1-next.1 + - @backstage/plugin-explore@0.3.38-next.1 + - @backstage/plugin-gcalendar@0.3.3-next.1 + - @backstage/plugin-gcp-projects@0.3.26-next.1 + - @backstage/plugin-github-actions@0.5.7-next.1 + - @backstage/plugin-gocd@0.1.13-next.1 + - @backstage/plugin-graphiql@0.2.39-next.1 + - @backstage/plugin-jenkins@0.7.6-next.1 + - @backstage/plugin-kafka@0.3.7-next.1 + - @backstage/plugin-kubernetes@0.6.7-next.1 + - @backstage/plugin-lighthouse@0.3.7-next.1 + - @backstage/plugin-newrelic@0.3.25-next.1 + - @backstage/plugin-newrelic-dashboard@0.1.15-next.1 + - @backstage/plugin-pagerduty@0.5.0-next.1 + - @backstage/plugin-permission-react@0.4.3-next.0 + - @backstage/plugin-rollbar@0.4.7-next.1 + - @backstage/plugin-scaffolder@1.4.0-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-sentry@0.3.45-next.1 + - @backstage/plugin-shortcuts@0.2.8-next.1 + - @backstage/plugin-tech-insights@0.2.3-next.1 + - @backstage/plugin-tech-radar@0.5.14-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.1 + - @backstage/plugin-todo@0.2.9-next.1 + - @backstage/plugin-user-settings@0.4.6-next.1 + - @backstage/plugin-search-react@0.2.2-next.1 + +## example-backend@0.2.73-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.1 + - @backstage/plugin-auth-backend@0.15.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@0.2.0-next.1 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/plugin-techdocs-backend@1.2.0-next.1 + - example-app@0.2.73-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-app-backend@0.3.34-next.1 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-badges-backend@0.1.28-next.1 + - @backstage/plugin-code-coverage-backend@0.1.32-next.1 + - @backstage/plugin-jenkins-backend@0.1.24-next.1 + - @backstage/plugin-kafka-backend@0.2.27-next.1 + - @backstage/plugin-kubernetes-backend@0.7.0-next.1 + - @backstage/plugin-permission-backend@0.5.9-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.1 + - @backstage/plugin-search-backend@0.5.4-next.1 + - @backstage/plugin-search-backend-module-pg@0.3.5-next.1 + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-tech-insights-backend@0.4.2-next.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.1 + - @backstage/plugin-todo-backend@0.1.31-next.1 + +## techdocs-cli-embedded-app@0.2.72-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/cli@0.18.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-techdocs@1.2.1-next.1 + - @backstage/app-defaults@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/test-utils@1.1.2-next.1 + +## @internal/plugin-todo-list@1.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## @internal/plugin-todo-list-backend@1.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + +## @internal/plugin-todo-list-common@1.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 diff --git a/microsite/data/plugins/aws-proton.yaml b/microsite/data/plugins/aws-proton.yaml new file mode 100644 index 0000000000..022b553b24 --- /dev/null +++ b/microsite/data/plugins/aws-proton.yaml @@ -0,0 +1,9 @@ +--- +title: AWS Proton +author: Amazon Web Services +authorUrl: https://aws.amazon.com/ +category: Infrastructure +description: Create and view AWS Proton services for your components in Backstage. +documentation: https://github.com/awslabs/aws-proton-plugins-for-backstage#readme +iconUrl: https://github.com/awslabs/aws-proton-plugins-for-backstage/blob/main/docs/images/proton-logo.png?raw=true +npmPackageName: '@aws/aws-proton-plugin-for-backstage' diff --git a/microsite/data/plugins/dora-metrics.yaml b/microsite/data/plugins/dora-metrics.yaml new file mode 100644 index 0000000000..b94499e324 --- /dev/null +++ b/microsite/data/plugins/dora-metrics.yaml @@ -0,0 +1,9 @@ +--- +title: DORA Metrics +author: Okay +authorUrl: https://www.okayhq.com +category: Metrics +description: Embed dashboards (like DORA metrics) in your team or service pages from any dev tools (including Github, Gitlab, Jira, Argo, CircleCI, Buildkite, Pagerduty, Rollbar, Sentry, etc). +documentation: https://github.com/OkayHQ/backstage-plugin +iconUrl: img/okay.png +npmPackageName: '@okayhq/backstage-plugin' diff --git a/microsite/data/plugins/gke-usage.yaml b/microsite/data/plugins/gke-usage.yaml index e092f84973..9668b18fdf 100644 --- a/microsite/data/plugins/gke-usage.yaml +++ b/microsite/data/plugins/gke-usage.yaml @@ -5,7 +5,7 @@ authorUrl: https://bestsellerit.com category: Discovery description: This plugin will show you the cost and resource usage of your application within Google Kubernetes Engine (GKE). documentation: https://github.com/BESTSELLER/backstage-plugin-gkeusage/blob/master/README.md -iconUrl: https://bestsellerit.com/img/google-container-engine_avatar.svg +iconUrl: img/gke-logo.png npmPackageName: '@bestsellerit/backstage-plugin-gkeusage' tags: - gke diff --git a/microsite/data/plugins/harbor.yaml b/microsite/data/plugins/harbor.yaml index 9023e0c434..f959613d4c 100644 --- a/microsite/data/plugins/harbor.yaml +++ b/microsite/data/plugins/harbor.yaml @@ -5,7 +5,7 @@ authorUrl: https://bestsellerit.com category: Discovery description: This plugin will show you information about Docker images within the Harbor cloud native registry. documentation: https://github.com/BESTSELLER/backstage-plugin-harbor/blob/master/README.md -iconUrl: https://bestsellerit.com/img/terraform-harbor/goharbor.jpeg +iconUrl: https://raw.githubusercontent.com/cncf/artwork/master/projects/harbor/icon/color/harbor-icon-color.svg npmPackageName: '@bestsellerit/backstage-plugin-harbor' tags: - goharbor diff --git a/microsite/data/plugins/humanitec.yaml b/microsite/data/plugins/humanitec.yaml new file mode 100644 index 0000000000..bd5dec9dc6 --- /dev/null +++ b/microsite/data/plugins/humanitec.yaml @@ -0,0 +1,11 @@ +--- +title: Humanitec Platform Orchestrator +author: Frontside +authorUrl: 'https://frontside.com' +category: Deployment # A single category e.g. CI, Machine Learning, Services, Monitoring +description: | + Show workloads, environments and resources deployed by Humanitec Platform Orchestrator. + Plugin includes an Entity ComponentCard, Backend API route and scaffolder actions. +documentation: https://github.com/thefrontside/backstage/tree/main/plugins/humanitec +iconUrl: img/humanitec-logo.png +npmPackageName: '@frontside/backstage-plugin-humanitec' diff --git a/microsite/pages/en/community.js b/microsite/pages/en/community.js index 26366b25df..3d79c82f93 100644 --- a/microsite/pages/en/community.js +++ b/microsite/pages/en/community.js @@ -8,6 +8,30 @@ const React = require('react'); const Components = require(`${process.cwd()}/core/Components.js`); const Block = Components.Block; +const BulletLine = Components.BulletLine; + +const PARTNERS = [ + { + name: 'Frontside Software', + url: 'https://frontside.com/backstage/', + logo: 'img/partner-logo-frontside.png', + }, + { + name: 'Roadie', + url: 'https://roadie.io/', + logo: 'img/partner-logo-roadie.png', + }, + { + name: 'ThoughtWorks', + url: 'https://www.thoughtworks.com', + logo: 'img/partner-logo-thoughtworks.png', + }, + { + name: 'VMWare', + url: 'https://www.vmware.com', + logo: 'img/partner-logo-vmware.png', + }, +]; const Background = props => { const { config: siteConfig } = props; @@ -17,14 +41,11 @@ const Background = props => { - Backstage Community - - + Backstage Community - What's the use of having fun if you can't share it? Exactly. Join - the vibrant community around the Backstage project. Be it on - GitHub, social media, Discord... You'll find a welcoming - environment. To ensure this, we follow the{' '} + Join the vibrant community around Backstage through social media + and different meetups. To ensure that you have a welcoming + environment, we follow{' '} {' '} CNCF Code of Conduct @@ -32,110 +53,110 @@ const Background = props => { in everything we do. - + - Main community channels -
- Chat and get support on our{' '} -
Discord -
- Get into contributing with the{' '} - - Good First Issues - -
- Subscribe to the{' '} - - Community newsletter - -
- Join the{' '} - - Twitter community - -
+ + Get started in our community! + +
- - - - Backstage Community Sessions - - Missed a meetup? Wondering when the next one is coming up? We've - got you covered! Check out our all-new Meetups page. - - Meetups - - - Adopter Community Sessions - - Backstage Community Sessions is the monthly meetup where we all - come together to listen to the latest maintainer updates, learn - from each other about adopting, share exciting new demos or - discuss any relevant topic like developer effectiveness, developer - experience, developer portals, etc. Have something to share, or a - burning question? Add it to the{' '} - issue. - - - - Contributor Community Sessions - - Discuss all things contributing, diving deep under the hood of - Backstage (Backstage of Backstage? Backerstage?). An open - discussion with maintainers and contributors of Backstage. If you - like Backstage, this is your favorite Zoom meeting of the month, - guaranteed! Have something to share, or a burning question? Add it - to the{' '} - issue. - + + + + Offical Backstage initiatives + + Stay tuned to the latest developments + + + + + Community sessions + + Maintainers and adopters meet monthly to share updates, demos, + and ideas. Yep, all sessions are recorded! + + + Join a session + + + + + Newsletter + + The official monthly Backstage newsletter. Don't miss the latest + news from your favorite project! + + + Subscribe + + + + + Contributor Spotlight + + A recognition for valuable community work. Nominate contributing + members for their efforts! We'll put them in the spotlight โค๏ธ + + Nominate now + + - - - - - Backstage official Newsletter + + + + Community initiatives - + + Open Mic Meetup - The official monthly Backstage newsletter. Containing the latest - news from your favorite project. - - - Subscribe - - - - - - - - - Spotlight - - A recognition for valuable community work, the{' '} - Contributor Spotlight. Nominate contributing members for - their efforts! We'll put them in the spotlight โค๏ธ. -
-
- Nominate now -
- - Open Mic Meetup - - A monthly casual get together of Backstage users sharing their - experiences and helping each other. Hosted by{' '} + A casual get together of Backstage users sharing their experiences + and helping each other. Hosted by{' '} Roadie.io and{' '} Frontside Software. -
Learn more
- - Backstage Weekly + + Backstage Weekly Newsletter A weekly newsletter with news, updates and things community from your friends at Roadie.io. @@ -146,6 +167,23 @@ const Background = props => {
+ + + + + Commercial Partners + + {PARTNERS.map(partner => ( + + + + {partner.name} + + + + ))} + + ); }; diff --git a/microsite/static/img/gke-logo.png b/microsite/static/img/gke-logo.png new file mode 100644 index 0000000000..5af1abbf9a Binary files /dev/null and b/microsite/static/img/gke-logo.png differ diff --git a/microsite/static/img/humanitec-logo.png b/microsite/static/img/humanitec-logo.png new file mode 100644 index 0000000000..69ab02e9cd Binary files /dev/null and b/microsite/static/img/humanitec-logo.png differ diff --git a/microsite/static/img/okay.png b/microsite/static/img/okay.png new file mode 100644 index 0000000000..357219d9d2 Binary files /dev/null and b/microsite/static/img/okay.png differ diff --git a/microsite/static/img/partner-logo-frontside.png b/microsite/static/img/partner-logo-frontside.png new file mode 100644 index 0000000000..c8cad6bce1 Binary files /dev/null and b/microsite/static/img/partner-logo-frontside.png differ diff --git a/microsite/static/img/partner-logo-roadie.png b/microsite/static/img/partner-logo-roadie.png new file mode 100644 index 0000000000..41b169f55b Binary files /dev/null and b/microsite/static/img/partner-logo-roadie.png differ diff --git a/microsite/static/img/partner-logo-thoughtworks.png b/microsite/static/img/partner-logo-thoughtworks.png new file mode 100644 index 0000000000..53c3bc2a9e Binary files /dev/null and b/microsite/static/img/partner-logo-thoughtworks.png differ diff --git a/microsite/static/img/partner-logo-vmware.png b/microsite/static/img/partner-logo-vmware.png new file mode 100644 index 0000000000..049975ca15 Binary files /dev/null and b/microsite/static/img/partner-logo-vmware.png differ diff --git a/package.json b/package.json index dd2a85e757..89a49c11fd 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.3.0", + "version": "1.4.0-next.1", "dependencies": { "@manypkg/get-packages": "^1.1.3", "@microsoft/api-documenter": "^7.17.11", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index fb1756eba2..3da536ef7f 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/app-defaults +## 1.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## 1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/core-app-api@1.0.4-next.0 + ## 1.0.3 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 0a35b16c3a..82534354a0 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.0.3", + "version": "1.0.4-next.1", "private": false, "publishConfig": { "access": "public", @@ -33,11 +33,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-components": "^0.9.5", - "@backstage/core-app-api": "^1.0.3", + "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-permission-react": "^0.4.2", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-permission-react": "^0.4.3-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "react-router-dom": "6.0.0-beta.0" @@ -46,8 +46,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@types/jest": "^26.0.7", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 74601b6417..a4cc7735dd 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,117 @@ # example-app +## 0.2.73-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/cli@0.18.0-next.1 + - @backstage/plugin-apache-airflow@0.2.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-search@0.9.1-next.1 + - @backstage/plugin-org@0.5.7-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/plugin-home@0.4.23-next.1 + - @backstage/plugin-stack-overflow@0.1.3-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-techdocs@1.2.1-next.1 + - @backstage/app-defaults@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-airbrake@0.3.7-next.1 + - @backstage/plugin-api-docs@0.8.7-next.1 + - @backstage/plugin-azure-devops@0.1.23-next.1 + - @backstage/plugin-badges@0.2.31-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-catalog-graph@0.2.19-next.1 + - @backstage/plugin-catalog-import@0.8.10-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-circleci@0.3.7-next.1 + - @backstage/plugin-cloudbuild@0.3.7-next.1 + - @backstage/plugin-code-coverage@0.1.34-next.1 + - @backstage/plugin-cost-insights@0.11.29-next.1 + - @backstage/plugin-dynatrace@0.1.1-next.1 + - @backstage/plugin-explore@0.3.38-next.1 + - @backstage/plugin-gcalendar@0.3.3-next.1 + - @backstage/plugin-gcp-projects@0.3.26-next.1 + - @backstage/plugin-github-actions@0.5.7-next.1 + - @backstage/plugin-gocd@0.1.13-next.1 + - @backstage/plugin-graphiql@0.2.39-next.1 + - @backstage/plugin-jenkins@0.7.6-next.1 + - @backstage/plugin-kafka@0.3.7-next.1 + - @backstage/plugin-kubernetes@0.6.7-next.1 + - @backstage/plugin-lighthouse@0.3.7-next.1 + - @backstage/plugin-newrelic@0.3.25-next.1 + - @backstage/plugin-newrelic-dashboard@0.1.15-next.1 + - @backstage/plugin-pagerduty@0.5.0-next.1 + - @backstage/plugin-permission-react@0.4.3-next.0 + - @backstage/plugin-rollbar@0.4.7-next.1 + - @backstage/plugin-scaffolder@1.4.0-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-sentry@0.3.45-next.1 + - @backstage/plugin-shortcuts@0.2.8-next.1 + - @backstage/plugin-tech-insights@0.2.3-next.1 + - @backstage/plugin-tech-radar@0.5.14-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.1 + - @backstage/plugin-todo@0.2.9-next.1 + - @backstage/plugin-user-settings@0.4.6-next.1 + - @backstage/plugin-search-react@0.2.2-next.1 + +## 0.2.73-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.4.0-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/plugin-stack-overflow@0.1.3-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/cli@0.17.3-next.0 + - @backstage/plugin-azure-devops@0.1.23-next.0 + - @backstage/plugin-techdocs@1.2.1-next.0 + - @backstage/plugin-catalog-import@0.8.10-next.0 + - @backstage/plugin-pagerduty@0.5.0-next.0 + - @backstage/plugin-github-actions@0.5.7-next.0 + - @backstage/plugin-airbrake@0.3.7-next.0 + - @backstage/plugin-api-docs@0.8.7-next.0 + - @backstage/plugin-badges@0.2.31-next.0 + - @backstage/plugin-catalog-graph@0.2.19-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/plugin-circleci@0.3.7-next.0 + - @backstage/plugin-cloudbuild@0.3.7-next.0 + - @backstage/plugin-code-coverage@0.1.34-next.0 + - @backstage/plugin-cost-insights@0.11.29-next.0 + - @backstage/plugin-dynatrace@0.1.1-next.0 + - @backstage/plugin-explore@0.3.38-next.0 + - @backstage/plugin-gocd@0.1.13-next.0 + - @backstage/plugin-home@0.4.23-next.0 + - @backstage/plugin-jenkins@0.7.6-next.0 + - @backstage/plugin-kafka@0.3.7-next.0 + - @backstage/plugin-kubernetes@0.6.7-next.0 + - @backstage/plugin-lighthouse@0.3.7-next.0 + - @backstage/plugin-newrelic-dashboard@0.1.15-next.0 + - @backstage/plugin-org@0.5.7-next.0 + - @backstage/plugin-rollbar@0.4.7-next.0 + - @backstage/plugin-search@0.9.1-next.0 + - @backstage/plugin-sentry@0.3.45-next.0 + - @backstage/plugin-tech-insights@0.2.3-next.0 + - @backstage/plugin-todo@0.2.9-next.0 + - @backstage/app-defaults@1.0.4-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-apache-airflow@0.1.15-next.0 + - @backstage/plugin-gcalendar@0.3.3-next.0 + - @backstage/plugin-gcp-projects@0.3.26-next.0 + - @backstage/plugin-graphiql@0.2.39-next.0 + - @backstage/plugin-newrelic@0.3.25-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + - @backstage/plugin-shortcuts@0.2.8-next.0 + - @backstage/plugin-tech-radar@0.5.14-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.0 + - @backstage/plugin-user-settings@0.4.6-next.0 + ## 0.2.72 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index df9119d602..4ba50b13c7 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,67 +1,67 @@ { "name": "example-app", - "version": "0.2.72", + "version": "0.2.73-next.1", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", - "@backstage/cli": "^0.17.2", + "@backstage/app-defaults": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/cli": "^0.18.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-airbrake": "^0.3.6", - "@backstage/plugin-api-docs": "^0.8.6", - "@backstage/plugin-azure-devops": "^0.1.22", - "@backstage/plugin-apache-airflow": "^0.1.14", - "@backstage/plugin-badges": "^0.2.30", - "@backstage/plugin-catalog": "^1.3.0", - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-catalog-graph": "^0.2.18", - "@backstage/plugin-catalog-import": "^0.8.9", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-circleci": "^0.3.6", - "@backstage/plugin-cloudbuild": "^0.3.6", - "@backstage/plugin-code-coverage": "^0.1.33", - "@backstage/plugin-cost-insights": "^0.11.28", - "@backstage/plugin-dynatrace": "^0.1.0", - "@backstage/plugin-explore": "^0.3.37", - "@backstage/plugin-gcalendar": "^0.3.2", - "@backstage/plugin-gcp-projects": "^0.3.25", - "@backstage/plugin-github-actions": "^0.5.6", - "@backstage/plugin-gocd": "^0.1.12", - "@backstage/plugin-graphiql": "^0.2.38", - "@backstage/plugin-home": "^0.4.22", - "@backstage/plugin-jenkins": "^0.7.5", - "@backstage/plugin-kafka": "^0.3.6", - "@backstage/plugin-kubernetes": "^0.6.6", - "@backstage/plugin-lighthouse": "^0.3.6", - "@backstage/plugin-newrelic": "^0.3.24", - "@backstage/plugin-newrelic-dashboard": "^0.1.14", - "@backstage/plugin-org": "^0.5.6", - "@backstage/plugin-pagerduty": "0.4.0", - "@backstage/plugin-permission-react": "^0.4.2", - "@backstage/plugin-rollbar": "^0.4.6", - "@backstage/plugin-scaffolder": "^1.3.0", - "@backstage/plugin-search": "^0.9.0", - "@backstage/plugin-search-react": "^0.2.1", - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/plugin-sentry": "^0.3.44", - "@backstage/plugin-shortcuts": "^0.2.7", - "@backstage/plugin-stack-overflow": "^0.1.2", - "@backstage/plugin-tech-radar": "^0.5.13", - "@backstage/plugin-techdocs": "^1.2.0", - "@backstage/plugin-techdocs-react": "^1.0.1", - "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.1", - "@backstage/plugin-todo": "^0.2.8", - "@backstage/plugin-user-settings": "^0.4.5", - "@backstage/plugin-tech-insights": "^0.2.2", - "@backstage/theme": "^0.2.15", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-airbrake": "^0.3.7-next.1", + "@backstage/plugin-api-docs": "^0.8.7-next.1", + "@backstage/plugin-azure-devops": "^0.1.23-next.1", + "@backstage/plugin-apache-airflow": "^0.2.0-next.1", + "@backstage/plugin-badges": "^0.2.31-next.1", + "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-catalog-graph": "^0.2.19-next.1", + "@backstage/plugin-catalog-import": "^0.8.10-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-circleci": "^0.3.7-next.1", + "@backstage/plugin-cloudbuild": "^0.3.7-next.1", + "@backstage/plugin-code-coverage": "^0.1.34-next.1", + "@backstage/plugin-cost-insights": "^0.11.29-next.1", + "@backstage/plugin-dynatrace": "^0.1.1-next.1", + "@backstage/plugin-explore": "^0.3.38-next.1", + "@backstage/plugin-gcalendar": "^0.3.3-next.1", + "@backstage/plugin-gcp-projects": "^0.3.26-next.1", + "@backstage/plugin-github-actions": "^0.5.7-next.1", + "@backstage/plugin-gocd": "^0.1.13-next.1", + "@backstage/plugin-graphiql": "^0.2.39-next.1", + "@backstage/plugin-home": "^0.4.23-next.1", + "@backstage/plugin-jenkins": "^0.7.6-next.1", + "@backstage/plugin-kafka": "^0.3.7-next.1", + "@backstage/plugin-kubernetes": "^0.6.7-next.1", + "@backstage/plugin-lighthouse": "^0.3.7-next.1", + "@backstage/plugin-newrelic": "^0.3.25-next.1", + "@backstage/plugin-newrelic-dashboard": "^0.1.15-next.1", + "@backstage/plugin-org": "^0.5.7-next.1", + "@backstage/plugin-pagerduty": "0.5.0-next.1", + "@backstage/plugin-permission-react": "^0.4.3-next.0", + "@backstage/plugin-rollbar": "^0.4.7-next.1", + "@backstage/plugin-scaffolder": "^1.4.0-next.1", + "@backstage/plugin-search": "^0.9.1-next.1", + "@backstage/plugin-search-react": "^0.2.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/plugin-sentry": "^0.3.45-next.1", + "@backstage/plugin-shortcuts": "^0.2.8-next.1", + "@backstage/plugin-stack-overflow": "^0.1.3-next.1", + "@backstage/plugin-tech-radar": "^0.5.14-next.1", + "@backstage/plugin-techdocs": "^1.2.1-next.1", + "@backstage/plugin-techdocs-react": "^1.0.2-next.0", + "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.2-next.1", + "@backstage/plugin-todo": "^0.2.9-next.1", + "@backstage/plugin-user-settings": "^0.4.6-next.1", + "@backstage/plugin-tech-insights": "^0.2.3-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -81,7 +81,7 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/test-utils": "^1.1.1", + "@backstage/test-utils": "^1.1.2-next.1", "@rjsf/core": "^3.2.1", "@testing-library/cypress": "^8.0.2", "@testing-library/jest-dom": "^5.10.1", diff --git a/packages/app/src/components/home/HomePage.tsx b/packages/app/src/components/home/HomePage.tsx index 2cd5481c91..e432e1a00e 100644 --- a/packages/app/src/components/home/HomePage.tsx +++ b/packages/app/src/components/home/HomePage.tsx @@ -49,10 +49,19 @@ const clockConfigs: ClockConfig[] = [ }, ]; +const timeFormat: Intl.DateTimeFormatOptions = { + hour: '2-digit', + minute: '2-digit', + hour12: false, +}; + export const homePage = (
} pageTitleOverride="Home"> - +
diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 9e5a28f76b..3ba1b38e78 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/backend-common +## 0.14.1-next.1 + +### Patch Changes + +- 0fc57887e8: Improve plural handling in logging output for secrets +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/config-loader@1.1.3-next.0 + +## 0.14.1-next.0 + +### Patch Changes + +- b1edb5cfd9: Fix parsing of S3 URLs for the default region. +- c3cfc83af2: Updated JSDoc to be MDX compatible. +- Updated dependencies + - @backstage/integration@1.2.2-next.0 + ## 0.14.0 ### Minor Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index d4da05eaa6..ca88a9d190 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.14.0", + "version": "0.14.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -36,9 +36,9 @@ "dependencies": { "@backstage/cli-common": "^0.1.9", "@backstage/config": "^1.0.1", - "@backstage/config-loader": "^1.1.2", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", + "@backstage/config-loader": "^1.1.3-next.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", "@backstage/types": "^1.0.0", "@google-cloud/storage": "^6.0.0", "@manypkg/get-packages": "^1.1.3", @@ -91,8 +91,8 @@ } }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/archiver": "^5.1.0", "@types/base64-stream": "^1.0.2", "@types/compression": "^1.7.0", diff --git a/packages/backend-common/src/config.ts b/packages/backend-common/src/config.ts index 94b362d99d..608869ea93 100644 --- a/packages/backend-common/src/config.ts +++ b/packages/backend-common/src/config.ts @@ -53,7 +53,9 @@ const updateRedactionList = ( ); logger.info( - `${values.size} secrets found in the config which will be redacted`, + `${values.size} secret${ + values.size > 1 ? 's' : '' + } found in the config which will be redacted`, ); setRootLoggerRedactionList(Array.from(values)); diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 34be280bbc..5b5232e1fb 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/backend-tasks +## 0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## 0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.3.2 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index e96a71c597..8d69f2ce7c 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.3.2", + "version": "0.3.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -33,9 +33,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/types": "^1.0.0", "@types/luxon": "^2.0.4", "cron": "^2.0.0", @@ -48,8 +48,8 @@ "zod": "^3.9.5" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/cron": "^2.0.0", "wait-for-expect": "^3.0.2" }, diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 104f17a2e8..63868083d7 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/backend-test-utils +## 0.1.26-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.18.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + +## 0.1.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/cli@0.17.3-next.0 + ## 0.1.25 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index abc55944ea..7335447797 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.25", + "version": "0.1.26-next.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -34,8 +34,8 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/cli": "^0.17.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/cli": "^0.18.0-next.1", "@backstage/config": "^1.0.1", "better-sqlite3": "^7.5.0", "knex": "^1.0.2", @@ -46,7 +46,7 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 1602a34c37..f692b3b6c3 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,77 @@ # example-backend +## 0.2.73-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.1 + - @backstage/plugin-auth-backend@0.15.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@0.2.0-next.1 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/plugin-techdocs-backend@1.2.0-next.1 + - example-app@0.2.73-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-app-backend@0.3.34-next.1 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-badges-backend@0.1.28-next.1 + - @backstage/plugin-code-coverage-backend@0.1.32-next.1 + - @backstage/plugin-jenkins-backend@0.1.24-next.1 + - @backstage/plugin-kafka-backend@0.2.27-next.1 + - @backstage/plugin-kubernetes-backend@0.7.0-next.1 + - @backstage/plugin-permission-backend@0.5.9-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.1 + - @backstage/plugin-search-backend@0.5.4-next.1 + - @backstage/plugin-search-backend-module-pg@0.3.5-next.1 + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-tech-insights-backend@0.4.2-next.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.1 + - @backstage/plugin-todo-backend@0.1.31-next.1 + +## 0.2.73-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights-backend@0.4.2-next.0 + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + - @backstage/plugin-auth-backend@0.14.2-next.0 + - @backstage/plugin-kubernetes-backend@0.7.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-azure-devops-backend@0.3.13-next.0 + - example-app@0.2.73-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-app-backend@0.3.34-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/plugin-badges-backend@0.1.28-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/plugin-code-coverage-backend@0.1.32-next.0 + - @backstage/plugin-graphql-backend@0.1.24-next.0 + - @backstage/plugin-jenkins-backend@0.1.24-next.0 + - @backstage/plugin-kafka-backend@0.2.27-next.0 + - @backstage/plugin-permission-backend@0.5.9-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + - @backstage/plugin-proxy-backend@0.2.28-next.0 + - @backstage/plugin-rollbar-backend@0.1.31-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.0 + - @backstage/plugin-search-backend@0.5.4-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@0.1.6-next.0 + - @backstage/plugin-search-backend-module-pg@0.3.5-next.0 + - @backstage/plugin-search-backend-node@0.6.3-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.0 + - @backstage/plugin-tech-insights-node@0.3.2-next.0 + - @backstage/plugin-techdocs-backend@1.1.3-next.0 + - @backstage/plugin-todo-backend@0.1.31-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 0.2.72 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 9dedf360c1..1cb0e1405a 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.72", + "version": "0.2.73-next.1", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,39 +26,39 @@ "build-image": "docker build ../.. -f Dockerfile --tag example-backend" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-tasks": "^0.3.2", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-app-backend": "^0.3.33", - "@backstage/plugin-auth-backend": "^0.14.1", - "@backstage/plugin-auth-node": "^0.2.2", - "@backstage/plugin-azure-devops-backend": "^0.3.12", - "@backstage/plugin-badges-backend": "^0.1.27", - "@backstage/plugin-catalog-backend": "^1.2.0", - "@backstage/plugin-code-coverage-backend": "^0.1.31", - "@backstage/plugin-graphql-backend": "^0.1.23", - "@backstage/plugin-jenkins-backend": "^0.1.23", - "@backstage/plugin-kubernetes-backend": "^0.6.0", - "@backstage/plugin-kafka-backend": "^0.2.26", - "@backstage/plugin-permission-backend": "^0.5.8", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-permission-node": "^0.6.2", - "@backstage/plugin-proxy-backend": "^0.2.27", - "@backstage/plugin-rollbar-backend": "^0.1.30", - "@backstage/plugin-scaffolder-backend": "^1.3.0", - "@backstage/plugin-scaffolder-backend-module-rails": "^0.4.1", - "@backstage/plugin-search-backend": "^0.5.3", - "@backstage/plugin-search-backend-node": "^0.6.2", - "@backstage/plugin-search-backend-module-elasticsearch": "^0.1.5", - "@backstage/plugin-search-backend-module-pg": "^0.3.4", - "@backstage/plugin-techdocs-backend": "^1.1.2", - "@backstage/plugin-tech-insights-backend": "^0.4.1", - "@backstage/plugin-tech-insights-node": "^0.3.1", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.17", - "@backstage/plugin-todo-backend": "^0.1.30", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-app-backend": "^0.3.34-next.1", + "@backstage/plugin-auth-backend": "^0.15.0-next.1", + "@backstage/plugin-auth-node": "^0.2.3-next.1", + "@backstage/plugin-azure-devops-backend": "^0.3.13-next.0", + "@backstage/plugin-badges-backend": "^0.1.28-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", + "@backstage/plugin-code-coverage-backend": "^0.1.32-next.1", + "@backstage/plugin-graphql-backend": "^0.1.24-next.0", + "@backstage/plugin-jenkins-backend": "^0.1.24-next.1", + "@backstage/plugin-kubernetes-backend": "^0.7.0-next.1", + "@backstage/plugin-kafka-backend": "^0.2.27-next.1", + "@backstage/plugin-permission-backend": "^0.5.9-next.1", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-permission-node": "^0.6.3-next.1", + "@backstage/plugin-proxy-backend": "^0.2.28-next.0", + "@backstage/plugin-rollbar-backend": "^0.1.31-next.0", + "@backstage/plugin-scaffolder-backend": "^1.4.0-next.1", + "@backstage/plugin-scaffolder-backend-module-rails": "^0.4.2-next.1", + "@backstage/plugin-search-backend": "^0.5.4-next.1", + "@backstage/plugin-search-backend-node": "^0.6.3-next.1", + "@backstage/plugin-search-backend-module-elasticsearch": "^0.2.0-next.1", + "@backstage/plugin-search-backend-module-pg": "^0.3.5-next.1", + "@backstage/plugin-techdocs-backend": "^1.2.0-next.1", + "@backstage/plugin-tech-insights-backend": "^0.4.2-next.1", + "@backstage/plugin-tech-insights-node": "^0.3.2-next.0", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.18-next.1", + "@backstage/plugin-todo-backend": "^0.1.31-next.1", "@gitbeaker/node": "^35.1.0", "@octokit/rest": "^18.5.3", "better-sqlite3": "^7.5.0", @@ -75,7 +75,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/dockerode": "^3.3.0", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 93d232dc24..0b0d29b940 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/catalog-client +## 1.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + +## 1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + ## 1.0.3 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index 76818ed10f..05075d14dc 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.0.3", + "version": "1.0.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,12 +33,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/errors": "^1.0.0", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/errors": "^1.1.0-next.0", "cross-fetch": "^3.1.5" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", "msw": "^0.42.0" }, diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 7d491dad5b..78f7a1207c 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/catalog-model +## 1.1.0-next.1 + +### Patch Changes + +- f1dcc6f3c6: Added type predicates for all entity types, e.g. isUserEntity +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + +## 1.1.0-next.0 + +### Minor Changes + +- 1380b389dc: Adding an optional type field to entity links to group and categorize links + +### Patch Changes + +- c3cfc83af2: Updated JSDoc to be MDX compatible. + ## 1.0.3 ### Patch Changes diff --git a/packages/catalog-model/api-report.md b/packages/catalog-model/api-report.md index 8427ef4112..3eeb054174 100644 --- a/packages/catalog-model/api-report.md +++ b/packages/catalog-model/api-report.md @@ -255,6 +255,36 @@ export { GroupEntityV1alpha1 }; // @public export const groupEntityV1alpha1Validator: KindValidator; +// @public (undocumented) +export function isApiEntity(entity: Entity): entity is ApiEntityV1alpha1; + +// @public (undocumented) +export function isComponentEntity( + entity: Entity, +): entity is ComponentEntityV1alpha1; + +// @public (undocumented) +export function isDomainEntity(entity: Entity): entity is DomainEntityV1alpha1; + +// @public (undocumented) +export function isGroupEntity(entity: Entity): entity is GroupEntityV1alpha1; + +// @public (undocumented) +export function isLocationEntity( + entity: Entity, +): entity is LocationEntityV1alpha1; + +// @public (undocumented) +export function isResourceEntity( + entity: Entity, +): entity is ResourceEntityV1alpha1; + +// @public (undocumented) +export function isSystemEntity(entity: Entity): entity is SystemEntityV1alpha1; + +// @public (undocumented) +export function isUserEntity(entity: Entity): entity is UserEntityV1alpha1; + // @public export type KindValidator = { check(entity: Entity): Promise; diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index 328482fd24..91d3f74a66 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.0.3", + "version": "1.1.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,7 +35,7 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/types": "^1.0.0", "ajv": "^8.10.0", "json-schema": "^0.4.0", @@ -43,7 +43,7 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", "@types/json-schema": "^7.0.5", "@types/lodash": "^4.14.151", diff --git a/packages/catalog-model/src/entity/conditions.test.ts b/packages/catalog-model/src/entity/conditions.test.ts new file mode 100644 index 0000000000..046f1c60e4 --- /dev/null +++ b/packages/catalog-model/src/entity/conditions.test.ts @@ -0,0 +1,172 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Entity } from './Entity'; +import { + isApiEntity, + isComponentEntity, + isDomainEntity, + isGroupEntity, + isLocationEntity, + isResourceEntity, + isSystemEntity, + isUserEntity, +} from './conditions'; + +const apiEntity: Entity = { + apiVersion: '', + kind: 'api', + metadata: { name: 'api' }, +}; +const componentEntity: Entity = { + apiVersion: '', + kind: 'component', + metadata: { name: 'Component' }, +}; +const domainEntity: Entity = { + apiVersion: '', + kind: 'domain', + metadata: { name: 'Domain' }, +}; +const groupEntity: Entity = { + apiVersion: '', + kind: 'group', + metadata: { name: 'Group' }, +}; +const locationEntity: Entity = { + apiVersion: '', + kind: 'location', + metadata: { name: 'Location' }, +}; +const resourceEntity: Entity = { + apiVersion: '', + kind: 'resource', + metadata: { name: 'Resource' }, +}; +const systemEntity: Entity = { + apiVersion: '', + kind: 'system', + metadata: { name: 'System' }, +}; +const userEntity: Entity = { + apiVersion: '', + kind: 'user', + metadata: { name: 'User' }, +}; + +describe('isApiEntity', () => { + it('should check for the intended type', () => { + expect(isApiEntity(componentEntity)).not.toBeTruthy(); + expect(isApiEntity(domainEntity)).not.toBeTruthy(); + expect(isApiEntity(groupEntity)).not.toBeTruthy(); + expect(isApiEntity(locationEntity)).not.toBeTruthy(); + expect(isApiEntity(resourceEntity)).not.toBeTruthy(); + expect(isApiEntity(systemEntity)).not.toBeTruthy(); + expect(isApiEntity(userEntity)).not.toBeTruthy(); + expect(isApiEntity(apiEntity)).toBeTruthy(); + }); +}); + +describe('isComponentEntity', () => { + it('should check for the intended type', () => { + expect(isComponentEntity(apiEntity)).not.toBeTruthy(); + expect(isComponentEntity(domainEntity)).not.toBeTruthy(); + expect(isComponentEntity(groupEntity)).not.toBeTruthy(); + expect(isComponentEntity(locationEntity)).not.toBeTruthy(); + expect(isComponentEntity(resourceEntity)).not.toBeTruthy(); + expect(isComponentEntity(systemEntity)).not.toBeTruthy(); + expect(isComponentEntity(userEntity)).not.toBeTruthy(); + expect(isComponentEntity(componentEntity)).toBeTruthy(); + }); +}); + +describe('isDomainEntity', () => { + it('should check for the intended type', () => { + expect(isDomainEntity(apiEntity)).not.toBeTruthy(); + expect(isDomainEntity(componentEntity)).not.toBeTruthy(); + expect(isDomainEntity(groupEntity)).not.toBeTruthy(); + expect(isDomainEntity(locationEntity)).not.toBeTruthy(); + expect(isDomainEntity(resourceEntity)).not.toBeTruthy(); + expect(isDomainEntity(systemEntity)).not.toBeTruthy(); + expect(isDomainEntity(userEntity)).not.toBeTruthy(); + expect(isDomainEntity(domainEntity)).toBeTruthy(); + }); +}); + +describe('isGroupEntity', () => { + it('should check for the intended type', () => { + expect(isGroupEntity(apiEntity)).not.toBeTruthy(); + expect(isGroupEntity(componentEntity)).not.toBeTruthy(); + expect(isGroupEntity(domainEntity)).not.toBeTruthy(); + expect(isGroupEntity(locationEntity)).not.toBeTruthy(); + expect(isGroupEntity(resourceEntity)).not.toBeTruthy(); + expect(isGroupEntity(systemEntity)).not.toBeTruthy(); + expect(isGroupEntity(userEntity)).not.toBeTruthy(); + expect(isGroupEntity(groupEntity)).toBeTruthy(); + }); +}); + +describe('isLocationEntity', () => { + it('should check for the intended type', () => { + expect(isLocationEntity(apiEntity)).not.toBeTruthy(); + expect(isLocationEntity(componentEntity)).not.toBeTruthy(); + expect(isLocationEntity(domainEntity)).not.toBeTruthy(); + expect(isLocationEntity(groupEntity)).not.toBeTruthy(); + expect(isLocationEntity(resourceEntity)).not.toBeTruthy(); + expect(isLocationEntity(systemEntity)).not.toBeTruthy(); + expect(isLocationEntity(userEntity)).not.toBeTruthy(); + expect(isLocationEntity(locationEntity)).toBeTruthy(); + }); +}); + +describe('isResourceEntity', () => { + it('should check for the intended type', () => { + expect(isResourceEntity(apiEntity)).not.toBeTruthy(); + expect(isResourceEntity(componentEntity)).not.toBeTruthy(); + expect(isResourceEntity(domainEntity)).not.toBeTruthy(); + expect(isResourceEntity(groupEntity)).not.toBeTruthy(); + expect(isResourceEntity(locationEntity)).not.toBeTruthy(); + expect(isResourceEntity(systemEntity)).not.toBeTruthy(); + expect(isResourceEntity(userEntity)).not.toBeTruthy(); + expect(isResourceEntity(resourceEntity)).toBeTruthy(); + }); +}); + +describe('isSystemEntity', () => { + it('should check for the intended type', () => { + expect(isSystemEntity(apiEntity)).not.toBeTruthy(); + expect(isSystemEntity(componentEntity)).not.toBeTruthy(); + expect(isSystemEntity(domainEntity)).not.toBeTruthy(); + expect(isSystemEntity(groupEntity)).not.toBeTruthy(); + expect(isSystemEntity(locationEntity)).not.toBeTruthy(); + expect(isSystemEntity(resourceEntity)).not.toBeTruthy(); + expect(isSystemEntity(userEntity)).not.toBeTruthy(); + expect(isSystemEntity(systemEntity)).toBeTruthy(); + }); +}); + +describe('isUserEntity', () => { + it('should check for the intended type', () => { + expect(isUserEntity(apiEntity)).not.toBeTruthy(); + expect(isUserEntity(componentEntity)).not.toBeTruthy(); + expect(isUserEntity(domainEntity)).not.toBeTruthy(); + expect(isUserEntity(groupEntity)).not.toBeTruthy(); + expect(isUserEntity(locationEntity)).not.toBeTruthy(); + expect(isUserEntity(resourceEntity)).not.toBeTruthy(); + expect(isUserEntity(systemEntity)).not.toBeTruthy(); + expect(isUserEntity(userEntity)).toBeTruthy(); + }); +}); diff --git a/packages/catalog-model/src/entity/conditions.ts b/packages/catalog-model/src/entity/conditions.ts new file mode 100644 index 0000000000..d761695b5e --- /dev/null +++ b/packages/catalog-model/src/entity/conditions.ts @@ -0,0 +1,76 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + ApiEntity, + ComponentEntity, + DomainEntity, + GroupEntity, + LocationEntity, + ResourceEntity, + SystemEntity, + UserEntity, +} from '../kinds'; +import { Entity } from './Entity'; + +/** + * @public + */ +export function isApiEntity(entity: Entity): entity is ApiEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'API'; +} +/** + * @public + */ +export function isComponentEntity(entity: Entity): entity is ComponentEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'COMPONENT'; +} +/** + * @public + */ +export function isDomainEntity(entity: Entity): entity is DomainEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'DOMAIN'; +} +/** + * @public + */ +export function isGroupEntity(entity: Entity): entity is GroupEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'GROUP'; +} +/** + * @public + */ +export function isLocationEntity(entity: Entity): entity is LocationEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'LOCATION'; +} +/** + * @public + */ +export function isResourceEntity(entity: Entity): entity is ResourceEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'RESOURCE'; +} +/** + * @public + */ +export function isSystemEntity(entity: Entity): entity is SystemEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'SYSTEM'; +} +/** + * @public + */ +export function isUserEntity(entity: Entity): entity is UserEntity { + return entity.kind.toLocaleUpperCase('en-US') === 'USER'; +} diff --git a/packages/catalog-model/src/entity/index.ts b/packages/catalog-model/src/entity/index.ts index 45ee673167..039529bf3e 100644 --- a/packages/catalog-model/src/entity/index.ts +++ b/packages/catalog-model/src/entity/index.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +export * from './conditions'; export { DEFAULT_NAMESPACE, ANNOTATION_EDIT_URL, diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 4da56c18bd..227ad4b772 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/cli +## 0.18.0-next.1 + +### Minor Changes + +- 96a82d9791: **BREAKING**: Removed the following deprecated package commands: + + - `app:build` - Use `package build` instead + - `app:serve` - Use `package start` instead + - `backend:build` - Use `package build` instead + - `backend:bundle` - Use `package build` instead + - `backend:dev` - Use `package start` instead + - `plugin:build` - Use `package build` instead + - `plugin:serve` - Use `package start` instead + - `build` - Use `package build` instead + - `lint` - Use `package lint` instead + - `prepack` - Use `package prepack` instead + - `postpack` - Use `package postpack` instead + + In order to replace these you need to have [migrated to using package roles](https://backstage.io/docs/tutorials/package-role-migration). + +### Patch Changes + +- 86640214f0: Upgrade `@rollup/plugin-node-resolve` to `^13.0.6` +- e661242844: Updated dependency `run-script-webpack-plugin` to `^0.1.0`. +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + - @backstage/config-loader@1.1.3-next.0 + +## 0.17.3-next.0 + +### Patch Changes + +- d2256c0384: Fix `webpack-dev-server` deprecations. + ## 0.17.2 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 071fc74f97..6653744a33 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.17.2", + "version": "0.18.0-next.1", "private": false, "publishConfig": { "access": "public" @@ -33,8 +33,8 @@ "dependencies": { "@backstage/cli-common": "^0.1.9", "@backstage/config": "^1.0.1", - "@backstage/config-loader": "^1.1.2", - "@backstage/errors": "^1.0.0", + "@backstage/config-loader": "^1.1.3-next.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/release-manifests": "^0.0.4", "@backstage/types": "^1.0.0", "@hot-loader/react-dom-v16": "npm:@hot-loader/react-dom@^16.0.2", @@ -43,7 +43,7 @@ "@octokit/request": "^5.4.12", "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-node-resolve": "^13.0.6", "@rollup/plugin-yaml": "^3.1.0", "@spotify/eslint-config-base": "^13.0.0", "@spotify/eslint-config-react": "^13.0.0", @@ -110,7 +110,7 @@ "rollup-plugin-esbuild": "^4.7.2", "rollup-plugin-postcss": "^4.0.0", "rollup-pluginutils": "^2.8.2", - "run-script-webpack-plugin": "^0.0.14", + "run-script-webpack-plugin": "^0.1.0", "semver": "^7.3.2", "style-loader": "^3.3.1", "sucrase": "^3.20.2", @@ -126,14 +126,14 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@types/diff": "^5.0.0", "@types/express": "^4.17.6", "@types/fs-extra": "^9.0.1", diff --git a/packages/cli/src/commands/app/build.ts b/packages/cli/src/commands/app/build.ts deleted file mode 100644 index f90052bc83..0000000000 --- a/packages/cli/src/commands/app/build.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import fs from 'fs-extra'; -import { OptionValues } from 'commander'; -import { buildBundle } from '../../lib/bundler'; -import { getEnvironmentParallelism } from '../../lib/parallel'; -import { loadCliConfig } from '../../lib/config'; -import { paths } from '../../lib/paths'; - -export default async (opts: OptionValues) => { - const { name } = await fs.readJson(paths.resolveTarget('package.json')); - await buildBundle({ - entry: 'src/index', - parallelism: getEnvironmentParallelism(), - statsJsonEnabled: opts.stats, - ...(await loadCliConfig({ - args: opts.config, - fromPackage: name, - })), - }); -}; diff --git a/packages/cli/src/commands/app/serve.ts b/packages/cli/src/commands/app/serve.ts deleted file mode 100644 index e41c2367da..0000000000 --- a/packages/cli/src/commands/app/serve.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import fs from 'fs-extra'; -import chalk from 'chalk'; -import uniq from 'lodash/uniq'; -import { OptionValues } from 'commander'; -import { serveBundle } from '../../lib/bundler'; -import { loadCliConfig } from '../../lib/config'; -import { paths } from '../../lib/paths'; -import { Lockfile } from '../../lib/versioning'; -import { forbiddenDuplicatesFilter, includedFilter } from '../versions/lint'; - -export default async (opts: OptionValues) => { - const lockFilePath = paths.resolveTargetRoot('yarn.lock'); - if (fs.existsSync(lockFilePath)) { - try { - const lockfile = await Lockfile.load(lockFilePath); - const result = lockfile.analyze({ - filter: includedFilter, - }); - const problemPackages = [...result.newVersions, ...result.newRanges] - .map(({ name }) => name) - .filter(name => forbiddenDuplicatesFilter(name)); - - if (problemPackages.length > 0) { - console.log( - chalk.yellow( - `โš ๏ธ Some of the following packages may be outdated or have duplicate installations: - - ${uniq(problemPackages).join(', ')} - `, - ), - ); - console.log( - chalk.yellow( - `โš ๏ธ The following command may fix the issue, but it could also be an issue within one of your dependencies: - - yarn backstage-cli versions:check --fix - `, - ), - ); - } - } catch (error) { - console.log( - chalk.yellow( - `โš ๏ธ Unable to parse yarn.lock file properly: - - ${error} - - skipping analyzer for outdated or duplicate installations - `, - ), - ); - } - } else { - console.log( - chalk.yellow( - `โš ๏ธ Unable to find yarn.lock file: - - skipping analyzer for outdated or duplicate installations - `, - ), - ); - } - - const { name } = await fs.readJson(paths.resolveTarget('package.json')); - const waitForExit = await serveBundle({ - entry: 'src/index', - checksEnabled: opts.check, - ...(await loadCliConfig({ - args: opts.config, - fromPackage: name, - withFilteredKeys: true, - })), - }); - - await waitForExit(); -}; diff --git a/packages/cli/src/commands/backend/bundle.ts b/packages/cli/src/commands/backend/bundle.ts deleted file mode 100644 index 78d4d72d92..0000000000 --- a/packages/cli/src/commands/backend/bundle.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import os from 'os'; -import fs from 'fs-extra'; -import { resolve as resolvePath } from 'path'; -import tar, { CreateOptions } from 'tar'; -import { OptionValues } from 'commander'; -import { createDistWorkspace } from '../../lib/packager'; -import { paths } from '../../lib/paths'; -import { getEnvironmentParallelism } from '../../lib/parallel'; -import { buildPackage, Output } from '../../lib/builder'; - -const BUNDLE_FILE = 'bundle.tar.gz'; -const SKELETON_FILE = 'skeleton.tar.gz'; - -export default async (opts: OptionValues) => { - const targetDir = paths.resolveTarget('dist'); - const pkg = await fs.readJson(paths.resolveTarget('package.json')); - - // We build the target package without generating type declarations. - await buildPackage({ outputs: new Set([Output.cjs]) }); - - const tmpDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'backstage-bundle')); - try { - await createDistWorkspace([pkg.name], { - targetDir: tmpDir, - buildDependencies: Boolean(opts.buildDependencies), - buildExcludes: [pkg.name], - parallelism: getEnvironmentParallelism(), - skeleton: SKELETON_FILE, - }); - - // We built the target backend package using the regular build process, but the result of - // that has now been packed into the dist workspace, so clean up the dist dir. - await fs.remove(targetDir); - await fs.mkdir(targetDir); - - // Move out skeleton.tar.gz before we create the main bundle, no point having that included up twice. - await fs.move( - resolvePath(tmpDir, SKELETON_FILE), - resolvePath(targetDir, SKELETON_FILE), - ); - - // Create main bundle.tar.gz, with some tweaks to make it more likely hit Docker build cache. - await tar.create( - { - file: resolvePath(targetDir, BUNDLE_FILE), - cwd: tmpDir, - portable: true, - noMtime: true, - gzip: true, - } as CreateOptions & { noMtime: boolean }, - [''], - ); - } finally { - await fs.remove(tmpDir); - } -}; diff --git a/packages/cli/src/commands/backend/dev.ts b/packages/cli/src/commands/backend/dev.ts deleted file mode 100644 index 2ee43958a2..0000000000 --- a/packages/cli/src/commands/backend/dev.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import fs from 'fs-extra'; -import { OptionValues } from 'commander'; -import { paths } from '../../lib/paths'; -import { serveBackend } from '../../lib/bundler/backend'; - -export default async (opts: OptionValues) => { - // Cleaning dist/ before we start the dev process helps work around an issue - // where we end up with the entrypoint executing multiple times, causing - // a port bind conflict among other things. - await fs.remove(paths.resolveTarget('dist')); - - const waitForExit = await serveBackend({ - entry: 'src/index', - checksEnabled: opts.check, - inspectEnabled: opts.inspect, - inspectBrkEnabled: opts.inspectBrk, - }); - - await waitForExit(); -}; diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 1a7b2c4f08..aca238a32b 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -183,53 +183,6 @@ export function registerMigrateCommand(program: Command) { } export function registerCommands(program: Command) { - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('app:build') - .description('Build an app for a production release [DEPRECATED]') - .option('--stats', 'Write bundle stats to output directory') - .option(...configOption) - .action(lazy(() => import('./app/build').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('app:serve') - .description('Serve an app for local development [DEPRECATED]') - .option('--check', 'Enable type checking and linting') - .option(...configOption) - .action(lazy(() => import('./app/serve').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('backend:build') - .description('Build a backend plugin [DEPRECATED]') - .option('--minify', 'Minify the generated code') - .option('--experimental-type-build', 'Enable experimental type build') - .action(lazy(() => import('./backend/build').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('backend:bundle') - .description('Bundle the backend into a deployment archive [DEPRECATED]') - .option( - '--build-dependencies', - 'Build all local package dependencies before bundling the backend', - ) - .action(lazy(() => import('./backend/bundle').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('backend:dev') - .description( - 'Start local development server with HMR for the backend [DEPRECATED]', - ) - .option('--check', 'Enable type checking and linting') - .option('--inspect', 'Enable debugger') - .option('--inspect-brk', 'Enable debugger with await to attach debugger') - // We don't actually use the config in the CLI, just pass them on to the NodeJS process - .option(...configOption) - .action(lazy(() => import('./backend/dev').then(m => m.default))); - program .command('create') .storeOptionsAsProperties(false) @@ -268,22 +221,6 @@ export function registerCommands(program: Command) { lazy(() => import('./create-plugin/createPlugin').then(m => m.default)), ); - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('plugin:build') - .description('Build a plugin [DEPRECATED]') - .option('--minify', 'Minify the generated code') - .option('--experimental-type-build', 'Enable experimental type build') - .action(lazy(() => import('./plugin/build').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('plugin:serve') - .description('Serves the dev/ folder of a plugin [DEPRECATED]') - .option('--check', 'Enable type checking and linting') - .option(...configOption) - .action(lazy(() => import('./plugin/serve').then(m => m.default))); - program .command('plugin:diff') .option('--check', 'Fail if changes are required') @@ -291,27 +228,6 @@ export function registerCommands(program: Command) { .description('Diff an existing plugin with the creation template') .action(lazy(() => import('./plugin/diff').then(m => m.default))); - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('build') - .description('Build a package for publishing [DEPRECATED]') - .option('--outputs ', 'List of formats to output [types,cjs,esm]') - .option('--minify', 'Minify the generated code') - .option('--experimental-type-build', 'Enable experimental type build') - .action(lazy(() => import('./oldBuild').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('lint [directories...]') - .option( - '--format ', - 'Lint report output format', - 'eslint-formatter-friendly', - ) - .option('--fix', 'Attempt to automatically fix violations') - .description('Lint a package [DEPRECATED]') - .action(lazy(() => import('./lint').then(m => m.default))); - // TODO(Rugvip): Deprecate in favor of package variant program .command('test') @@ -400,22 +316,6 @@ export function registerCommands(program: Command) { .description('Check Backstage package versioning') .action(lazy(() => import('./versions/lint').then(m => m.default))); - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('prepack') - .description( - 'Prepares a package for packaging before publishing [DEPRECATED]', - ) - .action(lazy(() => import('./pack').then(m => m.pre))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('postpack') - .description( - 'Restores the changes made by the prepack command [DEPRECATED]', - ) - .action(lazy(() => import('./pack').then(m => m.post))); - // TODO(Rugvip): Deprecate in favor of package variant program .command('clean') diff --git a/packages/cli/src/commands/oldBuild.ts b/packages/cli/src/commands/oldBuild.ts deleted file mode 100644 index c0899d4d02..0000000000 --- a/packages/cli/src/commands/oldBuild.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { buildPackage, Output } from '../lib/builder'; -import { OptionValues } from 'commander'; - -export default async (opts: OptionValues) => { - let outputs = new Set(); - - const { outputs: outputsStr } = opts as { outputs?: string }; - if (outputsStr) { - for (const output of outputsStr.split(',') as (keyof typeof Output)[]) { - if (output in Output) { - outputs.add(Output[output]); - } else { - throw new Error(`Unknown output format: ${output}`); - } - } - } else { - outputs = new Set([Output.types, Output.esm, Output.cjs]); - } - - await buildPackage({ - outputs, - minify: opts.minify, - useApiExtractor: opts.experimentalTypeBuild, - }); -}; diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index d9228aa091..af297b1112 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/config-loader +## 1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + ## 1.1.2 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 3448b336b7..3a02afde9b 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.1.2", + "version": "1.1.3-next.0", "private": false, "publishConfig": { "access": "public", @@ -36,7 +36,7 @@ "dependencies": { "@backstage/cli-common": "^0.1.9", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/types": "^1.0.0", "@types/json-schema": "^7.0.6", "ajv": "^8.10.0", diff --git a/packages/config/package.json b/packages/config/package.json index bc0693fa73..fc99531bb4 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -37,7 +37,7 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@backstage/test-utils": "^1.1.1-next.0", + "@backstage/test-utils": "^1.1.2-next.0", "@types/jest": "^26.0.7", "@types/node": "^16.0.0" }, diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 8d78e51c62..c4d2f9d8fe 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/core-app-api +## 1.0.4-next.0 + +### Patch Changes + +- 8fe2357101: The `signOut` method of the `IdentityApi` will now navigate the user back to the base URL of the app as indicated by the `app.baseUrl` config. + ## 1.0.3 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index cbf9d7eb40..624a9259e9 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.0.3", + "version": "1.0.4-next.0", "private": false, "publishConfig": { "access": "public", @@ -49,8 +49,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index faec6d3d90..cf1c6305d4 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/core-components +## 0.9.6-next.1 + +### Patch Changes + +- 3c440ea77e: Change BackstageIconLinkVertical style to use pallette instead of explicit color +- 7e115d42f9: Support displaying subtitle text in `SidebarSubmenuItem` +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## 0.9.6-next.0 + +### Patch Changes + +- c3cfc83af2: Updated JSDoc to be MDX compatible. + ## 0.9.5 ### Patch Changes diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index 911ef36867..302ef7ef7d 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -1110,6 +1110,7 @@ export type SidebarSubmenuItemDropdownItem = { // @public export type SidebarSubmenuItemProps = { title: string; + subtitle?: string; to?: string; icon?: IconComponent; dropdownItems?: SidebarSubmenuItemDropdownItem[]; diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 867909b3cf..aeea26c17b 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.9.5", + "version": "0.9.6-next.1", "private": false, "publishConfig": { "access": "public", @@ -35,8 +35,8 @@ "dependencies": { "@backstage/config": "^1.0.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/theme": "^0.2.16-next.0", "@backstage/version-bridge": "^1.0.1", "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", @@ -79,9 +79,9 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/core-app-api": "^1.0.3", - "@backstage/cli": "^0.17.2", - "@backstage/test-utils": "^1.1.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx b/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx index 2816603f7f..dda2782c45 100644 --- a/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx +++ b/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx @@ -47,7 +47,7 @@ const useIconStyles = makeStyles( textAlign: 'center', }, disabled: { - color: 'gray', + color: theme.palette.text.secondary, cursor: 'default', }, primary: { diff --git a/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx b/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx index 41f1a1e287..a1565a348f 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx @@ -59,6 +59,13 @@ const useStyles = makeStyles( whiteSpace: 'nowrap', overflow: 'hidden', 'text-overflow': 'ellipsis', + lineHeight: 1, + }, + subtitle: { + fontSize: 10, + whiteSpace: 'nowrap', + overflow: 'hidden', + 'text-overflow': 'ellipsis', }, dropdownArrow: { position: 'absolute', @@ -105,6 +112,7 @@ export type SidebarSubmenuItemDropdownItem = { * Holds submenu item content. * * title: Text content of submenu item + * subtitle: A subtitle displayed under the main title * to: Path to navigate to when item is clicked * icon: Icon displayed on the left of text content * dropdownItems: Optional array of dropdown items displayed when submenu item is clicked. @@ -113,6 +121,7 @@ export type SidebarSubmenuItemDropdownItem = { */ export type SidebarSubmenuItemProps = { title: string; + subtitle?: string; to?: string; icon?: IconComponent; dropdownItems?: SidebarSubmenuItemDropdownItem[]; @@ -124,7 +133,7 @@ export type SidebarSubmenuItemProps = { * @public */ export const SidebarSubmenuItem = (props: SidebarSubmenuItemProps) => { - const { title, to, icon: Icon, dropdownItems } = props; + const { title, subtitle, to, icon: Icon, dropdownItems } = props; const classes = useStyles(); const { setIsHoveredOn } = useContext(SidebarItemWithSubmenuContext); const closeSubmenu = () => { @@ -158,6 +167,12 @@ export const SidebarSubmenuItem = (props: SidebarSubmenuItemProps) => { {Icon && } {title} +
+ {subtitle && ( + + {subtitle} + + )}
{showDropDown ? ( @@ -210,6 +225,12 @@ export const SidebarSubmenuItem = (props: SidebarSubmenuItemProps) => { {Icon && } {title} +
+ {subtitle && ( + + {subtitle} + + )}
diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 8d525b5f0f..eb17f75285 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -46,9 +46,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 775aed3faa..9ec1859289 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/create-app +## 0.4.29-next.1 + +### Patch Changes + +- Bumped create-app version. + +## 0.4.29-next.0 + +### Patch Changes + +- bc87604c26: Added an explicit `node-gyp` dependency to the root `package.json`. This is to work around a bug in older versions of `node-gyp` that causes Python execution to fail on macOS. + + You can add this workaround to your existing project by adding `node-gyp` as a `devDependency` in your root `package.json` file: + + ```diff + "devDependencies": { + + "node-gyp": "^9.0.0" + }, + ``` + ## 0.4.28 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index bca9fe9b68..381e975729 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.28", + "version": "0.4.29-next.1", "private": false, "publishConfig": { "access": "public" diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 563de9fc44..907c9f757d 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/dev-utils +## 1.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/app-defaults@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/test-utils@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/app-defaults@1.0.4-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + ## 1.0.3 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 2da041d9b7..c15e60d423 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.3", + "version": "1.0.4-next.1", "private": false, "publishConfig": { "access": "public", @@ -33,15 +33,15 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/app-defaults": "^1.0.3", - "@backstage/core-app-api": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/app-defaults": "^1.0.4-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/test-utils": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/test-utils": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@testing-library/jest-dom": "^5.10.1", @@ -59,7 +59,7 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", "@types/node": "^16.0.0" }, diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 2de60f4db8..09ed0c3a48 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -30,7 +30,7 @@ }, "devDependencies": { "@backstage/cli-common": "^0.1.9-next.0", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@types/fs-extra": "^9.0.1", "@types/node": "^16.11.26", "@types/puppeteer": "^5.4.4", diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index 20f938370b..b7d912f5ab 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/errors +## 1.1.0-next.0 + +### Minor Changes + +- 6d61b44466: The `ResponseError.fromResponse` now accepts a more narrow response type, in order to avoid incompatibilities between different fetch implementations. + + The `response` property of `ResponseError` has also been narrowed to a new `ConsumedResponse` type that omits all the properties for consuming the body of the response. This is not considered a breaking change as it was always an error to try to consume the body of the response. + ## 1.0.0 ### Major Changes diff --git a/packages/errors/api-report.md b/packages/errors/api-report.md index a01581135b..aab4e9baec 100644 --- a/packages/errors/api-report.md +++ b/packages/errors/api-report.md @@ -14,6 +14,17 @@ export class AuthenticationError extends CustomErrorBase {} // @public export class ConflictError extends CustomErrorBase {} +// @public +export type ConsumedResponse = { + readonly headers: Headers; + readonly ok: boolean; + readonly redirected: boolean; + readonly status: number; + readonly statusText: string; + readonly type: ResponseType; + readonly url: string; +}; + // @public export class CustomErrorBase extends Error { constructor(message?: string, cause?: Error | unknown); @@ -67,15 +78,21 @@ export class NotModifiedError extends CustomErrorBase {} // @public export function parseErrorResponseBody( - response: Response, + response: ConsumedResponse & { + text(): Promise; + }, ): Promise; // @public export class ResponseError extends Error { readonly body: ErrorResponseBody; readonly cause: Error; - static fromResponse(response: Response): Promise; - readonly response: Response; + static fromResponse( + response: ConsumedResponse & { + text(): Promise; + }, + ): Promise; + readonly response: ConsumedResponse; } // @public diff --git a/packages/errors/package.json b/packages/errors/package.json index 8327246224..01f1137eeb 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/errors", "description": "Common utilities for error handling within Backstage", - "version": "1.0.0", + "version": "1.1.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,7 +38,7 @@ "serialize-error": "^8.0.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0", + "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7" }, "files": [ diff --git a/packages/errors/src/errors/ResponseError.ts b/packages/errors/src/errors/ResponseError.ts index 84c8137bb5..a26891ef6a 100644 --- a/packages/errors/src/errors/ResponseError.ts +++ b/packages/errors/src/errors/ResponseError.ts @@ -19,6 +19,7 @@ import { ErrorResponseBody, parseErrorResponseBody, } from '../serialization/response'; +import { ConsumedResponse } from './types'; /** * An error thrown as the result of a failed server request. @@ -34,7 +35,7 @@ export class ResponseError extends Error { * Note that the body of this response is always consumed. Its parsed form is * in the `body` field. */ - readonly response: Response; + readonly response: ConsumedResponse; /** * The parsed JSON error body, as sent by the server. @@ -59,7 +60,9 @@ export class ResponseError extends Error { * function consumes the body of the response, and assumes that it hasn't * been consumed before. */ - static async fromResponse(response: Response): Promise { + static async fromResponse( + response: ConsumedResponse & { text(): Promise }, + ): Promise { const data = await parseErrorResponseBody(response); const status = data.response.statusCode || response.status; @@ -77,7 +80,7 @@ export class ResponseError extends Error { private constructor(props: { message: string; - response: Response; + response: ConsumedResponse; data: ErrorResponseBody; cause: Error; }) { diff --git a/packages/errors/src/errors/index.ts b/packages/errors/src/errors/index.ts index bc2fb2aa4e..9e1c2408af 100644 --- a/packages/errors/src/errors/index.ts +++ b/packages/errors/src/errors/index.ts @@ -27,3 +27,4 @@ export { } from './common'; export { CustomErrorBase } from './CustomErrorBase'; export { ResponseError } from './ResponseError'; +export type { ConsumedResponse } from './types'; diff --git a/packages/errors/src/errors/types.ts b/packages/errors/src/errors/types.ts new file mode 100644 index 0000000000..a62975571f --- /dev/null +++ b/packages/errors/src/errors/types.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * ConsumedResponse represents a Response that is known to have been consumed. + * The methods and properties used to read the body contents are therefore omitted. + * + * @public + */ +export type ConsumedResponse = { + readonly headers: Headers; + readonly ok: boolean; + readonly redirected: boolean; + readonly status: number; + readonly statusText: string; + readonly type: ResponseType; + readonly url: string; +}; diff --git a/packages/errors/src/serialization/response.ts b/packages/errors/src/serialization/response.ts index 3580220525..60894b243e 100644 --- a/packages/errors/src/serialization/response.ts +++ b/packages/errors/src/serialization/response.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { ConsumedResponse } from '../errors/types'; import { SerializedError } from './error'; /** @@ -53,7 +54,7 @@ export type ErrorResponseBody = { * @param response - The response of a failed request */ export async function parseErrorResponseBody( - response: Response, + response: ConsumedResponse & { text(): Promise }, ): Promise { try { const text = await response.text(); diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index d03553f50d..102fc3ea75 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/integration-react +## 1.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + +## 1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + ## 1.1.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 580b91509f..6a0cfe3041 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.1", + "version": "1.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,10 +25,10 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -38,9 +38,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 736d9ff2a1..3db1b7c7b9 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/integration +## 1.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + +## 1.2.2-next.0 + +### Patch Changes + +- 8829e175f2: Allow frontend visibility for `integrations` itself. + ## 1.2.1 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index 06faef890d..190031e473 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.2.1", + "version": "1.2.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "cross-fetch": "^3.1.5", "git-url-parse": "^11.6.0", "@octokit/rest": "^18.5.3", @@ -43,9 +43,9 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/config-loader": "^1.1.2", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/config-loader": "^1.1.3-next.0", + "@backstage/test-utils": "^1.1.2-next.1", "@types/jest": "^26.0.7", "@types/luxon": "^2.0.4", "msw": "^0.42.0" diff --git a/packages/release-manifests/package.json b/packages/release-manifests/package.json index f0627a9c95..822c3c1a52 100644 --- a/packages/release-manifests/package.json +++ b/packages/release-manifests/package.json @@ -36,7 +36,7 @@ "cross-fetch": "^3.1.5" }, "devDependencies": { - "@backstage/test-utils": "^1.1.1", + "@backstage/test-utils": "^1.1.2-next.0", "msw": "^0.42.0", "@types/jest": "^26.0.7", "@types/node": "^16.0.0" diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 58102369ed..29a53625fc 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,36 @@ # techdocs-cli-embedded-app +## 0.2.72-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/cli@0.18.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-techdocs@1.2.1-next.1 + - @backstage/app-defaults@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/test-utils@1.1.2-next.1 + +## 0.2.72-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/cli@0.17.3-next.0 + - @backstage/plugin-techdocs@1.2.1-next.0 + - @backstage/app-defaults@1.0.4-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + ## 0.2.71 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 8029d604db..fa4ec8a38c 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,25 +1,25 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.71", + "version": "0.2.72-next.1", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", - "@backstage/cli": "^0.17.2", + "@backstage/app-defaults": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/cli": "^0.18.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog": "^1.3.0", - "@backstage/plugin-techdocs": "^1.2.0", - "@backstage/plugin-techdocs-react": "^1.0.1", - "@backstage/test-utils": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/plugin-techdocs": "^1.2.1-next.1", + "@backstage/plugin-techdocs-react": "^1.0.2-next.0", + "@backstage/test-utils": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", "history": "^5.0.0", @@ -30,7 +30,7 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 21eb2393b7..3e66248276 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,25 @@ # @techdocs/cli +## 1.1.3-next.1 + +### Patch Changes + +- a5d73da942: Fix the flag parsing for `legacyCopyReadmeMdToIndexMd` in `techdocs-cli generate` command, and decouple it's logic from the `techdocs-ref` flag. +- Updated dependencies + - @backstage/plugin-techdocs-node@1.2.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + +## 1.1.3-next.0 + +### Patch Changes + +- 14ce0d9347: Fixed a bug that prevented docker images from being pulled by default when generating TechDocs. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-techdocs-node@1.1.3-next.0 + ## 1.1.2 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index d1db470572..00e254d10f 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.1.2", + "version": "1.1.3-next.1", "private": false, "publishConfig": { "access": "public" @@ -37,7 +37,7 @@ "techdocs-cli": "bin/techdocs-cli" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/commander": "^2.12.2", "@types/fs-extra": "^9.0.6", "@types/http-proxy": "^1.17.4", @@ -62,11 +62,11 @@ "ext": "ts" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/cli-common": "^0.1.9", "@backstage/config": "^1.0.1", - "@backstage/plugin-techdocs-node": "^1.1.2", + "@backstage/plugin-techdocs-node": "^1.2.0-next.1", "@types/dockerode": "^3.3.0", "commander": "^9.1.0", "dockerode": "^3.3.1", diff --git a/packages/techdocs-cli/src/commands/generate/generate.ts b/packages/techdocs-cli/src/commands/generate/generate.ts index 309b9c7969..1e4ed220d9 100644 --- a/packages/techdocs-cli/src/commands/generate/generate.ts +++ b/packages/techdocs-cli/src/commands/generate/generate.ts @@ -57,8 +57,8 @@ export default async function generate(opts: OptionValues) { runIn: opts.docker ? 'docker' : 'local', dockerImage, pullImage, - legacyCopyReadmeMdToIndexMd, mkdocs: { + legacyCopyReadmeMdToIndexMd, omitTechdocsCorePlugin, }, }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index d8e9a8dd11..adbb3cd7ac 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/test-utils +## 1.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## 1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.0.4-next.0 + ## 1.1.1 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 0c52f47325..1dfa7faf43 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.1.1", + "version": "1.1.2-next.1", "private": false, "publishConfig": { "access": "public", @@ -34,11 +34,11 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.3", + "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-permission-react": "^0.4.2", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-permission-react": "^0.4.3-next.0", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.11.2", @@ -55,7 +55,7 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "msw": "^0.42.0" diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 5c3e8cf5d6..15e9eb68cd 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/theme +## 0.2.16-next.0 + +### Patch Changes + +- 4c09c09102: Adds optional `htmlFontSize` property and also sets typography design tokens for h5 and h6 in base theme. + ## 0.2.15 ### Patch Changes diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index f650636710..772e868635 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -145,5 +145,6 @@ export type SimpleThemeOptions = { defaultPageTheme: string; pageTheme?: Record; fontFamily?: string; + htmlFontSize?: number; }; ``` diff --git a/packages/theme/package.json b/packages/theme/package.json index d10999fefb..a3ff37538c 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/theme", "description": "material-ui theme for use with Backstage.", - "version": "0.2.15", + "version": "0.2.16-next.0", "private": false, "publishConfig": { "access": "public", @@ -36,7 +36,7 @@ "@material-ui/core": "^4.12.2" }, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/packages/theme/src/baseTheme.ts b/packages/theme/src/baseTheme.ts index da663e3398..5e222c0c3e 100644 --- a/packages/theme/src/baseTheme.ts +++ b/packages/theme/src/baseTheme.ts @@ -24,6 +24,7 @@ import { } from './types'; import { pageTheme as defaultPageThemes } from './pageTheme'; +const DEFAULT_HTML_FONT_SIZE = 16; const DEFAULT_FONT_FAMILY = '"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif'; @@ -37,6 +38,7 @@ export function createThemeOptions( ): BackstageThemeOptions { const { palette, + htmlFontSize = DEFAULT_HTML_FONT_SIZE, fontFamily = DEFAULT_FONT_FAMILY, defaultPageTheme, pageTheme = defaultPageThemes, @@ -57,9 +59,17 @@ export function createThemeOptions( }, }, typography: { + htmlFontSize, fontFamily, + h6: { + fontWeight: 700, + fontSize: 20, + marginBottom: 2, + }, h5: { fontWeight: 700, + fontSize: 24, + marginBottom: 4, }, h4: { fontWeight: 700, diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index 3d1a64c38f..b921154005 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -149,6 +149,7 @@ export type SimpleThemeOptions = { defaultPageTheme: string; pageTheme?: Record; fontFamily?: string; + htmlFontSize?: number; }; /** diff --git a/packages/types/package.json b/packages/types/package.json index 5ea10709ec..d1410631bd 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -34,7 +34,7 @@ }, "dependencies": {}, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0", + "@backstage/cli": "^0.18.0-next.1", "@types/zen-observable": "^0.8.0", "zen-observable": "^0.8.15" }, diff --git a/packages/version-bridge/package.json b/packages/version-bridge/package.json index 81ec8017a1..4b9ce2ed11 100644 --- a/packages/version-bridge/package.json +++ b/packages/version-bridge/package.json @@ -37,7 +37,7 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0", + "@backstage/cli": "^0.18.0-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0" diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 946df67282..15a0519010 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-adr-backend +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-adr-common@0.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-adr-common@0.1.2-next.0 + ## 0.1.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index c192e0cd85..1a42f7ff03 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.1.1", + "version": "0.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,14 +29,14 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-adr-common": "^0.1.1", - "@backstage/plugin-search-common": "^0.3.5", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-adr-common": "^0.1.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", "luxon": "^2.0.2", "marked": "^4.0.14", "winston": "^3.2.1", @@ -44,7 +44,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/marked": "^4.0.0", "@types/supertest": "^2.0.8", "supertest": "^6.1.3", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index d9a0207248..e07697118c 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-adr-common +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + ## 0.1.1 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index d3607f3a99..a0567fb5b8 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.1.1", + "version": "0.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,12 +30,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-search-common": "^0.3.5" + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 61e28f3834..fc8b859ec5 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-adr +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-adr-common@0.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## 0.1.2-next.0 + +### Patch Changes + +- 7d47e7e512: Track discover event and result rank for `AdrSearchResultListItem` +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-adr-common@0.1.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + ## 0.1.1 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 194cc44ae4..60a3c594e5 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.1.1", + "version": "0.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,14 +22,14 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-adr-common": "^0.1.1", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/plugin-search-react": "^0.2.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-adr-common": "^0.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -44,10 +44,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index e24e510782..5810bda422 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-airbrake-backend +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.2.6 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 4e56593990..da6cdcbfef 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.6", + "version": "0.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,7 +22,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", "@types/express": "*", "express": "^4.17.1", @@ -33,7 +33,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/http-proxy-middleware": "^0.19.3", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index a09bf6c668..f8b683bf5a 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-airbrake +## 0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/dev-utils@1.0.4-next.1 + - @backstage/test-utils@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/dev-utils@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + ## 0.3.6 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index b98785889f..00554efeee 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.6", + "version": "0.3.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,13 +23,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/test-utils": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/test-utils": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/app-defaults": "^1.0.3", - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/app-defaults": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index 26b754fbf8..d1cce9b7ef 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-allure +## 0.1.23-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.22 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index b5d95973f2..a576aa8f9b 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.22", + "version": "0.1.23-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,11 +25,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index b8a14619d4..23f583473d 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-analytics-module-ga +## 0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.1.17 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 7196539053..e7bae29f51 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.17", + "version": "0.1.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,9 +25,9 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -38,10 +38,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 7f1fc05e69..a27c58192e 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-apache-airflow +## 0.2.0-next.1 + +### Minor Changes + +- 01f976ea72: Exposed DagTableComponent as standalone component + added a prop to get only select DAGs instead of the full list + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + +## 0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.1.14 ### Patch Changes diff --git a/plugins/apache-airflow/README.md b/plugins/apache-airflow/README.md index bdbb1b981f..305a94f081 100644 --- a/plugins/apache-airflow/README.md +++ b/plugins/apache-airflow/README.md @@ -42,6 +42,26 @@ yarn --cwd packages/app add @backstage/plugin-apache-airflow ); ``` +If you just want to embed the DAGs into an existing page, you can use the `ApacheAirflowDagTable` + +```tsx +import { ApacheAirflowDagTable } from '@backstage/plugin-apache-airflow'; + +export function SomeEntityPage(): JSX.Element { + return ( + + + + ); +} +``` + ## Configuration For links to the Airflow instance, the `baseUrl` must be defined in diff --git a/plugins/apache-airflow/api-report.md b/plugins/apache-airflow/api-report.md index ca151f0734..333e4543cf 100644 --- a/plugins/apache-airflow/api-report.md +++ b/plugins/apache-airflow/api-report.md @@ -8,6 +8,13 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; +// @public +export const ApacheAirflowDagTable: ({ + dagIds, + }: { + dagIds?: string[] | undefined; +}) => JSX.Element; + // Warning: (ae-missing-release-tag) "ApacheAirflowPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 5455bd602b..a880942750 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.1.14", + "version": "0.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,7 +23,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -36,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apache-airflow/src/api/ApacheAirflowApi.ts b/plugins/apache-airflow/src/api/ApacheAirflowApi.ts index dde8c57802..838292524a 100644 --- a/plugins/apache-airflow/src/api/ApacheAirflowApi.ts +++ b/plugins/apache-airflow/src/api/ApacheAirflowApi.ts @@ -25,6 +25,7 @@ export type ApacheAirflowApi = { discoveryApi: DiscoveryApi; baseUrl: string; listDags(options?: { objectsPerRequest: number }): Promise; + getDags(dagIds: string[]): Promise<{ dags: Dag[]; dagsNotFound: string[] }>; updateDag(dagId: string, isPaused: boolean): Promise; getInstanceStatus(): Promise; getInstanceVersion(): Promise; diff --git a/plugins/apache-airflow/src/api/ApacheAirflowClient.test.ts b/plugins/apache-airflow/src/api/ApacheAirflowClient.test.ts index 704b17eb34..b9bdb02283 100644 --- a/plugins/apache-airflow/src/api/ApacheAirflowClient.test.ts +++ b/plugins/apache-airflow/src/api/ApacheAirflowClient.test.ts @@ -107,6 +107,15 @@ describe('ApacheAirflowClient', () => { ); }), + rest.get(`${mockBaseUrl}/airflow/dags/:dag_id`, (req, res, ctx) => { + const { dag_id } = req.params; + const dag = dags.find(d => d.dag_id === dag_id); + if (dag) { + return res(ctx.json(dag)); + } + return res(ctx.status(404)); + }), + rest.patch(`${mockBaseUrl}/airflow/dags/:dag_id`, (req, res, ctx) => { const { dag_id } = req.params; const body = JSON.parse(req.body as string); @@ -160,4 +169,33 @@ describe('ApacheAirflowClient', () => { expect(response.dag_id).toEqual(dagId); expect(response.is_paused).toEqual(true); }); + + it('get only some dags', async () => { + setupHandlers(); + const client = new ApacheAirflowClient({ + discoveryApi: discoveryApi, + baseUrl: 'localhost:8080/', + }); + const dagIds = ['mock_dag_1', 'mock_dag_3']; + const response = await client.getDags(dagIds); + expect(response.dags.length).toEqual(dagIds.length); + response.dags.forEach((dag, index) => + expect(dag.dag_id).toEqual(dagIds[index]), + ); + expect(response.dagsNotFound.length).toEqual(0); + }); + + it('get dags but ignore NOT FOUND errors', async () => { + setupHandlers(); + const client = new ApacheAirflowClient({ + discoveryApi: discoveryApi, + baseUrl: 'localhost:8080/', + }); + const dagIds = ['mock_dag_1', 'a-random-DAG-id']; + const response = await client.getDags(dagIds); + expect(response.dags.length).toEqual(1); + expect(response.dags[0].dag_id).toEqual('mock_dag_1'); + expect(response.dagsNotFound.length).toEqual(1); + expect(response.dagsNotFound[0]).toEqual('a-random-DAG-id'); + }); }); diff --git a/plugins/apache-airflow/src/api/ApacheAirflowClient.ts b/plugins/apache-airflow/src/api/ApacheAirflowClient.ts index 847a1b1ca6..c722f5977d 100644 --- a/plugins/apache-airflow/src/api/ApacheAirflowClient.ts +++ b/plugins/apache-airflow/src/api/ApacheAirflowClient.ts @@ -75,6 +75,25 @@ export class ApacheAirflowClient implements ApacheAirflowApi { return dags; } + async getDags( + dagIds: string[], + ): Promise<{ dags: Dag[]; dagsNotFound: string[] }> { + const dagsNotFound: string[] = []; + const response = await Promise.all( + dagIds.map(id => { + return this.fetch(`/dags/${id}`).catch(e => { + if (e.message.toUpperCase('en-US') === 'NOT FOUND') { + dagsNotFound.push(id); + } else { + throw e; + } + }); + }), + ); + const dags = response.filter(Boolean) as Dag[]; + return { dags, dagsNotFound }; + } + async updateDag(dagId: string, isPaused: boolean): Promise { const init = { method: 'PATCH', diff --git a/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.test.tsx b/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.test.tsx new file mode 100644 index 0000000000..16ff3120be --- /dev/null +++ b/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.test.tsx @@ -0,0 +1,62 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ApacheAirflowApi, apacheAirflowApiRef } from '../../api'; +import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; +import React from 'react'; +import { DagTableComponent } from './DagTableComponent'; + +describe('DagTableComponent', () => { + const mockApi: jest.Mocked = { + listDags: jest.fn().mockResolvedValue([ + { + dag_id: 'mock_dag_1', + }, + { + dag_id: 'mock_dag_2', + }, + { + dag_id: 'mock_dag_3', + }, + ]), + getDags: jest.fn().mockResolvedValue({ + dags: [{ dag_id: 'mock_dag_1' }], + dagsNotFound: ['a-random-id'], + }), + } as any; + + it('should render all DAGs', async () => { + const { getByText } = await renderInTestApp( + + + , + ); + + ['mock_dag_1', 'mock_dag_2', 'mock_dag_3'].forEach(dagId => { + expect(getByText(dagId)).toBeInTheDocument(); + }); + }); + + it('should render only selected DAGs', async () => { + const { getByText } = await renderInTestApp( + + + , + ); + expect(getByText('mock_dag_1')).toBeInTheDocument(); + expect(getByText('Warning: 1 DAGs were not found')).toBeInTheDocument(); + expect(getByText('a-random-id')).toBeInTheDocument(); + }); +}); diff --git a/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx b/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx index cf343a596e..2514d70d45 100644 --- a/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx +++ b/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx @@ -20,6 +20,7 @@ import { StatusOK, Table, TableColumn, + WarningPanel, } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import Box from '@material-ui/core/Box'; @@ -129,9 +130,18 @@ export const DenseTable = ({ dags }: DenseTableProps) => { ); }; -export const DagTableComponent = () => { +type DagTableComponentProps = { + dagIds?: string[]; +}; + +export const DagTableComponent = ({ dagIds }: DagTableComponentProps) => { const apiClient = useApi(apacheAirflowApiRef); + const { value, loading, error } = useAsync(async (): Promise => { + if (dagIds) { + const { dags } = await apiClient.getDags(dagIds); + return dags; + } return await apiClient.listDags(); }, []); @@ -146,6 +156,22 @@ export const DagTableComponent = () => { id: el.dag_id, // table records require `id` attribute dagUrl: `${apiClient.baseUrl}dag_details?dag_id=${el.dag_id}`, // construct path to DAG using `baseUrl` })); - - return ; + const dagsNotFound = + dagIds && value + ? dagIds.filter(id => !value.find(d => d.dag_id === id)) + : []; + return ( + <> + {dagsNotFound.length ? ( + + {dagsNotFound.map(dagId => ( + {dagId} + ))} + + ) : ( + '' + )} + + + ); }; diff --git a/plugins/apache-airflow/src/index.ts b/plugins/apache-airflow/src/index.ts index 7186839c0a..e8353c7760 100644 --- a/plugins/apache-airflow/src/index.ts +++ b/plugins/apache-airflow/src/index.ts @@ -20,4 +20,8 @@ * @packageDocumentation */ -export { apacheAirflowPlugin, ApacheAirflowPage } from './plugin'; +export { + apacheAirflowPlugin, + ApacheAirflowPage, + ApacheAirflowDagTable, +} from './plugin'; diff --git a/plugins/apache-airflow/src/plugin.ts b/plugins/apache-airflow/src/plugin.ts index 04ef1974d4..664cde36cc 100644 --- a/plugins/apache-airflow/src/plugin.ts +++ b/plugins/apache-airflow/src/plugin.ts @@ -17,11 +17,12 @@ import { rootRouteRef } from './routes'; import { apacheAirflowApiRef, ApacheAirflowClient } from './api'; import { + configApiRef, createApiFactory, + createComponentExtension, createPlugin, createRoutableExtension, discoveryApiRef, - configApiRef, } from '@backstage/core-plugin-api'; export const apacheAirflowPlugin = createPlugin({ @@ -49,3 +50,20 @@ export const ApacheAirflowPage = apacheAirflowPlugin.provide( mountPoint: rootRouteRef, }), ); + +/** + * Render the DAGs in a table + * If the dagIds is specified, only those DAGs are loaded. + * Otherwise, it's going to list all the DAGs + * @public + * @param dagIds - optional string[] of the DAGs to show in the table. If undefined, it will list all DAGs + */ +export const ApacheAirflowDagTable = apacheAirflowPlugin.provide( + createComponentExtension({ + name: 'ApacheAirflowDagTable', + component: { + lazy: () => + import('./components/DagTableComponent').then(m => m.DagTableComponent), + }, + }), +); diff --git a/plugins/api-docs-module-protoc-gen-doc/CHANGELOG.md b/plugins/api-docs-module-protoc-gen-doc/CHANGELOG.md new file mode 100644 index 0000000000..c6ca346a62 --- /dev/null +++ b/plugins/api-docs-module-protoc-gen-doc/CHANGELOG.md @@ -0,0 +1,7 @@ +# @backstage/plugin-api-docs-module-protoc-gen-doc + +## 0.1.0-next.0 + +### Minor Changes + +- e0328f2107: Added the new `grpcDocsApiWidget` to render `protoc-gen-doc` generated descriptors by the `grpc-docs` package. diff --git a/plugins/api-docs-module-protoc-gen-doc/package.json b/plugins/api-docs-module-protoc-gen-doc/package.json index 81e7b7ea45..00409845d0 100644 --- a/plugins/api-docs-module-protoc-gen-doc/package.json +++ b/plugins/api-docs-module-protoc-gen-doc/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs-module-protoc-gen-doc", "description": "Additional functionalities for the api-docs plugin that renders the output of the protoc-gen-doc", - "version": "0.0.0", + "version": "0.1.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,7 +37,7 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0", + "@backstage/cli": "^0.18.0-next.1", "@testing-library/jest-dom": "^5.16.4", "@types/react": "^16.13.1 || ^17.0.0" }, diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 2d61c19e62..b4ebf48607 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-api-docs +## 0.8.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.8.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.8.6 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 9cd1e3aef0..8b4f80fa3f 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.8.6", + "version": "0.8.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ }, "dependencies": { "@asyncapi/react-component": "1.0.0-next.38", - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog": "^1.3.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -57,10 +57,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 6e86ece20d..cf84f54fb0 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-app-backend +## 0.3.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/config-loader@1.1.3-next.0 + +## 0.3.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.3.33 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 5efb839730..9277e60485 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.33", + "version": "0.3.34-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,8 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/config-loader": "^1.1.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/config-loader": "^1.1.3-next.0", "@backstage/config": "^1.0.1", "@backstage/types": "^1.0.0", "@types/express": "^4.17.6", @@ -50,8 +50,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@backstage/types": "^1.0.0", "@types/supertest": "^2.0.8", "mock-fs": "^5.1.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 0f69289de5..4b0da94dad 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-auth-backend +## 0.15.0-next.1 + +### Minor Changes + +- 9d4040777e: **BREAKING**: Removed all directly exported auth provider factories, option types, and sign-in resolvers. For example: `AwsAlbProviderOptions`, `bitbucketUserIdSignInResolver`, `createGithubProvider`. These are all still accessible via the `providers` export. For example, use `providers.github.create()` rather than `createGithubProvider()`, and `providers.bitbucket.resolvers.userIdMatchingUserEntityAnnotation()` rather than `bitbucketUserIdSignInResolver`. + + **BREAKING**: Removed the exported `AuthProviderFactoryOptions` type as well as the deprecated option fields of the `AuthProviderFactory` callback. This includes the `tokenManager`, `tokenIssuer`, `discovery`, and `catalogApi` fields. Existing usage of these should be replaced with the new utilities in the `resolverContext` field. The deprecated `TokenIssuer` type is now also removed, since it is no longer used. + + **BREAKING**: Removed `getEntityClaims`, use `getDefaultOwnershipEntityRefs` instead. + + **DEPRECATION**: Deprecated `AtlassianAuthProvider` as it was unintentionally exported. + +### Patch Changes + +- f2cf79d62e: Added an option for the auth backend router to select the algorithm for the JWT token signing keys +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-auth-node@0.2.3-next.1 + +## 0.14.2-next.0 + +### Patch Changes + +- 859346bfbb: Updated dependency `google-auth-library` to `^8.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 0.14.1 ### Patch Changes diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index bb25ff6d57..d216545bd4 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -23,9 +23,7 @@ import { TokenSet } from 'openid-client'; import { UserEntity } from '@backstage/catalog-model'; import { UserinfoResponse } from 'openid-client'; -// Warning: (ae-missing-release-tag) "AtlassianAuthProvider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public @deprecated (undocumented) export class AtlassianAuthProvider implements OAuthHandlers { // Warning: (ae-forgotten-export) The symbol "AtlassianAuthProviderOptions" needs to be exported by the entry point index.d.ts constructor(options: AtlassianAuthProviderOptions); @@ -45,22 +43,6 @@ export class AtlassianAuthProvider implements OAuthHandlers { start(req: OAuthStartRequest): Promise; } -// @public @deprecated (undocumented) -export type AtlassianProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export type Auth0ProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - // @public export type AuthHandler = ( input: TAuthResult, @@ -89,26 +71,8 @@ export type AuthProviderFactory = (options: { config: Config; logger: Logger; resolverContext: AuthResolverContext; - tokenManager: TokenManager; - tokenIssuer: TokenIssuer; - discovery: PluginEndpointDiscovery; - catalogApi: CatalogApi; }) => AuthProviderRouteHandlers; -// Warning: (ae-missing-release-tag) "AuthProviderFactoryOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public @deprecated (undocumented) -export type AuthProviderFactoryOptions = { - providerId: string; - globalConfig: AuthProviderConfig; - config: Config; - logger: Logger; - tokenManager: TokenManager; - tokenIssuer: TokenIssuer; - discovery: PluginEndpointDiscovery; - catalogApi: CatalogApi; -}; - // Warning: (ae-missing-release-tag) "AuthProviderRouteHandlers" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -139,9 +103,6 @@ export type AuthResolverCatalogUserQuery = // @public export type AuthResolverContext = { - logger: Logger; - tokenIssuer: TokenIssuer; - catalogIdentityClient: CatalogIdentityClient; issueToken(params: TokenParams): Promise<{ token: string; }>; @@ -160,14 +121,6 @@ export type AuthResponse = { backstageIdentity?: BackstageIdentityResponse; }; -// @public @deprecated (undocumented) -export type AwsAlbProviderOptions = { - authHandler?: AuthHandler; - signIn: { - resolver: SignInResolver; - }; -}; - // @public (undocumented) export type AwsAlbResult = { fullProfile: Profile; @@ -206,20 +159,6 @@ export type BitbucketPassportProfile = Profile & { }; }; -// @public @deprecated (undocumented) -export type BitbucketProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export const bitbucketUserIdSignInResolver: SignInResolver; - -// @public @deprecated (undocumented) -export const bitbucketUsernameSignInResolver: SignInResolver; - // Warning: (ae-missing-release-tag) "CatalogIdentityClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -242,189 +181,6 @@ export type CookieConfigurer = (ctx: { secure: boolean; }; -// @public @deprecated (undocumented) -export const createAtlassianProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createAuth0Provider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createAwsAlbProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn: { - resolver: SignInResolver; - }; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createBitbucketProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createGcpIapProvider: (options: { - authHandler?: AuthHandler | undefined; - signIn: { - resolver: SignInResolver; - }; -}) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createGithubProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - stateEncoder?: StateEncoder | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createGitlabProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createGoogleProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createMicrosoftProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createOAuth2Provider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createOauth2ProxyProvider: (options: { - authHandler?: AuthHandler> | undefined; - signIn: { - resolver: SignInResolver>; - }; -}) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createOidcProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createOktaProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// @public @deprecated (undocumented) -export const createOneLoginProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - // Warning: (ae-missing-release-tag) "createOriginFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -435,23 +191,7 @@ export function createOriginFilter(config: Config): (origin: string) => boolean; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; -// @public @deprecated (undocumented) -export const createSamlProvider: ( - options?: - | { - authHandler?: AuthHandler | undefined; - signIn?: - | { - resolver: SignInResolver; - } - | undefined; - } - | undefined, -) => AuthProviderFactory; - -// Warning: (ae-missing-release-tag) "factories" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export const defaultAuthProviderFactories: { [providerId: string]: AuthProviderFactory; }; @@ -466,14 +206,6 @@ export const encodeState: (state: OAuthState) => string; // @public (undocumented) export const ensuresXRequestedWith: (req: express.Request) => boolean; -// @public @deprecated (undocumented) -export type GcpIapProviderOptions = { - authHandler?: AuthHandler; - signIn: { - resolver: SignInResolver; - }; -}; - // @public export type GcpIapResult = { iapToken: GcpIapTokenInfo; @@ -489,11 +221,6 @@ export type GcpIapTokenInfo = { // @public export function getDefaultOwnershipEntityRefs(entity: Entity): string[]; -// Warning: (ae-missing-release-tag) "getEntityClaims" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public @deprecated (undocumented) -export function getEntityClaims(entity: UserEntity): TokenParams['claims']; - // Warning: (ae-missing-release-tag) "GithubOAuthResult" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -508,61 +235,6 @@ export type GithubOAuthResult = { refreshToken?: string; }; -// @public @deprecated (undocumented) -export type GithubProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; - stateEncoder?: StateEncoder; -}; - -// @public @deprecated (undocumented) -export type GitlabProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export const googleEmailSignInResolver: SignInResolver; - -// @public @deprecated (undocumented) -export type GoogleProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export const microsoftEmailSignInResolver: SignInResolver; - -// @public @deprecated (undocumented) -export type MicrosoftProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export type OAuth2ProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export type Oauth2ProxyProviderOptions = { - authHandler: AuthHandler>; - signIn: { - resolver: SignInResolver>; - }; -}; - // @public export type OAuth2ProxyResult = { fullProfile: JWTPayload; @@ -584,10 +256,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { static fromConfig( config: AuthProviderConfig, handlers: OAuthHandlers, - options: Pick< - Options, - 'providerId' | 'persistScopes' | 'tokenIssuer' | 'callbackUrl' - >, + options: Pick, ): OAuthAdapter; // (undocumented) logout(req: express.Request, res: express.Response): Promise; @@ -703,33 +372,6 @@ export type OidcAuthResult = { userinfo: UserinfoResponse; }; -// @public @deprecated (undocumented) -export type OidcProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export const oktaEmailSignInResolver: SignInResolver; - -// @public @deprecated (undocumented) -export type OktaProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - -// @public @deprecated (undocumented) -export type OneLoginProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - // Warning: (ae-missing-release-tag) "postMessageResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1008,6 +650,8 @@ export interface RouterOptions { // (undocumented) providerFactories?: ProviderFactories; // (undocumented) + tokenFactoryAlgorithm?: string; + // (undocumented) tokenManager: TokenManager; } @@ -1016,17 +660,6 @@ export type SamlAuthResult = { fullProfile: any; }; -// @public @deprecated (undocumented) -export const samlNameIdEntityNameSignInResolver: SignInResolver; - -// @public @deprecated (undocumented) -export type SamlProviderOptions = { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver; - }; -}; - // @public export type SignInInfo = { profile: ProfileInfo; @@ -1044,14 +677,6 @@ export type StateEncoder = (req: OAuthStartRequest) => Promise<{ encodedState: string; }>; -// @public @deprecated -export type TokenIssuer = { - issueToken(params: TokenParams): Promise; - listPublicKeys(): Promise<{ - keys: AnyJWK[]; - }>; -}; - // @public export type TokenParams = { claims: { @@ -1077,8 +702,4 @@ export type WebMessageResponse = type: 'authorization_response'; error: Error; }; - -// Warnings were encountered during analysis: -// -// src/identity/types.d.ts:38:9 - (ae-forgotten-export) The symbol "AnyJWK" needs to be exported by the entry point index.d.ts ``` diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index d0a4438afa..3b7ac26295 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.14.1", + "version": "0.15.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,12 +33,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/plugin-auth-node": "^0.2.2", - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/plugin-auth-node": "^0.2.3-next.1", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/types": "^1.0.0", "@google-cloud/firestore": "^5.0.2", "@types/express": "^4.17.6", @@ -76,8 +76,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", diff --git a/plugins/auth-backend/src/identity/index.ts b/plugins/auth-backend/src/identity/index.ts index cb2f369668..a5e0dd4b80 100644 --- a/plugins/auth-backend/src/identity/index.ts +++ b/plugins/auth-backend/src/identity/index.ts @@ -20,4 +20,4 @@ export { DatabaseKeyStore } from './DatabaseKeyStore'; export { MemoryKeyStore } from './MemoryKeyStore'; export { FirestoreKeyStore } from './FirestoreKeyStore'; export { KeyStores } from './KeyStores'; -export type { KeyStore, TokenIssuer, TokenParams } from './types'; +export type { KeyStore, TokenParams } from './types'; diff --git a/plugins/auth-backend/src/identity/types.ts b/plugins/auth-backend/src/identity/types.ts index 5a350284e5..4765b50d7d 100644 --- a/plugins/auth-backend/src/identity/types.ts +++ b/plugins/auth-backend/src/identity/types.ts @@ -37,12 +37,8 @@ export type TokenParams = { }; }; -// TODO(Rugvip): This should at least be made internal /** * A TokenIssuer is able to issue verifiable ID Tokens on demand. - * - * @public - * @deprecated This interface is deprecated and will be removed in a future release. */ export type TokenIssuer = { /** diff --git a/plugins/auth-backend/src/index.ts b/plugins/auth-backend/src/index.ts index d51cb3f1eb..f8a8580359 100644 --- a/plugins/auth-backend/src/index.ts +++ b/plugins/auth-backend/src/index.ts @@ -21,7 +21,7 @@ */ export * from './service/router'; -export type { TokenIssuer, TokenParams } from './identity'; +export type { TokenParams } from './identity'; export * from './providers'; // flow package provides 2 functions diff --git a/plugins/auth-backend/src/lib/catalog/helpers.ts b/plugins/auth-backend/src/lib/catalog/helpers.ts deleted file mode 100644 index 3ff1b5da05..0000000000 --- a/plugins/auth-backend/src/lib/catalog/helpers.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - RELATION_MEMBER_OF, - stringifyEntityRef, - UserEntity, -} from '@backstage/catalog-model'; -import { TokenParams } from '../../identity'; - -/** - * @deprecated use {@link getDefaultOwnershipEntityRefs} instead - */ -export function getEntityClaims(entity: UserEntity): TokenParams['claims'] { - const userRef = stringifyEntityRef(entity); - - const membershipRefs = - entity.relations - ?.filter( - r => r.type === RELATION_MEMBER_OF && r.targetRef.startsWith('group:'), - ) - .map(r => r.targetRef) ?? []; - - return { - sub: userRef, - ent: [userRef, ...membershipRefs], - }; -} diff --git a/plugins/auth-backend/src/lib/catalog/index.ts b/plugins/auth-backend/src/lib/catalog/index.ts index 0d1aa4a6f7..f0f5b10808 100644 --- a/plugins/auth-backend/src/lib/catalog/index.ts +++ b/plugins/auth-backend/src/lib/catalog/index.ts @@ -15,4 +15,3 @@ */ export { CatalogIdentityClient } from './CatalogIdentityClient'; -export { getEntityClaims } from './helpers'; diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts index 5be4b7e3c0..9c28ed8fad 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts @@ -31,7 +31,6 @@ import { isError, NotAllowedError, } from '@backstage/errors'; -import { TokenIssuer } from '../../identity/types'; import { defaultCookieConfigurer, readState, verifyNonce } from './helpers'; import { postMessageResponse, ensuresXRequestedWith } from '../flow'; import { @@ -52,8 +51,6 @@ export type Options = { cookieDomain: string; cookiePath: string; appOrigin: string; - /** @deprecated This option is no longer needed */ - tokenIssuer?: TokenIssuer; isOriginAllowed: (origin: string) => boolean; callbackUrl: string; }; @@ -61,10 +58,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { static fromConfig( config: AuthProviderConfig, handlers: OAuthHandlers, - options: Pick< - Options, - 'providerId' | 'persistScopes' | 'tokenIssuer' | 'callbackUrl' - >, + options: Pick, ): OAuthAdapter { const { origin: appOrigin } = new URL(config.appUrl); diff --git a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts index 1a1fdd7a36..cbc2439563 100644 --- a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts +++ b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts @@ -25,8 +25,7 @@ import { } from '@backstage/catalog-model'; import { ConflictError, InputError, NotFoundError } from '@backstage/errors'; import { Logger } from 'winston'; -import { TokenIssuer } from '../..'; -import { TokenParams } from '../../identity'; +import { TokenIssuer, TokenParams } from '../../identity/types'; import { AuthResolverContext } from '../../providers'; import { AuthResolverCatalogUserQuery } from '../../providers/types'; import { CatalogIdentityClient } from '../catalog'; diff --git a/plugins/auth-backend/src/providers/atlassian/index.ts b/plugins/auth-backend/src/providers/atlassian/index.ts index cf3eb901d9..8dff0197a3 100644 --- a/plugins/auth-backend/src/providers/atlassian/index.ts +++ b/plugins/auth-backend/src/providers/atlassian/index.ts @@ -14,8 +14,4 @@ * limitations under the License. */ -export { createAtlassianProvider } from './provider'; -export type { - AtlassianAuthProvider, - AtlassianProviderOptions, -} from './provider'; +export { atlassian, AtlassianAuthProvider } from './provider'; diff --git a/plugins/auth-backend/src/providers/atlassian/provider.ts b/plugins/auth-backend/src/providers/atlassian/provider.ts index 2aa85dab96..b693d226a2 100644 --- a/plugins/auth-backend/src/providers/atlassian/provider.ts +++ b/plugins/auth-backend/src/providers/atlassian/provider.ts @@ -58,6 +58,10 @@ export const atlassianDefaultAuthHandler: AuthHandler = async ({ profile: makeProfileInfo(fullProfile, params.id_token), }); +/** + * @public + * @deprecated This export is deprecated and will be removed in the future. + */ export class AtlassianAuthProvider implements OAuthHandlers { private readonly _strategy: AtlassianStrategy; private readonly signInResolver?: SignInResolver; @@ -161,25 +165,6 @@ export class AtlassianAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type AtlassianProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for atlassian auth * @@ -230,9 +215,3 @@ export const atlassian = createAuthProviderIntegration({ }); }, }); - -/** - * @public - * @deprecated Use `providers.atlassian.create` instead - */ -export const createAtlassianProvider = atlassian.create; diff --git a/plugins/auth-backend/src/providers/auth0/index.ts b/plugins/auth-backend/src/providers/auth0/index.ts index b201177d69..94a08a5809 100644 --- a/plugins/auth-backend/src/providers/auth0/index.ts +++ b/plugins/auth-backend/src/providers/auth0/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { createAuth0Provider } from './provider'; -export type { Auth0ProviderOptions } from './provider'; +export { auth0 } from './provider'; diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 9ddd587508..a53f504f50 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -169,28 +169,6 @@ export class Auth0AuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type Auth0ProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for auth0 auth * @@ -249,9 +227,3 @@ export const auth0 = createAuthProviderIntegration({ }); }, }); - -/** - * @public - * @deprecated Use `providers.auth0.create` instead. - */ -export const createAuth0Provider = auth0.create; diff --git a/plugins/auth-backend/src/providers/aws-alb/index.ts b/plugins/auth-backend/src/providers/aws-alb/index.ts index 710d86ca3d..9b3e8920ac 100644 --- a/plugins/auth-backend/src/providers/aws-alb/index.ts +++ b/plugins/auth-backend/src/providers/aws-alb/index.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { createAwsAlbProvider } from './provider'; -export type { AwsAlbProviderOptions, AwsAlbResult } from './provider'; +export { awsAlb } from './provider'; +export type { AwsAlbResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/aws-alb/provider.ts b/plugins/auth-backend/src/providers/aws-alb/provider.ts index b8d43a11e6..5af606539e 100644 --- a/plugins/auth-backend/src/providers/aws-alb/provider.ts +++ b/plugins/auth-backend/src/providers/aws-alb/provider.ts @@ -211,28 +211,6 @@ export class AwsAlbAuthProvider implements AuthProviderRouteHandlers { }; } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type AwsAlbProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for AWS ALB auth * @@ -282,9 +260,3 @@ export const awsAlb = createAuthProviderIntegration({ }; }, }); - -/** - * @public - * @deprecated Use `providers.awsAlb.create` instead - */ -export const createAwsAlbProvider = awsAlb.create; diff --git a/plugins/auth-backend/src/providers/bitbucket/index.ts b/plugins/auth-backend/src/providers/bitbucket/index.ts index 55a5735655..9d82c1066c 100644 --- a/plugins/auth-backend/src/providers/bitbucket/index.ts +++ b/plugins/auth-backend/src/providers/bitbucket/index.ts @@ -14,13 +14,8 @@ * limitations under the License. */ -export { - createBitbucketProvider, - bitbucketUsernameSignInResolver, - bitbucketUserIdSignInResolver, -} from './provider'; +export { bitbucket } from './provider'; export type { - BitbucketProviderOptions, BitbucketPassportProfile, BitbucketOAuthResult, } from './provider'; diff --git a/plugins/auth-backend/src/providers/bitbucket/provider.ts b/plugins/auth-backend/src/providers/bitbucket/provider.ts index 5b9919764b..e3bd044466 100644 --- a/plugins/auth-backend/src/providers/bitbucket/provider.ts +++ b/plugins/auth-backend/src/providers/bitbucket/provider.ts @@ -190,28 +190,6 @@ export class BitbucketAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type BitbucketProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for BitBucket auth * @@ -305,23 +283,3 @@ export const bitbucket = createAuthProviderIntegration({ }, }, }); - -/** - * @public - * @deprecated Use `providers.bitbucket.create` instead - */ -export const createBitbucketProvider = bitbucket.create; - -/** - * @public - * @deprecated Use `providers.bitbucket.resolvers.usernameMatchingUserEntityAnnotation()` instead. - */ -export const bitbucketUsernameSignInResolver = - bitbucket.resolvers.usernameMatchingUserEntityAnnotation(); - -/** - * @public - * @deprecated Use `providers.bitbucket.resolvers.userIdMatchingUserEntityAnnotation()` instead. - */ -export const bitbucketUserIdSignInResolver = - bitbucket.resolvers.userIdMatchingUserEntityAnnotation(); diff --git a/plugins/auth-backend/src/providers/factories.ts b/plugins/auth-backend/src/providers/factories.ts deleted file mode 100644 index 42d3569815..0000000000 --- a/plugins/auth-backend/src/providers/factories.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { createGithubProvider } from './github'; -import { createGitlabProvider } from './gitlab'; -import { createGoogleProvider } from './google'; -import { createOAuth2Provider } from './oauth2'; -import { createOidcProvider } from './oidc'; -import { createOktaProvider } from './okta'; -import { createSamlProvider } from './saml'; -import { createAuth0Provider } from './auth0'; -import { createMicrosoftProvider } from './microsoft'; -import { createOneLoginProvider } from './onelogin'; -import { AuthProviderFactory } from './types'; -import { createAwsAlbProvider } from './aws-alb'; -import { createBitbucketProvider } from './bitbucket'; -import { createAtlassianProvider } from './atlassian'; - -export const factories: { [providerId: string]: AuthProviderFactory } = { - google: createGoogleProvider(), - github: createGithubProvider(), - gitlab: createGitlabProvider(), - saml: createSamlProvider(), - okta: createOktaProvider(), - auth0: createAuth0Provider(), - microsoft: createMicrosoftProvider(), - oauth2: createOAuth2Provider(), - oidc: createOidcProvider(), - onelogin: createOneLoginProvider(), - awsalb: createAwsAlbProvider(), - bitbucket: createBitbucketProvider(), - atlassian: createAtlassianProvider(), -}; diff --git a/plugins/auth-backend/src/providers/gcp-iap/index.ts b/plugins/auth-backend/src/providers/gcp-iap/index.ts index 97e31b0051..12f76ec142 100644 --- a/plugins/auth-backend/src/providers/gcp-iap/index.ts +++ b/plugins/auth-backend/src/providers/gcp-iap/index.ts @@ -14,9 +14,5 @@ * limitations under the License. */ -export { createGcpIapProvider } from './provider'; -export type { - GcpIapProviderOptions, - GcpIapResult, - GcpIapTokenInfo, -} from './types'; +export { gcpIap } from './provider'; +export type { GcpIapResult, GcpIapTokenInfo } from './types'; diff --git a/plugins/auth-backend/src/providers/gcp-iap/provider.ts b/plugins/auth-backend/src/providers/gcp-iap/provider.ts index cb5d5979cd..500b062d5b 100644 --- a/plugins/auth-backend/src/providers/gcp-iap/provider.ts +++ b/plugins/auth-backend/src/providers/gcp-iap/provider.ts @@ -117,9 +117,3 @@ export const gcpIap = createAuthProviderIntegration({ }; }, }); - -/** - * @public - * @deprecated Use `providers.gcpIap.create` instead - */ -export const createGcpIapProvider = gcpIap.create; diff --git a/plugins/auth-backend/src/providers/gcp-iap/types.ts b/plugins/auth-backend/src/providers/gcp-iap/types.ts index 6e5a022a3d..25828b7d51 100644 --- a/plugins/auth-backend/src/providers/gcp-iap/types.ts +++ b/plugins/auth-backend/src/providers/gcp-iap/types.ts @@ -15,7 +15,7 @@ */ import { JsonValue } from '@backstage/types'; -import { AuthHandler, AuthResponse, SignInResolver } from '../types'; +import { AuthResponse } from '../types'; /** * The header name used by the IAP. @@ -69,27 +69,3 @@ export type GcpIapProviderInfo = { * The shape of the response to return to callers. */ export type GcpIapResponse = AuthResponse; - -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type GcpIapProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth - * response into the profile that will be presented to the user. The default - * implementation just provides the authenticated email that the IAP - * presented. - */ - authHandler?: AuthHandler; - - /** - * Configures sign-in for this provider. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; diff --git a/plugins/auth-backend/src/providers/github/index.ts b/plugins/auth-backend/src/providers/github/index.ts index a855b13b83..2f4bb1f6cd 100644 --- a/plugins/auth-backend/src/providers/github/index.ts +++ b/plugins/auth-backend/src/providers/github/index.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { createGithubProvider } from './provider'; -export type { GithubOAuthResult, GithubProviderOptions } from './provider'; +export { github } from './provider'; +export type { GithubOAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/github/provider.ts b/plugins/auth-backend/src/providers/github/provider.ts index e018a6cf99..9c115b5eb8 100644 --- a/plugins/auth-backend/src/providers/github/provider.ts +++ b/plugins/auth-backend/src/providers/github/provider.ts @@ -227,46 +227,6 @@ export class GithubAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type GithubProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - - /** - * The state encoder used to encode the 'state' parameter on the OAuth request. - * - * It should return a string that takes the state params (from the request), url encodes the params - * and finally base64 encodes them. - * - * Providing your own stateEncoder will allow you to add addition parameters to the state field. - * - * It is typed as follows: - * `export type StateEncoder = (input: OAuthState) => Promise<{encodedState: string}>;` - * - * Note: the stateEncoder must encode a 'nonce' value and an 'env' value. Without this, the OAuth flow will fail - * (These two values will be set by the req.state by default) - * - * For more information, please see the helper module in ../../oauth/helpers #readState - */ - stateEncoder?: StateEncoder; -}; - /** * Auth provider integration for GitHub auth * @@ -381,9 +341,3 @@ export const github = createAuthProviderIntegration({ }, }, }); - -/** - * @public - * @deprecated Use `providers.github.create` instead - */ -export const createGithubProvider = github.create; diff --git a/plugins/auth-backend/src/providers/gitlab/index.ts b/plugins/auth-backend/src/providers/gitlab/index.ts index 52ede48756..9b60d1f18a 100644 --- a/plugins/auth-backend/src/providers/gitlab/index.ts +++ b/plugins/auth-backend/src/providers/gitlab/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { createGitlabProvider } from './provider'; -export type { GitlabProviderOptions } from './provider'; +export { gitlab } from './provider'; diff --git a/plugins/auth-backend/src/providers/gitlab/provider.ts b/plugins/auth-backend/src/providers/gitlab/provider.ts index 868357bcda..c24c2e128d 100644 --- a/plugins/auth-backend/src/providers/gitlab/provider.ts +++ b/plugins/auth-backend/src/providers/gitlab/provider.ts @@ -178,31 +178,6 @@ export class GitlabAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type GitlabProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - /** - * Maps an auth result to a Backstage identity for the user. - * - * Set to `'email'` to use the default email-based sign in resolver, which will search - * the catalog for a single user entity that has a matching `microsoft.com/email` annotation. - */ - signIn?: { - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for GitLab auth * @@ -254,9 +229,3 @@ export const gitlab = createAuthProviderIntegration({ }); }, }); - -/** - * @public - * @deprecated Use `providers.gitlab.create` instead - */ -export const createGitlabProvider = gitlab.create; diff --git a/plugins/auth-backend/src/providers/google/index.ts b/plugins/auth-backend/src/providers/google/index.ts index 209484ad04..5e8c3236e4 100644 --- a/plugins/auth-backend/src/providers/google/index.ts +++ b/plugins/auth-backend/src/providers/google/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { createGoogleProvider, googleEmailSignInResolver } from './provider'; -export type { GoogleProviderOptions } from './provider'; +export { google } from './provider'; diff --git a/plugins/auth-backend/src/providers/google/provider.ts b/plugins/auth-backend/src/providers/google/provider.ts index 2d58bc2aa6..f60d4e9947 100644 --- a/plugins/auth-backend/src/providers/google/provider.ts +++ b/plugins/auth-backend/src/providers/google/provider.ts @@ -168,28 +168,6 @@ export class GoogleAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type GoogleProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for Google auth * @@ -272,16 +250,3 @@ export const google = createAuthProviderIntegration({ }, }, }); - -/** - * @public - * @deprecated Use `providers.google.create` instead. - */ -export const createGoogleProvider = google.create; - -/** - * @public - * @deprecated Use `providers.google.resolvers.emailMatchingUserEntityAnnotation()` instead. - */ -export const googleEmailSignInResolver = - google.resolvers.emailMatchingUserEntityAnnotation(); diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index 1f33a60e55..de410a9407 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -14,30 +14,23 @@ * limitations under the License. */ -export * from './atlassian'; -export * from './auth0'; -export * from './aws-alb'; -export * from './bitbucket'; -export * from './github'; -export * from './gitlab'; -export * from './google'; -export * from './microsoft'; -export * from './oauth2'; -export * from './oauth2-proxy'; -export * from './oidc'; -export * from './okta'; -export * from './onelogin'; -export * from './saml'; -export * from './gcp-iap'; +export { AtlassianAuthProvider } from './atlassian'; +export type { AwsAlbResult } from './aws-alb'; +export type { + BitbucketOAuthResult, + BitbucketPassportProfile, +} from './bitbucket'; +export type { GithubOAuthResult } from './github'; +export type { OAuth2ProxyResult } from './oauth2-proxy'; +export type { OidcAuthResult } from './oidc'; +export type { SamlAuthResult } from './saml'; +export type { GcpIapResult, GcpIapTokenInfo } from './gcp-iap'; -export { providers } from './providers'; - -export { factories as defaultAuthProviderFactories } from './factories'; +export { providers, defaultAuthProviderFactories } from './providers'; export type { AuthProviderConfig, AuthProviderRouteHandlers, - AuthProviderFactoryOptions, AuthProviderFactory, AuthHandler, AuthResolverCatalogUserQuery, diff --git a/plugins/auth-backend/src/providers/microsoft/index.ts b/plugins/auth-backend/src/providers/microsoft/index.ts index 3167de5d0d..16dadc3bb0 100644 --- a/plugins/auth-backend/src/providers/microsoft/index.ts +++ b/plugins/auth-backend/src/providers/microsoft/index.ts @@ -14,8 +14,4 @@ * limitations under the License. */ -export { - createMicrosoftProvider, - microsoftEmailSignInResolver, -} from './provider'; -export type { MicrosoftProviderOptions } from './provider'; +export { microsoft } from './provider'; diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index 0c58049619..db79dba225 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -190,28 +190,6 @@ export class MicrosoftAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type MicrosoftProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for Microsoft auth * @@ -301,16 +279,3 @@ export const microsoft = createAuthProviderIntegration({ }, }, }); - -/** - * @public - * @deprecated Use `providers.microsoft.create` instead - */ -export const createMicrosoftProvider = microsoft.create; - -/** - * @public - * @deprecated Use `providers.microsoft.resolvers.emailMatchingUserEntityAnnotation()` instead. - */ -export const microsoftEmailSignInResolver = - microsoft.resolvers.emailMatchingUserEntityAnnotation(); diff --git a/plugins/auth-backend/src/providers/oauth2-proxy/index.ts b/plugins/auth-backend/src/providers/oauth2-proxy/index.ts index 62304b1d1f..d3004f31e4 100644 --- a/plugins/auth-backend/src/providers/oauth2-proxy/index.ts +++ b/plugins/auth-backend/src/providers/oauth2-proxy/index.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { createOauth2ProxyProvider } from './provider'; -export type { Oauth2ProxyProviderOptions, OAuth2ProxyResult } from './provider'; +export { oauth2Proxy } from './provider'; +export type { OAuth2ProxyResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/oauth2-proxy/provider.ts b/plugins/auth-backend/src/providers/oauth2-proxy/provider.ts index 625c9e3d62..3ac7d09000 100644 --- a/plugins/auth-backend/src/providers/oauth2-proxy/provider.ts +++ b/plugins/auth-backend/src/providers/oauth2-proxy/provider.ts @@ -80,27 +80,6 @@ export type OAuth2ProxyResult = { getHeader(name: string): string | undefined; }; -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type Oauth2ProxyProviderOptions = { - /** - * Configure an auth handler to generate a profile for the user. - */ - authHandler: AuthHandler>; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver>; - }; -}; - interface Options { resolverContext: AuthResolverContext; signInResolver: SignInResolver>; @@ -231,9 +210,3 @@ export const oauth2Proxy = createAuthProviderIntegration({ }; }, }); - -/** - * @public - * @deprecated Use `providers.oauth2Proxy.create` instead - */ -export const createOauth2ProxyProvider = oauth2Proxy.create; diff --git a/plugins/auth-backend/src/providers/oauth2/index.ts b/plugins/auth-backend/src/providers/oauth2/index.ts index d68208a148..14485e04ff 100644 --- a/plugins/auth-backend/src/providers/oauth2/index.ts +++ b/plugins/auth-backend/src/providers/oauth2/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { createOAuth2Provider } from './provider'; -export type { OAuth2ProviderOptions } from './provider'; +export { oauth2 } from './provider'; diff --git a/plugins/auth-backend/src/providers/oauth2/provider.ts b/plugins/auth-backend/src/providers/oauth2/provider.ts index 6b4787e985..6fa649c421 100644 --- a/plugins/auth-backend/src/providers/oauth2/provider.ts +++ b/plugins/auth-backend/src/providers/oauth2/provider.ts @@ -192,18 +192,6 @@ export class OAuth2AuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type OAuth2ProviderOptions = { - authHandler?: AuthHandler; - - signIn?: { - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for generic OAuth2 auth * @@ -260,9 +248,3 @@ export const oauth2 = createAuthProviderIntegration({ }); }, }); - -/** - * @public - * @deprecated Use `providers.oauth2.create` instead - */ -export const createOAuth2Provider = oauth2.create; diff --git a/plugins/auth-backend/src/providers/oidc/index.ts b/plugins/auth-backend/src/providers/oidc/index.ts index e63c9920df..6b2282411c 100644 --- a/plugins/auth-backend/src/providers/oidc/index.ts +++ b/plugins/auth-backend/src/providers/oidc/index.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export type { OidcAuthResult, OidcProviderOptions } from './provider'; -export { createOidcProvider } from './provider'; +export { oidc } from './provider'; +export type { OidcAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/oidc/provider.test.ts b/plugins/auth-backend/src/providers/oidc/provider.test.ts index 59a717f132..ee8aa50b01 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.test.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.test.ts @@ -23,7 +23,7 @@ import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { ClientMetadata, IssuerMetadata } from 'openid-client'; import { OAuthAdapter } from '../../lib/oauth'; -import { createOidcProvider, OidcAuthProvider, Options } from './provider'; +import { oidc, OidcAuthProvider, Options } from './provider'; import { AuthResolverContext } from '../types'; const issuerMetadata = { @@ -155,7 +155,7 @@ describe('OidcAuthProvider', () => { expect(requestSequence).toEqual([0, 1, 2].map(i => requests[i].url)); }); - it('createOidcProvider', async () => { + it('oidc.create', async () => { const handler = jest.fn((_req, res, ctx) => { return res( ctx.status(200), @@ -172,7 +172,7 @@ describe('OidcAuthProvider', () => { metadataUrl: 'https://oidc.test/.well-known/openid-configuration', }, } as any); - const provider = createOidcProvider()({ + const provider = oidc.create()({ globalConfig: { appUrl: 'https://oidc.test', baseUrl: 'https://oidc.test', diff --git a/plugins/auth-backend/src/providers/oidc/provider.ts b/plugins/auth-backend/src/providers/oidc/provider.ts index 69a65d1cae..eb963a3711 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.ts @@ -198,18 +198,6 @@ export class OidcAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type OidcProviderOptions = { - authHandler?: AuthHandler; - - signIn?: { - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for generic OpenID Connect auth * @@ -268,9 +256,3 @@ export const oidc = createAuthProviderIntegration({ }); }, }); - -/** - * @public - * @deprecated Use `providers.oidc.create` instead - */ -export const createOidcProvider = oidc.create; diff --git a/plugins/auth-backend/src/providers/okta/index.ts b/plugins/auth-backend/src/providers/okta/index.ts index fd9ebf46da..3387fa3668 100644 --- a/plugins/auth-backend/src/providers/okta/index.ts +++ b/plugins/auth-backend/src/providers/okta/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { createOktaProvider, oktaEmailSignInResolver } from './provider'; -export type { OktaProviderOptions } from './provider'; +export { okta } from './provider'; diff --git a/plugins/auth-backend/src/providers/okta/provider.ts b/plugins/auth-backend/src/providers/okta/provider.ts index 98cec6df3a..de9d128641 100644 --- a/plugins/auth-backend/src/providers/okta/provider.ts +++ b/plugins/auth-backend/src/providers/okta/provider.ts @@ -192,28 +192,6 @@ export class OktaAuthProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type OktaProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for Okta auth * @@ -305,16 +283,3 @@ export const okta = createAuthProviderIntegration({ }, }, }); - -/** - * @public - * @deprecated Use `providers.okta.create` instead - */ -export const createOktaProvider = okta.create; - -/** - * @public - * @deprecated Use `providers.okta.resolvers.emailMatchingUserEntityAnnotation()` instead. - */ -export const oktaEmailSignInResolver = - okta.resolvers.emailMatchingUserEntityAnnotation(); diff --git a/plugins/auth-backend/src/providers/onelogin/index.ts b/plugins/auth-backend/src/providers/onelogin/index.ts index 63cf0be3cd..3f356029fb 100644 --- a/plugins/auth-backend/src/providers/onelogin/index.ts +++ b/plugins/auth-backend/src/providers/onelogin/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { createOneLoginProvider } from './provider'; -export type { OneLoginProviderOptions } from './provider'; +export { onelogin } from './provider'; diff --git a/plugins/auth-backend/src/providers/onelogin/provider.ts b/plugins/auth-backend/src/providers/onelogin/provider.ts index d81eb3d83c..59b57b3851 100644 --- a/plugins/auth-backend/src/providers/onelogin/provider.ts +++ b/plugins/auth-backend/src/providers/onelogin/provider.ts @@ -166,28 +166,6 @@ export class OneLoginProvider implements OAuthHandlers { } } -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type OneLoginProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for OneLogin auth * @@ -244,9 +222,3 @@ export const onelogin = createAuthProviderIntegration({ }); }, }); - -/** - * @public - * @deprecated Use `providers.onelogin.create` instead - */ -export const createOneLoginProvider = onelogin.create; diff --git a/plugins/auth-backend/src/providers/providers.ts b/plugins/auth-backend/src/providers/providers.ts index 3d49e2bbbb..71df8223ef 100644 --- a/plugins/auth-backend/src/providers/providers.ts +++ b/plugins/auth-backend/src/providers/providers.ts @@ -14,21 +14,22 @@ * limitations under the License. */ -import { atlassian } from './atlassian/provider'; -import { auth0 } from './auth0/provider'; -import { awsAlb } from './aws-alb/provider'; -import { bitbucket } from './bitbucket/provider'; -import { gcpIap } from './gcp-iap/provider'; -import { github } from './github/provider'; -import { gitlab } from './gitlab/provider'; -import { google } from './google/provider'; -import { microsoft } from './microsoft/provider'; -import { oauth2 } from './oauth2/provider'; -import { oauth2Proxy } from './oauth2-proxy/provider'; -import { oidc } from './oidc/provider'; -import { okta } from './okta/provider'; -import { onelogin } from './onelogin/provider'; -import { saml } from './saml/provider'; +import { atlassian } from './atlassian'; +import { auth0 } from './auth0'; +import { awsAlb } from './aws-alb'; +import { bitbucket } from './bitbucket'; +import { gcpIap } from './gcp-iap'; +import { github } from './github'; +import { gitlab } from './gitlab'; +import { google } from './google'; +import { microsoft } from './microsoft'; +import { oauth2 } from './oauth2'; +import { oauth2Proxy } from './oauth2-proxy'; +import { oidc } from './oidc'; +import { okta } from './okta'; +import { onelogin } from './onelogin'; +import { saml } from './saml'; +import { AuthProviderFactory } from './types'; /** * All built-in auth provider integrations. @@ -52,3 +53,26 @@ export const providers = Object.freeze({ onelogin, saml, }); + +/** + * All auth provider factories that are installed by default. + * + * @public + */ +export const defaultAuthProviderFactories: { + [providerId: string]: AuthProviderFactory; +} = { + google: google.create(), + github: github.create(), + gitlab: gitlab.create(), + saml: saml.create(), + okta: okta.create(), + auth0: auth0.create(), + microsoft: microsoft.create(), + oauth2: oauth2.create(), + oidc: oidc.create(), + onelogin: onelogin.create(), + awsalb: awsAlb.create(), + bitbucket: bitbucket.create(), + atlassian: atlassian.create(), +}; diff --git a/plugins/auth-backend/src/providers/saml/index.ts b/plugins/auth-backend/src/providers/saml/index.ts index 8d36e17d29..d59f7bf0a7 100644 --- a/plugins/auth-backend/src/providers/saml/index.ts +++ b/plugins/auth-backend/src/providers/saml/index.ts @@ -14,8 +14,5 @@ * limitations under the License. */ -export { - createSamlProvider, - samlNameIdEntityNameSignInResolver, -} from './provider'; -export type { SamlProviderOptions, SamlAuthResult } from './provider'; +export { saml } from './provider'; +export type { SamlAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/saml/provider.ts b/plugins/auth-backend/src/providers/saml/provider.ts index 4f5076b410..3d35f46628 100644 --- a/plugins/auth-backend/src/providers/saml/provider.ts +++ b/plugins/auth-backend/src/providers/saml/provider.ts @@ -132,28 +132,6 @@ export class SamlAuthProvider implements AuthProviderRouteHandlers { type SignatureAlgorithm = 'sha1' | 'sha256' | 'sha512'; -/** - * @public - * @deprecated This type has been inlined into the create method and will be removed. - */ -export type SamlProviderOptions = { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; -}; - /** * Auth provider integration for SAML auth * @@ -230,16 +208,3 @@ export const saml = createAuthProviderIntegration({ }, }, }); - -/** - * @public - * @deprecated Use `providers.saml.create` instead - */ -export const createSamlProvider = saml.create; - -/** - * @public - * @deprecated Use `providers.saml.resolvers.nameIdMatchingUserEntityName()` instead. - */ -export const samlNameIdEntityNameSignInResolver = - saml.resolvers.nameIdMatchingUserEntityName(); diff --git a/plugins/auth-backend/src/providers/types.ts b/plugins/auth-backend/src/providers/types.ts index 128dea12ef..c99bdfbadb 100644 --- a/plugins/auth-backend/src/providers/types.ts +++ b/plugins/auth-backend/src/providers/types.ts @@ -14,11 +14,8 @@ * limitations under the License. */ -import { - PluginEndpointDiscovery, - TokenManager, -} from '@backstage/backend-common'; -import { CatalogApi, GetEntitiesRequest } from '@backstage/catalog-client'; +import { GetEntitiesRequest } from '@backstage/catalog-client'; +import { Entity } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { BackstageIdentityResponse, @@ -26,10 +23,8 @@ import { } from '@backstage/plugin-auth-node'; import express from 'express'; import { Logger } from 'winston'; -import { TokenIssuer, TokenParams } from '../identity/types'; +import { TokenParams } from '../identity/types'; import { OAuthStartRequest } from '../lib/oauth/types'; -import { CatalogIdentityClient } from '../lib/catalog'; -import { Entity } from '@backstage/catalog-model'; /** * A query for a single user in the catalog. @@ -69,13 +64,6 @@ export type AuthResolverCatalogUserQuery = * @public */ export type AuthResolverContext = { - /** @deprecated Will be removed from the context, access it via a closure instead if needed */ - logger: Logger; - /** @deprecated Use the `issueToken` method instead */ - tokenIssuer: TokenIssuer; - /** @deprecated Use the `findCatalogUser` and `signInWithCatalogUser` methods instead, and the `getDefaultOwnershipEntityRefs` helper */ - catalogIdentityClient: CatalogIdentityClient; - /** * Issues a Backstage token using the provided parameters. */ @@ -204,35 +192,12 @@ export interface AuthProviderRouteHandlers { logout?(req: express.Request, res: express.Response): Promise; } -/** - * @deprecated This type is deprecated and will be removed in a future release. - */ -export type AuthProviderFactoryOptions = { - providerId: string; - globalConfig: AuthProviderConfig; - config: Config; - logger: Logger; - tokenManager: TokenManager; - tokenIssuer: TokenIssuer; - discovery: PluginEndpointDiscovery; - catalogApi: CatalogApi; -}; - export type AuthProviderFactory = (options: { providerId: string; globalConfig: AuthProviderConfig; config: Config; logger: Logger; resolverContext: AuthResolverContext; - - /** @deprecated This field has been deprecated and needs to be passed directly to the auth provider instead */ - tokenManager: TokenManager; - /** @deprecated This field has been deprecated and needs to be passed directly to the auth provider instead */ - tokenIssuer: TokenIssuer; - /** @deprecated This field has been deprecated and needs to be passed directly to the auth provider instead */ - discovery: PluginEndpointDiscovery; - /** @deprecated This field has been deprecated and needs to be passed directly to the auth provider instead */ - catalogApi: CatalogApi; }) => AuthProviderRouteHandlers; /** @public */ diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index 80b8a24022..2232eeaa81 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -44,6 +44,7 @@ export interface RouterOptions { config: Config; discovery: PluginEndpointDiscovery; tokenManager: TokenManager; + tokenFactoryAlgorithm?: string; providerFactories?: ProviderFactories; } @@ -56,6 +57,7 @@ export async function createRouter( discovery, database, tokenManager, + tokenFactoryAlgorithm, providerFactories, } = options; const router = Router(); @@ -71,6 +73,7 @@ export async function createRouter( keyStore, keyDurationSeconds, logger: logger.child({ component: 'token-factory' }), + algorithm: tokenFactoryAlgorithm, }); const catalogApi = new CatalogClient({ discoveryApi: discovery }); @@ -119,10 +122,6 @@ export async function createRouter( }, config: providersConfig.getConfig(providerId), logger, - tokenManager, - tokenIssuer, - discovery, - catalogApi, resolverContext: CatalogAuthResolverContext.create({ logger, catalogApi, diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 4381303915..43bf44ac8e 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-auth-node +## 0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 2281d2d35e..ad67eefefc 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.2", + "version": "0.2.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,15 +23,15 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "jose": "^4.6.0", "node-fetch": "^2.6.7", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "lodash": "^4.17.21", "msw": "^0.42.0", "uuid": "^8.0.0" diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index f9d414bef9..95fb110ed8 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-azure-devops-backend +## 0.3.13-next.0 + +### Patch Changes + +- 13a232ec22: Added comments to example to help avoid confusion as to where lines need to be added +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.3.12 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index e85ba907c6..2126bfced7 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.12", + "version": "0.3.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,7 +23,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", "@backstage/plugin-azure-devops-common": "^0.2.3", "@types/express": "^4.17.6", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", "msw": "^0.42.0" diff --git a/plugins/azure-devops-common/package.json b/plugins/azure-devops-common/package.json index 0f52082db6..f0f137ac52 100644 --- a/plugins/azure-devops-common/package.json +++ b/plugins/azure-devops-common/package.json @@ -32,7 +32,7 @@ "clean": "backstage-cli package clean" }, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 8de9bd00a8..32b7ee5a25 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-azure-devops +## 0.1.23-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.23-next.0 + +### Patch Changes + +- e049e41048: Exporting azureDevOpsApiRef, AzureGitTagsIcon, and all hooks for the benefit of other plugins. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.22 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 8fad3a8697..d96ccbea29 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.1.22", + "version": "0.1.23-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,13 +30,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/plugin-azure-devops-common": "^0.2.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 3b80f26ca1..02729eb7c8 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-badges-backend +## 0.1.28-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + +## 0.1.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 0.1.27 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index d1b5d094d9..26a11c98b1 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.27", + "version": "0.1.28-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@types/express": "^4.17.6", "badge-maker": "^3.3.0", "cors": "^2.8.5", @@ -48,7 +48,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" }, diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index ff7b290b68..41d41c9855 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-badges +## 0.2.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.2.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.2.30 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index aeade2c50a..2b58487932 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.30", + "version": "0.2.31-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,12 +30,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -46,10 +46,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 4b0cb04530..cfc222eb55 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-bazaar-backend +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/backend-test-utils@0.1.26-next.0 + ## 0.1.17 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 5f723a9dfb..a329db4f9a 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.1.17", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-test-utils": "^0.1.25", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.1", "@backstage/config": "^1.0.1", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -34,7 +34,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 911390ee28..864a5eb017 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-bazaar +## 0.1.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/cli@0.18.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/cli@0.17.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.21 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index cb3318b4e9..bbc5919e12 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.1.21", + "version": "0.1.22-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,13 +24,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", - "@backstage/cli": "^0.17.2", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog": "^1.3.0", - "@backstage/plugin-catalog-react": "^1.1.1", + "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,8 +47,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", "@testing-library/jest-dom": "^5.10.1", "cross-fetch": "^3.1.5" }, diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index 62100f2e0b..f066706277 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.2.2-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index a02196bc39..c84303fece 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.1.0", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,11 +28,11 @@ "update-models": "yarn refresh-schema && yarn generate-models && yarn reduce-models" }, "dependencies": { - "@backstage/integration": "^1.2.1", + "@backstage/integration": "^1.2.2-next.1", "cross-fetch": "^3.1.5" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@openapitools/openapi-generator-cli": "^2.4.26", "msw": "^0.42.0", "ts-morph": "^15.0.0" diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 0badfe894d..0ef9d10bea 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-bitrise +## 0.1.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.33 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 1d17b5a4b5..f8f96be603 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.33", + "version": "0.1.34-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index d246ae9677..2f200dd9b1 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 53ed33c47d..c768bbe9e4 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-tasks": "^0.3.2", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "aws-sdk": "^2.840.0", "lodash": "^4.17.21", @@ -48,7 +48,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151", "aws-sdk-mock": "^5.2.1", "yaml": "^1.9.2" diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index fcc8126ad0..f9c2eeb6ce 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + ## 0.1.4 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 5b0966f960..4cb1639a36 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.4", + "version": "0.1.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-model": "^1.0.3", - "@backstage/backend-tasks": "^0.3.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.42.0", @@ -48,8 +48,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 4f83b02e1f..c0d71dd190 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.1.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index aea92c3b56..663c0b37fe 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.0", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,18 +33,18 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-tasks": "^0.3.2", + "@backstage/backend-tasks": "^0.3.3-next.1", "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-bitbucket-cloud-common": "^0.1.0", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-bitbucket-cloud-common": "^0.1.1-next.0", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "uuid": "^8.0.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "msw": "^0.42.0" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 8c3b2c6ad5..a920827973 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.1.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 8b9c3b4e91..56b0c16eec 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.0", + "version": "0.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-bitbucket-cloud-common": "^0.1.0", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-bitbucket-cloud-common": "^0.1.1-next.0", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.42.0", @@ -47,8 +47,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 8654556d28..c55973d568 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + ## 0.1.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 55c33d2578..dd4c07c044 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.1", + "version": "0.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,13 +28,13 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-tasks": "^0.3.2", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "fs-extra": "10.1.0", "msw": "^0.42.0", "node-fetch": "^2.6.7", @@ -42,8 +42,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/fs-extra": "^9.0.1" }, "files": [ diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 553504c46f..42aa26afdf 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-catalog-backend-module-github +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + ## 0.1.4 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 680c812c4c..ffe8e38e32 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.1.4", + "version": "0.1.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-tasks": "^0.3.2", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "@octokit/graphql": "^4.5.8", "lodash": "^4.17.21", @@ -49,8 +49,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index f785a935e6..95fa6ddbda 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.1.5-next.1 + +### Patch Changes + +- 49ff472c0b: Add the possibility in the `GitlabDiscoveryEntityProvider` to scan the whole project instead of concrete groups. For that, use a configuration like this one, where the group parameter is omitted (not mandatory anymore): + + ```yaml + catalog: + providers: + gitlab: + yourProviderId: + host: gitlab-host # Identifies one of the hosts set up in the integrations + branch: main # Optional. Uses `master` as default + entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` + ``` + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + ## 0.1.4 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/config.d.ts b/plugins/catalog-backend-module-gitlab/config.d.ts index 5b0d42c81d..82f1a5db7c 100644 --- a/plugins/catalog-backend-module-gitlab/config.d.ts +++ b/plugins/catalog-backend-module-gitlab/config.d.ts @@ -32,10 +32,11 @@ export interface Config { */ host: string; /** - * (Required) Gitlab's group[/subgroup] where the discovery is done. + * (Optional) Gitlab's group[/subgroup] where the discovery is done. + * If not defined the whole project will be scanned. * @visibility backend */ - group: string; + group?: string; /** * (Optional) Default branch to read the catalog-info.yaml file. * If not set, 'master' will be used. diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 4780d86530..a4240119e3 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.1.4", + "version": "0.1.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-model": "^1.0.3", - "@backstage/backend-tasks": "^0.3.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.42.0", @@ -48,8 +48,8 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151", "@types/uuid": "^8.0.0" }, diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts index d28930b151..892ce5f25c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts @@ -100,7 +100,26 @@ describe('config', () => { }); expect(() => readGitlabConfigs(config)).toThrow( - "Missing required config value at 'catalog.providers.gitlab.test.group'", + "Missing required config value at 'catalog.providers.gitlab.test.host'", ); }); + + it('read full gitlab project', () => { + const config = new ConfigReader({ + catalog: { + providers: { + gitlab: { + test: { + host: 'host', + branch: 'main', + }, + }, + }, + }, + }); + + const result = readGitlabConfigs(config); + expect(result).toHaveLength(1); + expect(result[0].group).toEqual(''); + }); }); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.ts index f7eb316997..d6ad28b2ca 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.ts @@ -25,7 +25,7 @@ import { GitlabProviderConfig } from '../lib/types'; * @param config - The config object to extract from */ function readGitlabConfig(id: string, config: Config): GitlabProviderConfig { - const group = config.getString('group'); + const group = config.getOptionalString('group') ?? ''; const host = config.getString('host'); const branch = config.getOptionalString('branch') ?? 'master'; const catalogFile = diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 072ef991d4..e906e40631 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.1-next.1 + +### Patch Changes + +- fbfbff6bf7: Add possibility to resolve relations by RDN, in addition to UUID and DN +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/backend-tasks@0.3.3-next.1 + +## 0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + ## 0.5.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 288fccf7a5..7232ea24c3 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.0", + "version": "0.5.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-tasks": "^0.3.2", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "@types/ldapjs": "^2.2.0", "ldapjs": "^2.2.0", @@ -46,7 +46,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-ldap/src/ldap/read.test.ts b/plugins/catalog-backend-module-ldap/src/ldap/read.test.ts index 410ac847b3..49803b9c39 100644 --- a/plugins/catalog-backend-module-ldap/src/ldap/read.test.ts +++ b/plugins/catalog-backend-module-ldap/src/ldap/read.test.ts @@ -345,206 +345,128 @@ describe('readLdapGroups', () => { describe('resolveRelations', () => { describe('lookup', () => { - it('matches by DN', () => { - const parent = group({ - metadata: { - name: 'parent', - annotations: { [LDAP_DN_ANNOTATION]: 'pa' }, - }, - }); - const child = group({ - metadata: { - name: 'child', - annotations: { [LDAP_DN_ANNOTATION]: 'ca' }, - }, - }); - const groupMember = new Map>([ - ['pa', new Set(['ca'])], - ]); - resolveRelations([parent, child], [], new Map(), new Map(), groupMember); - expect(parent.spec.children).toEqual(['group:default/child']); - expect(child.spec.parent).toEqual('group:default/parent'); - }); - - it('matches by UUID', () => { - const parent = group({ - metadata: { - name: 'parent', - annotations: { [LDAP_UUID_ANNOTATION]: 'pa' }, - }, - }); - const child = group({ - metadata: { - name: 'child', - annotations: { [LDAP_UUID_ANNOTATION]: 'ca' }, - }, - }); - const groupMember = new Map>([ - ['pa', new Set(['ca'])], - ]); - resolveRelations([parent, child], [], new Map(), new Map(), groupMember); - expect(parent.spec.children).toEqual(['group:default/child']); - expect(child.spec.parent).toEqual('group:default/parent'); - }); + it.each([LDAP_DN_ANNOTATION, LDAP_RDN_ANNOTATION, LDAP_UUID_ANNOTATION])( + 'matches by %s', + annotation => { + const parent = group({ + metadata: { + name: 'parent', + annotations: { [annotation]: 'pa' }, + }, + }); + const child = group({ + metadata: { + name: 'child', + annotations: { [annotation]: 'ca' }, + }, + }); + const groupMember = new Map>([ + ['pa', new Set(['ca'])], + ]); + resolveRelations( + [parent, child], + [], + new Map(), + new Map(), + groupMember, + ); + expect(parent.spec.children).toEqual(['group:default/child']); + expect(child.spec.parent).toEqual('group:default/parent'); + }, + ); }); describe('userMemberOf', () => { - it('populates relations by dn', () => { - const host = group({ - metadata: { name: 'host', annotations: { [LDAP_DN_ANNOTATION]: 'ha' } }, - }); - const member = user({ - metadata: { - name: 'member', - annotations: { [LDAP_DN_ANNOTATION]: 'ma' }, - }, - }); - const userMemberOf = new Map>([ - ['ma', new Set(['ha'])], - ]); - resolveRelations([host], [member], userMemberOf, new Map(), new Map()); - expect(member.spec.memberOf).toEqual(['group:default/host']); - }); - - it('populates relations by uuid', () => { - const host = group({ - metadata: { - name: 'host', - annotations: { [LDAP_UUID_ANNOTATION]: 'ha' }, - }, - }); - const member = user({ - metadata: { - name: 'member', - annotations: { [LDAP_DN_ANNOTATION]: 'ma' }, - }, - }); - const userMemberOf = new Map>([ - ['ma', new Set(['ha'])], - ]); - resolveRelations([host], [member], userMemberOf, new Map(), new Map()); - expect(member.spec.memberOf).toEqual(['group:default/host']); - }); + it.each([LDAP_DN_ANNOTATION, LDAP_RDN_ANNOTATION, LDAP_UUID_ANNOTATION])( + 'populates relations by %s', + annotation => { + const host = group({ + metadata: { name: 'host', annotations: { [annotation]: 'ha' } }, + }); + const member = user({ + metadata: { + name: 'member', + annotations: { [annotation]: 'ma' }, + }, + }); + const userMemberOf = new Map>([ + ['ma', new Set(['ha'])], + ]); + resolveRelations([host], [member], userMemberOf, new Map(), new Map()); + expect(member.spec.memberOf).toEqual(['group:default/host']); + }, + ); }); describe('groupMemberOf', () => { - it('populates relations by dn', () => { - const parent = group({ - metadata: { - name: 'parent', - annotations: { [LDAP_DN_ANNOTATION]: 'pa' }, - }, - }); - const child = group({ - metadata: { - name: 'child', - annotations: { [LDAP_DN_ANNOTATION]: 'ca' }, - }, - }); - const groupMemberOf = new Map>([ - ['ca', new Set(['pa'])], - ]); - resolveRelations( - [parent, child], - [], - new Map(), - groupMemberOf, - new Map(), - ); - expect(parent.spec.children).toEqual(['group:default/child']); - expect(child.spec.parent).toEqual('group:default/parent'); - }); - }); - - it('populates relations by uuid', () => { - const parent = group({ - metadata: { - name: 'parent', - annotations: { [LDAP_UUID_ANNOTATION]: 'pa' }, + it.each([LDAP_DN_ANNOTATION, LDAP_RDN_ANNOTATION, LDAP_UUID_ANNOTATION])( + 'populates relations by %s', + annotation => { + const parent = group({ + metadata: { + name: 'parent', + annotations: { [annotation]: 'pa' }, + }, + }); + const child = group({ + metadata: { + name: 'child', + annotations: { [annotation]: 'ca' }, + }, + }); + const groupMemberOf = new Map>([ + ['ca', new Set(['pa'])], + ]); + resolveRelations( + [parent, child], + [], + new Map(), + groupMemberOf, + new Map(), + ); + expect(parent.spec.children).toEqual(['group:default/child']); + expect(child.spec.parent).toEqual('group:default/parent'); }, - }); - const child = group({ - metadata: { - name: 'child', - annotations: { [LDAP_UUID_ANNOTATION]: 'ca' }, - }, - }); - const groupMemberOf = new Map>([ - ['ca', new Set(['pa'])], - ]); - resolveRelations([parent, child], [], new Map(), groupMemberOf, new Map()); - expect(parent.spec.children).toEqual(['group:default/child']); - expect(child.spec.parent).toEqual('group:default/parent'); + ); }); describe('groupMember', () => { - it('populates relations by dn', () => { - const parent = group({ - metadata: { - name: 'parent', - annotations: { [LDAP_DN_ANNOTATION]: 'pa' }, - }, - }); - const child = group({ - metadata: { - name: 'child', - annotations: { [LDAP_DN_ANNOTATION]: 'ca' }, - }, - }); - const member = user({ - metadata: { - name: 'member', - annotations: { [LDAP_DN_ANNOTATION]: 'ma' }, - }, - }); - const groupMember = new Map>([ - ['pa', new Set(['ca', 'ma'])], - ]); - resolveRelations( - [parent, child], - [member], - new Map(), - new Map(), - groupMember, - ); - expect(parent.spec.children).toEqual(['group:default/child']); - expect(child.spec.parent).toEqual('group:default/parent'); - expect(member.spec.memberOf).toEqual(['group:default/parent']); - }); - - it('populates relations by uuid', () => { - const parent = group({ - metadata: { - name: 'parent', - annotations: { [LDAP_UUID_ANNOTATION]: 'pa' }, - }, - }); - const child = group({ - metadata: { - name: 'child', - annotations: { [LDAP_UUID_ANNOTATION]: 'ca' }, - }, - }); - const member = user({ - metadata: { - name: 'member', - annotations: { [LDAP_UUID_ANNOTATION]: 'ma' }, - }, - }); - const groupMember = new Map>([ - ['pa', new Set(['ca', 'ma'])], - ]); - resolveRelations( - [parent, child], - [member], - new Map(), - new Map(), - groupMember, - ); - expect(parent.spec.children).toEqual(['group:default/child']); - expect(child.spec.parent).toEqual('group:default/parent'); - expect(member.spec.memberOf).toEqual(['group:default/parent']); - }); + it.each([LDAP_DN_ANNOTATION, LDAP_RDN_ANNOTATION, LDAP_UUID_ANNOTATION])( + 'populates relations by %s', + annotation => { + const parent = group({ + metadata: { + name: 'parent', + annotations: { [annotation]: 'pa' }, + }, + }); + const child = group({ + metadata: { + name: 'child', + annotations: { [annotation]: 'ca' }, + }, + }); + const member = user({ + metadata: { + name: 'member', + annotations: { [annotation]: 'ma' }, + }, + }); + const groupMember = new Map>([ + ['pa', new Set(['ca', 'ma'])], + ]); + resolveRelations( + [parent, child], + [member], + new Map(), + new Map(), + groupMember, + ); + expect(parent.spec.children).toEqual(['group:default/child']); + expect(child.spec.parent).toEqual('group:default/parent'); + expect(member.spec.memberOf).toEqual(['group:default/parent']); + }, + ); }); }); diff --git a/plugins/catalog-backend-module-ldap/src/ldap/read.ts b/plugins/catalog-backend-module-ldap/src/ldap/read.ts index d0fe30e0e6..420ba141fc 100644 --- a/plugins/catalog-backend-module-ldap/src/ldap/read.ts +++ b/plugins/catalog-backend-module-ldap/src/ldap/read.ts @@ -365,11 +365,13 @@ export function resolveRelations( for (const user of users) { userMap.set(stringifyEntityRef(user), user); userMap.set(user.metadata.annotations![LDAP_DN_ANNOTATION], user); + userMap.set(user.metadata.annotations![LDAP_RDN_ANNOTATION], user); userMap.set(user.metadata.annotations![LDAP_UUID_ANNOTATION], user); } for (const group of groups) { groupMap.set(stringifyEntityRef(group), group); groupMap.set(group.metadata.annotations![LDAP_DN_ANNOTATION], group); + groupMap.set(group.metadata.annotations![LDAP_RDN_ANNOTATION], group); groupMap.set(group.metadata.annotations![LDAP_UUID_ANNOTATION], group); } diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index d6a0f7c7b7..d50e93edcc 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + ## 0.3.3 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 3131dc6daa..cf777d982c 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.3.3", + "version": "0.3.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,10 +34,10 @@ }, "dependencies": { "@azure/msal-node": "^1.1.0", - "@backstage/backend-tasks": "^0.3.2", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/plugin-catalog-backend": "^1.2.0", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@microsoft/microsoft-graph-types": "^2.6.0", "@types/node-fetch": "^2.5.12", "lodash": "^4.17.21", @@ -48,9 +48,9 @@ "qs": "^6.9.4" }, "devDependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151", "msw": "^0.42.0" }, diff --git a/plugins/catalog-backend-module-openapi/.eslintrc.js b/plugins/catalog-backend-module-openapi/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md new file mode 100644 index 0000000000..d98f5a95d0 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -0,0 +1,17 @@ +# @backstage/plugin-catalog-backend-module-openapi + +## 0.1.0-next.0 + +### Minor Changes + +- 67503d159e: Add basic OpenAPI \$ref support. + + For more information see [here](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-openapi). + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/integration@1.2.2-next.1 diff --git a/plugins/catalog-backend-module-openapi/README.md b/plugins/catalog-backend-module-openapi/README.md new file mode 100644 index 0000000000..1a133521c6 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/README.md @@ -0,0 +1,27 @@ +# Catalog Backend Module for OpenAPI specifications + +This is an extension module to the plugin-catalog-backend plugin, providing extensions targeted at OpenAPI specifications. + +With this you can split your OpenAPI definition into multiple files and reference them. They will be bundled, using an UrlReader, during processing and stored as a single specification. + +## Installation + +### Install the package + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-openapi +``` + +### Adding the plugin to your `packages/backend` + +The processor can be added by importing `OpenApiRefProcessor` in `src/plugins/catalog.ts` in your `backend` package and adding the following. + +```ts +builder.addProcessor( + OpenApiRefProcessor.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, + }), +); +``` diff --git a/plugins/catalog-backend-module-openapi/api-report.md b/plugins/catalog-backend-module-openapi/api-report.md new file mode 100644 index 0000000000..92ddd1e3cd --- /dev/null +++ b/plugins/catalog-backend-module-openapi/api-report.md @@ -0,0 +1,36 @@ +## API Report File for "@backstage/plugin-catalog-backend-module-openapi" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; +import { Config } from '@backstage/config'; +import { Entity } from '@backstage/catalog-model'; +import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { Logger } from 'winston'; +import { ScmIntegrations } from '@backstage/integration'; +import { UrlReader } from '@backstage/backend-common'; + +// @public (undocumented) +export class OpenApiRefProcessor implements CatalogProcessor { + constructor(options: { + integrations: ScmIntegrations; + logger: Logger; + reader: UrlReader; + }); + // (undocumented) + static fromConfig( + config: Config, + options: { + logger: Logger; + reader: UrlReader; + }, + ): OpenApiRefProcessor; + // (undocumented) + getProcessorName(): string; + // (undocumented) + preProcessEntity(entity: Entity, location: LocationSpec): Promise; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json new file mode 100644 index 0000000000..e2b3407bc0 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/package.json @@ -0,0 +1,53 @@ +{ + "name": "@backstage/plugin-catalog-backend-module-openapi", + "description": "A Backstage catalog backend module that helps with OpenAPI specifications", + "version": "0.1.0-next.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/catalog-backend-module-openapi" + }, + "keywords": [ + "backstage" + ], + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean", + "start": "backstage-cli package start" + }, + "dependencies": { + "@apidevtools/swagger-parser": "^10.1.0", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/config": "^1.0.1", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", + "winston": "^3.2.1", + "yaml": "^2.1.1" + }, + "devDependencies": { + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", + "openapi-types": "^11.0.1" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.test.ts b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.test.ts new file mode 100644 index 0000000000..8f2cc571c2 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.test.ts @@ -0,0 +1,101 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { getVoidLogger } from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; +import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { OpenApiRefProcessor } from './OpenApiRefProcessor'; +import { bundleOpenApiSpecification } from './lib'; + +jest.mock('./lib', () => ({ + bundleOpenApiSpecification: jest.fn(), +})); + +const bundledSpecification = ''; + +describe('OpenApiRefProcessor', () => { + const mockLocation = (): LocationSpec => ({ + type: 'url', + target: `https://github.com/owner/repo/blob/main/catalog-info.yaml`, + }); + + beforeEach(() => { + (bundleOpenApiSpecification as any).mockResolvedValue(bundledSpecification); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('preProcessEntity', () => { + const setupTest = ({ kind = 'API', spec = {} } = {}) => { + const entity = { + kind, + spec: { definition: '', ...spec }, + }; + const config = new ConfigReader({}); + const reader = { + read: jest.fn(), + readTree: jest.fn(), + search: jest.fn(), + }; + const processor = OpenApiRefProcessor.fromConfig(config, { + logger: getVoidLogger(), + reader, + }); + + return { entity, processor }; + }; + + it('should bundle OpenAPI specifications', async () => { + const { entity, processor } = setupTest({ + kind: 'API', + spec: { type: 'openapi' }, + }); + + const result = await processor.preProcessEntity( + entity as any, + mockLocation(), + ); + + expect(result.spec?.definition).toEqual(bundledSpecification); + }); + + it('should ignore other kinds', async () => { + const { entity, processor } = setupTest({ kind: 'Group' }); + + const result = await processor.preProcessEntity( + entity as any, + mockLocation(), + ); + + expect(result).toEqual(entity); + }); + + it('should ignore other specification types', async () => { + const { entity, processor } = setupTest({ + kind: 'Group', + spec: { type: 'asyncapi' }, + }); + + const result = await processor.preProcessEntity( + entity as any, + mockLocation(), + ); + + expect(result).toEqual(entity); + }); + }); +}); diff --git a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts new file mode 100644 index 0000000000..01875e0779 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts @@ -0,0 +1,94 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { UrlReader } from '@backstage/backend-common'; +import { Entity } from '@backstage/catalog-model'; +import { Config } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { + CatalogProcessor, + LocationSpec, +} from '@backstage/plugin-catalog-backend'; +import { bundleOpenApiSpecification } from './lib'; +import { Logger } from 'winston'; + +/** @public */ +export class OpenApiRefProcessor implements CatalogProcessor { + private readonly integrations: ScmIntegrations; + private readonly logger: Logger; + private readonly reader: UrlReader; + + static fromConfig( + config: Config, + options: { logger: Logger; reader: UrlReader }, + ) { + const integrations = ScmIntegrations.fromConfig(config); + + return new OpenApiRefProcessor({ + ...options, + integrations, + }); + } + + constructor(options: { + integrations: ScmIntegrations; + logger: Logger; + reader: UrlReader; + }) { + this.integrations = options.integrations; + this.logger = options.logger; + this.reader = options.reader; + } + + getProcessorName(): string { + return 'OpenApiRefProcessor'; + } + + async preProcessEntity( + entity: Entity, + location: LocationSpec, + ): Promise { + if ( + !entity || + entity.kind !== 'API' || + (entity.spec && entity.spec.type !== 'openapi') + ) { + return entity; + } + + const scmIntegration = this.integrations.byUrl(location.target); + if (!scmIntegration) { + return entity; + } + + this.logger.debug(`Bundling OpenAPI specification from ${location.target}`); + try { + const bundledSpec = await bundleOpenApiSpecification( + entity.spec!.definition?.toString(), + location.target, + this.reader, + scmIntegration, + ); + + return { + ...entity, + spec: { ...entity.spec, definition: bundledSpec }, + }; + } catch (error) { + this.logger.error(`Unable to bundle OpenAPI specification`, error); + return entity; + } + } +} diff --git a/plugins/catalog-backend-module-openapi/src/index.ts b/plugins/catalog-backend-module-openapi/src/index.ts new file mode 100644 index 0000000000..f98bee6bac --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { OpenApiRefProcessor } from './OpenApiRefProcessor'; diff --git a/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts b/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts new file mode 100644 index 0000000000..4505f158b5 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts @@ -0,0 +1,117 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { bundleOpenApiSpecification } from './bundle'; + +const specification = ` +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets: + get: + $ref: "./paths/pets/list.yaml" +`; + +const list = ` +--- +summary: List all pets +operationId: listPets +tags: + - pets +responses: + '200': + description: A paged array of pets + content: + application/json: + schema: + type: string +`; + +const expectedResult = ` +openapi: 3.0.0 +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + responses: + "200": + description: A paged array of pets + content: + application/json: + schema: + type: string +`; + +describe('bundleOpenApiSpecification', () => { + const readUrl = jest.fn(); + const reader = { + readUrl, + read: jest.fn(), + readTree: jest.fn(), + search: jest.fn(), + }; + + const scmIntegration = ScmIntegrations.fromConfig(new ConfigReader({})).byUrl( + 'https://github.com/owner/repo/blob/main/openapi.yaml', + ); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return undefined if no specification is supplied', async () => { + expect( + await bundleOpenApiSpecification( + undefined, + 'https://github.com/owner/repo/blob/main/openapi.yaml', + reader, + scmIntegration as any, + ), + ).toBeUndefined(); + }); + + it('should return the bundled specification', async () => { + readUrl.mockResolvedValue({ + buffer: jest.fn().mockResolvedValue(list), + }); + + const result = await bundleOpenApiSpecification( + specification, + 'https://github.com/owner/repo/blob/main/openapi.yaml', + reader, + scmIntegration as any, + ); + + expect(result).toEqual(expectedResult.trimStart()); + }); +}); diff --git a/plugins/catalog-backend-module-openapi/src/lib/bundle.ts b/plugins/catalog-backend-module-openapi/src/lib/bundle.ts new file mode 100644 index 0000000000..3d35429d8b --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/lib/bundle.ts @@ -0,0 +1,69 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { UrlReader } from '@backstage/backend-common'; +import { ScmIntegration } from '@backstage/integration'; +import SwaggerParser from '@apidevtools/swagger-parser'; +import { parse, stringify } from 'yaml'; +import * as path from 'path'; + +const protocolPattern = /^(\w{2,}):\/\//i; +const getProtocol = (refPath: string) => { + const match = protocolPattern.exec(refPath); + if (match) { + return match[1].toLowerCase(); + } + return undefined; +}; + +export async function bundleOpenApiSpecification( + specification: string | undefined, + targetUrl: string, + reader: UrlReader, + scmIntegration: ScmIntegration, +): Promise { + const fileUrlReaderResolver: SwaggerParser.ResolverOptions = { + canRead: file => { + const protocol = getProtocol(file.url); + return protocol === undefined || protocol === 'file'; + }, + read: async file => { + const relativePath = path.relative('.', file.url); + const url = scmIntegration.resolveUrl({ + base: targetUrl, + url: relativePath, + }); + if (reader.readUrl) { + const data = await reader.readUrl(url); + return data.buffer(); + } + throw new Error('UrlReader has no readUrl method defined'); + }, + }; + + if (!specification) { + return undefined; + } + + const options: SwaggerParser.Options = { + resolve: { + file: fileUrlReaderResolver, + http: true, + }, + }; + const specObject = parse(specification); + const bundledSpec = await SwaggerParser.bundle(specObject, options); + return stringify(bundledSpec); +} diff --git a/plugins/catalog-backend-module-openapi/src/lib/index.ts b/plugins/catalog-backend-module-openapi/src/lib/index.ts new file mode 100644 index 0000000000..805569181a --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/lib/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export * from './bundle'; diff --git a/packages/cli/src/commands/plugin/build.ts b/plugins/catalog-backend-module-openapi/src/setupTests.ts similarity index 66% rename from packages/cli/src/commands/plugin/build.ts rename to plugins/catalog-backend-module-openapi/src/setupTests.ts index 671aece818..d3232290a7 100644 --- a/packages/cli/src/commands/plugin/build.ts +++ b/plugins/catalog-backend-module-openapi/src/setupTests.ts @@ -14,13 +14,4 @@ * limitations under the License. */ -import { OptionValues } from 'commander'; -import { buildPackage, Output } from '../../lib/builder'; - -export default async (opts: OptionValues) => { - await buildPackage({ - outputs: new Set([Output.esm, Output.types]), - minify: opts.minify, - useApiExtractor: opts.experimentalTypeBuild, - }); -}; +export {}; diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index f235285617..7d58cfda6e 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend +## 1.2.1-next.1 + +### Patch Changes + +- f1dcc6f3c6: Use entity type predicates from catalog-model +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 1.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-scaffolder-common@1.1.2-next.0 + ## 1.2.0 ### Minor Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index c33dccd8a7..5cef11c8d4 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.2.0", + "version": "1.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,17 +34,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-permission-node": "^0.6.2", - "@backstage/plugin-scaffolder-common": "^1.1.1", - "@backstage/plugin-search-common": "^0.3.5", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-permission-node": "^0.6.3-next.1", + "@backstage/plugin-scaffolder-common": "^1.1.2-next.0", + "@backstage/plugin-search-common": "^0.3.6-next.0", "@backstage/types": "^1.0.0", "@types/express": "^4.17.6", "codeowners-utils": "^1.0.2", @@ -68,10 +68,10 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-search-backend-node": "0.6.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-search-backend-node": "0.6.3-next.1", "@types/core-js": "^2.5.4", "@types/git-url-parse": "^9.0.0", "@types/lodash": "^4.14.151", diff --git a/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts b/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts index f895ded85e..70ec0ee948 100644 --- a/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts +++ b/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts @@ -20,8 +20,8 @@ import { } from '@backstage/backend-common'; import { Entity, + isUserEntity, stringifyEntityRef, - UserEntity, } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { @@ -93,13 +93,9 @@ export class DefaultCatalogCollator { return formatted.toLowerCase(); } - private isUserEntity(entity: Entity): entity is UserEntity { - return entity.kind.toLocaleUpperCase('en-US') === 'USER'; - } - private getDocumentText(entity: Entity): string { let documentText = entity.metadata.description || ''; - if (this.isUserEntity(entity)) { + if (isUserEntity(entity)) { if (entity.spec?.profile?.displayName && documentText) { // combine displayName and description const displayName = entity.spec?.profile?.displayName; diff --git a/plugins/catalog-backend/src/search/util.ts b/plugins/catalog-backend/src/search/util.ts index b5df2a28a7..fd54d397c9 100644 --- a/plugins/catalog-backend/src/search/util.ts +++ b/plugins/catalog-backend/src/search/util.ts @@ -14,15 +14,7 @@ * limitations under the License. */ -import { Entity, UserEntity, GroupEntity } from '@backstage/catalog-model'; - -function isUserEntity(entity: Entity): entity is UserEntity { - return entity.kind.toLocaleUpperCase('en-US') === 'USER'; -} - -function isGroupEntity(entity: Entity): entity is GroupEntity { - return entity.kind.toLocaleUpperCase('en-US') === 'GROUP'; -} +import { Entity, isUserEntity, isGroupEntity } from '@backstage/catalog-model'; export function getDocumentText(entity: Entity): string { const documentTexts: string[] = []; diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index 72002894c4..7fa70e5859 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-common +## 1.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + ## 1.0.3 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index 27e7764812..82c0d72855 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-common", "description": "Common functionalities for the catalog plugin", - "version": "1.0.3", + "version": "1.0.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-search-common": "^0.3.5" + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-search-common": "^0.3.6-next.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 2afbca45c5..235434ff66 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog-graph +## 0.2.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.2.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.2.18 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 508453b387..e2d8af6f46 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.18", + "version": "0.2.19-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,12 +24,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -45,11 +45,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/plugin-catalog": "^1.3.0", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@backstage/types": "^1.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index b7c6aa5723..16f0bb50d9 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-catalog-graphql +## 0.3.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + ## 0.3.10 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 3e631906a6..c1ca2f9fa6 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-graphql", "description": "An experimental Backstage catalog GraphQL module", - "version": "0.3.10", + "version": "0.3.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", "@backstage/types": "^1.0.0", "apollo-server": "^3.0.0", @@ -46,8 +46,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@graphql-codegen/cli": "^2.3.1", "@graphql-codegen/graphql-modules-preset": "^2.3.2", "@graphql-codegen/typescript": "^2.4.2", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 5ee8857f18..6c306635e1 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-catalog-import +## 0.8.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.8.10-next.0 + +### Patch Changes + +- 272106fdad: Support use without `integrations` or only integrations without frontend visible properties (e.g., `bitbucketCloud`) being configured by checking `integrations.github` directly without attempting to load `integrations`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + ## 0.8.9 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 0c72baaf9f..d170bf54f2 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.8.9", + "version": "0.8.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,15 +34,15 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog-react": "^1.1.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -60,10 +60,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index ba7f7deb6d..fb5bcc81c3 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-catalog-react +## 1.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## 1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 1.1.1 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 47e99f23d8..a28b8219be 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.1.1", + "version": "1.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,16 +34,16 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-permission-react": "^0.4.2", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-permission-react": "^0.4.3-next.0", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", @@ -63,11 +63,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-scaffolder-common": "^1.1.1", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-scaffolder-common": "^1.1.2-next.0", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 5f4e9809c0..21e30517e2 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,54 @@ # @backstage/plugin-catalog +## 1.3.1-next.1 + +### Patch Changes + +- f1dcc6f3c6: Use entity type predicates from catalog-model +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## 1.3.1-next.0 + +### Patch Changes + +- dcaf1cb418: Previously, the color of the Entity Context Menu (in the Entity Page Header) was hardcoded as `white`. + + This was an issue for themes that use a header with a white background. By default, the color of the icon is now `theme.palette.bursts.fontColor`. + + It can now also be overridden in the theme, which is only necessary if the header title, subtitle and three-dots icon need to have different colors. For example: + + ```typescript + export function createThemeOverrides(theme: BackstageTheme): Overrides { + return { + PluginCatalogEntityContextMenu: { + button: { + color: 'blue', + }, + }, + ... + }, + ... + } + ``` + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + ## 1.3.0 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 792df94e18..0dd7836c02 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.3.0", + "version": "1.3.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,17 +34,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/plugin-search-react": "^0.2.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -61,11 +61,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/plugin-permission-react": "^0.4.2", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/plugin-permission-react": "^0.4.3-next.0", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.ts b/plugins/catalog/src/components/EntitySwitch/conditions.ts index 5f50fde5c9..86fd38a900 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Entity, ComponentEntity } from '@backstage/catalog-model'; +import { ComponentEntity, Entity } from '@backstage/catalog-model'; function strCmp(a: string | undefined, b: string | undefined): boolean { return Boolean( diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index de73c87469..14d234e35c 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-cicd-statistics@0.1.9-next.0 + ## 0.1.2 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index dd48ad7719..749c77d1c5 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.2", + "version": "0.1.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,16 +29,16 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/plugin-cicd-statistics": "^0.1.8", + "@backstage/plugin-cicd-statistics": "^0.1.9-next.0", "@gitbeaker/browser": "^35.6.0", "@gitbeaker/core": "^35.6.0", "luxon": "^2.0.2", "p-limit": "^4.0.0", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/catalog-model": "^1.0.3" + "@backstage/catalog-model": "^1.1.0-next.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 498cfa47a3..e8856187c9 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-cicd-statistics +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.8 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 0859afd945..c09dc7c995 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.8", + "version": "0.1.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,9 +37,9 @@ "@types/luxon": "^2.0.5" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.0", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.0", "@date-io/luxon": "^1.3.13", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.11.2", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 39cfcea568..2d5bee3a89 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-circleci +## 0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.6 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 3e00add228..3873b6fd03 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.6", + "version": "0.3.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,11 +35,11 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -55,10 +55,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 8454cc5cd4..6c0f361fdc 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-cloudbuild +## 0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.6 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index b1f14356e0..874fb69017 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.6", + "version": "0.3.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -52,10 +52,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 7cc1362a4d..c882f5a2c0 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-code-climate +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 193fc71f3c..a9542e0f72 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,11 +23,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,9 +40,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index ebf82cc984..b813d32776 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-code-coverage-backend +## 0.1.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.1.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 0.1.31 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 0bc5281648..fcd5a0cf5d 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.1.31", + "version": "0.1.32-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,12 +23,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -39,7 +39,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/express-xml-bodyparser": "^0.3.2", "@types/supertest": "^2.0.8", "msw": "^0.42.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index 474c324e98..b3199f207b 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-code-coverage +## 0.1.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.33 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index f72d73d293..b7d7723277 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.1.33", + "version": "0.1.34-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,13 +24,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -46,10 +46,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 2443fda056..4f0944ff34 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-codescene +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.1.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 47006c25c7..0b06850594 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.1", + "version": "0.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.9.10", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", @@ -38,10 +38,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 1128a525fe..99a23391d6 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-config-schema +## 0.1.30-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## 0.1.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.1.29 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 0a6c6f2d88..59b8780987 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.29", + "version": "0.1.30-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,10 +25,10 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -41,10 +41,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 5b726f558c..734cf0cfa0 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-cost-insights +## 0.11.29-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.11.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + ## 0.11.28 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 9cb8d22db9..e2555d961f 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.11.28", + "version": "0.11.29-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -60,10 +60,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index fddf3667af..d6cb7f6f56 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-dynatrace +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 9ee59f38a3..4983e7bf83 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -33,14 +33,14 @@ "react-use": "^17.2.4" }, "peerDependencies": { - "@backstage/plugin-catalog-react": "^1.1.1-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.0", "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 46a980fbe3..4609c6c4ea 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @internal/plugin-todo-list-backend +## 1.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + +## 1.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + ## 1.0.2 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 7aaed0532b..e91cbf3bf3 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,10 +1,13 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.2", + "version": "1.0.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "backstage": { + "role": "backend-plugin" + }, "publishConfig": { "access": "public", "main": "dist/index.cjs.js", @@ -20,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-auth-node": "^0.2.2", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-auth-node": "^0.2.3-next.1", "@types/express": "^4.17.6", "cross-fetch": "^3.1.5", "express": "^4.17.1", @@ -33,7 +36,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", "msw": "^0.42.0", diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md index 564b1f57eb..ba6a7bcf3d 100644 --- a/plugins/example-todo-list-common/CHANGELOG.md +++ b/plugins/example-todo-list-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list-common +## 1.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 + ## 1.0.2 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index 596a37b210..c19c0d0485 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-common", - "version": "1.0.2", + "version": "1.0.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -11,7 +11,7 @@ "types": "dist/index.d.ts" }, "backstage": { - "role": "frontend-plugin" + "role": "common-library" }, "scripts": { "start": "backstage-cli package start", @@ -23,13 +23,13 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/plugin-permission-common": "^0.6.2" + "@backstage/plugin-permission-common": "^0.6.3-next.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@types/node": "^16.11.26", "msw": "^0.42.0", "cross-fetch": "^3.1.5" diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 31404fa73d..64c2ec4995 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,20 @@ # @internal/plugin-todo-list +## 1.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 1.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 1.0.2 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index c80b9a48ea..68d6e89d56 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,10 +1,13 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.2", + "version": "1.0.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "backstage": { + "role": "frontend-plugin" + }, "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -21,9 +24,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -33,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 00ec76258d..164f449da7 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -36,9 +36,9 @@ "@backstage/core-plugin-api": "^1.0.3" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 712e3203fb..70ae5ba3a4 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-explore +## 0.3.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.37 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 201be77085..c8f8be82f0 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.3.37", + "version": "0.3.38-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", "@backstage/plugin-explore-react": "^0.0.18", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 065d6e0bd5..09b9373dbe 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-firehydrant +## 0.1.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.23 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index a86a122fd0..2ad2366295 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.1.23", + "version": "0.1.24-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,10 +25,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -39,10 +39,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 07880deb60..8c361a38f3 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-fossa +## 0.2.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.2.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.2.38 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index e97dc7c0f9..876de5965c 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.38", + "version": "0.2.39-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,12 +35,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index c5d63a19db..bb548b86cb 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-gcalendar +## 0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## 0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.3.2 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index b74129b8bc..9acc0cb3f5 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.2", + "version": "0.3.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 6c95f8ea4d..24a8fbe415 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-gcp-projects +## 0.3.26-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.3.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.3.25 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 0434e6b25a..3e3a9067aa 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.25", + "version": "0.3.26-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 7b3a0bc993..13e16cd353 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-git-release-manager +## 0.3.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + +## 0.3.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + ## 0.3.19 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 9ae263b882..b25a95a156 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.19", + "version": "0.3.20-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,10 +24,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 23e66cc1f6..ab347c1b77 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-github-actions +## 0.5.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.5.7-next.0 + +### Patch Changes + +- 217f919f0a: Minor cleanup of the API surface. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.5.6 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index f843755e9b..989847df6e 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.6", + "version": "0.5.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,12 +36,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -55,10 +55,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 45a93e3b34..3dc6a89f93 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-github-deployments +## 0.1.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + ## 0.1.37 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 1a27d21aa2..5fc366522e 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.37", + "version": "0.1.38-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,14 +24,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 629713540e..4e8ba70b9a 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.1-next.0 + +### Patch Changes + +- c6690d9d24: Fix bug on fetching teams repositories where were being filtered by type service unnecessarily +- 04e1504e85: Support namespaced teams and fetch all kinds +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 24909c5b5d..77caa4129f 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,12 +35,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,9 +49,9 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index eea6cc0554..7ad6421f53 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-gitops-profiles +## 0.3.25-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.3.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.3.24 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index ee7b3da11b..5a60b9c68e 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.24", + "version": "0.3.25-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,9 +35,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -48,10 +48,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 1df24b97cd..9a1f0c40c7 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-gocd +## 0.1.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.12 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index 1bf938fb1d..a2a8f99983 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.12", + "version": "0.1.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,12 +31,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 56cc49f3a4..ca98c30b8c 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-graphiql +## 0.2.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.2.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.2.38 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 4cbbc7f262..7049ca1317 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.38", + "version": "0.2.39-next.1", "private": false, "publishConfig": { "access": "public", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index d1426552e0..0f826cd492 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-graphql-backend +## 0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-catalog-graphql@0.3.11-next.0 + ## 0.1.23 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index d7b03bddf5..887718d415 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.23", + "version": "0.1.24-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/plugin-catalog-graphql": "^0.3.10", + "@backstage/plugin-catalog-graphql": "^0.3.11-next.0", "@graphql-tools/schema": "^8.3.1", "@types/express": "^4.17.6", "apollo-server": "^3.0.0", @@ -51,7 +51,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "msw": "^0.42.0", "supertest": "^6.1.3" diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index ef03c3797c..f185b92193 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,49 @@ # @backstage/plugin-home +## 0.4.23-next.1 + +### Patch Changes + +- a46e317a75: Added support for customizing the time format used in the `HeaderWorldClock` component + + Here's an example of how this can be used in the `HomePage.tsx` found in `\packages\app\src\components\home` to change the clock to be in the 24hr time format: + + ```diff + +const timeFormat: Intl.DateTimeFormatOptions = { + + hour: '2-digit', + + minute: '2-digit', + + hour12: false, + +}; + + export const homePage = ( + +
} pageTitleOverride="Home"> + + +
+ + + + + + ``` + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/plugin-stack-overflow@0.1.3-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.4.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-stack-overflow@0.1.3-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.4.22 ### Patch Changes diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index a65f8cda5c..452b3e1685 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -59,9 +59,10 @@ export function createCardExtension(options: { name?: string; }): Extension<(props: CardExtensionProps) => JSX.Element>; -// @public (undocumented) +// @public export const HeaderWorldClock: (props: { clockConfigs: ClockConfig[]; + customTimeFormat?: Intl.DateTimeFormatOptions | undefined; }) => JSX.Element | null; // @public diff --git a/plugins/home/package.json b/plugins/home/package.json index d1529a37fd..57fe69590a 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.22", + "version": "0.4.23-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,13 +34,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-stack-overflow": "^0.1.2", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-stack-overflow": "^0.1.3-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/home/src/components/index.ts b/plugins/home/src/components/index.ts index 1408853f5f..aae0cbe26d 100644 --- a/plugins/home/src/components/index.ts +++ b/plugins/home/src/components/index.ts @@ -16,5 +16,3 @@ export { HomepageCompositionRoot } from './HomepageCompositionRoot'; export { SettingsModal } from './SettingsModal'; -export { HeaderWorldClock } from './HeaderWorldClock'; -export type { ClockConfig } from './HeaderWorldClock'; diff --git a/plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.stories.tsx b/plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.stories.tsx new file mode 100644 index 0000000000..706dfa06ce --- /dev/null +++ b/plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.stories.tsx @@ -0,0 +1,97 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Header } from '@backstage/core-components'; +import { wrapInTestApp } from '@backstage/test-utils'; +import React, { ComponentType } from 'react'; +import { ClockConfig, HeaderWorldClock } from './HeaderWorldClock'; + +export default { + title: 'Plugins/Home/Components/HeaderWorldClock', + decorators: [(Story: ComponentType<{}>) => wrapInTestApp()], +}; + +export const Default = () => { + const clockConfigs: ClockConfig[] = [ + { + label: 'NYC', + timeZone: 'America/New_York', + }, + { + label: 'UTC', + timeZone: 'UTC', + }, + { + label: 'STO', + timeZone: 'Europe/Stockholm', + }, + { + label: 'TYO', + timeZone: 'Asia/Tokyo', + }, + ]; + + const timeFormat: Intl.DateTimeFormatOptions = { + hour: '2-digit', + minute: '2-digit', + hour12: true, + }; + + return ( +
+ +
+ ); +}; + +export const TwentyFourHourClocks = () => { + const clockConfigs: ClockConfig[] = [ + { + label: 'NYC', + timeZone: 'America/New_York', + }, + { + label: 'UTC', + timeZone: 'UTC', + }, + { + label: 'STO', + timeZone: 'Europe/Stockholm', + }, + { + label: 'TYO', + timeZone: 'Asia/Tokyo', + }, + ]; + + const timeFormat: Intl.DateTimeFormatOptions = { + hour: '2-digit', + minute: '2-digit', + hour12: false, + }; + + return ( +
+ +
+ ); +}; diff --git a/plugins/home/src/components/HeaderWorldClock/HeaderWorldClock.test.tsx b/plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.test.tsx similarity index 77% rename from plugins/home/src/components/HeaderWorldClock/HeaderWorldClock.test.tsx rename to plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.test.tsx index 9dbfceac81..db92fbb89f 100644 --- a/plugins/home/src/components/HeaderWorldClock/HeaderWorldClock.test.tsx +++ b/plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.test.tsx @@ -86,3 +86,33 @@ describe('HeaderWorldClock with invalid Time Zone', () => { expect(rendered.getByText('GMT')).toBeInTheDocument(); }); }); + +describe('HeaderWorldClock with custom Time Format', () => { + it('uses 24hr clock from custom Time Format', async () => { + jest.useFakeTimers().setSystemTime(new Date('2022-06-28T09:10:13.502Z')); + + const clockConfigs: ClockConfig[] = [ + { + label: 'UTC', + timeZone: 'UTC', + }, + ]; + + const timeFormat: Intl.DateTimeFormatOptions = { + hour: '2-digit', + minute: '2-digit', + hour12: false, + }; + + const rendered = await renderInTestApp( + + + , + ); + + expect(rendered.getByText('09:10')).toBeInTheDocument(); + }); +}); diff --git a/plugins/home/src/components/HeaderWorldClock/HeaderWorldClock.tsx b/plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.tsx similarity index 63% rename from plugins/home/src/components/HeaderWorldClock/HeaderWorldClock.tsx rename to plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.tsx index 7e3065cc7a..6672fe6a22 100644 --- a/plugins/home/src/components/HeaderWorldClock/HeaderWorldClock.tsx +++ b/plugins/home/src/homePageComponents/HeaderWorldClock/HeaderWorldClock.tsx @@ -32,7 +32,10 @@ export type ClockConfig = { timeZone: string; }; -function getTimes(clockConfigs: ClockConfig[]) { +function getTimes( + clockConfigs: ClockConfig[], + customTimeFormat?: Intl.DateTimeFormatOptions, +) { const d = new Date(); const lang = window.navigator.language; @@ -47,7 +50,7 @@ function getTimes(clockConfigs: ClockConfig[]) { const options: Intl.DateTimeFormatOptions = { timeZone: clockConfig.timeZone, - ...timeFormat, + ...(customTimeFormat ?? timeFormat), }; try { @@ -68,24 +71,57 @@ function getTimes(clockConfigs: ClockConfig[]) { return clocks; } -/** @public */ -export const HeaderWorldClock = (props: { clockConfigs: ClockConfig[] }) => { - const { clockConfigs } = props; +/** + * A component to display a configurable list of clocks for various time zones. + * + * @example + * Here's a simple example: + * ``` + * // This will give you a clock for the time zone that Stockholm is in + * // you can add more than one but keep in mind space may be limited + * const clockConfigs: ClockConfig[] = [ + * { + * label: 'STO', + * timeZone: 'Europe/Stockholm', + * }, + * ]; + * + * // Setting hour12 to false will make all the clocks show in the 24hr format + * const timeFormat: Intl.DateTimeFormatOptions = { + * hour: '2-digit', + * minute: '2-digit', + * hour12: false, + * }; + * + * // Here is the component in use: + * + * ``` + * + * @public + */ +export const HeaderWorldClock = (props: { + clockConfigs: ClockConfig[]; + customTimeFormat?: Intl.DateTimeFormatOptions; +}) => { + const { clockConfigs, customTimeFormat } = props; const defaultTimes: TimeObj[] = []; const [clocks, setTimes] = React.useState(defaultTimes); React.useEffect(() => { - setTimes(getTimes(clockConfigs)); + setTimes(getTimes(clockConfigs, customTimeFormat)); const intervalId = setInterval(() => { - setTimes(getTimes(clockConfigs)); + setTimes(getTimes(clockConfigs, customTimeFormat)); }, 1000); return () => { clearInterval(intervalId); }; - }, [clockConfigs]); + }, [clockConfigs, customTimeFormat]); if (clocks.length !== 0) { return ( diff --git a/plugins/home/src/components/HeaderWorldClock/index.ts b/plugins/home/src/homePageComponents/HeaderWorldClock/index.ts similarity index 100% rename from plugins/home/src/components/HeaderWorldClock/index.ts rename to plugins/home/src/homePageComponents/HeaderWorldClock/index.ts diff --git a/plugins/home/src/homePageComponents/index.ts b/plugins/home/src/homePageComponents/index.ts index 4d2802fb98..d318226dbd 100644 --- a/plugins/home/src/homePageComponents/index.ts +++ b/plugins/home/src/homePageComponents/index.ts @@ -16,3 +16,4 @@ export * from './CompanyLogo'; export * from './Toolkit'; +export type { ClockConfig } from './HeaderWorldClock'; diff --git a/plugins/home/src/index.ts b/plugins/home/src/index.ts index 8f137d589b..1776b5aa9c 100644 --- a/plugins/home/src/index.ts +++ b/plugins/home/src/index.ts @@ -31,9 +31,10 @@ export { ComponentTabs, ComponentTab, WelcomeTitle, + HeaderWorldClock, } from './plugin'; -export { SettingsModal, HeaderWorldClock } from './components'; +export { SettingsModal } from './components'; export * from './assets'; -export type { ClockConfig } from './components'; +export type { ClockConfig } from './homePageComponents'; export { createCardExtension } from './extensions'; export type { ComponentRenderer } from './extensions'; diff --git a/plugins/home/src/plugin.ts b/plugins/home/src/plugin.ts index 93110faffb..9b221ad8dc 100644 --- a/plugins/home/src/plugin.ts +++ b/plugins/home/src/plugin.ts @@ -136,3 +136,20 @@ export const HomePageStarredEntities = homePlugin.provide( components: () => import('./homePageComponents/StarredEntities'), }), ); + +/** + * A component to display a configurable list of clocks for various time zones. + * + * @public + */ +export const HeaderWorldClock = homePlugin.provide( + createComponentExtension({ + name: 'HeaderWorldClock', + component: { + lazy: () => + import('./homePageComponents/HeaderWorldClock').then( + m => m.HeaderWorldClock, + ), + }, + }), +); diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index cd74af4e74..bc5bd32d10 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-ilert +## 0.1.33-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.33-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.32 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 341c934836..8a14e8f3de 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.1.32", + "version": "0.1.33-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,12 +24,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index ef18b5708d..6a326c10cc 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-jenkins-backend +## 0.1.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-jenkins-common@0.1.6-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + +## 0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 0.1.23 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 1ab98c3255..e6c5d22e53 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.23", + "version": "0.1.24-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,14 +25,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-auth-node": "^0.2.2", - "@backstage/plugin-jenkins-common": "^0.1.5", - "@backstage/plugin-permission-common": "^0.6.2", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-auth-node": "^0.2.3-next.1", + "@backstage/plugin-jenkins-common": "^0.1.6-next.0", + "@backstage/plugin-permission-common": "^0.6.3-next.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -41,7 +41,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jenkins": "^0.23.1", "@types/supertest": "^2.0.8", "msw": "^0.42.0", diff --git a/plugins/jenkins-common/CHANGELOG.md b/plugins/jenkins-common/CHANGELOG.md index 53cf222e5a..ea0afcde79 100644 --- a/plugins/jenkins-common/CHANGELOG.md +++ b/plugins/jenkins-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-jenkins-common +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/jenkins-common/package.json b/plugins/jenkins-common/package.json index c47ac94a2b..d6520cd085 100644 --- a/plugins/jenkins-common/package.json +++ b/plugins/jenkins-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins-common", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,11 +22,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-permission-common": "^0.6.2" + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-permission-common": "^0.6.3-next.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index fd4e4420e7..65680ea7c4 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-jenkins +## 0.7.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-jenkins-common@0.1.6-next.0 + +## 0.7.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.7.5 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index ae86828505..e7a20b9046 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.5", + "version": "0.7.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,13 +35,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-jenkins-common": "^0.1.5", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-jenkins-common": "^0.1.6-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -54,10 +54,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 32b147ffdd..ef7514bdee 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-kafka-backend +## 0.2.27-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## 0.2.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + ## 0.2.26 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 965b15bd6b..37c34733a0 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.26", + "version": "0.2.27-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,10 +35,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -47,7 +47,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jest-when": "^3.5.0", "@types/lodash": "^4.14.151", "jest-when": "^3.1.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index c2743bf92b..b7139b7e8c 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-kafka +## 0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.6 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 43f4b8d35c..3da853574f 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.6", + "version": "0.3.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -39,10 +39,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index d829136819..e20634eb16 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-kubernetes-backend +## 0.7.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## 0.7.0-next.0 + +### Minor Changes + +- 0791af993f: Refactor `KubernetesObjectsProvider` with new methods, `KubernetesServiceLocator` now takes an `Entity` instead of `serviceId` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/plugin-kubernetes-common@0.4.0-next.0 + ## 0.6.0 ### Minor Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 33dcc1dfff..048d025bff 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.6.0", + "version": "0.7.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,11 +36,11 @@ }, "dependencies": { "@azure/identity": "^2.0.4", - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-kubernetes-common": "^0.3.0", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-kubernetes-common": "^0.4.0-next.0", "@google-cloud/container": "^4.0.0", "@kubernetes/client-node": "^0.16.0", "@types/express": "^4.17.6", @@ -61,7 +61,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/aws4": "^1.5.1", "aws-sdk-mock": "^5.2.1", "supertest": "^6.1.3" diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index d9f7e60c13..560f700be0 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kubernetes-common +## 0.4.0-next.0 + +### Minor Changes + +- 0791af993f: Refactor `KubernetesObjectsProvider` with new methods, `KubernetesServiceLocator` now takes an `Entity` instead of `serviceId` + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 62c9eb9745..e109139f74 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.3.0", + "version": "0.4.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,11 +38,11 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@kubernetes/client-node": "^0.16.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "jest": { "roots": [ diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 29f0ed0241..4312cf5776 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-kubernetes +## 0.6.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.6.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-kubernetes-common@0.4.0-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.6.6 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 1b63484224..35e685382d 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.6.6", + "version": "0.6.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,13 +34,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-kubernetes-common": "^0.3.0", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-kubernetes-common": "^0.4.0-next.0", + "@backstage/theme": "^0.2.16-next.0", "@kubernetes/client-node": "^0.16.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -57,10 +57,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 7dc3e30b1f..837bf0c598 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-lighthouse +## 0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.6 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 5f7097c704..8a1f484a35 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.3.6", + "version": "0.3.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,12 +35,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -51,10 +51,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 54a058fcb9..ea33fd1444 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-newrelic-dashboard +## 0.1.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.14 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 8166928a6a..b488db090c 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.1.14", + "version": "0.1.15-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,19 +23,19 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", "@testing-library/jest-dom": "^5.10.1", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5" diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 97da241a56..6134eee42e 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-newrelic +## 0.3.25-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.3.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.3.24 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 09f3d3196d..bb5a4d14ef 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.24", + "version": "0.3.25-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,9 +35,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 73129feed6..5cbc78f41c 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-org +## 0.5.7-next.1 + +### Patch Changes + +- 1e984b11fc: Render namespaces for teams with subtitles in `MyGroupsSidebarItem` +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.5.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.5.6 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 2b62e81683..f6927f7a28 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.5.6", + "version": "0.5.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,11 +29,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -48,11 +48,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/catalog-client": "^1.0.3", - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.tsx b/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.tsx index fa8f8405ff..f3e3a6bd9a 100644 --- a/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.tsx +++ b/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.tsx @@ -15,7 +15,10 @@ */ import React from 'react'; -import { stringifyEntityRef } from '@backstage/catalog-model'; +import { + DEFAULT_NAMESPACE, + stringifyEntityRef, +} from '@backstage/catalog-model'; import { SidebarItem, SidebarSubmenu, @@ -32,7 +35,6 @@ import { catalogApiRef, CatalogApi, entityRouteRef, - humanizeEntityRef, } from '@backstage/plugin-catalog-react'; import { getCompoundEntityRef } from '@backstage/catalog-model'; @@ -94,9 +96,11 @@ export const MyGroupsSidebarItem = (props: { {groups?.map(function groupsMap(group) { return ( ; +// Warning: (ae-missing-release-tag) "PagerDutyAssignee" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyAssignee = { + id: string; + summary: string; + html_url: string; +}; + // Warning: (ae-missing-release-tag) "PagerDutyCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const PagerDutyCard: () => JSX.Element; +// Warning: (ae-missing-release-tag) "PagerDutyChangeEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyChangeEvent = { + id: string; + integration: [ + { + service: PagerDutyService; + }, + ]; + source: string; + html_url: string; + links: [ + { + href: string; + text: string; + }, + ]; + summary: string; + timestamp: string; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyChangeEventsResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyChangeEventsResponse = { + change_events: PagerDutyChangeEvent[]; +}; + // Warning: (ae-missing-release-tag) "PagerDutyClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export class PagerDutyClient implements PagerDutyApi { - // Warning: (ae-forgotten-export) The symbol "ClientApiConfig" needs to be exported by the entry point index.d.ts - constructor(config: ClientApiConfig); + constructor(config: PagerDutyClientApiConfig); // (undocumented) static fromConfig( configApi: ConfigApi, - discoveryApi: DiscoveryApi, - identityApi: IdentityApi, + { discoveryApi, fetchApi }: PagerDutyClientApiDependencies, ): PagerDutyClient; - // Warning: (ae-forgotten-export) The symbol "ChangeEvent" needs to be exported by the entry point index.d.ts - // // (undocumented) - getChangeEventsByServiceId(serviceId: string): Promise; - // Warning: (ae-forgotten-export) The symbol "Incident" needs to be exported by the entry point index.d.ts - // + getChangeEventsByServiceId( + serviceId: string, + ): Promise; // (undocumented) - getIncidentsByServiceId(serviceId: string): Promise; - // Warning: (ae-forgotten-export) The symbol "OnCall" needs to be exported by the entry point index.d.ts - // + getIncidentsByServiceId( + serviceId: string, + ): Promise; // (undocumented) - getOnCallByPolicyId(policyId: string): Promise; - // Warning: (ae-forgotten-export) The symbol "Service" needs to be exported by the entry point index.d.ts - // + getOnCallByPolicyId(policyId: string): Promise; // (undocumented) - getServiceByIntegrationKey(integrationKey: string): Promise; - // Warning: (ae-forgotten-export) The symbol "TriggerAlarmRequest" needs to be exported by the entry point index.d.ts - // + getServiceByEntity(entity: Entity): Promise; // (undocumented) - triggerAlarm(request: TriggerAlarmRequest): Promise; + triggerAlarm(request: PagerDutyTriggerAlarmRequest): Promise; } +// Warning: (ae-missing-release-tag) "PagerDutyClientApiConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyClientApiConfig = PagerDutyClientApiDependencies & { + eventsBaseUrl?: string; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyClientApiDependencies" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyClientApiDependencies = { + discoveryApi: DiscoveryApi; + fetchApi: FetchApi; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyEntity = { + integrationKey?: string; + serviceId?: string; + name: string; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyIncident" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyIncident = { + id: string; + title: string; + status: string; + html_url: string; + assignments: [ + { + assignee: PagerDutyAssignee; + }, + ]; + serviceId: string; + created_at: string; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyIncidentsResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyIncidentsResponse = { + incidents: PagerDutyIncident[]; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyOnCall" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyOnCall = { + user: PagerDutyUser; + escalation_level: number; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyOnCallsResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyOnCallsResponse = { + oncalls: PagerDutyOnCall[]; +}; + // Warning: (ae-missing-release-tag) "pagerDutyPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -77,6 +170,49 @@ const pagerDutyPlugin: BackstagePlugin<{}, {}>; export { pagerDutyPlugin }; export { pagerDutyPlugin as plugin }; +// Warning: (ae-missing-release-tag) "PagerDutyService" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyService = { + id: string; + name: string; + html_url: string; + integrationKey: string; + escalation_policy: { + id: string; + user: PagerDutyUser; + html_url: string; + }; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyServiceResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyServiceResponse = { + service: PagerDutyService; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyTriggerAlarmRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyTriggerAlarmRequest = { + integrationKey: string; + source: string; + description: string; + userName: string; +}; + +// Warning: (ae-missing-release-tag) "PagerDutyUser" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PagerDutyUser = { + id: string; + summary: string; + email: string; + html_url: string; + name: string; +}; + // Warning: (ae-forgotten-export) The symbol "TriggerButtonProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "TriggerButton" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 73a92ed5f7..63e6d0b951 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.4.0", + "version": "0.5.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -52,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/pagerduty/src/api/client.test.ts b/plugins/pagerduty/src/api/client.test.ts new file mode 100644 index 0000000000..a32a533e68 --- /dev/null +++ b/plugins/pagerduty/src/api/client.test.ts @@ -0,0 +1,376 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { MockFetchApi } from '@backstage/test-utils'; +import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { PagerDutyClient, UnauthorizedError } from './client'; +import { PagerDutyService, PagerDutyUser } from '../components/types'; +import { NotFoundError } from '@backstage/errors'; +import { Entity } from '@backstage/catalog-model'; + +const mockFetch = jest.fn().mockName('fetch'); +const mockDiscoveryApi: jest.Mocked = { + getBaseUrl: jest + .fn() + .mockName('discoveryApi') + .mockResolvedValue('http://localhost:7007/proxy'), +}; +const mockFetchApi: MockFetchApi = new MockFetchApi({ + baseImplementation: mockFetch, +}); + +let client: PagerDutyClient; +let entity: Entity; + +const user: PagerDutyUser = { + name: 'person1', + id: 'p1', + summary: 'person1', + email: 'person1@example.com', + html_url: 'http://a.com/id1', +}; + +const service: PagerDutyService = { + id: 'def456', + name: 'pagerduty-name', + html_url: 'www.example.com', + escalation_policy: { + id: 'def', + user: user, + html_url: 'http://a.com/id1', + }, + integrationKey: 'abc123', +}; + +const requestHeaders = { + headers: { + Accept: 'application/vnd.pagerduty+json;version=2', + 'Content-Type': 'application/json', + }, + method: 'GET', +}; + +describe('PagerDutyClient', () => { + beforeEach(() => { + mockFetch.mockReset(); + + client = new PagerDutyClient({ + eventsBaseUrl: 'https://events.pagerduty.com/v2', + discoveryApi: mockDiscoveryApi, + fetchApi: mockFetchApi, + }); + }); + + describe('getServiceByEntity', () => { + describe('when provided entity has an integrationKey value', () => { + beforeEach(() => { + entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/integration-key': 'abc123', + }, + }, + }; + }); + + it('queries proxy path by integration id', async () => { + mockFetch.mockResolvedValueOnce({ + status: 200, + ok: true, + json: () => Promise.resolve({ services: [service] }), + }); + + expect(await client.getServiceByEntity(entity)).toEqual({ + service, + }); + expect(mockFetch).toHaveBeenCalledWith( + 'http://localhost:7007/proxy/pagerduty/services?time_zone=UTC&include[]=integrations&include[]=escalation_policies&query=abc123', + requestHeaders, + ); + }); + + describe('on 401 response code', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 401, + ok: false, + json: () => Promise.resolve({}), + }); + }); + + it('throws UnauthorizedError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + UnauthorizedError, + ); + }); + }); + + describe('on 404 response code', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 404, + ok: false, + json: () => Promise.resolve({}), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + NotFoundError, + ); + }); + }); + + describe('on other non-ok response', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 500, + ok: false, + json: () => + Promise.resolve({ + errors: ['Not valid request', 'internal error occurred'], + }), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + 'Request failed with 500, Not valid request internal error occurred', + ); + }); + }); + + describe('when services response is empty', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 200, + ok: true, + json: () => Promise.resolve({ services: [] }), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + NotFoundError, + ); + }); + }); + }); + + describe('when provided entity has a serviceId value', () => { + beforeEach(() => { + entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/service-id': 'def456', + }, + }, + }; + }); + + it('queries proxy path by integration id', async () => { + mockFetch.mockResolvedValueOnce({ + status: 200, + ok: true, + json: () => Promise.resolve({ service }), + }); + + expect(await client.getServiceByEntity(entity)).toEqual({ + service, + }); + expect(mockFetch).toHaveBeenCalledWith( + 'http://localhost:7007/proxy/pagerduty/services/def456?time_zone=UTC&include[]=integrations&include[]=escalation_policies', + requestHeaders, + ); + }); + + describe('on 401 response code', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 401, + ok: false, + json: () => Promise.resolve({}), + }); + }); + + it('throws UnauthorizedError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + UnauthorizedError, + ); + }); + }); + + describe('on 404 response code', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 404, + ok: false, + json: () => Promise.resolve({}), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + NotFoundError, + ); + }); + }); + + describe('on other non-ok response', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 500, + ok: false, + json: () => + Promise.resolve({ + errors: ['Not valid request', 'internal error occurred'], + }), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + 'Request failed with 500, Not valid request internal error occurred', + ); + }); + }); + }); + + describe('when provided entity has both integrationKey and serviceId', () => { + beforeEach(() => { + entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/integration-key': 'abc123', + 'pagerduty.com/service-id': 'def456', + }, + }, + }; + }); + + it('queries proxy path by integration id', async () => { + mockFetch.mockResolvedValueOnce({ + status: 200, + ok: true, + json: () => Promise.resolve({ services: [service] }), + }); + + expect(await client.getServiceByEntity(entity)).toEqual({ + service, + }); + expect(mockFetch).toHaveBeenCalledWith( + 'http://localhost:7007/proxy/pagerduty/services?time_zone=UTC&include[]=integrations&include[]=escalation_policies&query=abc123', + requestHeaders, + ); + }); + + describe('on 401 response code', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 401, + ok: false, + json: () => Promise.resolve({}), + }); + }); + + it('throws UnauthorizedError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + UnauthorizedError, + ); + }); + }); + + describe('on 404 response code', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 404, + ok: false, + json: () => Promise.resolve({}), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + NotFoundError, + ); + }); + }); + + describe('on other non-ok response', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 500, + ok: false, + json: () => + Promise.resolve({ + errors: ['Not valid request', 'internal error occurred'], + }), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + 'Request failed with 500, Not valid request internal error occurred', + ); + }); + }); + + describe('when services response is empty', () => { + beforeEach(() => { + mockFetch.mockResolvedValueOnce({ + status: 200, + ok: true, + json: () => Promise.resolve({ services: [] }), + }); + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + NotFoundError, + ); + }); + }); + }); + + describe('when provided entity has no integrationKey or serviceId values', () => { + beforeEach(() => { + entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: {}, + }, + }; + }); + + it('throws NotFoundError', async () => { + await expect(client.getServiceByEntity(entity)).rejects.toThrowError( + NotFoundError, + ); + expect(mockFetch).not.toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/plugins/pagerduty/src/api/client.ts b/plugins/pagerduty/src/api/client.ts index 43c6165c91..69a702f66d 100644 --- a/plugins/pagerduty/src/api/client.ts +++ b/plugins/pagerduty/src/api/client.ts @@ -14,23 +14,22 @@ * limitations under the License. */ -import { Service, Incident, ChangeEvent, OnCall } from '../components/types'; import { PagerDutyApi, - TriggerAlarmRequest, - ServicesResponse, - IncidentsResponse, - OnCallsResponse, - ClientApiConfig, + PagerDutyTriggerAlarmRequest, + PagerDutyServicesResponse, + PagerDutyServiceResponse, + PagerDutyIncidentsResponse, + PagerDutyOnCallsResponse, + PagerDutyClientApiDependencies, + PagerDutyClientApiConfig, RequestOptions, - ChangeEventsResponse, + PagerDutyChangeEventsResponse, } from './types'; -import { - createApiRef, - DiscoveryApi, - ConfigApi, - IdentityApi, -} from '@backstage/core-plugin-api'; +import { createApiRef, ConfigApi } from '@backstage/core-plugin-api'; +import { NotFoundError } from '@backstage/errors'; +import { Entity } from '@backstage/catalog-model'; +import { getPagerDutyEntity } from '../components/pagerDutyEntity'; export class UnauthorizedError extends Error {} @@ -38,65 +37,89 @@ export const pagerDutyApiRef = createApiRef({ id: 'plugin.pagerduty.api', }); +const commonGetServiceParams = + 'time_zone=UTC&include[]=integrations&include[]=escalation_policies'; + export class PagerDutyClient implements PagerDutyApi { static fromConfig( configApi: ConfigApi, - discoveryApi: DiscoveryApi, - identityApi: IdentityApi, + { discoveryApi, fetchApi }: PagerDutyClientApiDependencies, ) { const eventsBaseUrl: string = configApi.getOptionalString('pagerDuty.eventsBaseUrl') ?? 'https://events.pagerduty.com/v2'; + return new PagerDutyClient({ eventsBaseUrl, discoveryApi, - identityApi, + fetchApi, }); } - constructor(private readonly config: ClientApiConfig) {} + constructor(private readonly config: PagerDutyClientApiConfig) {} - async getServiceByIntegrationKey(integrationKey: string): Promise { - const params = `time_zone=UTC&include[]=integrations&include[]=escalation_policies&query=${integrationKey}`; - const url = `${await this.config.discoveryApi.getBaseUrl( - 'proxy', - )}/pagerduty/services?${params}`; - const { services } = await this.getByUrl(url); + async getServiceByEntity(entity: Entity): Promise { + const { integrationKey, serviceId } = getPagerDutyEntity(entity); - return services; + let response: PagerDutyServiceResponse; + let url: string; + + if (integrationKey) { + url = `${await this.config.discoveryApi.getBaseUrl( + 'proxy', + )}/pagerduty/services?${commonGetServiceParams}&query=${integrationKey}`; + const { services } = await this.getByUrl(url); + const service = services[0]; + + if (!service) throw new NotFoundError(); + + response = { service }; + } else if (serviceId) { + url = `${await this.config.discoveryApi.getBaseUrl( + 'proxy', + )}/pagerduty/services/${serviceId}?${commonGetServiceParams}`; + + response = await this.getByUrl(url); + } else { + throw new NotFoundError(); + } + + return response; } - async getIncidentsByServiceId(serviceId: string): Promise { + async getIncidentsByServiceId( + serviceId: string, + ): Promise { const params = `time_zone=UTC&sort_by=created_at&statuses[]=triggered&statuses[]=acknowledged&service_ids[]=${serviceId}`; const url = `${await this.config.discoveryApi.getBaseUrl( 'proxy', )}/pagerduty/incidents?${params}`; - const { incidents } = await this.getByUrl(url); - return incidents; + return await this.getByUrl(url); } - async getChangeEventsByServiceId(serviceId: string): Promise { + async getChangeEventsByServiceId( + serviceId: string, + ): Promise { const params = `limit=5&time_zone=UTC&sort_by=timestamp`; const url = `${await this.config.discoveryApi.getBaseUrl( 'proxy', )}/pagerduty/services/${serviceId}/change_events?${params}`; - const { change_events } = await this.getByUrl(url); - - return change_events; + return await this.getByUrl(url); } - async getOnCallByPolicyId(policyId: string): Promise { + async getOnCallByPolicyId( + policyId: string, + ): Promise { const params = `time_zone=UTC&include[]=users&escalation_policy_ids[]=${policyId}`; const url = `${await this.config.discoveryApi.getBaseUrl( 'proxy', )}/pagerduty/oncalls?${params}`; - const { oncalls } = await this.getByUrl(url); - return oncalls; + return await this.getByUrl(url); } - triggerAlarm(request: TriggerAlarmRequest): Promise { + triggerAlarm(request: PagerDutyTriggerAlarmRequest): Promise { const { integrationKey, source, description, userName } = request; const body = JSON.stringify({ @@ -130,13 +153,11 @@ export class PagerDutyClient implements PagerDutyApi { } private async getByUrl(url: string): Promise { - const { token: idToken } = await this.config.identityApi.getCredentials(); const options = { method: 'GET', headers: { Accept: 'application/vnd.pagerduty+json;version=2', 'Content-Type': 'application/json', - ...(idToken && { Authorization: `Bearer ${idToken}` }), }, }; const response = await this.request(url, options); @@ -147,10 +168,15 @@ export class PagerDutyClient implements PagerDutyApi { url: string, options: RequestOptions, ): Promise { - const response = await fetch(url, options); + const response = await this.config.fetchApi.fetch(url, options); if (response.status === 401) { throw new UnauthorizedError(); } + + if (response.status === 404) { + throw new NotFoundError(); + } + if (!response.ok) { const payload = await response.json(); const errors = payload.errors.map((error: string) => error).join(' '); diff --git a/plugins/pagerduty/src/api/index.ts b/plugins/pagerduty/src/api/index.ts index 015204b1e8..9a0c08973d 100644 --- a/plugins/pagerduty/src/api/index.ts +++ b/plugins/pagerduty/src/api/index.ts @@ -15,4 +15,12 @@ */ export { PagerDutyClient, pagerDutyApiRef, UnauthorizedError } from './client'; -export type { PagerDutyApi } from './types'; +export type { + PagerDutyServiceResponse, + PagerDutyIncidentsResponse, + PagerDutyChangeEventsResponse, + PagerDutyOnCallsResponse, + PagerDutyTriggerAlarmRequest, + PagerDutyClientApiDependencies, + PagerDutyClientApiConfig, +} from './types'; diff --git a/plugins/pagerduty/src/api/types.ts b/plugins/pagerduty/src/api/types.ts index 8acd24f033..786b0bdffd 100644 --- a/plugins/pagerduty/src/api/types.ts +++ b/plugins/pagerduty/src/api/types.ts @@ -14,10 +14,36 @@ * limitations under the License. */ -import { Incident, ChangeEvent, OnCall, Service } from '../components/types'; -import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; +import { + PagerDutyIncident, + PagerDutyChangeEvent, + PagerDutyOnCall, + PagerDutyService, +} from '../components/types'; +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; -export type TriggerAlarmRequest = { +export type PagerDutyServicesResponse = { + services: PagerDutyService[]; +}; + +export type PagerDutyServiceResponse = { + service: PagerDutyService; +}; + +export type PagerDutyIncidentsResponse = { + incidents: PagerDutyIncident[]; +}; + +export type PagerDutyChangeEventsResponse = { + change_events: PagerDutyChangeEvent[]; +}; + +export type PagerDutyOnCallsResponse = { + oncalls: PagerDutyOnCall[]; +}; + +export type PagerDutyTriggerAlarmRequest = { integrationKey: string; source: string; description: string; @@ -26,55 +52,46 @@ export type TriggerAlarmRequest = { export interface PagerDutyApi { /** - * Fetches a list of services, filtered by the provided integration key. + * Fetches the service for the provided Entity. * */ - getServiceByIntegrationKey(integrationKey: string): Promise; + getServiceByEntity(entity: Entity): Promise; /** * Fetches a list of incidents a provided service has. * */ - getIncidentsByServiceId(serviceId: string): Promise; + getIncidentsByServiceId( + serviceId: string, + ): Promise; /** * Fetches a list of change events a provided service has. * */ - getChangeEventsByServiceId(serviceId: string): Promise; + getChangeEventsByServiceId( + serviceId: string, + ): Promise; /** * Fetches the list of users in an escalation policy. * */ - getOnCallByPolicyId(policyId: string): Promise; + getOnCallByPolicyId(policyId: string): Promise; /** * Triggers an incident to whoever is on-call. */ - triggerAlarm(request: TriggerAlarmRequest): Promise; + triggerAlarm(request: PagerDutyTriggerAlarmRequest): Promise; } -export type ServicesResponse = { - services: Service[]; -}; - -export type IncidentsResponse = { - incidents: Incident[]; -}; - -export type ChangeEventsResponse = { - change_events: ChangeEvent[]; -}; - -export type OnCallsResponse = { - oncalls: OnCall[]; -}; - -export type ClientApiConfig = { - eventsBaseUrl?: string; +export type PagerDutyClientApiDependencies = { discoveryApi: DiscoveryApi; - identityApi: IdentityApi; + fetchApi: FetchApi; +}; + +export type PagerDutyClientApiConfig = PagerDutyClientApiDependencies & { + eventsBaseUrl?: string; }; export type RequestOptions = { diff --git a/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx b/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx index 4912277cee..7b531bf1de 100644 --- a/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx +++ b/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx @@ -26,7 +26,7 @@ import { Typography, } from '@material-ui/core'; import { DateTime, Duration } from 'luxon'; -import { ChangeEvent } from '../types'; +import { PagerDutyChangeEvent } from '../types'; import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'; import { BackstageTheme } from '@backstage/theme'; @@ -44,7 +44,7 @@ const useStyles = makeStyles({ }); type Props = { - changeEvent: ChangeEvent; + changeEvent: PagerDutyChangeEvent; }; export const ChangeEventListItem = ({ changeEvent }: Props) => { @@ -54,7 +54,7 @@ export const ChangeEventListItem = ({ changeEvent }: Props) => { const changedAt = DateTime.local() .minus(Duration.fromMillis(duration)) .toRelative({ locale: 'en' }); - let externalLinkElem = null; + let externalLinkElem: JSX.Element | undefined; if (changeEvent.links.length > 0) { const text: string = changeEvent.links[0].text; externalLinkElem = ( diff --git a/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.test.tsx b/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.test.tsx index fca2422198..a518e0caea 100644 --- a/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.test.tsx +++ b/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.test.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; import { render, waitFor } from '@testing-library/react'; -import { ChangeEvent } from '../types'; +import { PagerDutyChangeEvent } from '../types'; import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils'; import { pagerDutyApiRef } from '../../api'; import { ApiProvider } from '@backstage/core-app-api'; @@ -30,7 +30,7 @@ describe('Incidents', () => { it('Renders an empty state when there are no change events', async () => { mockPagerDutyApi.getChangeEventsByServiceId = jest .fn() - .mockImplementationOnce(async () => []); + .mockImplementationOnce(async () => ({ change_events: [] })); const { getByText, queryByTestId } = render( wrapInTestApp( @@ -46,37 +46,36 @@ describe('Incidents', () => { it('Renders all change events', async () => { mockPagerDutyApi.getChangeEventsByServiceId = jest .fn() - .mockImplementationOnce( - async () => - [ - { - id: 'id1', - source: 'changeSource1', - html_url: 'www.pdlink.com', - links: [ - { - href: 'www.externalLink1.com', - text: 'link1', - }, - ], - summary: 'summary of event', - timestamp: '2020-07-17T08:42:58.315+0000', - }, - { - id: 'id2', - source: 'changeSource1', - html_url: 'www.pdlink.com/link', - links: [ - { - href: 'www.externalLink1.com', - text: 'link1', - }, - ], - summary: 'sum of EVENT', - timestamp: '2020-07-18T08:42:58.315+0000', - }, - ] as ChangeEvent[], - ); + .mockImplementationOnce(async () => ({ + change_events: [ + { + id: 'id1', + source: 'changeSource1', + html_url: 'www.pdlink.com', + links: [ + { + href: 'www.externalLink1.com', + text: 'link1', + }, + ], + summary: 'summary of event', + timestamp: '2020-07-17T08:42:58.315+0000', + }, + { + id: 'id2', + source: 'changeSource1', + html_url: 'www.pdlink.com/link', + links: [ + { + href: 'www.externalLink1.com', + text: 'link1', + }, + ], + summary: 'sum of EVENT', + timestamp: '2020-07-18T08:42:58.315+0000', + }, + ] as PagerDutyChangeEvent[], + })); const { getByText, getAllByTitle, queryByTestId } = render( wrapInTestApp( @@ -95,36 +94,35 @@ describe('Incidents', () => { it('Does not render a pagerduty link when html_url is not present in response', async () => { mockPagerDutyApi.getChangeEventsByServiceId = jest .fn() - .mockImplementationOnce( - async () => - [ - { - id: 'id1', - source: 'changeSource1', - links: [ - { - href: 'www.externalLink1.com', - text: 'link1', - }, - ], - summary: 'summary of event', - timestamp: '2020-07-17T08:42:58.315+0000', - }, - { - id: 'id2', - source: 'changeSource1', - html_url: 'www.pdlink.com/link', - links: [ - { - href: 'www.externalLink1.com', - text: 'link1', - }, - ], - summary: 'sum of EVENT', - timestamp: '2020-07-18T08:42:58.315+0000', - }, - ] as ChangeEvent[], - ); + .mockImplementationOnce(async () => ({ + change_events: [ + { + id: 'id1', + source: 'changeSource1', + links: [ + { + href: 'www.externalLink1.com', + text: 'link1', + }, + ], + summary: 'summary of event', + timestamp: '2020-07-17T08:42:58.315+0000', + }, + { + id: 'id2', + source: 'changeSource1', + html_url: 'www.pdlink.com/link', + links: [ + { + href: 'www.externalLink1.com', + text: 'link1', + }, + ], + summary: 'sum of EVENT', + timestamp: '2020-07-18T08:42:58.315+0000', + }, + ] as PagerDutyChangeEvent[], + })); const { getByText, getAllByTitle, queryByTestId } = render( wrapInTestApp( diff --git a/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.tsx b/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.tsx index 58b4dd6acf..4b19257cdc 100644 --- a/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.tsx +++ b/plugins/pagerduty/src/components/ChangeEvents/ChangeEvents.tsx @@ -33,7 +33,10 @@ export const ChangeEvents = ({ serviceId, refreshEvents }: Props) => { const api = useApi(pagerDutyApiRef); const [{ value: changeEvents, loading, error }, getChangeEvents] = useAsyncFn( - async () => await api.getChangeEventsByServiceId(serviceId), + async () => { + const { change_events } = await api.getChangeEventsByServiceId(serviceId); + return change_events; + }, ); useEffect(() => { diff --git a/plugins/pagerduty/src/components/Errors/ServiceNotFoundError.tsx b/plugins/pagerduty/src/components/Errors/ServiceNotFoundError.tsx new file mode 100644 index 0000000000..d8b61ef7cd --- /dev/null +++ b/plugins/pagerduty/src/components/Errors/ServiceNotFoundError.tsx @@ -0,0 +1,35 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { Button } from '@material-ui/core'; +import { EmptyState } from '@backstage/core-components'; + +export const ServiceNotFoundError = () => ( + + Read More + + } + /> +); diff --git a/plugins/pagerduty/src/components/Errors/index.ts b/plugins/pagerduty/src/components/Errors/index.ts index df255749e0..6c35e0bfd1 100644 --- a/plugins/pagerduty/src/components/Errors/index.ts +++ b/plugins/pagerduty/src/components/Errors/index.ts @@ -15,3 +15,4 @@ */ export { MissingTokenError } from './MissingTokenError'; +export { ServiceNotFoundError } from './ServiceNotFoundError'; diff --git a/plugins/pagerduty/src/components/Escalation/Escalation.test.tsx b/plugins/pagerduty/src/components/Escalation/Escalation.test.tsx index 47f18002fe..97c02a37f3 100644 --- a/plugins/pagerduty/src/components/Escalation/Escalation.test.tsx +++ b/plugins/pagerduty/src/components/Escalation/Escalation.test.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { render, waitFor } from '@testing-library/react'; import { EscalationPolicy } from './EscalationPolicy'; import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils'; -import { User } from '../types'; +import { PagerDutyUser } from '../types'; import { pagerDutyApiRef } from '../../api'; import { ApiProvider } from '@backstage/core-app-api'; @@ -30,7 +30,7 @@ describe('Escalation', () => { it('Handles an empty response', async () => { mockPagerDutyApi.getOnCallByPolicyId = jest .fn() - .mockImplementationOnce(async () => []); + .mockImplementationOnce(async () => ({ oncalls: [] })); const { getByText, queryByTestId } = render( wrapInTestApp( @@ -48,17 +48,19 @@ describe('Escalation', () => { it('Render a list of users', async () => { mockPagerDutyApi.getOnCallByPolicyId = jest .fn() - .mockImplementationOnce(async () => [ - { - user: { - name: 'person1', - id: 'p1', - summary: 'person1', - email: 'person1@example.com', - html_url: 'http://a.com/id1', - } as User, - }, - ]); + .mockImplementationOnce(async () => ({ + oncalls: [ + { + user: { + name: 'person1', + id: 'p1', + summary: 'person1', + email: 'person1@example.com', + html_url: 'http://a.com/id1', + } as PagerDutyUser, + }, + ], + })); const { getByText, queryByTestId } = render( wrapInTestApp( diff --git a/plugins/pagerduty/src/components/Escalation/EscalationPolicy.tsx b/plugins/pagerduty/src/components/Escalation/EscalationPolicy.tsx index 704887be58..8602733ee3 100644 --- a/plugins/pagerduty/src/components/Escalation/EscalationPolicy.tsx +++ b/plugins/pagerduty/src/components/Escalation/EscalationPolicy.tsx @@ -37,7 +37,7 @@ export const EscalationPolicy = ({ policyId }: Props) => { loading, error, } = useAsync(async () => { - const oncalls = await api.getOnCallByPolicyId(policyId); + const { oncalls } = await api.getOnCallByPolicyId(policyId); const usersItem = oncalls .sort((a, b) => a.escalation_level - b.escalation_level) .map(oncall => oncall.user); diff --git a/plugins/pagerduty/src/components/Escalation/EscalationUser.tsx b/plugins/pagerduty/src/components/Escalation/EscalationUser.tsx index a460906d22..d418ad02c0 100644 --- a/plugins/pagerduty/src/components/Escalation/EscalationUser.tsx +++ b/plugins/pagerduty/src/components/Escalation/EscalationUser.tsx @@ -28,7 +28,7 @@ import { import Avatar from '@material-ui/core/Avatar'; import EmailIcon from '@material-ui/icons/Email'; import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'; -import { User } from '../types'; +import { PagerDutyUser } from '../types'; const useStyles = makeStyles({ listItemPrimary: { @@ -37,7 +37,7 @@ const useStyles = makeStyles({ }); type Props = { - user: User; + user: PagerDutyUser; }; export const EscalationUser = ({ user }: Props) => { diff --git a/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx b/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx index 807685a83e..5945c45e83 100644 --- a/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx +++ b/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx @@ -29,7 +29,7 @@ import { import Done from '@material-ui/icons/Done'; import Warning from '@material-ui/icons/Warning'; import { DateTime, Duration } from 'luxon'; -import { Incident } from '../types'; +import { PagerDutyIncident } from '../types'; import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'; import { BackstageTheme } from '@backstage/theme'; @@ -61,7 +61,7 @@ const useStyles = makeStyles(theme => ({ })); type Props = { - incident: Incident; + incident: PagerDutyIncident; }; export const IncidentListItem = ({ incident }: Props) => { diff --git a/plugins/pagerduty/src/components/Incident/Incidents.test.tsx b/plugins/pagerduty/src/components/Incident/Incidents.test.tsx index 74e7d82e8b..a83874a995 100644 --- a/plugins/pagerduty/src/components/Incident/Incidents.test.tsx +++ b/plugins/pagerduty/src/components/Incident/Incidents.test.tsx @@ -18,7 +18,7 @@ import { render, waitFor } from '@testing-library/react'; import { Incidents } from './Incidents'; import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils'; import { pagerDutyApiRef } from '../../api'; -import { Incident } from '../types'; +import { PagerDutyIncident } from '../types'; import { ApiProvider } from '@backstage/core-app-api'; const mockPagerDutyApi = { @@ -30,7 +30,7 @@ describe('Incidents', () => { it('Renders an empty state when there are no incidents', async () => { mockPagerDutyApi.getIncidentsByServiceId = jest .fn() - .mockImplementationOnce(async () => []); + .mockImplementationOnce(async () => ({ incidents: [] })); const { getByText, queryByTestId } = render( wrapInTestApp( @@ -44,9 +44,10 @@ describe('Incidents', () => { }); it('Renders all incidents', async () => { - mockPagerDutyApi.getIncidentsByServiceId = jest.fn().mockImplementationOnce( - async () => - [ + mockPagerDutyApi.getIncidentsByServiceId = jest + .fn() + .mockImplementationOnce(async () => ({ + incidents: [ { id: 'id1', status: 'triggered', @@ -82,8 +83,8 @@ describe('Incidents', () => { html_url: 'http://a.com/id2', serviceId: 'sId2', }, - ] as Incident[], - ); + ] as PagerDutyIncident[], + })); const { getByText, getAllByTitle, queryByTestId } = render( wrapInTestApp( diff --git a/plugins/pagerduty/src/components/Incident/Incidents.tsx b/plugins/pagerduty/src/components/Incident/Incidents.tsx index 06dd50bdaa..2e0e201c79 100644 --- a/plugins/pagerduty/src/components/Incident/Incidents.tsx +++ b/plugins/pagerduty/src/components/Incident/Incidents.tsx @@ -34,7 +34,12 @@ export const Incidents = ({ serviceId, refreshIncidents }: Props) => { const api = useApi(pagerDutyApiRef); const [{ value: incidents, loading, error }, getIncidents] = useAsyncFn( - async () => await api.getIncidentsByServiceId(serviceId), + async () => { + const { incidents: foundIncidents } = await api.getIncidentsByServiceId( + serviceId, + ); + return foundIncidents; + }, ); useEffect(() => { diff --git a/plugins/pagerduty/src/components/PagerDutyCard/index.test.tsx b/plugins/pagerduty/src/components/PagerDutyCard/index.test.tsx index e0a857ccc7..85202a9cfc 100644 --- a/plugins/pagerduty/src/components/PagerDutyCard/index.test.tsx +++ b/plugins/pagerduty/src/components/PagerDutyCard/index.test.tsx @@ -15,26 +15,17 @@ */ import React from 'react'; import { render, waitFor, fireEvent, act } from '@testing-library/react'; -import { PagerDutyCard } from '../PagerDutyCard'; +import { PagerDutyCard, isPluginApplicableToEntity } from '../PagerDutyCard'; import { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-react'; +import { NotFoundError } from '@backstage/errors'; import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils'; import { pagerDutyApiRef, UnauthorizedError, PagerDutyClient } from '../../api'; -import { Service, User } from '../types'; +import { PagerDutyService, PagerDutyUser } from '../types'; import { alertApiRef } from '@backstage/core-plugin-api'; import { ApiProvider } from '@backstage/core-app-api'; -const mockPagerDutyApi: Partial = { - getServiceByIntegrationKey: async () => [], - getOnCallByPolicyId: async () => [], - getIncidentsByServiceId: async () => [], -}; - -const apis = TestApiRegistry.from( - [pagerDutyApiRef, mockPagerDutyApi], - [alertApiRef, {}], -); const entity: Entity = { apiVersion: 'backstage.io/v1alpha1', kind: 'Component', @@ -46,7 +37,39 @@ const entity: Entity = { }, }; -const user: User = { +const entityWithoutAnnotations: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: {}, + }, +}; + +const entityWithServiceId: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/service-id': 'def456', + }, + }, +}; + +const entityWithAllAnnotations: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/integration-key': 'abc123', + 'pagerduty.com/service-id': 'def456', + }, + }, +}; + +const user: PagerDutyUser = { name: 'person1', id: 'p1', summary: 'person1', @@ -54,8 +77,8 @@ const user: User = { html_url: 'http://a.com/id1', }; -const service: Service = { - id: 'abc', +const service: PagerDutyService = { + id: 'def456', name: 'pagerduty-name', html_url: 'www.example.com', escalation_policy: { @@ -63,14 +86,51 @@ const service: Service = { user: user, html_url: 'http://a.com/id1', }, - integrationKey: 'abcd', + integrationKey: 'abc123', }; +const mockPagerDutyApi: Partial = { + getServiceByEntity: async () => ({ service }), + getOnCallByPolicyId: async () => ({ oncalls: [] }), + getIncidentsByServiceId: async () => ({ incidents: [] }), +}; + +const apis = TestApiRegistry.from( + [pagerDutyApiRef, mockPagerDutyApi], + [alertApiRef, {}], +); + +describe('isPluginApplicableToEntity', () => { + describe('when entity has no annotations', () => { + it('returns false', () => { + expect(isPluginApplicableToEntity(entityWithoutAnnotations)).toBe(false); + }); + }); + + describe('when entity has the pagerduty.com/integration-key annotation', () => { + it('returns true', () => { + expect(isPluginApplicableToEntity(entity)).toBe(true); + }); + }); + + describe('when entity has the pagerduty.com/service-id annotation', () => { + it('returns true', () => { + expect(isPluginApplicableToEntity(entityWithServiceId)).toBe(true); + }); + }); + + describe('when entity has all annotations', () => { + it('returns true', () => { + expect(isPluginApplicableToEntity(entityWithAllAnnotations)).toBe(true); + }); + }); +}); + describe('PageDutyCard', () => { it('Render pagerduty', async () => { - mockPagerDutyApi.getServiceByIntegrationKey = jest + mockPagerDutyApi.getServiceByEntity = jest .fn() - .mockImplementationOnce(async () => [service]); + .mockImplementationOnce(async () => ({ service })); const { getByText, queryByTestId } = render( wrapInTestApp( @@ -89,7 +149,7 @@ describe('PageDutyCard', () => { }); it('Handles custom error for missing token', async () => { - mockPagerDutyApi.getServiceByIntegrationKey = jest + mockPagerDutyApi.getServiceByEntity = jest .fn() .mockRejectedValueOnce(new UnauthorizedError()); @@ -106,8 +166,26 @@ describe('PageDutyCard', () => { expect(getByText('Missing or invalid PagerDuty Token')).toBeInTheDocument(); }); + it('Handles custom NotFoundError', async () => { + mockPagerDutyApi.getServiceByEntity = jest + .fn() + .mockRejectedValueOnce(new NotFoundError()); + + const { getByText, queryByTestId } = render( + wrapInTestApp( + + + + + , + ), + ); + await waitFor(() => !queryByTestId('progress')); + expect(getByText('PagerDuty Service Not Found')).toBeInTheDocument(); + }); + it('handles general error', async () => { - mockPagerDutyApi.getServiceByIntegrationKey = jest + mockPagerDutyApi.getServiceByEntity = jest .fn() .mockRejectedValueOnce(new Error('An error occurred')); const { getByText, queryByTestId } = render( @@ -127,10 +205,11 @@ describe('PageDutyCard', () => { ), ).toBeInTheDocument(); }); + it('opens the dialog when trigger button is clicked', async () => { - mockPagerDutyApi.getServiceByIntegrationKey = jest + mockPagerDutyApi.getServiceByEntity = jest .fn() - .mockImplementationOnce(async () => [service]); + .mockImplementationOnce(async () => ({ service })); const { getByText, queryByTestId, getByRole } = render( wrapInTestApp( @@ -150,4 +229,131 @@ describe('PageDutyCard', () => { }); expect(getByRole('dialog')).toBeInTheDocument(); }); + + describe('when entity has the pagerduty.com/service-id annotation', () => { + it('Renders PagerDuty service information', async () => { + mockPagerDutyApi.getServiceByEntity = jest + .fn() + .mockImplementationOnce(async () => ({ service })); + + const { getByText, queryByTestId } = render( + wrapInTestApp( + + + + + , + ), + ); + await waitFor(() => !queryByTestId('progress')); + expect(getByText('Service Directory')).toBeInTheDocument(); + expect(getByText('Create Incident')).toBeInTheDocument(); + expect(getByText('Nice! No incidents found!')).toBeInTheDocument(); + expect(getByText('Empty escalation policy')).toBeInTheDocument(); + }); + + it('Handles custom error for missing token', async () => { + mockPagerDutyApi.getServiceByEntity = jest + .fn() + .mockRejectedValueOnce(new UnauthorizedError()); + + const { getByText, queryByTestId } = render( + wrapInTestApp( + + + + + , + ), + ); + await waitFor(() => !queryByTestId('progress')); + expect( + getByText('Missing or invalid PagerDuty Token'), + ).toBeInTheDocument(); + }); + + it('Handles custom NotFoundError', async () => { + mockPagerDutyApi.getServiceByEntity = jest + .fn() + .mockRejectedValueOnce(new NotFoundError()); + + const { getByText, queryByTestId } = render( + wrapInTestApp( + + + + + , + ), + ); + await waitFor(() => !queryByTestId('progress')); + expect(getByText('PagerDuty Service Not Found')).toBeInTheDocument(); + }); + + it('handles general error', async () => { + mockPagerDutyApi.getServiceByEntity = jest + .fn() + .mockRejectedValueOnce(new Error('An error occurred')); + const { getByText, queryByTestId } = render( + wrapInTestApp( + + + + + , + ), + ); + await waitFor(() => !queryByTestId('progress')); + + expect( + getByText( + 'Error encountered while fetching information. An error occurred', + ), + ).toBeInTheDocument(); + }); + + it('disables the Create Incident button', async () => { + mockPagerDutyApi.getServiceByEntity = jest + .fn() + .mockImplementationOnce(async () => ({ service })); + + const { queryByTestId, getByTitle } = render( + wrapInTestApp( + + + + + , + ), + ); + await waitFor(() => !queryByTestId('progress')); + expect( + getByTitle('Must provide an integration-key to create incidents') + .className, + ).toMatch('disabled'); + }); + }); + + describe('when entity has all annotations', () => { + it('queries by integration key', async () => { + mockPagerDutyApi.getServiceByEntity = jest + .fn() + .mockImplementationOnce(async () => ({ service })); + + const { getByText, queryByTestId } = render( + wrapInTestApp( + + + + + , + ), + ); + await waitFor(() => !queryByTestId('progress')); + expect(getByText('Service Directory')).toBeInTheDocument(); + expect(getByText('Create Incident')).toBeInTheDocument(); + expect(getByText('Nice! No incidents found!')).toBeInTheDocument(); + expect(getByText('Empty escalation policy')).toBeInTheDocument(); + }); + }); }); diff --git a/plugins/pagerduty/src/components/PagerDutyCard/index.tsx b/plugins/pagerduty/src/components/PagerDutyCard/index.tsx index bbade09e51..e8ba2c522c 100644 --- a/plugins/pagerduty/src/components/PagerDutyCard/index.tsx +++ b/plugins/pagerduty/src/components/PagerDutyCard/index.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { useState, useCallback } from 'react'; +import React, { ReactNode, useState, useCallback } from 'react'; import { Entity } from '@backstage/catalog-model'; import { Card, CardHeader, Divider, CardContent } from '@material-ui/core'; import { Incidents } from '../Incident'; @@ -22,28 +22,39 @@ import useAsync from 'react-use/lib/useAsync'; import { Alert } from '@material-ui/lab'; import { pagerDutyApiRef, UnauthorizedError } from '../../api'; import AlarmAddIcon from '@material-ui/icons/AlarmAdd'; -import { MissingTokenError } from '../Errors/MissingTokenError'; +import { MissingTokenError, ServiceNotFoundError } from '../Errors'; import WebIcon from '@material-ui/icons/Web'; import DateRangeIcon from '@material-ui/icons/DateRange'; -import { usePagerdutyEntity } from '../../hooks'; -import { PAGERDUTY_INTEGRATION_KEY } from '../constants'; +import { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from '../constants'; import { TriggerDialog } from '../TriggerDialog'; import { ChangeEvents } from '../ChangeEvents'; import { useApi } from '@backstage/core-plugin-api'; +import { NotFoundError } from '@backstage/errors'; import { Progress, HeaderIconLinkRow, IconLinkVerticalProps, TabbedCard, CardTab, + InfoCard, } from '@backstage/core-components'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { getPagerDutyEntity } from '../pagerDutyEntity'; + +const BasicCard = ({ children }: { children: ReactNode }) => ( + {children} +); export const isPluginApplicableToEntity = (entity: Entity) => - Boolean(entity.metadata.annotations?.[PAGERDUTY_INTEGRATION_KEY]); + Boolean( + entity.metadata.annotations?.[PAGERDUTY_INTEGRATION_KEY] || + entity.metadata.annotations?.[PAGERDUTY_SERVICE_ID], + ); export const PagerDutyCard = () => { - const { integrationKey } = usePagerdutyEntity(); + const { entity } = useEntity(); + const pagerDutyEntity = getPagerDutyEntity(entity); const api = useApi(pagerDutyApiRef); const [refreshIncidents, setRefreshIncidents] = useState(false); const [refreshChangeEvents, setRefreshChangeEvents] = @@ -67,33 +78,44 @@ export const PagerDutyCard = () => { loading, error, } = useAsync(async () => { - const services = await api.getServiceByIntegrationKey( - integrationKey as string, - ); + const { service: foundService } = await api.getServiceByEntity(entity); return { - id: services[0].id, - name: services[0].name, - url: services[0].html_url, - policyId: services[0].escalation_policy.id, - policyLink: services[0].escalation_policy.html_url, + id: foundService.id, + name: foundService.name, + url: foundService.html_url, + policyId: foundService.escalation_policy.id, + policyLink: foundService.escalation_policy.html_url, }; }); - if (error instanceof UnauthorizedError) { - return ; - } - if (error) { - return ( - - Error encountered while fetching information. {error.message} - - ); + let errorNode: ReactNode; + + switch (error.constructor) { + case UnauthorizedError: + errorNode = ; + break; + case NotFoundError: + errorNode = ; + break; + default: + errorNode = ( + + Error encountered while fetching information. {error.message} + + ); + } + + return {errorNode}; } if (loading) { - return ; + return ( + + + + ); } const serviceLink: IconLinkVerticalProps = { @@ -102,11 +124,21 @@ export const PagerDutyCard = () => { icon: , }; + /** + * In order to create incidents using the REST API, a valid user email address must be present. + * There is no guarantee the current user entity has a valid email association, so instead just + * only allow triggering incidents when an integration key is present. + */ + const createIncidentDisabled = !pagerDutyEntity.integrationKey; const triggerLink: IconLinkVerticalProps = { label: 'Create Incident', onClick: showDialog, icon: , color: 'secondary', + disabled: createIncidentDisabled, + title: createIncidentDisabled + ? 'Must provide an integration-key to create incidents' + : '', }; const escalationPolicyLink: IconLinkVerticalProps = { @@ -145,12 +177,14 @@ export const PagerDutyCard = () => { - + {!createIncidentDisabled && ( + + )} ); }; diff --git a/plugins/pagerduty/src/components/constants.ts b/plugins/pagerduty/src/components/constants.ts index bfe1aea298..01308590f1 100644 --- a/plugins/pagerduty/src/components/constants.ts +++ b/plugins/pagerduty/src/components/constants.ts @@ -14,3 +14,4 @@ * limitations under the License. */ export const PAGERDUTY_INTEGRATION_KEY = 'pagerduty.com/integration-key'; +export const PAGERDUTY_SERVICE_ID = 'pagerduty.com/service-id'; diff --git a/packages/cli/src/commands/plugin/serve.ts b/plugins/pagerduty/src/components/index.ts similarity index 51% rename from packages/cli/src/commands/plugin/serve.ts rename to plugins/pagerduty/src/components/index.ts index 891db190e0..17bb2c03dc 100644 --- a/packages/cli/src/commands/plugin/serve.ts +++ b/plugins/pagerduty/src/components/index.ts @@ -14,23 +14,19 @@ * limitations under the License. */ -import fs from 'fs-extra'; -import { OptionValues } from 'commander'; -import { serveBundle } from '../../lib/bundler'; -import { loadCliConfig } from '../../lib/config'; -import { paths } from '../../lib/paths'; +export type { + PagerDutyChangeEvent, + PagerDutyIncident, + PagerDutyService, + PagerDutyOnCall, + PagerDutyAssignee, + PagerDutyUser, +} from './types'; -export default async (opts: OptionValues) => { - const { name } = await fs.readJson(paths.resolveTarget('package.json')); - const waitForExit = await serveBundle({ - entry: 'dev/index', - checksEnabled: opts.check, - ...(await loadCliConfig({ - args: opts.config, - fromPackage: name, - withFilteredKeys: true, - })), - }); +export { + isPluginApplicableToEntity, + isPluginApplicableToEntity as isPagerDutyAvailable, + PagerDutyCard, +} from './PagerDutyCard'; - await waitForExit(); -}; +export { TriggerButton } from './TriggerButton'; diff --git a/plugins/pagerduty/src/components/pagerDutyEntity.test.ts b/plugins/pagerduty/src/components/pagerDutyEntity.test.ts new file mode 100644 index 0000000000..cf551d3d6e --- /dev/null +++ b/plugins/pagerduty/src/components/pagerDutyEntity.test.ts @@ -0,0 +1,98 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Entity } from '@backstage/catalog-model'; +import { getPagerDutyEntity } from './pagerDutyEntity'; + +const entity: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/integration-key': 'abc123', + }, + }, +}; + +const entityWithoutAnnotations: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: {}, + }, +}; + +const entityWithServiceId: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/service-id': 'def456', + }, + }, +}; + +const entityWithAllAnnotations: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'pagerduty-test', + annotations: { + 'pagerduty.com/integration-key': 'abc123', + 'pagerduty.com/service-id': 'def456', + }, + }, +}; + +describe('getPagerDutyEntity', () => { + describe('when entity has no annotations', () => { + it('returns a PagerDutyEntity', () => { + expect(getPagerDutyEntity(entityWithoutAnnotations)).toEqual({ + name: 'pagerduty-test', + }); + }); + }); + + describe('when entity has integration key annotation', () => { + it('returns a PagerDutyEntity', () => { + expect(getPagerDutyEntity(entity)).toEqual({ + name: 'pagerduty-test', + integrationKey: 'abc123', + }); + }); + }); + + describe('when entity has service id annotation', () => { + it('returns a PagerDutyEntity', () => { + expect(getPagerDutyEntity(entityWithServiceId)).toEqual({ + name: 'pagerduty-test', + serviceId: 'def456', + }); + }); + }); + + describe('when entity has all annotations', () => { + it('returns a PagerDutyEntity', () => { + expect(getPagerDutyEntity(entityWithAllAnnotations)).toEqual({ + name: 'pagerduty-test', + integrationKey: 'abc123', + serviceId: 'def456', + }); + }); + }); +}); diff --git a/plugins/pagerduty/src/components/pagerDutyEntity.ts b/plugins/pagerduty/src/components/pagerDutyEntity.ts new file mode 100644 index 0000000000..950525881e --- /dev/null +++ b/plugins/pagerduty/src/components/pagerDutyEntity.ts @@ -0,0 +1,29 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Entity } from '@backstage/catalog-model'; +import { PagerDutyEntity } from '../types'; +import { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from './constants'; + +export function getPagerDutyEntity(entity: Entity): PagerDutyEntity { + const { + [PAGERDUTY_INTEGRATION_KEY]: integrationKey, + [PAGERDUTY_SERVICE_ID]: serviceId, + } = entity.metadata.annotations || ({} as Record); + const name = entity.metadata.name; + + return { integrationKey, serviceId, name }; +} diff --git a/plugins/pagerduty/src/components/types.ts b/plugins/pagerduty/src/components/types.ts index d0d05d82d1..89cdffea16 100644 --- a/plugins/pagerduty/src/components/types.ts +++ b/plugins/pagerduty/src/components/types.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -export type ChangeEvent = { +export type PagerDutyChangeEvent = { id: string; integration: [ { - service: Service; + service: PagerDutyService; }, ]; source: string; @@ -33,44 +33,44 @@ export type ChangeEvent = { timestamp: string; }; -export type Incident = { +export type PagerDutyIncident = { id: string; title: string; status: string; html_url: string; assignments: [ { - assignee: Assignee; + assignee: PagerDutyAssignee; }, ]; serviceId: string; created_at: string; }; -export type Service = { +export type PagerDutyService = { id: string; name: string; html_url: string; integrationKey: string; escalation_policy: { id: string; - user: User; + user: PagerDutyUser; html_url: string; }; }; -export type OnCall = { - user: User; +export type PagerDutyOnCall = { + user: PagerDutyUser; escalation_level: number; }; -export type Assignee = { +export type PagerDutyAssignee = { id: string; summary: string; html_url: string; }; -export type User = { +export type PagerDutyUser = { id: string; summary: string; email: string; diff --git a/plugins/pagerduty/src/hooks/index.ts b/plugins/pagerduty/src/hooks/index.ts index 40a34788f0..8950e443e2 100644 --- a/plugins/pagerduty/src/hooks/index.ts +++ b/plugins/pagerduty/src/hooks/index.ts @@ -15,14 +15,11 @@ */ import { useEntity } from '@backstage/plugin-catalog-react'; +import { PagerDutyEntity } from '../types'; +import { getPagerDutyEntity } from '../components/pagerDutyEntity'; -import { PAGERDUTY_INTEGRATION_KEY } from '../components/constants'; - -export function usePagerdutyEntity() { +export function usePagerdutyEntity(): PagerDutyEntity { const { entity } = useEntity(); - const integrationKey = - entity.metadata.annotations?.[PAGERDUTY_INTEGRATION_KEY]; - const name = entity.metadata.name; - return { integrationKey, name }; + return getPagerDutyEntity(entity); } diff --git a/plugins/pagerduty/src/index.ts b/plugins/pagerduty/src/index.ts index 8c970c01bb..2e0eddc9a8 100644 --- a/plugins/pagerduty/src/index.ts +++ b/plugins/pagerduty/src/index.ts @@ -25,14 +25,8 @@ export { pagerDutyPlugin as plugin, EntityPagerDutyCard, } from './plugin'; -export { - isPluginApplicableToEntity, - isPluginApplicableToEntity as isPagerDutyAvailable, - PagerDutyCard, -} from './components/PagerDutyCard'; -export { TriggerButton } from './components/TriggerButton'; -export { - PagerDutyClient, - pagerDutyApiRef, - UnauthorizedError, -} from './api/client'; + +export * from './components'; +export * from './api'; + +export type { PagerDutyEntity } from './types'; diff --git a/plugins/pagerduty/src/plugin.ts b/plugins/pagerduty/src/plugin.ts index 32093015ff..d49de29416 100644 --- a/plugins/pagerduty/src/plugin.ts +++ b/plugins/pagerduty/src/plugin.ts @@ -19,9 +19,9 @@ import { createPlugin, createRouteRef, discoveryApiRef, + fetchApiRef, configApiRef, createComponentExtension, - identityApiRef, } from '@backstage/core-plugin-api'; export const rootRouteRef = createRouteRef({ @@ -36,10 +36,10 @@ export const pagerDutyPlugin = createPlugin({ deps: { discoveryApi: discoveryApiRef, configApi: configApiRef, - identityApi: identityApiRef, + fetchApi: fetchApiRef, }, - factory: ({ configApi, discoveryApi, identityApi }) => - PagerDutyClient.fromConfig(configApi, discoveryApi, identityApi), + factory: ({ configApi, discoveryApi, fetchApi }) => + PagerDutyClient.fromConfig(configApi, { discoveryApi, fetchApi }), }), ], }); diff --git a/packages/cli/src/commands/backend/build.ts b/plugins/pagerduty/src/types.ts similarity index 66% rename from packages/cli/src/commands/backend/build.ts rename to plugins/pagerduty/src/types.ts index c85eecfed3..07f7f2bbe3 100644 --- a/packages/cli/src/commands/backend/build.ts +++ b/plugins/pagerduty/src/types.ts @@ -14,13 +14,8 @@ * limitations under the License. */ -import { OptionValues } from 'commander'; -import { buildPackage, Output } from '../../lib/builder'; - -export default async (opts: OptionValues) => { - await buildPackage({ - outputs: new Set([Output.cjs, Output.types]), - minify: opts.minify, - useApiExtractor: opts.experimentalTypeBuild, - }); +export type PagerDutyEntity = { + integrationKey?: string; + serviceId?: string; + name: string; }; diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 3a4de21e28..0a270b9f0a 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-periskop-backend +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.1.4 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index a555124743..cb08e57f4d 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.4", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,7 +24,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", "@types/express": "*", "cross-fetch": "^3.0.6", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "msw": "^0.42.0", "supertest": "^6.1.6" diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 9c5887509b..0a167ae1be 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-periskop +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.4 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index c7c6af850b..5918b0c45b 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.4", + "version": "0.1.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,12 +25,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -42,10 +42,10 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index f0e391d8d8..e2b2cedb19 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-permission-backend +## 0.5.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + +## 0.5.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + ## 0.5.8 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index fd3ce984cc..cfc0ff899a 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.8", + "version": "0.5.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,12 +22,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-auth-node": "^0.2.2", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-permission-node": "^0.6.2", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-auth-node": "^0.2.3-next.1", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-permission-node": "^0.6.3-next.1", "@types/express": "*", "dataloader": "^2.0.0", "express": "^4.17.1", @@ -39,7 +39,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/lodash": "^4.14.151", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index b578c1e8fb..769887f86e 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-permission-common +## 0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.0-next.0 + ## 0.6.2 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 82ab09c853..4cf00f71bf 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-common", "description": "Isomorphic types and client for Backstage permissions and authorization", - "version": "0.6.2", + "version": "0.6.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -42,13 +42,13 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "cross-fetch": "^3.1.5", "uuid": "^8.0.0", "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", "msw": "^0.42.0" } diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 889b3ba374..d412a981eb 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-permission-node +## 0.6.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + +## 0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + ## 0.6.2 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 1281b4ecba..f8f077cdc0 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.6.2", + "version": "0.6.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,18 +33,18 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-auth-node": "^0.2.2", - "@backstage/plugin-permission-common": "^0.6.2", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-auth-node": "^0.2.3-next.1", + "@backstage/plugin-permission-common": "^0.6.3-next.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "msw": "^0.42.0", "supertest": "^6.1.3" diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index cd991549bd..aa6f06a45c 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-permission-react +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 + ## 0.4.2 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index ffdb72d385..f0dcc88de0 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.2", + "version": "0.4.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,7 +33,7 @@ "dependencies": { "@backstage/config": "^1.0.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-permission-common": "^0.6.2", + "@backstage/plugin-permission-common": "^0.6.3-next.0", "cross-fetch": "^3.1.5", "react-router": "6.0.0-beta.0", "react-use": "^17.2.4", @@ -44,8 +44,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@types/jest": "^26.0.7" diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index b23cce864d..fe6aaf541d 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-proxy-backend +## 0.2.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.2.27 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index a0f7668e3e..7eba901c54 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.27", + "version": "0.2.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,7 +32,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -46,7 +46,7 @@ "yup": "^0.32.9" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/http-proxy-middleware": "^0.19.3", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 75e665c02d..1947f00622 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-rollbar-backend +## 0.1.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.1.30 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 53fba7bfe3..718e0ccff5 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.30", + "version": "0.1.31-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", "@types/express": "^4.17.6", "camelcase-keys": "^7.0.1", @@ -50,8 +50,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "msw": "^0.42.0", "supertest": "^6.1.3" diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index bb55d819a3..44baedce85 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-rollbar +## 0.4.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.4.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.4.6 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 5633c9b09a..9e6079c548 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.6", + "version": "0.4.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,11 +35,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 698a746a2a..2bf18ee3a8 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + - @backstage/integration@1.2.2-next.0 + ## 0.2.8 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 630f672231..0420599cec 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.8", + "version": "0.2.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-scaffolder-backend": "^1.3.0", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-scaffolder-backend": "^1.4.0-next.1", "@backstage/config": "^1.0.1", "@backstage/types": "^1.0.0", "command-exists": "^1.2.9", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/fs-extra": "^9.0.1", "@types/mock-fs": "^4.13.0", "@types/jest": "^26.0.7", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 6a1f59ef7e..1a1d249fd3 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + +## 0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + - @backstage/integration@1.2.2-next.0 + ## 0.4.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 1f755a8f81..e42f34b762 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.1", + "version": "0.4.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,17 +24,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/plugin-scaffolder-backend": "^1.3.0", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/plugin-scaffolder-backend": "^1.4.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", "@backstage/types": "^1.0.0", "command-exists": "^1.2.9", "fs-extra": "^10.0.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "@types/command-exists": "^1.2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index a6da817ba6..367adc7034 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.4.0-next.0 + ## 0.2.6 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index b876b5e87c..123d563fad 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.6", + "version": "0.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,13 +24,13 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/plugin-scaffolder-backend": "^1.3.0", + "@backstage/plugin-scaffolder-backend": "^1.4.0-next.0", "@backstage/types": "^1.0.0", "winston": "^3.2.1", "yeoman-environment": "^3.9.1" }, "devDependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.0", "@types/jest": "^26.0.7" }, "files": [ diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 598de4122f..b2ac690d5c 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-scaffolder-backend +## 1.4.0-next.1 + +### Patch Changes + +- 801d606909: Improve error messaging when passing in malformed auth +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.1 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + +## 1.4.0-next.0 + +### Minor Changes + +- 3500c13a33: Added a new `/v2/dry-run` endpoint that allows for a synchronous dry run of a provided template. A `supportsDryRun` option has been added to `createTemplateAction`, which signals whether the action should be executed during dry runs. When enabled, the action context will have the new `isDryRun` property set to signal if the action is being executed during a dry run. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-backend@1.2.1-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-scaffolder-common@1.1.2-next.0 + ## 1.3.0 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 9dfe00672e..5cb901d766 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.3.0", + "version": "1.4.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,14 +34,14 @@ "build:assets": "node scripts/build-nunjucks.js" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-backend": "^1.2.0", - "@backstage/plugin-scaffolder-common": "^1.1.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.1", + "@backstage/plugin-scaffolder-common": "^1.1.2-next.0", "@backstage/types": "^1.0.0", "@gitbeaker/core": "^35.6.0", "@gitbeaker/node": "^35.1.0", @@ -76,8 +76,8 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", "@types/git-url-parse": "^9.0.0", diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 4919d2e5f9..2abb730250 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -23,13 +23,14 @@ import { } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; import { Config, JsonObject } from '@backstage/config'; -import { InputError, NotFoundError } from '@backstage/errors'; +import { InputError, NotFoundError, stringifyError } from '@backstage/errors'; import { ScmIntegrations } from '@backstage/integration'; import { TemplateEntityV1beta3, TaskSpec, templateEntityV1beta3Validator, } from '@backstage/plugin-scaffolder-common'; +import { JsonValue } from '@backstage/types'; import express from 'express'; import Router from 'express-promise-router'; import { validate } from 'jsonschema'; @@ -431,17 +432,36 @@ function parseBearerToken(header?: string): { token?: string; entityRef?: string; } { - const token = header?.match(/Bearer\s+(\S+)/i)?.[1]; + if (!header) { + return {}; + } - if (!token) return {}; + try { + const token = header.match(/^Bearer\s(\S+\.\S+\.\S+)$/i)?.[1]; + if (!token) { + throw new TypeError('Expected Bearer with JWT'); + } - const [_header, rawPayload, _signature] = token.split('.'); - const payload: { sub: string } = JSON.parse( - Buffer.from(rawPayload, 'base64').toString(), - ); + const [_header, rawPayload, _signature] = token.split('.'); + const payload: JsonValue = JSON.parse( + Buffer.from(rawPayload, 'base64').toString(), + ); - return { - entityRef: payload.sub, - token, - }; + if ( + typeof payload !== 'object' || + payload === null || + Array.isArray(payload) + ) { + throw new TypeError('Malformed JWT payload'); + } + + const sub = payload.sub; + if (typeof sub !== 'string') { + throw new TypeError('Expected string sub claim'); + } + + return { entityRef: sub, token }; + } catch (e) { + throw new InputError(`Invalid authorization header: ${stringifyError(e)}`); + } } diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index 27a1abc7d2..1370f192f6 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-scaffolder-common +## 1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + ## 1.1.1 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index beeec6430d..09503d0be6 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.1.1", + "version": "1.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -39,10 +39,10 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/types": "^1.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" } } diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 617fe95457..7492ceb582 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,44 @@ # @backstage/plugin-scaffolder +## 1.4.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-permission-react@0.4.3-next.0 + +## 1.4.0-next.0 + +### Minor Changes + +- 3500c13a33: A new template editor has been added which is accessible via the context menu on the top right hand corner of the Create page. It allows you to load a template from a local directory, edit it with a preview, execute it in dry-run mode, and view the results. Note that the [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API) must be supported by your browser for this to be available. + + To support the new template editor the `ScaffolderApi` now has an optional `dryRun` method, which is implemented by the default `ScaffolderClient`. + +### Patch Changes + +- 37539e29d8: The template editor now shows the cause of request errors that happen during a dry-run. +- 842282ecf9: Bumped `codemirror` dependencies to `v6.0.0`. +- 464bb0e6c8: The max content size for dry-run files has been reduced from 256k to 64k. +- a7c0b34d70: Swap usage of `MaterialTable` with `Table` from `core-components` +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/plugin-scaffolder-common@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + ## 1.3.0 ### Minor Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index fd8161646c..09c02ec969 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.3.0", + "version": "1.4.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,23 +35,23 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-permission-react": "^0.4.2", - "@backstage/plugin-scaffolder-common": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-permission-react": "^0.4.3-next.0", + "@backstage/plugin-scaffolder-common": "^1.1.2-next.0", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", - "@codemirror/language": "^0.20.0", - "@codemirror/legacy-modes": "^0.20.0", - "@codemirror/view": "^0.20.2", + "@codemirror/language": "^6.0.0", + "@codemirror/legacy-modes": "^6.1.0", + "@codemirror/view": "^6.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -59,7 +59,7 @@ "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", "@types/json-schema": "^7.0.9", - "@uiw/react-codemirror": "^4.7.0", + "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", "git-url-parse": "^11.6.0", "humanize-duration": "^3.25.1", @@ -80,11 +80,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/plugin-catalog": "^1.3.0", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/scaffolder/src/components/TemplateEditorPage/DryRunContext.tsx b/plugins/scaffolder/src/components/TemplateEditorPage/DryRunContext.tsx index 0a5bfeefd5..b592e3cecd 100644 --- a/plugins/scaffolder/src/components/TemplateEditorPage/DryRunContext.tsx +++ b/plugins/scaffolder/src/components/TemplateEditorPage/DryRunContext.tsx @@ -29,8 +29,8 @@ import React, { import { scaffolderApiRef } from '../../api'; import { ScaffolderDryRunResponse } from '../../types'; -const MAX_CONTENT_SIZE = 256 * 1024; -const CHUNK_SIZE = 0x8000; +const MAX_CONTENT_SIZE = 64 * 1024; +const CHUNK_SIZE = 32 * 1024; interface DryRunOptions { templateContent: string; diff --git a/plugins/scaffolder/src/components/TemplateEditorPage/TemplateEditorForm.tsx b/plugins/scaffolder/src/components/TemplateEditorPage/TemplateEditorForm.tsx index 11b4da246d..d802ab07dc 100644 --- a/plugins/scaffolder/src/components/TemplateEditorPage/TemplateEditorForm.tsx +++ b/plugins/scaffolder/src/components/TemplateEditorPage/TemplateEditorForm.tsx @@ -212,11 +212,17 @@ export function TemplateEditorFormDirectoryEditorDryRun( return; } - await dryRun.execute({ - templateContent: selectedFile.content, - values: data, - files: directoryEditor.files, - }); + try { + await dryRun.execute({ + templateContent: selectedFile.content, + values: data, + files: directoryEditor.files, + }); + setErrorText(); + } catch (e) { + setErrorText(String(e.cause || e)); + throw e; + } }; const content = diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index a4247a2210..eadb4e5c8b 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,43 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 0.2.0-next.1 + +### Minor Changes + +- c5af773757: **BREAKING**: In order to remain interoperable with all currently supported + deployments of Elasticsearch, this package will now conditionally use either + the `@elastic/elasticsearch` or `@opensearch-project/opensearch` client when + communicating with your deployed cluster. + + If you do not rely on types exported from this package, or if you do not make + use of the `createElasticSearchClientOptions` or `newClient` methods on the + `ElasticSearchSearchEngine` class, then upgrading to this version should not + require any further action on your part. Everything will continue to work as it + always has. + + If you _do_ rely on either of the above methods or any underlying types, some + changes may be needed to your custom code. A type guard is now exported by this + package (`isOpenSearchCompatible(options)`), which you may use to help clarify + which client options are compatible with which client constructors. + + If you are using this package with the `search.elasticsearch.provider` set to + `aws`, and you are making use of the `newClient` method in particular, you may + wish to start using the `@opensearch-project/opensearch` client in your custom + code. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@0.6.3-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/api-report.md b/plugins/search-backend-module-elasticsearch/api-report.md index 04b7f96f93..eed2b1b10a 100644 --- a/plugins/search-backend-module-elasticsearch/api-report.md +++ b/plugins/search-backend-module-elasticsearch/api-report.md @@ -5,60 +5,27 @@ ```ts /// +import { ApiResponse } from '@opensearch-project/opensearch'; import { BatchSearchEngineIndexer } from '@backstage/plugin-search-backend-node'; -import { Client } from '@elastic/elasticsearch'; +import { BulkHelper } from '@opensearch-project/opensearch/lib/Helpers'; +import { BulkStats } from '@opensearch-project/opensearch/lib/Helpers'; import { Config } from '@backstage/config'; import type { ConnectionOptions } from 'tls'; import { IndexableDocument } from '@backstage/plugin-search-common'; import { IndexableResultSet } from '@backstage/plugin-search-common'; import { Logger } from 'winston'; +import { Readable } from 'stream'; import { SearchEngine } from '@backstage/plugin-search-common'; import { SearchQuery } from '@backstage/plugin-search-common'; - -// @public (undocumented) -export interface ElasticSearchAgentOptions { - // (undocumented) - keepAlive?: boolean; - // (undocumented) - keepAliveMsecs?: number; - // (undocumented) - maxFreeSockets?: number; - // (undocumented) - maxSockets?: number; -} - -// @public (undocumented) -export type ElasticSearchAuth = - | { - username: string; - password: string; - } - | { - apiKey: - | string - | { - id: string; - api_key: string; - }; - }; +import { TransportRequestPromise } from '@opensearch-project/opensearch/lib/Transport'; // @public -export interface ElasticSearchClientOptions { +export interface BaseElasticSearchClientOptions { // (undocumented) agent?: ElasticSearchAgentOptions | ((opts?: any) => unknown) | false; // (undocumented) - auth?: ElasticSearchAuth; - // (undocumented) - cloud?: { - id: string; - username?: string; - password?: string; - }; - // (undocumented) compression?: 'gzip'; // (undocumented) - Connection?: ElasticSearchConnectionConstructor; - // (undocumented) disablePrototypePoisoningProtection?: boolean | 'proto' | 'constructor'; // (undocumented) enableMetaHeader?: boolean; @@ -69,28 +36,14 @@ export interface ElasticSearchClientOptions { // (undocumented) name?: string | symbol; // (undocumented) - node?: - | string - | string[] - | ElasticSearchNodeOptions - | ElasticSearchNodeOptions[]; - // (undocumented) nodeFilter?: (connection: any) => boolean; // (undocumented) - nodes?: - | string - | string[] - | ElasticSearchNodeOptions - | ElasticSearchNodeOptions[]; - // (undocumented) nodeSelector?: ((connections: any[]) => any) | string; // (undocumented) opaqueIdPrefix?: string; // (undocumented) pingTimeout?: number; // (undocumented) - provider?: 'aws' | 'elastic'; - // (undocumented) proxy?: string | URL; // (undocumented) requestTimeout?: number; @@ -112,6 +65,118 @@ export interface ElasticSearchClientOptions { Transport?: ElasticSearchTransportConstructor; } +// @public (undocumented) +export interface ElasticSearchAgentOptions { + // (undocumented) + keepAlive?: boolean; + // (undocumented) + keepAliveMsecs?: number; + // (undocumented) + maxFreeSockets?: number; + // (undocumented) + maxSockets?: number; +} + +// @public (undocumented) +export type ElasticSearchAliasAction = + | { + remove: { + index: any; + alias: any; + }; + add?: undefined; + } + | { + add: { + indices: any; + alias: any; + index?: undefined; + }; + remove?: undefined; + } + | { + add: { + index: any; + alias: any; + indices?: undefined; + }; + remove?: undefined; + } + | undefined; + +// @public (undocumented) +export type ElasticSearchAuth = + | OpenSearchAuth + | { + apiKey: + | string + | { + id: string; + api_key: string; + }; + }; + +// @public +export type ElasticSearchClientOptions = + | ElasticSearchElasticSearchClientOptions + | OpenSearchElasticSearchClientOptions; + +// @public +export class ElasticSearchClientWrapper { + // (undocumented) + bulk(bulkOptions: { + datasource: Readable; + onDocument: () => ElasticSearchIndexAction; + refreshOnCompletion?: string | boolean; + }): BulkHelper; + // (undocumented) + createIndex({ + index, + }: { + index: string; + }): TransportRequestPromise, unknown>>; + // (undocumented) + deleteIndex({ + index, + }: { + index: string | string[]; + }): TransportRequestPromise, unknown>>; + // (undocumented) + static fromClientOptions( + options: ElasticSearchClientOptions, + ): ElasticSearchClientWrapper; + // (undocumented) + getAliases({ + aliases, + }: { + aliases: string[]; + }): TransportRequestPromise, unknown>>; + // (undocumented) + indexExists({ + index, + }: { + index: string | string[]; + }): TransportRequestPromise>; + // (undocumented) + putIndexTemplate( + template: ElasticSearchCustomIndexTemplate, + ): TransportRequestPromise, unknown>>; + // (undocumented) + search({ + index, + body, + }: { + index: string | string[]; + body: Object; + }): TransportRequestPromise, unknown>>; + // (undocumented) + updateAliases({ + actions, + }: { + actions: ElasticSearchAliasAction[]; + }): TransportRequestPromise, unknown>>; +} + // @public export type ElasticSearchConcreteQuery = { documentTypes?: string[]; @@ -150,6 +215,35 @@ export type ElasticSearchCustomIndexTemplateBody = { template?: Record; }; +// @public +export interface ElasticSearchElasticSearchClientOptions + extends BaseElasticSearchClientOptions { + // (undocumented) + auth?: ElasticSearchAuth; + // (undocumented) + cloud?: { + id: string; + username?: string; + password?: string; + }; + // (undocumented) + Connection?: ElasticSearchConnectionConstructor; + // (undocumented) + node?: + | string + | string[] + | ElasticSearchNodeOptions + | ElasticSearchNodeOptions[]; + // (undocumented) + nodes?: + | string + | string[] + | ElasticSearchNodeOptions + | ElasticSearchNodeOptions[]; + // (undocumented) + provider?: 'elastic'; +} + // @public (undocumented) export type ElasticSearchHighlightConfig = { fragmentDelimiter: string; @@ -166,6 +260,14 @@ export type ElasticSearchHighlightOptions = { numFragments?: number; }; +// @public (undocumented) +export type ElasticSearchIndexAction = { + index: { + _index: string; + [key: string]: any; + }; +}; + // @public (undocumented) export interface ElasticSearchNodeOptions { // (undocumented) @@ -258,7 +360,7 @@ export type ElasticSearchSearchEngineIndexerOptions = { indexSeparator: string; alias: string; logger: Logger; - elasticSearchClient: Client; + elasticSearchClientWrapper: ElasticSearchClientWrapper; }; // @public (undocumented) @@ -273,4 +375,67 @@ export interface ElasticSearchTransportConstructor { DEFAULT: string; }; } + +// @public +export const isOpenSearchCompatible: ( + opts: ElasticSearchClientOptions, +) => opts is OpenSearchElasticSearchClientOptions; + +// @public (undocumented) +export type OpenSearchAuth = { + username: string; + password: string; +}; + +// @public (undocumented) +export interface OpenSearchConnectionConstructor { + // (undocumented) + new (opts?: any): any; + // (undocumented) + roles: { + MASTER: string; + DATA: string; + INGEST: string; + }; + // (undocumented) + statuses: { + ALIVE: string; + DEAD: string; + }; +} + +// @public +export interface OpenSearchElasticSearchClientOptions + extends BaseElasticSearchClientOptions { + // (undocumented) + auth?: OpenSearchAuth; + // (undocumented) + connection?: OpenSearchConnectionConstructor; + // (undocumented) + node?: string | string[] | OpenSearchNodeOptions | OpenSearchNodeOptions[]; + // (undocumented) + nodes?: string | string[] | OpenSearchNodeOptions | OpenSearchNodeOptions[]; + // (undocumented) + provider?: 'aws'; +} + +// @public (undocumented) +export interface OpenSearchNodeOptions { + // (undocumented) + agent?: ElasticSearchAgentOptions; + // (undocumented) + headers?: Record; + // (undocumented) + id?: string; + // (undocumented) + roles?: { + master: boolean; + data: boolean; + ingest: boolean; + }; + // (undocumented) + ssl?: ConnectionOptions; + // (undocumented) + url: URL; +} ``` diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 719e923c5b..b12a87c37d 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "0.1.5", + "version": "0.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,11 +23,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@acuris/aws-es-connection": "^2.2.0", "@backstage/config": "^1.0.1", - "@backstage/plugin-search-backend-node": "^0.6.2", - "@backstage/plugin-search-common": "^0.3.5", - "@elastic/elasticsearch": "7.13.0", + "@backstage/plugin-search-backend-node": "^0.6.3-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@elastic/elasticsearch": "^7.13.0", + "@opensearch-project/opensearch": "^1.1.0", + "aws-os-connection": "^0.1.0", "aws-sdk": "^2.948.0", "elastic-builder": "^2.16.0", "lodash": "^4.17.21", @@ -35,9 +36,10 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/cli": "^0.17.2", - "@elastic/elasticsearch-mock": "^1.0.0" + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/cli": "^0.18.0-next.1", + "@elastic/elasticsearch-mock": "^1.0.0", + "@short.io/opensearch-mock": "^0.3.1" }, "files": [ "dist", diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientOptions.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientOptions.ts index c5d1f11b0c..74523020db 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientOptions.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientOptions.ts @@ -16,17 +16,60 @@ import type { ConnectionOptions as TLSConnectionOptions } from 'tls'; /** - * Options used to configure the `@elastic/elasticsearch` client and - * are what will be passed as an argument to the - * {@link ElasticSearchSearchEngine.newClient} method - * - * They are drawn from the `ClientOptions` class of `@elastic/elasticsearch`, - * but are maintained separately so that this interface is not coupled to + * Typeguard to differentiate ElasticSearch client options which are compatible + * with OpenSearch vs. ElasticSearch clients. Useful when calling the + * {@link ElasticSearchSearchEngine.newClient} method. * * @public */ -export interface ElasticSearchClientOptions { - provider?: 'aws' | 'elastic'; +export const isOpenSearchCompatible = ( + opts: ElasticSearchClientOptions, +): opts is OpenSearchElasticSearchClientOptions => { + return opts?.provider === 'aws'; +}; + +/** + * Options used to configure the `@elastic/elasticsearch` client or the + * `@opensearch-project/opensearch` client, depending on the given config. It + * will be passed as an argument to the + * {@link ElasticSearchSearchEngine.newClient} method. + * + * @public + */ +export type ElasticSearchClientOptions = + | ElasticSearchElasticSearchClientOptions + | OpenSearchElasticSearchClientOptions; + +/** + * Options used to configure the `@opensearch-project/opensearch` client. + * + * They are drawn from the `ClientOptions` class of `@opensearch-project/opensearch`, + * but are maintained separately so that this interface is not coupled to it. + * + * @public + */ +export interface OpenSearchElasticSearchClientOptions + extends BaseElasticSearchClientOptions { + provider?: 'aws'; + auth?: OpenSearchAuth; + connection?: OpenSearchConnectionConstructor; + node?: string | string[] | OpenSearchNodeOptions | OpenSearchNodeOptions[]; + nodes?: string | string[] | OpenSearchNodeOptions | OpenSearchNodeOptions[]; +} + +/** + * Options used to configure the `@elastic/elasticsearch` client. + * + * They are drawn from the `ClientOptions` class of `@elastic/elasticsearch`, + * but are maintained separately so that this interface is not coupled to it. + * + * @public + */ +export interface ElasticSearchElasticSearchClientOptions + extends BaseElasticSearchClientOptions { + provider?: 'elastic'; + auth?: ElasticSearchAuth; + Connection?: ElasticSearchConnectionConstructor; node?: | string | string[] @@ -37,8 +80,21 @@ export interface ElasticSearchClientOptions { | string[] | ElasticSearchNodeOptions | ElasticSearchNodeOptions[]; + cloud?: { + id: string; + username?: string; + password?: string; + }; +} + +/** + * Base client options that are shared across `@opensearch-project/opensearch` + * and `@elastic/elasticsearch` clients. + * + * @public + */ +export interface BaseElasticSearchClientOptions { Transport?: ElasticSearchTransportConstructor; - Connection?: ElasticSearchConnectionConstructor; maxRetries?: number; requestTimeout?: number; pingTimeout?: number; @@ -56,25 +112,24 @@ export interface ElasticSearchClientOptions { headers?: Record; opaqueIdPrefix?: string; name?: string | symbol; - auth?: ElasticSearchAuth; proxy?: string | URL; enableMetaHeader?: boolean; - cloud?: { - id: string; - username?: string; - password?: string; - }; disablePrototypePoisoningProtection?: boolean | 'proto' | 'constructor'; } +/** + * @public + */ +export type OpenSearchAuth = { + username: string; + password: string; +}; + /** * @public */ export type ElasticSearchAuth = - | { - username: string; - password: string; - } + | OpenSearchAuth | { apiKey: | string @@ -101,6 +156,22 @@ export interface ElasticSearchNodeOptions { }; } +/** + * @public + */ +export interface OpenSearchNodeOptions { + url: URL; + id?: string; + agent?: ElasticSearchAgentOptions; + ssl?: TLSConnectionOptions; + headers?: Record; + roles?: { + master: boolean; + data: boolean; + ingest: boolean; + }; +} + /** * @public */ @@ -127,6 +198,23 @@ export interface ElasticSearchConnectionConstructor { ML: string; }; } + +/** + * @public + */ +export interface OpenSearchConnectionConstructor { + new (opts?: any): any; + statuses: { + ALIVE: string; + DEAD: string; + }; + roles: { + MASTER: string; + DATA: string; + INGEST: string; + }; +} + /** * @public */ @@ -139,3 +227,5 @@ export interface ElasticSearchTransportConstructor { DEFAULT: string; }; } + +// todo(iamEAP) implement canary types to ensure we remain compatible through upgrades. diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.test.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.test.ts new file mode 100644 index 0000000000..5bd8bb30b0 --- /dev/null +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.test.ts @@ -0,0 +1,337 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { Client as ElasticSearchClient } from '@elastic/elasticsearch'; +import { Client as OpenSearchClient } from '@opensearch-project/opensearch'; +import Mock from '@short.io/opensearch-mock'; +import { Readable } from 'stream'; + +import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; +import { + createElasticSearchClientOptions, + ElasticSearchClientOptions, +} from './ElasticSearchSearchEngine'; + +jest.mock('@elastic/elasticsearch', () => ({ + ...jest.requireActual('@elastic/elasticsearch'), + Client: jest.fn().mockReturnValue({ + search: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + cat: { + aliases: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + }, + helpers: { + bulk: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + }, + indices: { + create: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + delete: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + exists: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + putIndexTemplate: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + updateAliases: jest + .fn() + .mockImplementation(async args => ({ client: 'es', args })), + }, + }), +})); + +jest.mock('@opensearch-project/opensearch', () => ({ + ...jest.requireActual('@opensearch-project/opensearch'), + Client: jest.fn().mockReturnValue({ + search: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + cat: { + aliases: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + }, + helpers: { + bulk: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + }, + indices: { + create: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + delete: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + exists: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + putIndexTemplate: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + updateAliases: jest + .fn() + .mockImplementation(async args => ({ client: 'os', args })), + }, + }), +})); + +describe('ElasticSearchClientWrapper', () => { + describe('elasticSearchClient', () => { + let esOptions: ElasticSearchClientOptions; + + beforeEach(async () => { + esOptions = await createElasticSearchClientOptions( + new ConfigReader({ + node: 'http://localhost:9200', + }), + ); + jest.clearAllMocks(); + }); + + it('instantiation', () => { + ElasticSearchClientWrapper.fromClientOptions(esOptions); + expect(ElasticSearchClient).toHaveBeenCalledWith(esOptions); + }); + + it('search', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const searchInput = { index: 'xyz', body: { eg: 'etc' } }; + const result = (await wrapper.search(searchInput)) as any; + + // Should call the ElasticSearch client's search with expected input. + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual(searchInput); + }); + + it('bulk', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const bulkInput = { + datasource: Readable.from([{}]), + onDocument() { + return { index: { _index: 'xyz' } }; + }, + refreshCompletion: 'xyz', + }; + const result = (await wrapper.bulk(bulkInput)) as any; + + // Should call the ElasticSearch client's bulk helper with expected input + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual(bulkInput); + }); + + it('putIndexTemplate', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const indexTemplate = { name: 'xyz', body: { index_patterns: ['*'] } }; + const result = (await wrapper.putIndexTemplate(indexTemplate)) as any; + + // Should call the ElasticSearch client with expected input. + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual(indexTemplate); + }); + + it('indexExists', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const input = { index: 'xyz' }; + const result = (await wrapper.indexExists(input)) as any; + + // Should call the ElasticSearch client with expected input. + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual(input); + }); + + it('deleteIndex', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const input = { index: 'xyz' }; + const result = (await wrapper.deleteIndex(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual(input); + }); + + it('createIndex', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const input = { index: 'xyz' }; + const result = (await wrapper.createIndex(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual(input); + }); + + it('getAliases', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const input = { aliases: ['xyz'] }; + const result = (await wrapper.getAliases(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual({ + format: 'json', + name: input.aliases, + }); + }); + + it('updateAliases', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(esOptions); + + const input = { actions: [{ remove: { index: 'xyz', alias: 'abc' } }] }; + const result = (await wrapper.updateAliases(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('es'); + expect(result.args).toStrictEqual({ + body: { actions: input.actions }, + }); + }); + }); + + describe('openSearchClient', () => { + const mock = new Mock(); + let osOptions: ElasticSearchClientOptions; + + beforeEach(() => { + osOptions = { + provider: 'aws', + node: 'https://my-es-cluster.eu-west-1.es.amazonaws.com', + connection: mock.getConnection(), + }; + + jest.clearAllMocks(); + }); + + it('instantiation', () => { + ElasticSearchClientWrapper.fromClientOptions(osOptions); + expect(OpenSearchClient).toHaveBeenCalledWith(osOptions); + }); + + it('search', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const searchInput = { index: 'xyz', body: { eg: 'etc' } }; + const result = (await wrapper.search(searchInput)) as any; + + // Should call the OpenSearch client's search with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual(searchInput); + }); + + it('bulk', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const bulkInput = { + datasource: Readable.from([{}]), + onDocument() { + return { index: { _index: 'xyz' } }; + }, + refreshCompletion: 'xyz', + }; + const result = (await wrapper.bulk(bulkInput)) as any; + + // Should call the OpenSearch client's bulk helper with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual(bulkInput); + }); + + it('putIndexTemplate', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const indexTemplate = { name: 'xyz', body: { index_patterns: ['*'] } }; + const result = (await wrapper.putIndexTemplate(indexTemplate)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual(indexTemplate); + }); + + it('indexExists', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const input = { index: 'xyz' }; + const result = (await wrapper.indexExists(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual(input); + }); + + it('deleteIndex', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const input = { index: 'xyz' }; + const result = (await wrapper.deleteIndex(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual(input); + }); + + it('createIndex', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const input = { index: 'xyz' }; + const result = (await wrapper.createIndex(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual(input); + }); + + it('getAliases', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const input = { aliases: ['xyz'] }; + const result = (await wrapper.getAliases(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual({ + format: 'json', + name: input.aliases, + }); + }); + + it('updateAliases', async () => { + const wrapper = ElasticSearchClientWrapper.fromClientOptions(osOptions); + + const input = { actions: [{ remove: { index: 'xyz', alias: 'abc' } }] }; + const result = (await wrapper.updateAliases(input)) as any; + + // Should call the OpenSearch client with expected input. + expect(result.client).toBe('os'); + expect(result.args).toStrictEqual({ + body: { actions: input.actions }, + }); + }); + }); +}); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.ts new file mode 100644 index 0000000000..bcf67e091c --- /dev/null +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.ts @@ -0,0 +1,209 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Client as ElasticSearchClient } from '@elastic/elasticsearch'; +import { Client as OpenSearchClient } from '@opensearch-project/opensearch'; +import { Readable } from 'stream'; +import { + ElasticSearchClientOptions, + isOpenSearchCompatible, +} from './ElasticSearchClientOptions'; +import { ElasticSearchCustomIndexTemplate } from './types'; + +/** + * @public + */ +export type ElasticSearchAliasAction = + | { + remove: { index: any; alias: any }; + add?: undefined; + } + | { + add: { indices: any; alias: any; index?: undefined }; + remove?: undefined; + } + | { + add: { index: any; alias: any; indices?: undefined }; + remove?: undefined; + } + | undefined; + +/** + * @public + */ +export type ElasticSearchIndexAction = { + index: { + _index: string; + [key: string]: any; + }; +}; + +/** + * A wrapper class that exposes logical methods that are conditionally fired + * against either a configured Elasticsearch client or a configured Opensearch + * client. + * + * This is necessary because, despite its intention to be API-compatible, the + * opensearch client does not support API key-based authentication. This is + * also the sanest way to accomplish this while making typescript happy. + * + * In the future, if the differences between implementations become + * unmaintainably divergent, we should split out the Opensearch and + * Elasticsearch search engine implementations. + * + * @public + */ +export class ElasticSearchClientWrapper { + private readonly elasticSearchClient: ElasticSearchClient | undefined; + private readonly openSearchClient: OpenSearchClient | undefined; + + private constructor({ + openSearchClient, + elasticSearchClient, + }: { + openSearchClient?: OpenSearchClient; + elasticSearchClient?: ElasticSearchClient; + }) { + this.openSearchClient = openSearchClient; + this.elasticSearchClient = elasticSearchClient; + } + + static fromClientOptions(options: ElasticSearchClientOptions) { + if (isOpenSearchCompatible(options)) { + return new ElasticSearchClientWrapper({ + openSearchClient: new OpenSearchClient(options), + }); + } + + return new ElasticSearchClientWrapper({ + elasticSearchClient: new ElasticSearchClient(options), + }); + } + + search({ index, body }: { index: string | string[]; body: Object }) { + if (this.openSearchClient) { + return this.openSearchClient.search({ index, body }); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.search({ index, body }); + } + + throw new Error('No client defined'); + } + + bulk(bulkOptions: { + datasource: Readable; + onDocument: () => ElasticSearchIndexAction; + refreshOnCompletion?: string | boolean; + }) { + if (this.openSearchClient) { + return this.openSearchClient.helpers.bulk(bulkOptions); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.helpers.bulk(bulkOptions); + } + + throw new Error('No client defined'); + } + + putIndexTemplate(template: ElasticSearchCustomIndexTemplate) { + if (this.openSearchClient) { + return this.openSearchClient.indices.putIndexTemplate(template); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.indices.putIndexTemplate(template); + } + + throw new Error('No client defined'); + } + + indexExists({ index }: { index: string | string[] }) { + if (this.openSearchClient) { + return this.openSearchClient.indices.exists({ index }); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.indices.exists({ index }); + } + + throw new Error('No client defined'); + } + + deleteIndex({ index }: { index: string | string[] }) { + if (this.openSearchClient) { + return this.openSearchClient.indices.delete({ index }); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.indices.delete({ index }); + } + + throw new Error('No client defined'); + } + + createIndex({ index }: { index: string }) { + if (this.openSearchClient) { + return this.openSearchClient.indices.create({ index }); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.indices.create({ index }); + } + + throw new Error('No client defined'); + } + + getAliases({ aliases }: { aliases: string[] }) { + if (this.openSearchClient) { + return this.openSearchClient.cat.aliases({ + format: 'json', + name: aliases, + }); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.cat.aliases({ + format: 'json', + name: aliases, + }); + } + + throw new Error('No client defined'); + } + + updateAliases({ actions }: { actions: ElasticSearchAliasAction[] }) { + const filteredActions = actions.filter(Boolean); + if (this.openSearchClient) { + return this.openSearchClient.indices.updateAliases({ + body: { + actions: filteredActions, + }, + }); + } + + if (this.elasticSearchClient) { + return this.elasticSearchClient.indices.updateAliases({ + body: { + actions: filteredActions, + }, + }); + } + + throw new Error('No client defined'); + } +} diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts index 7892b731ed..cc88f456b6 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts @@ -16,8 +16,9 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; -import { Client, errors } from '@elastic/elasticsearch'; +import { errors } from '@elastic/elasticsearch'; import Mock from '@elastic/elasticsearch-mock'; +import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; import { ElasticSearchConcreteQuery, decodePageCursor, @@ -70,7 +71,7 @@ const customIndexTemplate = { describe('ElasticSearchSearchEngine', () => { let testSearchEngine: ElasticSearchSearchEngine; let inspectableSearchEngine: ElasticSearchSearchEngineForTranslatorTests; - let client: Client; + let clientWrapper: ElasticSearchClientWrapper; beforeEach(() => { testSearchEngine = new ElasticSearchSearchEngine( @@ -86,7 +87,7 @@ describe('ElasticSearchSearchEngine', () => { getVoidLogger(), ); // eslint-disable-next-line dot-notation - client = testSearchEngine['elasticSearchClient']; + clientWrapper = testSearchEngine['elasticSearchClientWrapper']; }); describe('custom index template', () => { @@ -686,7 +687,7 @@ describe('ElasticSearchSearchEngine', () => { }); it('should handle index/search type filtering correctly', async () => { - const elasticSearchQuerySpy = jest.spyOn(client, 'search'); + const elasticSearchQuerySpy = jest.spyOn(clientWrapper, 'search'); await testSearchEngine.query({ term: 'testTerm', filters: {}, @@ -725,7 +726,7 @@ describe('ElasticSearchSearchEngine', () => { }); it('should create matchAll query if no term defined', async () => { - const elasticSearchQuerySpy = jest.spyOn(client, 'search'); + const elasticSearchQuerySpy = jest.spyOn(clientWrapper, 'search'); await testSearchEngine.query({ term: '', filters: {}, @@ -759,7 +760,7 @@ describe('ElasticSearchSearchEngine', () => { }); it('should query only specified indices if defined', async () => { - const elasticSearchQuerySpy = jest.spyOn(client, 'search'); + const elasticSearchQuerySpy = jest.spyOn(clientWrapper, 'search'); await testSearchEngine.query({ term: '', filters: {}, @@ -809,7 +810,7 @@ describe('ElasticSearchSearchEngine', () => { type: 'test-index', indexPrefix: '', indexSeparator: '-index__', - elasticSearchClient: client, + elasticSearchClientWrapper: clientWrapper, }), ); expect(indexerMock.on).toHaveBeenCalledWith( diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index 1eb32c882d..eacee57e3f 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -14,10 +14,7 @@ * limitations under the License. */ -import { - awsGetCredentials, - createAWSConnection, -} from '@acuris/aws-es-connection'; +import { awsGetCredentials, createAWSConnection } from 'aws-os-connection'; import { Config } from '@backstage/config'; import { IndexableDocument, @@ -27,47 +24,17 @@ import { SearchQuery, } from '@backstage/plugin-search-common'; import { MissingIndexError } from '@backstage/plugin-search-backend-node'; -import { Client } from '@elastic/elasticsearch'; import esb from 'elastic-builder'; import { isEmpty, isNaN as nan, isNumber } from 'lodash'; import { v4 as uuid } from 'uuid'; import { Logger } from 'winston'; -import type { ElasticSearchClientOptions } from './ElasticSearchClientOptions'; +import { ElasticSearchClientOptions } from './ElasticSearchClientOptions'; import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer'; +import { ElasticSearchCustomIndexTemplate } from './types'; +import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; export type { ElasticSearchClientOptions }; -/** - * Elasticsearch specific index template - * @public - */ -export type ElasticSearchCustomIndexTemplate = { - name: string; - body: ElasticSearchCustomIndexTemplateBody; -}; - -/** - * Elasticsearch specific index template body - * @public - */ -export type ElasticSearchCustomIndexTemplateBody = { - /** - * Array of wildcard (*) expressions used to match the names of data streams and indices during creation. - */ - index_patterns: string[]; - /** - * An ordered list of component template names. - * Component templates are merged in the order specified, - * meaning that the last component template specified has the highest precedence. - */ - composed_of?: string[]; - /** - * See available properties of template - * https://www.elastic.co/guide/en/elasticsearch/reference/7.15/indices-put-template.html#put-index-template-api-request-body - */ - template?: Record; -}; - /** * Search query that the elasticsearch engine understands. * @public @@ -144,7 +111,7 @@ function isBlank(str: string) { * @public */ export class ElasticSearchSearchEngine implements SearchEngine { - private readonly elasticSearchClient: Client; + private readonly elasticSearchClientWrapper: ElasticSearchClientWrapper; private readonly highlightOptions: ElasticSearchHighlightConfig; constructor( @@ -154,7 +121,8 @@ export class ElasticSearchSearchEngine implements SearchEngine { private readonly logger: Logger, highlightOptions?: ElasticSearchHighlightOptions, ) { - this.elasticSearchClient = this.newClient(options => new Client(options)); + this.elasticSearchClientWrapper = + ElasticSearchClientWrapper.fromClientOptions(elasticSearchClientOptions); const uuidTag = uuid(); this.highlightOptions = { preTag: `<${uuidTag}>`, @@ -178,7 +146,7 @@ export class ElasticSearchSearchEngine implements SearchEngine { if (options.provider === 'elastic') { logger.info('Initializing Elastic.co ElasticSearch search engine.'); } else if (options.provider === 'aws') { - logger.info('Initializing AWS ElasticSearch search engine.'); + logger.info('Initializing AWS OpenSearch search engine.'); } else { logger.info('Initializing ElasticSearch search engine.'); } @@ -270,7 +238,7 @@ export class ElasticSearchSearchEngine implements SearchEngine { async setIndexTemplate(template: ElasticSearchCustomIndexTemplate) { try { - await this.elasticSearchClient.indices.putIndexTemplate(template); + await this.elasticSearchClientWrapper.putIndexTemplate(template); this.logger.info('Custom index template set'); } catch (error) { this.logger.error(`Unable to set custom index template: ${error}`); @@ -285,7 +253,7 @@ export class ElasticSearchSearchEngine implements SearchEngine { indexPrefix: this.indexPrefix, indexSeparator: this.indexSeparator, alias, - elasticSearchClient: this.elasticSearchClient, + elasticSearchClientWrapper: this.elasticSearchClientWrapper, logger: this.logger, }); @@ -293,13 +261,13 @@ export class ElasticSearchSearchEngine implements SearchEngine { indexer.on('error', async e => { this.logger.error(`Failed to index documents for type ${type}`, e); try { - const response = await this.elasticSearchClient.indices.exists({ + const response = await this.elasticSearchClientWrapper.indexExists({ index: indexer.indexName, }); const indexCreated = response.body; if (indexCreated) { this.logger.info(`Removing created index ${indexer.indexName}`); - await this.elasticSearchClient.indices.delete({ + await this.elasticSearchClientWrapper.deleteIndex({ index: indexer.indexName, }); } @@ -320,7 +288,7 @@ export class ElasticSearchSearchEngine implements SearchEngine { ? documentTypes.map(it => this.constructSearchAlias(it)) : this.constructSearchAlias('*'); try { - const result = await this.elasticSearchClient.search({ + const result = await this.elasticSearchClientWrapper.search({ index: queryIndices, body: elasticSearchQuery, }); @@ -405,7 +373,7 @@ export function encodePageCursor({ page }: { page: number }): string { return Buffer.from(`${page}`, 'utf-8').toString('base64'); } -async function createElasticSearchClientOptions( +export async function createElasticSearchClientOptions( config?: Config, ): Promise { if (!config) { diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts index 4e0e8e229f..eff056c3f4 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts @@ -16,13 +16,13 @@ import { getVoidLogger } from '@backstage/backend-common'; import { TestPipeline } from '@backstage/plugin-search-backend-node'; -import { Client } from '@elastic/elasticsearch'; import Mock from '@elastic/elasticsearch-mock'; import { range } from 'lodash'; +import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer'; const mock = new Mock(); -const client = new Client({ +const clientWrapper = ElasticSearchClientWrapper.fromClientOptions({ node: 'http://localhost:9200', Connection: mock.getConnection(), }); @@ -43,7 +43,7 @@ describe('ElasticSearchSearchEngineIndexer', () => { indexSeparator: '-index__', alias: 'some-type-index__search', logger: getVoidLogger(), - elasticSearchClient: client, + elasticSearchClientWrapper: clientWrapper, }); // Set up all requisite Elastic mocks. diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts index fd16d0c963..87a4472a15 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts @@ -16,9 +16,9 @@ import { BatchSearchEngineIndexer } from '@backstage/plugin-search-backend-node'; import { IndexableDocument } from '@backstage/plugin-search-common'; -import { Client } from '@elastic/elasticsearch'; import { Readable } from 'stream'; import { Logger } from 'winston'; +import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; /** * Options for instansiate ElasticSearchSearchEngineIndexer @@ -30,7 +30,7 @@ export type ElasticSearchSearchEngineIndexerOptions = { indexSeparator: string; alias: string; logger: Logger; - elasticSearchClient: Client; + elasticSearchClientWrapper: ElasticSearchClientWrapper; }; function duration(startTimestamp: [number, number]): string { @@ -57,7 +57,7 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { private readonly removableAlias: string; private readonly logger: Logger; private readonly sourceStream: Readable; - private readonly elasticSearchClient: Client; + private readonly elasticSearchClientWrapper: ElasticSearchClientWrapper; private bulkResult: Promise; constructor(options: ElasticSearchSearchEngineIndexerOptions) { @@ -70,7 +70,7 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { this.indexName = this.constructIndexName(`${Date.now()}`); this.alias = options.alias; this.removableAlias = `${this.alias}_removable`; - this.elasticSearchClient = options.elasticSearchClient; + this.elasticSearchClientWrapper = options.elasticSearchClientWrapper; // The ES client bulk helper supports stream-based indexing, but we have to // supply the stream directly to it at instantiation-time. We can't supply @@ -83,7 +83,7 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { // Keep a reference to the ES Bulk helper so that we can know when all // documents have been successfully written to ES. - this.bulkResult = this.elasticSearchClient.helpers.bulk({ + this.bulkResult = this.elasticSearchClientWrapper.bulk({ datasource: this.sourceStream, onDocument() { that.processed++; @@ -98,16 +98,15 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { async initialize(): Promise { this.logger.info(`Started indexing documents for index ${this.type}`); - const aliases = await this.elasticSearchClient.cat.aliases({ - format: 'json', - name: [this.alias, this.removableAlias], + const aliases = await this.elasticSearchClientWrapper.getAliases({ + aliases: [this.alias, this.removableAlias], }); this.removableIndices = [ ...new Set(aliases.body.map((r: Record) => r.index)), ] as string[]; - await this.elasticSearchClient.indices.create({ + await this.elasticSearchClientWrapper.createIndex({ index: this.indexName, }); } @@ -140,25 +139,23 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { )}`, result, ); - await this.elasticSearchClient.indices.updateAliases({ - body: { - actions: [ - { - remove: { index: this.constructIndexName('*'), alias: this.alias }, - }, - this.removableIndices.length - ? { - add: { - indices: this.removableIndices, - alias: this.removableAlias, - }, - } - : undefined, - { - add: { index: this.indexName, alias: this.alias }, - }, - ].filter(Boolean), - }, + await this.elasticSearchClientWrapper.updateAliases({ + actions: [ + { + remove: { index: this.constructIndexName('*'), alias: this.alias }, + }, + this.removableIndices.length + ? { + add: { + indices: this.removableIndices, + alias: this.removableAlias, + }, + } + : undefined, + { + add: { index: this.indexName, alias: this.alias }, + }, + ].filter(Boolean), }); // If any indices are removable, remove them. Do not bubble up this error, @@ -166,7 +163,7 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { if (this.removableIndices.length) { this.logger.info('Removing stale search indices', this.removableIndices); try { - await this.elasticSearchClient.indices.delete({ + await this.elasticSearchClientWrapper.deleteIndex({ index: this.removableIndices, }); } catch (e) { diff --git a/plugins/search-backend-module-elasticsearch/src/engines/index.ts b/plugins/search-backend-module-elasticsearch/src/engines/index.ts index 8ac86970a1..8c3b9e3c6d 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/index.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/index.ts @@ -15,13 +15,25 @@ */ export { ElasticSearchSearchEngine } from './ElasticSearchSearchEngine'; +export { isOpenSearchCompatible } from './ElasticSearchClientOptions'; export type { + BaseElasticSearchClientOptions, ElasticSearchAgentOptions, ElasticSearchConnectionConstructor, + ElasticSearchElasticSearchClientOptions, ElasticSearchTransportConstructor, ElasticSearchNodeOptions, ElasticSearchAuth, + OpenSearchAuth, + OpenSearchConnectionConstructor, + OpenSearchElasticSearchClientOptions, + OpenSearchNodeOptions, } from './ElasticSearchClientOptions'; +export type { + ElasticSearchAliasAction, + ElasticSearchClientWrapper, + ElasticSearchIndexAction, +} from './ElasticSearchClientWrapper'; export type { ElasticSearchConcreteQuery, ElasticSearchClientOptions, @@ -30,10 +42,12 @@ export type { ElasticSearchQueryTranslator, ElasticSearchQueryTranslatorOptions, ElasticSearchOptions, - ElasticSearchCustomIndexTemplate, - ElasticSearchCustomIndexTemplateBody, } from './ElasticSearchSearchEngine'; export type { ElasticSearchSearchEngineIndexer, ElasticSearchSearchEngineIndexerOptions, } from './ElasticSearchSearchEngineIndexer'; +export type { + ElasticSearchCustomIndexTemplate, + ElasticSearchCustomIndexTemplateBody, +} from './types'; diff --git a/plugins/search-backend-module-elasticsearch/src/engines/types.ts b/plugins/search-backend-module-elasticsearch/src/engines/types.ts new file mode 100644 index 0000000000..a83e8b09b6 --- /dev/null +++ b/plugins/search-backend-module-elasticsearch/src/engines/types.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Elasticsearch specific index template + * @public + */ +export type ElasticSearchCustomIndexTemplate = { + name: string; + body: ElasticSearchCustomIndexTemplateBody; +}; + +/** + * Elasticsearch specific index template body + * @public + */ +export type ElasticSearchCustomIndexTemplateBody = { + /** + * Array of wildcard (*) expressions used to match the names of data streams and indices during creation. + */ + index_patterns: string[]; + /** + * An ordered list of component template names. + * Component templates are merged in the order specified, + * meaning that the last component template specified has the highest precedence. + */ + composed_of?: string[]; + /** + * See available properties of template + * https://www.elastic.co/guide/en/elasticsearch/reference/7.15/indices-put-template.html#put-index-template-api-request-body + */ + template?: Record; +}; diff --git a/plugins/search-backend-module-elasticsearch/src/index.ts b/plugins/search-backend-module-elasticsearch/src/index.ts index adf7fa43f2..cb4f62098a 100644 --- a/plugins/search-backend-module-elasticsearch/src/index.ts +++ b/plugins/search-backend-module-elasticsearch/src/index.ts @@ -20,13 +20,18 @@ * @packageDocumentation */ -export { ElasticSearchSearchEngine } from './engines'; +export { ElasticSearchSearchEngine, isOpenSearchCompatible } from './engines'; export type { + BaseElasticSearchClientOptions, ElasticSearchAgentOptions, + ElasticSearchAliasAction, + ElasticSearchClientWrapper, ElasticSearchConcreteQuery, ElasticSearchClientOptions, + ElasticSearchElasticSearchClientOptions, ElasticSearchHighlightConfig, ElasticSearchHighlightOptions, + ElasticSearchIndexAction, ElasticSearchQueryTranslator, ElasticSearchQueryTranslatorOptions, ElasticSearchConnectionConstructor, @@ -38,4 +43,8 @@ export type { ElasticSearchSearchEngineIndexerOptions, ElasticSearchCustomIndexTemplate, ElasticSearchCustomIndexTemplateBody, + OpenSearchAuth, + OpenSearchConnectionConstructor, + OpenSearchElasticSearchClientOptions, + OpenSearchNodeOptions, } from './engines'; diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index fe18f8254b..370339d9af 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend-module-pg +## 0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-search-backend-node@0.6.3-next.0 + ## 0.3.4 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index b34d2c65b8..35d3d841f3 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.3.4", + "version": "0.3.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,15 +23,15 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/plugin-search-backend-node": "^0.6.2", - "@backstage/plugin-search-common": "^0.3.5", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/plugin-search-backend-node": "^0.6.3-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", "lodash": "^4.17.21", "knex": "^1.0.2" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2" + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 82f83436cd..d1b631fd53 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-search-backend-node +## 0.6.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + ## 0.6.2 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 3ebfb8782f..47d613c160 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "0.6.2", + "version": "0.6.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,12 +23,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-tasks": "^0.3.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-search-common": "^0.3.5", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-search-common": "^0.3.6-next.0", "@types/lunr": "^2.3.3", "lodash": "^4.17.21", "lunr": "^2.3.9", @@ -38,8 +38,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/cli": "^0.17.2", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/ndjson": "^2.0.1" }, "files": [ diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index e214d6bb16..c779dbef3a 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-search-backend +## 0.5.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/plugin-auth-node@0.2.3-next.1 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.1 + - @backstage/plugin-search-backend-node@0.6.3-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.5.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-auth-node@0.2.3-next.0 + - @backstage/plugin-permission-node@0.6.3-next.0 + - @backstage/plugin-search-backend-node@0.6.3-next.0 + ## 0.5.3 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 6daa65bcb4..3e2e429b5a 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "0.5.3", + "version": "0.5.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,14 +23,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-auth-node": "^0.2.2", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-permission-node": "^0.6.2", - "@backstage/plugin-search-backend-node": "^0.6.2", - "@backstage/plugin-search-common": "^0.3.5", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-auth-node": "^0.2.3-next.1", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-permission-node": "^0.6.3-next.1", + "@backstage/plugin-search-backend-node": "^0.6.3-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", "@backstage/types": "^1.0.0", "@types/express": "^4.17.6", "dataloader": "^2.0.0", @@ -43,7 +43,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" }, diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md index 53a8afb0bf..3623d21e93 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-search-common +## 0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.6.3-next.0 + ## 0.3.5 ### Patch Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index ae4c65d11e..65152206e2 100644 --- a/plugins/search-common/package.json +++ b/plugins/search-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-common", "description": "Common functionalities for Search, to be shared between various search-enabled plugins", - "version": "0.3.5", + "version": "0.3.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -40,10 +40,10 @@ }, "dependencies": { "@backstage/types": "^1.0.0", - "@backstage/plugin-permission-common": "^0.6.2" + "@backstage/plugin-permission-common": "^0.6.3-next.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "jest": { "roots": [ diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 5f38994eeb..6ae54e736a 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-react +## 0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.2.1 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index c0914e6409..2cc8782758 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "0.2.1", + "version": "0.2.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/core-components": "^0.9.5", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", "@backstage/version-bridge": "^1.0.1", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -48,8 +48,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/core-app-api": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx b/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx index d65278f7ec..fba50f74d8 100644 --- a/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx +++ b/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx @@ -17,59 +17,59 @@ import React from 'react'; import { screen, render, waitFor, act } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; - import { configApiRef, analyticsApiRef } from '@backstage/core-plugin-api'; -import { ApiProvider, ConfigReader } from '@backstage/core-app-api'; -import { MockAnalyticsApi, TestApiRegistry } from '@backstage/test-utils'; - +import { ConfigReader } from '@backstage/core-app-api'; +import { + MockAnalyticsApi, + TestApiProvider, + renderWithEffects, +} from '@backstage/test-utils'; import { searchApiRef } from '../../api'; import { SearchContextProvider } from '../../context'; import { SearchBar } from './SearchBar'; -jest.mock('@backstage/core-plugin-api', () => ({ - ...jest.requireActual('@backstage/core-plugin-api'), -})); +const createInitialState = ({ + term = '', + filters = {}, + types = ['*'], + pageCursor = '', +} = {}) => ({ + term, + filters, + types, + pageCursor, +}); describe('SearchBar', () => { - const initialState = { - term: '', - filters: {}, - types: ['*'], - pageCursor: '', - }; + const query = jest.fn().mockResolvedValue({ results: [] }); - const query = jest.fn().mockResolvedValue({}); - const analyticsApiSpy = new MockAnalyticsApi(); - let apiRegistry: TestApiRegistry; + const analyticsApiMock = new MockAnalyticsApi(); - apiRegistry = TestApiRegistry.from( - [ - configApiRef, - new ConfigReader({ - app: { title: 'Mock title' }, - }), - ], - [searchApiRef, { query }], - ); + const configApiMock = new ConfigReader({ + app: { title: 'Mock title' }, + }); - const name = 'Search'; - const term = 'term'; + const searchApiMock = { query }; - afterAll(() => { - jest.resetAllMocks(); + beforeEach(() => { + jest.clearAllMocks(); }); it('Renders without exploding', async () => { - render( - - + await renderWithEffects( + + - , + , ); await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); expect( screen.getByPlaceholderText('Search in Mock title'), ).toBeInTheDocument(); @@ -77,59 +77,72 @@ describe('SearchBar', () => { }); it('Renders with custom placeholder', async () => { - render( - - - + const placeholder = 'placeholder'; + + await renderWithEffects( + + + - , - , + , ); await waitFor(() => { - expect( - screen.getByPlaceholderText('This is a custom placeholder'), - ).toBeInTheDocument(); + expect(screen.getByPlaceholderText(placeholder)).toBeInTheDocument(); }); }); it('Renders based on initial search', async () => { + const term = 'term'; + render( - - + + - , - , + , ); await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toHaveValue(term); + expect(screen.getByRole('textbox', { name: 'Search' })).toHaveValue(term); }); }); it('Updates term state when text is entered', async () => { - const user = userEvent.setup({ delay: null }); jest.useFakeTimers(); - const defaultDebounceTime = 200; + const user = userEvent.setup({ delay: null }); - render( - - + await renderWithEffects( + + - , - , + , ); - const textbox = screen.getByRole('textbox', { name }); + const textbox = screen.getByRole('textbox', { name: 'Search' }); const value = 'value'; await user.type(textbox, value); act(() => { - jest.advanceTimersByTime(defaultDebounceTime); + jest.advanceTimersByTime(200); }); await waitFor(() => { @@ -139,26 +152,36 @@ describe('SearchBar', () => { expect(query).toHaveBeenLastCalledWith( expect.objectContaining({ term: value }), ); + jest.useRealTimers(); }); it('Clear button clears term state', async () => { - render( - - + const term = 'term'; + + await renderWithEffects( + + - , + , ); + const textbox = screen.getByRole('textbox', { name: 'Search' }); + await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toHaveValue(term); + expect(textbox).toHaveValue(term); }); await userEvent.click(screen.getByRole('button', { name: 'Clear' })); await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toHaveValue(''); + expect(textbox).toHaveValue(''); }); expect(query).toHaveBeenLastCalledWith( @@ -167,12 +190,19 @@ describe('SearchBar', () => { }); it('Should not show clear button', async () => { - render( - - + const term = 'term'; + + await renderWithEffects( + + - , + , ); await waitFor(() => { @@ -183,170 +213,168 @@ describe('SearchBar', () => { }); it('Adheres to provided debounceTime', async () => { - const user = userEvent.setup({ delay: null }); jest.useFakeTimers(); - + const user = userEvent.setup({ delay: null }); const debounceTime = 600; - render( - - + await renderWithEffects( + + - , - , + , ); - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); - }); - - const textbox = screen.getByRole('textbox', { name }); + const textbox = await screen.findByRole('textbox', { name: 'Search' }); const value = 'value'; await user.type(textbox, value); - expect(query).not.toHaveBeenLastCalledWith( - expect.objectContaining({ term: value }), - ); + await waitFor(() => { + expect(query).not.toHaveBeenLastCalledWith( + expect.objectContaining({ term: value }), + ); + }); act(() => { jest.advanceTimersByTime(debounceTime); }); - expect(textbox).toHaveValue(value); + + await waitFor(() => { + expect(textbox).toHaveValue(value); + }); expect(query).toHaveBeenLastCalledWith( expect.objectContaining({ term: value }), ); + jest.useRealTimers(); }); it('does not capture analytics event if not enabled in app', async () => { - const user = userEvent.setup({ delay: null }); jest.useFakeTimers(); + const user = userEvent.setup({ delay: null }); - const debounceTime = 600; - - render( - - - + await renderWithEffects( + + + - , - , + , ); - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); - }); - - const textbox = screen.getByRole('textbox', { name }); + const textbox = await screen.findByRole('textbox', { name: 'Search' }); const value = 'value'; await user.type(textbox, value); act(() => { - jest.advanceTimersByTime(debounceTime); + jest.advanceTimersByTime(200); }); - await waitFor(() => expect(textbox).toHaveValue(value)); + await waitFor(() => { + expect(textbox).toHaveValue(value); + }); + + expect(analyticsApiMock.getEvents()).toHaveLength(0); - expect(analyticsApiSpy.getEvents()).toHaveLength(0); jest.useRealTimers(); }); it('captures analytics events if enabled in app', async () => { - const user = userEvent.setup({ delay: null }); jest.useFakeTimers(); + const user = userEvent.setup({ delay: null }); + const types = ['techdocs', 'software-catalog']; - const debounceTime = 600; - - apiRegistry = TestApiRegistry.from( - [analyticsApiRef, analyticsApiSpy], - [ - configApiRef, - new ConfigReader({ - app: { - title: 'Mock title', - analytics: { - ga: { - trackingId: 'xyz123', + await renderWithEffects( + - - + }), + ], + ]} + > + + - , + , ); - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); - }); + const textbox = await screen.findByRole('textbox', { name: 'Search' }); - const textbox = screen.getByRole('textbox', { name }); - - const value = 'value'; + let value = 'value'; await user.type(textbox, value); - expect(analyticsApiSpy.getEvents()).toHaveLength(0); + expect(analyticsApiMock.getEvents()).toHaveLength(0); act(() => { - jest.advanceTimersByTime(debounceTime); + jest.advanceTimersByTime(200); }); await waitFor(() => expect(textbox).toHaveValue(value)); - expect(analyticsApiSpy.getEvents()).toHaveLength(1); - expect(analyticsApiSpy.getEvents()[0]).toEqual({ + expect(analyticsApiMock.getEvents()).toHaveLength(1); + expect(analyticsApiMock.getEvents()[0]).toEqual({ action: 'search', context: { extension: 'SearchBar', pluginId: 'search', routeRef: 'unknown', - searchTypes: 'software-catalog,techdocs', + searchTypes: types.toString(), }, - subject: 'value', + subject: value, }); await user.clear(textbox); + value = 'new value'; + // make sure new term is captured - await user.type(textbox, 'new value'); + await user.type(textbox, value); act(() => { - jest.advanceTimersByTime(debounceTime); + jest.advanceTimersByTime(200); }); - await waitFor(() => expect(textbox).toHaveValue('new value')); + await waitFor(() => expect(textbox).toHaveValue(value)); - expect(analyticsApiSpy.getEvents()).toHaveLength(2); - expect(analyticsApiSpy.getEvents()[1]).toEqual({ + expect(analyticsApiMock.getEvents()).toHaveLength(2); + expect(analyticsApiMock.getEvents()[1]).toEqual({ action: 'search', context: { extension: 'SearchBar', pluginId: 'search', routeRef: 'unknown', - searchTypes: 'software-catalog,techdocs', + searchTypes: types.toString(), }, - subject: 'new value', + subject: value, }); + jest.useRealTimers(); }); }); diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 6283cee29b..0c7f749f82 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-search +## 0.9.1-next.1 + +### Patch Changes + +- 509c4092f0: To allow people to use a global search context in the search modal, the code for the search modal has been changed to only create a local search context if there is no parent context already defined. + + If you want to continue using a local context even if you define a global one, you will have to wrap the modal in a new local context manually: + + ```tsx + + + + ``` + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## 0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + ## 0.9.0 ### Minor Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index b658490b00..e0fb5447f7 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "0.9.0", + "version": "0.9.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,15 +33,15 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/plugin-search-react": "^0.2.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", @@ -57,10 +57,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/search/src/components/SearchBar/SearchBar.test.tsx b/plugins/search/src/components/SearchBar/SearchBar.test.tsx deleted file mode 100644 index c48c3d3ed2..0000000000 --- a/plugins/search/src/components/SearchBar/SearchBar.test.tsx +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { screen, render, waitFor, act } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { configApiRef, analyticsApiRef } from '@backstage/core-plugin-api'; -import { ApiProvider, ConfigReader } from '@backstage/core-app-api'; -import { MockAnalyticsApi, TestApiRegistry } from '@backstage/test-utils'; -import { - SearchContextProvider, - searchApiRef, -} from '@backstage/plugin-search-react'; - -import { SearchBar } from './SearchBar'; - -jest.mock('@backstage/core-plugin-api', () => ({ - ...jest.requireActual('@backstage/core-plugin-api'), -})); - -describe('SearchBar', () => { - const initialState = { - term: '', - filters: {}, - types: ['*'], - pageCursor: '', - }; - - const query = jest.fn().mockResolvedValue({}); - const analyticsApiSpy = new MockAnalyticsApi(); - let apiRegistry: TestApiRegistry; - - apiRegistry = TestApiRegistry.from( - [ - configApiRef, - new ConfigReader({ - app: { title: 'Mock title' }, - }), - ], - [searchApiRef, { query }], - ); - - const name = 'Search'; - const term = 'term'; - - afterAll(() => { - jest.resetAllMocks(); - }); - - it('Renders without exploding', async () => { - render( - - - - - , - ); - - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); - expect( - screen.getByPlaceholderText('Search in Mock title'), - ).toBeInTheDocument(); - }); - }); - - it('Renders with custom placeholder', async () => { - render( - - - - - , - , - ); - - await waitFor(() => { - expect( - screen.getByPlaceholderText('This is a custom placeholder'), - ).toBeInTheDocument(); - }); - }); - - it('Renders based on initial search', async () => { - render( - - - - - , - , - ); - - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toHaveValue(term); - }); - }); - - it('Updates term state when text is entered', async () => { - const user = userEvent.setup({ delay: null }); - jest.useFakeTimers(); - const defaultDebounceTime = 200; - - render( - - - - - , - , - ); - - const textbox = screen.getByRole('textbox', { name }); - - const value = 'value'; - - await user.type(textbox, value); - - act(() => { - jest.advanceTimersByTime(defaultDebounceTime); - }); - - await waitFor(() => { - expect(textbox).toHaveValue(value); - }); - - expect(query).toHaveBeenLastCalledWith( - expect.objectContaining({ term: value }), - ); - jest.useRealTimers(); - }); - - it('Clear button clears term state', async () => { - render( - - - - - , - ); - - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toHaveValue(term); - }); - - await userEvent.click(screen.getByRole('button', { name: 'Clear' })); - - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toHaveValue(''); - }); - - expect(query).toHaveBeenLastCalledWith( - expect.objectContaining({ term: '' }), - ); - }); - - it('Should not show clear button', async () => { - render( - - - - - , - ); - - await waitFor(() => { - expect( - screen.queryByRole('button', { name: 'Clear' }), - ).not.toBeInTheDocument(); - }); - }); - - it('Adheres to provided debounceTime', async () => { - const user = userEvent.setup({ delay: null }); - jest.useFakeTimers(); - - const debounceTime = 600; - - render( - - - - - , - , - ); - - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); - }); - - const textbox = screen.getByRole('textbox', { name }); - - const value = 'value'; - - await user.type(textbox, value); - - expect(query).not.toHaveBeenLastCalledWith( - expect.objectContaining({ term: value }), - ); - - act(() => { - jest.advanceTimersByTime(debounceTime); - }); - expect(textbox).toHaveValue(value); - - expect(query).toHaveBeenLastCalledWith( - expect.objectContaining({ term: value }), - ); - jest.useRealTimers(); - }); - - it('does not capture analytics event if not enabled in app', async () => { - const user = userEvent.setup({ delay: null }); - jest.useFakeTimers(); - - const debounceTime = 600; - - render( - - - - - , - , - ); - - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); - }); - - const textbox = screen.getByRole('textbox', { name }); - - const value = 'value'; - - await user.type(textbox, value); - - act(() => { - jest.advanceTimersByTime(debounceTime); - }); - - await waitFor(() => expect(textbox).toHaveValue(value)); - - expect(analyticsApiSpy.getEvents()).toHaveLength(0); - jest.useRealTimers(); - }); - - it('captures analytics events if enabled in app', async () => { - const user = userEvent.setup({ delay: null }); - jest.useFakeTimers(); - - const debounceTime = 600; - - apiRegistry = TestApiRegistry.from( - [analyticsApiRef, analyticsApiSpy], - [ - configApiRef, - new ConfigReader({ - app: { - title: 'Mock title', - analytics: { - ga: { - trackingId: 'xyz123', - }, - }, - }, - }), - ], - [searchApiRef, { query }], - ); - - render( - - - - - , - ); - - await waitFor(() => { - expect(screen.getByRole('textbox', { name })).toBeInTheDocument(); - }); - - const textbox = screen.getByRole('textbox', { name }); - - const value = 'value'; - - await user.type(textbox, value); - - expect(analyticsApiSpy.getEvents()).toHaveLength(0); - - act(() => { - jest.advanceTimersByTime(debounceTime); - }); - - await waitFor(() => expect(textbox).toHaveValue(value)); - - expect(analyticsApiSpy.getEvents()).toHaveLength(1); - expect(analyticsApiSpy.getEvents()[0]).toEqual({ - action: 'search', - context: { - extension: 'App', - pluginId: 'root', - routeRef: 'unknown', - searchTypes: 'software-catalog,techdocs', - }, - subject: 'value', - }); - - await user.clear(textbox); - - // make sure new term is captured - await user.type(textbox, 'new value'); - - act(() => { - jest.advanceTimersByTime(debounceTime); - }); - - await waitFor(() => expect(textbox).toHaveValue('new value')); - - expect(analyticsApiSpy.getEvents()).toHaveLength(2); - expect(analyticsApiSpy.getEvents()[1]).toEqual({ - action: 'search', - context: { - extension: 'App', - pluginId: 'root', - routeRef: 'unknown', - searchTypes: 'software-catalog,techdocs', - }, - subject: 'new value', - }); - jest.useRealTimers(); - }); -}); diff --git a/plugins/search/src/components/SearchModal/SearchModal.test.tsx b/plugins/search/src/components/SearchModal/SearchModal.test.tsx index 842f5fb401..3ef9291585 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.test.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.test.tsx @@ -21,7 +21,10 @@ import userEvent from '@testing-library/user-event'; import { configApiRef } from '@backstage/core-plugin-api'; import { ApiProvider, ConfigReader } from '@backstage/core-app-api'; import { rootRouteRef } from '../../plugin'; -import { searchApiRef } from '@backstage/plugin-search-react'; +import { + searchApiRef, + SearchContextProvider, +} from '@backstage/plugin-search-react'; import { SearchModal } from './SearchModal'; @@ -55,6 +58,52 @@ describe('SearchModal', () => { expect(query).toHaveBeenCalledTimes(1); }); + it('Should use parent search context if defined', async () => { + const initialState = { + term: 'term', + filters: { filter: '' }, + types: ['type'], + pageCursor: 'page cursor', + }; + + await renderInTestApp( + + + + , + { + mountedRoutes: { + '/search': rootRouteRef, + }, + }, + ); + + expect(screen.getByRole('dialog')).toBeInTheDocument(); + expect(query).toHaveBeenCalledWith(initialState); + }); + + it('Should create a local search context if a parent is not defined', async () => { + await renderInTestApp( + + , + { + mountedRoutes: { + '/search': rootRouteRef, + }, + }, + ); + + expect(screen.getByRole('dialog')).toBeInTheDocument(); + expect(query).toHaveBeenCalledWith({ + term: '', + filters: {}, + types: [], + pageCursor: undefined, + }); + }); + it('Should render a custom Modal correctly', async () => { await renderInTestApp( diff --git a/plugins/search/src/components/SearchModal/SearchModal.tsx b/plugins/search/src/components/SearchModal/SearchModal.tsx index 6c37f20001..dbb8100ec1 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import React from 'react'; +import React, { PropsWithChildren } from 'react'; import { Dialog, DialogActions, @@ -35,6 +35,7 @@ import { SearchResult, SearchResultPager, useSearch, + useSearchContextCheck, } from '@backstage/plugin-search-react'; import { useRouteRef } from '@backstage/core-plugin-api'; import { Link, useContent } from '@backstage/core-components'; @@ -170,6 +171,15 @@ export const Modal = ({ toggleModal }: SearchModalProps) => { ); }; +const Context = ({ children }: PropsWithChildren<{}>) => { + // Checks if there is a parent context already defined and, if not, creates a new local context. + const hasParentContext = useSearchContextCheck(); + if (hasParentContext) { + return <>{children}; + } + return {children}; +}; + /** * @public */ @@ -194,11 +204,11 @@ export const SearchModal = ({ hidden={hidden} > {open && ( - + {(children && children({ toggleModal })) ?? ( )} - + )} ); diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 1a469a83af..eed3d21aa7 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-sentry +## 0.3.45-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.45-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.44 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index a75447f0ab..f40a8d8178 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.3.44", + "version": "0.3.45-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,11 +35,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 4513e09dab..d65296efd7 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-shortcuts +## 0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.2.7 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index d1d3f9fba4..54b3867df7 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.2.7", + "version": "0.2.8-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,9 +24,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -42,10 +42,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 2b3d6840da..9a4f9aa752 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-sonarqube +## 0.3.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.6 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index d9310ffdde..94888e1d95 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.3.6", + "version": "0.3.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,11 +36,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index e65afb1285..87a26d4d58 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-splunk-on-call +## 0.3.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.3.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.3.30 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index baecd2f9c5..46443585cc 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.3.30", + "version": "0.3.31-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -51,10 +51,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 9f3a2d98a3..6c19f2bfe4 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.3-next.0 + +### Patch Changes + +- 52b4f796e3: app-config is now picked up properly. +- Updated dependencies + - @backstage/plugin-search-common@0.3.6-next.0 + ## 0.1.2 ### Patch Changes diff --git a/plugins/stack-overflow-backend/config.d.ts b/plugins/stack-overflow-backend/config.d.ts index 7e7211ca33..2c39d61bfb 100644 --- a/plugins/stack-overflow-backend/config.d.ts +++ b/plugins/stack-overflow-backend/config.d.ts @@ -18,11 +18,11 @@ export interface Config { /** * Configuration options for the stack overflow plugin */ - stackoverflow: { + stackoverflow?: { /** * The base url of the Stack Overflow API used for the plugin * @visibility backend */ - baseUrl: string; + baseUrl?: string; }; } diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index cc41da042e..07cdbfb242 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.1.2", + "version": "0.1.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,7 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/plugin-search-common": "^0.3.5", + "@backstage/plugin-search-common": "^0.3.6-next.0", "@backstage/config": "^1.0.1", "qs": "^6.9.4", "cross-fetch": "^3.1.5", @@ -41,6 +41,7 @@ }, "files": [ "dist", - "config" - ] + "config.d.ts" + ], + "configSchema": "config.d.ts" } diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index d0f5f39f4b..097d8507a2 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-stack-overflow +## 0.1.3-next.1 + +### Patch Changes + +- 52b4f796e3: app-config is now picked up properly. +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/plugin-home@0.4.23-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 0.1.3-next.0 + +### Patch Changes + +- 12ae3eed2f: - Publicly exports `StackOverflowIcon`. + - `HomePageStackOverflowQuestions` accepts optional icon property. +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-home@0.4.23-next.0 + ## 0.1.2 ### Patch Changes diff --git a/plugins/stack-overflow/config.d.ts b/plugins/stack-overflow/config.d.ts index 811893231e..c0638e3c19 100644 --- a/plugins/stack-overflow/config.d.ts +++ b/plugins/stack-overflow/config.d.ts @@ -18,11 +18,11 @@ export interface Config { /** * Configuration options for the stack overflow plugin */ - stackoverflow: { + stackoverflow?: { /** * The base url of the Stack Overflow API used for the plugin * @visibility frontend */ - baseUrl: string; + baseUrl?: string; }; } diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 1438ddcd50..f08db4618c 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.2", + "version": "0.1.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-home": "^0.4.22", - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/theme": "^0.2.15", + "@backstage/plugin-home": "^0.4.23-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@testing-library/jest-dom": "^5.10.1", @@ -42,10 +42,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", @@ -54,6 +54,7 @@ }, "files": [ "dist", - "config" - ] + "config.d.ts" + ], + "configSchema": "config.d.ts" } diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index ba2392b5ee..4be66cb389 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/plugin-tech-insights-node@0.3.2-next.0 + ## 0.1.17 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index a6782c57fb..d0b3626ac5 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.17", + "version": "0.1.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/plugin-tech-insights-common": "^0.2.4", - "@backstage/plugin-tech-insights-node": "^0.3.1", + "@backstage/plugin-tech-insights-node": "^0.3.2-next.0", "ajv": "^8.10.0", "json-rules-engine": "^6.1.2", "lodash": "^4.17.21", @@ -46,7 +46,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 9e496d9046..ff5a703be2 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-tech-insights-backend +## 0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/catalog-client@1.0.4-next.1 + +## 0.4.2-next.0 + +### Patch Changes + +- 2ef58ab539: TechInsightsBackend: Added missing 'scheduler' to code examples +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/plugin-tech-insights-node@0.3.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 0.4.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/README.md b/plugins/tech-insights-backend/README.md index e88d150393..c5c6e66270 100644 --- a/plugins/tech-insights-backend/README.md +++ b/plugins/tech-insights-backend/README.md @@ -106,6 +106,7 @@ const builder = buildTechInsightsContext({ database: env.database, discovery: env.discovery, tokenManager: env.tokenManager, + scheduler: env.scheduler, - factRetrievers: [], + factRetrievers: [myFactRetrieverRegistration], }); @@ -122,6 +123,7 @@ const builder = buildTechInsightsContext({ database: env.database, discovery: env.discovery, tokenManager: env.tokenManager, + scheduler: env.scheduler, - factRetrievers: [], + factRetrievers: process.env.MAIN_FACT_RETRIEVER_INSTANCE ? [myFactRetrieverRegistration] : [], }); @@ -281,6 +283,7 @@ export default async function createPlugin( database: env.database, discovery: env.discovery, tokenManager: env.tokenManager, + scheduler: env.scheduler, factRetrievers: [ createFactRetrieverRegistration({ cadence: '0 */6 * * *', // Run every 6 hours - https://crontab.guru/#0_*/6_*_*_* diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 5ae890ae1b..a5e180e715 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.4.1", + "version": "0.4.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,14 +34,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-tasks": "^0.3.2", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@backstage/plugin-tech-insights-common": "^0.2.4", - "@backstage/plugin-tech-insights-node": "^0.3.1", + "@backstage/plugin-tech-insights-node": "^0.3.2-next.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -54,8 +54,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "@types/semver": "^7.3.8", "supertest": "^6.1.3", diff --git a/plugins/tech-insights-common/package.json b/plugins/tech-insights-common/package.json index bc9bbcd792..14ec147bb9 100644 --- a/plugins/tech-insights-common/package.json +++ b/plugins/tech-insights-common/package.json @@ -38,7 +38,7 @@ "@backstage/types": "^1.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index c6af55abd5..64d150d275 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-tech-insights-node +## 0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + ## 0.3.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 904f149d6c..3139865ddf 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.3.1", + "version": "0.3.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,7 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", + "@backstage/backend-common": "^0.14.1-next.1", "@backstage/config": "^1.0.1", "@backstage/plugin-tech-insights-common": "^0.2.4", "@backstage/types": "^1.0.0", @@ -42,7 +42,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2" + "@backstage/cli": "^0.18.0-next.1" }, "files": [ "dist" diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 867f639067..1948f639fe 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-tech-insights +## 0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 0956db7cf3..6b628b04d7 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.2.2", + "version": "0.2.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,13 +28,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", "@backstage/plugin-tech-insights-common": "^0.2.4", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 049a1b9c4c..464c51f5b5 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-radar +## 0.5.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.5.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.5.13 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index de2eab6fd1..87efc6ed36 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.5.13", + "version": "0.5.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index aabdec8922..43bb307fe2 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/plugin-catalog@1.3.1-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-techdocs@1.2.1-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/test-utils@1.1.2-next.1 + - @backstage/plugin-search-react@0.2.2-next.1 + +## 1.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/plugin-catalog@1.3.1-next.0 + - @backstage/core-app-api@1.0.4-next.0 + - @backstage/plugin-techdocs@1.2.1-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + - @backstage/test-utils@1.1.2-next.0 + ## 1.0.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 35d176566e..58e4ec8657 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.1", + "version": "1.0.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,16 +32,16 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.5", - "@backstage/core-app-api": "^1.0.3", + "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog": "^1.3.0", - "@backstage/plugin-search-react": "^0.2.1", - "@backstage/plugin-techdocs": "^1.2.0", - "@backstage/plugin-techdocs-react": "^1.0.1", - "@backstage/test-utils": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/plugin-search-react": "^0.2.2-next.1", + "@backstage/plugin-techdocs": "^1.2.1-next.1", + "@backstage/plugin-techdocs-react": "^1.0.2-next.0", + "@backstage/test-utils": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -56,8 +56,8 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/dev-utils": "^1.0.3", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/dev-utils": "^1.0.4-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 861bf37bef..3222ee1c2a 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-techdocs-backend +## 1.2.0-next.1 + +### Minor Changes + +- 860765ff45: Added local publishing target directory `config`: `techdocs.publisher.local.publishDirectory` + +### Patch Changes + +- 726577958f: Add sample headings on the documented component homepage. +- Updated dependencies + - @backstage/plugin-techdocs-node@1.2.0-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-catalog-common@1.0.4-next.0 + - @backstage/plugin-permission-common@0.6.3-next.0 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-techdocs-node@1.1.3-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 1.1.2 ### Patch Changes diff --git a/plugins/techdocs-backend/config.d.ts b/plugins/techdocs-backend/config.d.ts index c64a001f5f..fdacc9cfbc 100644 --- a/plugins/techdocs-backend/config.d.ts +++ b/plugins/techdocs-backend/config.d.ts @@ -66,6 +66,13 @@ export interface Config { publisher?: | { type: 'local'; + + local?: { + /** + * Directory to store generated static files. + */ + publishDirectory?: string; + }; } | { type: 'awsS3'; diff --git a/plugins/techdocs-backend/examples/documented-component/docs/index.md b/plugins/techdocs-backend/examples/documented-component/docs/index.md index 48a903445a..5a3d7508cd 100644 --- a/plugins/techdocs-backend/examples/documented-component/docs/index.md +++ b/plugins/techdocs-backend/examples/documented-component/docs/index.md @@ -11,6 +11,20 @@ You can see also: ## Basic Markdown +Headings: + +# h1 + +## h2 + +### h3 + +#### h4 + +##### h5 + +###### h6 + Here is a bulleted list: - Item one diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index d7e9326fe5..5a96f3ab42 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.1.2", + "version": "1.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,16 +34,16 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-catalog-common": "^1.0.3", - "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/plugin-techdocs-node": "^1.1.2", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-catalog-common": "^1.0.4-next.0", + "@backstage/plugin-permission-common": "^0.6.3-next.0", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/plugin-techdocs-node": "^1.2.0-next.1", "@types/express": "^4.17.6", "dockerode": "^3.3.1", "express": "^4.17.1", @@ -56,9 +56,9 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.25", - "@backstage/cli": "^0.17.2", - "@backstage/plugin-search-backend-node": "0.6.2", + "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/plugin-search-backend-node": "0.6.3-next.1", "@types/dockerode": "^3.3.0", "msw": "^0.42.0", "supertest": "^6.1.3" diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 4219157392..2f2626f925 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + +## 1.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + ## 1.0.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 92c0d8d4af..5e21bff816 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.1", + "version": "1.0.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.1", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-techdocs-react": "^1.0.1", - "@backstage/theme": "^0.2.15", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-techdocs-react": "^1.0.2-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -51,11 +51,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/plugin-techdocs-addons-test-utils": "^1.0.1", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/plugin-techdocs-addons-test-utils": "^1.0.2-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 1902f80171..be88fd74b1 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-techdocs-node +## 1.2.0-next.1 + +### Minor Changes + +- 860765ff45: Added local publishing target directory `config`: `techdocs.publisher.local.publishDirectory` + +### Patch Changes + +- a5d73da942: Fix the flag parsing for `legacyCopyReadmeMdToIndexMd` in `techdocs-cli generate` command, and decouple it's logic from the `techdocs-ref` flag. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + +## 1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + ## 1.1.2 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 9cd737db80..89e8d3c56c 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.1.2", + "version": "1.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -42,12 +42,12 @@ "dependencies": { "@azure/identity": "^2.0.1", "@azure/storage-blob": "^12.5.0", - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/plugin-search-common": "^0.3.5", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", "@google-cloud/storage": "^6.0.0", "@trendyol-js/openstack-swift-sdk": "^0.0.5", "@types/express": "^4.17.6", @@ -64,7 +64,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/fs-extra": "^9.0.5", "@types/js-yaml": "^4.0.0", "@types/mime-types": "^2.1.0", diff --git a/plugins/techdocs-node/src/stages/generate/techdocs.ts b/plugins/techdocs-node/src/stages/generate/techdocs.ts index 660b8e8cb5..e3debab526 100644 --- a/plugins/techdocs-node/src/stages/generate/techdocs.ts +++ b/plugins/techdocs-node/src/stages/generate/techdocs.ts @@ -111,10 +111,10 @@ export class TechdocsGenerator implements GeneratorBase { parsedLocationAnnotation, this.scmIntegrations, ); + } - if (this.options.legacyCopyReadmeMdToIndexMd) { - await patchIndexPreBuild({ inputDir, logger: childLogger, docsDir }); - } + if (this.options.legacyCopyReadmeMdToIndexMd) { + await patchIndexPreBuild({ inputDir, logger: childLogger, docsDir }); } if (!this.options.omitTechdocsCoreMkdocsPlugin) { diff --git a/plugins/techdocs-node/src/stages/publish/local.test.ts b/plugins/techdocs-node/src/stages/publish/local.test.ts index 0119def16d..ce2e0c3ccd 100644 --- a/plugins/techdocs-node/src/stages/publish/local.test.ts +++ b/plugins/techdocs-node/src/stages/publish/local.test.ts @@ -236,5 +236,32 @@ describe('local publisher', () => { ); expect(response.status).toBe(404); }); + + it('should work with a configured directory', async () => { + const customConfig = new ConfigReader({ + techdocs: { + publisher: { + local: { + publishDirectory: tmpDir, + }, + }, + }, + }); + mockFs({ + [tmpDir]: { + 'index.html': 'found it', + }, + }); + const legacyPublisher = LocalPublish.fromConfig( + customConfig, + logger, + testDiscovery, + ); + app = express().use(legacyPublisher.docsRouter()); + + const response = await request(app).get('/index.html'); + expect(response.status).toBe(200); + expect(response.text).toEqual('found it'); + }); }); }); diff --git a/plugins/techdocs-node/src/stages/publish/local.ts b/plugins/techdocs-node/src/stages/publish/local.ts index 11c6e6dd2b..1a02cb7eee 100644 --- a/plugins/techdocs-node/src/stages/publish/local.ts +++ b/plugins/techdocs-node/src/stages/publish/local.ts @@ -44,40 +44,27 @@ import { } from './helpers'; import { ForwardedError } from '@backstage/errors'; -// TODO: Use a more persistent storage than node_modules or /tmp directory. -// Make it configurable with techdocs.publisher.local.publishDirectory -let staticDocsDir = ''; -try { - staticDocsDir = resolvePackagePath( - '@backstage/plugin-techdocs-backend', - 'static/docs', - ); -} catch (err) { - // This will most probably never be used. - // The try/catch is introduced so that techdocs-cli can import @backstage/plugin-techdocs-node - // on CI/CD without installing techdocs backend plugin. - staticDocsDir = os.tmpdir(); -} - /** - * Local publisher which uses the local filesystem to store the generated static files. It uses a directory - * called "static" at the root of techdocs-backend plugin. + * Local publisher which uses the local filesystem to store the generated static files. It uses by default a + * directory called "static" at the root of techdocs-backend plugin unless a directory has been configured by + * "techdocs.publisher.local.publishDirectory". */ export class LocalPublish implements PublisherBase { private readonly legacyPathCasing: boolean; private readonly logger: Logger; private readonly discovery: PluginEndpointDiscovery; + private readonly staticDocsDir: string; - // TODO: Move the logic of setting staticDocsDir based on config over to - // fromConfig, and set the value as a class parameter. constructor(options: { logger: Logger; discovery: PluginEndpointDiscovery; legacyPathCasing: boolean; + staticDocsDir: string; }) { this.logger = options.logger; this.discovery = options.discovery; this.legacyPathCasing = options.legacyPathCasing; + this.staticDocsDir = options.staticDocsDir; } static fromConfig( @@ -90,10 +77,28 @@ export class LocalPublish implements PublisherBase { 'techdocs.legacyUseCaseSensitiveTripletPaths', ) || false; + let staticDocsDir = config.getOptionalString( + 'techdocs.publisher.local.publishDirectory', + ); + if (!staticDocsDir) { + try { + staticDocsDir = resolvePackagePath( + '@backstage/plugin-techdocs-backend', + 'static/docs', + ); + } catch (err) { + // This will most probably never be used. + // The try/catch is introduced so that techdocs-cli can import @backstage/plugin-techdocs-node + // on CI/CD without installing techdocs backend plugin. + staticDocsDir = os.tmpdir(); + } + } + return new LocalPublish({ logger, discovery, legacyPathCasing, + staticDocsDir, }); } @@ -144,7 +149,7 @@ export class LocalPublish implements PublisherBase { const techdocsApiUrl = await this.discovery.getBaseUrl('techdocs'); const publishedFilePaths = (await getFileTreeRecursively(publishDir)).map( abs => { - return abs.split(`${staticDocsDir}/`)[1]; + return abs.split(`${this.staticDocsDir}/`)[1]; }, ); @@ -222,9 +227,8 @@ export class LocalPublish implements PublisherBase { // Otherwise, redirect to the new path. return res.redirect(301, req.baseUrl + newPath); }); - router.use( - express.static(staticDocsDir, { + express.static(this.staticDocsDir, { // Handle content-type header the same as all other publishers. setHeaders: (res, filePath) => { const fileExtension = path.extname(filePath); @@ -275,13 +279,16 @@ export class LocalPublish implements PublisherBase { concurrency = 25, }): Promise { // Iterate through every file in the root of the publisher. - const files = await getFileTreeRecursively(staticDocsDir); + const files = await getFileTreeRecursively(this.staticDocsDir); const limit = createLimiter(concurrency); await Promise.all( files.map(f => limit(async file => { - const relativeFile = file.replace(`${staticDocsDir}${path.sep}`, ''); + const relativeFile = file.replace( + `${this.staticDocsDir}${path.sep}`, + '', + ); const newFile = lowerCaseEntityTripletInStoragePath(relativeFile); // If all parts are already lowercase, ignore. @@ -311,7 +318,7 @@ export class LocalPublish implements PublisherBase { * Utility wrapper around path.join(), used to control legacy case logic. */ protected staticEntityPathJoin(...allParts: string[]): string { - let staticEntityPath = staticDocsDir; + let staticEntityPath = this.staticDocsDir; allParts .map(part => part.split(path.sep)) diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 904eacff26..6feb9062d3 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-techdocs-react +## 1.0.2-next.0 + +### Patch Changes + +- c3cfc83af2: Updated JSDoc to be MDX compatible. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + ## 1.0.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index f4a51bfe42..7209bab004 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.0.1", + "version": "1.0.2-next.0", "private": false, "publishConfig": { "access": "public", @@ -35,8 +35,8 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", @@ -56,8 +56,8 @@ "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", - "@backstage/test-utils": "^1.1.1", - "@backstage/theme": "^0.2.15" + "@backstage/test-utils": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0" }, "files": [ "alpha", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 91babd6fba..7d8fb30bbb 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-techdocs +## 1.2.1-next.1 + +### Patch Changes + +- 726577958f: Remove the 60% factor from the font size calculation of headers to use the exact size defined in BackstageTheme. +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/integration@1.2.2-next.1 + - @backstage/integration-react@1.1.2-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.1 + - @backstage/plugin-search-common@0.3.6-next.0 + - @backstage/plugin-search-react@0.2.2-next.1 + +## 1.2.1-next.0 + +### Patch Changes + +- 3cbebf710e: Reorder browser tab title in Techdocs pages to have the site name first. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-techdocs-react@1.0.2-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + - @backstage/integration-react@1.1.2-next.0 + - @backstage/plugin-search-react@0.2.2-next.0 + ## 1.2.0 ### Minor Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 45c6d98aec..612b6a4b9e 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.2.0", + "version": "1.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,18 +35,18 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", - "@backstage/integration-react": "^1.1.1", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/plugin-search-common": "^0.3.5", - "@backstage/plugin-search-react": "^0.2.1", - "@backstage/plugin-techdocs-react": "^1.0.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-search-common": "^0.3.6-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.1", + "@backstage/plugin-techdocs-react": "^1.0.2-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -67,10 +67,10 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/techdocs/src/reader/transformers/styles/rules/typeset.ts b/plugins/techdocs/src/reader/transformers/styles/rules/typeset.ts index e24b61da83..6a3b0461ef 100644 --- a/plugins/techdocs/src/reader/transformers/styles/rules/typeset.ts +++ b/plugins/techdocs/src/reader/transformers/styles/rules/typeset.ts @@ -16,8 +16,14 @@ import { RuleOptions } from './types'; +type RuleTypography = RuleOptions['theme']['typography']; + +type BackstageTypography = RuleTypography & { + htmlFontSize?: number; +}; + type TypographyHeadings = Pick< - RuleOptions['theme']['typography'], + RuleTypography, 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' >; @@ -33,13 +39,15 @@ export default ({ theme }: RuleOptions) => ` } ${headings.reduce((style, heading) => { + const htmlFontSize = + (theme.typography as BackstageTypography).htmlFontSize ?? 16; const styles = theme.typography[heading]; const { lineHeight, fontFamily, fontWeight, fontSize } = styles; const calculate = (value: typeof fontSize) => { let factor: number | string = 1; if (typeof value === 'number') { - // 60% of the size defined because it is too big - factor = (value / 16) * 0.6; + // convert px to rem + factor = value / htmlFontSize; } if (typeof value === 'string') { factor = value.replace('rem', ''); diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 8fc6adbfcb..005a900f20 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-todo-backend +## 0.1.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/catalog-client@1.0.4-next.1 + - @backstage/integration@1.2.2-next.1 + +## 0.1.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/integration@1.2.2-next.0 + - @backstage/catalog-client@1.0.4-next.0 + ## 0.1.30 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 235e05a93b..e1214f8dc1 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.30", + "version": "0.1.31-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,12 +29,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/catalog-client": "^1.0.3", - "@backstage/catalog-model": "^1.0.3", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/catalog-client": "^1.0.4-next.1", + "@backstage/catalog-model": "^1.1.0-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.2.1", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/integration": "^1.2.2-next.1", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -43,7 +43,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "msw": "^0.42.0", "supertest": "^6.1.3" diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 77eda64a68..5f0d94f1d1 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-todo +## 0.2.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.2.8 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 7fbf79cd3a..e5e4dcd103 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.8", + "version": "0.2.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,12 +30,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -45,10 +45,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 81cc4a891f..783871bef8 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-user-settings +## 0.4.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/theme@0.2.16-next.0 + +## 0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.4.5 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index aa4335856e..ba2b02d067 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.4.5", + "version": "0.4.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.15", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -48,10 +48,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 302b27afa8..d47d46870d 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-vault-backend +## 0.2.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/backend-tasks@0.3.3-next.1 + - @backstage/backend-test-utils@0.1.26-next.1 + +## 0.2.0-next.0 + +### Minor Changes + +- 5ebf2c7023: Throw exceptions instead of swallow them, remove some exported types from the `api-report`, small changes in the API responses & expose the vault `baseUrl` to the frontend as well + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.0 + - @backstage/backend-tasks@0.3.3-next.0 + - @backstage/backend-test-utils@0.1.26-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/vault-backend/api-report.md b/plugins/vault-backend/api-report.md index 1c7e669ef2..9f738b15e9 100644 --- a/plugins/vault-backend/api-report.md +++ b/plugins/vault-backend/api-report.md @@ -12,13 +12,6 @@ import { TaskRunner } from '@backstage/backend-tasks'; // @public export function createRouter(options: RouterOptions): express.Router; -// @public -export type RenewTokenResponse = { - auth: { - client_token: string; - }; -}; - // @public export interface RouterOptions { // (undocumented) @@ -33,7 +26,7 @@ export interface RouterOptions { export interface VaultApi { getFrontendSecretsUrl(): string; listSecrets(secretPath: string): Promise; - renewToken?(): Promise; + renewToken?(): Promise; } // @public @@ -45,7 +38,6 @@ export class VaultBuilder { enableTokenRenew(schedule?: TaskRunner): Promise; // (undocumented) protected readonly env: VaultEnvironment; - protected renewToken(vaultClient: VaultClient): Promise; setVaultClient(vaultClient: VaultClient): this; } @@ -62,7 +54,7 @@ export class VaultClient implements VaultApi { // (undocumented) listSecrets(secretPath: string): Promise; // (undocumented) - renewToken(): Promise; + renewToken(): Promise; } // @public @@ -82,12 +74,5 @@ export type VaultSecret = { editUrl: string; }; -// @public -export type VaultSecretList = { - data: { - keys: string[]; - }; -}; - // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/vault-backend/config.d.ts b/plugins/vault-backend/config.d.ts index b1f917463e..c7aac4db9d 100644 --- a/plugins/vault-backend/config.d.ts +++ b/plugins/vault-backend/config.d.ts @@ -19,6 +19,7 @@ export interface Config { vault?: { /** * The baseUrl for your Vault instance. + * @visibility frontend */ baseUrl: string; diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 651b95f98c..9996c521f7 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.1.0", + "version": "0.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.14.0", - "@backstage/backend-tasks": "^0.3.2", - "@backstage/backend-test-utils": "^0.1.25", + "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.1", "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.0.0", + "@backstage/errors": "^1.1.0-next.0", "@types/express": "*", "compression": "^1.7.4", "cors": "^2.8.5", @@ -46,15 +46,16 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "helmet": "^5.0.2", + "p-limit": "^3.1.0", "winston": "^3.7.2", "yn": "^5.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", + "@backstage/cli": "^0.18.0-next.1", "@types/compression": "^1.7.2", "@types/supertest": "^2.0.8", "msw": "^0.42.0", - "supertest": "^4.0.2" + "supertest": "^6.1.6" }, "files": [ "dist", diff --git a/plugins/vault-backend/src/service/VaultBuilder.tsx b/plugins/vault-backend/src/service/VaultBuilder.tsx index aa2858345f..67260f45ca 100644 --- a/plugins/vault-backend/src/service/VaultBuilder.tsx +++ b/plugins/vault-backend/src/service/VaultBuilder.tsx @@ -45,9 +45,6 @@ export type VaultBuilderReturn = { * @public */ export class VaultBuilder { - // private vaultTokenRefreshInterval: Duration = Duration.fromObject({ - // minutes: 60, - // }); private vaultClient?: VaultClient; /** @@ -118,26 +115,12 @@ export class VaultBuilder { fn: async () => { this.env.logger.info('Renewing Vault token'); const vaultClient = this.vaultClient ?? new VaultClient(this.env); - await this.renewToken(vaultClient); + await vaultClient.renewToken(); }, }); return this; } - /** - * Renews the token for vault using a defined client. - * - * @param vaultClient - The vault client used to renew the token - */ - protected async renewToken(vaultClient: VaultClient) { - const result = await vaultClient.renewToken(); - if (!result) { - this.env.logger.warn('Error renewing vault token'); - } else { - this.env.logger.info('Vault token renewed'); - } - } - /** * Builds the backend routes for Vault. * @@ -159,7 +142,7 @@ export class VaultBuilder { } const secrets = await vaultClient.listSecrets(path); - res.json(secrets); + res.json({ items: secrets }); }); return router; diff --git a/plugins/vault-backend/src/service/vaultApi.test.ts b/plugins/vault-backend/src/service/vaultApi.test.ts index 5a29633933..e80703c99f 100644 --- a/plugins/vault-backend/src/service/vaultApi.test.ts +++ b/plugins/vault-backend/src/service/vaultApi.test.ts @@ -93,8 +93,7 @@ describe('VaultApi', () => { it('should return success token renew', async () => { setupHandlers(); const api = new VaultClient({ config }); - const apiRenew = await api.renewToken(); - expect(apiRenew).toBeTruthy(); + expect(await api.renewToken()).toBe(undefined); }); it('should render frontend url', () => { diff --git a/plugins/vault-backend/src/service/vaultApi.ts b/plugins/vault-backend/src/service/vaultApi.ts index 0623780654..14607a694f 100644 --- a/plugins/vault-backend/src/service/vaultApi.ts +++ b/plugins/vault-backend/src/service/vaultApi.ts @@ -15,12 +15,14 @@ */ import { Config } from '@backstage/config'; +import { NotFoundError } from '@backstage/errors'; import fetch from 'cross-fetch'; +import plimit from 'p-limit'; import { getVaultConfig, VaultConfig } from '../config'; /** * Object received as a response from the Vault API when fetching secrets - * @public + * @internal */ export type VaultSecretList = { data: { @@ -40,9 +42,8 @@ export type VaultSecret = { /** * Object received as response when the token is renewed using the Vault API - * @public */ -export type RenewTokenResponse = { +type RenewTokenResponse = { auth: { client_token: string; }; @@ -63,10 +64,10 @@ export interface VaultApi { */ listSecrets(secretPath: string): Promise; /** - * Optional, to renew the token used to list the secrets. Returns true - * if the action was successfull, false otherwise. + * Optional, to renew the token used to list the secrets. Throws an + * error if the token renewal went wrong. */ - renewToken?(): Promise; + renewToken?(): Promise; } /** @@ -75,6 +76,7 @@ export interface VaultApi { */ export class VaultClient implements VaultApi { private vaultConfig: VaultConfig; + private readonly limit = plimit(5); constructor({ config }: { config: Config }) { this.vaultConfig = getVaultConfig(config); @@ -84,7 +86,7 @@ export class VaultClient implements VaultApi { path: string, query: { [key in string]: any }, method: string = 'GET', - ): Promise { + ): Promise { const url = new URL(path, this.vaultConfig.baseUrl); const response = await fetch( `${url.toString()}?${new URLSearchParams(query).toString()}`, @@ -96,15 +98,14 @@ export class VaultClient implements VaultApi { }, }, ); - if (response.status === 200) { + if (response.ok) { return (await response.json()) as T; + } else if (response.status === 404) { + throw new NotFoundError(`No secrets found in path '${path}'`); } - return undefined; - } - - private isFolder(secretName: string): boolean { - const regex = /^.*\/$/gm; - return regex.test(secretName); + throw new Error( + `Unexpected error while fetching secrets from path '${path}'`, + ); } getFrontendSecretsUrl(): string { @@ -116,17 +117,19 @@ export class VaultClient implements VaultApi { this.vaultConfig.kvVersion === 2 ? `v1/${this.vaultConfig.secretEngine}/metadata/${secretPath}` : `v1/${this.vaultConfig.secretEngine}/${secretPath}`; - const result = await this.callApi(listUrl, { list: true }); - if (!result) { - return []; - } + const result = await this.limit(() => + this.callApi(listUrl, { list: true }), + ); const secrets: VaultSecret[] = []; + await Promise.all( result.data.keys.map(async secret => { - if (this.isFolder(secret)) { + if (secret.endsWith('/')) { secrets.push( - ...(await this.listSecrets(`${secretPath}/${secret.slice(0, -1)}`)), + ...(await this.limit(() => + this.listSecrets(`${secretPath}/${secret.slice(0, -1)}`), + )), ); } else { secrets.push({ @@ -141,17 +144,13 @@ export class VaultClient implements VaultApi { return secrets; } - async renewToken(): Promise { + async renewToken(): Promise { const result = await this.callApi( 'v1/auth/token/renew-self', {}, 'POST', ); - if (!result) { - return false; - } this.vaultConfig.token = result.auth.client_token; - return true; } } diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 205b537dd4..af82aedff4 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-vault +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/catalog-model@1.1.0-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.1 + +## 0.1.1-next.0 + +### Patch Changes + +- 5ebf2c7023: Export missing parameters and added them to the api-report. Also adapted the API to the expected response from the backend +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.0 + - @backstage/core-components@0.9.6-next.0 + - @backstage/plugin-catalog-react@1.1.2-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/vault/api-report.md b/plugins/vault/api-report.md index a0b5773c70..f6fa8d1269 100644 --- a/plugins/vault/api-report.md +++ b/plugins/vault/api-report.md @@ -5,13 +5,36 @@ ```ts /// +import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; // @public export const EntityVaultCard: () => JSX.Element; +// @public +export function isVaultAvailable(entity: Entity): boolean; + +// @public (undocumented) +export const VAULT_SECRET_PATH_ANNOTATION = 'vault.io/secrets-path'; + +// @public +export interface VaultApi { + listSecrets(secretPath: string): Promise; +} + +// @public (undocumented) +export const vaultApiRef: ApiRef; + // @public export const vaultPlugin: BackstagePlugin<{}, {}>; +// @public +export type VaultSecret = { + name: string; + showUrl: string; + editUrl: string; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 54fc7cfc90..8c0fd85fdd 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.9.5", + "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.1", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", @@ -48,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/vault/src/api.test.ts b/plugins/vault/src/api.test.ts index 70c6a553df..3733d8be0f 100644 --- a/plugins/vault/src/api.test.ts +++ b/plugins/vault/src/api.test.ts @@ -27,18 +27,20 @@ describe('api', () => { const mockBaseUrl = 'https://api-vault.com/api/vault'; const discoveryApi = UrlPatternDiscovery.compile(mockBaseUrl); - const mockSecretsResult: VaultSecret[] = [ - { - name: 'secret::one', - editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::one`, - showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::one`, - }, - { - name: 'secret::two', - editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::two`, - showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::two`, - }, - ]; + const mockSecretsResult: { items: VaultSecret[] } = { + items: [ + { + name: 'secret::one', + editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::one`, + showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::one`, + }, + { + name: 'secret::two', + editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::two`, + showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::two`, + }, + ], + }; const setupHandlers = () => { server.use( @@ -47,31 +49,33 @@ describe('api', () => { if (path === 'test/success') { return res(ctx.json(mockSecretsResult)); } else if (path === 'test/error') { - return res(ctx.json([])); + return res(ctx.json({ items: [] })); } return res(ctx.status(400)); }), + rest.get(`${mockBaseUrl}/v1/secrets/`, (_req, res, ctx) => { + return res(ctx.json(mockSecretsResult)); + }), ); }; it('should return secrets', async () => { setupHandlers(); const api = new VaultClient({ discoveryApi }); - const secrets = await api.listSecrets('test/success'); - expect(secrets).toEqual(mockSecretsResult); + expect(await api.listSecrets('test/success')).toEqual( + mockSecretsResult.items, + ); }); it('should return empty secret list', async () => { setupHandlers(); const api = new VaultClient({ discoveryApi }); expect(await api.listSecrets('test/error')).toEqual([]); - expect(await api.listSecrets('')).toEqual([]); }); - it('should return no secrets', async () => { + it('should return all the secrets if no path defined', async () => { setupHandlers(); const api = new VaultClient({ discoveryApi }); - const secrets = await api.listSecrets(''); - expect(secrets).toEqual([]); + expect(await api.listSecrets('')).toEqual(mockSecretsResult.items); }); }); diff --git a/plugins/vault/src/api.ts b/plugins/vault/src/api.ts index 74b212429f..6c17e34d9a 100644 --- a/plugins/vault/src/api.ts +++ b/plugins/vault/src/api.ts @@ -14,21 +14,41 @@ * limitations under the License. */ import { DiscoveryApi, createApiRef } from '@backstage/core-plugin-api'; +import { NotFoundError } from '@backstage/errors'; +/** + * @public + */ export const vaultApiRef = createApiRef({ id: 'plugin.vault.service', }); +/** + * Object containing the secret name and some links. + * @public + */ export type VaultSecret = { name: string; showUrl: string; editUrl: string; }; +/** + * Interface for the VaultApi. + * @public + */ export interface VaultApi { + /** + * Returns a list of secrets used to show in a table. + * @param secretPath - The path where the secrets are stored in Vault + */ listSecrets(secretPath: string): Promise; } +/** + * Default implementation of the VaultApi. + * @public + */ export class VaultClient implements VaultApi { private readonly discoveryApi: DiscoveryApi; @@ -39,7 +59,7 @@ export class VaultClient implements VaultApi { private async callApi( path: string, query: { [key in string]: any }, - ): Promise { + ): Promise { const apiUrl = `${await this.discoveryApi.getBaseUrl('vault')}`; const response = await fetch( `${apiUrl}/${path}?${new URLSearchParams(query).toString()}`, @@ -49,23 +69,21 @@ export class VaultClient implements VaultApi { }, }, ); - if (response.status === 200) { + if (response.ok) { return (await response.json()) as T; + } else if (response.status === 404) { + throw new NotFoundError(`No secrets found in path '${path}'`); } - return undefined; + throw new Error( + `Unexpected error while fetching secrets from path '${path}'`, + ); } async listSecrets(secretPath: string): Promise { - if (secretPath === '') { - return []; - } - const result = await this.callApi( + const result = await this.callApi<{ items: VaultSecret[] }>( `v1/secrets/${encodeURIComponent(secretPath)}`, {}, ); - if (!result) { - return []; - } - return result; + return result.items; } } diff --git a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.test.tsx b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.test.tsx index f2b181562a..f3d7748b3e 100644 --- a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.test.tsx +++ b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.test.tsx @@ -68,18 +68,20 @@ describe('EntityVaultTable', () => { }, }; - const mockSecretsResult: VaultSecret[] = [ - { - name: 'secret::one', - editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::one`, - showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::one`, - }, - { - name: 'secret::two', - editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::two`, - showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::two`, - }, - ]; + const mockSecretsResult: { items: VaultSecret[] } = { + items: [ + { + name: 'secret::one', + editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::one`, + showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::one`, + }, + { + name: 'secret::two', + editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::two`, + showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::two`, + }, + ], + }; const setupHandlers = () => { server.use( diff --git a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx index 197c82c5b8..8311dea2aa 100644 --- a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx +++ b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; import { Entity } from '@backstage/catalog-model'; -import { Table, TableColumn } from '@backstage/core-components'; +import { Link, Table, TableColumn } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import { Box, Typography } from '@material-ui/core'; import Edit from '@material-ui/icons/Edit'; @@ -27,7 +27,7 @@ import { VAULT_SECRET_PATH_ANNOTATION } from '../../constants'; export const vaultSecretPath = (entity: Entity) => { const secretPath = - entity.metadata.annotations?.[VAULT_SECRET_PATH_ANNOTATION] ?? ''; + entity.metadata.annotations?.[VAULT_SECRET_PATH_ANNOTATION]; return { secretPath }; }; @@ -35,6 +35,11 @@ export const vaultSecretPath = (entity: Entity) => { export const EntityVaultTable = ({ entity }: { entity: Entity }) => { const vaultApi = useApi(vaultApiRef); const { secretPath } = vaultSecretPath(entity); + if (!secretPath) { + throw Error( + `The secret path is undefined. Please, define the annotation ${VAULT_SECRET_PATH_ANNOTATION}`, + ); + } const { value, loading, error } = useAsync(async (): Promise< VaultSecret[] > => { @@ -51,22 +56,22 @@ export const EntityVaultTable = ({ entity }: { entity: Entity }) => { return { secret: secret.name, view: ( - - + ), edit: ( - - + ), }; }); diff --git a/plugins/vault/src/conditions.ts b/plugins/vault/src/conditions.ts index 0ce34085e0..091c7117c2 100644 --- a/plugins/vault/src/conditions.ts +++ b/plugins/vault/src/conditions.ts @@ -16,6 +16,12 @@ import { Entity } from '@backstage/catalog-model'; import { VAULT_SECRET_PATH_ANNOTATION } from './constants'; +/** + * Checks if an entity contains the annotation for Vault. + * @param entity - The entity to check if the annotation exists + * @returns If the annotation exists or not + * @public + */ export function isVaultAvailable(entity: Entity): boolean { return Boolean( entity.metadata.annotations?.hasOwnProperty(VAULT_SECRET_PATH_ANNOTATION), diff --git a/plugins/vault/src/constants.ts b/plugins/vault/src/constants.ts index 1ac8b80b73..0d99c261d4 100644 --- a/plugins/vault/src/constants.ts +++ b/plugins/vault/src/constants.ts @@ -13,4 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/** + * @public + */ export const VAULT_SECRET_PATH_ANNOTATION = 'vault.io/secrets-path'; diff --git a/plugins/vault/src/index.ts b/plugins/vault/src/index.ts index c2d1fc3419..f69a787963 100644 --- a/plugins/vault/src/index.ts +++ b/plugins/vault/src/index.ts @@ -14,3 +14,7 @@ * limitations under the License. */ export { vaultPlugin, EntityVaultCard } from './plugin'; +export { isVaultAvailable } from './conditions'; +export { VAULT_SECRET_PATH_ANNOTATION } from './constants'; +export { vaultApiRef } from './api'; +export type { VaultApi, VaultSecret } from './api'; diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 01d99a138f..94179d1e6b 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-xcmetrics +## 0.2.27-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.1 + - @backstage/errors@1.1.0-next.0 + - @backstage/theme@0.2.16-next.0 + +## 0.2.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.9.6-next.0 + ## 0.2.26 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 1c93a9c8cb..572502f68b 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.26", + "version": "0.2.27-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,10 +24,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.5", + "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/errors": "^1.0.0", - "@backstage/theme": "^0.2.15", + "@backstage/errors": "^1.1.0-next.0", + "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.17.2", - "@backstage/core-app-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.3", - "@backstage/test-utils": "^1.1.1", + "@backstage/cli": "^0.18.0-next.1", + "@backstage/core-app-api": "^1.0.4-next.0", + "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 39d0e2725f..6bf41324eb 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2610,7 +2610,7 @@ ansi-to-html@^0.6.11: any-promise@^1.0.0: version "1.3.0" resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@^2.0.0: version "2.0.0" @@ -7039,12 +7039,7 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.1: - version "4.0.4" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz#07df81e61028e402735cdd49db701e4885b4e6e6" - integrity sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw== - -pirates@^4.0.5: +pirates@^4.0.1, pirates@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== @@ -8392,9 +8387,9 @@ style-to-object@0.3.0, style-to-object@^0.3.0: inline-style-parser "0.1.1" sucrase@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.21.0.tgz#6a5affdbe716b22e4dc99c57d366ad0d216444b9" - integrity sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ== + version "3.21.1" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz#7e29ddaca012764cf843280b00e74a843bdf790f" + integrity sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ== dependencies: commander "^4.0.0" glob "7.1.6" @@ -8552,7 +8547,7 @@ test-exclude@^6.0.0: thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" diff --git a/yarn.lock b/yarn.lock index c3ab158822..52cc4b6630 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@acuris/aws-es-connection@^2.2.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@acuris/aws-es-connection/-/aws-es-connection-2.3.0.tgz#bfa736163bdfe2e7fc12f8529eead949fb4e73fe" - integrity sha512-k8jSkdNwpSPty7oautGaJXoAzzPjP7WKbmaAE9i+vJrKWg9n2UtjesHeDhOAPzV9MG8EzXofGozYjaLdeTP+Ug== - dependencies: - aws4 "^1.11.0" - "@ampproject/remapping@^2.1.0": version "2.1.2" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" @@ -16,7 +9,7 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" -"@apidevtools/json-schema-ref-parser@^9.0.6": +"@apidevtools/json-schema-ref-parser@9.0.6", "@apidevtools/json-schema-ref-parser@^9.0.6": version "9.0.6" resolved "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== @@ -25,6 +18,29 @@ call-me-maybe "^1.0.1" js-yaml "^3.13.1" +"@apidevtools/openapi-schemas@^2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== + +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@^10.1.0": + version "10.1.0" + resolved "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6" + integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.6" + "@apidevtools/openapi-schemas" "^2.1.0" + "@apidevtools/swagger-methods" "^3.0.2" + "@jsdevtools/ono" "^7.1.3" + ajv "^8.6.3" + ajv-draft-04 "^1.0.0" + call-me-maybe "^1.0.1" + "@apollo/protobufjs@1.2.2": version "1.2.2" resolved "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.2.tgz#4bd92cd7701ccaef6d517cdb75af2755f049f87c" @@ -49,6 +65,14 @@ resolved "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz#02b04006442eaf037f4c4624146b12775d70d929" integrity sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg== +"@apollo/utils.keyvaluecache@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.1.tgz#46f310f859067efe9fa126156c6954f8381080d2" + integrity sha512-nLgYLomqjVimEzQ4cdvVQkcryi970NDvcRVPfd0OPeXhBfda38WjBq+WhQFk+czSHrmrSp34YHBxpat0EtiowA== + dependencies: + "@apollo/utils.logger" "^1.0.0" + lru-cache "^7.10.1" + "@apollo/utils.logger@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.0.tgz#6e3460a2250c2ef7c2c3b0be6b5e148a1596f12b" @@ -320,17 +344,17 @@ dependencies: debug "^4.1.1" -"@azure/msal-common@^6.4.0": - version "6.4.0" - resolved "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.4.0.tgz#434a55be9639cb5c7910c0cc1a46555ff0bc6c39" - integrity sha512-WZdgq9f9O8cbxGzdRwLLMM5xjmLJ2mdtuzgXeiGxIRkVVlJ9nZ6sWnDFKa2TX8j72UXD1IfL0p/RYNoTXYoGfg== +"@azure/msal-common@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.0.0.tgz#f4b52c6d9591cf8720dcb24c1d21fce2d186f871" + integrity sha512-EkaHGjv0kw1RljhboeffM91b+v9d5VtmyG+0a/gvdqjbLu3kDzEfoaS5BNM9QqMzbxgZylsjAjQDtxdHLX/ziA== "@azure/msal-node@^1.1.0", "@azure/msal-node@^1.3.0": - version "1.9.1" - resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.9.1.tgz#86f130fa50a5409a0e47a0ba192c7cdec42bd34c" - integrity sha512-chr914ZuKPvKEW1JPNDRhgdrzbA9PkVknV+q01h+eVhFZvHfO0pIFoP4dOU96ZdBkMmdD5kAP1Snv1gAdVXMIg== + version "1.10.0" + resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.10.0.tgz#ee3a26201c4899cc6928cc331c31d3568d3cb728" + integrity sha512-oSv9mg199FpRTe+fZ3o9NDYpKShOHqeceaNcCHJcKUaAaCojAbfbxD1Cvsti8BEsLKE6x0HcnjilnM1MKmZekA== dependencies: - "@azure/msal-common" "^6.4.0" + "@azure/msal-common" "^7.0.0" jsonwebtoken "^8.5.1" uuid "^8.3.0" @@ -1504,6 +1528,225 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@backstage/catalog-client@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@backstage/catalog-client/-/catalog-client-1.0.3.tgz#cb91472ccc31df322f69e7e4e80939b3535660cd" + integrity sha512-35Es9jFB9jOZTEtEeCyZHES0bcQkfX4qbmY1GuC6e6ZtO120w+595kmKxc744d7X2WXUIWvhRubqc9/w5blKbg== + dependencies: + "@backstage/catalog-model" "^1.0.3" + "@backstage/errors" "^1.0.0" + cross-fetch "^3.1.5" + +"@backstage/catalog-model@^1.0.0", "@backstage/catalog-model@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@backstage/catalog-model/-/catalog-model-1.0.3.tgz#0d7bd832add56650871b95894878540fc41a4ef9" + integrity sha512-rbXdA/CI8EzpsthlSI4JonLd4RZoki7IN6tFvivjKDMlW8IVb63BJXWO4VnvHH+LLYzH4/OaL051YeoaicdqYw== + dependencies: + "@backstage/config" "^1.0.1" + "@backstage/errors" "^1.0.0" + "@backstage/types" "^1.0.0" + ajv "^8.10.0" + json-schema "^0.4.0" + lodash "^4.17.21" + uuid "^8.0.0" + +"@backstage/core-components@^0.9.0", "@backstage/core-components@^0.9.5": + version "0.9.5" + resolved "https://registry.npmjs.org/@backstage/core-components/-/core-components-0.9.5.tgz#5a0b34867aaee0549bfa67b39a69c09588fa3c7a" + integrity sha512-kfAdN70idiEqHeH9ZQryn6C0RxJEKiRc/7srYIz0CVV88zJfc0nmZ5C/S10Gkht2xWfm95tTSw2P1vEYIBbfxg== + dependencies: + "@backstage/config" "^1.0.1" + "@backstage/core-plugin-api" "^1.0.3" + "@backstage/errors" "^1.0.0" + "@backstage/theme" "^0.2.15" + "@backstage/version-bridge" "^1.0.1" + "@material-table/core" "^3.1.0" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.57" + "@react-hookz/web" "^14.0.0" + "@types/react-sparklines" "^1.7.0" + "@types/react-text-truncate" "^0.14.0" + ansi-regex "^6.0.1" + classnames "^2.2.6" + d3-selection "^3.0.0" + d3-shape "^3.0.0" + d3-zoom "^3.0.0" + dagre "^0.8.5" + history "^5.0.0" + immer "^9.0.1" + lodash "^4.17.21" + pluralize "^8.0.0" + prop-types "^15.7.2" + qs "^6.9.4" + rc-progress "3.3.3" + react-helmet "6.1.0" + react-hook-form "^7.12.2" + react-markdown "^8.0.0" + react-router "6.0.0-beta.0" + react-router-dom "6.0.0-beta.0" + react-sparklines "^1.7.0" + react-syntax-highlighter "^15.4.5" + react-text-truncate "^0.19.0" + react-use "^17.3.2" + react-virtualized-auto-sizer "^1.0.6" + react-window "^1.8.6" + remark-gfm "^3.0.1" + zen-observable "^0.8.15" + zod "^3.11.6" + +"@backstage/errors@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@backstage/errors/-/errors-1.0.0.tgz#08ebf53afdeaca32362955ea8551e8ffa0bb3cd7" + integrity sha512-2SpjdhH9ZOQ4RGEeu3/A7ARkl/1E9E6uBGQZ2DZOU4azTK1UZG/HE1KBMOThp3jL/8is2vOIJZLBA3r3DxLfVw== + dependencies: + "@backstage/types" "^1.0.0" + cross-fetch "^3.1.5" + serialize-error "^8.0.1" + +"@backstage/integration-react@^1.0.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@backstage/integration-react/-/integration-react-1.1.1.tgz#936fd1441c47709fa8825360ea14ada26046b910" + integrity sha512-vCXErMhj90eW74A9gQwgKrc0Go5RXSEyM1wQV6+S91CZHYc3fdQJAfrxcmmUybGFtX2a2Yrmm67K8owG9WaYnQ== + dependencies: + "@backstage/config" "^1.0.1" + "@backstage/core-components" "^0.9.5" + "@backstage/core-plugin-api" "^1.0.3" + "@backstage/integration" "^1.2.1" + "@backstage/theme" "^0.2.15" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.57" + react-use "^17.2.4" + +"@backstage/integration@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@backstage/integration/-/integration-1.2.1.tgz#a1931d240c2fbd304f0b87d54272709f4ffe83ed" + integrity sha512-9rXD1iIGhKRCfowxWx9sRKxiv1JvDI6ucvtUeXIj1G27kT/Xy7uUcgB8CkVxsvSeog5Z1VdYkFkDmQbKQ6GPrg== + dependencies: + "@backstage/config" "^1.0.1" + "@backstage/errors" "^1.0.0" + "@octokit/auth-app" "^3.4.0" + "@octokit/rest" "^18.5.3" + cross-fetch "^3.1.5" + git-url-parse "^11.6.0" + lodash "^4.17.21" + luxon "^2.0.2" + +"@backstage/plugin-catalog-common@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@backstage/plugin-catalog-common/-/plugin-catalog-common-1.0.3.tgz#96b1de2847fec0533c49ee19f93781777eedfd0d" + integrity sha512-Sf5IQocTRQaTh9ofZUy4/szWwDl5Eek6odKVx6v33jrMot5i3grybOELrVM3/Kgcr+5/ixSSopgQPUFO/T9KBA== + dependencies: + "@backstage/plugin-permission-common" "^0.6.2" + "@backstage/plugin-search-common" "^0.3.5" + +"@backstage/plugin-catalog-react@^1.0.0", "@backstage/plugin-catalog-react@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.1.1.tgz#0441bcf1291349ad355ff51e28245d7ea26a3e01" + integrity sha512-HxowTsFaNmAp+TEb0YgBak/61SkwwRV3tUdF5O2dQugbgI3Ci8dMjN2J18LiOEFS13m6IlrCpNC1Db3QMRjwBA== + dependencies: + "@backstage/catalog-client" "^1.0.3" + "@backstage/catalog-model" "^1.0.3" + "@backstage/core-components" "^0.9.5" + "@backstage/core-plugin-api" "^1.0.3" + "@backstage/errors" "^1.0.0" + "@backstage/integration" "^1.2.1" + "@backstage/plugin-catalog-common" "^1.0.3" + "@backstage/plugin-permission-common" "^0.6.2" + "@backstage/plugin-permission-react" "^0.4.2" + "@backstage/theme" "^0.2.15" + "@backstage/types" "^1.0.0" + "@backstage/version-bridge" "^1.0.1" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.57" + classnames "^2.2.6" + jwt-decode "^3.1.0" + lodash "^4.17.21" + qs "^6.9.4" + react-router "6.0.0-beta.0" + react-use "^17.2.4" + yaml "^1.10.0" + zen-observable "^0.8.15" + +"@backstage/plugin-home@^0.4.19", "@backstage/plugin-home@^0.4.22": + version "0.4.22" + resolved "https://registry.npmjs.org/@backstage/plugin-home/-/plugin-home-0.4.22.tgz#efc54ebffb83a2a36dcd43e65142c30be5d8559d" + integrity sha512-0LPCyz1/nJraVdq+vkpS8g+8rnVTqY9oz5a+tOEnA6Beldlnd1xGa/qYfaH7s/5jFjd+XQRYoNw7qvioHLC16Q== + dependencies: + "@backstage/catalog-model" "^1.0.3" + "@backstage/config" "^1.0.1" + "@backstage/core-components" "^0.9.5" + "@backstage/core-plugin-api" "^1.0.3" + "@backstage/plugin-catalog-react" "^1.1.1" + "@backstage/plugin-stack-overflow" "^0.1.2" + "@backstage/theme" "^0.2.15" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.57" + lodash "^4.17.21" + react-router "6.0.0-beta.0" + react-use "^17.2.4" + +"@backstage/plugin-permission-common@^0.6.2": + version "0.6.2" + resolved "https://registry.npmjs.org/@backstage/plugin-permission-common/-/plugin-permission-common-0.6.2.tgz#2ab5cf3d8a4a3394edc0d552719df4f34804bfbb" + integrity sha512-tbKjm0xw6stoaFzeWL59XRz/yEEXxnBMgm3ioNbh0Qdbj44z8KivjkDjWPovI5DW6x0jFxzLQYCNMlZxOpqL6A== + dependencies: + "@backstage/config" "^1.0.1" + "@backstage/errors" "^1.0.0" + cross-fetch "^3.1.5" + uuid "^8.0.0" + zod "^3.11.6" + +"@backstage/plugin-permission-react@^0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.2.tgz#efc39619617e5800a68728871b87c772a0861711" + integrity sha512-isofTbK1gFgLTgr51efbFO0jWOkhQwzErL24pwY6gFVKnz7Z53AfGv1lHabxAWnNhEyTzLPMA/7s7lKuKEtOXw== + dependencies: + "@backstage/config" "^1.0.1" + "@backstage/core-plugin-api" "^1.0.3" + "@backstage/plugin-permission-common" "^0.6.2" + cross-fetch "^3.1.5" + react-router "6.0.0-beta.0" + react-use "^17.2.4" + swr "^1.1.2" + +"@backstage/plugin-search-common@^0.3.5": + version "0.3.5" + resolved "https://registry.npmjs.org/@backstage/plugin-search-common/-/plugin-search-common-0.3.5.tgz#6a374541f2bd7d9545e29abbaecc70e7ad1b5ea3" + integrity sha512-sq7IDjCLrgZQHBFi+lFVkna3lLRA5eldiTbit/rCUCO4Eq52lWdQHLrQAhsyuObmIWHDh6R2lp2qoL6aAC2AOg== + dependencies: + "@backstage/plugin-permission-common" "^0.6.2" + "@backstage/types" "^1.0.0" + +"@backstage/plugin-stack-overflow@^0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@backstage/plugin-stack-overflow/-/plugin-stack-overflow-0.1.2.tgz#bc140bb22d239a7106f91ea1d4c637551dc91ca5" + integrity sha512-6phLbR7E/iZjuNFFStsO2zcJYDijPTS8WEyxhM/rX1Q/OeliMgGBs8V4j1hfHgcjjLz4PPI+EDz/+eeDMi1c4w== + dependencies: + "@backstage/config" "^1.0.1" + "@backstage/core-components" "^0.9.5" + "@backstage/core-plugin-api" "^1.0.3" + "@backstage/plugin-home" "^0.4.22" + "@backstage/plugin-search-common" "^0.3.5" + "@backstage/theme" "^0.2.15" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@testing-library/jest-dom" "^5.10.1" + cross-fetch "^3.1.5" + lodash "^4.17.21" + qs "^6.9.4" + react-use "^17.2.4" + +"@backstage/theme@^0.2.15", "@backstage/theme@^0.2.6", "@backstage/theme@^0.2.7", "@backstage/theme@^0.2.9": + version "0.2.15" + resolved "https://registry.npmjs.org/@backstage/theme/-/theme-0.2.15.tgz#478491c9bca9dca85d5af08767ba512eabcd3669" + integrity sha512-Srl5q0X47tFofw6wuElkUqtlbYSfA3J3zlfN6jcQF4801mTrFRw+pVxZmrdxayt4gUzCN+me3mO7tij6F6xQUQ== + dependencies: + "@material-ui/core" "^4.12.2" + "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" @@ -1718,97 +1961,84 @@ human-id "^1.0.2" prettier "^1.19.1" -"@codemirror/autocomplete@^0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-0.20.0.tgz#390cc444ea36474e77117f2153caad84214f0edf" - integrity sha512-F6VOM8lImn5ApqxJcaWgdl7hhlw8B5yAfZJGlsQifcpNotkZOMND61mBFZ84OmSLWxtT8/smkSeLvJupKbjP9w== +"@codemirror/autocomplete@^6.0.0": + version "6.0.2" + resolved "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.0.2.tgz#119b9d147456418895de6fae09419465b58d7beb" + integrity sha512-9PDjnllmXan/7Uax87KGORbxerDJ/cu10SB+n4Jz0zXMEvIh3+TGgZxhIvDOtaQ4jDBQEM7kHYW4vLdQB0DGZQ== dependencies: - "@codemirror/language" "^0.20.0" - "@codemirror/state" "^0.20.0" - "@codemirror/view" "^0.20.0" - "@lezer/common" "^0.16.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.0.0" -"@codemirror/basic-setup@^0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@codemirror/basic-setup/-/basic-setup-0.20.0.tgz#ed331e0b2d29efc0a09317de9e10467b992b0c7b" - integrity sha512-W/ERKMLErWkrVLyP5I8Yh8PXl4r+WFNkdYVSzkXYPQv2RMPSkWpr2BgggiSJ8AHF/q3GuApncDD8I4BZz65fyg== +"@codemirror/commands@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@codemirror/commands/-/commands-6.0.0.tgz#9eaa4d53e9cdb2e13da52c8a03636a9f9ad45d2b" + integrity sha512-nVJDPiCQXWXj5AZxqNVXyIM3nOYauF4Dko9NGPSwgVdK+lXWJQhI5LGhS/AvdG5b7u7/pTQBkrQmzkLWRBF62A== dependencies: - "@codemirror/autocomplete" "^0.20.0" - "@codemirror/commands" "^0.20.0" - "@codemirror/language" "^0.20.0" - "@codemirror/lint" "^0.20.0" - "@codemirror/search" "^0.20.0" - "@codemirror/state" "^0.20.0" - "@codemirror/view" "^0.20.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.0.0" -"@codemirror/commands@^0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@codemirror/commands/-/commands-0.20.0.tgz#51405d442e6b8687b63e8fa27effc28179917c88" - integrity sha512-v9L5NNVA+A9R6zaFvaTbxs30kc69F6BkOoiEbeFw4m4I0exmDEKBILN6mK+GksJtvTzGBxvhAPlVFTdQW8GB7Q== +"@codemirror/language@^6.0.0": + version "6.1.0" + resolved "https://registry.npmjs.org/@codemirror/language/-/language-6.1.0.tgz#7686f0ecafd958c35332c3cc2aa3d564fd33dc44" + integrity sha512-CeqY80nvUFrJcXcBW115aNi06D0PS8NSW6nuJRSwbrYFkE0SfJnPfyLGrcM90AV95lqg5+4xUi99BCmzNaPGJg== dependencies: - "@codemirror/language" "^0.20.0" - "@codemirror/state" "^0.20.0" - "@codemirror/view" "^0.20.0" - "@lezer/common" "^0.16.0" - -"@codemirror/language@^0.20.0": - version "0.20.2" - resolved "https://registry.npmjs.org/@codemirror/language/-/language-0.20.2.tgz#31c3712eac2251810986272dcd6a50510e0c1529" - integrity sha512-WB3Bnuusw0xhVvhBocieYKwJm04SOk5bPoOEYksVHKHcGHFOaYaw+eZVxR4gIqMMcGzOIUil0FsCmFk8yrhHpw== - dependencies: - "@codemirror/state" "^0.20.0" - "@codemirror/view" "^0.20.0" - "@lezer/common" "^0.16.0" - "@lezer/highlight" "^0.16.0" - "@lezer/lr" "^0.16.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.0.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" style-mod "^4.0.0" -"@codemirror/legacy-modes@^0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-0.20.0.tgz#a1cea5eed05fa09a0cac4a39f41e362a136da5ea" - integrity sha512-SYllodnzD8OI6Y6NoFzCv+77cU9aTdfqDO0Zn8j5PbjUIAD+pIofwHAvecd9/ePLAICr+EYCEuqUxldHAR+pLQ== +"@codemirror/legacy-modes@^6.1.0": + version "6.1.0" + resolved "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.1.0.tgz#f1c6d504069509c8d3d9220453132e559477400c" + integrity sha512-V/PgGpndkZeTn3Hdlg/gd8MLFdyvTCIX+iwJzjUw5iNziWiNsAY8X0jvf7m3gSfxnKkNzmid6l0g4rYSpiDaCw== dependencies: - "@codemirror/language" "^0.20.0" + "@codemirror/language" "^6.0.0" -"@codemirror/lint@^0.20.0": - version "0.20.1" - resolved "https://registry.npmjs.org/@codemirror/lint/-/lint-0.20.1.tgz#791c83642f76103bbf6b8bfdc8020eff2b78b5e2" - integrity sha512-aWbeicDiNe5tb2aZuXs7sKk3hQ89Z1YcUuUX8ngQu23tT6EY4kcY2cayDjizvkLn8iHkObNf97uSudjNmUon2Q== +"@codemirror/lint@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@codemirror/lint/-/lint-6.0.0.tgz#a249b021ac9933b94fe312d994d220f0ef11a157" + integrity sha512-nUUXcJW1Xp54kNs+a1ToPLK8MadO0rMTnJB8Zk4Z8gBdrN0kqV7uvUraU/T2yqg+grDNR38Vmy/MrhQN/RgwiA== dependencies: - "@codemirror/state" "^0.20.0" - "@codemirror/view" "^0.20.2" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/search@^0.20.0": - version "0.20.1" - resolved "https://registry.npmjs.org/@codemirror/search/-/search-0.20.1.tgz#9eba0514218a673e29501a889a4fcb7da7ce24ad" - integrity sha512-ROe6gRboQU5E4z6GAkNa2kxhXqsGNbeLEisbvzbOeB7nuDYXUZ70vGIgmqPu0tB+1M3F9yWk6W8k2vrFpJaD4Q== +"@codemirror/search@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@codemirror/search/-/search-6.0.0.tgz#43bd6341d9aff18869386d2fce27519850e919e3" + integrity sha512-rL0rd3AhI0TAsaJPUaEwC63KHLO7KL0Z/dYozXj6E7L3wNHRyx7RfE0/j5HsIf912EE5n2PCb4Vg0rGYmDv4UQ== dependencies: - "@codemirror/state" "^0.20.0" - "@codemirror/view" "^0.20.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/state@^0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@codemirror/state/-/state-0.20.0.tgz#3343d209169813b0152b77361cd78bea01549a73" - integrity sha512-R3XrAWCS5Xm9lx+4pDET4EUPEg+8bDfAa5zoOFIhx+VChsfew9Vy33dAjCXS5ES4Q8UecW4WM4UudmUFpZ+86A== +"@codemirror/state@^6.0.0": + version "6.0.1" + resolved "https://registry.npmjs.org/@codemirror/state/-/state-6.0.1.tgz#a1994f14c49e2f77cb9e26aef35f63a8b3707c6c" + integrity sha512-6vYgaXc4KjSY0BUfSVDJooGcoswg/RJZpq/ZGjsUYmY0KN1lmB8u03nv+jiG1ncUV5qoggyxFT5AGD5Ak+5Zrw== -"@codemirror/theme-one-dark@^0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-0.20.0.tgz#112074e446d46931d1104405154ccbe8c8874009" - integrity sha512-iqTKaiOZddwlc2rYF+9D60Gfyz9EsSawVejSjyP2FCtOwZ1X0frG5/ByTKH5FBDD2+P7W8+h/OIG4r5dWq4bgA== +"@codemirror/theme-one-dark@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.0.0.tgz#81a999a568217f68522bd8846cbf7210ca2a59df" + integrity sha512-jTCfi1I8QT++3m21Ui6sU8qwu3F/hLv161KLxfvkV1cYWSBwyUanmQFs89ChobQjBHi2x7s2k71wF9WYvE8fdw== dependencies: - "@codemirror/language" "^0.20.0" - "@codemirror/state" "^0.20.0" - "@codemirror/view" "^0.20.0" - "@lezer/highlight" "^0.16.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/highlight" "^1.0.0" -"@codemirror/view@^0.20.0", "@codemirror/view@^0.20.2": - version "0.20.7" - resolved "https://registry.npmjs.org/@codemirror/view/-/view-0.20.7.tgz#1d0acc740f71f92abef4b437c030d4e6c39ab6dc" - integrity sha512-pqEPCb9QFTOtHgAH5XU/oVy9UR/Anj6r+tG5CRmkNVcqSKEPmBU05WtN/jxJCFZBXf6HumzWC9ydE4qstO3TxQ== +"@codemirror/view@^6.0.0": + version "6.0.2" + resolved "https://registry.npmjs.org/@codemirror/view/-/view-6.0.2.tgz#27f4d08edd10a3678cf15390b4fba5e2a7220873" + integrity sha512-mnVT/q1JvKPjpmjXJNeCi/xHyaJ3abGJsumIVpdQ1nE1MXAyHf7GHWt8QpWMUvDiqF0j+inkhVR2OviTdFFX7Q== dependencies: - "@codemirror/state" "^0.20.0" + "@codemirror/state" "^6.0.0" style-mod "^4.0.0" w3c-keyname "^2.2.4" @@ -1898,10 +2128,10 @@ find-my-way "^4.3.3" into-stream "^6.0.0" -"@elastic/elasticsearch@7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.13.0.tgz#6dcf511dfa91187e22c81e54f41f4bd0fd96b4d6" - integrity sha512-WgwLWo2p9P2tdqzBGX9fHeG8p5IOTXprXNTECQG2mJ7z9n93N5AFBJpEw4d35tWWeCWi9jI13A2wzQZH7XZ/xw== +"@elastic/elasticsearch@^7.13.0": + version "7.17.0" + resolved "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.17.0.tgz#589fb219234cf1b0da23744e82b1d25e2fe9a797" + integrity sha512-5QLPCjd0uLmLj1lSuKSThjNpq39f6NmlTy9ROLFwG5gjyTgpwSqufDeYG/Fm43Xs05uF7WcscoO7eguI3HuuYA== dependencies: debug "^4.3.1" hpagent "^0.1.1" @@ -2051,9 +2281,9 @@ xcase "^2.0.1" "@google-cloud/container@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/container/-/container-4.0.0.tgz#9bcfe2d404b739844766a91c0dd2b3fc63d014d1" - integrity sha512-nndrAVyZ34I9LykL1DIDONskl/hRmXmvtTbWrcm+Jep6Lm1bCJ0LkgMGg8yLS1tqWrdhIl73+xwcVfiY2dm7ig== + version "4.0.1" + resolved "https://registry.npmjs.org/@google-cloud/container/-/container-4.0.1.tgz#a3206d3030539e09b7beee8f351fad86c77af79d" + integrity sha512-JpsOsdKnCQm1b5aVNnO/2Urdg+qbCLi/srEnTupRj73Pu5wXLHXOCe3vy8Z2GvyCqu7qr89fMREQ4kO4QijnHA== dependencies: google-gax "^3.0.1" @@ -2439,7 +2669,7 @@ "@graphql-tools/utils" "8.6.13" tslib "^2.4.0" -"@graphql-tools/schema@8.3.10", "@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.1.1", "@graphql-tools/schema@^8.1.2", "@graphql-tools/schema@^8.3.1": +"@graphql-tools/schema@8.3.10", "@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.1.2", "@graphql-tools/schema@^8.3.1": version "8.3.10" resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.3.10.tgz#c3e373e6ad854f533fc7e55859dd8f9e81de30dd" integrity sha512-tfhjSTi3OzheDrVzG7rkPZg2BbQjmZRLM2vvQoM2b1TnUwgUIbpAgcnf+AWDLRsoCOWlezeLgij1BLeAR0Q0jg== @@ -3933,24 +4163,24 @@ npmlog "^4.1.2" write-file-atomic "^3.0.3" -"@lezer/common@^0.16.0": - version "0.16.0" - resolved "https://registry.npmjs.org/@lezer/common/-/common-0.16.0.tgz#b6023a0a682b0b7676d0e7f0e0838f71bde39fcd" - integrity sha512-H6sPCku+asKWYaNjwfQ1Uvcay9UP1Pdzu4qpy8GtRZ0cKT2AAGnj9MQGiRtY18MDntvhYRJxNGv7FNWOSV/e8A== +"@lezer/common@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@lezer/common/-/common-1.0.0.tgz#1c95ae53ec17706aa3cbcc88b52c23f22ed56096" + integrity sha512-ohydQe+Hb+w4oMDvXzs8uuJd2NoA3D8YDcLiuDsLqH+yflDTPEpgCsWI3/6rH5C3BAedtH1/R51dxENldQceEA== -"@lezer/highlight@^0.16.0": - version "0.16.0" - resolved "https://registry.npmjs.org/@lezer/highlight/-/highlight-0.16.0.tgz#95f7b7ee3c32c8a0f6ce499c085e8b1f927ffbdc" - integrity sha512-iE5f4flHlJ1g1clOStvXNLbORJoiW4Kytso6ubfYzHnaNo/eo5SKhxs4wv/rtvwZQeZrK3we8S9SyA7OGOoRKQ== +"@lezer/highlight@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.0.0.tgz#1dc82300f5d39fbd67ae1194b5519b4c381878d3" + integrity sha512-nsCnNtim90UKsB5YxoX65v3GEIw3iCHw9RM2DtdgkiqAbKh9pCdvi8AWNwkYf10Lu6fxNhXPpkpHbW6mihhvJA== dependencies: - "@lezer/common" "^0.16.0" + "@lezer/common" "^1.0.0" -"@lezer/lr@^0.16.0": - version "0.16.1" - resolved "https://registry.npmjs.org/@lezer/lr/-/lr-0.16.1.tgz#abe8c538d3f1a811ce5731847e3d0470c7709dcd" - integrity sha512-RuRD84dWY9If8BanfaaWNe0YhRdYWtni92GpB4C4/7JgHyAIfdkJz7miBjgILm3gOsBjJsJh56vb1ckxSQEWBg== +"@lezer/lr@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@lezer/lr/-/lr-1.0.0.tgz#89e30c1e710b8715ac5c847ad063418c51d6e750" + integrity sha512-k6DEqBh4HxqO/cVGedb6Ern6LS7K6IOzfydJ5WaqCR26v6UR9sIFyb6PS+5rPUs/mXgnBR/QQCW7RkyjSCMoQA== dependencies: - "@lezer/common" "^0.16.0" + "@lezer/common" "^1.0.0" "@manypkg/find-root@^1.1.0": version "1.1.0" @@ -4128,9 +4358,9 @@ react-is "^16.8.0 || ^17.0.0" "@maxim_mazurok/gapi.client.calendar@^3.0.20220408": - version "3.0.20220610" - resolved "https://registry.npmjs.org/@maxim_mazurok/gapi.client.calendar/-/gapi.client.calendar-3.0.20220610.tgz#46e0092da54fc8eb1342a3d1af04a071a761faac" - integrity sha512-pZwIaTw+PizFSXrF5WqP4dj+b1Vlj/hNwBY4ocWpJ2uhBDoBPAVIc8lEUNwNZVDbAgtbWHD2Kl84UsP1wmBS+w== + version "3.0.20220617" + resolved "https://registry.npmjs.org/@maxim_mazurok/gapi.client.calendar/-/gapi.client.calendar-3.0.20220617.tgz#140bbfd2caa1770fedbdaec4182eb43684f2d876" + integrity sha512-Vek5Y655GUi4RmUs3cNLfo/KQeReEuvcViJ0KYHl28KmC2Pqmxb4V2YIUhsH7BGVyq84cTIT59qHSirB919Prw== dependencies: "@types/gapi.client" "*" @@ -4175,9 +4405,9 @@ typescript "~4.6.3" "@microsoft/microsoft-graph-types@^2.6.0": - version "2.20.0" - resolved "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.20.0.tgz#fc532a5dc146c0b8a6f78a633fe930535f8cdc42" - integrity sha512-T1EPoYdH4124Rg+h261dvW2qAeSRAotHM/6lv10fDsYX4DWsppvresmfhGbPrLApK/lRTRj93bn4/Nwwmdv4Zg== + version "2.22.0" + resolved "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.22.0.tgz#7ceb222311770ed5b240d627b657d25b3979964e" + integrity sha512-iKc5L036hc/wu13DX5kGf//3/WqTAErAPTyYKG6zT3vG070xXaaP7PInODznfyZduhiOvavmrRlQb34ajeDTUA== "@microsoft/tsdoc-config@~0.16.1": version "0.16.1" @@ -4737,6 +4967,11 @@ resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== +"@octokit/openapi-types@^12.4.0": + version "12.4.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.4.0.tgz#fd8bf5db72bd566c5ba2cb76754512a9ebe66e71" + integrity sha512-Npcb7Pv30b33U04jvcD7l75yLU0mxhuX2Xqrn51YyZ5WTkF04bpbxLaZ6GcaTqu03WZQHoO/Gbfp95NGRueDUA== + "@octokit/openapi-types@^7.3.2": version "7.3.2" resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.3.2.tgz#065ce49b338043ec7f741316ce06afd4d459d944" @@ -4754,6 +4989,13 @@ dependencies: "@octokit/types" "^6.34.0" +"@octokit/plugin-paginate-rest@^2.18.0": + version "2.19.0" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.19.0.tgz#b52eae6ecacfa1f5583dc2cc0985cfbed3ca78b0" + integrity sha512-hQ4Qysg2hNmEMuZeJkvyzM4eSZiTifOKqYAMsW8FnxFKowhuwWICSgBQ9Gn9GpUmgKB7qaf1hFvMjYaTAg5jQA== + dependencies: + "@octokit/types" "^6.36.0" + "@octokit/plugin-paginate-rest@^2.6.2": version "2.7.0" resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.7.0.tgz#6bb7b043c246e0654119a6ec4e72a172c9e2c7f3" @@ -4787,6 +5029,14 @@ "@octokit/types" "^6.34.0" deprecation "^2.3.1" +"@octokit/plugin-rest-endpoint-methods@^5.14.0": + version "5.15.0" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.15.0.tgz#6c8251b55c33315a6e53e5b55654f72023ed5049" + integrity sha512-Gsw9+Xm56jVhfbJoy4pt6eOOyf8/3K6CAnx1Sl7U2GhZWcg8MR6YgXWnpfdF69S2ViMXLA7nfvTDAsZpFlkLRw== + dependencies: + "@octokit/types" "^6.36.0" + deprecation "^2.3.1" + "@octokit/plugin-retry@^3.0.9": version "3.0.9" resolved "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz#ae625cca1e42b0253049102acd71c1d5134788fe" @@ -4858,31 +5108,38 @@ dependencies: "@octokit/openapi-types" "^7.3.2" -"@octokit/types@^6.26.0", "@octokit/types@^6.27.1", "@octokit/types@^6.34.0": +"@octokit/types@^6.27.1", "@octokit/types@^6.34.0": version "6.34.0" resolved "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" integrity sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw== dependencies: "@octokit/openapi-types" "^11.2.0" +"@octokit/types@^6.35.0", "@octokit/types@^6.36.0": + version "6.37.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-6.37.0.tgz#32eb78edb34cf5cea4ba5753ab8db75b776d617a" + integrity sha512-BXWQhFKRkjX4dVW5L2oYa0hzWOAqsEsujXsQLSdepPoDZfYdubrD1KDGpyNldGXtR8QM/WezDcxcIN1UKJMGPA== + dependencies: + "@octokit/openapi-types" "^12.4.0" + "@octokit/webhooks-methods@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz#1108b9ea661ca6c81e4a8bfa63a09eb27d5bc2db" integrity sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig== -"@octokit/webhooks-types@5.7.1": - version "5.7.1" - resolved "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.7.1.tgz#26452dcd72fa77ac85bb188fda2a5980eb292932" - integrity sha512-zabCzfWvvquxDzj1lU7GhJQteACGfGXnHfROJD4A7LKhRjlkaggoSkE5cWQJJ6nW2t/UI51dSFrEA+A4mhqfPw== +"@octokit/webhooks-types@5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz#b76d1a3e3ad82cec5680d3c6c3443a620047a6ef" + integrity sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw== "@octokit/webhooks@^9.0.1", "@octokit/webhooks@^9.14.1": - version "9.25.0" - resolved "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.25.0.tgz#f1bd7815af59fb37892b87c86d2cb8625a570e9a" - integrity sha512-pyCraAmxHSnfTMe4K+QnNH/nSCJolCc++J2SAfYBwPFm6gg2WTGxWuegzuHul+Xm71+V9qL2NhIXX48U7MvTIA== + version "9.26.0" + resolved "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.26.0.tgz#cf453bb313da3b66f1a90c84464d978e1c625cce" + integrity sha512-foZlsgrTDwAmD5j2Czn6ji10lbWjGDVsUxTIydjG9KTkAWKJrFapXJgO5SbGxRwfPd3OJdhK3nA2YPqVhxLXqA== dependencies: "@octokit/request-error" "^2.0.2" "@octokit/webhooks-methods" "^2.0.0" - "@octokit/webhooks-types" "5.7.1" + "@octokit/webhooks-types" "5.8.0" aggregate-error "^3.1.0" "@open-draft/until@^1.0.3": @@ -4919,6 +5176,16 @@ rxjs "7.5.5" tslib "2.0.3" +"@opensearch-project/opensearch@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@opensearch-project/opensearch/-/opensearch-1.1.0.tgz#8b3c8b4cbcea01755ba092d2997bf0b4ca7f22f7" + integrity sha512-1TDw92JL8rD1b2QGluqBsIBLIiD5SGciIpz4qkrGAe9tcdfQ1ptub5e677rhWl35UULSjr6hP8M6HmISZ/M5HQ== + dependencies: + debug "^4.3.1" + hpagent "^0.1.1" + ms "^2.1.3" + secure-json-parse "^2.4.0" + "@opentelemetry/api@^1.0.1": version "1.0.4" resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.4.tgz#a167e46c10d05a07ab299fc518793b0cff8f6924" @@ -4995,9 +5262,9 @@ "@react-hookz/deep-equal" "^1.0.1" "@react-hookz/web@^14.0.0": - version "14.2.2" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.2.2.tgz#eee0085f954e5b62d0a6c5b20d8786c28abfb9ad" - integrity sha512-6FeZHKV3FFOYnbSJMkkqXDoMuIX0HEFJlDF4LpHR7RsA3zrH2xzhtF8nSYZ+pG6fDIqYKID9yQuILFmbAWaqCQ== + version "14.3.0" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.3.0.tgz#ccfcfa65aa1e56ca5a3b258a9bd987e0daa67bae" + integrity sha512-lmZ9rAoHbBFZo0v72cjHMCY/hz9Wp6WQd/Kx53A+HumxkAaJT3AuBkd9jJgrtdsNiHdG0IEr93/oOza3+G6kVA== dependencies: "@react-hookz/deep-equal" "^1.0.2" @@ -5070,9 +5337,9 @@ zustand "3.6.9" "@roadiehq/backstage-plugin-github-pull-requests@^2.0.0": - version "2.1.3" - resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-pull-requests/-/backstage-plugin-github-pull-requests-2.1.3.tgz#d37869c2ff5a51794d3d166e80260937e1d51e11" - integrity sha512-2/HVfFFbmSwRTweTYVh5TYEa7Rl2+TPI2nVPps9yse6DBYPpo26XBvhnRT8O8OdJIJ0D4IQe1mZxpeFiDPZQpA== + version "2.2.0" + resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-pull-requests/-/backstage-plugin-github-pull-requests-2.2.0.tgz#6c62c965842819bae185f96e1fbd1c26cf64c564" + integrity sha512-UNpfVMEx3WmUqIpIWPvf8uEZzCClff5H2krT/8iS3yaEP1ng9ZfLQPV7JgF8Bvaad37M08mCuvdmurtL6L3xSw== dependencies: "@backstage/catalog-model" "^1.0.0" "@backstage/core-components" "^0.9.0" @@ -5134,7 +5401,7 @@ dependencies: "@rollup/pluginutils" "^3.0.8" -"@rollup/plugin-node-resolve@^13.0.0": +"@rollup/plugin-node-resolve@^13.0.6": version "13.3.0" resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== @@ -5212,6 +5479,15 @@ dependencies: any-observable "^0.3.0" +"@short.io/opensearch-mock@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@short.io/opensearch-mock/-/opensearch-mock-0.3.1.tgz#41678404b94342ac60263a8df590f9b1efa80622" + integrity sha512-gwLTzxJrZNGVQNn+FHLhpw7at3jHb6tNczq2hvFPJ3C3nLaCBRkbP2IQHrIDzklLBVFV83Ug0Xgs73A5o9eLtg== + dependencies: + fast-deep-equal "^3.1.3" + find-my-way "^4.3.3" + into-stream "^6.0.0" + "@sideway/address@^4.1.0": version "4.1.1" resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.1.tgz#9e321e74310963fdf8eebfbee09c7bd69972de4d" @@ -5479,9 +5755,9 @@ redent "^3.0.0" "@testing-library/react-hooks@^8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.0.tgz#7d0164bffce4647f506039de0a97f6fcbd20f4bf" - integrity sha512-uZqcgtcUUtw7Z9N32W13qQhVAD+Xki2hxbTR461MKax8T6Jr8nsUvZB+vcBTkzY2nFvsUet434CsgF0ncW2yFw== + version "8.0.1" + resolved "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz#0924bbd5b55e0c0c0502d1754657ada66947ca12" + integrity sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g== dependencies: "@babel/runtime" "^7.12.5" react-error-boundary "^3.1.0" @@ -5964,10 +6240,10 @@ resolved "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.28", "@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.5": - version "4.17.28" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" - integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.29", "@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.5": + version "4.17.29" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== dependencies: "@types/node" "*" "@types/qs" "*" @@ -6809,9 +7085,9 @@ "@types/node" "*" "@types/tern@*": - version "0.23.3" - resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.3.tgz#4b54538f04a88c9ff79de1f6f94f575a7f339460" - integrity sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w== + version "0.23.4" + resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" + integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== dependencies: "@types/estree" "*" @@ -6823,9 +7099,9 @@ terser-webpack-plugin "*" "@types/testing-library__jest-dom@^5.9.1": - version "5.14.4" - resolved "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.4.tgz#21567ec845f4efee55923842c79728dc49c1650b" - integrity sha512-EUCs9PTBOEyfRtLKkKd31YrRCx/9Wxjy2Uqb6IH/KAOr7/vP0i8iClOyxQqjm/UxMGU5r5s2vOBM7vSPQVmabg== + version "5.14.5" + resolved "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" + integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== dependencies: "@types/jest" "*" @@ -6960,13 +7236,13 @@ integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== "@typescript-eslint/eslint-plugin@^5.9.0": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.27.1.tgz#fdf59c905354139046b41b3ed95d1609913d0758" - integrity sha512-6dM5NKT57ZduNnJfpY81Phe9nc9wolnMCnknb1im6brWi1RYv84nbMS3olJa27B6+irUVV1X/Wb+Am0FjJdGFw== + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" + integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== dependencies: - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/type-utils" "5.27.1" - "@typescript-eslint/utils" "5.27.1" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/type-utils" "5.29.0" + "@typescript-eslint/utils" "5.29.0" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -6987,13 +7263,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.9.0": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.27.1.tgz#3a4dcaa67e45e0427b6ca7bb7165122c8b569639" - integrity sha512-7Va2ZOkHi5NP+AZwb5ReLgNF6nWLGTeUJfxdkVUAPPSaAdbWNnFZzLZ4EGGmmiCTg+AwlbE1KyUYTBglosSLHQ== + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" + integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== dependencies: - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/typescript-estree" "5.27.1" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.20.0": @@ -7004,13 +7280,13 @@ "@typescript-eslint/types" "5.20.0" "@typescript-eslint/visitor-keys" "5.20.0" -"@typescript-eslint/scope-manager@5.27.1": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.27.1.tgz#4d1504392d01fe5f76f4a5825991ec78b7b7894d" - integrity sha512-fQEOSa/QroWE6fAEg+bJxtRZJTH8NTskggybogHt4H9Da8zd4cJji76gA5SBlR0MgtwF7rebxTbDKB49YUCpAg== +"@typescript-eslint/scope-manager@5.29.0": + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" + integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" "@typescript-eslint/scope-manager@5.9.0": version "5.9.0" @@ -7020,12 +7296,12 @@ "@typescript-eslint/types" "5.9.0" "@typescript-eslint/visitor-keys" "5.9.0" -"@typescript-eslint/type-utils@5.27.1": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.27.1.tgz#369f695199f74c1876e395ebea202582eb1d4166" - integrity sha512-+UC1vVUWaDHRnC2cQrCJ4QtVjpjjCgjNFpg8b03nERmkHv9JV9X5M19D7UFMd+/G7T/sgFwX2pGmWK38rqyvXw== +"@typescript-eslint/type-utils@5.29.0": + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" + integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== dependencies: - "@typescript-eslint/utils" "5.27.1" + "@typescript-eslint/utils" "5.29.0" debug "^4.3.4" tsutils "^3.21.0" @@ -7034,10 +7310,10 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== -"@typescript-eslint/types@5.27.1": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.27.1.tgz#34e3e629501349d38be6ae97841298c03a6ffbf1" - integrity sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg== +"@typescript-eslint/types@5.29.0": + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" + integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== "@typescript-eslint/types@5.9.0": version "5.9.0" @@ -7057,13 +7333,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.27.1": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.1.tgz#7621ee78607331821c16fffc21fc7a452d7bc808" - integrity sha512-DnZvvq3TAJ5ke+hk0LklvxwYsnXpRdqUY5gaVS0D4raKtbznPz71UJGnPTHEFo0GDxqLOLdMkkmVZjSpET1hFw== +"@typescript-eslint/typescript-estree@5.29.0": + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" + integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -7083,15 +7359,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/utils@5.27.1": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.27.1.tgz#b4678b68a94bc3b85bf08f243812a6868ac5128f" - integrity sha512-mZ9WEn1ZLDaVrhRaYgzbkXBkTPghPFsup8zDbbsYTxC5OmqrFE7skkKS/sraVsLP3TcT3Ki5CSyEFBRkLH/H/w== +"@typescript-eslint/utils@5.29.0": + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" + integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/typescript-estree" "5.27.1" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -7115,12 +7391,12 @@ "@typescript-eslint/types" "5.20.0" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.27.1": - version "5.27.1" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.1.tgz#05a62666f2a89769dac2e6baa48f74e8472983af" - integrity sha512-xYs6ffo01nhdJgPieyk7HAOpjhTsx7r/oB9LWEhwAXgwn33tkr+W8DI2ChboqhZlC4q3TC6geDYPoiX8ROqyOQ== +"@typescript-eslint/visitor-keys@5.29.0": + version "5.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" + integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== dependencies: - "@typescript-eslint/types" "5.27.1" + "@typescript-eslint/types" "5.29.0" eslint-visitor-keys "^3.3.0" "@typescript-eslint/visitor-keys@5.9.0": @@ -7131,16 +7407,14 @@ "@typescript-eslint/types" "5.9.0" eslint-visitor-keys "^3.0.0" -"@uiw/react-codemirror@^4.7.0": - version "4.7.0" - resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.7.0.tgz#cca6cb2e91f5c5c5e545b389cc55fb307087be75" - integrity sha512-gRBsIScecZzqj1/vqPZ6XxykccBkp+qv6wLFyTk2DxHzuPl4cDIQwqCBl81u80by5nCKambceRkTvpiQ6oJ2Ew== +"@uiw/react-codemirror@^4.9.3": + version "4.9.4" + resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.9.4.tgz#4643201f279fed103f2cf15df9431931fe4e9f15" + integrity sha512-IsC5xDevpIeLMzHQQwT2W40gFFIdKeT1T0DHjzzai+s5SIrMlGe3QSHWeC1wSO7FtfNxFpFlTYMGJm5JwUviMA== dependencies: "@babel/runtime" ">=7.11.0" - "@codemirror/basic-setup" "^0.20.0" - "@codemirror/state" "^0.20.0" - "@codemirror/theme-one-dark" "^0.20.0" - "@codemirror/view" "^0.20.0" + "@codemirror/theme-one-dark" "^6.0.0" + codemirror "^6.0.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -7430,6 +7704,11 @@ aggregate-error@^3.0.0, aggregate-error@^3.1.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv-draft-04@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -7459,7 +7738,7 @@ ajv@^6.10.0, ajv@^6.10.1, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.5, ajv json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.10.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.10.0, ajv@^8.6.3, ajv@^8.8.0: version "8.11.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== @@ -7592,12 +7871,12 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apollo-datasource@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.1.tgz#a1168dd68371930de3ed4245ad12fa8600efe2cc" - integrity sha512-Z3a8rEUXVPIZ1p8xrFL8bcNhWmhOmovgDArvwIwmJOBnh093ZpRfO+ESJEDAN4KswmyzCLDAwjsW4zQOONdRUw== +apollo-datasource@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz#5711f8b38d4b7b53fb788cb4dbd4a6a526ea74c8" + integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== dependencies: - apollo-server-caching "^3.3.0" + "@apollo/utils.keyvaluecache" "^1.0.1" apollo-server-env "^4.2.1" apollo-reporting-protobuf@^3.3.1: @@ -7607,18 +7886,12 @@ apollo-reporting-protobuf@^3.3.1: dependencies: "@apollo/protobufjs" "1.2.2" -apollo-server-caching@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-3.3.0.tgz#f501cbeb820a4201d98c2b768c085f22848d9dc5" - integrity sha512-Wgcb0ArjZ5DjQ7ID+tvxUcZ7Yxdbk5l1MxZL8D8gkyjooOkhPNzjRVQ7ubPoXqO54PrOMOTm1ejVhsF+AfIirQ== - dependencies: - lru-cache "^6.0.0" - -apollo-server-core@^3.8.2: - version "3.8.2" - resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.8.2.tgz#a065e00220d6c709b11b824197520adee6d897d2" - integrity sha512-cbzG928HG27W+juMVCIL1O//iyAj/Q2hnOu6YwrGrcqeE75ZIJSgSBm/gPHK20cI7nEjK2IWACx8Hj1nGAQ5Zg== +apollo-server-core@^3.9.0: + version "3.9.0" + resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.9.0.tgz#44b39e378314cfc0596be7003d3f1f1397c88eea" + integrity sha512-WS54C33cTriDaBIcj7ijWv/fgeJICcrQKlP1Cn6pnZp/eumpMraezLeJ3gFWAXprOuR2E3fZe64lNlup0fMu8w== dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" "@apollo/utils.logger" "^1.0.0" "@apollo/utils.usagereporting" "^1.0.0" "@apollographql/apollo-tools" "^0.5.3" @@ -7626,13 +7899,12 @@ apollo-server-core@^3.8.2: "@graphql-tools/mock" "^8.1.2" "@graphql-tools/schema" "^8.0.0" "@josephg/resolvable" "^1.0.0" - apollo-datasource "^3.3.1" + apollo-datasource "^3.3.2" apollo-reporting-protobuf "^3.3.1" - apollo-server-caching "^3.3.0" apollo-server-env "^4.2.1" apollo-server-errors "^3.3.1" - apollo-server-plugin-base "^3.6.0" - apollo-server-types "^3.6.0" + apollo-server-plugin-base "^3.6.1" + apollo-server-types "^3.6.1" async-retry "^1.2.1" fast-json-stable-stringify "^2.1.0" graphql-tag "^2.11.0" @@ -7654,48 +7926,48 @@ apollo-server-errors@^3.3.1: resolved "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== -apollo-server-express@^3.0.0, apollo-server-express@^3.8.2: - version "3.8.2" - resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.8.2.tgz#51285279f8a52eb7d88a4f4145261b6f69b12ba6" - integrity sha512-UIpjs0qwOGJ0U1IokrtfjgpQVoirr7E1w446mx6B0EqV8sIFgdEE253utxtHi80va37h/xuEIUuAZFRQaY6ClQ== +apollo-server-express@^3.0.0, apollo-server-express@^3.9.0: + version "3.9.0" + resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.9.0.tgz#1ff3b53fe76e4e8be04b8477ea8a3d9586313af1" + integrity sha512-scSeHy9iB7W3OiF3uLQEzad9Jm9tEfDF8ACsJb2P+xX69uqg6zizsrQvj3qRhazCO7FKMcMu9zQFR0hy7zKbUA== dependencies: "@types/accepts" "^1.3.5" "@types/body-parser" "1.19.2" "@types/cors" "2.8.12" "@types/express" "4.17.13" - "@types/express-serve-static-core" "4.17.28" + "@types/express-serve-static-core" "4.17.29" accepts "^1.3.5" - apollo-server-core "^3.8.2" - apollo-server-types "^3.6.0" + apollo-server-core "^3.9.0" + apollo-server-types "^3.6.1" body-parser "^1.19.0" cors "^2.8.5" parseurl "^1.3.3" -apollo-server-plugin-base@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.0.tgz#f85e19fa4a33866ef1b4235077397a63a9a7343e" - integrity sha512-GtXhczRGpTLQyFPWeWSnX1VcN2JaaAU7WT8PzoTQuJKYJ/Aj5mPebHbfG+PXQlDmI8IgyCKf7B1HIRnJqvAZbg== +apollo-server-plugin-base@^3.6.1: + version "3.6.1" + resolved "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.1.tgz#33e9f26433d5a8b8ed5d27e9fa88de9ef0c2c704" + integrity sha512-bFpxzWO0LTTtSAkGVBeaAtnQXJ5ZCi8eaLN/eMSju8RByifmF3Kr6gAqcOZhOH/geQEt3Y6G8n3bR0eHTGxljQ== dependencies: - apollo-server-types "^3.6.0" + apollo-server-types "^3.6.1" -apollo-server-types@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.0.tgz#29fd8369aad99d42f72b760eb12bfe2c888da901" - integrity sha512-zISCkwXvwTHK2AysWSfLAUvDLSDJ0xj8pnfxDv34hqA+G9JqsLbykJdSL1Y1kT53HU4RWF6ymTuTwwOmmBiAWA== +apollo-server-types@^3.6.1: + version "3.6.1" + resolved "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.1.tgz#704e5309bd947306030df01f982e36d1d4753eaa" + integrity sha512-XOPlBlRdwP00PrG03OffGGWuzyei+J9t1rAnvyHsSdP0JCgQWigHJfvL1N9Bhgi4UTjl9JadKOJh1znLNlqIFQ== dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" "@apollo/utils.logger" "^1.0.0" apollo-reporting-protobuf "^3.3.1" - apollo-server-caching "^3.3.0" apollo-server-env "^4.2.1" apollo-server@^3.0.0: - version "3.8.2" - resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-3.8.2.tgz#15a9263d56ac3a44a5c186d9aafed90c1c2687da" - integrity sha512-XBWTn9uMLKgob60qOlAphOIpY81dDfF5uonCvO154Qx5TJ6IRqER38StIgEgQLLRcR4RZ40uMvbwofZRHfXecA== + version "3.9.0" + resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-3.9.0.tgz#391b60c4c24d37c65855cccc8aa886e684bc1776" + integrity sha512-g80gXDuK8fl2W0fQF/hEyeoO9AU+sO2gBzeJAYUyGLotYc+oL/Y3mTRk5GB8C7cXUXCg5uvWbUj8va0E5UZE7w== dependencies: "@types/express" "4.17.13" - apollo-server-core "^3.8.2" - apollo-server-express "^3.8.2" + apollo-server-core "^3.9.0" + apollo-server-express "^3.9.0" express "^4.17.1" aproba@^1.0.3: @@ -8046,6 +8318,13 @@ available-typed-arrays@^1.0.2: dependencies: array-filter "^1.0.0" +aws-os-connection@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/aws-os-connection/-/aws-os-connection-0.1.0.tgz#02c1be08cf63448c5bdc9d47b03b7ad3222b662c" + integrity sha512-WBN2S/5zgzfPpEiOTEW7IPJX+hlq+AQeAVKK4AL/Th0SfRRKu6a46i4aZKovQslBkKnmcSFvy+mHSJ299N8YWA== + dependencies: + aws4 "^1.11.0" + aws-sdk-mock@^5.2.1: version "5.7.0" resolved "https://registry.npmjs.org/aws-sdk-mock/-/aws-sdk-mock-5.7.0.tgz#b2a9454c78d008186c3f1a460b79cdb9cc9dfdc4" @@ -8056,9 +8335,9 @@ aws-sdk-mock@^5.2.1: traverse "^0.6.6" aws-sdk@^2.1122.0, aws-sdk@^2.840.0, aws-sdk@^2.948.0: - version "2.1151.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1151.0.tgz#8fcb41c3b919842a7b4e5c4cd9e124f6439b5b67" - integrity sha512-VvyzXAmWrX+klvwzA+9gSTY7blDnZOTl0UTKrqmFL4K7tOLieGLYTUkpUegcPxCjYgEg7JwvYolYUnUKiHa4oA== + version "2.1159.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1159.0.tgz#64d585ac608d58e6ff62678be71a4c4ca61ca5dc" + integrity sha512-zm3k/ufwZnkWc6M+HDz00CWuILot4L9kJ5VJsuDS9fwsT9To6k91Y1njCtIV4tcgcXvUru0Sbm4D0w5bc2847A== dependencies: buffer "4.9.2" events "1.1.1" @@ -9041,9 +9320,9 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001286: integrity sha512-5v7LFQU4Sb/qvkz7JcZkvtSH1Ko+1x2kgo3ocdBeMGZSOFpuE1kkm0kpTwLtWeFrw5qw08ulLxJjVIXIS8MkiQ== canvas@^2.6.1: - version "2.9.1" - resolved "https://registry.npmjs.org/canvas/-/canvas-2.9.1.tgz#58ec841cba36cef0675bc7a74ebd1561f0b476b0" - integrity sha512-vSQti1uG/2gjv3x6QLOZw7TctfufaerTWbVe+NSduHxxLGB+qf3kFgQ6n66DSnuoINtVUjrLLIK2R+lxrBG07A== + version "2.9.3" + resolved "https://registry.npmjs.org/canvas/-/canvas-2.9.3.tgz#8723c4f970442d4cdcedba5221579f9660a58bdb" + integrity sha512-WOUM7ghii5TV2rbhaZkh1youv/vW1/Canev6Yx6BG2W+1S07w8jKZqKkPnbiPpQEDsnJdN8ouDd7OvQEGXDcUw== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" nan "^2.15.0" @@ -9496,6 +9775,19 @@ codemirror@^5.65.3: resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.65.3.tgz#2d029930d5a293bc5fb96ceea64654803c0d4ac7" integrity sha512-kCC0iwGZOVZXHEKW3NDTObvM7pTIyowjty4BUqeREROc/3I6bWbgZDA3fGDwlA+rbgRjvnRnfqs9SfXynel1AQ== +codemirror@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/codemirror/-/codemirror-6.0.0.tgz#48aac6370d188f0761807ad9c3b62da7e7f72446" + integrity sha512-c4XR9QtDn+NhKLM2FBsnRn9SFdRH7G6594DYC/fyKKIsTOcdLF0WNWRd+f6kNyd5j1vgYPucbIeq2XkywYCwhA== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/commands" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/lint" "^6.0.0" + "@codemirror/search" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + codeowners-utils@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/codeowners-utils/-/codeowners-utils-1.0.2.tgz#9d30148bf957c53d55f75df432cb1e3b4bc6ee28" @@ -9718,7 +10010,7 @@ component-emitter@1.2.1: resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0: +component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -10032,7 +10324,7 @@ cookie@0.5.0, cookie@~0.5.0: resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookiejar@^2.1.0, cookiejar@^2.1.3: +cookiejar@^2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== @@ -10068,9 +10360,9 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.10: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.4.1, core-js@^3.6.5: - version "3.22.8" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.22.8.tgz#23f860b1fe60797cc4f704d76c93fea8a2f60631" - integrity sha512-UoGQ/cfzGYIuiq6Z7vWL1HfkE9U9IZ4Ub+0XSiJTCzvbZzgPA69oDF2f+lgJ6dFFLEdjW5O6svvoKzXX23xFkA== + version "3.23.2" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.23.2.tgz#e07a60ca8b14dd129cabdc3d2551baf5a01c76f0" + integrity sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -10186,9 +10478,9 @@ cron@^2.0.0: luxon "^1.23.x" cronstrue@^2.2.0: - version "2.9.0" - resolved "https://registry.npmjs.org/cronstrue/-/cronstrue-2.9.0.tgz#f63c376060c8e019d748564d6eb128d6cac76210" - integrity sha512-PZSsUZU7O+R0JdsquKMXlm41tm62oO5fVYoXi6QI/eRAYxgbkPJ/OcLrVxUM+JNRy5yv0QEI84YG1mUjEo4RLA== + version "2.10.0" + resolved "https://registry.npmjs.org/cronstrue/-/cronstrue-2.10.0.tgz#9b57e9acc18eb44ebe9be5dc993753fd7d6d8e56" + integrity sha512-WCCaKuuzjZJl/xTaJiK2KB2lhHqAz+cTAHgSiZQc/pNnF2XUSZX0FBfxAG0qa9CogToNoQw7pEBJExc77QnFBQ== cross-env@^7.0.0: version "7.0.3" @@ -10530,9 +10822,9 @@ cypress-plugin-snapshots@^1.4.4: unidiff "1.0.2" cypress@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/cypress/-/cypress-10.1.0.tgz#6514a26c721822a02bc194e9a7f72c3142aea174" - integrity sha512-aQ4JVZVib4Xd9FZW8IRZfKelUvqF4y5A+oUbNvn8TlsBmEfIg3m5Xd6Mt6PVU/jHiVJ9Psl905B3ZPnrDcmyuQ== + version "10.2.0" + resolved "https://registry.npmjs.org/cypress/-/cypress-10.2.0.tgz#ca078abfceb13be2a33cbba6e0e80ded770f542a" + integrity sha512-+i9lY5ENlfi2mJwsggzR+XASOIgMd7S/Gd3/13NCpv596n3YSplMAueBTIxNLcxDpTcIksp+9pM3UaDrJDpFqA== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -11756,75 +12048,75 @@ es6-error@^4.1.1: resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -esbuild-android-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.45.tgz#696f078d97a1350ceea5db626b3bc4a60fc13555" - integrity sha512-krVmwL2uXQN1A+Ci4u2MR+Y0IAvQK0u3no5TsgguHVhTy138szjuohScCGjkpvLCpGLk7P4kFP1LKuntvJ0d4A== +esbuild-android-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz#ef95b42c67bcf4268c869153fa3ad1466c4cea6b" + integrity sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g== -esbuild-android-arm64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.45.tgz#d229da8040cea4a0041756d1abcea375b4e3f9db" - integrity sha512-62POGdzAjM+XOXEM5MmFW6k9Pjdjg1hTrXKKBbPE700LFF36B+1Jv9QkskT5UadbTk4cdH9BQ7bGiRPYY0p/Dw== +esbuild-android-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz#4ebd7ce9fb250b4695faa3ee46fd3b0754ecd9e6" + integrity sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ== -esbuild-darwin-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.45.tgz#d7d38d91e4c03890d58c297131e9b82895a37a6a" - integrity sha512-dbkVUAnGx5IeZesWnIhnvxy7dSvgUQvfy0TVLzd9XVP3oI/VsKs8UNsfPrxI5HiN4SINv7oPAbxWceMpB7IqNA== +esbuild-darwin-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz#e0da6c244f497192f951807f003f6a423ed23188" + integrity sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA== -esbuild-darwin-arm64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.45.tgz#d4df2871b94351d7d5561e41f91aadba46857838" - integrity sha512-O6Bz7nnOae5rvbh2Ueo8ibSr7+/eLjsbPdgeMsAZri+LkOa7nsVPnhmocpO3Hy/LWfagTtHy1O9HRPIaArPmTg== +esbuild-darwin-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz#cd40fd49a672fca581ed202834239dfe540a9028" + integrity sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw== -esbuild-freebsd-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.45.tgz#e90106a2db3f5b0771392d3f9d8801b3138825c6" - integrity sha512-y1X2nr3XSWnDC7MRcy21EVAT0TiCtdefOntJ+SQcZnPBTURzX77f99S8lDF2KswukChkiacpd2Wd4VZieo7w7Q== +esbuild-freebsd-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz#8da6a14c095b29c01fc8087a16cb7906debc2d67" + integrity sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ== -esbuild-freebsd-arm64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.45.tgz#e734c8ae8042cd9224406d45d6992261382bcbde" - integrity sha512-r3ZNejkx1BKXQ6sYOP6C5rTwgiUajyAh03wygLWZtl+SLyygvAnu+OouqtveesufjBDgujp4wZXP/n8PVqXkqg== +esbuild-freebsd-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz#ad31f9c92817ff8f33fd253af7ab5122dc1b83f6" + integrity sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ== -esbuild-linux-32@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.45.tgz#0f814a784c941bfd5a5dca7ff742b57744c5324b" - integrity sha512-Qk9cCO3PJig/Y+SdslN/Th4pbAjgaH9oUjVH28eMsLTPf6QDUuK6EED91jepJdR3vxhcnVjyl6JqtOWmP+uxCg== +esbuild-linux-32@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz#de085e4db2e692ea30c71208ccc23fdcf5196c58" + integrity sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw== -esbuild-linux-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.45.tgz#2028a6dfb3fea7a5dd5e87cf00d02a36a3373e3c" - integrity sha512-IybO2ugqvc/Zzn1Kih3x0FVjYAy3GTCwhtcp91dbdqk3wPqxYCzObYspa8ca0s+OovI0Cnb+rhXrUtq8gBqlqw== +esbuild-linux-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz#2a9321bbccb01f01b04cebfcfccbabeba3658ba1" + integrity sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw== -esbuild-linux-arm64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.45.tgz#6fef4165583215918d45150148ac0a18d5ef6323" - integrity sha512-UNEyuHTwztrkEU/+mWIxGzKrYBo2cEtjYAZQVZB1kliANKgRITktg2miaO/b/VtNe84ob1aXSvW8XOPEn5RTGQ== +esbuild-linux-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz#b9da7b6fc4b0ca7a13363a0c5b7bb927e4bc535a" + integrity sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw== -esbuild-linux-arm@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.45.tgz#e454f701ae5371322c8265f4356e098611e51f96" - integrity sha512-qKWJ4A4TAcxXV2TBLPw3Av5X2SYNfyNnBHNJTQJ5VuevK6Aq5i6XEMvUgdlcVuZ9MYPfS5aJZWglzDzJMf1Lpw== +esbuild-linux-arm@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz#56fec2a09b9561c337059d4af53625142aded853" + integrity sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA== -esbuild-linux-mips64le@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.45.tgz#093cc86be71f9b0cd2876da23ee2f5d35b09a247" - integrity sha512-s/jcfw3Vpku5dIVSFVY7idJsGdIpIJ88IrkyprVgCG2yBeXatb67B7yIt0E1tL+OHrJJdNBw6GikCiMPAAu1VA== +esbuild-linux-mips64le@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz#9db21561f8f22ed79ef2aedb7bbef082b46cf823" + integrity sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg== -esbuild-linux-ppc64le@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.45.tgz#8bddbf67157027e917b6e5b04230d7cf14d62cf2" - integrity sha512-lJItl6ESZnhSx951U9R7MTBopgwIELHlQzC6SBR023V5JC1rPRFDZ/UEBsV+7BFcCAfqlyb+odGEAmcBSf4XCA== +esbuild-linux-ppc64le@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz#dc3a3da321222b11e96e50efafec9d2de408198b" + integrity sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w== -esbuild-linux-riscv64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.45.tgz#0f234f63595159cfc976fd5310e7902e8b5a7ad7" - integrity sha512-8anMu+QLl9MununVCGJN2I/JvUWPm1EVsBBLq/J+Nz4hr8t6QOCuEp0HRaeMohyl2XiMFBchVu0mwa05rF7GFQ== +esbuild-linux-riscv64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz#9bd6dcd3dca6c0357084ecd06e1d2d4bf105335f" + integrity sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g== -esbuild-linux-s390x@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.45.tgz#272288e0f30e4fa0f01d6df6572602c7df78c256" - integrity sha512-1TPeNvNCoahMw745KNTA6POKaFfSqQrBb3fdOL82GXZqyKU/6rHNwGP0NgHe88bAUMp3QZfjGfCGKxfBHL77RQ== +esbuild-linux-s390x@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz#a458af939b52f2cd32fc561410d441a51f69d41f" + integrity sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw== esbuild-loader@^2.18.0: version "2.19.0" @@ -11838,61 +12130,61 @@ esbuild-loader@^2.18.0: tapable "^2.2.0" webpack-sources "^2.2.0" -esbuild-netbsd-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.45.tgz#0f9af25773e025cd1ca5e22277661cb15d36b406" - integrity sha512-55f2eZ8EQhhOZosqX0mApgRoI9PrVyXlHd9Uivk+B0B4WTKUgzkoHaVk4EkIUtNRQTpDWPciTlpb/C2tUYVejA== +esbuild-netbsd-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz#6388e785d7e7e4420cb01348d7483ab511b16aa8" + integrity sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ== -esbuild-openbsd-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.45.tgz#6d47a564eb4b80d9e3aeb4493918b36d17440228" - integrity sha512-Z5sNcT3oN9eryMW3mGn5HAgg7XCxiUS4isqH1tZXpsdOdOESbgbTEP0mBEJU0WU7Vt2gIN5XMbAp7Oigm0k71g== +esbuild-openbsd-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz#309af806db561aa886c445344d1aacab850dbdc5" + integrity sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw== -esbuild-sunos-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.45.tgz#cca97d7d31214bddfa1970386883d1f3f2868cec" - integrity sha512-WmWu4wAm8mIxxK9aWFCj5VHunY3BHQDT3dAPexMLLszPyMF7RDtUYf+Dash9tjyitvnoxPAvR7DpWpirDLQIlQ== +esbuild-sunos-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz#3f19612dcdb89ba6c65283a7ff6e16f8afbf8aaa" + integrity sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ== -esbuild-windows-32@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.45.tgz#afd98449fd6a741a4655e3e4f0e5ae7081765baf" - integrity sha512-DPPehKwPJFBoSG+jILc/vcJNN8pTwz1m6FWojxqtqPhgw8OabTgN4vL7gNMqL/FSeDxF+zyvZeeMrZFYF1d81Q== +esbuild-windows-32@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz#a92d279c8458d5dc319abcfeb30aa49e8f2e6f7f" + integrity sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ== -esbuild-windows-64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.45.tgz#5d284b712b119c6306ac5f32e2a611ac6eec2842" - integrity sha512-t6bxFZcp9bLmSs+1pCNL/BW2bq3QEQHxU4HoiMEyWfF8QBU8iNXFI1iLGdyCzB1Ue2739h55tpOvojFrfyNPWA== +esbuild-windows-64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz#2564c3fcf0c23d701edb71af8c52d3be4cec5f8a" + integrity sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ== -esbuild-windows-arm64@0.14.45: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.45.tgz#08089d4cc921939ed352d9c2d928b5d867a6dc67" - integrity sha512-DnhrvjECBJ2L0owoznPb4RqQKZ498SM8J+YHqmqzi0Gf/enkUwwTjB8vPCK6dDuFnNU/NE8f94FhKdkBHYruDQ== +esbuild-windows-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz#86d9db1a22d83360f726ac5fba41c2f625db6878" + integrity sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ== esbuild@^0.14.1, esbuild@^0.14.10, esbuild@^0.14.39: - version "0.14.45" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.45.tgz#3e3192894f91c32cf19207726f136278be46e968" - integrity sha512-JOxGUD8jcs8xE8DjyGWC8by/vLMCXTJ/wuauWipL5kJRZx1dhpqIntb31QHjA45GZJWaXv7SjC/Zwu1bCkXWtQ== + version "0.14.47" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz#0d6415f6bd8eb9e73a58f7f9ae04c5276cda0e4d" + integrity sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA== optionalDependencies: - esbuild-android-64 "0.14.45" - esbuild-android-arm64 "0.14.45" - esbuild-darwin-64 "0.14.45" - esbuild-darwin-arm64 "0.14.45" - esbuild-freebsd-64 "0.14.45" - esbuild-freebsd-arm64 "0.14.45" - esbuild-linux-32 "0.14.45" - esbuild-linux-64 "0.14.45" - esbuild-linux-arm "0.14.45" - esbuild-linux-arm64 "0.14.45" - esbuild-linux-mips64le "0.14.45" - esbuild-linux-ppc64le "0.14.45" - esbuild-linux-riscv64 "0.14.45" - esbuild-linux-s390x "0.14.45" - esbuild-netbsd-64 "0.14.45" - esbuild-openbsd-64 "0.14.45" - esbuild-sunos-64 "0.14.45" - esbuild-windows-32 "0.14.45" - esbuild-windows-64 "0.14.45" - esbuild-windows-arm64 "0.14.45" + esbuild-android-64 "0.14.47" + esbuild-android-arm64 "0.14.47" + esbuild-darwin-64 "0.14.47" + esbuild-darwin-arm64 "0.14.47" + esbuild-freebsd-64 "0.14.47" + esbuild-freebsd-arm64 "0.14.47" + esbuild-linux-32 "0.14.47" + esbuild-linux-64 "0.14.47" + esbuild-linux-arm "0.14.47" + esbuild-linux-arm64 "0.14.47" + esbuild-linux-mips64le "0.14.47" + esbuild-linux-ppc64le "0.14.47" + esbuild-linux-riscv64 "0.14.47" + esbuild-linux-s390x "0.14.47" + esbuild-netbsd-64 "0.14.47" + esbuild-openbsd-64 "0.14.47" + esbuild-sunos-64 "0.14.47" + esbuild-windows-32 "0.14.47" + esbuild-windows-64 "0.14.47" + esbuild-windows-arm64 "0.14.47" escalade@^3.1.1: version "3.1.1" @@ -12056,9 +12348,9 @@ eslint-plugin-notice@^0.9.10: metric-lcs "^0.1.2" eslint-plugin-react-hooks@^4.3.0: - version "4.5.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad" - integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw== + version "4.6.0" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.28.0: version "7.30.0" @@ -12125,9 +12417,9 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^3.1.1" eslint@^8.6.0: - version "8.17.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz#1cfc4b6b6912f77d24b874ca1506b0fe09328c21" - integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== + version "8.18.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" + integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" @@ -12285,63 +12577,63 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" "example-app@link:packages/app": - version "0.2.72" + version "0.2.73-next.1" dependencies: - "@backstage/app-defaults" "^1.0.3" - "@backstage/catalog-model" "^1.0.3" - "@backstage/cli" "^0.17.2" + "@backstage/app-defaults" "^1.0.4-next.1" + "@backstage/catalog-model" "^1.1.0-next.1" + "@backstage/cli" "^0.18.0-next.1" "@backstage/config" "^1.0.1" - "@backstage/core-app-api" "^1.0.3" - "@backstage/core-components" "^0.9.5" + "@backstage/core-app-api" "^1.0.4-next.0" + "@backstage/core-components" "^0.9.6-next.1" "@backstage/core-plugin-api" "^1.0.3" - "@backstage/integration-react" "^1.1.1" - "@backstage/plugin-airbrake" "^0.3.6" - "@backstage/plugin-apache-airflow" "^0.1.14" - "@backstage/plugin-api-docs" "^0.8.6" - "@backstage/plugin-azure-devops" "^0.1.22" - "@backstage/plugin-badges" "^0.2.30" - "@backstage/plugin-catalog" "^1.3.0" - "@backstage/plugin-catalog-common" "^1.0.3" - "@backstage/plugin-catalog-graph" "^0.2.18" - "@backstage/plugin-catalog-import" "^0.8.9" - "@backstage/plugin-catalog-react" "^1.1.1" - "@backstage/plugin-circleci" "^0.3.6" - "@backstage/plugin-cloudbuild" "^0.3.6" - "@backstage/plugin-code-coverage" "^0.1.33" - "@backstage/plugin-cost-insights" "^0.11.28" - "@backstage/plugin-dynatrace" "^0.1.0" - "@backstage/plugin-explore" "^0.3.37" - "@backstage/plugin-gcalendar" "^0.3.2" - "@backstage/plugin-gcp-projects" "^0.3.25" - "@backstage/plugin-github-actions" "^0.5.6" - "@backstage/plugin-gocd" "^0.1.12" - "@backstage/plugin-graphiql" "^0.2.38" - "@backstage/plugin-home" "^0.4.22" - "@backstage/plugin-jenkins" "^0.7.5" - "@backstage/plugin-kafka" "^0.3.6" - "@backstage/plugin-kubernetes" "^0.6.6" - "@backstage/plugin-lighthouse" "^0.3.6" - "@backstage/plugin-newrelic" "^0.3.24" - "@backstage/plugin-newrelic-dashboard" "^0.1.14" - "@backstage/plugin-org" "^0.5.6" - "@backstage/plugin-pagerduty" "0.4.0" - "@backstage/plugin-permission-react" "^0.4.2" - "@backstage/plugin-rollbar" "^0.4.6" - "@backstage/plugin-scaffolder" "^1.3.0" - "@backstage/plugin-search" "^0.9.0" - "@backstage/plugin-search-common" "^0.3.5" - "@backstage/plugin-search-react" "^0.2.1" - "@backstage/plugin-sentry" "^0.3.44" - "@backstage/plugin-shortcuts" "^0.2.7" - "@backstage/plugin-stack-overflow" "^0.1.2" - "@backstage/plugin-tech-insights" "^0.2.2" - "@backstage/plugin-tech-radar" "^0.5.13" - "@backstage/plugin-techdocs" "^1.2.0" - "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.1" - "@backstage/plugin-techdocs-react" "^1.0.1" - "@backstage/plugin-todo" "^0.2.8" - "@backstage/plugin-user-settings" "^0.4.5" - "@backstage/theme" "^0.2.15" + "@backstage/integration-react" "^1.1.2-next.1" + "@backstage/plugin-airbrake" "^0.3.7-next.1" + "@backstage/plugin-apache-airflow" "^0.2.0-next.1" + "@backstage/plugin-api-docs" "^0.8.7-next.1" + "@backstage/plugin-azure-devops" "^0.1.23-next.1" + "@backstage/plugin-badges" "^0.2.31-next.1" + "@backstage/plugin-catalog" "^1.3.1-next.1" + "@backstage/plugin-catalog-common" "^1.0.4-next.0" + "@backstage/plugin-catalog-graph" "^0.2.19-next.1" + "@backstage/plugin-catalog-import" "^0.8.10-next.1" + "@backstage/plugin-catalog-react" "^1.1.2-next.1" + "@backstage/plugin-circleci" "^0.3.7-next.1" + "@backstage/plugin-cloudbuild" "^0.3.7-next.1" + "@backstage/plugin-code-coverage" "^0.1.34-next.1" + "@backstage/plugin-cost-insights" "^0.11.29-next.1" + "@backstage/plugin-dynatrace" "^0.1.1-next.1" + "@backstage/plugin-explore" "^0.3.38-next.1" + "@backstage/plugin-gcalendar" "^0.3.3-next.1" + "@backstage/plugin-gcp-projects" "^0.3.26-next.1" + "@backstage/plugin-github-actions" "^0.5.7-next.1" + "@backstage/plugin-gocd" "^0.1.13-next.1" + "@backstage/plugin-graphiql" "^0.2.39-next.1" + "@backstage/plugin-home" "^0.4.23-next.1" + "@backstage/plugin-jenkins" "^0.7.6-next.1" + "@backstage/plugin-kafka" "^0.3.7-next.1" + "@backstage/plugin-kubernetes" "^0.6.7-next.1" + "@backstage/plugin-lighthouse" "^0.3.7-next.1" + "@backstage/plugin-newrelic" "^0.3.25-next.1" + "@backstage/plugin-newrelic-dashboard" "^0.1.15-next.1" + "@backstage/plugin-org" "^0.5.7-next.1" + "@backstage/plugin-pagerduty" "0.5.0-next.1" + "@backstage/plugin-permission-react" "^0.4.3-next.0" + "@backstage/plugin-rollbar" "^0.4.7-next.1" + "@backstage/plugin-scaffolder" "^1.4.0-next.1" + "@backstage/plugin-search" "^0.9.1-next.1" + "@backstage/plugin-search-common" "^0.3.6-next.0" + "@backstage/plugin-search-react" "^0.2.2-next.1" + "@backstage/plugin-sentry" "^0.3.45-next.1" + "@backstage/plugin-shortcuts" "^0.2.8-next.1" + "@backstage/plugin-stack-overflow" "^0.1.3-next.1" + "@backstage/plugin-tech-insights" "^0.2.3-next.1" + "@backstage/plugin-tech-radar" "^0.5.14-next.1" + "@backstage/plugin-techdocs" "^1.2.1-next.1" + "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.2-next.1" + "@backstage/plugin-techdocs-react" "^1.0.2-next.0" + "@backstage/plugin-todo" "^0.2.9-next.1" + "@backstage/plugin-user-settings" "^0.4.6-next.1" + "@backstage/theme" "^0.2.16-next.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.57" @@ -12484,9 +12776,9 @@ expect@^27.5.1: jest-message-util "^27.5.1" express-prom-bundle@^6.3.6: - version "6.4.1" - resolved "https://registry.npmjs.org/express-prom-bundle/-/express-prom-bundle-6.4.1.tgz#a688050b9e090f6969825c33143106d3e0e5a70e" - integrity sha512-Sg0svLQe/SS5z1tHDTVfZVjNumobiDlXM0jmemt5Dm9K6BX8z9yCwEr93zbko6fNMR4zKav77iPfxUWi6gAjNA== + version "6.5.0" + resolved "https://registry.npmjs.org/express-prom-bundle/-/express-prom-bundle-6.5.0.tgz#cdf28b29907618cae933ed14d5b727f7404e810b" + integrity sha512-paFAm0FK7TV1Ln6Blh9edDt2mJ4Pk6Py/fjhZDMcoMHENYryBjCpnXDXuCu8NE1kkvp58IrPcAAkNeNqdvZnnw== dependencies: on-finished "^2.3.0" url-value-parser "^2.0.0" @@ -13048,7 +13340,7 @@ form-data-encoder@^1.4.3, form-data-encoder@^1.7.1: resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== -form-data@^2.3.1, form-data@^2.3.2, form-data@^2.5.0: +form-data@^2.3.2, form-data@^2.5.0: version "2.5.1" resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== @@ -13105,11 +13397,6 @@ formdata-node@^4.3.1: node-domexception "1.0.0" web-streams-polyfill "4.0.0-beta.1" -formidable@^1.2.0: - version "1.2.6" - resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" - integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== - formidable@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" @@ -13700,9 +13987,9 @@ google-auth-library@^7.14.0: lru-cache "^6.0.0" google-auth-library@^8.0.0, google-auth-library@^8.0.1, google-auth-library@^8.0.2: - version "8.0.2" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.0.2.tgz#5fa0f2d3795c3e4019d2bb315ade4454cc9c30b5" - integrity sha512-HoG+nWFAThLovKpvcbYzxgn+nBJPTfAwtq0GxPN821nOO+21+8oP7MoEHfd1sbDulUFFGfcjJr2CnJ4YssHcyg== + version "8.0.3" + resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.0.3.tgz#1e780430632d03df36dc22a3f5c89dbc251f2105" + integrity sha512-1eC6yaCrPfkv3bwtb3e0AOct7E7xR/uikDyXNo/j8Wd6a1ldRgAey5FmaDGNJnHNDPLtDiENQLYsA69eXOF5sA== dependencies: arrify "^2.0.0" base64-js "^1.3.0" @@ -13710,7 +13997,7 @@ google-auth-library@^8.0.0, google-auth-library@^8.0.1, google-auth-library@^8.0 fast-text-encoding "^1.0.0" gaxios "^5.0.0" gcp-metadata "^5.0.0" - gtoken "^5.3.2" + gtoken "^6.0.0" jws "^4.0.0" lru-cache "^6.0.0" @@ -13759,10 +14046,10 @@ google-p12-pem@^3.0.3: dependencies: node-forge "^1.0.0" -google-p12-pem@^3.1.3: - version "3.1.4" - resolved "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz#123f7b40da204de4ed1fbf2fd5be12c047fc8b3b" - integrity sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg== +google-p12-pem@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.0.tgz#f46581add1dc6ea0b96160cda6ce37ee35ab8ca3" + integrity sha512-lRTMn5ElBdDixv4a86bixejPSRk1boRtUowNepeKEVvYiFlkLuAJUVpEz6PfObDHYEKnZWq/9a2zC98xu62A9w== dependencies: node-forge "^1.3.1" @@ -13771,7 +14058,7 @@ google-protobuf@^3.15.8, google-protobuf@^3.19.1: resolved "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.20.1.tgz#1b255c2b59bcda7c399df46c65206aa3c7a0ce8b" integrity sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw== -got@11.8.3, got@^11.8.0: +got@11.8.3: version "11.8.3" resolved "https://registry.npmjs.org/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg== @@ -13788,6 +14075,23 @@ got@11.8.3, got@^11.8.0: p-cancelable "^2.0.0" responselike "^2.0.0" +got@^11.8.0: + version "11.8.5" + resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -13869,14 +14173,14 @@ graphql-language-service@^5.0.6: vscode-languageserver-types "^3.15.1" graphql-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/graphql-modules/-/graphql-modules-2.0.0.tgz#5f710d86eb7295da83769c8cd6d61a049d999800" - integrity sha512-CM5CIJp428+ripgcLyrioBmAKB3ucvIEOgJG4WMjnOgScHY/eCZh/8I51cF8oc+pqebOgBCR3HH//IH5v7kv+w== + version "2.1.0" + resolved "https://registry.npmjs.org/graphql-modules/-/graphql-modules-2.1.0.tgz#d99692034b4b053fba3d0ebe49e4e66772ed2785" + integrity sha512-fOUc4i5xNLkRxqx234MIr+kolrxk1tZ2onTeRIcB73mCY4NeKxej7FMLb5St+UcNLzhqM4L6Mf47rN9MPVDmgA== dependencies: - "@graphql-tools/schema" "^8.1.1" + "@graphql-tools/schema" "^8.3.1" "@graphql-tools/wrap" "^8.3.1" "@graphql-typed-document-node/core" "^3.1.0" - ramda "^0.27.1" + ramda "^0.28.0" graphql-request@^4.0.0: version "4.2.0" @@ -13900,9 +14204,9 @@ graphql-type-json@^0.3.2: integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== graphql-ws@^5.4.1: - version "5.8.2" - resolved "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.8.2.tgz#800184b1addb20b3010dc06cb70877703a5fff20" - integrity sha512-hYo8kTGzxePFJtMGC7Y4cbypwifMphIJJ7n4TDcVUAfviRwQBnmZAbfZlC+XFwWDUaR7raEDQPxWctpccmE0JQ== + version "5.9.0" + resolved "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.9.0.tgz#1fea3cca4582bbda15bc3a50bf30b539869b826f" + integrity sha512-CXv0l0nI1bgChwl4Rm+BqNOAKwL/C9T2N8RfmTkhQ38YLFdUXCi2WNW4oFp8BJP+t75nCLzjHHgR04sP1oF02w== graphql@^16.0.0, graphql@^16.3.0: version "16.5.0" @@ -13944,13 +14248,13 @@ gtoken@^5.0.4: jws "^4.0.0" mime "^2.2.0" -gtoken@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz#deb7dc876abe002178e0515e383382ea9446d58f" - integrity sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ== +gtoken@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/gtoken/-/gtoken-6.0.1.tgz#1276371d51e93c4eface76e3f30f9e8f1cad3f1a" + integrity sha512-J0vebk6u6i4rLTM0lQq25SdusCLMvujYNZeAouyPvSbGlcjw7P8L3W9INIFnlXUx+AUD7TDoM1mgdhzH+XX7DQ== dependencies: gaxios "^4.0.0" - google-p12-pem "^3.1.3" + google-p12-pem "^4.0.0" jws "^4.0.0" gzip-size@^6.0.0: @@ -15522,9 +15826,9 @@ isomorphic-form-data@^2.0.0: form-data "^2.3.2" isomorphic-git@^1.8.0: - version "1.17.3" - resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.17.3.tgz#d4a4e7a2defc7e9c80d4d0bfd43c1e7d2bfb25ee" - integrity sha512-jEQtmg1lJ8ZiJLjJCCJDDIdXaeoHwqHFY7QCLgNw7GzZ6MktXLzKXnQsFRfIcm7sNYGt+w1/6FQTwO9zoHq/Fw== + version "1.18.3" + resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.18.3.tgz#b2ef91688ac8f4315a8f3ce72f24a76c17bf61ad" + integrity sha512-CVTNt0uU5RQ4g626LxqUyShdoeD15uZppKA0tk7iY/PyikCbRG594a7BksU4JZcOC6RsqUkURdIlFyKhAfdbqg== dependencies: async-lock "^1.1.0" clean-git-ref "^2.0.1" @@ -16664,9 +16968,9 @@ keyv@^3.0.0: json-buffer "3.0.0" keyv@^4.0.0, keyv@^4.0.3: - version "4.3.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.3.0.tgz#b4352e0e4fe7c94111947d6738a6d3fe7903027c" - integrity sha512-C30Un9+63J0CsR7Wka5quXKqYZsT6dcRQ2aOwGcSc3RiQ4HGWpTAHlCA+puNfw2jA/s11EsxA1nCXgZRuRKMQQ== + version "4.3.2" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz#e839df676a0c7ee594c8835e7c1c83742558e5c2" + integrity sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw== dependencies: compress-brotli "^1.3.8" json-buffer "3.0.1" @@ -17353,9 +17657,9 @@ log-update@^4.0.0: wrap-ansi "^6.2.0" logform@^2.3.2, logform@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz#131651715a17d50f09c2a2c1a524ff1a4164bcfe" - integrity sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw== + version "2.4.1" + resolved "https://registry.npmjs.org/logform/-/logform-2.4.1.tgz#512c9eaef738044d1c619790ba0f806c80d9d3a9" + integrity sha512-7XB/tqc3VRbri9pRjU6E97mQ8vC27ivJ3lct4jhyT+n0JNDd4YKldFl0D75NqDp46hk8RC7Ma1Vjv/UPf67S+A== dependencies: "@colors/colors" "1.5.0" fecha "^4.2.0" @@ -17439,16 +17743,16 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.10.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.10.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz#db577f42a94c168f676b638d15da8fb073448cab" + integrity sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A== + lru-cache@^7.3.1: version "7.3.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.3.1.tgz#7702e80694ec2bf19865567a469f2b081fcf53f5" integrity sha512-nX1x4qUrKqwbIAhv4s9et4FIUVzNOpeY07bsjGUy8gwJrXH/wScImSQqXErmo/b2jZY2r0mohbLA9zVj7u1cNw== -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.10.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz#db577f42a94c168f676b638d15da8fb073448cab" - integrity sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A== - lunr@^2.3.9: version "2.3.9" resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -17943,7 +18247,7 @@ meros@^1.1.4: resolved "https://registry.npmjs.org/meros/-/meros-1.1.4.tgz#c17994d3133db8b23807f62bec7f0cb276cfd948" integrity sha512-E9ZXfK9iQfG9s73ars9qvvvbSIkJZF5yOo9j4tcwM5tN8mUKfj/EKN5PzOr3ZH0y5wL7dLAHw3RVEfpQV9Q7VQ== -methods@^1.0.0, methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: +methods@^1.0.0, methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -18282,7 +18586,7 @@ mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, m dependencies: mime-db "1.52.0" -mime@1.6.0, mime@^1.3.4, mime@^1.4.1: +mime@1.6.0, mime@^1.3.4: version "1.6.0" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -18604,9 +18908,9 @@ msw@^0.39.2: yargs "^17.3.1" msw@^0.42.0: - version "0.42.1" - resolved "https://registry.npmjs.org/msw/-/msw-0.42.1.tgz#2496d3e191754b68686e2530de459a2e102f85c4" - integrity sha512-LZZuz7VddL45gCBgfBWHyXj6a4W7OTJY0mZPoipJ3P/xwbuJwrtwB3IJrWlqBM8aink/eTKlRxwzmtIAwCj5yQ== + version "0.42.3" + resolved "https://registry.npmjs.org/msw/-/msw-0.42.3.tgz#150c475e2cb6d53c67503bd0e3f6251bfd075328" + integrity sha512-zrKBIGCDsNUCZLd3DLSeUtRruZ0riwJgORg9/bSDw3D0PTI8XUGAK3nC0LJA9g0rChGuKaWK/SwObA8wpFrz4g== dependencies: "@mswjs/cookies" "^0.2.0" "@mswjs/interceptors" "^0.16.3" @@ -19332,18 +19636,18 @@ octokit-plugin-create-pull-request@^3.10.0: "@octokit/types" "^6.8.2" octokit@^1.7.1: - version "1.7.2" - resolved "https://registry.npmjs.org/octokit/-/octokit-1.7.2.tgz#c5f11699c39ba5526ff170cbfcb7eaa291ddf11a" - integrity sha512-C+iwOeUMWwbvHxGbLX5rAde5WuEVGe/hNQniU1haZAPMHqUz1+ppffvkP4v/2R3dkSLJnzceUG+ir0klNmEoBA== + version "1.8.0" + resolved "https://registry.npmjs.org/octokit/-/octokit-1.8.0.tgz#c2ea6ace083b3be1d594aa7eb2e05fccd14e7ca5" + integrity sha512-HtArk9ttGy5effKNiaqKCirR6VSZoYjqgLgvVm/1mSRR4WYmww5DHjLnZlCbvj8+DwBLLLduJ3XnX/SPCCcp6A== dependencies: "@octokit/app" "^12.0.4" "@octokit/core" "^3.5.1" "@octokit/oauth-app" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + "@octokit/plugin-paginate-rest" "^2.18.0" + "@octokit/plugin-rest-endpoint-methods" "^5.14.0" "@octokit/plugin-retry" "^3.0.9" "@octokit/plugin-throttling" "^3.5.1" - "@octokit/types" "^6.26.0" + "@octokit/types" "^6.35.0" oidc-token-hash@^5.0.1: version "5.0.1" @@ -19426,6 +19730,11 @@ openapi-sampler@^1.2.1: "@types/json-schema" "^7.0.7" json-pointer "0.6.2" +openapi-types@^11.0.1: + version "11.1.0" + resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-11.1.0.tgz#037969f3dfa5999423ee33bf889fb0d12984277e" + integrity sha512-ZW+Jf12flFF6DXSij8DGL3svDA4RtSyHXjC/xB/JAh18gg3uVfVIFLvCfScUMowrpvlkxsMMbErakbth2g3/iQ== + openid-client@^4.1.1: version "4.9.0" resolved "https://registry.npmjs.org/openid-client/-/openid-client-4.9.0.tgz#bdfc9194435316df419f759ce177635146b43074" @@ -21137,7 +21446,7 @@ q@^1.5.1: resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@6.10.3, qs@^6.10.1, qs@^6.10.2, qs@^6.10.3, qs@^6.5.1, qs@^6.9.1, qs@^6.9.4, qs@^6.9.6: +qs@6.10.3, qs@^6.10.1, qs@^6.10.2, qs@^6.10.3, qs@^6.9.1, qs@^6.9.4, qs@^6.9.6: version "6.10.3" resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== @@ -21211,10 +21520,10 @@ raf@^3.4.0: dependencies: performance-now "^2.1.0" -ramda@^0.27.1: - version "0.27.2" - resolved "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" - integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== +ramda@^0.28.0: + version "0.28.0" + resolved "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" + integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== randexp@^0.5.3: version "0.5.3" @@ -21426,9 +21735,9 @@ react-helmet@6.1.0: react-side-effect "^2.1.0" react-hook-form@^7.12.2, react-hook-form@^7.13.0: - version "7.31.3" - resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.31.3.tgz#b61bafb9a7435f91695351a7a9f714d8c4df0121" - integrity sha512-NVZdCWViIWXXXlQ3jxVQH0NuNfwPf8A/0KvuCxrM9qxtP1qYosfR2ZudarziFrVOC7eTUbWbm1T4OyYCwv9oSQ== + version "7.32.2" + resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.32.2.tgz#58ec2ab0239ce97969baa2faa03ced13fae913ac" + integrity sha512-F1A6n762xaRhvtQH5SkQQhMr19cCkHZYesTcKJJeNmrphiZp/cYFTIzC05FnQry0SspM54oPJ9tXFXlzya8VNQ== react-hot-loader@^4.13.0: version "4.13.0" @@ -22549,9 +22858,9 @@ rollup@^0.63.4: "@types/node" "*" rollup@^2.60.2: - version "2.75.6" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz#ac4dc8600f95942a0180f61c7c9d6200e374b439" - integrity sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA== + version "2.75.7" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz#221ff11887ae271e37dcc649ba32ce1590aaa0b9" + integrity sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ== optionalDependencies: fsevents "~2.3.2" @@ -22574,10 +22883,10 @@ run-parallel@^1.1.9: resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== -run-script-webpack-plugin@^0.0.14: - version "0.0.14" - resolved "https://registry.npmjs.org/run-script-webpack-plugin/-/run-script-webpack-plugin-0.0.14.tgz#fe2362b32c1dab7a8af7a6f1246fc043690cedd7" - integrity sha512-DXe6lzzEVXjBr/74zd4m4yOfmz5P6GMjzhQxDDsViOmwG7cap8UCE6RgD5rT7zf4wM83a+ToHnpB3v4efUv5IA== +run-script-webpack-plugin@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/run-script-webpack-plugin/-/run-script-webpack-plugin-0.1.1.tgz#dad3114be32eb864d2160306e4d9c52a2c1cfd59" + integrity sha512-PrxBRLv1K9itDKMlootSCyGhdTU+KbKGJ2wF6/k0eyo6M0YGPC58HYbS/J/QsDiwM0t7G99WcuCqto0J7omOXA== rxjs@7.5.5, rxjs@^7.0.0, rxjs@^7.1.0, rxjs@^7.2.0, rxjs@^7.5.1, rxjs@^7.5.5: version "7.5.5" @@ -23952,9 +24261,9 @@ stylis@^4.0.6: integrity sha512-OFFeUXFgwnGOKvEXaSv0D0KQ5ADP0n6g3SVONx6I/85JzNZ3u50FRwB3lVIk1QO2HNdI75tbVzc4Z66Gdp9voA== sucrase@^3.18.0, sucrase@^3.20.2: - version "3.21.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.21.0.tgz#6a5affdbe716b22e4dc99c57d366ad0d216444b9" - integrity sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ== + version "3.21.1" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz#7e29ddaca012764cf843280b00e74a843bdf790f" + integrity sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ== dependencies: commander "^4.0.0" glob "7.1.6" @@ -23963,22 +24272,6 @@ sucrase@^3.18.0, sucrase@^3.20.2: pirates "^4.0.1" ts-interface-checker "^0.1.9" -superagent@^3.8.3: - version "3.8.3" - resolved "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" - integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== - dependencies: - component-emitter "^1.2.0" - cookiejar "^2.1.0" - debug "^3.1.0" - extend "^3.0.0" - form-data "^2.3.1" - formidable "^1.2.0" - methods "^1.1.1" - mime "^1.4.1" - qs "^6.5.1" - readable-stream "^2.3.5" - superagent@^7.1.3: version "7.1.3" resolved "https://registry.npmjs.org/superagent/-/superagent-7.1.3.tgz#783ff8330e7c2dad6ad8f0095edc772999273b6b" @@ -23996,14 +24289,6 @@ superagent@^7.1.3: readable-stream "^3.6.0" semver "^7.3.7" -supertest@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz#c2234dbdd6dc79b6f15b99c8d6577b90e4ce3f36" - integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== - dependencies: - methods "^1.1.2" - superagent "^3.8.3" - supertest@^6.1.3, supertest@^6.1.6: version "6.2.3" resolved "https://registry.npmjs.org/supertest/-/supertest-6.2.3.tgz#291b220126e5faa654d12abe1ada3658757c8c67" @@ -24223,21 +24508,21 @@ tdigest@^0.1.1: bintrees "1.0.1" "techdocs-cli-embedded-app@link:packages/techdocs-cli-embedded-app": - version "0.2.71" + version "0.2.72-next.1" dependencies: - "@backstage/app-defaults" "^1.0.3" - "@backstage/catalog-model" "^1.0.3" - "@backstage/cli" "^0.17.2" + "@backstage/app-defaults" "^1.0.4-next.1" + "@backstage/catalog-model" "^1.1.0-next.1" + "@backstage/cli" "^0.18.0-next.1" "@backstage/config" "^1.0.1" - "@backstage/core-app-api" "^1.0.3" - "@backstage/core-components" "^0.9.5" + "@backstage/core-app-api" "^1.0.4-next.0" + "@backstage/core-components" "^0.9.6-next.1" "@backstage/core-plugin-api" "^1.0.3" - "@backstage/integration-react" "^1.1.1" - "@backstage/plugin-catalog" "^1.3.0" - "@backstage/plugin-techdocs" "^1.2.0" - "@backstage/plugin-techdocs-react" "^1.0.1" - "@backstage/test-utils" "^1.1.1" - "@backstage/theme" "^0.2.15" + "@backstage/integration-react" "^1.1.2-next.1" + "@backstage/plugin-catalog" "^1.3.1-next.1" + "@backstage/plugin-techdocs" "^1.2.1-next.1" + "@backstage/plugin-techdocs-react" "^1.0.2-next.0" + "@backstage/test-utils" "^1.1.2-next.1" + "@backstage/theme" "^0.2.16-next.0" "@material-ui/core" "^4.11.0" "@material-ui/icons" "^4.9.1" history "^5.0.0"