diff --git a/.changeset/angry-mayflies-collect.md b/.changeset/angry-mayflies-collect.md new file mode 100644 index 0000000000..df49f98b33 --- /dev/null +++ b/.changeset/angry-mayflies-collect.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Correct size of FavoriteToggle and inherit non-starred color from parent diff --git a/.changeset/angry-windows-decide.md b/.changeset/angry-windows-decide.md new file mode 100644 index 0000000000..6a5c225e80 --- /dev/null +++ b/.changeset/angry-windows-decide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fix extra divider displayed in owner list picker on list tasks page diff --git a/.changeset/breezy-bulldogs-smell.md b/.changeset/breezy-bulldogs-smell.md new file mode 100644 index 0000000000..69825142cb --- /dev/null +++ b/.changeset/breezy-bulldogs-smell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there. diff --git a/.changeset/brown-frogs-walk.md b/.changeset/brown-frogs-walk.md new file mode 100644 index 0000000000..6fae44be73 --- /dev/null +++ b/.changeset/brown-frogs-walk.md @@ -0,0 +1,17 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage: + +```yaml +- id: fetch-file + name: Fetch File + action: fetch:template:file + input: + url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml + targetPath: './target/catalog-info.yaml' + values: + component_id: My Component + owner: Test +``` diff --git a/.changeset/clever-paws-stare.md b/.changeset/clever-paws-stare.md new file mode 100644 index 0000000000..ad56a5306e --- /dev/null +++ b/.changeset/clever-paws-stare.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. diff --git a/.changeset/curly-foxes-brake.md b/.changeset/curly-foxes-brake.md new file mode 100644 index 0000000000..6946f30371 --- /dev/null +++ b/.changeset/curly-foxes-brake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Apply `defaultValue` props in `MultiEntityPicker` diff --git a/.changeset/cyan-peaches-lay.md b/.changeset/cyan-peaches-lay.md new file mode 100644 index 0000000000..a2b393caf8 --- /dev/null +++ b/.changeset/cyan-peaches-lay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page. diff --git a/.changeset/dry-frogs-drum.md b/.changeset/dry-frogs-drum.md new file mode 100644 index 0000000000..c929732943 --- /dev/null +++ b/.changeset/dry-frogs-drum.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Change task list created at column to show timestamp diff --git a/.changeset/eight-steaks-chew.md b/.changeset/eight-steaks-chew.md new file mode 100644 index 0000000000..4651d3fb8c --- /dev/null +++ b/.changeset/eight-steaks-chew.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': minor +'@backstage/plugin-scaffolder': minor +--- + +Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin diff --git a/.changeset/eleven-pugs-hear.md b/.changeset/eleven-pugs-hear.md new file mode 100644 index 0000000000..5d65057e0b --- /dev/null +++ b/.changeset/eleven-pugs-hear.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-api-docs': patch +'@backstage/plugin-catalog': patch +--- + +Empty states updated with external link icon for learn more links diff --git a/.changeset/fifty-trainers-watch.md b/.changeset/fifty-trainers-watch.md new file mode 100644 index 0000000000..5cef1ad2b2 --- /dev/null +++ b/.changeset/fifty-trainers-watch.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Make `emptyState` input optional on `entity-content:techdocs` extension so that +the default empty state extension works correctly. diff --git a/.changeset/five-gorillas-pay.md b/.changeset/five-gorillas-pay.md new file mode 100644 index 0000000000..c5cd18a186 --- /dev/null +++ b/.changeset/five-gorillas-pay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page. diff --git a/.changeset/fluffy-pears-cry.md b/.changeset/fluffy-pears-cry.md new file mode 100644 index 0000000000..2da74eb857 --- /dev/null +++ b/.changeset/fluffy-pears-cry.md @@ -0,0 +1,6 @@ +--- +'@backstage/repo-tools': minor +--- + +Update @microsoft/api-extractor and use their api report resolution. +Change api report format from `api-report.md` to `report.api.md` diff --git a/.changeset/giant-kiwis-retire.md b/.changeset/giant-kiwis-retire.md new file mode 100644 index 0000000000..380e05042f --- /dev/null +++ b/.changeset/giant-kiwis-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/app-defaults': patch +--- + +Added `externalLink` to icon defaults diff --git a/.changeset/honest-impalas-rescue.md b/.changeset/honest-impalas-rescue.md new file mode 100644 index 0000000000..bac076bba6 --- /dev/null +++ b/.changeset/honest-impalas-rescue.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fixed a bug in the `SidebarSubmenu` core component that caused the nested menu to overlap with the sidebar when the user hovers over the pinned sidebar. diff --git a/.changeset/long-humans-hunt.md b/.changeset/long-humans-hunt.md new file mode 100644 index 0000000000..e27ebfbd3d --- /dev/null +++ b/.changeset/long-humans-hunt.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Added ability to create a new local scaffolder template to ease onboarding when creating new templates. diff --git a/.changeset/nasty-lamps-greet.md b/.changeset/nasty-lamps-greet.md new file mode 100644 index 0000000000..75d8086db7 --- /dev/null +++ b/.changeset/nasty-lamps-greet.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Added ability to link to a specific action on the actions page diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..706cec0de5 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,235 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "example-app": "0.2.101", + "@backstage/app-defaults": "1.5.11", + "example-app-next": "0.0.15", + "app-next-example-plugin": "0.0.15", + "example-backend": "0.0.30", + "@backstage/backend-app-api": "1.0.0", + "@backstage/backend-defaults": "0.5.0", + "@backstage/backend-dev-utils": "0.1.5", + "@backstage/backend-dynamic-feature-service": "0.4.0", + "example-backend-legacy": "0.2.102", + "@backstage/backend-openapi-utils": "0.1.18", + "@backstage/backend-plugin-api": "1.0.0", + "@backstage/backend-test-utils": "1.0.0", + "@backstage/catalog-client": "1.7.0", + "@backstage/catalog-model": "1.7.0", + "@backstage/cli": "0.27.1", + "@backstage/cli-common": "0.1.14", + "@backstage/cli-node": "0.2.8", + "@backstage/codemods": "0.1.50", + "@backstage/config": "1.2.0", + "@backstage/config-loader": "1.9.1", + "@backstage/core-app-api": "1.15.0", + "@backstage/core-compat-api": "0.3.0", + "@backstage/core-components": "0.15.0", + "@backstage/core-plugin-api": "1.9.4", + "@backstage/create-app": "0.5.19", + "@backstage/dev-utils": "1.1.0", + "e2e-test": "0.2.20", + "@backstage/e2e-test-utils": "0.1.1", + "@backstage/errors": "1.2.4", + "@backstage/eslint-plugin": "0.1.9", + "@backstage/frontend-app-api": "0.9.0", + "@backstage/frontend-defaults": "0.1.0", + "@internal/frontend": "0.0.1", + "@backstage/frontend-plugin-api": "0.8.0", + "@backstage/frontend-test-utils": "0.2.0", + "@backstage/integration": "1.15.0", + "@backstage/integration-aws-node": "0.1.12", + "@backstage/integration-react": "1.1.31", + "@internal/opaque": "0.0.1", + "@backstage/release-manifests": "0.0.11", + "@backstage/repo-tools": "0.9.7", + "@techdocs/cli": "1.8.19", + "techdocs-cli-embedded-app": "0.2.100", + "@backstage/test-utils": "1.6.0", + "@backstage/theme": "0.5.7", + "@backstage/types": "1.1.1", + "@backstage/version-bridge": "1.0.9", + "yarn-plugin-backstage": "0.0.2", + "@backstage/plugin-api-docs": "0.11.9", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.7", + "@backstage/plugin-app": "0.1.0", + "@backstage/plugin-app-backend": "0.3.74", + "@backstage/plugin-app-node": "0.1.25", + "@backstage/plugin-app-visualizer": "0.1.10", + "@backstage/plugin-auth-backend": "0.23.0", + "@backstage/plugin-auth-backend-module-atlassian-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-auth0-provider": "0.1.0", + "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.1.0", + "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-github-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-gitlab-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-google-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-guest-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-oauth2-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-oidc-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-okta-provider": "0.1.0", + "@backstage/plugin-auth-backend-module-onelogin-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-pinniped-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.3.0", + "@backstage/plugin-auth-node": "0.5.2", + "@backstage/plugin-auth-react": "0.1.6", + "@backstage/plugin-bitbucket-cloud-common": "0.2.23", + "@backstage/plugin-catalog": "1.23.0", + "@backstage/plugin-catalog-backend": "1.26.0", + "@backstage/plugin-catalog-backend-module-aws": "0.4.2", + "@backstage/plugin-catalog-backend-module-azure": "0.2.2", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.4.0", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.3.2", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.2.2", + "@backstage/plugin-catalog-backend-module-gcp": "0.3.0", + "@backstage/plugin-catalog-backend-module-gerrit": "0.2.2", + "@backstage/plugin-catalog-backend-module-github": "0.7.3", + "@backstage/plugin-catalog-backend-module-github-org": "0.3.0", + "@backstage/plugin-catalog-backend-module-gitlab": "0.4.2", + "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.0", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.5.3", + "@backstage/plugin-catalog-backend-module-ldap": "0.9.0", + "@backstage/plugin-catalog-backend-module-logs": "0.1.0", + "@backstage/plugin-catalog-backend-module-msgraph": "0.6.2", + "@backstage/plugin-catalog-backend-module-openapi": "0.2.0", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.2", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.0", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.0", + "@backstage/plugin-catalog-common": "1.1.0", + "@backstage/plugin-catalog-graph": "0.4.9", + "@backstage/plugin-catalog-import": "0.12.3", + "@backstage/plugin-catalog-node": "1.13.0", + "@backstage/plugin-catalog-react": "1.13.0", + "@backstage/plugin-catalog-unprocessed-entities": "0.2.8", + "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.4", + "@backstage/plugin-config-schema": "0.1.59", + "@backstage/plugin-devtools": "0.1.18", + "@backstage/plugin-devtools-backend": "0.4.0", + "@backstage/plugin-devtools-common": "0.1.12", + "@backstage/plugin-events-backend": "0.3.12", + "@backstage/plugin-events-backend-module-aws-sqs": "0.4.2", + "@backstage/plugin-events-backend-module-azure": "0.2.11", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.11", + "@backstage/plugin-events-backend-module-gerrit": "0.2.11", + "@backstage/plugin-events-backend-module-github": "0.2.11", + "@backstage/plugin-events-backend-module-gitlab": "0.2.11", + "@backstage/plugin-events-backend-test-utils": "0.1.35", + "@backstage/plugin-events-node": "0.4.0", + "@internal/plugin-todo-list": "1.0.31", + "@internal/plugin-todo-list-backend": "1.0.31", + "@internal/plugin-todo-list-common": "1.0.21", + "@backstage/plugin-home": "0.7.10", + "@backstage/plugin-home-react": "0.1.17", + "@backstage/plugin-kubernetes": "0.11.14", + "@backstage/plugin-kubernetes-backend": "0.18.6", + "@backstage/plugin-kubernetes-cluster": "0.0.15", + "@backstage/plugin-kubernetes-common": "0.8.3", + "@backstage/plugin-kubernetes-node": "0.1.19", + "@backstage/plugin-kubernetes-react": "0.4.3", + "@backstage/plugin-notifications": "0.3.1", + "@backstage/plugin-notifications-backend": "0.4.0", + "@backstage/plugin-notifications-backend-module-email": "0.3.0", + "@backstage/plugin-notifications-common": "0.0.5", + "@backstage/plugin-notifications-node": "0.2.6", + "@backstage/plugin-org": "0.6.29", + "@backstage/plugin-org-react": "0.1.28", + "@backstage/plugin-permission-backend": "0.5.49", + "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.0", + "@backstage/plugin-permission-common": "0.8.1", + "@backstage/plugin-permission-node": "0.8.3", + "@backstage/plugin-permission-react": "0.4.26", + "@backstage/plugin-proxy-backend": "0.5.6", + "@backstage/plugin-scaffolder": "1.25.0", + "@backstage/plugin-scaffolder-backend": "1.25.0", + "@backstage/plugin-scaffolder-backend-module-azure": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.0", + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.0", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.0", + "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-github": "0.5.0", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.5.0", + "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.0", + "@backstage/plugin-scaffolder-backend-module-rails": "0.5.0", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.0", + "@backstage/plugin-scaffolder-common": "1.5.6", + "@backstage/plugin-scaffolder-node": "0.4.11", + "@backstage/plugin-scaffolder-node-test-utils": "0.1.12", + "@backstage/plugin-scaffolder-react": "1.12.0", + "@backstage/plugin-search": "1.4.16", + "@backstage/plugin-search-backend": "1.5.17", + "@backstage/plugin-search-backend-module-catalog": "0.2.2", + "@backstage/plugin-search-backend-module-elasticsearch": "1.5.6", + "@backstage/plugin-search-backend-module-explore": "0.2.2", + "@backstage/plugin-search-backend-module-pg": "0.5.35", + "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.0", + "@backstage/plugin-search-backend-module-techdocs": "0.2.2", + "@backstage/plugin-search-backend-node": "1.3.2", + "@backstage/plugin-search-common": "1.2.14", + "@backstage/plugin-search-react": "1.8.0", + "@backstage/plugin-signals": "0.0.10", + "@backstage/plugin-signals-backend": "0.2.0", + "@backstage/plugin-signals-node": "0.1.11", + "@backstage/plugin-signals-react": "0.0.5", + "@backstage/plugin-techdocs": "1.10.9", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.38", + "@backstage/plugin-techdocs-backend": "1.10.13", + "@backstage/plugin-techdocs-common": "0.1.0", + "@backstage/plugin-techdocs-module-addons-contrib": "1.1.14", + "@backstage/plugin-techdocs-node": "1.12.11", + "@backstage/plugin-techdocs-react": "1.2.8", + "@backstage/plugin-user-settings": "0.8.12", + "@backstage/plugin-user-settings-backend": "0.2.24", + "@backstage/plugin-user-settings-common": "0.0.1", + "@internal/scaffolder": "0.0.1" + }, + "changesets": [ + "angry-windows-decide", + "big-rules-nail", + "breezy-bulldogs-smell", + "brown-frogs-walk", + "chair-fairs-drive", + "chilled-dolphins-join", + "clever-paws-stare", + "cyan-peaches-lay", + "dry-frogs-drum", + "early-drinks-kneel", + "eight-steaks-chew", + "eleven-pugs-hear", + "fair-chairs-drive", + "fifty-trainers-watch", + "five-gorillas-pay", + "fluffy-pears-cry", + "funny-rocks-train", + "fuzzy-elephants-tease", + "giant-kiwis-retire", + "happy-ligers-think", + "large-plants-rhyme", + "light-rats-travel", + "long-humans-hunt", + "nasty-lamps-greet", + "polite-days-flash", + "rich-deers-attend", + "shy-olives-swim", + "slow-gorillas-thank", + "slow-trees-compare", + "sour-phones-fix", + "stale-roses-serve", + "strange-bees-attack", + "strong-monkeys-melt", + "sweet-chicken-smash", + "thirty-pets-fry", + "tiny-pugs-kick" + ] +} diff --git a/.changeset/slow-gorillas-thank.md b/.changeset/slow-gorillas-thank.md new file mode 100644 index 0000000000..2c52964a47 --- /dev/null +++ b/.changeset/slow-gorillas-thank.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-events-backend': patch +--- + +The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events. + +The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances. + +The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus. diff --git a/.changeset/slow-trees-compare.md b/.changeset/slow-trees-compare.md new file mode 100644 index 0000000000..18e1a82ff9 --- /dev/null +++ b/.changeset/slow-trees-compare.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder-node': patch +'@backstage/plugin-scaffolder': patch +--- + +Make it possible to manually retry the scaffolder template from the step it failed diff --git a/.changeset/stale-roses-serve.md b/.changeset/stale-roses-serve.md new file mode 100644 index 0000000000..29dee56e22 --- /dev/null +++ b/.changeset/stale-roses-serve.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-node': patch +--- + +The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed. diff --git a/.changeset/strange-bees-attack.md b/.changeset/strange-bees-attack.md new file mode 100644 index 0000000000..c4e95097f8 --- /dev/null +++ b/.changeset/strange-bees-attack.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +`Link` component now accepts `externalLinkIcon` prop diff --git a/.changeset/sweet-chicken-smash.md b/.changeset/sweet-chicken-smash.md new file mode 100644 index 0000000000..9aa4c60803 --- /dev/null +++ b/.changeset/sweet-chicken-smash.md @@ -0,0 +1,14 @@ +--- +'@backstage/cli': minor +--- + +**BREAKING**: Removed the following deprecated commands: + +- `create`: Use `backstage-cli new` instead +- `create-plugin`: Use `backstage-cli new` instead +- `plugin:diff`: Use `backstage-cli fix` instead +- `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead +- `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead +- `clean`: Use `backstage-cli package clean` instead + +In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository. diff --git a/.changeset/thirty-pets-fry.md b/.changeset/thirty-pets-fry.md new file mode 100644 index 0000000000..2a588bb161 --- /dev/null +++ b/.changeset/thirty-pets-fry.md @@ -0,0 +1,8 @@ +--- +'@backstage/frontend-plugin-api': minor +'@backstage/core-plugin-api': minor +--- + +**BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + +This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). diff --git a/.changeset/tiny-pugs-kick.md b/.changeset/tiny-pugs-kick.md new file mode 100644 index 0000000000..2d6f83b325 --- /dev/null +++ b/.changeset/tiny-pugs-kick.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template. diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index 4914ed796c..2cbcc484f7 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -39,6 +39,8 @@ Brex broadcasted bugfixes builtins +bundler +bundlers callout CDNs Chai @@ -112,6 +114,7 @@ DOMPurify don'ts dynatrace Dynatrace +dyno ecco elasticsearch Entra @@ -200,6 +203,7 @@ Knex knip Koyeb KPIs +kroki Kuang kubectl kubernetes diff --git a/.prettierignore b/.prettierignore index 3a16bd1388..c7a16065e5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,8 +4,13 @@ microsite coverage *.hbs templates +# old reports api-report.md api-report-*.md +# new reports +report.api.md +report-*.api.md + knip-report.md cli-report.md plugins/scaffolder-backend/sample-templates diff --git a/REVIEWING.md b/REVIEWING.md index c443c15d77..66af880f43 100644 --- a/REVIEWING.md +++ b/REVIEWING.md @@ -68,7 +68,7 @@ In general our changeset feedback bot will take care of informing whether a chan Changes that do NOT need a new changeset: -- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `api-report.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. +- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `report.api.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. - When tweaking a change that has not yet been released, you can rely on and potentially modify the existing changeset instead. - Changes that do not belong to a published packages, either because it's not a package at all, such as `docs/`, or because the package is private, such as `packages/app`. - Changes that do not end up having an effect on the published package, such as whitespace fixes or code formatting changes. Although it's also fine to have a short changeset for these kind of changes too. @@ -168,7 +168,7 @@ In this section we will be talking about changed "types", but by that we mean an #### API Reports -We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `api-report.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. +We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `report.api.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. Each API report contains a list of all the exported types of each package. As long as the API report does not have any warnings it will contain the full publicly facing API of the package, meaning you do not need to consider any other changes to the package from the point of view of TypeScript API stability. diff --git a/beps/0002-dynamic-frontend-plugins/README.md b/beps/0002-dynamic-frontend-plugins/README.md index db223c959d..1007732eec 100644 --- a/beps/0002-dynamic-frontend-plugins/README.md +++ b/beps/0002-dynamic-frontend-plugins/README.md @@ -595,7 +595,7 @@ Singleton "might have to" list: > NOTE: Can leverage [Generate module sharing map](#generate-module-sharing-map). -Component libraries are usually large (thousands of svg icons in @mui/icons) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers. +Component libraries are usually large (thousands of SVG icons in `@mui/icons`) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers. Sharing components like these can be done on module level. Instead of sharing the entire package, share its individual components: @@ -625,7 +625,7 @@ There is also a conflict with the chunk splitting currently used in the Backstag #### Webpack chunk optimization -Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, cna be forced out of it. This is particularly problematic for the "shell" application. +Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, can be forced out of it. This is particularly problematic for the "shell" application. Chunk optimization should be disabled for the initial implementation. diff --git a/docs/frontend-system/building-plugins/03-common-extension-blueprints.md b/docs/frontend-system/building-plugins/03-common-extension-blueprints.md index 5193fd85b1..d08de7012d 100644 --- a/docs/frontend-system/building-plugins/03-common-extension-blueprints.md +++ b/docs/frontend-system/building-plugins/03-common-extension-blueprints.md @@ -50,14 +50,14 @@ Translation extension provide custom translation messages for the app. They can These are the [extension blueprints](../architecture/23-extension-blueprints.md) provided by the Backstage core feature plugins. -### EntityCard - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) +### EntityCard - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) Creates entity cards to be displayed on the entity pages of the catalog plugin. Exported as `EntityCardBlueprint`. -### EntityContent - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) +### EntityContent - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) Creates entity content to be displayed on the entity pages of the catalog plugin. Exported as `EntityContentBlueprint`. -### SearchResultListItem - [Reference](https://github.com/backstage/backstage/blob/master/plugins/search-react/api-report-alpha.md) +### SearchResultListItem - [Reference](https://github.com/backstage/backstage/blob/master/plugins/search-react/report-alpha.api.md) Creates search result list items for different types of search results, to be displayed in search result lists. Exported as `SearchResultListItemBlueprint`. diff --git a/docs/notifications/index.md b/docs/notifications/index.md index d4234b494e..ddbb156dac 100644 --- a/docs/notifications/index.md +++ b/docs/notifications/index.md @@ -196,7 +196,7 @@ notificationService.send({ }); ``` -Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/api-report.md) for further details. +Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/report.api.md) for further details. ### Signals diff --git a/docs/releases/v1.32.0-next.0-changelog.md b/docs/releases/v1.32.0-next.0-changelog.md new file mode 100644 index 0000000000..8168a5659a --- /dev/null +++ b/docs/releases/v1.32.0-next.0-changelog.md @@ -0,0 +1,2238 @@ +# Release v1.32.0-next.0 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.32.0-next.0](https://backstage.github.io/upgrade-helper/?to=1.32.0-next.0) + +## @backstage/cli@0.28.0-next.0 + +### Minor Changes + +- 6129076: **BREAKING**: Removed the following deprecated commands: + + - `create`: Use `backstage-cli new` instead + - `create-plugin`: Use `backstage-cli new` instead + - `plugin:diff`: Use `backstage-cli fix` instead + - `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead + - `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead + - `clean`: Use `backstage-cli package clean` instead + + In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository. + +### Patch Changes + +- 520a383: Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. +- 094eaa3: Remove references to in-repo backend-common +- 79ba5a8: The `LEGACY_BACKEND_START` flag is now deprecated. +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.9 + - @backstage/integration@1.15.0 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/core-plugin-api@1.10.0-next.0 + +### Minor Changes + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/frontend-app-api@0.10.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `createApp` and `CreateAppFeatureLoader` from `@backstage/frontend-app-api`, use the same `createApp` and `CreateAppFeatureLoader` import from `@backstage/frontend-defaults` instead. + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/frontend-plugin-api@0.9.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `namespace` option from `createExtension` and `createExtensionBlueprint`, including `.make` and `.makeWithOverides`, it's no longer necessary and will use the `pluginId` instead. + + Removed deprecated `createExtensionOverrides` this should be replaced with `createFrontendModule` instead. + + Removed deprecated `BackstagePlugin` type, use `FrontendPlugin` type instead from this same package. + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. + +- 323aae8: It is now possible to override the blueprint parameters when overriding an extension created from a blueprint: + + ```ts + const myExtension = MyBlueprint.make({ + params: { + myParam: 'myDefault', + }, + }); + + const myOverride = myExtension.override({ + params: { + myParam: 'myOverride', + }, + }); + const myFactoryOverride = myExtension.override({ + factory(origFactory) { + return origFactory({ + params: { + myParam: 'myOverride', + }, + }); + }, + }); + ``` + + The provided parameters will be merged with the original parameters of the extension. + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/repo-tools@0.10.0-next.0 + +### Minor Changes + +- 30c2be9: Update @microsoft/api-extractor and use their api report resolution. + Change api report format from `api-report.md` to `report.api.md` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog@1.24.0-next.0 + +### Minor Changes + +- 71f9f0c: Updated default columns for location entities to remove description and tags from the catalog table view. + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-scaffolder@1.26.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin +- cc3f80c: Added ability to create a new local scaffolder template to ease onboarding when creating new templates. +- 5492eb6: Added ability to link to a specific action on the actions page + +### Patch Changes + +- b2b2aa8: Fix extra divider displayed in owner list picker on list tasks page +- 7f1f483: Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there. +- 7a3d622: Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page. +- 4698646: Change task list created at column to show timestamp +- 4130291: Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page. +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- 09fcd95: Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-backend@1.26.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 734c2d4: Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage: + + ```yaml + - id: fetch-file + name: Fetch File + action: fetch:template:file + input: + url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml + targetPath: './target/catalog-info.yaml' + values: + component_id: My Component + owner: Test + ``` + +- 094eaa3: Remove references to in-repo backend-common + +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-node@0.5.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-react@1.13.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin + +### Patch Changes + +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/app-defaults@1.5.12-next.0 + +### Patch Changes + +- 46b5a20: Added `externalLink` to icon defaults +- 8c40e55: Updated the `bitbucket-server-auth` default API to set its environment based on the `auth.environment` config option instead of being hardcoded to `development`. +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/backend-app-api@1.0.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common + +- 04af116: The backend will no longer exit immediately if any plugin or modules fails to initialize. Instead, the backend will wait for all plugins and modules to either start up successfully or throw, and then shut down the backend if there were any initialization errors. + + This fixes an issue where backend initialization errors in adjacent plugins during database schema migration could cause the database migrations to be stuck in a locked state. + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/backend-defaults@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + +## @backstage/backend-dynamic-feature-service@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-openapi-utils@0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + +## @backstage/backend-plugin-api@1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/backend-test-utils@1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/core-app-api@1.15.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/core-compat-api@0.3.1-next.0 + +### Patch Changes + +- 4a5ba19: Internal update to remove deprecated `BackstagePlugin` type and move to `FrontendPlugin` +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/version-bridge@1.0.9 + +## @backstage/core-components@0.15.1-next.0 + +### Patch Changes + +- 46b5a20: `Link` component now accepts `externalLinkIcon` prop +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/version-bridge@1.0.9 + +## @backstage/create-app@0.5.21-next.0 + +### Patch Changes + +- a7674d6: Fixed lack of `.yarnrc.yml` in the template. +- Updated dependencies + - @backstage/cli-common@0.1.14 + +## @backstage/dev-utils@1.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + +## @backstage/frontend-defaults@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/frontend-test-utils@0.2.1-next.0 + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/integration-react@1.1.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + +## @techdocs/cli@1.8.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + +## @backstage/test-utils@1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-api-docs@0.11.10-next.0 + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-app@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-app-backend@0.3.75-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + +## @backstage/plugin-app-node@0.1.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config-loader@1.9.1 + +## @backstage/plugin-app-visualizer@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + +## @backstage/plugin-auth-backend@0.23.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + +## @backstage/plugin-auth-node@0.5.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-react@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend@1.26.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-azure@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.7.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-github@0.7.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-logs@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-graph@0.4.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-import@0.12.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-node@1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-react@1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-config-schema@0.1.60-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-devtools@0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-devtools-backend@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-events-backend@0.3.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common + +- 5c728ee: The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events. + + The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances. + + The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus. + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-azure@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-events-backend-module-gerrit@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-events-backend-module-github@0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-module-gitlab@0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-test-utils@0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + +## @backstage/plugin-events-node@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- a90ce4a: The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-home@0.7.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-home-react@0.1.18-next.0 + +## @backstage/plugin-home-react@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + +## @backstage/plugin-kubernetes@0.11.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + +## @backstage/plugin-kubernetes-backend@0.18.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-kubernetes-node@0.1.20-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + +## @backstage/plugin-kubernetes-node@0.1.20-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-kubernetes-react@0.4.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-notifications@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-common@0.0.5 + - @backstage/plugin-signals-react@0.0.6-next.0 + +## @backstage/plugin-notifications-backend@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-notifications-backend-module-email@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-notifications-node@0.2.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-org@0.6.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-org-react@0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + +## @backstage/plugin-permission-backend@0.5.50-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-permission-node@0.8.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-permission-react@0.4.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-proxy-backend@0.5.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- f2f68cf: Updated `gitlab:group:ensureExists` action to instead use oauth client. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-test-utils@1.0.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-search@1.4.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend@1.5.18-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0 + +### Patch Changes + +- d78b07c: Align the configuration schema with the docs and actual behavior of the code +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-pg@0.5.36-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + +## @backstage/plugin-search-backend-node@1.3.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-react@1.8.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-signals@0.0.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6-next.0 + +## @backstage/plugin-signals-backend@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-signals-node@0.1.12-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-signals-react@0.0.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-techdocs@1.10.10-next.0 + +### Patch Changes + +- a77cb40: Make `emptyState` input optional on `entity-content:techdocs` extension so that + the default empty state extension works correctly. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @backstage/plugin-techdocs-backend@1.10.14-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @backstage/plugin-techdocs-node@1.12.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/version-bridge@1.0.9 + +## @backstage/plugin-user-settings@0.8.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6-next.0 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.102-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-devtools@0.1.19-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## example-app-next@0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/plugin-app-visualizer@0.1.11-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## app-next-example-plugin@0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + +## example-backend@0.0.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-notifications-backend@0.4.1-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## example-backend-legacy@0.2.103-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0 + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.36-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## e2e-test@0.2.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.21-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/errors@1.2.4 + +## @internal/frontend@0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @internal/scaffolder@0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + +## techdocs-cli-embedded-app@0.2.101-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @internal/plugin-todo-list@1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + +## @internal/plugin-todo-list-backend@1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 diff --git a/package.json b/package.json index 346739959a..72f7113331 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "root", - "version": "1.31.0", + "version": "1.32.0-next.0", "private": true, "repository": { "type": "git", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 332e9557e7..70d5261e9a 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/app-defaults +## 1.5.12-next.0 + +### Patch Changes + +- 46b5a20: Added `externalLink` to icon defaults +- 8c40e55: Updated the `bitbucket-server-auth` default API to set its environment based on the `auth.environment` config option instead of being hardcoded to `development`. +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 1.5.11 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 6eb78c5734..dac7cebeaa 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/app-defaults", - "version": "1.5.11", + "version": "1.5.12-next.0", "description": "Provides the default wiring of a Backstage App", "backstage": { "role": "web-library" diff --git a/packages/app-defaults/api-report.md b/packages/app-defaults/report.api.md similarity index 100% rename from packages/app-defaults/api-report.md rename to packages/app-defaults/report.api.md diff --git a/packages/app-defaults/src/defaults/icons.tsx b/packages/app-defaults/src/defaults/icons.tsx index ebda36c131..e0b93517e7 100644 --- a/packages/app-defaults/src/defaults/icons.tsx +++ b/packages/app-defaults/src/defaults/icons.tsx @@ -38,6 +38,7 @@ import MuiStorageIcon from '@material-ui/icons/Storage'; import MuiFeaturedPlayListIcon from '@material-ui/icons/FeaturedPlayList'; import Star from '@material-ui/icons/Star'; import StarBorder from '@material-ui/icons/StarBorder'; +import OpenInNew from '@material-ui/icons/OpenInNew'; export const icons = { brokenImage: MuiBrokenImageIcon as IconComponent, @@ -66,4 +67,5 @@ export const icons = { warning: MuiWarningIcon as IconComponent, star: Star as IconComponent, unstarred: StarBorder as IconComponent, + externalLink: OpenInNew as IconComponent, }; diff --git a/packages/app-next-example-plugin/CHANGELOG.md b/packages/app-next-example-plugin/CHANGELOG.md index 1e593e642f..e7e0d18b5e 100644 --- a/packages/app-next-example-plugin/CHANGELOG.md +++ b/packages/app-next-example-plugin/CHANGELOG.md @@ -1,5 +1,13 @@ # app-next-example-plugin +## 0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + ## 0.0.15 ### Patch Changes diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json index 530944ac13..4f3342c100 100644 --- a/packages/app-next-example-plugin/package.json +++ b/packages/app-next-example-plugin/package.json @@ -1,6 +1,6 @@ { "name": "app-next-example-plugin", - "version": "0.0.15", + "version": "0.0.16-next.0", "description": "Backstage internal example plugin", "backstage": { "role": "frontend-plugin", diff --git a/packages/app-next-example-plugin/api-report.md b/packages/app-next-example-plugin/report.api.md similarity index 86% rename from packages/app-next-example-plugin/api-report.md rename to packages/app-next-example-plugin/report.api.md index 1fc58dfc17..3094fee56e 100644 --- a/packages/app-next-example-plugin/api-report.md +++ b/packages/app-next-example-plugin/report.api.md @@ -52,5 +52,10 @@ export default examplePlugin; // @public (undocumented) export const ExampleSidebarItem: () => React_2.JSX.Element; +// Warnings were encountered during analysis: +// +// src/ExampleSidebarItem.d.ts:3:22 - (ae-undocumented) Missing documentation for "ExampleSidebarItem". +// src/plugin.d.ts:22:22 - (ae-undocumented) Missing documentation for "examplePlugin". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md index 907d6b1e6f..7a02795402 100644 --- a/packages/app-next/CHANGELOG.md +++ b/packages/app-next/CHANGELOG.md @@ -1,5 +1,50 @@ # example-app-next +## 0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/plugin-app-visualizer@0.1.11-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 0.0.15 ### Patch Changes diff --git a/packages/app-next/package.json b/packages/app-next/package.json index 04565a76a3..29f9105031 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -1,6 +1,6 @@ { "name": "example-app-next", - "version": "0.0.15", + "version": "0.0.16-next.0", "backstage": { "role": "frontend" }, diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 490937fd68..bc152199f3 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,46 @@ # example-app +## 0.2.102-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-devtools@0.1.19-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 0.2.101 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 56a90fcbf0..15cdd85d32 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.101", + "version": "0.2.102-next.0", "backstage": { "role": "frontend" }, diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 2eb1534e7e..20926596c5 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/backend-app-api +## 1.0.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 04af116: The backend will no longer exit immediately if any plugin or modules fails to initialize. Instead, the backend will wait for all plugins and modules to either start up successfully or throw, and then shut down the backend if there were any initialization errors. + + This fixes an issue where backend initialization errors in adjacent plugins during database schema migration could cause the database migrations to be stuck in a locked state. + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 1.0.0 ### Major Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 5e9291a884..018eea139f 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-app-api", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "Core API used by Backstage backend apps", "backstage": { "role": "node-library" diff --git a/packages/backend-app-api/api-report-alpha.md b/packages/backend-app-api/report-alpha.api.md similarity index 73% rename from packages/backend-app-api/api-report-alpha.md rename to packages/backend-app-api/report-alpha.api.md index 163cc325a1..e3f11bb800 100644 --- a/packages/backend-app-api/api-report-alpha.md +++ b/packages/backend-app-api/report-alpha.api.md @@ -13,5 +13,9 @@ export const featureDiscoveryServiceFactory: ServiceFactory< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/alpha/featureDiscoveryServiceFactory.d.ts:5:22 - (ae-undocumented) Missing documentation for "featureDiscoveryServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/report.api.md similarity index 53% rename from packages/backend-app-api/api-report.md rename to packages/backend-app-api/report.api.md index 88fa34e6e4..ec32ec9b67 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/report.api.md @@ -32,4 +32,14 @@ export interface CreateSpecializedBackendOptions { // (undocumented) defaultServiceFactories: ServiceFactory[]; } + +// Warnings were encountered during analysis: +// +// src/wiring/createSpecializedBackend.d.ts:5:1 - (ae-undocumented) Missing documentation for "createSpecializedBackend". +// src/wiring/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "Backend". +// src/wiring/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "add". +// src/wiring/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "start". +// src/wiring/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "stop". +// src/wiring/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "CreateSpecializedBackendOptions". +// src/wiring/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "defaultServiceFactories". ``` diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 216d08182a..1fe09ee8f8 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/backend-defaults +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + ## 0.5.0 ### Minor Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index f096bd573e..4437a4ff1f 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-defaults", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "Backend defaults used by Backstage backend apps", "backstage": { "role": "node-library" diff --git a/packages/backend-defaults/api-report-auth.md b/packages/backend-defaults/report-auth.api.md similarity index 100% rename from packages/backend-defaults/api-report-auth.md rename to packages/backend-defaults/report-auth.api.md diff --git a/packages/backend-defaults/api-report-cache.md b/packages/backend-defaults/report-cache.api.md similarity index 100% rename from packages/backend-defaults/api-report-cache.md rename to packages/backend-defaults/report-cache.api.md diff --git a/packages/backend-defaults/api-report-database.md b/packages/backend-defaults/report-database.api.md similarity index 100% rename from packages/backend-defaults/api-report-database.md rename to packages/backend-defaults/report-database.api.md diff --git a/packages/backend-defaults/api-report-discovery.md b/packages/backend-defaults/report-discovery.api.md similarity index 74% rename from packages/backend-defaults/api-report-discovery.md rename to packages/backend-defaults/report-discovery.api.md index d168d33a71..e39d281b4e 100644 --- a/packages/backend-defaults/api-report-discovery.md +++ b/packages/backend-defaults/report-discovery.api.md @@ -23,5 +23,10 @@ export class HostDiscovery implements DiscoveryService { getExternalBaseUrl(pluginId: string): Promise; } +// Warnings were encountered during analysis: +// +// src/entrypoints/discovery/HostDiscovery.d.ts:44:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/entrypoints/discovery/HostDiscovery.d.ts:45:5 - (ae-undocumented) Missing documentation for "getExternalBaseUrl". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-httpAuth.md b/packages/backend-defaults/report-httpAuth.api.md similarity index 100% rename from packages/backend-defaults/api-report-httpAuth.md rename to packages/backend-defaults/report-httpAuth.api.md diff --git a/packages/backend-defaults/api-report-httpRouter.md b/packages/backend-defaults/report-httpRouter.api.md similarity index 100% rename from packages/backend-defaults/api-report-httpRouter.md rename to packages/backend-defaults/report-httpRouter.api.md diff --git a/packages/backend-defaults/api-report-lifecycle.md b/packages/backend-defaults/report-lifecycle.api.md similarity index 100% rename from packages/backend-defaults/api-report-lifecycle.md rename to packages/backend-defaults/report-lifecycle.api.md diff --git a/packages/backend-defaults/api-report-logger.md b/packages/backend-defaults/report-logger.api.md similarity index 100% rename from packages/backend-defaults/api-report-logger.md rename to packages/backend-defaults/report-logger.api.md diff --git a/packages/backend-defaults/api-report-permissions.md b/packages/backend-defaults/report-permissions.api.md similarity index 100% rename from packages/backend-defaults/api-report-permissions.md rename to packages/backend-defaults/report-permissions.api.md diff --git a/packages/backend-defaults/api-report-rootConfig.md b/packages/backend-defaults/report-rootConfig.api.md similarity index 72% rename from packages/backend-defaults/api-report-rootConfig.md rename to packages/backend-defaults/report-rootConfig.api.md index 2935ad1128..6c65d00a3b 100644 --- a/packages/backend-defaults/api-report-rootConfig.md +++ b/packages/backend-defaults/report-rootConfig.api.md @@ -31,5 +31,11 @@ export const rootConfigServiceFactory: (( ) => ServiceFactory) & ServiceFactory; +// Warnings were encountered during analysis: +// +// src/entrypoints/rootConfig/createConfigSecretEnumerator.d.ts:5:1 - (ae-undocumented) Missing documentation for "createConfigSecretEnumerator". +// src/entrypoints/rootConfig/rootConfigServiceFactory.d.ts:20:5 - (ae-undocumented) Missing documentation for "watch". +// src/entrypoints/rootConfig/rootConfigServiceFactory.d.ts:26:22 - (ae-undocumented) Missing documentation for "rootConfigServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-rootHealth.md b/packages/backend-defaults/report-rootHealth.api.md similarity index 71% rename from packages/backend-defaults/api-report-rootHealth.md rename to packages/backend-defaults/report-rootHealth.api.md index b26de7cfda..fa09590c26 100644 --- a/packages/backend-defaults/api-report-rootHealth.md +++ b/packages/backend-defaults/report-rootHealth.api.md @@ -13,5 +13,9 @@ export const rootHealthServiceFactory: ServiceFactory< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/entrypoints/rootHealth/rootHealthServiceFactory.d.ts:5:22 - (ae-undocumented) Missing documentation for "rootHealthServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-rootHttpRouter.md b/packages/backend-defaults/report-rootHttpRouter.api.md similarity index 61% rename from packages/backend-defaults/api-report-rootHttpRouter.md rename to packages/backend-defaults/report-rootHttpRouter.api.md index 3686f25a12..9a435f5c27 100644 --- a/packages/backend-defaults/api-report-rootHttpRouter.md +++ b/packages/backend-defaults/report-rootHttpRouter.api.md @@ -154,5 +154,28 @@ export const rootHttpRouterServiceFactory: (( ) => ServiceFactory) & ServiceFactory; +// Warnings were encountered during analysis: +// +// src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:23:5 - (ae-undocumented) Missing documentation for "create". +// src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:25:5 - (ae-undocumented) Missing documentation for "use". +// src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:26:5 - (ae-undocumented) Missing documentation for "handler". +// src/entrypoints/rootHttpRouter/createHealthRouter.d.ts:6:1 - (ae-undocumented) Missing documentation for "createHealthRouter". +// src/entrypoints/rootHttpRouter/http/MiddlewareFactory.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/entrypoints/rootHttpRouter/http/MiddlewareFactory.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". +// src/entrypoints/rootHttpRouter/http/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "start". +// src/entrypoints/rootHttpRouter/http/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "stop". +// src/entrypoints/rootHttpRouter/http/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "port". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:9:1 - (ae-undocumented) Missing documentation for "RootHttpRouterConfigureContext". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:10:5 - (ae-undocumented) Missing documentation for "app". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:11:5 - (ae-undocumented) Missing documentation for "server". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:12:5 - (ae-undocumented) Missing documentation for "middleware". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:13:5 - (ae-undocumented) Missing documentation for "routes". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:15:5 - (ae-undocumented) Missing documentation for "logger". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:16:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:17:5 - (ae-undocumented) Missing documentation for "healthRouter". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:18:5 - (ae-undocumented) Missing documentation for "applyDefaults". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:38:22 - (ae-undocumented) Missing documentation for "rootHttpRouterServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-rootLifecycle.md b/packages/backend-defaults/report-rootLifecycle.api.md similarity index 100% rename from packages/backend-defaults/api-report-rootLifecycle.md rename to packages/backend-defaults/report-rootLifecycle.api.md diff --git a/packages/backend-defaults/api-report-rootLogger.md b/packages/backend-defaults/report-rootLogger.api.md similarity index 55% rename from packages/backend-defaults/api-report-rootLogger.md rename to packages/backend-defaults/report-rootLogger.api.md index b353039c03..59b6242095 100644 --- a/packages/backend-defaults/api-report-rootLogger.md +++ b/packages/backend-defaults/report-rootLogger.api.md @@ -51,5 +51,19 @@ export interface WinstonLoggerOptions { transports?: transport[]; } +// Warnings were encountered during analysis: +// +// src/entrypoints/rootLogger/WinstonLogger.d.ts:8:1 - (ae-undocumented) Missing documentation for "WinstonLoggerOptions". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:9:5 - (ae-undocumented) Missing documentation for "meta". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:10:5 - (ae-undocumented) Missing documentation for "level". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:11:5 - (ae-undocumented) Missing documentation for "format". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:12:5 - (ae-undocumented) Missing documentation for "transports". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:37:5 - (ae-undocumented) Missing documentation for "error". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:38:5 - (ae-undocumented) Missing documentation for "warn". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:39:5 - (ae-undocumented) Missing documentation for "info". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:40:5 - (ae-undocumented) Missing documentation for "debug". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:41:5 - (ae-undocumented) Missing documentation for "child". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:42:5 - (ae-undocumented) Missing documentation for "addRedactions". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-scheduler.md b/packages/backend-defaults/report-scheduler.api.md similarity index 81% rename from packages/backend-defaults/api-report-scheduler.md rename to packages/backend-defaults/report-scheduler.api.md index 10c0c0a943..351873ad31 100644 --- a/packages/backend-defaults/api-report-scheduler.md +++ b/packages/backend-defaults/report-scheduler.api.md @@ -24,5 +24,9 @@ export const schedulerServiceFactory: ServiceFactory< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/entrypoints/scheduler/lib/DefaultSchedulerService.d.ts:8:5 - (ae-undocumented) Missing documentation for "create". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-urlReader.md b/packages/backend-defaults/report-urlReader.api.md similarity index 59% rename from packages/backend-defaults/api-report-urlReader.md rename to packages/backend-defaults/report-urlReader.api.md index f8b8db2954..7b41ce33e4 100644 --- a/packages/backend-defaults/api-report-urlReader.md +++ b/packages/backend-defaults/report-urlReader.api.md @@ -447,5 +447,78 @@ export type UrlReadersOptions = { factories?: ReaderFactory[]; }; +// Warnings were encountered during analysis: +// +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:27:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:39:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:40:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:41:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:42:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:43:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:22:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:16:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:22:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:23:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:24:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:23:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:24:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:25:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:26:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:27:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:28:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:32:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:33:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:34:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:35:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:36:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:24:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:26:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:27:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:28:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:29:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:30:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:31:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:34:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:14:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:22:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/types.d.ts:74:5 - (ae-undocumented) Missing documentation for "fromTarArchive". +// src/entrypoints/urlReader/lib/types.d.ts:81:5 - (ae-undocumented) Missing documentation for "fromZipArchive". +// src/entrypoints/urlReader/lib/types.d.ts:82:5 - (ae-undocumented) Missing documentation for "fromReadableArray". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-userInfo.md b/packages/backend-defaults/report-userInfo.api.md similarity index 100% rename from packages/backend-defaults/api-report-userInfo.md rename to packages/backend-defaults/report-userInfo.api.md diff --git a/packages/backend-defaults/api-report.md b/packages/backend-defaults/report.api.md similarity index 74% rename from packages/backend-defaults/api-report.md rename to packages/backend-defaults/report.api.md index def38beda7..9878336d27 100644 --- a/packages/backend-defaults/api-report.md +++ b/packages/backend-defaults/report.api.md @@ -11,4 +11,8 @@ export function createBackend(): Backend; // @public export const discoveryFeatureLoader: BackendFeature; + +// Warnings were encountered during analysis: +// +// src/CreateBackend.d.ts:6:1 - (ae-undocumented) Missing documentation for "createBackend". ``` diff --git a/packages/backend-dev-utils/api-report.md b/packages/backend-dev-utils/report.api.md similarity index 100% rename from packages/backend-dev-utils/api-report.md rename to packages/backend-dev-utils/report.api.md diff --git a/packages/backend-dynamic-feature-service/CHANGELOG.md b/packages/backend-dynamic-feature-service/CHANGELOG.md index 937468541e..61501e48c8 100644 --- a/packages/backend-dynamic-feature-service/CHANGELOG.md +++ b/packages/backend-dynamic-feature-service/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/backend-dynamic-feature-service +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + ## 0.4.0 ### Minor Changes diff --git a/packages/backend-dynamic-feature-service/package.json b/packages/backend-dynamic-feature-service/package.json index 5a1cfc0e7d..d30395aa67 100644 --- a/packages/backend-dynamic-feature-service/package.json +++ b/packages/backend-dynamic-feature-service/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-dynamic-feature-service", - "version": "0.4.0", + "version": "0.4.1-next.0", "description": "Backstage dynamic feature service", "backstage": { "role": "node-library" diff --git a/packages/backend-dynamic-feature-service/api-report.md b/packages/backend-dynamic-feature-service/report.api.md similarity index 56% rename from packages/backend-dynamic-feature-service/api-report.md rename to packages/backend-dynamic-feature-service/report.api.md index f6972da50b..9170fedf43 100644 --- a/packages/backend-dynamic-feature-service/api-report.md +++ b/packages/backend-dynamic-feature-service/report.api.md @@ -276,5 +276,71 @@ export interface ScannedPluginPackage { manifest: ScannedPluginManifest; } +// Warnings were encountered during analysis: +// +// src/loader/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "ModuleLoader". +// src/loader/types.d.ts:5:5 - (ae-undocumented) Missing documentation for "bootstrap". +// src/loader/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "load". +// src/manager/plugin-manager.d.ts:10:1 - (ae-undocumented) Missing documentation for "DynamicPluginManagerOptions". +// src/manager/plugin-manager.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/manager/plugin-manager.d.ts:12:5 - (ae-undocumented) Missing documentation for "logger". +// src/manager/plugin-manager.d.ts:13:5 - (ae-undocumented) Missing documentation for "preferAlpha". +// src/manager/plugin-manager.d.ts:14:5 - (ae-undocumented) Missing documentation for "moduleLoader". +// src/manager/plugin-manager.d.ts:19:1 - (ae-undocumented) Missing documentation for "DynamicPluginManager". +// src/manager/plugin-manager.d.ts:23:5 - (ae-undocumented) Missing documentation for "create". +// src/manager/plugin-manager.d.ts:27:5 - (ae-undocumented) Missing documentation for "availablePackages". +// src/manager/plugin-manager.d.ts:28:5 - (ae-undocumented) Missing documentation for "addBackendPlugin". +// src/manager/plugin-manager.d.ts:31:5 - (ae-undocumented) Missing documentation for "backendPlugins". +// src/manager/plugin-manager.d.ts:32:5 - (ae-undocumented) Missing documentation for "frontendPlugins". +// src/manager/plugin-manager.d.ts:33:5 - (ae-undocumented) Missing documentation for "plugins". +// src/manager/plugin-manager.d.ts:39:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceRef". +// src/manager/plugin-manager.d.ts:43:1 - (ae-undocumented) Missing documentation for "DynamicPluginsFactoryOptions". +// src/manager/plugin-manager.d.ts:44:5 - (ae-undocumented) Missing documentation for "moduleLoader". +// src/manager/plugin-manager.d.ts:50:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceFactoryWithOptions". +// src/manager/plugin-manager.d.ts:55:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceFactory". +// src/manager/plugin-manager.d.ts:60:22 - (ae-undocumented) Missing documentation for "dynamicPluginsFeatureDiscoveryServiceFactory". +// src/manager/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "LegacyPluginEnvironment". +// src/manager/types.d.ts:45:1 - (ae-undocumented) Missing documentation for "DynamicPluginProvider". +// src/manager/types.d.ts:46:5 - (ae-undocumented) Missing documentation for "plugins". +// src/manager/types.d.ts:51:1 - (ae-undocumented) Missing documentation for "BackendPluginProvider". +// src/manager/types.d.ts:52:5 - (ae-undocumented) Missing documentation for "backendPlugins". +// src/manager/types.d.ts:57:1 - (ae-undocumented) Missing documentation for "FrontendPluginProvider". +// src/manager/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "frontendPlugins". +// src/manager/types.d.ts:63:1 - (ae-undocumented) Missing documentation for "BaseDynamicPlugin". +// src/manager/types.d.ts:64:5 - (ae-undocumented) Missing documentation for "name". +// src/manager/types.d.ts:65:5 - (ae-undocumented) Missing documentation for "version". +// src/manager/types.d.ts:66:5 - (ae-undocumented) Missing documentation for "role". +// src/manager/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:72:1 - (ae-undocumented) Missing documentation for "DynamicPlugin". +// src/manager/types.d.ts:76:1 - (ae-undocumented) Missing documentation for "FrontendDynamicPlugin". +// src/manager/types.d.ts:77:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:82:1 - (ae-undocumented) Missing documentation for "BackendDynamicPlugin". +// src/manager/types.d.ts:83:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:84:5 - (ae-undocumented) Missing documentation for "installer". +// src/manager/types.d.ts:89:1 - (ae-undocumented) Missing documentation for "BackendDynamicPluginInstaller". +// src/manager/types.d.ts:93:1 - (ae-undocumented) Missing documentation for "NewBackendPluginInstaller". +// src/manager/types.d.ts:94:5 - (ae-undocumented) Missing documentation for "kind". +// src/manager/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "install". +// src/manager/types.d.ts:108:1 - (ae-undocumented) Missing documentation for "LegacyBackendPluginInstaller". +// src/manager/types.d.ts:109:5 - (ae-undocumented) Missing documentation for "kind". +// src/manager/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "router". +// src/manager/types.d.ts:114:5 - (ae-undocumented) Missing documentation for "catalog". +// src/manager/types.d.ts:115:5 - (ae-undocumented) Missing documentation for "scaffolder". +// src/manager/types.d.ts:116:5 - (ae-undocumented) Missing documentation for "search". +// src/manager/types.d.ts:117:5 - (ae-undocumented) Missing documentation for "events". +// src/manager/types.d.ts:118:5 - (ae-undocumented) Missing documentation for "permissions". +// src/manager/types.d.ts:125:1 - (ae-undocumented) Missing documentation for "isBackendDynamicPluginInstaller". +// src/scanner/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ScannedPluginPackage". +// src/scanner/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "location". +// src/scanner/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "manifest". +// src/scanner/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "ScannedPluginManifest". +// src/schemas/appBackendModule.d.ts:2:22 - (ae-undocumented) Missing documentation for "dynamicPluginsFrontendSchemas". +// src/schemas/rootLoggerServiceFactory.d.ts:2:22 - (ae-undocumented) Missing documentation for "dynamicPluginsRootLoggerServiceFactory". +// src/schemas/schemas.d.ts:7:1 - (ae-undocumented) Missing documentation for "DynamicPluginsSchemasService". +// src/schemas/schemas.d.ts:8:5 - (ae-undocumented) Missing documentation for "addDynamicPluginsSchemas". +// src/schemas/schemas.d.ts:21:1 - (ae-undocumented) Missing documentation for "DynamicPluginsSchemasOptions". +// src/schemas/schemas.d.ts:36:22 - (ae-undocumented) Missing documentation for "dynamicPluginsSchemasServiceFactoryWithOptions". +// src/schemas/schemas.d.ts:40:22 - (ae-undocumented) Missing documentation for "dynamicPluginsSchemasServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-legacy/CHANGELOG.md b/packages/backend-legacy/CHANGELOG.md index 160ca1ca02..e19594aa65 100644 --- a/packages/backend-legacy/CHANGELOG.md +++ b/packages/backend-legacy/CHANGELOG.md @@ -1,5 +1,46 @@ # example-backend-legacy +## 0.2.103-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0 + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.36-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.2.102 ### Patch Changes diff --git a/packages/backend-legacy/package.json b/packages/backend-legacy/package.json index b9fa12ef02..12c8570616 100644 --- a/packages/backend-legacy/package.json +++ b/packages/backend-legacy/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-legacy", - "version": "0.2.102", + "version": "0.2.103-next.0", "backstage": { "role": "backend" }, diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index b0abef5cc8..9bb33dd55d 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/backend-openapi-utils +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 0.1.18 ### Patch Changes diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index feaf61883c..8f6fd1b6eb 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-openapi-utils", - "version": "0.1.18", + "version": "0.1.19-next.0", "description": "OpenAPI typescript support.", "backstage": { "role": "node-library" diff --git a/packages/backend-openapi-utils/api-report.md b/packages/backend-openapi-utils/report.api.md similarity index 72% rename from packages/backend-openapi-utils/api-report.md rename to packages/backend-openapi-utils/report.api.md index 8e702b8c23..a0495f39b5 100644 --- a/packages/backend-openapi-utils/api-report.md +++ b/packages/backend-openapi-utils/report.api.md @@ -717,4 +717,84 @@ type ValueOf = T[keyof T]; // @public export const wrapInOpenApiTestServer: (app: Express_2) => Server | Express_2; + +// Warnings were encountered during analysis: +// +// src/router.d.ts:8:5 - (ae-undocumented) Missing documentation for "get". +// src/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "post". +// src/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "all". +// src/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "put". +// src/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "delete". +// src/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "patch". +// src/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "options". +// src/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "head". +// src/types/common.d.ts:14:1 - (ae-undocumented) Missing documentation for "PathDoc". +// src/types/common.d.ts:60:1 - (ae-undocumented) Missing documentation for "DocPathTemplate". +// src/types/common.d.ts:64:1 - (ae-undocumented) Missing documentation for "DocPathMethod". +// src/types/common.d.ts:68:1 - (ae-undocumented) Missing documentation for "DocPathTemplateMethod". +// src/types/common.d.ts:72:1 - (ae-undocumented) Missing documentation for "MethodAwareDocPath". +// src/types/common.d.ts:78:1 - (ae-undocumented) Missing documentation for "DocOperation". +// src/types/common.d.ts:82:1 - (ae-undocumented) Missing documentation for "ComponentTypes". +// src/types/common.d.ts:86:1 - (ae-undocumented) Missing documentation for "ComponentRef". +// src/types/common.d.ts:92:1 - (ae-undocumented) Missing documentation for "SchemaRef". +// src/types/common.d.ts:100:1 - (ae-undocumented) Missing documentation for "ObjectWithContentSchema". +// src/types/common.d.ts:114:1 - (ae-undocumented) Missing documentation for "LastOf". +// src/types/common.d.ts:118:1 - (ae-undocumented) Missing documentation for "Push". +// src/types/common.d.ts:122:1 - (ae-undocumented) Missing documentation for "TuplifyUnion". +// src/types/common.d.ts:126:1 - (ae-undocumented) Missing documentation for "ConvertAll". +// src/types/common.d.ts:134:1 - (ae-undocumented) Missing documentation for "UnknownIfNever". +// src/types/common.d.ts:138:1 - (ae-undocumented) Missing documentation for "ToTypeSafe". +// src/types/common.d.ts:142:1 - (ae-undocumented) Missing documentation for "DiscriminateUnion". +// src/types/common.d.ts:146:1 - (ae-undocumented) Missing documentation for "MapDiscriminatedUnion". +// src/types/common.d.ts:152:1 - (ae-undocumented) Missing documentation for "PickOptionalKeys". +// src/types/common.d.ts:160:1 - (ae-undocumented) Missing documentation for "PickRequiredKeys". +// src/types/common.d.ts:168:1 - (ae-undocumented) Missing documentation for "OptionalMap". +// src/types/common.d.ts:176:1 - (ae-undocumented) Missing documentation for "RequiredMap". +// src/types/common.d.ts:184:1 - (ae-undocumented) Missing documentation for "FullMap". +// src/types/common.d.ts:190:1 - (ae-undocumented) Missing documentation for "Filter". +// src/types/express.d.ts:21:5 - (ae-undocumented) Missing documentation for "__call". +// src/types/express.d.ts:22:5 - (ae-undocumented) Missing documentation for "__call". +// src/types/immutable.d.ts:18:1 - (ae-undocumented) Missing documentation for "ImmutableObject". +// src/types/immutable.d.ts:24:1 - (ae-undocumented) Missing documentation for "ImmutableReferenceObject". +// src/types/immutable.d.ts:28:1 - (ae-undocumented) Missing documentation for "ImmutableOpenAPIObject". +// src/types/immutable.d.ts:32:1 - (ae-undocumented) Missing documentation for "ImmutableContentObject". +// src/types/immutable.d.ts:36:1 - (ae-undocumented) Missing documentation for "ImmutableRequestBodyObject". +// src/types/immutable.d.ts:40:1 - (ae-undocumented) Missing documentation for "ImmutableResponseObject". +// src/types/immutable.d.ts:44:1 - (ae-undocumented) Missing documentation for "ImmutableParameterObject". +// src/types/immutable.d.ts:48:1 - (ae-undocumented) Missing documentation for "HeaderObject". +// src/types/immutable.d.ts:49:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:50:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:55:1 - (ae-undocumented) Missing documentation for "ImmutableHeaderObject". +// src/types/immutable.d.ts:59:1 - (ae-undocumented) Missing documentation for "CookieObject". +// src/types/immutable.d.ts:60:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:61:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:66:1 - (ae-undocumented) Missing documentation for "ImmutableCookieObject". +// src/types/immutable.d.ts:70:1 - (ae-undocumented) Missing documentation for "QueryObject". +// src/types/immutable.d.ts:71:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:72:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:77:1 - (ae-undocumented) Missing documentation for "ImmutableQueryObject". +// src/types/immutable.d.ts:81:1 - (ae-undocumented) Missing documentation for "PathObject". +// src/types/immutable.d.ts:82:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:83:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:88:1 - (ae-undocumented) Missing documentation for "ImmutablePathObject". +// src/types/immutable.d.ts:92:1 - (ae-undocumented) Missing documentation for "ImmutableSchemaObject". +// src/types/params.d.ts:7:1 - (ae-undocumented) Missing documentation for "DocParameter". +// src/types/params.d.ts:16:1 - (ae-undocumented) Missing documentation for "DocParameters". +// src/types/params.d.ts:22:1 - (ae-undocumented) Missing documentation for "ParameterSchema". +// src/types/params.d.ts:26:1 - (ae-undocumented) Missing documentation for "MapToSchema". +// src/types/params.d.ts:32:1 - (ae-undocumented) Missing documentation for "ParametersSchema". +// src/types/params.d.ts:36:1 - (ae-undocumented) Missing documentation for "HeaderSchema". +// src/types/params.d.ts:40:1 - (ae-undocumented) Missing documentation for "CookieSchema". +// src/types/params.d.ts:44:1 - (ae-undocumented) Missing documentation for "PathSchema". +// src/types/params.d.ts:48:1 - (ae-undocumented) Missing documentation for "QuerySchema". +// src/types/requests.d.ts:9:1 - (ae-undocumented) Missing documentation for "RequestBody". +// src/types/requests.d.ts:13:1 - (ae-undocumented) Missing documentation for "RequestBodySchema". +// src/types/responses.d.ts:9:1 - (ae-undocumented) Missing documentation for "Response". +// src/types/responses.d.ts:13:1 - (ae-undocumented) Missing documentation for "ResponseSchemas". +// src/utility.d.ts:5:1 - (ae-undocumented) Missing documentation for "Response". +// src/utility.d.ts:9:1 - (ae-undocumented) Missing documentation for "Request". +// src/utility.d.ts:13:1 - (ae-undocumented) Missing documentation for "HeaderParameters". +// src/utility.d.ts:17:1 - (ae-undocumented) Missing documentation for "CookieParameters". +// src/utility.d.ts:21:1 - (ae-undocumented) Missing documentation for "PathParameters". +// src/utility.d.ts:25:1 - (ae-undocumented) Missing documentation for "QueryParameters". ``` diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 052042c351..252d59ea1c 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-plugin-api +## 1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + ## 1.0.0 ### Major Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 08c1ad670c..cc3f4d09c7 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-plugin-api", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "Core API used by Backstage backend plugins", "backstage": { "role": "node-library" diff --git a/packages/backend-plugin-api/api-report-alpha.md b/packages/backend-plugin-api/report-alpha.api.md similarity index 73% rename from packages/backend-plugin-api/api-report-alpha.md rename to packages/backend-plugin-api/report-alpha.api.md index dea357502e..29c74e7ade 100644 --- a/packages/backend-plugin-api/api-report-alpha.md +++ b/packages/backend-plugin-api/report-alpha.api.md @@ -21,5 +21,10 @@ export const featureDiscoveryServiceRef: ServiceRef< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:1 - (ae-undocumented) Missing documentation for "FeatureDiscoveryService". +// src/alpha.d.ts:4:5 - (ae-undocumented) Missing documentation for "getBackendFeatures". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-plugin-api/api-report-testUtils.md b/packages/backend-plugin-api/report-testUtils.api.md similarity index 70% rename from packages/backend-plugin-api/api-report-testUtils.md rename to packages/backend-plugin-api/report-testUtils.api.md index 8c9bba8398..8f2f871e90 100644 --- a/packages/backend-plugin-api/api-report-testUtils.md +++ b/packages/backend-plugin-api/report-testUtils.api.md @@ -22,5 +22,10 @@ export interface PackagePathResolutionOverride { restore(): void; } +// Warnings were encountered during analysis: +// +// src/testUtils.d.ts:2:1 - (ae-undocumented) Missing documentation for "PackagePathResolutionOverride". +// src/testUtils.d.ts:7:1 - (ae-undocumented) Missing documentation for "OverridePackagePathResolutionOptions". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/report.api.md similarity index 81% rename from packages/backend-plugin-api/api-report.md rename to packages/backend-plugin-api/report.api.md index 89dfe40dd9..e03179e851 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/report.api.md @@ -735,4 +735,48 @@ export type UrlReaderServiceSearchResponseFile = { export interface UserInfoService { getUserInfo(credentials: BackstageCredentials): Promise; } + +// Warnings were encountered during analysis: +// +// src/services/definitions/HttpRouterService.d.ts:8:5 - (ae-undocumented) Missing documentation for "path". +// src/services/definitions/HttpRouterService.d.ts:9:5 - (ae-undocumented) Missing documentation for "allow". +// src/services/definitions/LifecycleService.d.ts:5:1 - (ae-undocumented) Missing documentation for "LifecycleServiceStartupHook". +// src/services/definitions/LifecycleService.d.ts:9:1 - (ae-undocumented) Missing documentation for "LifecycleServiceStartupOptions". +// src/services/definitions/LifecycleService.d.ts:18:1 - (ae-undocumented) Missing documentation for "LifecycleServiceShutdownHook". +// src/services/definitions/LifecycleService.d.ts:22:1 - (ae-undocumented) Missing documentation for "LifecycleServiceShutdownOptions". +// src/services/definitions/LoggerService.d.ts:10:5 - (ae-undocumented) Missing documentation for "error". +// src/services/definitions/LoggerService.d.ts:11:5 - (ae-undocumented) Missing documentation for "warn". +// src/services/definitions/LoggerService.d.ts:12:5 - (ae-undocumented) Missing documentation for "info". +// src/services/definitions/LoggerService.d.ts:13:5 - (ae-undocumented) Missing documentation for "debug". +// src/services/definitions/LoggerService.d.ts:14:5 - (ae-undocumented) Missing documentation for "child". +// src/services/definitions/PermissionsService.d.ts:9:5 - (ae-undocumented) Missing documentation for "credentials". +// src/services/definitions/RootHealthService.d.ts:5:1 - (ae-undocumented) Missing documentation for "RootHealthService". +// src/services/definitions/UserInfoService.d.ts:9:5 - (ae-undocumented) Missing documentation for "userEntityRef". +// src/services/definitions/UserInfoService.d.ts:10:5 - (ae-undocumented) Missing documentation for "ownershipEntityRefs". +// src/services/system/types.d.ts:35:1 - (ae-undocumented) Missing documentation for "ServiceFactory". +// src/services/system/types.d.ts:36:5 - (ae-undocumented) Missing documentation for "service". +// src/services/system/types.d.ts:39:1 - (ae-undocumented) Missing documentation for "ServiceRefOptions". +// src/services/system/types.d.ts:40:5 - (ae-undocumented) Missing documentation for "id". +// src/services/system/types.d.ts:41:5 - (ae-undocumented) Missing documentation for "scope". +// src/services/system/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "multiton". +// src/services/system/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "defaultFactory". +// src/services/system/types.d.ts:76:1 - (ae-undocumented) Missing documentation for "RootServiceFactoryOptions". +// src/services/system/types.d.ts:90:5 - (ae-undocumented) Missing documentation for "service". +// src/services/system/types.d.ts:91:5 - (ae-undocumented) Missing documentation for "deps". +// src/services/system/types.d.ts:92:5 - (ae-undocumented) Missing documentation for "factory". +// src/services/system/types.d.ts:95:1 - (ae-undocumented) Missing documentation for "PluginServiceFactoryOptions". +// src/services/system/types.d.ts:109:5 - (ae-undocumented) Missing documentation for "service". +// src/services/system/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "deps". +// src/services/system/types.d.ts:111:5 - (ae-undocumented) Missing documentation for "createRootContext". +// src/services/system/types.d.ts:112:5 - (ae-undocumented) Missing documentation for "factory". +// src/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "BackendFeature". +// src/types.d.ts:3:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createBackendFeatureLoader.d.ts:10:5 - (ae-undocumented) Missing documentation for "deps". +// src/wiring/createBackendFeatureLoader.d.ts:13:5 - (ae-undocumented) Missing documentation for "loader". +// src/wiring/createBackendModule.d.ts:21:5 - (ae-undocumented) Missing documentation for "register". +// src/wiring/createBackendPlugin.d.ts:17:5 - (ae-undocumented) Missing documentation for "register". +// src/wiring/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". +// src/wiring/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "registerInit". +// src/wiring/types.d.ts:44:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". +// src/wiring/types.d.ts:45:5 - (ae-undocumented) Missing documentation for "registerInit". ``` diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 17c424adc9..bf8b8bd92d 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/backend-test-utils +## 1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 1.0.0 ### Major Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index f53d9932d8..aea4e2f94a 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-test-utils", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "Test helpers library for Backstage backends", "backstage": { "role": "node-library" diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/report.api.md similarity index 65% rename from packages/backend-test-utils/api-report.md rename to packages/backend-test-utils/report.api.md index 2bea998596..1235cd7cb3 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/report.api.md @@ -474,4 +474,85 @@ export class TestDatabases { // (undocumented) supports(id: TestDatabaseId): boolean; } + +// Warnings were encountered during analysis: +// +// src/cache/TestCaches.d.ts:27:5 - (ae-undocumented) Missing documentation for "setDefaults". +// src/cache/TestCaches.d.ts:31:5 - (ae-undocumented) Missing documentation for "supports". +// src/cache/TestCaches.d.ts:32:5 - (ae-undocumented) Missing documentation for "eachSupportedId". +// src/database/TestDatabases.d.ts:29:5 - (ae-undocumented) Missing documentation for "setDefaults". +// src/database/TestDatabases.d.ts:33:5 - (ae-undocumented) Missing documentation for "supports". +// src/database/TestDatabases.d.ts:34:5 - (ae-undocumented) Missing documentation for "eachSupportedId". +// src/next/services/mockCredentials.d.ts:17:1 - (ae-undocumented) Missing documentation for "mockCredentials". +// src/next/services/mockCredentials.d.ts:58:9 - (ae-undocumented) Missing documentation for "invalidToken". +// src/next/services/mockCredentials.d.ts:59:9 - (ae-undocumented) Missing documentation for "invalidHeader". +// src/next/services/mockCredentials.d.ts:84:9 - (ae-undocumented) Missing documentation for "invalidToken". +// src/next/services/mockCredentials.d.ts:85:9 - (ae-undocumented) Missing documentation for "invalidCookie". +// src/next/services/mockCredentials.d.ts:116:9 - (ae-undocumented) Missing documentation for "invalidToken". +// src/next/services/mockCredentials.d.ts:117:9 - (ae-undocumented) Missing documentation for "invalidHeader". +// src/next/services/mockServices.d.ts:5:1 - (ae-undocumented) Missing documentation for "ServiceMock". +// src/next/services/mockServices.d.ts:13:1 - (ae-undocumented) Missing documentation for "mockServices". +// src/next/services/mockServices.d.ts:14:5 - (ae-undocumented) Missing documentation for "rootConfig". +// src/next/services/mockServices.d.ts:15:5 - (ae-undocumented) Missing documentation for "rootConfig". +// src/next/services/mockServices.d.ts:16:9 - (ae-undocumented) Missing documentation for "Options". +// src/next/services/mockServices.d.ts:19:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:20:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:22:5 - (ae-undocumented) Missing documentation for "rootLogger". +// src/next/services/mockServices.d.ts:23:5 - (ae-undocumented) Missing documentation for "rootLogger". +// src/next/services/mockServices.d.ts:24:9 - (ae-undocumented) Missing documentation for "Options". +// src/next/services/mockServices.d.ts:27:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:28:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:30:5 - (ae-undocumented) Missing documentation for "auth". +// src/next/services/mockServices.d.ts:34:5 - (ae-undocumented) Missing documentation for "auth". +// src/next/services/mockServices.d.ts:35:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:36:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:38:5 - (ae-undocumented) Missing documentation for "discovery". +// src/next/services/mockServices.d.ts:39:5 - (ae-undocumented) Missing documentation for "discovery". +// src/next/services/mockServices.d.ts:40:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:41:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:61:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/next/services/mockServices.d.ts:72:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:82:5 - (ae-undocumented) Missing documentation for "userInfo". +// src/next/services/mockServices.d.ts:90:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:92:5 - (ae-undocumented) Missing documentation for "cache". +// src/next/services/mockServices.d.ts:93:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:94:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:96:5 - (ae-undocumented) Missing documentation for "database". +// src/next/services/mockServices.d.ts:97:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:98:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:100:5 - (ae-undocumented) Missing documentation for "rootHealth". +// src/next/services/mockServices.d.ts:101:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:102:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:104:5 - (ae-undocumented) Missing documentation for "httpRouter". +// src/next/services/mockServices.d.ts:105:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:106:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:108:5 - (ae-undocumented) Missing documentation for "rootHttpRouter". +// src/next/services/mockServices.d.ts:109:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:110:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:112:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/next/services/mockServices.d.ts:113:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:114:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:116:5 - (ae-undocumented) Missing documentation for "logger". +// src/next/services/mockServices.d.ts:117:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:118:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:120:5 - (ae-undocumented) Missing documentation for "permissions". +// src/next/services/mockServices.d.ts:121:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:122:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:124:5 - (ae-undocumented) Missing documentation for "rootLifecycle". +// src/next/services/mockServices.d.ts:125:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:126:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:128:5 - (ae-undocumented) Missing documentation for "scheduler". +// src/next/services/mockServices.d.ts:129:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:130:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:132:5 - (ae-undocumented) Missing documentation for "urlReader". +// src/next/services/mockServices.d.ts:133:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:134:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:136:5 - (ae-undocumented) Missing documentation for "events". +// src/next/services/mockServices.d.ts:137:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:138:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/wiring/TestBackend.d.ts:5:1 - (ae-undocumented) Missing documentation for "TestBackendOptions". +// src/next/wiring/TestBackend.d.ts:6:5 - (ae-undocumented) Missing documentation for "extensionPoints". +// src/next/wiring/TestBackend.d.ts:14:5 - (ae-undocumented) Missing documentation for "features". +// src/next/wiring/TestBackend.d.ts:19:1 - (ae-undocumented) Missing documentation for "TestBackend". +// src/next/wiring/TestBackend.d.ts:30:1 - (ae-undocumented) Missing documentation for "startTestBackend". ``` diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 4273e49072..363b814ce8 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,42 @@ # example-backend +## 0.0.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-notifications-backend@0.4.1-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.0.30 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 64c24b9a4f..13de4407bb 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.0.30", + "version": "0.0.31-next.0", "backstage": { "role": "backend" }, @@ -44,6 +44,7 @@ "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-devtools-backend": "workspace:^", + "@backstage/plugin-events-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", "@backstage/plugin-notifications-backend": "workspace:^", "@backstage/plugin-permission-backend": "workspace:^", diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 952f3315c4..3e8c2910b1 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -39,6 +39,7 @@ backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-events-backend/alpha')); backend.add(import('@backstage/plugin-devtools-backend')); backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); backend.add( diff --git a/packages/catalog-client/api-report-testUtils.md b/packages/catalog-client/report-testUtils.api.md similarity index 63% rename from packages/catalog-client/api-report-testUtils.md rename to packages/catalog-client/report-testUtils.api.md index 88d14b4f7a..9341327554 100644 --- a/packages/catalog-client/api-report-testUtils.md +++ b/packages/catalog-client/report-testUtils.api.md @@ -67,5 +67,22 @@ export class InMemoryCatalogClient implements CatalogApi { ): Promise; } +// Warnings were encountered during analysis: +// +// src/testUtils/InMemoryCatalogClient.d.ts:15:5 - (ae-undocumented) Missing documentation for "getEntities". +// src/testUtils/InMemoryCatalogClient.d.ts:16:5 - (ae-undocumented) Missing documentation for "getEntitiesByRefs". +// src/testUtils/InMemoryCatalogClient.d.ts:17:5 - (ae-undocumented) Missing documentation for "queryEntities". +// src/testUtils/InMemoryCatalogClient.d.ts:18:5 - (ae-undocumented) Missing documentation for "getEntityAncestors". +// src/testUtils/InMemoryCatalogClient.d.ts:19:5 - (ae-undocumented) Missing documentation for "getEntityByRef". +// src/testUtils/InMemoryCatalogClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "removeEntityByUid". +// src/testUtils/InMemoryCatalogClient.d.ts:21:5 - (ae-undocumented) Missing documentation for "refreshEntity". +// src/testUtils/InMemoryCatalogClient.d.ts:22:5 - (ae-undocumented) Missing documentation for "getEntityFacets". +// src/testUtils/InMemoryCatalogClient.d.ts:23:5 - (ae-undocumented) Missing documentation for "getLocationById". +// src/testUtils/InMemoryCatalogClient.d.ts:24:5 - (ae-undocumented) Missing documentation for "getLocationByRef". +// src/testUtils/InMemoryCatalogClient.d.ts:25:5 - (ae-undocumented) Missing documentation for "addLocation". +// src/testUtils/InMemoryCatalogClient.d.ts:26:5 - (ae-undocumented) Missing documentation for "removeLocationById". +// src/testUtils/InMemoryCatalogClient.d.ts:27:5 - (ae-undocumented) Missing documentation for "getLocationByEntity". +// src/testUtils/InMemoryCatalogClient.d.ts:28:5 - (ae-undocumented) Missing documentation for "validateEntity". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/report.api.md similarity index 92% rename from packages/catalog-client/api-report.md rename to packages/catalog-client/report.api.md index 203028edce..aba99961f0 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/report.api.md @@ -302,4 +302,13 @@ export type ValidateEntityResponse = valid: false; errors: SerializedError[]; }; + +// Warnings were encountered during analysis: +// +// src/CatalogClient.d.ts:50:5 - (ae-undocumented) Missing documentation for "getEntityByName". +// src/types/api.d.ts:154:5 - (ae-undocumented) Missing documentation for "items". +// src/types/api.d.ts:203:5 - (ae-undocumented) Missing documentation for "entityRef". +// src/types/api.d.ts:211:5 - (ae-undocumented) Missing documentation for "rootEntityRef". +// src/types/api.d.ts:212:5 - (ae-undocumented) Missing documentation for "items". +// src/types/api.d.ts:305:5 - (ae-undocumented) Missing documentation for "token". ``` diff --git a/packages/catalog-model/api-report-alpha.md b/packages/catalog-model/report-alpha.api.md similarity index 100% rename from packages/catalog-model/api-report-alpha.md rename to packages/catalog-model/report-alpha.api.md diff --git a/packages/catalog-model/api-report.md b/packages/catalog-model/report.api.md similarity index 70% rename from packages/catalog-model/api-report.md rename to packages/catalog-model/report.api.md index ec03ce41e1..07dc6affd7 100644 --- a/packages/catalog-model/api-report.md +++ b/packages/catalog-model/report.api.md @@ -499,4 +499,52 @@ export type Validators = { isValidAnnotationValue(value: unknown): boolean; isValidTag(value: unknown): boolean; }; + +// Warnings were encountered during analysis: +// +// src/entity/conditions.d.ts:6:1 - (ae-undocumented) Missing documentation for "isApiEntity". +// src/entity/conditions.d.ts:10:1 - (ae-undocumented) Missing documentation for "isComponentEntity". +// src/entity/conditions.d.ts:14:1 - (ae-undocumented) Missing documentation for "isDomainEntity". +// src/entity/conditions.d.ts:18:1 - (ae-undocumented) Missing documentation for "isGroupEntity". +// src/entity/conditions.d.ts:22:1 - (ae-undocumented) Missing documentation for "isLocationEntity". +// src/entity/conditions.d.ts:26:1 - (ae-undocumented) Missing documentation for "isResourceEntity". +// src/entity/conditions.d.ts:30:1 - (ae-undocumented) Missing documentation for "isSystemEntity". +// src/entity/conditions.d.ts:34:1 - (ae-undocumented) Missing documentation for "isUserEntity". +// src/entity/policies/DefaultNamespaceEntityPolicy.d.ts:11:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/FieldFormatEntityPolicy.d.ts:17:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/GroupDefaultParentEntityPolicy.d.ts:14:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/NoForeignRootFieldsEntityPolicy.d.ts:11:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/SchemaValidEntityPolicy.d.ts:16:5 - (ae-undocumented) Missing documentation for "enforce". +// src/kinds/ApiEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/ApiEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/ApiEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/ComponentEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/ComponentEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/ComponentEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/DomainEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/DomainEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/DomainEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/GroupEntityV1alpha1.d.ts:8:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/GroupEntityV1alpha1.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/GroupEntityV1alpha1.d.ts:10:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/LocationEntityV1alpha1.d.ts:8:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/LocationEntityV1alpha1.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/LocationEntityV1alpha1.d.ts:10:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/ResourceEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/ResourceEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/ResourceEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/SystemEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/SystemEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/SystemEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/UserEntityV1alpha1.d.ts:8:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/UserEntityV1alpha1.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/UserEntityV1alpha1.d.ts:10:5 - (ae-undocumented) Missing documentation for "spec". +// src/validation/KubernetesValidatorFunctions.d.ts:11:5 - (ae-undocumented) Missing documentation for "isValidApiVersion". +// src/validation/KubernetesValidatorFunctions.d.ts:12:5 - (ae-undocumented) Missing documentation for "isValidKind". +// src/validation/KubernetesValidatorFunctions.d.ts:13:5 - (ae-undocumented) Missing documentation for "isValidObjectName". +// src/validation/KubernetesValidatorFunctions.d.ts:14:5 - (ae-undocumented) Missing documentation for "isValidNamespace". +// src/validation/KubernetesValidatorFunctions.d.ts:15:5 - (ae-undocumented) Missing documentation for "isValidLabelKey". +// src/validation/KubernetesValidatorFunctions.d.ts:16:5 - (ae-undocumented) Missing documentation for "isValidLabelValue". +// src/validation/KubernetesValidatorFunctions.d.ts:17:5 - (ae-undocumented) Missing documentation for "isValidAnnotationKey". +// src/validation/KubernetesValidatorFunctions.d.ts:18:5 - (ae-undocumented) Missing documentation for "isValidAnnotationValue". ``` diff --git a/packages/cli-common/api-report.md b/packages/cli-common/report.api.md similarity index 100% rename from packages/cli-common/api-report.md rename to packages/cli-common/report.api.md diff --git a/packages/cli-node/api-report.md b/packages/cli-node/report.api.md similarity index 67% rename from packages/cli-node/api-report.md rename to packages/cli-node/report.api.md index f22583dd25..97dab9684d 100644 --- a/packages/cli-node/api-report.md +++ b/packages/cli-node/report.api.md @@ -175,4 +175,28 @@ export class PackageRoles { static getRoleFromPackage(pkgJson: unknown): PackageRole | undefined; static getRoleInfo(role: string): PackageRoleInfo; } + +// Warnings were encountered during analysis: +// +// src/monorepo/PackageGraph.d.ts:10:5 - (ae-undocumented) Missing documentation for "name". +// src/monorepo/PackageGraph.d.ts:11:5 - (ae-undocumented) Missing documentation for "version". +// src/monorepo/PackageGraph.d.ts:12:5 - (ae-undocumented) Missing documentation for "private". +// src/monorepo/PackageGraph.d.ts:13:5 - (ae-undocumented) Missing documentation for "main". +// src/monorepo/PackageGraph.d.ts:14:5 - (ae-undocumented) Missing documentation for "module". +// src/monorepo/PackageGraph.d.ts:15:5 - (ae-undocumented) Missing documentation for "types". +// src/monorepo/PackageGraph.d.ts:16:5 - (ae-undocumented) Missing documentation for "scripts". +// src/monorepo/PackageGraph.d.ts:19:5 - (ae-undocumented) Missing documentation for "bundled". +// src/monorepo/PackageGraph.d.ts:20:5 - (ae-undocumented) Missing documentation for "backstage". +// src/monorepo/PackageGraph.d.ts:44:5 - (ae-undocumented) Missing documentation for "exports". +// src/monorepo/PackageGraph.d.ts:45:5 - (ae-undocumented) Missing documentation for "typesVersions". +// src/monorepo/PackageGraph.d.ts:46:5 - (ae-undocumented) Missing documentation for "files". +// src/monorepo/PackageGraph.d.ts:47:5 - (ae-undocumented) Missing documentation for "publishConfig". +// src/monorepo/PackageGraph.d.ts:52:5 - (ae-undocumented) Missing documentation for "repository". +// src/monorepo/PackageGraph.d.ts:57:5 - (ae-undocumented) Missing documentation for "dependencies". +// src/monorepo/PackageGraph.d.ts:60:5 - (ae-undocumented) Missing documentation for "peerDependencies". +// src/monorepo/PackageGraph.d.ts:63:5 - (ae-undocumented) Missing documentation for "devDependencies". +// src/monorepo/PackageGraph.d.ts:66:5 - (ae-undocumented) Missing documentation for "optionalDependencies". +// src/roles/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "role". +// src/roles/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "platform". +// src/roles/types.d.ts:27:5 - (ae-undocumented) Missing documentation for "output". ``` diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 9e26042601..7c4a46ad5a 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/cli +## 0.28.0-next.0 + +### Minor Changes + +- 6129076: **BREAKING**: Removed the following deprecated commands: + + - `create`: Use `backstage-cli new` instead + - `create-plugin`: Use `backstage-cli new` instead + - `plugin:diff`: Use `backstage-cli fix` instead + - `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead + - `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead + - `clean`: Use `backstage-cli package clean` instead + + In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository. + +### Patch Changes + +- 520a383: Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. +- 094eaa3: Remove references to in-repo backend-common +- 79ba5a8: The `LEGACY_BACKEND_START` flag is now deprecated. +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.9 + - @backstage/integration@1.15.0 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + ## 0.27.1 ### Patch Changes diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md index d77271c4b3..2eb9bb8dea 100644 --- a/packages/cli/cli-report.md +++ b/packages/cli/cli-report.md @@ -13,7 +13,6 @@ Options: Commands: new [options] - test config:docs [options] config:print [options] config:check [options] @@ -23,7 +22,6 @@ Commands: migrate [command] versions:bump [options] versions:migrate [options] - clean build-workspace [options] [packages...] create-github-app info @@ -40,15 +38,6 @@ Options: -h, --help ``` -### `backstage-cli clean` - -``` -Usage: backstage-cli clean [options] - -Options: - -h, --help -``` - ### `backstage-cli config:check` ``` @@ -481,120 +470,6 @@ Options: -h, --help ``` -### `backstage-cli test` - -``` -Usage: backstage-cli [--config=] [TestPathPattern] - -Options: - -h, --help - --version - --all - --automock - -b, --bail - --cache - --cacheDirectory - --changedFilesWithAncestor - --changedSince - --ci - --clearCache - --clearMocks - --collectCoverage - --collectCoverageFrom - --color - --colors - -c, --config - --coverage - --coverageDirectory - --coveragePathIgnorePatterns - --coverageProvider - --coverageReporters - --coverageThreshold - --debug - --detectLeaks - --detectOpenHandles - --env - --errorOnDeprecated - -e, --expand - --filter - --findRelatedTests - --forceExit - --globalSetup - --globalTeardown - --globals - --haste - --ignoreProjects - --init - --injectGlobals - --json - --lastCommit - --listTests - --logHeapUsage - --maxConcurrency - -w, --maxWorkers - --moduleDirectories - --moduleFileExtensions - --moduleNameMapper - --modulePathIgnorePatterns - --modulePaths - --noStackTrace - --notify - --notifyMode - -o, --onlyChanged - -f, --onlyFailures - --openHandlesTimeout - --outputFile - --passWithNoTests - --preset - --prettierPath - --projects - --randomize - --reporters - --resetMocks - --resetModules - --resolver - --restoreMocks - --rootDir - --roots - -i, --runInBand - --runTestsByPath - --runner - --seed - --selectProjects - --setupFiles - --setupFilesAfterEnv - --shard - --showConfig - --showSeed - --silent - --skipFilter - --snapshotSerializers - --testEnvironment - --testEnvironmentOptions - --testFailureExitCode - --testLocationInResults - --testMatch - -t, --testNamePattern - --testPathIgnorePatterns - --testPathPattern - --testRegex - --testResultsProcessor - --testRunner - --testSequencer - --testTimeout - --transform - --transformIgnorePatterns - --unmockedModulePathPatterns - -u, --updateSnapshot - --useStderr - --verbose - --watch - --watchAll - --watchPathIgnorePatterns - --watchman - --workerThreads -``` - ### `backstage-cli versions:bump` ``` diff --git a/packages/cli/package.json b/packages/cli/package.json index 8a7ba7843a..74d3d825e6 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/cli", - "version": "0.27.1", + "version": "0.28.0-next.0", "description": "CLI for developing Backstage plugins and apps", "backstage": { "role": "cli" @@ -147,6 +147,7 @@ "swc-loader": "^0.2.3", "tar": "^6.1.12", "terser-webpack-plugin": "^5.1.3", + "ts-morph": "^23.0.0", "util": "^0.12.3", "webpack": "^5.70.0", "webpack-dev-server": "^5.0.0", diff --git a/packages/cli/src/commands/create-plugin/createPlugin.test.ts b/packages/cli/src/commands/create-plugin/createPlugin.test.ts deleted file mode 100644 index 84af6ebf69..0000000000 --- a/packages/cli/src/commands/create-plugin/createPlugin.test.ts +++ /dev/null @@ -1,40 +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 path from 'path'; -import { movePlugin } from './createPlugin'; -import { createMockDirectory } from '@backstage/backend-test-utils'; - -const id = 'testPluginMock'; - -describe('createPlugin', () => { - const mockDir = createMockDirectory(); - - describe('movePlugin', () => { - it('should move the temporary plugin directory to its final place', async () => { - mockDir.setContent({ - [id]: {}, - }); - const tempDir = mockDir.resolve(id); - const pluginDir = mockDir.resolve('test-temp/plugins', id); - - await movePlugin(tempDir, pluginDir, id); - await expect(fs.pathExists(pluginDir)).resolves.toBe(true); - expect(pluginDir).toMatch(path.join('', 'plugins', id)); - }); - }); -}); diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts deleted file mode 100644 index f8d7e54e97..0000000000 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ /dev/null @@ -1,343 +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 { promisify } from 'util'; -import chalk from 'chalk'; -import inquirer, { Answers, Question } from 'inquirer'; -import { exec as execCb } from 'child_process'; -import { join as joinPath, resolve as resolvePath } from 'path'; -import camelCase from 'lodash/camelCase'; -import upperFirst from 'lodash/upperFirst'; -import os from 'os'; -import { OptionValues } from 'commander'; -import { assertError } from '@backstage/errors'; -import { - addCodeownersEntry, - getCodeownersFilePath, - parseOwnerIds, -} from '../../lib/codeowners'; -import { paths } from '../../lib/paths'; -import { Task, templatingTask } from '../../lib/tasks'; -import { Lockfile } from '../../lib/versioning'; -import { createPackageVersionProvider } from '../../lib/version'; - -const exec = promisify(execCb); - -async function checkExists(destination: string) { - await Task.forItem('checking', destination, async () => { - if (await fs.pathExists(destination)) { - const existing = chalk.cyan( - destination.replace(`${paths.targetRoot}/`, ''), - ); - throw new Error( - `A plugin with the same name already exists: ${existing}\nPlease try again with a different plugin ID`, - ); - } - }); -} - -const sortObjectByKeys = (obj: { [name in string]: string }) => { - return Object.keys(obj) - .sort() - .reduce((result, key: string) => { - result[key] = obj[key]; - return result; - }, {} as { [name in string]: string }); -}; - -export const capitalize = (str: string): string => - str.charAt(0).toUpperCase() + str.slice(1); - -export const addExportStatement = async ( - file: string, - exportStatement: string, -) => { - const newContents = fs - .readFileSync(file, 'utf8') - .split('\n') - .filter(Boolean) // get rid of empty lines - .concat([exportStatement]) - .concat(['']) // newline at end of file - .join('\n'); - - await fs.writeFile(file, newContents, 'utf8'); -}; - -export async function addPluginDependencyToApp( - rootDir: string, - pluginPackage: string, - versionStr: string, -) { - const packageFilePath = 'packages/app/package.json'; - const packageFile = resolvePath(rootDir, packageFilePath); - - await Task.forItem('processing', packageFilePath, async () => { - const packageFileContent = await fs.readFile(packageFile, 'utf-8'); - const packageFileJson = JSON.parse(packageFileContent); - const dependencies = packageFileJson.dependencies; - - if (dependencies[pluginPackage]) { - throw new Error( - `Plugin ${pluginPackage} already exists in ${packageFile}`, - ); - } - - dependencies[pluginPackage] = `^${versionStr}`; - packageFileJson.dependencies = sortObjectByKeys(dependencies); - const newContents = `${JSON.stringify(packageFileJson, null, 2)}\n`; - - await fs.writeFile(packageFile, newContents, 'utf-8').catch(error => { - throw new Error( - `Failed to add plugin as dependency to app: ${packageFile}: ${error.message}`, - ); - }); - }); -} - -export async function addPluginExtensionToApp( - pluginId: string, - extensionName: string, - pluginPackage: string, -) { - const pluginsFilePath = paths.resolveTargetRoot('packages/app/src/App.tsx'); - if (!(await fs.pathExists(pluginsFilePath))) { - return; - } - - await Task.forItem('processing', pluginsFilePath, async () => { - const content = await fs.readFile(pluginsFilePath, 'utf8'); - const revLines = content.split('\n').reverse(); - - const lastImportIndex = revLines.findIndex(line => - line.match(/ from ("|').*("|')/), - ); - const lastRouteIndex = revLines.findIndex(line => - line.match(/<\/FlatRoutes/), - ); - - if (lastImportIndex !== -1 && lastRouteIndex !== -1) { - revLines.splice( - lastImportIndex, - 0, - `import { ${extensionName} } from '${pluginPackage}';`, - ); - const [indentation] = revLines[lastRouteIndex + 1].match(/^\s*/) ?? []; - revLines.splice( - lastRouteIndex + 1, - 0, - `${indentation}}/>`, - ); - - const newContent = revLines.reverse().join('\n'); - await fs.writeFile(pluginsFilePath, newContent, 'utf8'); - } - }); -} - -async function cleanUp(tempDir: string) { - await Task.forItem('remove', 'temporary directory', async () => { - await fs.remove(tempDir); - }); -} - -async function buildPlugin(pluginFolder: string) { - const commands = [ - 'yarn install', - 'yarn lint --fix', - 'yarn tsc', - 'yarn build', - ]; - for (const command of commands) { - try { - await Task.forItem('executing', command, async () => { - process.chdir(pluginFolder); - await exec(command); - }).catch(error => { - process.stdout.write(error.stderr); - process.stdout.write(error.stdout); - throw new Error( - `Warning: Could not execute command ${chalk.cyan(command)}`, - ); - }); - } catch (error) { - assertError(error); - Task.error(error.message); - break; - } - } -} - -export async function movePlugin( - tempDir: string, - destination: string, - id: string, -) { - await Task.forItem('moving', id, async () => { - await fs.move(tempDir, destination).catch(error => { - throw new Error( - `Failed to move plugin from ${tempDir} to ${destination}: ${error.message}`, - ); - }); - }); -} - -export default async (opts: OptionValues) => { - const codeownersPath = await getCodeownersFilePath(paths.targetRoot); - - const questions: Question[] = [ - { - type: 'input', - name: 'id', - message: chalk.blue('Enter an ID for the plugin [required]'), - validate: (value: any) => { - if (!value) { - return chalk.red('Please enter an ID for the plugin'); - } else if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(value)) { - return chalk.red( - 'Plugin IDs must be lowercase and contain only letters, digits, and dashes.', - ); - } - return true; - }, - }, - ]; - - if (codeownersPath) { - questions.push({ - type: 'input', - name: 'owner', - message: chalk.blue( - 'Enter the owner(s) of the plugin. If specified, this will be added to CODEOWNERS for the plugin path. [optional]', - ), - validate: (value: any) => { - if (!value) { - return true; - } - - const ownerIds = parseOwnerIds(value); - if (!ownerIds) { - return chalk.red( - 'The owner must be a space separated list of team names (e.g. @org/team-name), usernames (e.g. @username), or the email addresses of users (e.g. user@example.com).', - ); - } - - return true; - }, - }); - } - - const answers: Answers = await inquirer.prompt(questions); - const pluginId = - opts.backend && !answers.id.endsWith('-backend') - ? `${answers.id}-backend` - : answers.id; - - const name = opts.scope - ? `@${opts.scope.replace(/^@/, '')}/plugin-${pluginId}` - : `plugin-${pluginId}`; - const pluginVar = `${camelCase(answers.id)}Plugin`; - const extensionName = `${upperFirst(camelCase(answers.id))}Page`; - const npmRegistry = opts.npmRegistry && opts.scope ? opts.npmRegistry : ''; - const privatePackage = opts.private === false ? false : true; - const isMonoRepo = await fs.pathExists(paths.resolveTargetRoot('lerna.json')); - const appPackage = paths.resolveTargetRoot('packages/app'); - const templateDir = paths.resolveOwn( - opts.backend - ? 'templates/default-backend-plugin' - : 'templates/default-plugin', - ); - const pluginDir = isMonoRepo - ? paths.resolveTargetRoot('plugins', pluginId) - : paths.resolveTargetRoot(pluginId); - const { version: pluginVersion } = isMonoRepo - ? await fs.readJson(paths.resolveTargetRoot('lerna.json')) - : { version: '0.1.0' }; - const license = opts.license ?? 'Apache-2.0'; - - let lockfile: Lockfile | undefined; - try { - lockfile = await Lockfile.load(paths.resolveTargetRoot('yarn.lock')); - } catch (error) { - console.warn(`No yarn.lock available, ${error}`); - } - - Task.log(); - Task.log('Creating the plugin...'); - - Task.section('Checking if the plugin ID is available'); - await checkExists(pluginDir); - - Task.section('Creating a temporary plugin directory'); - const tempDir = await fs.mkdtemp( - joinPath(os.tmpdir(), `backstage-plugin-${pluginId}`), - ); - - try { - Task.section('Preparing files'); - - await templatingTask( - templateDir, - tempDir, - { - ...answers, - pluginVar, - pluginVersion, - extensionName, - name, - privatePackage, - npmRegistry, - license, - }, - createPackageVersionProvider(lockfile), - isMonoRepo, - ); - - Task.section('Moving to final location'); - await movePlugin(tempDir, pluginDir, pluginId); - - Task.section('Building the plugin'); - await buildPlugin(pluginDir); - - if ((await fs.pathExists(appPackage)) && !opts.backend) { - Task.section('Adding plugin as dependency in app'); - await addPluginDependencyToApp(paths.targetRoot, name, pluginVersion); - - Task.section('Import plugin in app'); - await addPluginExtensionToApp(pluginId, extensionName, name); - } - - if (answers.owner) { - await addCodeownersEntry(`/plugins/${pluginId}`, answers.owner); - } - - Task.log(); - Task.log(`🥇 Successfully created ${chalk.cyan(`${name}`)}`); - Task.log(); - Task.exit(); - } catch (error) { - assertError(error); - Task.error(error.message); - - Task.log('It seems that something went wrong when creating the plugin 🤔'); - Task.log('We are going to clean up, and then you can try again.'); - - Task.section('Cleanup'); - await cleanUp(tempDir); - Task.error('🔥 Failed to create plugin!'); - Task.exit(1); - } -}; diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index b1658a5ff1..7cc23300af 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -25,13 +25,6 @@ const configOption = [ Array(), ] as const; -export function registerOnboardCommand(program: Command) { - program - .command('onboard', { hidden: true }) - .description('Get help setting up your Backstage App.') - .action(lazy(() => import('./onboard').then(m => m.command))); -} - export function registerRepoCommand(program: Command) { const command = program .command('repo [command]') @@ -265,63 +258,6 @@ export function registerCommands(program: Command) { .option('--no-private', 'Do not mark new packages as private') .action(lazy(() => import('./new/new').then(m => m.default))); - program - .command('create', { hidden: true }) - .storeOptionsAsProperties(false) - .description( - 'Open up an interactive guide to creating new things in your app [DEPRECATED]', - ) - .option( - '--select ', - 'Select the thing you want to be creating upfront', - ) - .option( - '--option =', - 'Pre-fill options for the creation process', - (opt, arr: string[]) => [...arr, opt], - [], - ) - .option('--scope ', 'The scope to use for new packages') - .option( - '--npm-registry ', - 'The package registry to use for new packages', - ) - .option('--no-private', 'Do not mark new packages as private') - .action(lazy(() => import('./new/new').then(m => m.default))); - - program - .command('create-plugin', { hidden: true }) - .option( - '--backend', - 'Create plugin with the backend dependencies as default', - ) - .description('Creates a new plugin in the current repository [DEPRECATED]') - .option('--scope ', 'npm scope') - .option('--npm-registry ', 'npm registry URL') - .option('--no-private', 'Public npm package') - .action( - lazy(() => import('./create-plugin/createPlugin').then(m => m.default)), - ); - - program - .command('plugin:diff', { hidden: true }) - .option('--check', 'Fail if changes are required') - .option('--yes', 'Apply all changes') - .description( - 'Diff an existing plugin with the creation template [DEPRECATED]', - ) - .action(lazy(() => import('./plugin/diff').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('test') - .allowUnknownOption(true) // Allows the command to run, but we still need to parse raw args - .helpOption(', --backstage-cli-help') // Let Jest handle help - .description( - 'Run tests, forwarding args to Jest, defaulting to watch mode [DEPRECATED]', - ) - .action(lazy(() => import('./test').then(m => m.default))); - program .command('config:docs') .option( @@ -385,7 +321,6 @@ export function registerCommands(program: Command) { registerRepoCommand(program); registerScriptCommand(program); registerMigrateCommand(program); - registerOnboardCommand(program); program .command('versions:bump') @@ -403,12 +338,6 @@ export function registerCommands(program: Command) { .description('Bump Backstage packages to the latest versions') .action(lazy(() => import('./versions/bump').then(m => m.default))); - program - .command('versions:check', { hidden: true }) - .option('--fix', 'Fix any auto-fixable versioning problems') - .description('Check Backstage package versioning') - .action(lazy(() => import('./versions/lint').then(m => m.default))); - program .command('versions:migrate') .option( @@ -424,12 +353,6 @@ export function registerCommands(program: Command) { ) .action(lazy(() => import('./versions/migrate').then(m => m.default))); - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('clean') - .description('Delete cache directories [DEPRECATED]') - .action(lazy(() => import('./clean/clean').then(m => m.default))); - program .command('build-workspace [packages...]') .option( @@ -449,14 +372,48 @@ export function registerCommands(program: Command) { .description('Show helpful information for debugging and reporting bugs') .action(lazy(() => import('./info').then(m => m.default))); + // Notifications for removed commands program - .command('install [plugin-id]', { hidden: true }) - .option( - '--from ', - 'Install from a local package.json containing the installation recipe', - ) - .description('Install a Backstage plugin [EXPERIMENTAL]') - .action(lazy(() => import('./install/install').then(m => m.default))); + .command('create') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli new' instead")); + program + .command('create-plugin') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli new' instead")); + program + .command('plugin:diff') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli fix' instead")); + program + .command('test') + .allowUnknownOption(true) + .action( + removed( + "use 'backstage-cli repo test' or 'backstage-cli package test' instead", + ), + ); + program + .command('clean') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli package clean' instead")); + program + .command('versions:check') + .allowUnknownOption(true) + .action(removed("use 'yarn dedupe' or 'yarn-deduplicate' instead")); + program.command('install').allowUnknownOption(true).action(removed()); + program.command('onboard').allowUnknownOption(true).action(removed()); +} + +function removed(message?: string) { + return () => { + console.error( + message + ? `This command has been removed, ${message}` + : 'This command has been removed', + ); + process.exit(1); + }; } // Wraps an action function so that it always exits and handles errors diff --git a/packages/cli/src/commands/install/install.ts b/packages/cli/src/commands/install/install.ts deleted file mode 100644 index e395088b3e..0000000000 --- a/packages/cli/src/commands/install/install.ts +++ /dev/null @@ -1,167 +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 { - Step, - PackageWithInstallRecipe, - PeerPluginDependencies, -} from './types'; -import { fetchPackageInfo } from '../../lib/versioning'; -import { NotFoundError } from '../../lib/errors'; -import * as stepDefinitionMap from './steps'; -import { OptionValues } from 'commander'; -import fs from 'fs-extra'; - -const stepDefinitions = Object.values(stepDefinitionMap); - -async function fetchPluginPackage( - id: string, -): Promise { - const searchNames = [`@backstage/plugin-${id}`, `backstage-plugin-${id}`, id]; - - for (const name of searchNames) { - try { - const packageInfo = (await fetchPackageInfo( - name, - )) as PackageWithInstallRecipe; - return packageInfo; - } catch (error) { - if (error.name !== 'NotFoundError') { - throw error; - } - } - } - - throw new NotFoundError( - `No matching package found for '${id}', tried ${searchNames.join(', ')}`, - ); -} - -type Steps = Array<{ - type: string; - step: Step; -}>; - -class PluginInstaller { - static async resolveSteps( - pkg: PackageWithInstallRecipe, - versionToInstall?: string, - ) { - const steps: Steps = []; - - // collectDependencies - // TODO: Deps mean the plugin package itself, and any other backstage plugins/packages it depends on, in its installation recipe. - const dependencies = []; - dependencies.push({ - target: 'packages/app', - type: 'dependencies' as const, - name: pkg.name, - query: versionToInstall || `^${pkg.version}`, - }); - steps.push({ - type: 'dependencies', - step: stepDefinitionMap.dependencies.create({ dependencies }), - }); - - for (const step of pkg.experimentalInstallationRecipe?.steps ?? []) { - const { type } = step; - - const definition = stepDefinitions.find(d => d.type === type); - if (definition) { - steps.push({ - type, - step: definition.deserialize(step, pkg), - }); - } else { - throw new Error(`Unsupported step type: ${type}`); - } - } - - return steps; - } - - constructor(private readonly steps: Steps) {} - - async run() { - for (const { type, step } of this.steps) { - // TODO(Rugvip): Add spinners, nicer message about the step. - console.log(`Running step ${type}`); - await step.run(); - } - } -} - -async function installPluginAndPeerPlugins(pkg: PackageWithInstallRecipe) { - const pluginDeps: PeerPluginDependencies = new Map(); - pluginDeps.set(pkg.name, { pkg }); - await loadPeerPluginDeps(pkg, pluginDeps); - - console.log(`Installing ${pkg.name} AND any peer plugin dependencies.`); - for (const [_pluginDepName, pluginDep] of pluginDeps.entries()) { - const { pkg: pluginDepPkg, versionToInstall } = pluginDep; - console.log( - `Installing plugin: ${pluginDepPkg.name}: ${ - versionToInstall || pluginDepPkg.version - }`, - ); - const steps = await PluginInstaller.resolveSteps( - pluginDepPkg, - versionToInstall, - ); - const installer = new PluginInstaller(steps); - await installer.run(); - } -} - -async function loadPackageJson( - plugin: string, -): Promise { - if (plugin.endsWith('package.json')) { - // Install from local package if pluginId is a package.json file - needs to be absolute path - return await fs.readJson(plugin); - } - return await fetchPluginPackage(plugin); -} - -async function loadPeerPluginDeps( - pkg: PackageWithInstallRecipe, - pluginMap: PeerPluginDependencies, -) { - for (const [pluginId, pluginVersion] of Object.entries( - pkg.experimentalInstallationRecipe?.peerPluginDependencies ?? {}, - )) { - const depPkg = await loadPackageJson(pluginId); - if (!pluginMap.get(depPkg.name)) { - pluginMap.set(depPkg.name, { - pkg: depPkg, - versionToInstall: pluginVersion, - }); - await loadPeerPluginDeps(depPkg, pluginMap); - } - } -} - -export default async (pluginId?: string, cmd?: OptionValues) => { - const from = pluginId || cmd?.from; - // TODO(himanshu): If no plugin id is provided, it should list all plugins available. Maybe in some other command? - if (!from) { - throw new Error( - 'Missing both or a package.json file path in the --from flag.', - ); - } - const pkg = await loadPackageJson(from); - await installPluginAndPeerPlugins(pkg); -}; diff --git a/packages/cli/src/commands/install/steps/appRoute.ts b/packages/cli/src/commands/install/steps/appRoute.ts deleted file mode 100644 index f89b7eedff..0000000000 --- a/packages/cli/src/commands/install/steps/appRoute.ts +++ /dev/null @@ -1,92 +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 fs from 'fs-extra'; -import { paths } from '../../../lib/paths'; -import { Step, createStepDefinition } from '../types'; - -type Data = { - path: string; - element: string; - packageName: string; -}; - -class AppRouteStep implements Step { - constructor(private readonly data: Data) {} - - async run() { - const { path, element, packageName } = this.data; - - const appTsxPath = paths.resolveTargetRoot('packages/app/src/App.tsx'); - const contents = await fs.readFile(appTsxPath, 'utf-8'); - let failed = false; - - // Add a new route just above the end of the FlatRoutes block - const contentsWithRoute = contents.replace( - /(\s*)<\/FlatRoutes>/, - `$1 $1`, - ); - if (contentsWithRoute === contents) { - failed = true; - } - - // Grab the component name from the element - const componentName = element.match(/[A-Za-z0-9]+/)?.[0]; - if (!componentName) { - throw new Error(`Could not find component name in ${element}`); - } - - // Add plugin import - // TODO(Rugvip): Attempt to add this among the other plugin imports - const contentsWithImport = contentsWithRoute.replace( - /^import /m, - `import { ${componentName} } from '${packageName}';\nimport `, - ); - if (contentsWithImport === contentsWithRoute) { - failed = true; - } - - if (failed) { - console.log( - 'Failed to automatically add a route to package/app/src/App.tsx', - ); - console.log(`Action needed, add the following:`); - console.log(`1. import { ${componentName} } from '${packageName}';`); - console.log(`2. `); - } else { - await fs.writeFile(appTsxPath, contentsWithImport); - } - } -} - -export const appRoute = createStepDefinition({ - type: 'app-route', - - deserialize(obj, pkg) { - const { path, element } = obj; - if (!path || typeof path !== 'string') { - throw new Error("Invalid install step, 'path' must be a string"); - } - if (!element || typeof element !== 'string') { - throw new Error("Invalid install step, 'element' must be a string"); - } - return new AppRouteStep({ path, element, packageName: pkg.name }); - }, - - create(data: Data) { - return new AppRouteStep(data); - }, -}); diff --git a/packages/cli/src/commands/install/steps/dependencies.ts b/packages/cli/src/commands/install/steps/dependencies.ts deleted file mode 100644 index 4381066159..0000000000 --- a/packages/cli/src/commands/install/steps/dependencies.ts +++ /dev/null @@ -1,82 +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 fs from 'fs-extra'; -import chalk from 'chalk'; -import sortBy from 'lodash/sortBy'; -import groupBy from 'lodash/groupBy'; -import { paths } from '../../../lib/paths'; -import { run } from '../../../lib/run'; -import { Step, createStepDefinition } from '../types'; - -type Data = { - dependencies: Array<{ - target: string; - type: 'dependencies'; - name: string; - query: string; - }>; -}; - -class DependenciesStep implements Step { - constructor(private readonly data: Data) {} - - async run() { - const { dependencies } = this.data; - // yarn --cwd packages/app add - const byTarget = groupBy(dependencies, 'target'); - - // Go through each target package and install the dependencies. - for (const [target, deps] of Object.entries(byTarget)) { - const pkgPath = paths.resolveTargetRoot(target, 'package.json'); - const pkgJson = await fs.readJson(pkgPath); - - // Populate each type of dependency object, dependencies, devDependencies, etc. - const depTypes = new Set(); - for (const dep of deps) { - depTypes.add(dep.type); - pkgJson[dep.type][dep.name] = dep.query; - } - - // Be nice and sort the dependencies alphabetically - for (const depType of depTypes) { - pkgJson[depType] = Object.fromEntries( - sortBy(Object.entries(pkgJson[depType]), ([key]) => key), - ); - } - await fs.writeJson(pkgPath, pkgJson, { spaces: 2 }); - } - - console.log(); - console.log( - `Running ${chalk.blue('yarn install')} to install new versions`, - ); - console.log(); - await run('yarn', ['install']); - } -} - -export const dependencies = createStepDefinition({ - type: 'dependencies', - - deserialize() { - throw new Error('The dependency step may not be defined in JSON'); - }, - - create(data: Data) { - return new DependenciesStep(data); - }, -}); diff --git a/packages/cli/src/commands/install/steps/message.ts b/packages/cli/src/commands/install/steps/message.ts deleted file mode 100644 index 5821c7d98b..0000000000 --- a/packages/cli/src/commands/install/steps/message.ts +++ /dev/null @@ -1,48 +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 { Step, createStepDefinition } from '../types'; - -type Data = { - message: string; -}; - -class MessageStep implements Step { - constructor(private readonly data: Data) {} - - async run() { - console.log(this.data.message); - } -} - -export const message = createStepDefinition({ - type: 'message', - - deserialize(obj) { - const { message: msg } = obj; - - if (!msg || (typeof msg !== 'string' && !Array.isArray(msg))) { - throw new Error( - "Invalid install step, 'message' must be a string or array", - ); - } - return new MessageStep({ message: [msg].flat().join('') }); - }, - - create(data: Data) { - return new MessageStep(data); - }, -}); diff --git a/packages/cli/src/commands/install/types.ts b/packages/cli/src/commands/install/types.ts deleted file mode 100644 index 1fa52a5e82..0000000000 --- a/packages/cli/src/commands/install/types.ts +++ /dev/null @@ -1,78 +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 { YarnInfoInspectData } from '../../lib/versioning'; -import { JsonObject } from '@backstage/types'; - -/** - * TODO: possible types - * - * frontend-deps: Install one or many frontend packages in a Backstage app - * backend-deps: Install one or many backend packages in a Backstage app - * app-config: Update app-config.yaml (and ask for inputs). E.g. Use local or docker for techdocs.builder - * frontend-route: Add a frontend route to the plugin homepage - * backend-route: Add a backend route to the plugin - * entity-page-tab: Add a tab on Catalog’s entity page - * sidebar-item: Add a sidebar item - * frontend-api: Add a custom API - */ - -/** A serialized install step as it appears in JSON */ -export type SerializedStep = { - type: string; -} & unknown; - -export type InstallationRecipe = { - type?: 'frontend' | 'backend'; - steps: SerializedStep[]; - peerPluginDependencies: { [pluginId: string]: string }; -}; - -/** package.json data */ -export type PackageWithInstallRecipe = YarnInfoInspectData & { - version: string; - experimentalInstallationRecipe?: InstallationRecipe; -}; - -export type PeerPluginDependencies = Map< - string, - { - pkg: PackageWithInstallRecipe; - versionToInstall?: string; - } ->; - -export interface Step { - run(): Promise; -} - -export interface StepDefinition { - /** The string identifying this type of step */ - type: string; - - /** Deserializes and validate a JSON description of the step data */ - deserialize(obj: JsonObject, pkg: PackageWithInstallRecipe): Step; - - /** Creates a step using known parameters */ - create(options: Options): Step; -} - -/** Creates a new step definition. Only used as a helper for type inference */ -export function createStepDefinition( - config: StepDefinition, -): StepDefinition { - return config; -} diff --git a/packages/cli/src/commands/onboard/README.md b/packages/cli/src/commands/onboard/README.md deleted file mode 100644 index 0fb4d22666..0000000000 --- a/packages/cli/src/commands/onboard/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# onboard - -## Local dev - -# Create a new app - -```bash -cd .. -npx @backstage/create-app -cd new-backstage-app - -# Run the modded cli in the new app - -../RELATIVE_PATH_TO_PROJECT/backstage/packages/cli/bin/backstage-cli onboard -? Do you want to set up Authentication for this project? (Y/n) -... - -# Try the app with the new changes - -yarn dev - -``` diff --git a/packages/cli/src/commands/onboard/auth/index.ts b/packages/cli/src/commands/onboard/auth/index.ts deleted file mode 100644 index 0f4537b110..0000000000 --- a/packages/cli/src/commands/onboard/auth/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2023 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 inquirer from 'inquirer'; -import { Task } from '../../../lib/tasks'; -import { github, Answers as GitHubAnswers } from './providers/github'; -import { gitlab, Answers as GitLabAnswers } from './providers/gitlab'; - -export { type GitHubAnswers, type GitLabAnswers }; - -export async function auth(): Promise<{ - provider: string; - answers: GitHubAnswers | GitLabAnswers; -}> { - const answers = await inquirer.prompt<{ - provider: string; - }>([ - { - type: 'list', - name: 'provider', - message: 'Please select an authentication provider:', - choices: ['GitHub', 'GitLab'], - }, - ]); - - const { provider } = answers; - - let providerAnswers; - switch (provider) { - case 'GitHub': { - providerAnswers = await github(); - break; - } - case 'GitLab': { - providerAnswers = await gitlab(); - break; - } - default: - throw new Error(`Provider ${provider} not implemented yet.`); - } - - Task.log(); - Task.log(`Done setting up ${provider} Authentication!`); - Task.log(); - - return { - provider, - answers: providerAnswers, - }; -} diff --git a/packages/cli/src/commands/onboard/auth/patch.ts b/packages/cli/src/commands/onboard/auth/patch.ts deleted file mode 100644 index d004eeb157..0000000000 --- a/packages/cli/src/commands/onboard/auth/patch.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2023 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 * as fs from 'fs-extra'; -import * as path from 'path'; -import * as differ from 'diff'; -import { PATCH_FOLDER } from '../files'; -import { findPaths } from '@backstage/cli-common'; - -/* eslint-disable-next-line no-restricted-syntax */ -const { targetRoot } = findPaths(__dirname); - -export const patch = async (patchFile: string) => { - const patchContent = await fs.readFile( - path.join(PATCH_FOLDER, patchFile), - 'utf8', - ); - const targetName = patchContent.split('\n')[0].replace('--- a', ''); - const targetFile = path.join(targetRoot, targetName); - const oldContent = await fs.readFile(targetFile, 'utf8'); - const newContent = differ.applyPatch(oldContent, patchContent); - if (!newContent) { - throw new Error( - `Patch ${patchFile} was not applied correctly. - Did you change ${targetName} manually before running this command?`, - ); - } - - return await fs.writeFile(targetFile, newContent, 'utf8'); -}; diff --git a/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch b/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch deleted file mode 100644 index db9f5228e8..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/packages/app/src/App.tsx -+++ b/packages/app/src/App.tsx -@@ -30 +30,5 @@ import { Root } from './components/Root'; --import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components'; -+import { -+ AlertDisplay, -+ OAuthRequestDialog, -+ SignInPage, -+} from '@backstage/core-components'; -@@ -35,0 +40 @@ import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/ -+import { githubAuthApiRef } from '@backstage/core-plugin-api'; -@@ -38,0 +44,14 @@ const app = createApp({ -+ components: { -+ SignInPage: props => ( -+ -+ ), -+ }, \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch b/packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch deleted file mode 100644 index da849220b8..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/packages/app/src/App.tsx -+++ b/packages/app/src/App.tsx -@@ -30 +30,5 @@ import { Root } from './components/Root'; --import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components'; -+import { -+ AlertDisplay, -+ OAuthRequestDialog, -+ SignInPage, -+} from '@backstage/core-components'; -@@ -35,0 +40 @@ import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/ -+import { gitlabAuthApiRef } from '@backstage/core-plugin-api'; -@@ -38,0 +44,14 @@ const app = createApp({ -+ components: { -+ SignInPage: props => ( -+ -+ ), -+ }, \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch b/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch deleted file mode 100644 index 7a69669674..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch +++ /dev/null @@ -1,5 +0,0 @@ ---- a/packages/backend/src/plugins/auth.ts -+++ b/packages/backend/src/plugins/auth.ts -@@ -38 +38 @@ export default async function createPlugin( -- github: providers.github.create({ -+ gitlab: providers.gitlab.create({ \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/providers/github.ts b/packages/cli/src/commands/onboard/auth/providers/github.ts deleted file mode 100644 index 36c6b02038..0000000000 --- a/packages/cli/src/commands/onboard/auth/providers/github.ts +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright 2023 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 { OAuthApp } from '@octokit/oauth-app'; -import chalk from 'chalk'; -import * as fs from 'fs-extra'; -import inquirer from 'inquirer'; -import { Task } from '../../../../lib/tasks'; -import { updateConfigFile } from '../../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER } from '../../files'; -import { patch } from '../patch'; - -export type Answers = { - clientSecret: string; - clientId: string; - hasEnterprise: boolean; - enterpriseInstanceUrl?: string; -}; - -const validateCredentials = async (clientId: string, clientSecret: string) => { - try { - const app = new OAuthApp({ - clientId, - clientSecret, - }); - await app.createToken({ - code: '%NOT-VALID-CODE%', - }); - } catch (error) { - // @octokit/request returns a error.response object when a request is rejected. - // We can check it to see what kind of error we received. - - // If error.response is successful we can double-check that the error itself was due to the bad code. - // If that's the case then we can assume that the client id and secret exists as we otherwise would - // have gotten a 400/404. - if ( - error.response.status !== 200 && - error.response.data.error !== 'bad_verification_code' - ) { - throw new Error(`Validating GitHub Credentials failed.`); - } - } -}; - -const getConfig = (answers: Answers) => { - const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = - answers; - - return { - auth: { - providers: { - github: { - development: { - clientId, - clientSecret, - ...(hasEnterprise && { - enterpriseInstanceUrl, - }), - }, - }, - }, - }, - }; -}; - -export const github = async (): Promise => { - Task.log(` - To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( - 'https://github.com/settings/developers', - )} - The Homepage URL should point to Backstage's frontend, while the Authorization callback URL will point to the auth backend. - - Settings for local development: - ${chalk.cyan(` - Homepage URL: http://localhost:3000 - Authorization callback URL: http://localhost:7007/api/auth/github/handler/frame`)} - - You can find the full documentation page here: ${chalk.blue( - 'https://backstage.io/docs/auth/github/provider', - )} - `); - - const answers = await inquirer.prompt([ - { - type: 'input', - name: 'clientId', - message: 'What is your Client Id?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'input', - name: 'clientSecret', - message: 'What is your Client Secret?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'confirm', - name: 'hasEnterprise', - message: 'Are you using GitHub Enterprise?', - }, - { - type: 'input', - name: 'enterpriseInstanceUrl', - message: 'What is your URL for GitHub Enterprise?', - when: ({ hasEnterprise }) => hasEnterprise, - validate: (input: string) => Boolean(new URL(input)), - }, - ]); - - const { clientId, clientSecret } = answers; - const config = getConfig(answers); - - Task.log('Setting up GitHub Authentication for you...'); - - await Task.forItem( - 'Validating', - 'credentials', - async () => await validateCredentials(clientId, clientSecret), - ); - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), - ); - - const patches = await fs.readdir(PATCH_FOLDER); - for (const patchFile of patches.filter(p => p.includes('github'))) { - await Task.forItem('Patching', patchFile, async () => { - await patch(patchFile); - }); - } - - return answers; -}; diff --git a/packages/cli/src/commands/onboard/auth/providers/gitlab.ts b/packages/cli/src/commands/onboard/auth/providers/gitlab.ts deleted file mode 100644 index bc5491111c..0000000000 --- a/packages/cli/src/commands/onboard/auth/providers/gitlab.ts +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import * as fs from 'fs-extra'; -import inquirer from 'inquirer'; -import { Task } from '../../../../lib/tasks'; -import { updateConfigFile } from '../../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER } from '../../files'; -import { patch } from '../patch'; - -const getConfig = (answers: Answers) => { - const { clientId, clientSecret, hasAudience, audience } = answers; - - return { - auth: { - providers: { - gitlab: { - development: { - clientId, - clientSecret, - ...(hasAudience && { - audience, - }), - }, - }, - }, - }, - }; -}; - -export type Answers = { - clientSecret: string; - clientId: string; - hasAudience: boolean; - audience?: string; -}; - -export const gitlab = async (): Promise => { - Task.log(` - To add GitLab authentication, you must create an Application from the GitLab Settings: ${chalk.blue( - 'https://gitlab.com/-/profile/applications', - )} - The Redirect URI should point to your Backstage backend auth handler. - - Settings for local development: - ${chalk.cyan(` - Name: Backstage (or your custom app name) - Redirect URI: http://localhost:7007/api/auth/gitlab/handler/frame - Scopes: read_api and read_user`)} - - You can find the full documentation page here: ${chalk.blue( - 'https://backstage.io/docs/auth/gitlab/provider', - )} - `); - - const answers = await inquirer.prompt([ - { - type: 'input', - name: 'clientId', - message: 'What is your Application Id?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'input', - name: 'clientSecret', - message: 'What is your Application Secret?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'confirm', - name: 'hasAudience', - message: 'Do you have a self-hosted instance of GitLab?', - }, - { - type: 'input', - name: 'audience', - message: 'What is the URL for your GitLab instance?', - when: ({ hasAudience }) => hasAudience, - validate: (input: string) => Boolean(new URL(input)), - }, - ]); - - const config = getConfig(answers); - - Task.log('Setting up GitLab Authentication for you...'); - - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), - ); - - const patches = await fs.readdir(PATCH_FOLDER); - for (const patchFile of patches.filter(p => p.includes('gitlab'))) { - await Task.forItem('Patching', patchFile, async () => { - await patch(patchFile); - }); - } - - return answers; -}; diff --git a/packages/cli/src/commands/onboard/command.ts b/packages/cli/src/commands/onboard/command.ts deleted file mode 100644 index f68685f3e6..0000000000 --- a/packages/cli/src/commands/onboard/command.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import inquirer from 'inquirer'; -import { Task } from '../../lib/tasks'; -import { auth } from './auth'; -import { integrations } from './integrations'; -import { discover } from './discovery'; - -export async function command(): Promise { - const answers = await inquirer.prompt<{ - shouldSetupAuth: boolean; - shouldSetupScaffolder: boolean; - shouldDiscoverEntities: boolean; - }>([ - { - type: 'confirm', - name: 'shouldSetupAuth', - message: 'Do you want to set up Authentication for this project?', - default: true, - }, - { - type: 'confirm', - name: 'shouldSetupScaffolder', - message: 'Do you want to use Software Templates in this project?', - default: true, - }, - { - type: 'confirm', - name: 'shouldDiscoverEntities', - message: - 'Do you want to discover entities and add them to the Software Catalog?', - default: true, - }, - ]); - - const { shouldSetupAuth, shouldSetupScaffolder, shouldDiscoverEntities } = - answers; - - if (!shouldSetupAuth && !shouldSetupScaffolder && !shouldDiscoverEntities) { - Task.log( - chalk.yellow( - 'If you change your mind, feel free to re-run this command.', - ), - ); - return; - } - - let providerInfo; - if (shouldSetupAuth) { - providerInfo = await auth(); - } - - if (shouldSetupScaffolder) { - await integrations(providerInfo); - } - - if (shouldDiscoverEntities) { - await discover(providerInfo); - } - - Task.log(); - Task.log( - `You can now start your app with ${chalk.inverse( - chalk.italic('yarn dev'), - )}`, - ); - Task.log(); -} diff --git a/packages/cli/src/commands/onboard/config.ts b/packages/cli/src/commands/onboard/config.ts deleted file mode 100644 index cce3119fcc..0000000000 --- a/packages/cli/src/commands/onboard/config.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2023 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 * as fs from 'fs-extra'; -import yaml from 'yaml'; - -const readYaml = async (file: string) => { - return yaml.parse(await fs.readFile(file, 'utf8')); -}; - -export const updateConfigFile = async (file: string, config: T) => { - const staticContent = - '# Backstage override configuration for your local development environment \n'; - - const content = fs.existsSync(file) - ? yaml.stringify( - { ...(await readYaml(file)), ...config }, - { - indent: 2, - }, - ) - : staticContent.concat( - yaml.stringify( - { ...config }, - { - indent: 2, - }, - ), - ); - - return await fs.writeFile(file, content, 'utf8'); -}; diff --git a/packages/cli/src/commands/onboard/discovery/Discovery.ts b/packages/cli/src/commands/onboard/discovery/Discovery.ts deleted file mode 100644 index b0db4255ad..0000000000 --- a/packages/cli/src/commands/onboard/discovery/Discovery.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import { Entity } from '@backstage/catalog-model'; -import { Analyzer } from './analyzers/types'; -import { Provider } from './providers/types'; -import { DefaultAnalysisOutputs } from './analyzers/DefaultAnalysisOutputs'; -import { Task } from '../../../lib/tasks'; - -export class Discovery { - readonly #providers: Provider[] = []; - readonly #analyzers: Analyzer[] = []; - - addProvider(provider: Provider) { - this.#providers.push(provider); - } - - addAnalyzer(analyzer: Analyzer) { - this.#analyzers.push(analyzer); - } - - async run(url: string): Promise<{ entities: Entity[] }> { - Task.log(`Running discovery for ${chalk.cyan(url)}`); - const result: Entity[] = []; - - for (const provider of this.#providers) { - const repositories = await provider.discover(url); - if (repositories && repositories.length) { - Task.log( - `Discovered ${chalk.cyan( - repositories.length, - )} repositories for ${chalk.cyan(provider.name())}`, - ); - - for (const repository of repositories) { - await Task.forItem('Analyzing', repository.name, async () => { - const output = new DefaultAnalysisOutputs(); - for (const analyzer of this.#analyzers) { - await analyzer.analyzeRepository({ repository, output }); - } - - output - .list() - .filter(entry => entry.type === 'entity') - .forEach(({ entity }) => result.push(entity)); - }); - } - - Task.log(`Produced ${chalk.cyan(result.length || 'no')} entities`); - } - } - - return { - entities: result, - }; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/BasicRepositoryAnalyzer.ts b/packages/cli/src/commands/onboard/discovery/analyzers/BasicRepositoryAnalyzer.ts deleted file mode 100644 index 82c8c2cdae..0000000000 --- a/packages/cli/src/commands/onboard/discovery/analyzers/BasicRepositoryAnalyzer.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2023 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 { ComponentEntity } from '@backstage/catalog-model'; -import { AnalysisOutputs, Analyzer } from './types'; -import { Repository } from '../providers/types'; - -/** - * Naive analyzer that produces a single entity that represents the repository - * as a whole. - */ -export class BasicRepositoryAnalyzer implements Analyzer { - name(): string { - return BasicRepositoryAnalyzer.name; - } - - async analyzeRepository(options: { - repository: Repository; - output: AnalysisOutputs; - }): Promise { - const entity: ComponentEntity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: options.repository.name, - ...(options.repository.description - ? { description: options.repository.description } - : {}), - }, - spec: { - type: 'service', - lifecycle: 'production', - owner: 'user:guest', - }, - }; - - options.output.produce({ - type: 'entity', - path: '/', - entity: entity, - }); - } -} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/PackageJsonAnalyzer.ts b/packages/cli/src/commands/onboard/discovery/analyzers/PackageJsonAnalyzer.ts deleted file mode 100644 index 16dd4b9301..0000000000 --- a/packages/cli/src/commands/onboard/discovery/analyzers/PackageJsonAnalyzer.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2023 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 { - ANNOTATION_SOURCE_LOCATION, - ComponentEntity, -} from '@backstage/catalog-model'; -import z from 'zod'; -import { AnalysisOutputs, Analyzer } from './types'; -import { Repository, RepositoryFile } from '../providers/types'; - -export class PackageJsonAnalyzer implements Analyzer { - name(): string { - return PackageJsonAnalyzer.name; - } - - async analyzeRepository(options: { - repository: Repository; - output: AnalysisOutputs; - }): Promise { - const packageJson = await options.repository.file('package.json'); - if (!packageJson) { - return; - } - - const content = await readPackageJson(packageJson); - if (!content) { - return; - } - - const name = sanitizeName(content?.name) ?? options.repository.name; - - const entity: ComponentEntity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name, - ...(options.repository.description - ? { description: options.repository.description } - : {}), - tags: ['javascript'], - annotations: { - [ANNOTATION_SOURCE_LOCATION]: `url:${options.repository.url}`, - }, - }, - spec: { - type: 'website', - lifecycle: 'production', - owner: 'user:guest', - }, - }; - - const decorate = options.output - .list() - .find(entry => entry.entity.metadata.name === name); - - if (decorate) { - decorate.entity.spec = { - ...decorate.entity.spec, - type: 'website', - }; - - decorate.entity.metadata.tags = [ - ...(decorate.entity.metadata.tags ?? []), - 'javascript', - ]; - - decorate.entity.metadata.annotations = { - ...decorate.entity.metadata.annotations, - [ANNOTATION_SOURCE_LOCATION]: `url:${options.repository.url}`, - }; - - return; - } - - options.output.produce({ - type: 'entity', - path: '/', - entity, - }); - } -} - -const packageSchema = z.object({ - name: z.string().optional(), -}); - -/** - * Makes sure that a name retrieved from a package.json file - * is reasonable and conforms to the catalog naming format. - * - * Read more about the naming format here: - * ADR002: Default Software Catalog File Format - * https://backstage.io/docs/architecture-decisions/adrs-adr002/ - */ -function sanitizeName(name?: string) { - return name && name !== 'root' - ? name.replace(/[^a-z0-9A-Z]/g, '_').substring(0, 62) - : undefined; -} - -async function readPackageJson( - file: RepositoryFile, -): Promise | undefined> { - try { - const text = await file.text(); - const result = packageSchema.safeParse(JSON.parse(text)); - if (!result.success) { - return undefined; - } - return { name: result.data.name }; - } catch (e) { - return undefined; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/index.ts b/packages/cli/src/commands/onboard/discovery/index.ts deleted file mode 100644 index 8b2a5b694a..0000000000 --- a/packages/cli/src/commands/onboard/discovery/index.ts +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2023 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 yaml from 'yaml'; -import inquirer from 'inquirer'; -import chalk from 'chalk'; -import { loadCliConfig } from '../../../lib/config'; -import { updateConfigFile } from '../config'; -import { APP_CONFIG_FILE, DISCOVERED_ENTITIES_FILE } from '../files'; -import { Discovery } from './Discovery'; -import { BasicRepositoryAnalyzer } from './analyzers/BasicRepositoryAnalyzer'; -import { PackageJsonAnalyzer } from './analyzers/PackageJsonAnalyzer'; -import { GithubDiscoveryProvider } from './providers/github/GithubDiscoveryProvider'; -import { GitlabDiscoveryProvider } from './providers/gitlab/GitlabDiscoveryProvider'; -import { GitHubAnswers, GitLabAnswers } from '../auth'; -import { Task } from '../../../lib/tasks'; - -export async function discover(providerInfo?: { - provider: string; - answers: GitHubAnswers | GitLabAnswers; -}) { - Task.log(` - Would you like to scan for - and create - Software Catalog entities? - - You will need to select which SCM (Source Code Management) provider you are using, - and then which repository or organization you want to scan. - - This will generate a new file in the root of your app containing discovered entities, - which will be included in the Software Catalog when you start up Backstage next time. - - Note that this command requires an access token, which can be either added through the integration config or - provided as an environment variable. - `); - - const answers = await inquirer.prompt<{ - shouldContinue: boolean; - provider: string; - url: string; - }>([ - { - type: 'confirm', - name: 'shouldContinue', - message: 'Do you want to continue?', - }, - { - type: 'list', - name: 'provider', - message: 'Please select which SCM provider you want to use:', - choices: ['GitHub', 'GitLab'], - default: providerInfo?.provider, - when: ({ shouldContinue }) => shouldContinue, - }, - { - type: 'input', - name: 'url', - message: `Which repository do you want to scan?`, - when: ({ shouldContinue }) => shouldContinue, - filter: (input, { provider }) => { - if (provider === 'GitLab') { - return `https://gitlab.com/${input}`; - } - if (provider === 'GitHub') { - return `https://github.com/${input}`; - } - return false; - }, - }, - ]); - - if (!answers.shouldContinue) { - Task.log( - chalk.yellow( - 'If you change your mind, feel free to re-run this command.', - ), - ); - return; - } - - const { fullConfig: config } = await loadCliConfig({ args: [] }); - - const discovery = new Discovery(); - - if (answers.provider === 'GitHub') { - discovery.addProvider(GithubDiscoveryProvider.fromConfig(config)); - } - if (answers.provider === 'GitLab') { - discovery.addProvider(GitlabDiscoveryProvider.fromConfig(config)); - } - - discovery.addAnalyzer(new BasicRepositoryAnalyzer()); - discovery.addAnalyzer(new PackageJsonAnalyzer()); - - const { entities } = await discovery.run(answers.url); - - if (!entities.length) { - Task.log( - chalk.yellow(` - We could not find enough information to be able to generate any Software Catalog entities for you. - Perhaps you can try again with a different repository?`), - ); - return; - } - - await Task.forItem('Creating', DISCOVERED_ENTITIES_FILE, async () => { - const payload: string[] = []; - for (const entity of entities) { - payload.push('---\n', yaml.stringify(entity)); - } - await fs.writeFile(DISCOVERED_ENTITIES_FILE, payload.join('')); - }); - - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => - await updateConfigFile(APP_CONFIG_FILE, { - catalog: { - locations: [ - { - type: 'file', - target: DISCOVERED_ENTITIES_FILE, - }, - ], - }, - }), - ); -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/github/GithubDiscoveryProvider.ts b/packages/cli/src/commands/onboard/discovery/providers/github/GithubDiscoveryProvider.ts deleted file mode 100644 index a24756edd7..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/github/GithubDiscoveryProvider.ts +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2023 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 { Config } from '@backstage/config'; -import { - DefaultGithubCredentialsProvider, - GithubCredentialsProvider, - ScmIntegrations, -} from '@backstage/integration'; -import { graphql } from '@octokit/graphql'; -import { - Repository as GraphqlRepository, - Query as GraphqlQuery, -} from '@octokit/graphql-schema'; -import parseGitUrl from 'git-url-parse'; -import { Provider, Repository } from '../types'; -import { GithubRepository } from './GithubRepository'; - -export class GithubDiscoveryProvider implements Provider { - readonly #envToken: string | undefined; - readonly #scmIntegrations: ScmIntegrations; - readonly #credentialsProvider: GithubCredentialsProvider; - - static fromConfig(config: Config): GithubDiscoveryProvider { - const envToken = process.env.GITHUB_TOKEN || undefined; - const scmIntegrations = ScmIntegrations.fromConfig(config); - const credentialsProvider = - DefaultGithubCredentialsProvider.fromIntegrations(scmIntegrations); - return new GithubDiscoveryProvider( - envToken, - scmIntegrations, - credentialsProvider, - ); - } - - private constructor( - envToken: string | undefined, - integrations: ScmIntegrations, - credentialsProvider: GithubCredentialsProvider, - ) { - this.#envToken = envToken; - this.#scmIntegrations = integrations; - this.#credentialsProvider = credentialsProvider; - } - - name(): string { - return 'GitHub'; - } - - async discover(url: string): Promise { - if (!url.startsWith('https://github.com/')) { - return false; - } - - const scmIntegration = this.#scmIntegrations.github.byUrl(url); - if (!scmIntegration) { - throw new Error(`No GitHub integration found for ${url}`); - } - - const parsed = parseGitUrl(url); - const { name, organization } = parsed; - const org = organization || name; // depends on if it's a repo url or an org url... - - const client = graphql.defaults({ - baseUrl: scmIntegration.config.apiBaseUrl, - headers: await this.#getRequestHeaders(url), - }); - - const { repositories } = await this.#getOrganizationRepositories( - client, - org, - ); - - return repositories - .filter(repo => repo.url.startsWith(url)) - .map(repo => new GithubRepository(client, repo, org)); - } - - async #getRequestHeaders(url: string): Promise> { - const credentials = await this.#credentialsProvider.getCredentials({ - url, - }); - - if (credentials.headers) { - return credentials.headers; - } else if (credentials.token) { - return { authorization: `token ${credentials.token}` }; - } - - if (this.#envToken) { - return { authorization: `token ${this.#envToken}` }; - } - - throw new Error( - 'No token available for GitHub, please configure your integrations or set a GITHUB_TOKEN env variable', - ); - } - - async #getOrganizationRepositories(client: typeof graphql, org: string) { - const query = `query repositories($org: String!, $cursor: String) { - repositoryOwner(login: $org) { - login - repositories(first: 50, after: $cursor) { - nodes { - name - url - description - isArchived - isFork - } - pageInfo { - hasNextPage - endCursor - } - } - } - }`; - - const result: GraphqlRepository[] = []; - - let cursor: string | undefined | null = undefined; - let hasNextPage = true; - - while (hasNextPage) { - const response: GraphqlQuery = await client(query, { - org, - cursor, - }); - - const { repositories: connection } = response.repositoryOwner ?? {}; - - if (!connection) { - throw new Error(`Found no repositories for ${org}`); - } - - for (const repository of connection.nodes ?? []) { - if (repository && !repository.isArchived && !repository.isFork) { - result.push(repository); - } - } - - cursor = connection.pageInfo.endCursor; - hasNextPage = connection.pageInfo.hasNextPage; - } - - return { - repositories: result, - }; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/github/GithubRepository.ts b/packages/cli/src/commands/onboard/discovery/providers/github/GithubRepository.ts deleted file mode 100644 index f3c68851a0..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/github/GithubRepository.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2023 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 { graphql } from '@octokit/graphql'; -import { - Repository as GraphqlRepository, - Blob as GraphqlBlob, -} from '@octokit/graphql-schema'; -import { Repository, RepositoryFile } from '../types'; -import { GithubFile } from './GithubFile'; - -export class GithubRepository implements Repository { - readonly #client: typeof graphql; - readonly #repo: GraphqlRepository; - readonly #org: string; - - constructor(client: typeof graphql, repo: GraphqlRepository, org: string) { - this.#client = client; - this.#repo = repo; - this.#org = org; - } - - get url(): string { - return this.#repo.url; - } - - get name(): string { - return this.#repo.name; - } - - get owner(): string { - return this.#org; - } - - get description(): string | undefined { - return this.#repo.description ?? undefined; - } - - async file(filename: string): Promise { - const content = await this.#getFileContent(filename); - if (!content || content.isBinary || !content.text) { - return undefined; - } - - return new GithubFile(filename, content.text ?? ''); - } - - async #getFileContent(filename: string) { - const query = `query RepoFiles($owner: String!, $name: String!, $expr: String!) { - repository(owner: $owner, name: $name) { - object(expression: $expr) { - ...on Blob { - text - isBinary - } - } - } - }`; - - const response = await this.#client<{ repository: GraphqlRepository }>( - query, - { - name: this.#repo.name, - owner: this.#org, - expr: `HEAD:${filename}`, - }, - ); - - return response.repository.object as GraphqlBlob; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabDiscoveryProvider.ts b/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabDiscoveryProvider.ts deleted file mode 100644 index df9ffa4206..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabDiscoveryProvider.ts +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2023 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 { Config } from '@backstage/config'; -import { - DefaultGitlabCredentialsProvider, - GitlabCredentialsProvider, - ScmIntegrations, -} from '@backstage/integration'; -import fetch from 'node-fetch'; -import { Provider } from '../types'; -import { GitlabProject, ProjectResponse } from './GitlabProject'; - -export class GitlabDiscoveryProvider implements Provider { - readonly #envToken: string | undefined; - readonly #scmIntegrations: ScmIntegrations; - readonly #credentialsProvider: GitlabCredentialsProvider; - - static fromConfig(config: Config): GitlabDiscoveryProvider { - const envToken = process.env.GITLAB_TOKEN || undefined; - const scmIntegrations = ScmIntegrations.fromConfig(config); - const credentialsProvider = - DefaultGitlabCredentialsProvider.fromIntegrations(scmIntegrations); - - return new GitlabDiscoveryProvider( - envToken, - scmIntegrations, - credentialsProvider, - ); - } - - private constructor( - envToken: string | undefined, - integrations: ScmIntegrations, - credentialsProvider: GitlabCredentialsProvider, - ) { - this.#envToken = envToken; - this.#scmIntegrations = integrations; - this.#credentialsProvider = credentialsProvider; - } - - name(): string { - return 'GitLab'; - } - - async discover(url: string): Promise { - const { origin, pathname } = new URL(url); - const [, user] = pathname.split('/'); - - const scmIntegration = this.#scmIntegrations.gitlab.byUrl(origin); - if (!scmIntegration) { - throw new Error(`No GitLab integration found for ${origin}`); - } - - const headers = await this.#getRequestHeaders(origin); - - const response = await fetch( - `${scmIntegration.config.apiBaseUrl}/users/${user}/projects`, - { headers }, - ); - - if (!response.ok) { - throw new Error(`${response.status} ${response.statusText}`); - } - - const projects: ProjectResponse[] = await response.json(); - - return projects.map( - project => - new GitlabProject(project, scmIntegration.config.apiBaseUrl, headers), - ); - } - - async #getRequestHeaders(url: string): Promise> { - const credentials = await this.#credentialsProvider.getCredentials({ - url, - }); - - if (credentials.headers) { - return credentials.headers; - } else if (credentials.token) { - return { authorization: `Bearer ${credentials.token}` }; - } - - if (this.#envToken) { - return { authorization: `Bearer ${this.#envToken}` }; - } - - throw new Error( - 'No token available for GitLab, please set a GITLAB_TOKEN env variable', - ); - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabProject.ts b/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabProject.ts deleted file mode 100644 index 258e8176bb..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabProject.ts +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2023 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 fetch from 'node-fetch'; -import { GitlabFile } from './GitlabFile'; -import { Repository, RepositoryFile } from '../types'; - -export type ProjectResponse = { - id: string; - name: string; - description: string; - owner: { - username: string; - }; - web_url: string; -}; - -type BranchResponse = { - default: boolean; - name: string; -}; - -type FileContentResponse = { - content: string; -}; - -export class GitlabProject implements Repository { - constructor( - private readonly project: ProjectResponse, - private readonly apiBaseUrl: string, - private readonly headers: { [name: string]: string }, - ) {} - - get url(): string { - return this.project.web_url; - } - - get name(): string { - return this.project.name; - } - - get owner(): string { - return this.project.owner.username; - } - - get description(): string { - return this.project.description; - } - - async file(filename: string): Promise { - const mainBranch = await this.#getMainBranch(); - const content = await this.#getFileContent(filename, mainBranch); - - return new GitlabFile(filename, content); - } - - async #getFileContent(path: string, mainBranch: string): Promise { - const response = await fetch( - `${this.apiBaseUrl}/projects/${this.project.id}/repository/files/${path}?ref=${mainBranch}`, - { headers: this.headers }, - ); - const { content }: FileContentResponse = await response.json(); - - return Buffer.from(content, 'base64').toString('ascii'); - } - - async #getMainBranch(): Promise { - const response = await fetch( - `${this.apiBaseUrl}/projects/${this.project.id}/repository/branches`, - { headers: this.headers }, - ); - const branches: BranchResponse[] = await response.json(); - - return branches.find(branch => branch.default)?.name ?? 'main'; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/types.ts b/packages/cli/src/commands/onboard/discovery/providers/types.ts deleted file mode 100644 index 2d8ce70ecf..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/types.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2023 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. - */ - -/** - * Abstraction for a single repository. - */ -export interface Repository { - url: string; - - name: string; - - owner: string; - - description?: string; - - file(filename: string): Promise; -} - -/** - * Abstraction for a single repository file. - */ -export interface RepositoryFile { - /** - * The filepath of the data. - */ - path: string; - - /** - * The textual contents of the file. - */ - text(): Promise; -} - -/** - * One integration that supports discovery of repositories. - */ -export interface Provider { - name(): string; - discover(url: string): Promise; -} diff --git a/packages/cli/src/commands/onboard/files.ts b/packages/cli/src/commands/onboard/files.ts deleted file mode 100644 index febec35d4a..0000000000 --- a/packages/cli/src/commands/onboard/files.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2023 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 { findPaths } from '@backstage/cli-common'; -import * as path from 'path'; - -/* eslint-disable-next-line no-restricted-syntax */ -const { targetRoot, ownDir } = findPaths(__dirname); - -export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); -export const DISCOVERED_ENTITIES_FILE = path.join( - targetRoot, - 'examples', - 'discovered-entities.yaml', -); -export const PATCH_FOLDER = path.join( - ownDir, - 'src', - 'commands', - 'onboard', - 'auth', - 'patches', -); diff --git a/packages/cli/src/commands/onboard/integrations/github.ts b/packages/cli/src/commands/onboard/integrations/github.ts deleted file mode 100644 index a0538c7ace..0000000000 --- a/packages/cli/src/commands/onboard/integrations/github.ts +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import inquirer from 'inquirer'; -import { Task } from '../../../lib/tasks'; -import { updateConfigFile } from '../config'; -import { APP_CONFIG_FILE } from '../files'; -import { GitHubAnswers } from '../auth'; - -type Answers = { - hasEnterprise: boolean; - enterpriseInstanceUrl: string; - apiBaseUrl: string; -}; - -const getConfig = ({ - hasEnterprise, - apiBaseUrl, - host, - token, -}: { - hasEnterprise: boolean; - apiBaseUrl: string; - host: string; - token: string; -}) => ({ - integrations: { - github: [ - { - host, - token, - ...(hasEnterprise && { - apiBaseUrl, - }), - }, - ], - }, -}); - -export const github = async (providerAnswers?: GitHubAnswers) => { - // TODO(tudi2d): Is GitHub Enterprise a valid setup if there is no Authentication? - const answers = await inquirer.prompt([ - { - type: 'confirm', - name: 'hasEnterprise', - message: 'Are you using GitHub Enterprise?', - when: () => typeof providerAnswers === 'undefined', - }, - { - type: 'input', - name: 'enterpriseInstanceUrl', - message: 'What is your URL for GitHub Enterprise?', - when: ({ hasEnterprise }) => hasEnterprise, - validate: (input: string) => Boolean(new URL(input)), - }, - { - type: 'input', - name: 'apiBaseUrl', - message: 'What is your GitHub Enterprise API path?', - default: '/api/v3', - when: ({ hasEnterprise }) => - hasEnterprise || providerAnswers?.hasEnterprise, - // TODO(tudi2d): Fetch API using OAuth Token if Auth was set up - }, - ]); - - const host = new URL( - providerAnswers?.enterpriseInstanceUrl ?? - answers?.enterpriseInstanceUrl ?? - 'http://github.com', - ); - - Task.log(` - To create new repositories in GitHub using Software Templates you first need to create a personal access token: ${chalk.blue( - `${host.origin}/settings/tokens/new`, - )} - - Select the following scopes: - - Reading software components:${chalk.cyan(` - - "repo"`)} - - Reading organization data:${chalk.cyan(` - - "read:org" - - "read:user" - - "user:email"`)} - - Publishing software templates:${chalk.cyan(` - - "repo" - - "workflow" (if templates include GitHub workflows) - `)} - - You can find the full documentation page here: ${chalk.blue( - 'https://backstage.io/docs/integrations/github/locations', - )} - `); - - const { token } = await inquirer.prompt<{ token: string }>([ - { - type: 'input', - name: 'token', - message: - 'Please insert your personal access token to setup the GitHub Integration', - // TODO(tudi2d): validate - }, - ]); - - const config = getConfig({ - hasEnterprise: providerAnswers?.hasEnterprise ?? answers.hasEnterprise, - apiBaseUrl: host.origin + answers.apiBaseUrl, - host: host.hostname, - token, - }); - - Task.log('Setting up Software Templates using GitHub integration for you...'); - - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), - ); -}; diff --git a/packages/cli/src/commands/onboard/integrations/index.ts b/packages/cli/src/commands/onboard/integrations/index.ts deleted file mode 100644 index 5cb2f95b38..0000000000 --- a/packages/cli/src/commands/onboard/integrations/index.ts +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2023 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 inquirer from 'inquirer'; -import { Task } from '../../../lib/tasks'; -import { GitHubAnswers, GitLabAnswers } from '../auth'; -import { github } from './github'; - -enum Integration { - GITHUB = 'GitHub', -} - -const Integrations: Integration[] = [Integration.GITHUB]; - -export async function integrations(providerInfo?: { - provider: string; - answers: GitHubAnswers | GitLabAnswers; -}): Promise { - const answers = await inquirer.prompt<{ - integration?: Integration; - shouldUsePreviousProvider: boolean; - }>([ - { - type: 'confirm', - name: 'shouldUsePreviousProvider', - message: `Do you want to keep using ${providerInfo?.provider} as your provider when setting up Software Templates?`, - when: () => - providerInfo?.provider && - Object.values(Integrations).includes( - providerInfo!.provider as Integration, - ), - }, - { - // TODO(tudi2d): Let's start with one, but it should be multiple choice in the future - type: 'list', - name: 'integration', - message: 'Please select an integration provider:', - choices: Integrations, - when: ({ shouldUsePreviousProvider }) => !shouldUsePreviousProvider, - }, - ]); - - if (answers.shouldUsePreviousProvider) { - answers.integration = providerInfo!.provider as Integration; - } - - switch (answers.integration) { - case Integration.GITHUB: { - const providerAnswers = - providerInfo?.provider === 'GitHub' - ? (providerInfo!.answers as GitHubAnswers) - : undefined; - await github(providerAnswers); - break; - } - default: - } - - Task.log(); - Task.log(`Done setting up ${answers.integration} Integration!`); - Task.log(); -} diff --git a/packages/cli/src/commands/plugin/diff.ts b/packages/cli/src/commands/plugin/diff.ts deleted file mode 100644 index 07f2a94ea8..0000000000 --- a/packages/cli/src/commands/plugin/diff.ts +++ /dev/null @@ -1,102 +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 { - diffTemplateFiles, - handlers, - handleAllFiles, - inquirerPromptFunc, - makeCheckPromptFunc, - yesPromptFunc, -} from '../../lib/diff'; -import { paths } from '../../lib/paths'; - -export type PluginData = { - id: string; - name: string; - privatePackage: string; - pluginVersion: string; - npmRegistry: string; -}; - -const fileHandlers = [ - { - patterns: ['package.json'], - handler: handlers.packageJson, - }, - { - // make sure files in 1st level of src/ and dev/ exist - patterns: ['.eslintrc.js'], - handler: handlers.exists, - }, - { - patterns: ['README.md', 'tsconfig.json', /^src\//, /^dev\//], - handler: handlers.skip, - }, -]; - -export default async (opts: OptionValues) => { - let promptFunc = inquirerPromptFunc; - let finalize = () => {}; - - if (opts.check) { - [promptFunc, finalize] = makeCheckPromptFunc(); - } else if (opts.yes) { - promptFunc = yesPromptFunc; - } - - const data = await readPluginData(); - const templateFiles = await diffTemplateFiles('default-plugin', data); - await handleAllFiles(fileHandlers, templateFiles, promptFunc); - finalize(); -}; - -// Reads templating data from the existing plugin -async function readPluginData(): Promise { - let name: string; - let privatePackage: string; - let pluginVersion: string; - let npmRegistry: string; - try { - const pkg = require(paths.resolveTarget('package.json')); - name = pkg.name; - privatePackage = pkg.private; - pluginVersion = pkg.version; - const scope = name.split('/')[0]; - if (`${scope}:registry` in pkg.publishConfig) { - const registryURL = pkg.publishConfig[`${scope}:registry`]; - npmRegistry = `"${scope}:registry" : "${registryURL}"`; - } else npmRegistry = ''; - } catch (error) { - throw new Error(`Failed to read target package, ${error}`); - } - - const pluginTsContents = await fs.readFile( - paths.resolveTarget('src/plugin.ts'), - 'utf8', - ); - // TODO: replace with some proper parsing logic or plugin metadata file - const pluginIdMatch = pluginTsContents.match(/id: ['"`](.+?)['"`]/); - if (!pluginIdMatch) { - throw new Error(`Failed to parse plugin.ts, no plugin ID found`); - } - - const id = pluginIdMatch[1]; - - return { id, name, privatePackage, pluginVersion, npmRegistry }; -} diff --git a/packages/cli/src/commands/remove-plugin/file-mocks.ts b/packages/cli/src/commands/remove-plugin/file-mocks.ts deleted file mode 100644 index 1264dc8f2e..0000000000 --- a/packages/cli/src/commands/remove-plugin/file-mocks.ts +++ /dev/null @@ -1,32 +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. - */ -export const pluginsFileContent = ` -export { plugin as WelcomePlugin } from '@backstage/plugin-welcome'; -export { plugin as LighthousePlugin } from '@backstage/plugin-lighthouse';`; - -export const codeownersFileContent = ` -* @spotify/backstage-core -/docs/features/techdocs @spotify/techdocs-core -/plugins/cost-insights @spotify/silver-lining -`; - -export const packageFileContent = { - name: 'example-app', - version: '0.1.1', - dependencies: {}, - devDependencies: {}, - scripts: {}, -}; diff --git a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts new file mode 100644 index 0000000000..a12a48c523 --- /dev/null +++ b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts @@ -0,0 +1,145 @@ +/* + * Copyright 2024 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 { PackageRole } from '@backstage/cli-node'; +import { Project } from 'ts-morph'; +import { BackstagePackageFeatureType } from '../typeDistProject'; + +const mockEntryPoint = 'dist/index.d.ts'; + +type CreateFeatureEnvironmentOptions = { + $$type?: BackstagePackageFeatureType; + format?: + | 'DefaultExportAssignment' + | 'DefaultExportFromFile' + | 'DefaultExportFromFileAsDefault' + | 'DefaultExportFromFileWithSibling'; + role?: PackageRole; +}; + +type FeatureEnvironment = { + project: Project; + role: PackageRole; + dir: string; + entryPoint: string; +}; + +type File = { + path: string; + content: string; +}; + +const createTestType = ($$type: BackstagePackageFeatureType): File[] => [ + { + path: './dist/createTestType.d.ts', + content: ` +export interface TestType { + readonly $$type: '${$$type}'; +}; + +export function createTestType(): TestType { + return { + $$type: '${$$type}', + }; +}; + `, + }, +]; + +const createMockDefaultExportAssignment = (): File[] => [ + { + path: mockEntryPoint, + content: ` +declare const _default: import("./createTestType").TestType; +export default _default; + `, + }, +]; + +const createMockDefaultExportFromFile = (): File[] => [ + { + path: mockEntryPoint, + content: `export { default } from './linked';`, + }, + { + path: './dist/linked.d.ts', + content: ` +declare const _default: import("./createTestType").TestType; +export default _default; +`, + }, +]; + +const createMockDefaultExportFromFileAsDefault = (): File[] => [ + { + path: mockEntryPoint, + content: `export { test as default } from './linked';`, + }, + { + path: './dist/linked.d.ts', + content: ` +export declare const test: import("./createTestType").TestType; + `, + }, +]; + +const createMockDefaultExportFromFileWithSibling = (): File[] => [ + { + path: mockEntryPoint, + content: `export { default, test } from './linked';`, + }, + { + path: './dist/linked.d.ts', + content: ` +import { createTestType } from './createTestType'; + +export declare const test: import("./createTestType").TestType; +declare const _default: import("./createTestType").TestType; +export default _default; + `, + }, +]; + +const formatToFiles = { + DefaultExportAssignment: createMockDefaultExportAssignment, + DefaultExportFromFile: createMockDefaultExportFromFile, + DefaultExportFromFileAsDefault: createMockDefaultExportFromFileAsDefault, + DefaultExportFromFileWithSibling: createMockDefaultExportFromFileWithSibling, +}; + +export default function createFeatureEnvironment( + options?: CreateFeatureEnvironmentOptions, +): FeatureEnvironment { + const { + $$type = '@backstage/BackendFeature', + format = 'DefaultExportAssignment', + role = 'backend-plugin', + } = options ?? {}; + + const project = new Project(); + const files = [...createTestType($$type), ...formatToFiles[format]()]; + + for (const file of files) { + project.createSourceFile(file.path, file.content); + } + + return { + project, + role, + dir: project.getFileSystem().getCurrentDirectory(), + entryPoint: mockEntryPoint, + }; +} diff --git a/packages/cli/src/lib/diff/handlers.ts b/packages/cli/src/lib/diff/handlers.ts deleted file mode 100644 index 55e9cddd3d..0000000000 --- a/packages/cli/src/lib/diff/handlers.ts +++ /dev/null @@ -1,354 +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 chalk from 'chalk'; -import { diffLines } from 'diff'; -import { sep, posix } from 'path'; -import { FileDiff, PromptFunc, FileHandler, WriteFileFunc } from './types'; - -function sortObjectKeys(obj: Record) { - const sortedKeys = Object.keys(obj).sort(); - for (const key of sortedKeys) { - const value = obj[key]; - delete obj[key]; - obj[key] = value; - } -} - -class PackageJsonHandler { - static async handler( - { path, write, missing, targetContents, templateContents }: FileDiff, - prompt: PromptFunc, - variant?: string, - ) { - console.log('Checking package.json'); - - if (missing) { - throw new Error(`${path} doesn't exist`); - } - - const pkg = JSON.parse(templateContents); - const targetPkg = JSON.parse(targetContents); - - const handler = new PackageJsonHandler( - write, - prompt, - pkg, - targetPkg, - variant, - ); - await handler.handle(); - } - - static async appHandler(file: FileDiff, prompt: PromptFunc) { - return PackageJsonHandler.handler(file, prompt, 'app'); - } - - constructor( - private readonly writeFunc: WriteFileFunc, - private readonly prompt: PromptFunc, - private readonly pkg: any, - private readonly targetPkg: any, - private readonly variant?: string, - ) {} - - async handle() { - await this.syncField('main'); - if (this.variant !== 'app') { - await this.syncField('main:src'); - } - await this.syncField('types'); - await this.syncFiles(); - await this.syncScripts(); - await this.syncPublishConfig(); - await this.syncDependencies('dependencies'); - await this.syncDependencies('peerDependencies', true); - await this.syncDependencies('devDependencies'); - await this.syncReactDeps(); - } - - // Make sure a field inside package.json is in sync. This mutates the targetObj and writes package.json on change. - private async syncField( - fieldName: string, - obj: any = this.pkg, - targetObj: any = this.targetPkg, - prefix?: string, - sort?: boolean, - optional?: boolean, - ) { - const fullFieldName = chalk.cyan( - prefix ? `${prefix}[${fieldName}]` : fieldName, - ); - const newValue = obj[fieldName]; - const coloredNewValue = chalk.cyan(JSON.stringify(newValue)); - - if (fieldName in targetObj) { - const oldValue = targetObj[fieldName]; - if (JSON.stringify(oldValue) === JSON.stringify(newValue)) { - return; - } - - const coloredOldValue = chalk.cyan(JSON.stringify(oldValue)); - const msg = `package.json has mismatched field, ${fullFieldName}, change from ${coloredOldValue} to ${coloredNewValue}?`; - if (await this.prompt(msg)) { - targetObj[fieldName] = newValue; - if (sort) { - sortObjectKeys(targetObj); - } - await this.write(); - } - } else if (fieldName in obj && optional !== true) { - if ( - await this.prompt( - `package.json is missing field ${fullFieldName}, set to ${coloredNewValue}?`, - ) - ) { - targetObj[fieldName] = newValue; - if (sort) { - sortObjectKeys(targetObj); - } - await this.write(); - } - } - } - - private async syncFiles() { - const { configSchema } = this.targetPkg; - const hasSchemaFile = typeof configSchema === 'string'; - - if (!this.targetPkg.files) { - const expected = hasSchemaFile ? ['dist', configSchema] : ['dist']; - if ( - await this.prompt( - `package.json is missing field "files", set to ${JSON.stringify( - expected, - )}?`, - ) - ) { - this.targetPkg.files = expected; - await this.write(); - } - } else { - const missing = []; - if (!this.targetPkg.files.includes('dist')) { - missing.push('dist'); - } - if (hasSchemaFile && !this.targetPkg.files.includes(configSchema)) { - missing.push(configSchema); - } - if (missing.length) { - if ( - await this.prompt( - `package.json is missing ${JSON.stringify( - missing, - )} in the "files" field, add?`, - ) - ) { - this.targetPkg.files.push(...missing); - await this.write(); - } - } - } - } - - private async syncScripts() { - const pkgScripts = this.pkg.scripts; - const targetScripts = (this.targetPkg.scripts = - this.targetPkg.scripts || {}); - - if (!pkgScripts) { - return; - } - - // Skip diffing package scripts that have been migrated to the new commands - const hasNewScript = Object.values(targetScripts).some(script => - String(script).includes('backstage-cli package '), - ); - if (hasNewScript) { - return; - } - - for (const key of Object.keys(pkgScripts)) { - await this.syncField(key, pkgScripts, targetScripts, 'scripts'); - } - } - - private async syncPublishConfig() { - const pkgPublishConf = this.pkg.publishConfig; - const targetPublishConf = this.targetPkg.publishConfig; - - // If template doesn't have a publish config we're done - if (!pkgPublishConf) { - return; - } - - // Publish config can be removed the the target, skip in that case - if (!targetPublishConf) { - if (await this.prompt('Missing publishConfig, do you want to add it?')) { - this.targetPkg.publishConfig = pkgPublishConf; - await this.write(); - } - return; - } - - for (const key of Object.keys(pkgPublishConf)) { - // Don't want to mess with peoples internal setup - if (!['access', 'registry'].includes(key)) { - await this.syncField( - key, - pkgPublishConf, - targetPublishConf, - 'publishConfig', - ); - } - } - } - - private async syncDependencies(fieldName: string, required: boolean = false) { - const pkgDeps = this.pkg[fieldName]; - const targetDeps = (this.targetPkg[fieldName] = - this.targetPkg[fieldName] || {}); - - if (!pkgDeps && !required) { - return; - } - - // Hardcoded removal of these during migration - await this.syncField('@backstage/core', {}, targetDeps, fieldName, true); - await this.syncField( - '@backstage/core-api', - {}, - targetDeps, - fieldName, - true, - ); - - for (const key of Object.keys(pkgDeps)) { - if (this.variant === 'app' && key.startsWith('plugin-')) { - continue; - } - - await this.syncField( - key, - pkgDeps, - targetDeps, - fieldName, - true, - !required, - ); - } - } - - private async syncReactDeps() { - const targetDeps = (this.targetPkg.dependencies = - this.targetPkg.dependencies || {}); - - // Remove these from from deps since they're now in peerDeps - await this.syncField('react', {}, targetDeps, 'dependencies'); - await this.syncField('react-dom', {}, targetDeps, 'dependencies'); - } - - private async write() { - await this.writeFunc(`${JSON.stringify(this.targetPkg, null, 2)}\n`); - } -} - -// Make sure the file is an exact match of the template -async function exactMatchHandler( - { path, write, missing, targetContents, templateContents }: FileDiff, - prompt: PromptFunc, -) { - console.log(`Checking ${path}`); - const coloredPath = chalk.cyan(path); - - if (missing) { - if (await prompt(`Missing ${coloredPath}, do you want to add it?`)) { - await write(templateContents); - } - return; - } - if (targetContents === templateContents) { - return; - } - - const diffs = diffLines(targetContents, templateContents); - for (const diff of diffs) { - if (diff.added) { - process.stdout.write(chalk.green(`+${diff.value}`)); - } else if (diff.removed) { - process.stdout.write(chalk.red(`-${diff.value}`)); - } else { - process.stdout.write(` ${diff.value}`); - } - } - - if ( - await prompt( - `Outdated ${coloredPath}, do you want to apply the above patch?`, - ) - ) { - await write(templateContents); - } -} - -// Adds the file if it is missing, but doesn't check existing files -async function existsHandler( - { path, write, missing, templateContents }: FileDiff, - prompt: PromptFunc, -) { - console.log(`Making sure ${path} exists`); - - const coloredPath = chalk.cyan(path); - - if (missing) { - if (await prompt(`Missing ${coloredPath}, do you want to add it?`)) { - await write(templateContents); - } - return; - } -} - -async function skipHandler({ path }: FileDiff) { - console.log(`Skipping ${path}`); -} - -export const handlers = { - skip: skipHandler, - exists: existsHandler, - exactMatch: exactMatchHandler, - packageJson: PackageJsonHandler.handler, - appPackageJson: PackageJsonHandler.appHandler, -}; - -export async function handleAllFiles( - fileHandlers: FileHandler[], - files: FileDiff[], - promptFunc: PromptFunc, -) { - for (const file of files) { - const path = file.path.split(sep).join(posix.sep); - const fileHandler = fileHandlers.find(handler => - handler.patterns.some(pattern => - typeof pattern === 'string' ? pattern === path : pattern.test(path), - ), - ); - if (fileHandler) { - await fileHandler.handler(file, promptFunc); - } else { - throw new Error(`No template file handler found for ${path}`); - } - } -} diff --git a/packages/cli/src/lib/diff/prompts.ts b/packages/cli/src/lib/diff/prompts.ts deleted file mode 100644 index d2ddca5fc0..0000000000 --- a/packages/cli/src/lib/diff/prompts.ts +++ /dev/null @@ -1,53 +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 chalk from 'chalk'; -import inquirer from 'inquirer'; -import { PromptFunc } from './types'; - -export const inquirerPromptFunc: PromptFunc = async msg => { - const { result } = await inquirer.prompt({ - type: 'confirm', - name: 'result', - message: chalk.blue(msg), - }); - return result; -}; - -export const makeCheckPromptFunc = () => { - let failed = false; - - const promptFunc: PromptFunc = async msg => { - failed = true; - console.log(chalk.red(`[Check Failed] ${msg}`)); - return false; - }; - - const finalize = () => { - if (failed) { - throw new Error( - 'Check failed, the plugin is not in sync with the latest template', - ); - } - }; - - return [promptFunc, finalize] as const; -}; - -export const yesPromptFunc: PromptFunc = async msg => { - console.log(`Accepting: "${msg}"`); - return true; -}; diff --git a/packages/cli/src/lib/diff/read.ts b/packages/cli/src/lib/diff/read.ts deleted file mode 100644 index 95b0bed43d..0000000000 --- a/packages/cli/src/lib/diff/read.ts +++ /dev/null @@ -1,120 +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 { - dirname, - resolve as resolvePath, - relative as relativePath, -} from 'path'; -import handlebars from 'handlebars'; -import recursiveReadDir from 'recursive-readdir'; -import { paths } from '../paths'; -import { FileDiff } from './types'; -import { createPackageVersionProvider } from '../../lib/version'; - -export type TemplatedFile = { - path: string; - contents: string; -}; - -async function readTemplateFile( - templateFile: string, - templateVars: any, -): Promise { - const contents = await fs.readFile(templateFile, 'utf8'); - - if (!templateFile.endsWith('.hbs')) { - return contents; - } - const packageVersionProvider = createPackageVersionProvider(undefined); - - return handlebars.compile(contents)(templateVars, { - helpers: { - versionQuery(name: string, hint: string | unknown) { - return packageVersionProvider( - name, - typeof hint === 'string' ? hint : undefined, - ); - }, - }, - }); -} - -async function readTemplate( - templateDir: string, - templateVars: any, -): Promise { - const templateFilePaths = await recursiveReadDir(templateDir).catch(error => { - throw new Error(`Failed to read template directory: ${error.message}`); - }); - - const templatedFiles = new Array(); - for (const templateFile of templateFilePaths) { - const path = relativePath(templateDir, templateFile).replace(/\.hbs$/, ''); - const contents = await readTemplateFile(templateFile, templateVars); - - templatedFiles.push({ path, contents }); - } - - return templatedFiles; -} - -async function diffTemplatedFiles( - targetDir: string, - templatedFiles: TemplatedFile[], -): Promise { - const fileDiffs = new Array(); - for (const { path, contents: templateContents } of templatedFiles) { - const targetPath = resolvePath(targetDir, path); - const targetExists = await fs.pathExists(targetPath); - - const write = async (contents: string) => { - await fs.ensureDir(dirname(targetPath)); - await fs.writeFile(targetPath, contents, 'utf8'); - }; - - if (targetExists) { - const targetContents = await fs.readFile(targetPath, 'utf8'); - fileDiffs.push({ - path, - write, - missing: false, - targetContents, - templateContents, - }); - } else { - fileDiffs.push({ - path, - write, - missing: true, - targetContents: '', - templateContents, - }); - } - } - - return fileDiffs; -} - -// Read all template files for a given template, along with all matching files in the target dir -export async function diffTemplateFiles(template: string, templateData: any) { - const templateDir = paths.resolveOwn('templates', template); - - const templatedFiles = await readTemplate(templateDir, templateData); - const fileDiffs = await diffTemplatedFiles(paths.targetDir, templatedFiles); - return fileDiffs; -} diff --git a/packages/cli/src/lib/diff/types.ts b/packages/cli/src/lib/diff/types.ts deleted file mode 100644 index ba649f66ff..0000000000 --- a/packages/cli/src/lib/diff/types.ts +++ /dev/null @@ -1,39 +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. - */ - -export type WriteFileFunc = (contents: string) => Promise; - -export type FileDiff = { - // Relative path within the target directory - path: string; - // Whether the target file exists in the target directory. - missing: boolean; - // Contents of the file in the target directory, or an empty string if the file is missing. - targetContents: string; - // Contents of the compiled template file - templateContents: string; - // Write new contents to the target file - write: WriteFileFunc; -}; - -export type PromptFunc = (msg: string) => Promise; - -export type HandlerFunc = (file: FileDiff, prompt: PromptFunc) => Promise; - -export type FileHandler = { - patterns: Array; - handler: HandlerFunc; -}; diff --git a/packages/cli/src/lib/logging.ts b/packages/cli/src/lib/logging.ts deleted file mode 100644 index 59473d7f64..0000000000 --- a/packages/cli/src/lib/logging.ts +++ /dev/null @@ -1,58 +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. - */ - -export type LogFunc = (data: Buffer) => void; -export type LogPipe = (dst: NodeJS.WriteStream) => LogFunc; - -export type LogOptions = { - // If set, prefix each log message with this string - prefix?: string; - - // If true, clear terminal commands will be forwarded, otherwise they are removed - forwardClearTerm?: boolean; -}; - -// Creates a log pipe that binds to a destination stream and forwards logs with optional transforms. -// Use returned logPipe e.g. as follows: child.stdout.on('data', logPipe(process.stdout)) -export function createLogPipe(options: LogOptions = {}): LogPipe { - const { prefix = '', forwardClearTerm = false } = options; - - return (dst: NodeJS.WriteStream) => (data: Buffer | string) => { - let str = typeof data === 'string' ? data : data.toString('utf8'); - - if (!forwardClearTerm) { - str = trimClearTerm(str); - } - if (prefix) { - str = `${prefix}${str}`; - } - - dst.write(Buffer.from(str, 'utf8')); - }; -} - -// Wrapper around createLogPipe to avoid awkward immediate call of returned function -export function createLogFunc( - dst: NodeJS.WriteStream, - options: LogOptions = {}, -): LogFunc { - return createLogPipe(options)(dst); -} - -// Returns the string without terminal clear command if it was prefixed with one. -export function trimClearTerm(msg: string): string { - return msg.startsWith('\x1b\x63') ? msg.slice(2) : msg; -} diff --git a/packages/cli/src/lib/packager/createDistWorkspace.ts b/packages/cli/src/lib/packager/createDistWorkspace.ts index 54ce9c073f..7b7db43889 100644 --- a/packages/cli/src/lib/packager/createDistWorkspace.ts +++ b/packages/cli/src/lib/packager/createDistWorkspace.ts @@ -44,6 +44,7 @@ import { PackageGraphNode, } from '@backstage/cli-node'; import { runParallelWorkers } from '../parallel'; +import { createTypeDistProject } from '../typeDistProject'; // These packages aren't safe to pack in parallel since the CLI depends on them const UNSAFE_PACKAGES = [ @@ -287,6 +288,9 @@ async function moveToDistWorkspace( FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack), ); + const tsMorphProject = + fastPackPackages.length > 0 ? await createTypeDistProject() : undefined; + // New an improved flow where we avoid calling `yarn pack` await Promise.all( fastPackPackages.map(async target => { @@ -297,6 +301,7 @@ async function moveToDistWorkspace( await productionPack({ packageDir: target.dir, targetDir: absoluteOutputPath, + project: tsMorphProject, }); }), ); diff --git a/packages/cli/src/lib/packager/productionPack.ts b/packages/cli/src/lib/packager/productionPack.ts index 3c2b5aa89e..85f50352cc 100644 --- a/packages/cli/src/lib/packager/productionPack.ts +++ b/packages/cli/src/lib/packager/productionPack.ts @@ -19,6 +19,11 @@ import npmPackList from 'npm-packlist'; import { resolve as resolvePath, posix as posixPath } from 'path'; import { BackstagePackageJson } from '@backstage/cli-node'; import { readEntryPoints } from '../entryPoints'; +import { + createTypeDistProject, + getEntryPointDefaultFeatureType, +} from '../typeDistProject'; +import { Project } from 'ts-morph'; const PKG_PATH = 'package.json'; const PKG_BACKUP_PATH = 'package.json-prepack'; @@ -29,6 +34,10 @@ const SCRIPT_EXTS = ['.js', '.jsx', '.ts', '.tsx']; interface ProductionPackOptions { packageDir: string; targetDir?: string; + /** + * A ts-morph project to share across packages + */ + project?: Project; } export async function productionPack(options: ProductionPackOptions) { @@ -46,6 +55,7 @@ export async function productionPack(options: ProductionPackOptions) { const writeCompatibilityEntryPoints = await prepareExportsEntryPoints( pkg, packageDir, + options.project, ); // TODO(Rugvip): Once exports are rolled out more broadly we should deprecate and remove this behavior @@ -134,6 +144,7 @@ const EXPORT_MAP = { async function prepareExportsEntryPoints( pkg: BackstagePackageJson, packageDir: string, + commonProject?: Project, ) { const distPath = resolvePath(packageDir, 'dist'); if (!(await fs.pathExists(distPath))) { @@ -147,20 +158,44 @@ async function prepareExportsEntryPoints( >(); const entryPoints = readEntryPoints(pkg); + const project = commonProject || (await createTypeDistProject()); + for (const entryPoint of entryPoints) { if (!SCRIPT_EXTS.includes(entryPoint.ext)) { outputExports[entryPoint.mount] = entryPoint.path; continue; } - const exp = {} as Record; + + let exp = {} as Record; + for (const [key, ext] of Object.entries(EXPORT_MAP)) { const name = `${entryPoint.name}${ext}`; if (distFiles.includes(name)) { exp[key] = `./${posixPath.join(`dist`, name)}`; } } + exp.default = exp.require ?? exp.import; + // Find the default export type for the entry point + if (exp.types) { + const defaultFeatureType = + pkg.backstage?.role && + getEntryPointDefaultFeatureType( + pkg.backstage?.role, + packageDir, + project, + exp.types, + ); + + if (defaultFeatureType) { + // This ensures that the `backstage` field is at the top of the + // `exports` field in the package.json because order is important. + // https://nodejs.org/docs/latest-v20.x/api/packages.html#conditional-exports + exp = { backstage: defaultFeatureType, ...exp }; + } + } + // This creates a directory with a lone package.json for backwards compatibility if (entryPoint.mount === '.') { if (exp.default) { diff --git a/packages/cli/src/lib/run.ts b/packages/cli/src/lib/run.ts index 1ef25cae62..e8602fcb18 100644 --- a/packages/cli/src/lib/run.ts +++ b/packages/cli/src/lib/run.ts @@ -22,11 +22,12 @@ import { } from 'child_process'; import { ExitCodeError } from './errors'; import { promisify } from 'util'; -import { LogFunc } from './logging'; import { assertError, ForwardedError } from '@backstage/errors'; export const execFile = promisify(execFileCb); +type LogFunc = (data: Buffer) => void; + type SpawnOptionsPartialEnv = Omit & { env?: Partial; // Pipe stdout to this log function diff --git a/packages/cli/src/lib/typeDistProject.test.ts b/packages/cli/src/lib/typeDistProject.test.ts new file mode 100644 index 0000000000..dfe3e68ec0 --- /dev/null +++ b/packages/cli/src/lib/typeDistProject.test.ts @@ -0,0 +1,131 @@ +/* + * Copyright 2024 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 { PackageRole } from '@backstage/cli-node'; +import createFeatureEnvironment from './__testUtils__/createFeatureEnvironment'; +import { + getEntryPointDefaultFeatureType, + BackstagePackageFeatureType, +} from './typeDistProject'; + +describe('typeDistProject', () => { + describe('for package role', () => { + // This Record makes sure we're checking all package roles + const packageRoles: Record = { + // Allowed + 'backend-plugin': true, + 'backend-plugin-module': true, + 'frontend-plugin': true, + 'frontend-plugin-module': true, + 'web-library': true, + 'node-library': true, + // Disallowed + frontend: false, + backend: false, + cli: false, + 'common-library': false, + }; + + const allowedPackageRoles = Object.keys(packageRoles).filter( + role => packageRoles[role as PackageRole], + ); + + const disallowedPackageRoles = Object.keys(packageRoles).filter( + role => !packageRoles[role as PackageRole], + ); + + it.each(allowedPackageRoles)(`returns features for %s`, r => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + role: r as PackageRole, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual('@backstage/BackendFeature'); + }); + + it.each(disallowedPackageRoles)(`does not return features for %s`, r => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + role: r as PackageRole, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual(null); + }); + }); + + describe('for feature $$type', () => { + // This Record makes sure we're checking all feature types + const featureTypes: Record = + { + // Allowed + '@backstage/BackendFeature': true, + '@backstage/BackstagePlugin': true, + '@backstage/FrontendPlugin': true, + '@backstage/FrontendModule': true, + // Disallowed + '@backstage/Extension': false, + '@backstage/RouteRef': false, + }; + + const allowedFeatureTypes = Object.keys(featureTypes).filter( + $$type => featureTypes[$$type as BackstagePackageFeatureType], + ); + + const disallowedFeatureTypes = Object.keys(featureTypes).filter( + $$type => !featureTypes[$$type as BackstagePackageFeatureType], + ); + + it.each(allowedFeatureTypes)(`returns features for "%s" $$type`, $$type => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + $$type: $$type as BackstagePackageFeatureType, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual($$type); + }); + + it.each(disallowedFeatureTypes)( + `does not return features for "%s" $$type`, + $$type => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + $$type: $$type as BackstagePackageFeatureType, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual(null); + }, + ); + }); + + it.each([ + 'DefaultExportAssignment', + 'DefaultExportFromFile', + 'DefaultExportFromFileAsDefault', + 'DefaultExportFromFileWithSibling', + ] as const)('returns features for format "%s"', format => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + format, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual('@backstage/BackendFeature'); + }); +}); diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts new file mode 100644 index 0000000000..59dc503f22 --- /dev/null +++ b/packages/cli/src/lib/typeDistProject.ts @@ -0,0 +1,151 @@ +/* + * Copyright 2024 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 { PackageRole } from '@backstage/cli-node'; +import { resolve as resolvePath } from 'path'; +import { Project, SourceFile, SyntaxKind, ts, Type } from 'ts-morph'; +import { paths } from './paths'; + +export const createTypeDistProject = async () => { + return new Project({ + tsConfigFilePath: paths.resolveTargetRoot('tsconfig.json'), + skipAddingFilesFromTsConfig: true, + }); +}; + +// A list of the package roles we want to extract features for +const targetPackageRoles: PackageRole[] = [ + 'backend-plugin', + 'backend-plugin-module', + 'frontend-plugin', + 'frontend-plugin-module', + 'web-library', + 'node-library', +]; + +// A list of the feature types we want to extract from the project +// and include in the metadata +const targetFeatureTypes = [ + '@backstage/BackendFeature', + '@backstage/BackstagePlugin', + '@backstage/FrontendPlugin', + '@backstage/FrontendModule', +] as const; + +export type BackstagePackageFeatureType = (typeof targetFeatureTypes)[number]; + +export const getEntryPointDefaultFeatureType = ( + role: PackageRole, + packageDir: string, + project: Project, + entryPoint: string, +): BackstagePackageFeatureType | null => { + if (isTargetPackageRole(role)) { + const distPath = resolvePath(packageDir, entryPoint); + + try { + const defaultFeatureType = getSourceFileDefaultFeatureType( + project.addSourceFileAtPath(distPath), + ); + + if (defaultFeatureType) { + return defaultFeatureType; + } + } catch (error) { + console.error( + `Failed to extract default feature type from ${distPath}, ${error}. ` + + 'Your package will publish fine but it may be missing metadata about its default feature.', + ); + } + } + + return null; +}; + +// Returns all exports (default and named) from an entry point +// that are valid Backstage package features +function getSourceFileDefaultFeatureType( + sourceFile: SourceFile, +): BackstagePackageFeatureType | null { + for (const exportSymbol of sourceFile.getExportSymbols()) { + const declaration = exportSymbol.getDeclarations()[0]; + const exportName = declaration.getSymbol()?.getName(); + + if (exportName !== 'default') { + continue; + } + + let exportType: Type | undefined; + + if (declaration) { + if (declaration.isKind(SyntaxKind.ExportAssignment)) { + exportType = declaration.getExpression().getType(); + } else if (declaration.isKind(SyntaxKind.ExportSpecifier)) { + if (!declaration.isTypeOnly()) { + exportType = declaration.getType(); + } + } else if (declaration.isKind(SyntaxKind.VariableDeclaration)) { + exportType = declaration.getType(); + } + } + + if (exportName && exportType) { + const $$type = getBackstagePackageFeature$$TypeFromType(exportType); + + if ($$type) { + return $$type; + } + } + } + + return null; +} + +// Given a TS type, returns the Backstage package feature $$type value +function getBackstagePackageFeature$$TypeFromType( + type: Type, +): BackstagePackageFeatureType | null { + // Returns the concrete type of a generic type + const exportType = type.getTargetType() ?? type; + + for (const property of exportType.getProperties()) { + if (property.getName() === '$$type') { + const $$type = property + .getValueDeclaration() + ?.getText() + .match(/(\$\$type: '(?.+)')/)?.groups?.type; + + if ($$type && isTargetFeatureType($$type)) { + return $$type; + } + } + } + + return null; +} + +// Condition for a package role matches a target package role +function isTargetPackageRole(role: PackageRole): boolean { + return !!role && targetPackageRoles.includes(role); +} + +// Returns whether an export is a valid Backstage package feature type +function isTargetFeatureType( + type: string | BackstagePackageFeatureType, +): type is BackstagePackageFeatureType { + return ( + !!type && targetFeatureTypes.includes(type as BackstagePackageFeatureType) + ); +} diff --git a/packages/config-loader/api-report.md b/packages/config-loader/report.api.md similarity index 72% rename from packages/config-loader/api-report.md rename to packages/config-loader/report.api.md index e2741d609c..7d7047d493 100644 --- a/packages/config-loader/api-report.md +++ b/packages/config-loader/report.api.md @@ -284,4 +284,32 @@ export type TransformFunc = ( path: string; }, ) => T | undefined; + +// Warnings were encountered during analysis: +// +// src/loader.d.ts:6:1 - (ae-undocumented) Missing documentation for "ConfigTarget". +// src/loader.d.ts:15:1 - (ae-undocumented) Missing documentation for "LoadConfigOptionsWatch". +// src/loader.d.ts:29:1 - (ae-undocumented) Missing documentation for "LoadConfigOptionsRemote". +// src/sources/ConfigSources.d.ts:42:5 - (ae-undocumented) Missing documentation for "watch". +// src/sources/ConfigSources.d.ts:43:5 - (ae-undocumented) Missing documentation for "rootDir". +// src/sources/ConfigSources.d.ts:44:5 - (ae-undocumented) Missing documentation for "remote". +// src/sources/ConfigSources.d.ts:65:5 - (ae-undocumented) Missing documentation for "targets". +// src/sources/ConfigSources.d.ts:73:5 - (ae-undocumented) Missing documentation for "argv". +// src/sources/ConfigSources.d.ts:74:5 - (ae-undocumented) Missing documentation for "env". +// src/sources/EnvConfigSource.d.ts:46:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/EnvConfigSource.d.ts:47:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/FileConfigSource.d.ts:44:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/FileConfigSource.d.ts:45:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/MutableConfigSource.d.ts:9:5 - (ae-undocumented) Missing documentation for "data". +// src/sources/MutableConfigSource.d.ts:10:5 - (ae-undocumented) Missing documentation for "context". +// src/sources/MutableConfigSource.d.ts:27:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/MutableConfigSource.d.ts:38:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/RemoteConfigSource.d.ts:43:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/RemoteConfigSource.d.ts:44:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/StaticConfigSource.d.ts:9:5 - (ae-undocumented) Missing documentation for "data". +// src/sources/StaticConfigSource.d.ts:10:5 - (ae-undocumented) Missing documentation for "context". +// src/sources/StaticConfigSource.d.ts:28:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/StaticConfigSource.d.ts:29:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/types.d.ts:20:5 - (ae-undocumented) Missing documentation for "signal". +// src/sources/types.d.ts:55:5 - (ae-undocumented) Missing documentation for "readConfigData". ``` diff --git a/packages/config/api-report.md b/packages/config/report.api.md similarity index 100% rename from packages/config/api-report.md rename to packages/config/report.api.md diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 92a7e6a94e..fd86cbb918 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-app-api +## 1.15.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 1.15.0 ### Minor Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index b9c96c3b5c..a410836f27 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-app-api", - "version": "1.15.0", + "version": "1.15.1-next.0", "description": "Core app API used by Backstage apps", "backstage": { "role": "web-library" diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/report.api.md similarity index 70% rename from packages/core-app-api/api-report.md rename to packages/core-app-api/report.api.md index 3d2c44a148..a326555cc1 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/report.api.md @@ -683,4 +683,70 @@ export class WebStorage implements StorageApi { // (undocumented) snapshot(key: string): StorageValueSnapshot; } + +// Warnings were encountered during analysis: +// +// src/apis/implementations/AlertApi/AlertApiForwarder.d.ts:10:5 - (ae-undocumented) Missing documentation for "post". +// src/apis/implementations/AlertApi/AlertApiForwarder.d.ts:11:5 - (ae-undocumented) Missing documentation for "alert$". +// src/apis/implementations/AnalyticsApi/NoOpAnalyticsApi.d.ts:8:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:11:5 - (ae-undocumented) Missing documentation for "createWithStorage". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:15:5 - (ae-undocumented) Missing documentation for "getInstalledThemes". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:16:5 - (ae-undocumented) Missing documentation for "activeThemeId$". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:17:5 - (ae-undocumented) Missing documentation for "getActiveThemeId". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:18:5 - (ae-undocumented) Missing documentation for "setActiveThemeId". +// src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.d.ts:37:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.d.ts:19:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/apis/implementations/ErrorApi/ErrorAlerter.d.ts:12:5 - (ae-undocumented) Missing documentation for "post". +// src/apis/implementations/ErrorApi/ErrorAlerter.d.ts:13:5 - (ae-undocumented) Missing documentation for "error$". +// src/apis/implementations/ErrorApi/ErrorApiForwarder.d.ts:10:5 - (ae-undocumented) Missing documentation for "post". +// src/apis/implementations/ErrorApi/ErrorApiForwarder.d.ts:11:5 - (ae-undocumented) Missing documentation for "error$". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:12:5 - (ae-undocumented) Missing documentation for "registerFlag". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:13:5 - (ae-undocumented) Missing documentation for "getRegisteredFlags". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:14:5 - (ae-undocumented) Missing documentation for "isActive". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:15:5 - (ae-undocumented) Missing documentation for "save". +// src/apis/implementations/OAuthRequestApi/OAuthRequestManager.d.ts:16:5 - (ae-undocumented) Missing documentation for "createAuthRequester". +// src/apis/implementations/OAuthRequestApi/OAuthRequestManager.d.ts:18:5 - (ae-undocumented) Missing documentation for "authRequest$". +// src/apis/implementations/StorageApi/WebStorage.d.ts:14:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/StorageApi/WebStorage.d.ts:19:5 - (ae-undocumented) Missing documentation for "get". +// src/apis/implementations/StorageApi/WebStorage.d.ts:20:5 - (ae-undocumented) Missing documentation for "snapshot". +// src/apis/implementations/StorageApi/WebStorage.d.ts:21:5 - (ae-undocumented) Missing documentation for "forBucket". +// src/apis/implementations/StorageApi/WebStorage.d.ts:22:5 - (ae-undocumented) Missing documentation for "set". +// src/apis/implementations/StorageApi/WebStorage.d.ts:23:5 - (ae-undocumented) Missing documentation for "remove". +// src/apis/implementations/StorageApi/WebStorage.d.ts:24:5 - (ae-undocumented) Missing documentation for "observe$". +// src/apis/implementations/auth/atlassian/AtlassianAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/bitbucket/BitbucketAuth.d.ts:18:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.d.ts:17:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/github/GithubAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/gitlab/GitlabAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/google/GoogleAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:17:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:22:5 - (ae-undocumented) Missing documentation for "getAccessToken". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:23:5 - (ae-undocumented) Missing documentation for "getIdToken". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:24:5 - (ae-undocumented) Missing documentation for "getProfile". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:25:5 - (ae-undocumented) Missing documentation for "getBackstageIdentity". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:26:5 - (ae-undocumented) Missing documentation for "signIn". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:27:5 - (ae-undocumented) Missing documentation for "signOut". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:28:5 - (ae-undocumented) Missing documentation for "sessionState$". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:33:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:37:5 - (ae-undocumented) Missing documentation for "signIn". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:38:5 - (ae-undocumented) Missing documentation for "signOut". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:39:5 - (ae-undocumented) Missing documentation for "sessionState$". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:40:5 - (ae-undocumented) Missing documentation for "getAccessToken". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:41:5 - (ae-undocumented) Missing documentation for "getIdToken". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:42:5 - (ae-undocumented) Missing documentation for "getBackstageIdentity". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:43:5 - (ae-undocumented) Missing documentation for "getProfile". +// src/apis/implementations/auth/okta/OktaAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/onelogin/OneLoginAuth.d.ts:19:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:15:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:16:5 - (ae-undocumented) Missing documentation for "sessionState$". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:18:5 - (ae-undocumented) Missing documentation for "signIn". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:19:5 - (ae-undocumented) Missing documentation for "signOut". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:20:5 - (ae-undocumented) Missing documentation for "getBackstageIdentity". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProfile". +// src/apis/implementations/auth/vmwareCloud/VMwareCloudAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/system/ApiFactoryRegistry.d.ts:29:5 - (ae-undocumented) Missing documentation for "get". +// src/apis/system/ApiFactoryRegistry.d.ts:32:5 - (ae-undocumented) Missing documentation for "getAllApis". +// src/apis/system/ApiResolver.d.ts:18:5 - (ae-undocumented) Missing documentation for "get". +// src/apis/system/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ApiFactoryHolder". +// src/app/AppRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "children". ``` diff --git a/packages/core-compat-api/CHANGELOG.md b/packages/core-compat-api/CHANGELOG.md index 6d5e73b45e..cd1154dbc8 100644 --- a/packages/core-compat-api/CHANGELOG.md +++ b/packages/core-compat-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-compat-api +## 0.3.1-next.0 + +### Patch Changes + +- 4a5ba19: Internal update to remove deprecated `BackstagePlugin` type and move to `FrontendPlugin` +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/version-bridge@1.0.9 + ## 0.3.0 ### Minor Changes diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json index 1f386e46e4..eea6e65717 100644 --- a/packages/core-compat-api/package.json +++ b/packages/core-compat-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-compat-api", - "version": "0.3.0", + "version": "0.3.1-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/core-compat-api/api-report.md b/packages/core-compat-api/report.api.md similarity index 88% rename from packages/core-compat-api/api-report.md rename to packages/core-compat-api/report.api.md index ddb3bc6bf4..e6971975b2 100644 --- a/packages/core-compat-api/api-report.md +++ b/packages/core-compat-api/report.api.md @@ -113,5 +113,12 @@ export type ToNewRouteRef = ? ExternalRouteRef_2 : never; +// Warnings were encountered during analysis: +// +// src/apis/implementations/AnalyticsApi/NoOpAnalyticsApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/convertLegacyApp.d.ts:4:1 - (ae-undocumented) Missing documentation for "convertLegacyApp". +// src/convertLegacyPageExtension.d.ts:4:1 - (ae-undocumented) Missing documentation for "convertLegacyPageExtension". +// src/convertLegacyPlugin.d.ts:4:1 - (ae-undocumented) Missing documentation for "convertLegacyPlugin". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-compat-api/src/compatWrapper/compatWrapper.test.tsx b/packages/core-compat-api/src/compatWrapper/compatWrapper.test.tsx index 18846e0f21..94fc8705e6 100644 --- a/packages/core-compat-api/src/compatWrapper/compatWrapper.test.tsx +++ b/packages/core-compat-api/src/compatWrapper/compatWrapper.test.tsx @@ -76,7 +76,7 @@ describe('BackwardsCompatProvider', () => { expect(screen.getByTestId('ctx').textContent).toMatchInlineSnapshot(` "plugins: test, app components: NotFoundErrorPage, BootErrorPage, Progress, Router, ErrorBoundaryFallback - icons: brokenImage, catalog, scaffolder, techdocs, search, chat, dashboard, docs, email, github, group, help, kind:api, kind:component, kind:domain, kind:group, kind:location, kind:system, kind:user, kind:resource, kind:template, user, warning, star, unstarred" + icons: brokenImage, catalog, scaffolder, techdocs, search, chat, dashboard, docs, email, github, group, help, kind:api, kind:component, kind:domain, kind:group, kind:location, kind:system, kind:user, kind:resource, kind:template, user, warning, star, unstarred, externalLink" `); }); diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 067dfb70b6..935c94a33b 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/core-components +## 0.15.1-next.0 + +### Patch Changes + +- 46b5a20: `Link` component now accepts `externalLinkIcon` prop +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/version-bridge@1.0.9 + ## 0.15.0 ### Minor Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index fd3b1898cd..4390c2eaf1 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-components", - "version": "0.15.0", + "version": "0.15.1-next.0", "description": "Core components used by Backstage plugins and apps", "backstage": { "role": "web-library" diff --git a/packages/core-components/api-report-alpha.md b/packages/core-components/report-alpha.api.md similarity index 95% rename from packages/core-components/api-report-alpha.md rename to packages/core-components/report-alpha.api.md index 1f4b999232..ea44f92093 100644 --- a/packages/core-components/api-report-alpha.md +++ b/packages/core-components/report-alpha.api.md @@ -54,5 +54,9 @@ export const coreComponentsTranslationRef: TranslationRef< } >; +// Warnings were encountered during analysis: +// +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "coreComponentsTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-components/api-report-testUtils.md b/packages/core-components/report-testUtils.api.md similarity index 100% rename from packages/core-components/api-report-testUtils.md rename to packages/core-components/report-testUtils.api.md diff --git a/packages/core-components/api-report.md b/packages/core-components/report.api.md similarity index 71% rename from packages/core-components/api-report.md rename to packages/core-components/report.api.md index 9b4e9f6798..24c835f638 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/report.api.md @@ -706,6 +706,7 @@ export type LinkProps = Omit & to: string; component?: ElementType; noTrack?: boolean; + externalLinkIcon?: boolean; }; // Warning: (ae-missing-release-tag) "LoginRequestListItemClassKey" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -1530,21 +1531,14 @@ export class UserIdentity implements IdentityApi { getIdToken?: () => Promise; signOut?: () => Promise; }): IdentityApi; - // (undocumented) getBackstageIdentity(): Promise; - // (undocumented) getCredentials(): Promise<{ token?: string | undefined; }>; - // (undocumented) getIdToken(): Promise; - // (undocumented) getProfile(): ProfileInfo; - // (undocumented) getProfileInfo(): Promise; - // (undocumented) getUserId(): string; - // (undocumented) signOut(): Promise; } @@ -1580,9 +1574,188 @@ export type WarningPanelClassKey = // Warnings were encountered during analysis: // +// src/components/AutoLogout/AutoLogout.d.ts:3:1 - (ae-undocumented) Missing documentation for "AutoLogoutProps". +// src/components/Avatar/Avatar.d.ts:3:1 - (ae-undocumented) Missing documentation for "AvatarClassKey". +// src/components/DependencyGraph/DefaultLabel.d.ts:4:1 - (ae-undocumented) Missing documentation for "DependencyGraphDefaultLabelClassKey". +// src/components/DependencyGraph/DefaultNode.d.ts:4:1 - (ae-undocumented) Missing documentation for "DependencyGraphDefaultNodeClassKey". +// src/components/DependencyGraph/Edge.d.ts:15:1 - (ae-undocumented) Missing documentation for "DependencyGraphEdgeClassKey". +// src/components/DependencyGraph/Node.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependencyGraphNodeClassKey". // src/components/DependencyGraph/types.d.ts:22:9 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/core-components" does not have an export "DependencyNode" // src/components/DependencyGraph/types.d.ts:26:9 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/core-components" does not have an export "DependencyNode" +// src/components/DependencyGraph/types.d.ts:143:9 - (ae-undocumented) Missing documentation for "LEFT". +// src/components/DependencyGraph/types.d.ts:144:9 - (ae-undocumented) Missing documentation for "RIGHT". +// src/components/DependencyGraph/types.d.ts:145:9 - (ae-undocumented) Missing documentation for "CENTER". +// src/components/DismissableBanner/DismissableBanner.d.ts:3:1 - (ae-undocumented) Missing documentation for "DismissableBannerClassKey". +// src/components/DismissableBanner/DismissableBanner.d.ts:8:1 - (ae-undocumented) Missing documentation for "DismissbleBannerClassKey". +// src/components/DismissableBanner/DismissableBanner.d.ts:16:22 - (ae-undocumented) Missing documentation for "DismissableBanner". +// src/components/EmptyState/EmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "EmptyStateClassKey". +// src/components/EmptyState/EmptyStateImage.d.ts:6:1 - (ae-undocumented) Missing documentation for "EmptyStateImageClassKey". +// src/components/EmptyState/MissingAnnotationEmptyState.d.ts:10:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyState". +// src/components/ErrorPanel/ErrorPanel.d.ts:3:1 - (ae-undocumented) Missing documentation for "ErrorPanelClassKey". +// src/components/ErrorPanel/ErrorPanel.d.ts:5:1 - (ae-undocumented) Missing documentation for "ErrorPanelProps". +// src/components/FavoriteToggle/FavoriteToggle.d.ts:6:1 - (ae-undocumented) Missing documentation for "FavoriteToggleIconClassKey". +// src/components/FeatureDiscovery/FeatureCalloutCircular.d.ts:3:1 - (ae-undocumented) Missing documentation for "FeatureCalloutCircleClassKey". +// src/components/HeaderIconLinkRow/HeaderIconLinkRow.d.ts:4:1 - (ae-undocumented) Missing documentation for "HeaderIconLinkRowClassKey". +// src/components/HeaderIconLinkRow/IconLinkVertical.d.ts:2:1 - (ae-undocumented) Missing documentation for "IconLinkVerticalProps". +// src/components/HeaderIconLinkRow/IconLinkVertical.d.ts:12:1 - (ae-undocumented) Missing documentation for "IconLinkVerticalClassKey". +// src/components/HeaderIconLinkRow/IconLinkVertical.d.ts:14:1 - (ae-undocumented) Missing documentation for "IconLinkVertical". +// src/components/HorizontalScrollGrid/HorizontalScrollGrid.d.ts:8:1 - (ae-undocumented) Missing documentation for "HorizontalScrollGridClassKey". +// src/components/Lifecycle/Lifecycle.d.ts:7:1 - (ae-undocumented) Missing documentation for "LifecycleClassKey". +// src/components/Lifecycle/Lifecycle.d.ts:8:1 - (ae-undocumented) Missing documentation for "Lifecycle". +// src/components/Link/Link.d.ts:6:1 - (ae-undocumented) Missing documentation for "LinkClassKey". +// src/components/Link/Link.d.ts:8:1 - (ae-undocumented) Missing documentation for "LinkProps". +// src/components/LinkButton/LinkButton.d.ts:24:22 - (ae-undocumented) Missing documentation for "Button". +// src/components/LinkButton/LinkButton.d.ts:29:1 - (ae-undocumented) Missing documentation for "ButtonProps". +// src/components/MarkdownContent/MarkdownContent.d.ts:3:1 - (ae-undocumented) Missing documentation for "MarkdownContentClassKey". +// src/components/OAuthRequestDialog/LoginRequestListItem.d.ts:3:1 - (ae-undocumented) Missing documentation for "LoginRequestListItemClassKey". +// src/components/OAuthRequestDialog/OAuthRequestDialog.d.ts:2:1 - (ae-undocumented) Missing documentation for "OAuthRequestDialogClassKey". +// src/components/OAuthRequestDialog/OAuthRequestDialog.d.ts:3:1 - (ae-undocumented) Missing documentation for "OAuthRequestDialog". +// src/components/OverflowTooltip/OverflowTooltip.d.ts:9:1 - (ae-undocumented) Missing documentation for "OverflowTooltipClassKey". +// src/components/OverflowTooltip/OverflowTooltip.d.ts:10:1 - (ae-undocumented) Missing documentation for "OverflowTooltip". +// src/components/Progress/Progress.d.ts:3:1 - (ae-undocumented) Missing documentation for "Progress". +// src/components/ProgressBars/Gauge.d.ts:4:1 - (ae-undocumented) Missing documentation for "GaugeClassKey". +// src/components/ProgressBars/Gauge.d.ts:6:1 - (ae-undocumented) Missing documentation for "GaugeProps". +// src/components/ProgressBars/Gauge.d.ts:19:1 - (ae-undocumented) Missing documentation for "GaugePropsGetColorOptions". +// src/components/ProgressBars/Gauge.d.ts:26:1 - (ae-undocumented) Missing documentation for "GaugePropsGetColor". +// src/components/ProgressBars/GaugeCard.d.ts:20:1 - (ae-undocumented) Missing documentation for "GaugeCardClassKey". +// src/components/ProgressBars/LinearGauge.d.ts:11:1 - (ae-undocumented) Missing documentation for "LinearGauge". +// src/components/ResponseErrorPanel/ResponseErrorPanel.d.ts:3:1 - (ae-undocumented) Missing documentation for "ResponseErrorPanelClassKey". +// src/components/Select/Select.d.ts:3:1 - (ae-undocumented) Missing documentation for "SelectInputBaseClassKey". +// src/components/Select/Select.d.ts:5:1 - (ae-undocumented) Missing documentation for "SelectClassKey". +// src/components/Select/Select.d.ts:7:1 - (ae-undocumented) Missing documentation for "SelectItem". +// src/components/Select/Select.d.ts:12:1 - (ae-undocumented) Missing documentation for "SelectedItems". +// src/components/Select/Select.d.ts:27:1 - (ae-undocumented) Missing documentation for "SelectComponent". +// src/components/Select/static/ClosedDropdown.d.ts:3:1 - (ae-undocumented) Missing documentation for "ClosedDropdownClassKey". +// src/components/Select/static/OpenedDropdown.d.ts:2:1 - (ae-undocumented) Missing documentation for "OpenedDropdownClassKey". +// src/components/SimpleStepper/SimpleStepper.d.ts:16:1 - (ae-undocumented) Missing documentation for "SimpleStepper". +// src/components/SimpleStepper/SimpleStepperFooter.d.ts:3:1 - (ae-undocumented) Missing documentation for "SimpleStepperFooterClassKey". +// src/components/SimpleStepper/SimpleStepperStep.d.ts:3:1 - (ae-undocumented) Missing documentation for "SimpleStepperStepClassKey". +// src/components/SimpleStepper/SimpleStepperStep.d.ts:4:1 - (ae-undocumented) Missing documentation for "SimpleStepperStep". +// src/components/Status/Status.d.ts:2:1 - (ae-undocumented) Missing documentation for "StatusClassKey". +// src/components/Status/Status.d.ts:3:1 - (ae-undocumented) Missing documentation for "StatusOK". +// src/components/Status/Status.d.ts:4:1 - (ae-undocumented) Missing documentation for "StatusWarning". +// src/components/Status/Status.d.ts:5:1 - (ae-undocumented) Missing documentation for "StatusError". +// src/components/Status/Status.d.ts:6:1 - (ae-undocumented) Missing documentation for "StatusPending". +// src/components/Status/Status.d.ts:7:1 - (ae-undocumented) Missing documentation for "StatusRunning". +// src/components/Status/Status.d.ts:8:1 - (ae-undocumented) Missing documentation for "StatusAborted". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:3:1 - (ae-undocumented) Missing documentation for "MetadataTableTitleCellClassKey". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:4:1 - (ae-undocumented) Missing documentation for "MetadataTableCellClassKey". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:5:1 - (ae-undocumented) Missing documentation for "MetadataTableListClassKey". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:6:1 - (ae-undocumented) Missing documentation for "MetadataTableListItemClassKey". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:2:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTableListClassKey". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:3:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTableNestedListClassKey". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:5:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTableProps". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:6:5 - (ae-undocumented) Missing documentation for "metadata". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:9:5 - (ae-undocumented) Missing documentation for "dense". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:10:5 - (ae-undocumented) Missing documentation for "options". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:21:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTable". +// src/components/SupportButton/SupportButton.d.ts:8:1 - (ae-undocumented) Missing documentation for "SupportButtonClassKey". +// src/components/SupportButton/SupportButton.d.ts:9:1 - (ae-undocumented) Missing documentation for "SupportButton". +// src/components/TabbedLayout/RoutedTabs.d.ts:8:1 - (ae-undocumented) Missing documentation for "RoutedTabs". // src/components/TabbedLayout/RoutedTabs.d.ts:9:5 - (ae-forgotten-export) The symbol "SubRoute_2" needs to be exported by the entry point index.d.ts +// src/components/TabbedLayout/TabbedLayout.d.ts:29:1 - (ae-undocumented) Missing documentation for "TabbedLayout". +// src/components/TabbedLayout/TabbedLayout.d.ts:30:9 - (ae-undocumented) Missing documentation for "Route". +// src/components/Table/Filters.d.ts:3:1 - (ae-undocumented) Missing documentation for "TableFiltersClassKey". +// src/components/Table/SubvalueCell.d.ts:2:1 - (ae-undocumented) Missing documentation for "SubvalueCellClassKey". +// src/components/Table/SubvalueCell.d.ts:7:1 - (ae-undocumented) Missing documentation for "SubvalueCell". +// src/components/Table/Table.d.ts:4:1 - (ae-undocumented) Missing documentation for "TableHeaderClassKey". +// src/components/Table/Table.d.ts:5:1 - (ae-undocumented) Missing documentation for "TableToolbarClassKey". +// src/components/Table/Table.d.ts:7:1 - (ae-undocumented) Missing documentation for "FiltersContainerClassKey". +// src/components/Table/Table.d.ts:8:1 - (ae-undocumented) Missing documentation for "TableClassKey". +// src/components/Table/Table.d.ts:9:1 - (ae-undocumented) Missing documentation for "TableColumn". +// src/components/Table/Table.d.ts:10:5 - (ae-undocumented) Missing documentation for "highlight". +// src/components/Table/Table.d.ts:11:5 - (ae-undocumented) Missing documentation for "width". +// src/components/Table/Table.d.ts:13:1 - (ae-undocumented) Missing documentation for "TableFilter". +// src/components/Table/Table.d.ts:17:1 - (ae-undocumented) Missing documentation for "TableState". // src/components/Table/Table.d.ts:20:5 - (ae-forgotten-export) The symbol "SelectedFilters" needs to be exported by the entry point index.d.ts +// src/components/Table/Table.d.ts:22:1 - (ae-undocumented) Missing documentation for "TableProps". +// src/components/Table/Table.d.ts:23:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/Table/Table.d.ts:24:5 - (ae-undocumented) Missing documentation for "subtitle". +// src/components/Table/Table.d.ts:25:5 - (ae-undocumented) Missing documentation for "filters". +// src/components/Table/Table.d.ts:26:5 - (ae-undocumented) Missing documentation for "initialState". +// src/components/Table/Table.d.ts:27:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/Table/Table.d.ts:28:5 - (ae-undocumented) Missing documentation for "isLoading". +// src/components/Table/Table.d.ts:29:5 - (ae-undocumented) Missing documentation for "onStateChange". +// src/components/Table/Table.d.ts:31:1 - (ae-undocumented) Missing documentation for "TableOptions". +// src/components/Table/Table.d.ts:44:1 - (ae-undocumented) Missing documentation for "Table". +// src/components/Table/Table.d.ts:45:1 - (ae-undocumented) Missing documentation for "Table". +// src/components/Table/Table.d.ts:46:9 - (ae-undocumented) Missing documentation for "icons". +// src/components/TrendLine/TrendLine.d.ts:3:1 - (ae-undocumented) Missing documentation for "TrendLine". +// src/components/WarningPanel/WarningPanel.d.ts:2:1 - (ae-undocumented) Missing documentation for "WarningPanelClassKey". +// src/hooks/useQueryParamState.d.ts:2:1 - (ae-undocumented) Missing documentation for "useQueryParamState". +// src/hooks/useSupportConfig.d.ts:1:1 - (ae-undocumented) Missing documentation for "SupportItemLink". +// src/hooks/useSupportConfig.d.ts:5:1 - (ae-undocumented) Missing documentation for "SupportItem". +// src/hooks/useSupportConfig.d.ts:10:1 - (ae-undocumented) Missing documentation for "SupportConfig". +// src/hooks/useSupportConfig.d.ts:14:1 - (ae-undocumented) Missing documentation for "useSupportConfig". +// src/icons/icons.d.ts:27:1 - (ae-undocumented) Missing documentation for "CatalogIcon". +// src/icons/icons.d.ts:29:1 - (ae-undocumented) Missing documentation for "ChatIcon". +// src/icons/icons.d.ts:31:1 - (ae-undocumented) Missing documentation for "DashboardIcon". +// src/icons/icons.d.ts:33:1 - (ae-undocumented) Missing documentation for "DocsIcon". +// src/icons/icons.d.ts:35:1 - (ae-undocumented) Missing documentation for "EmailIcon". +// src/icons/icons.d.ts:37:1 - (ae-undocumented) Missing documentation for "GitHubIcon". +// src/icons/icons.d.ts:39:1 - (ae-undocumented) Missing documentation for "GroupIcon". +// src/icons/icons.d.ts:41:1 - (ae-undocumented) Missing documentation for "HelpIcon". +// src/icons/icons.d.ts:43:1 - (ae-undocumented) Missing documentation for "UserIcon". +// src/icons/icons.d.ts:45:1 - (ae-undocumented) Missing documentation for "WarningIcon". +// src/icons/icons.d.ts:47:1 - (ae-undocumented) Missing documentation for "StarIcon". +// src/icons/icons.d.ts:49:1 - (ae-undocumented) Missing documentation for "UnstarredIcon". +// src/layout/BottomLink/BottomLink.d.ts:3:1 - (ae-undocumented) Missing documentation for "BottomLinkClassKey". +// src/layout/BottomLink/BottomLink.d.ts:5:1 - (ae-undocumented) Missing documentation for "BottomLinkProps". +// src/layout/Breadcrumbs/Breadcrumbs.d.ts:5:1 - (ae-undocumented) Missing documentation for "BreadcrumbsClickableTextClassKey". +// src/layout/Breadcrumbs/Breadcrumbs.d.ts:7:1 - (ae-undocumented) Missing documentation for "BreadcrumbsStyledBoxClassKey". +// src/layout/Breadcrumbs/Breadcrumbs.d.ts:9:1 - (ae-undocumented) Missing documentation for "BreadcrumbsCurrentPageClassKey". +// src/layout/Content/Content.d.ts:3:1 - (ae-undocumented) Missing documentation for "BackstageContentClassKey". +// src/layout/ContentHeader/ContentHeader.d.ts:6:1 - (ae-undocumented) Missing documentation for "ContentHeaderClassKey". +// src/layout/ErrorBoundary/ErrorBoundary.d.ts:7:1 - (ae-undocumented) Missing documentation for "ErrorBoundaryProps". // src/layout/ErrorBoundary/ErrorBoundary.d.ts:8:5 - (ae-forgotten-export) The symbol "SlackChannel" needs to be exported by the entry point index.d.ts +// src/layout/ErrorBoundary/ErrorBoundary.d.ts:16:22 - (ae-undocumented) Missing documentation for "ErrorBoundary". +// src/layout/ErrorPage/ErrorPage.d.ts:10:1 - (ae-undocumented) Missing documentation for "ErrorPageClassKey". +// src/layout/ErrorPage/MicDrop.d.ts:2:1 - (ae-undocumented) Missing documentation for "MicDropClassKey". +// src/layout/ErrorPage/StackDetails.d.ts:6:1 - (ae-undocumented) Missing documentation for "StackDetailsClassKey". +// src/layout/Header/Header.d.ts:3:1 - (ae-undocumented) Missing documentation for "HeaderClassKey". +// src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:6:1 - (ae-undocumented) Missing documentation for "HeaderActionMenuItem". +// src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:16:1 - (ae-undocumented) Missing documentation for "HeaderActionMenuProps". +// src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:22:1 - (ae-undocumented) Missing documentation for "HeaderActionMenu". +// src/layout/HeaderLabel/HeaderLabel.d.ts:3:1 - (ae-undocumented) Missing documentation for "HeaderLabelClassKey". +// src/layout/HeaderTabs/HeaderTabs.d.ts:4:1 - (ae-undocumented) Missing documentation for "HeaderTabsClassKey". +// src/layout/HeaderTabs/HeaderTabs.d.ts:5:1 - (ae-undocumented) Missing documentation for "Tab". +// src/layout/InfoCard/InfoCard.d.ts:6:1 - (ae-undocumented) Missing documentation for "InfoCardClassKey". +// src/layout/InfoCard/InfoCard.d.ts:8:1 - (ae-undocumented) Missing documentation for "CardActionsTopRightClassKey". +// src/layout/InfoCard/InfoCard.d.ts:10:1 - (ae-undocumented) Missing documentation for "InfoCardVariants". +// src/layout/ItemCard/ItemCardGrid.d.ts:4:1 - (ae-undocumented) Missing documentation for "ItemCardGridClassKey". +// src/layout/ItemCard/ItemCardGrid.d.ts:7:1 - (ae-undocumented) Missing documentation for "ItemCardGridProps". +// src/layout/ItemCard/ItemCardHeader.d.ts:4:1 - (ae-undocumented) Missing documentation for "ItemCardHeaderClassKey". +// src/layout/ItemCard/ItemCardHeader.d.ts:7:1 - (ae-undocumented) Missing documentation for "ItemCardHeaderProps". +// src/layout/Page/Page.d.ts:2:1 - (ae-undocumented) Missing documentation for "PageClassKey". +// src/layout/Page/Page.d.ts:7:1 - (ae-undocumented) Missing documentation for "Page". +// src/layout/Page/PageWithHeader.d.ts:6:1 - (ae-undocumented) Missing documentation for "PageWithHeader". +// src/layout/Sidebar/Bar.d.ts:4:1 - (ae-undocumented) Missing documentation for "SidebarClassKey". +// src/layout/Sidebar/Bar.d.ts:6:1 - (ae-undocumented) Missing documentation for "SidebarProps". +// src/layout/Sidebar/Items.d.ts:6:1 - (ae-undocumented) Missing documentation for "SidebarItemClassKey". +// src/layout/Sidebar/Items.d.ts:53:1 - (ae-undocumented) Missing documentation for "SidebarSearchField". +// src/layout/Sidebar/Items.d.ts:54:1 - (ae-undocumented) Missing documentation for "SidebarSpaceClassKey". +// src/layout/Sidebar/Items.d.ts:55:22 - (ae-undocumented) Missing documentation for "SidebarSpace". +// src/layout/Sidebar/Items.d.ts:56:1 - (ae-undocumented) Missing documentation for "SidebarSpacerClassKey". +// src/layout/Sidebar/Items.d.ts:57:22 - (ae-undocumented) Missing documentation for "SidebarSpacer". +// src/layout/Sidebar/Items.d.ts:58:1 - (ae-undocumented) Missing documentation for "SidebarDividerClassKey". +// src/layout/Sidebar/Items.d.ts:59:22 - (ae-undocumented) Missing documentation for "SidebarDivider". +// src/layout/Sidebar/Items.d.ts:60:22 - (ae-undocumented) Missing documentation for "SidebarScrollWrapper". +// src/layout/Sidebar/Page.d.ts:2:1 - (ae-undocumented) Missing documentation for "SidebarPageClassKey". +// src/layout/Sidebar/Page.d.ts:11:1 - (ae-undocumented) Missing documentation for "SidebarPage". +// src/layout/Sidebar/SidebarSubmenu.d.ts:3:1 - (ae-undocumented) Missing documentation for "SidebarSubmenuClassKey". +// src/layout/Sidebar/SidebarSubmenuItem.d.ts:4:1 - (ae-undocumented) Missing documentation for "SidebarSubmenuItemClassKey". +// src/layout/Sidebar/config.d.ts:3:1 - (ae-undocumented) Missing documentation for "SidebarOptions". +// src/layout/Sidebar/config.d.ts:8:1 - (ae-undocumented) Missing documentation for "SubmenuOptions". +// src/layout/Sidebar/config.d.ts:12:22 - (ae-undocumented) Missing documentation for "sidebarConfig". +// src/layout/Sidebar/config.d.ts:52:22 - (ae-undocumented) Missing documentation for "SIDEBAR_INTRO_LOCAL_STORAGE". +// src/layout/SignInPage/SignInPage.d.ts:17:1 - (ae-undocumented) Missing documentation for "SignInPage". +// src/layout/SignInPage/customProvider.d.ts:3:1 - (ae-undocumented) Missing documentation for "CustomProviderClassKey". +// src/layout/SignInPage/styles.d.ts:2:1 - (ae-undocumented) Missing documentation for "SignInPageClassKey". +// src/layout/SignInPage/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "SignInProviderConfig". +// src/layout/SignInPage/types.d.ts:10:1 - (ae-undocumented) Missing documentation for "IdentityProviders". +// src/layout/TabbedCard/TabbedCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "TabbedCardClassKey". +// src/layout/TabbedCard/TabbedCard.d.ts:7:1 - (ae-undocumented) Missing documentation for "BoldHeaderClassKey". +// src/layout/TabbedCard/TabbedCard.d.ts:18:1 - (ae-undocumented) Missing documentation for "TabbedCard". +// src/layout/TabbedCard/TabbedCard.d.ts:20:1 - (ae-undocumented) Missing documentation for "CardTabClassKey". +// src/overridableComponents.d.ts:83:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". ``` diff --git a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx index cfe44b8728..e531e9b254 100644 --- a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx +++ b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React from 'react'; +import React, { ComponentType, PropsWithChildren } from 'react'; import { FavoriteToggle } from './FavoriteToggle'; import { UnifiedThemeProvider, @@ -21,10 +21,14 @@ import { createUnifiedTheme, palettes, } from '@backstage/theme'; +import { wrapInTestApp } from '@backstage/test-utils'; export default { title: 'Core/FavoriteToggle', component: FavoriteToggle, + decorators: [ + (Story: ComponentType>) => wrapInTestApp(), + ], }; export const Default = () => { diff --git a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx index 8a517d27ea..ba7b4edb99 100644 --- a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx +++ b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx @@ -21,14 +21,16 @@ import { Theme, makeStyles } from '@material-ui/core/styles'; import { StarIcon, UnstarredIcon } from '../../icons'; const useStyles = makeStyles( - theme => ({ + () => ({ icon: { color: '#f3ba37', cursor: 'pointer', + display: 'inline-flex', }, iconBorder: { - color: theme.palette.text.primary, + color: 'inherit', cursor: 'pointer', + display: 'inline-flex', }, }), { name: 'BackstageFavoriteToggleIcon' }, @@ -89,6 +91,7 @@ export function FavoriteToggle( aria-label={title} id={id} onClick={() => onChange(!value)} + color="inherit" {...iconButtonProps} > diff --git a/packages/core-components/src/components/Link/Link.test.tsx b/packages/core-components/src/components/Link/Link.test.tsx index 42668b54c9..fe616299c3 100644 --- a/packages/core-components/src/components/Link/Link.test.tsx +++ b/packages/core-components/src/components/Link/Link.test.tsx @@ -45,6 +45,30 @@ describe('', () => { }); }); + it('does not render external link icon if externalLinkIcon prop is not passed', async () => { + const { container } = await renderInTestApp( + External Link, + ); + const externalLink = screen.getByRole('link', { + name: 'External Link , Opens in a new window', + }); + const externalLinkIcon = container.querySelector('svg'); + expect(externalLink).not.toContainElement(externalLinkIcon); + }); + + it('renders external link icon if externalLinkIcon prop is passed', async () => { + const { container } = await renderInTestApp( + + External Link + , + ); + const externalLink = screen.getByRole('link', { + name: 'External Link , Opens in a new window', + }); + const externalLinkIcon = container.querySelector('svg'); + expect(externalLink).toContainElement(externalLinkIcon); + }); + it('captures click using analytics api', async () => { const linkText = 'Navigate!'; const analyticsApi = new MockAnalyticsApi(); diff --git a/packages/core-components/src/components/Link/Link.tsx b/packages/core-components/src/components/Link/Link.tsx index 478e589212..0008a9ff2c 100644 --- a/packages/core-components/src/components/Link/Link.tsx +++ b/packages/core-components/src/components/Link/Link.tsx @@ -29,6 +29,8 @@ import { LinkProps as RouterLinkProps, Route, } from 'react-router-dom'; +import OpenInNew from '@material-ui/icons/OpenInNew'; +import { useApp } from '@backstage/core-plugin-api'; export function isReactRouterBeta(): boolean { const [obj] = createRoutesFromChildren(} />); @@ -39,7 +41,7 @@ export function isReactRouterBeta(): boolean { export type LinkClassKey = 'visuallyHidden' | 'externalLink'; const useStyles = makeStyles( - { + theme => ({ visuallyHidden: { clip: 'rect(0 0 0 0)', clipPath: 'inset(50%)', @@ -53,10 +55,21 @@ const useStyles = makeStyles( externalLink: { position: 'relative', }, - }, + externalLinkIcon: { + verticalAlign: 'bottom', + marginLeft: theme.spacing(0.5), + }, + }), { name: 'Link' }, ); +const ExternalLinkIcon = () => { + const app = useApp(); + const Icon = app.getSystemIcon('externalLink') || OpenInNew; + const classes = useStyles(); + return ; +}; + export const isExternalUri = (uri: string) => /^([a-z+.-]+):/.test(uri); // See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js @@ -90,6 +103,7 @@ export type LinkProps = Omit & to: string; component?: ElementType; noTrack?: boolean; + externalLinkIcon?: boolean; }; /** @@ -161,7 +175,7 @@ const getNodeText = (node: React.ReactNode): string => { * - Captures Link clicks as analytics events. */ export const Link = React.forwardRef( - ({ onClick, noTrack, ...props }, ref) => { + ({ onClick, noTrack, externalLinkIcon, ...props }, ref) => { const classes = useStyles(); const analytics = useAnalytics(); @@ -201,6 +215,7 @@ export const Link = React.forwardRef( className={classnames(classes.externalLink, props.className)} > {props.children} + {externalLinkIcon && } , Opens in a new window diff --git a/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx b/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx index f26d59fc1d..4c8ca2e0bf 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx @@ -46,11 +46,12 @@ const useStyles = makeStyles< flexFlow: 'column nowrap', alignItems: 'flex-start', position: 'fixed', + opacity: 0, [theme.breakpoints.up('sm')]: { marginLeft: props.left, - transition: theme.transitions.create('margin-left', { + transition: theme.transitions.create(['margin-left', 'opacity'], { easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.shortest, + duration: props.submenuConfig.defaultOpenDelayMs, }), }, top: 0, @@ -71,6 +72,8 @@ const useStyles = makeStyles< }, }), drawerOpen: props => ({ + marginLeft: props.left, + opacity: 1, width: props.submenuConfig.drawerWidthOpen, [theme.breakpoints.down('xs')]: { width: '100%', diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index fa2af5806b..e6244245be 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/core-plugin-api +## 1.10.0-next.0 + +### Minor Changes + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 1.9.4 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 4e41feae0f..7d0e2925ae 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-plugin-api", - "version": "1.9.4", + "version": "1.10.0-next.0", "description": "Core API used by Backstage plugins", "backstage": { "role": "web-library" diff --git a/packages/core-plugin-api/api-report-alpha.md b/packages/core-plugin-api/report-alpha.api.md similarity index 64% rename from packages/core-plugin-api/api-report-alpha.md rename to packages/core-plugin-api/report-alpha.api.md index c0f0d02535..260e0365a7 100644 --- a/packages/core-plugin-api/api-report-alpha.md +++ b/packages/core-plugin-api/report-alpha.api.md @@ -239,5 +239,36 @@ export const useTranslationRef: < t: TranslationFunction; }; +// Warnings were encountered during analysis: +// +// src/apis/definitions/AppLanguageApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "AppLanguageApi". +// src/apis/definitions/AppLanguageApi.d.ts:19:22 - (ae-undocumented) Missing documentation for "appLanguageApiRef". +// src/apis/definitions/TranslationApi.d.ts:228:1 - (ae-undocumented) Missing documentation for "TranslationFunction". +// src/apis/definitions/TranslationApi.d.ts:231:5 - (ae-undocumented) Missing documentation for "__call". +// src/apis/definitions/TranslationApi.d.ts:234:1 - (ae-undocumented) Missing documentation for "TranslationSnapshot". +// src/apis/definitions/TranslationApi.d.ts:243:1 - (ae-undocumented) Missing documentation for "TranslationApi". +// src/apis/definitions/TranslationApi.d.ts:254:22 - (ae-undocumented) Missing documentation for "translationApiRef". +// src/translation/TranslationMessages.d.ts:17:5 - (ae-undocumented) Missing documentation for "$$type". +// src/translation/TranslationMessages.d.ts:33:5 - (ae-undocumented) Missing documentation for "ref". +// src/translation/TranslationMessages.d.ts:34:5 - (ae-undocumented) Missing documentation for "full". +// src/translation/TranslationMessages.d.ts:35:5 - (ae-undocumented) Missing documentation for "messages". +// src/translation/TranslationRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "TranslationRef". +// src/translation/TranslationRef.d.ts:7:5 - (ae-undocumented) Missing documentation for "$$type". +// src/translation/TranslationRef.d.ts:8:5 - (ae-undocumented) Missing documentation for "id". +// src/translation/TranslationRef.d.ts:9:5 - (ae-undocumented) Missing documentation for "T". +// src/translation/TranslationRef.d.ts:30:1 - (ae-undocumented) Missing documentation for "TranslationRefOptions". +// src/translation/TranslationRef.d.ts:37:5 - (ae-undocumented) Missing documentation for "id". +// src/translation/TranslationRef.d.ts:38:5 - (ae-undocumented) Missing documentation for "messages". +// src/translation/TranslationRef.d.ts:39:5 - (ae-undocumented) Missing documentation for "translations". +// src/translation/TranslationRef.d.ts:42:1 - (ae-undocumented) Missing documentation for "createTranslationRef". +// src/translation/TranslationResource.d.ts:3:1 - (ae-undocumented) Missing documentation for "TranslationResource". +// src/translation/TranslationResource.d.ts:4:5 - (ae-undocumented) Missing documentation for "$$type". +// src/translation/TranslationResource.d.ts:5:5 - (ae-undocumented) Missing documentation for "id". +// src/translation/TranslationResource.d.ts:8:1 - (ae-undocumented) Missing documentation for "TranslationResourceOptions". +// src/translation/TranslationResource.d.ts:17:5 - (ae-undocumented) Missing documentation for "ref". +// src/translation/TranslationResource.d.ts:18:5 - (ae-undocumented) Missing documentation for "translations". +// src/translation/TranslationResource.d.ts:21:1 - (ae-undocumented) Missing documentation for "createTranslationResource". +// src/translation/useTranslationRef.d.ts:4:22 - (ae-undocumented) Missing documentation for "useTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/report.api.md similarity index 98% rename from packages/core-plugin-api/api-report.md rename to packages/core-plugin-api/report.api.md index 134b338c92..06333c1fb4 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/report.api.md @@ -505,14 +505,9 @@ export const googleAuthApiRef: ApiRef< >; // @public -export type IconComponent = ComponentType< - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; // @public export type IdentityApi = { @@ -797,4 +792,8 @@ export function withApis( ): React_2.JSX.Element; displayName: string; }; + +// Warnings were encountered during analysis: +// +// src/routing/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "AnyParams". ``` diff --git a/packages/core-plugin-api/src/icons/types.test.ts b/packages/core-plugin-api/src/icons/types.test.ts new file mode 100644 index 0000000000..fd01e176c9 --- /dev/null +++ b/packages/core-plugin-api/src/icons/types.test.ts @@ -0,0 +1,73 @@ +/* + * Copyright 2024 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 * as React from 'react'; +import { type IconComponent } from './types'; + +// Emulate the MUI4 icon type +type Mui4Icon = (props: { + fontSize?: 'default' | 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI5 icon type +type Mui5Icon = (props: { + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI6 icon type +interface OverridableComponent

{ + ( + props: { + /** + * The component used for the root node. + * Either a string to use a HTML element or a component. + */ + component: RootComponent; + } & { stuff: number }, + ): React.JSX.Element | null; + (props: P): React.JSX.Element | null; +} +type Mui6Icon = OverridableComponent<{ + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}>; + +type NotAnIcon1 = (props: { + fontSize?: 'foo'; + otherProp?: string; +}) => JSX.Element; + +type NotAnIcon2 = (props: { + fontSize?: number; + otherProp?: string; +}) => JSX.Element; + +describe('IconComponent', () => { + // eslint-disable-next-line jest/expect-expect + it('should be a component type', () => { + // @ts-ignore + let icon: IconComponent; + icon = {} as Mui4Icon; + icon = {} as Mui5Icon; + icon = {} as Mui6Icon; + // @ts-expect-error + icon = {} as NotAnIcon1; + // @ts-expect-error + icon = {} as NotAnIcon2; + }); +}); diff --git a/packages/core-plugin-api/src/icons/types.ts b/packages/core-plugin-api/src/icons/types.ts index 4d54629de2..2b00e1456f 100644 --- a/packages/core-plugin-api/src/icons/types.ts +++ b/packages/core-plugin-api/src/icons/types.ts @@ -22,7 +22,7 @@ import { ComponentType } from 'react'; * * @remarks * - * The type is based on SvgIcon from Material UI, but both do not what the plugin-api + * The type is based on SvgIcon from Material UI, but we do not want the plugin-api * package to have a dependency on Material UI, nor do we want the props to be as broad * as the SvgIconProps interface. * @@ -32,14 +32,6 @@ import { ComponentType } from 'react'; * * @public */ - -export type IconComponent = ComponentType< - /* Material UI v4 */ - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - /* Material UI v5: https://mui.com/material-ui/migration/v5-component-changes/#icon */ - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index f9adf43242..de3a9a4392 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/create-app +## 0.5.21-next.0 + +### Patch Changes + +- a7674d6: Fixed lack of `.yarnrc.yml` in the template. +- Updated dependencies + - @backstage/cli-common@0.1.14 + ## 0.5.19 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 75c0dae4ce..68764acc0a 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/create-app", - "version": "0.5.19", + "version": "0.5.21-next.0", "description": "A CLI that helps you create your own Backstage app", "backstage": { "role": "cli" diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 23a75f11db..ada9df8b6e 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/dev-utils +## 1.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + ## 1.1.0 ### Minor Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 70ef33a8ae..fbdbd454f2 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/dev-utils", - "version": "1.1.0", + "version": "1.1.1-next.0", "description": "Utilities for developing Backstage plugins.", "backstage": { "role": "web-library" diff --git a/packages/dev-utils/api-report.md b/packages/dev-utils/report.api.md similarity index 83% rename from packages/dev-utils/api-report.md rename to packages/dev-utils/report.api.md index 1a7b765fab..18da50026e 100644 --- a/packages/dev-utils/api-report.md +++ b/packages/dev-utils/report.api.md @@ -67,4 +67,10 @@ export const SidebarSignOutButton: (props: { icon?: IconComponent; text?: string; }) => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/components/EntityGridItem/EntityGridItem.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityGridItem". +// src/components/SidebarLanguageSwitcher/SidebarLanguageSwitcher.d.ts:3:22 - (ae-undocumented) Missing documentation for "SidebarLanguageSwitcher". +// src/devApp/render.d.ts:8:1 - (ae-undocumented) Missing documentation for "DevAppPageOptions". ``` diff --git a/packages/e2e-test-utils/api-report-playwright.md b/packages/e2e-test-utils/report-playwright.api.md similarity index 100% rename from packages/e2e-test-utils/api-report-playwright.md rename to packages/e2e-test-utils/report-playwright.api.md diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 0cb30bb7c8..0ed5490a8b 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.21-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/errors@1.2.4 + ## 0.2.20 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index e89d8fb497..606a30e363 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,6 +1,6 @@ { "name": "e2e-test", - "version": "0.2.20", + "version": "0.2.21-next.0", "description": "E2E test for verifying Backstage packages", "backstage": { "role": "cli" diff --git a/packages/errors/api-report.md b/packages/errors/report.api.md similarity index 80% rename from packages/errors/api-report.md rename to packages/errors/report.api.md index 894aac8413..d2ba2d22ff 100644 --- a/packages/errors/api-report.md +++ b/packages/errors/report.api.md @@ -155,4 +155,16 @@ export class ServiceUnavailableError extends CustomErrorBase {} // @public export function stringifyError(error: unknown): string; + +// Warnings were encountered during analysis: +// +// src/errors/ResponseError.d.ts:32:5 - (ae-undocumented) Missing documentation for "statusCode". +// src/errors/ResponseError.d.ts:33:5 - (ae-undocumented) Missing documentation for "statusText". +// src/errors/common.d.ts:8:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:16:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:24:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:35:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:44:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:52:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:60:5 - (ae-undocumented) Missing documentation for "name". ``` diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md index 09cb2071be..cbc4a2e361 100644 --- a/packages/frontend-app-api/CHANGELOG.md +++ b/packages/frontend-app-api/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/frontend-app-api +## 0.10.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `createApp` and `CreateAppFeatureLoader` from `@backstage/frontend-app-api`, use the same `createApp` and `CreateAppFeatureLoader` import from `@backstage/frontend-defaults` instead. + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.9.0 ### Minor Changes diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json index 48381b6c5a..1a7ac69820 100644 --- a/packages/frontend-app-api/package.json +++ b/packages/frontend-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-app-api", - "version": "0.9.0", + "version": "0.10.0-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-app-api/api-report.md b/packages/frontend-app-api/report.api.md similarity index 90% rename from packages/frontend-app-api/api-report.md rename to packages/frontend-app-api/report.api.md index 4216f1f823..b5e5f801e6 100644 --- a/packages/frontend-app-api/api-report.md +++ b/packages/frontend-app-api/report.api.md @@ -43,4 +43,8 @@ export type FrontendFeature = | { $$type: '@backstage/BackstagePlugin'; }; + +// Warnings were encountered during analysis: +// +// src/wiring/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "FrontendFeature". ``` diff --git a/packages/frontend-defaults/CHANGELOG.md b/packages/frontend-defaults/CHANGELOG.md index 14d9fefec3..7c85a116f4 100644 --- a/packages/frontend-defaults/CHANGELOG.md +++ b/packages/frontend-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/frontend-defaults +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + ## 0.1.0 ### Minor Changes diff --git a/packages/frontend-defaults/package.json b/packages/frontend-defaults/package.json index 9e6c65d54a..7d78dc5410 100644 --- a/packages/frontend-defaults/package.json +++ b/packages/frontend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-defaults", - "version": "0.1.0", + "version": "0.1.1-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-defaults/api-report.md b/packages/frontend-defaults/report.api.md similarity index 79% rename from packages/frontend-defaults/api-report.md rename to packages/frontend-defaults/report.api.md index b99232b784..4822312294 100644 --- a/packages/frontend-defaults/api-report.md +++ b/packages/frontend-defaults/report.api.md @@ -40,4 +40,10 @@ export interface CreateAppOptions { export function createPublicSignInApp(options?: CreateAppOptions): { createRoot(): React_2.JSX.Element; }; + +// Warnings were encountered during analysis: +// +// src/createApp.d.ts:29:5 - (ae-undocumented) Missing documentation for "features". +// src/createApp.d.ts:30:5 - (ae-undocumented) Missing documentation for "configLoader". +// src/createApp.d.ts:33:5 - (ae-undocumented) Missing documentation for "bindRoutes". ``` diff --git a/packages/frontend-internal/CHANGELOG.md b/packages/frontend-internal/CHANGELOG.md index 4d42d324bf..44381cf70d 100644 --- a/packages/frontend-internal/CHANGELOG.md +++ b/packages/frontend-internal/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/frontend +## 0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.0.1 ### Patch Changes diff --git a/packages/frontend-internal/package.json b/packages/frontend-internal/package.json index 385c882740..b739f60e39 100644 --- a/packages/frontend-internal/package.json +++ b/packages/frontend-internal/package.json @@ -1,6 +1,6 @@ { "name": "@internal/frontend", - "version": "0.0.1", + "version": "0.0.2-next.0", "backstage": { "role": "web-library", "inline": true diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md index b5bf0d17f2..d2cef285d5 100644 --- a/packages/frontend-plugin-api/CHANGELOG.md +++ b/packages/frontend-plugin-api/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/frontend-plugin-api +## 0.9.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `namespace` option from `createExtension` and `createExtensionBlueprint`, including `.make` and `.makeWithOverides`, it's no longer necessary and will use the `pluginId` instead. + + Removed deprecated `createExtensionOverrides` this should be replaced with `createFrontendModule` instead. + + Removed deprecated `BackstagePlugin` type, use `FrontendPlugin` type instead from this same package. + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. +- 323aae8: It is now possible to override the blueprint parameters when overriding an extension created from a blueprint: + + ```ts + const myExtension = MyBlueprint.make({ + params: { + myParam: 'myDefault', + }, + }); + + const myOverride = myExtension.override({ + params: { + myParam: 'myOverride', + }, + }); + const myFactoryOverride = myExtension.override({ + factory(origFactory) { + return origFactory({ + params: { + myParam: 'myOverride', + }, + }); + }, + }); + ``` + + The provided parameters will be merged with the original parameters of the extension. + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.8.0 ### Minor Changes diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json index 35dc1ff31d..9595d6670f 100644 --- a/packages/frontend-plugin-api/package.json +++ b/packages/frontend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-plugin-api", - "version": "0.8.0", + "version": "0.9.0-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-plugin-api/api-report.md b/packages/frontend-plugin-api/report.api.md similarity index 79% rename from packages/frontend-plugin-api/api-report.md rename to packages/frontend-plugin-api/report.api.md index c36f8b9b3e..5bc2a663d7 100644 --- a/packages/frontend-plugin-api/api-report.md +++ b/packages/frontend-plugin-api/report.api.md @@ -1285,14 +1285,9 @@ export const IconBundleBlueprint: ExtensionBlueprint<{ }>; // @public -export type IconComponent = ComponentType< - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; // @public export interface IconsApi { @@ -1752,4 +1747,106 @@ export { useTranslationRef }; export { vmwareCloudAuthApiRef }; export { withApis }; + +// Warnings were encountered during analysis: +// +// src/apis/definitions/AppTreeApi.d.ts:12:5 - (ae-undocumented) Missing documentation for "id". +// src/apis/definitions/AppTreeApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/apis/definitions/AppTreeApi.d.ts:17:5 - (ae-undocumented) Missing documentation for "extension". +// src/apis/definitions/AppTreeApi.d.ts:18:5 - (ae-undocumented) Missing documentation for "disabled". +// src/apis/definitions/AppTreeApi.d.ts:19:5 - (ae-undocumented) Missing documentation for "config". +// src/apis/definitions/AppTreeApi.d.ts:20:5 - (ae-undocumented) Missing documentation for "source". +// src/apis/definitions/AppTreeApi.d.ts:32:5 - (ae-undocumented) Missing documentation for "attachedTo". +// src/apis/definitions/AppTreeApi.d.ts:36:5 - (ae-undocumented) Missing documentation for "attachments". +// src/apis/definitions/ComponentsApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "getComponent". +// src/apis/definitions/IconsApi.d.ts:8:5 - (ae-undocumented) Missing documentation for "getIcon". +// src/apis/definitions/IconsApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "listIconKeys". +// src/apis/definitions/RouteResolutionApi.d.ts:19:1 - (ae-undocumented) Missing documentation for "RouteResolutionApiResolveOptions". +// src/apis/definitions/RouteResolutionApi.d.ts:29:1 - (ae-undocumented) Missing documentation for "RouteResolutionApi". +// src/apis/definitions/RouteResolutionApi.d.ts:30:5 - (ae-undocumented) Missing documentation for "resolve". +// src/blueprints/IconBundleBlueprint.d.ts:3:22 - (ae-undocumented) Missing documentation for "IconBundleBlueprint". +// src/blueprints/RouterBlueprint.d.ts:3:22 - (ae-undocumented) Missing documentation for "RouterBlueprint". +// src/components/ExtensionBoundary.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionBoundaryProps". +// src/components/ExtensionBoundary.d.ts:5:5 - (ae-undocumented) Missing documentation for "node". +// src/components/ExtensionBoundary.d.ts:12:5 - (ae-undocumented) Missing documentation for "children". +// src/components/ExtensionBoundary.d.ts:15:1 - (ae-undocumented) Missing documentation for "ExtensionBoundary". +// src/components/ExtensionBoundary.d.ts:17:1 - (ae-undocumented) Missing documentation for "ExtensionBoundary". +// src/components/ExtensionBoundary.d.ts:18:5 - (ae-undocumented) Missing documentation for "lazy". +// src/components/coreComponentRefs.d.ts:3:22 - (ae-undocumented) Missing documentation for "coreComponentRefs". +// src/components/createComponentRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ComponentRef". +// src/components/createComponentRef.d.ts:7:1 - (ae-undocumented) Missing documentation for "createComponentRef". +// src/extensions/createComponentExtension.d.ts:4:1 - (ae-undocumented) Missing documentation for "createComponentExtension". +// src/extensions/createComponentExtension.d.ts:31:1 - (ae-undocumented) Missing documentation for "createComponentExtension". +// src/extensions/createComponentExtension.d.ts:32:11 - (ae-undocumented) Missing documentation for "componentDataRef". +// src/routing/ExternalRouteRef.d.ts:12:5 - (ae-undocumented) Missing documentation for "$$type". +// src/routing/ExternalRouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "T". +// src/routing/RouteRef.d.ts:12:5 - (ae-undocumented) Missing documentation for "$$type". +// src/routing/RouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "T". +// src/routing/SubRouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "$$type". +// src/routing/SubRouteRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "T". +// src/routing/SubRouteRef.d.ts:15:5 - (ae-undocumented) Missing documentation for "path". +// src/schema/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "PortableSchema". +// src/types.d.ts:11:1 - (ae-undocumented) Missing documentation for "CoreProgressProps". +// src/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "CoreNotFoundErrorPageProps". +// src/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "CoreErrorBoundaryFallbackProps". +// src/wiring/coreExtensionData.d.ts:4:22 - (ae-undocumented) Missing documentation for "coreExtensionData". +// src/wiring/createExtension.d.ts:31:1 - (ae-undocumented) Missing documentation for "CreateExtensionOptions". +// src/wiring/createExtension.d.ts:61:1 - (ae-undocumented) Missing documentation for "ExtensionDefinitionParameters". +// src/wiring/createExtension.d.ts:80:1 - (ae-undocumented) Missing documentation for "ExtensionDefinition". +// src/wiring/createExtension.d.ts:134:1 - (ae-undocumented) Missing documentation for "createExtension". +// src/wiring/createExtensionBlueprint.d.ts:12:1 - (ae-undocumented) Missing documentation for "CreateExtensionBlueprintOptions". +// src/wiring/createExtensionBlueprint.d.ts:45:1 - (ae-undocumented) Missing documentation for "ExtensionBlueprintParameters". +// src/wiring/createExtensionBlueprint.d.ts:69:1 - (ae-undocumented) Missing documentation for "ExtensionBlueprint". +// src/wiring/createExtensionBlueprint.d.ts:70:5 - (ae-undocumented) Missing documentation for "dataRefs". +// src/wiring/createExtensionBlueprint.d.ts:71:5 - (ae-undocumented) Missing documentation for "make". +// src/wiring/createExtensionDataContainer.d.ts:3:1 - (ae-undocumented) Missing documentation for "ExtensionDataContainer". +// src/wiring/createExtensionDataRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ExtensionDataValue". +// src/wiring/createExtensionDataRef.d.ts:8:1 - (ae-undocumented) Missing documentation for "ExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:17:1 - (ae-undocumented) Missing documentation for "ExtensionDataRefToValue". +// src/wiring/createExtensionDataRef.d.ts:19:1 - (ae-undocumented) Missing documentation for "AnyExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:23:1 - (ae-undocumented) Missing documentation for "ConfigurableExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:26:5 - (ae-undocumented) Missing documentation for "optional". +// src/wiring/createExtensionDataRef.d.ts:29:5 - (ae-undocumented) Missing documentation for "__call". +// src/wiring/createExtensionDataRef.d.ts:35:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:37:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". +// src/wiring/createExtensionInput.d.ts:3:1 - (ae-undocumented) Missing documentation for "ExtensionInput". +// src/wiring/createExtensionInput.d.ts:9:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createExtensionInput.d.ts:10:5 - (ae-undocumented) Missing documentation for "extensionData". +// src/wiring/createExtensionInput.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/wiring/createExtensionInput.d.ts:12:5 - (ae-undocumented) Missing documentation for "replaces". +// src/wiring/createExtensionInput.d.ts:18:1 - (ae-undocumented) Missing documentation for "createExtensionInput". +// src/wiring/createFrontendModule.d.ts:4:1 - (ae-undocumented) Missing documentation for "CreateFrontendModuleOptions". +// src/wiring/createFrontendModule.d.ts:5:5 - (ae-undocumented) Missing documentation for "pluginId". +// src/wiring/createFrontendModule.d.ts:6:5 - (ae-undocumented) Missing documentation for "extensions". +// src/wiring/createFrontendModule.d.ts:7:5 - (ae-undocumented) Missing documentation for "featureFlags". +// src/wiring/createFrontendModule.d.ts:10:1 - (ae-undocumented) Missing documentation for "FrontendModule". +// src/wiring/createFrontendModule.d.ts:11:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createFrontendModule.d.ts:12:5 - (ae-undocumented) Missing documentation for "pluginId". +// src/wiring/createFrontendModule.d.ts:15:1 - (ae-undocumented) Missing documentation for "createFrontendModule". +// src/wiring/createFrontendPlugin.d.ts:5:1 - (ae-undocumented) Missing documentation for "FrontendPlugin". +// src/wiring/createFrontendPlugin.d.ts:10:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createFrontendPlugin.d.ts:11:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/createFrontendPlugin.d.ts:12:5 - (ae-undocumented) Missing documentation for "routes". +// src/wiring/createFrontendPlugin.d.ts:13:5 - (ae-undocumented) Missing documentation for "externalRoutes". +// src/wiring/createFrontendPlugin.d.ts:14:5 - (ae-undocumented) Missing documentation for "getExtension". +// src/wiring/createFrontendPlugin.d.ts:15:5 - (ae-undocumented) Missing documentation for "withOverrides". +// src/wiring/createFrontendPlugin.d.ts:20:1 - (ae-undocumented) Missing documentation for "PluginOptions". +// src/wiring/createFrontendPlugin.d.ts:21:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/createFrontendPlugin.d.ts:22:5 - (ae-undocumented) Missing documentation for "routes". +// src/wiring/createFrontendPlugin.d.ts:23:5 - (ae-undocumented) Missing documentation for "externalRoutes". +// src/wiring/createFrontendPlugin.d.ts:24:5 - (ae-undocumented) Missing documentation for "extensions". +// src/wiring/createFrontendPlugin.d.ts:25:5 - (ae-undocumented) Missing documentation for "featureFlags". +// src/wiring/createFrontendPlugin.d.ts:28:1 - (ae-undocumented) Missing documentation for "createFrontendPlugin". +// src/wiring/resolveExtensionDefinition.d.ts:4:1 - (ae-undocumented) Missing documentation for "Extension". +// src/wiring/resolveExtensionDefinition.d.ts:5:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/resolveExtensionDefinition.d.ts:6:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/resolveExtensionDefinition.d.ts:7:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/resolveExtensionDefinition.d.ts:11:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/resolveExtensionDefinition.d.ts:12:5 - (ae-undocumented) Missing documentation for "configSchema". +// src/wiring/resolveInputOverrides.d.ts:5:1 - (ae-undocumented) Missing documentation for "ResolveInputValueOverrides". +// src/wiring/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "AnyRoutes". +// src/wiring/types.d.ts:18:1 - (ae-undocumented) Missing documentation for "AnyExternalRoutes". +// src/wiring/types.d.ts:28:1 - (ae-undocumented) Missing documentation for "ExtensionOverrides". +// src/wiring/types.d.ts:29:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/types.d.ts:35:1 - (ae-undocumented) Missing documentation for "FrontendFeature". ``` diff --git a/packages/frontend-plugin-api/src/icons/types.test.ts b/packages/frontend-plugin-api/src/icons/types.test.ts new file mode 100644 index 0000000000..fd01e176c9 --- /dev/null +++ b/packages/frontend-plugin-api/src/icons/types.test.ts @@ -0,0 +1,73 @@ +/* + * Copyright 2024 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 * as React from 'react'; +import { type IconComponent } from './types'; + +// Emulate the MUI4 icon type +type Mui4Icon = (props: { + fontSize?: 'default' | 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI5 icon type +type Mui5Icon = (props: { + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI6 icon type +interface OverridableComponent

{ + ( + props: { + /** + * The component used for the root node. + * Either a string to use a HTML element or a component. + */ + component: RootComponent; + } & { stuff: number }, + ): React.JSX.Element | null; + (props: P): React.JSX.Element | null; +} +type Mui6Icon = OverridableComponent<{ + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}>; + +type NotAnIcon1 = (props: { + fontSize?: 'foo'; + otherProp?: string; +}) => JSX.Element; + +type NotAnIcon2 = (props: { + fontSize?: number; + otherProp?: string; +}) => JSX.Element; + +describe('IconComponent', () => { + // eslint-disable-next-line jest/expect-expect + it('should be a component type', () => { + // @ts-ignore + let icon: IconComponent; + icon = {} as Mui4Icon; + icon = {} as Mui5Icon; + icon = {} as Mui6Icon; + // @ts-expect-error + icon = {} as NotAnIcon1; + // @ts-expect-error + icon = {} as NotAnIcon2; + }); +}); diff --git a/packages/frontend-plugin-api/src/icons/types.ts b/packages/frontend-plugin-api/src/icons/types.ts index 4d54629de2..2b00e1456f 100644 --- a/packages/frontend-plugin-api/src/icons/types.ts +++ b/packages/frontend-plugin-api/src/icons/types.ts @@ -22,7 +22,7 @@ import { ComponentType } from 'react'; * * @remarks * - * The type is based on SvgIcon from Material UI, but both do not what the plugin-api + * The type is based on SvgIcon from Material UI, but we do not want the plugin-api * package to have a dependency on Material UI, nor do we want the props to be as broad * as the SvgIconProps interface. * @@ -32,14 +32,6 @@ import { ComponentType } from 'react'; * * @public */ - -export type IconComponent = ComponentType< - /* Material UI v4 */ - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - /* Material UI v5: https://mui.com/material-ui/migration/v5-component-changes/#icon */ - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; diff --git a/packages/frontend-test-utils/CHANGELOG.md b/packages/frontend-test-utils/CHANGELOG.md index 49d89fa70e..72588c9526 100644 --- a/packages/frontend-test-utils/CHANGELOG.md +++ b/packages/frontend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/frontend-test-utils +## 0.2.1-next.0 + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.2.0 ### Minor Changes diff --git a/packages/frontend-test-utils/package.json b/packages/frontend-test-utils/package.json index 46e94f6686..f6ecd28a97 100644 --- a/packages/frontend-test-utils/package.json +++ b/packages/frontend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-test-utils", - "version": "0.2.0", + "version": "0.2.1-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-test-utils/api-report.md b/packages/frontend-test-utils/report.api.md similarity index 75% rename from packages/frontend-test-utils/api-report.md rename to packages/frontend-test-utils/report.api.md index 10b84b0981..1337e5eb4f 100644 --- a/packages/frontend-test-utils/api-report.md +++ b/packages/frontend-test-utils/report.api.md @@ -140,4 +140,20 @@ export type TestAppOptions = { }; export { withLogCollector }; + +// Warnings were encountered during analysis: +// +// src/apis/AnalyticsApi/MockAnalyticsApi.d.ts:10:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/apis/AnalyticsApi/MockAnalyticsApi.d.ts:11:5 - (ae-undocumented) Missing documentation for "getEvents". +// src/app/createExtensionTester.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionQuery". +// src/app/createExtensionTester.d.ts:7:5 - (ae-undocumented) Missing documentation for "node". +// src/app/createExtensionTester.d.ts:8:5 - (ae-undocumented) Missing documentation for "instance". +// src/app/createExtensionTester.d.ts:9:5 - (ae-undocumented) Missing documentation for "get". +// src/app/createExtensionTester.d.ts:12:1 - (ae-undocumented) Missing documentation for "ExtensionTester". +// src/app/createExtensionTester.d.ts:14:5 - (ae-undocumented) Missing documentation for "add". +// src/app/createExtensionTester.d.ts:17:5 - (ae-undocumented) Missing documentation for "get". +// src/app/createExtensionTester.d.ts:18:5 - (ae-undocumented) Missing documentation for "query". +// src/app/createExtensionTester.d.ts:19:5 - (ae-undocumented) Missing documentation for "reactElement". +// src/app/createExtensionTester.d.ts:22:1 - (ae-undocumented) Missing documentation for "createExtensionTester". +// src/deprecated.d.ts:5:1 - (ae-undocumented) Missing documentation for "setupRequestMockHandlers". ``` diff --git a/packages/integration-aws-node/api-report.md b/packages/integration-aws-node/report.api.md similarity index 86% rename from packages/integration-aws-node/api-report.md rename to packages/integration-aws-node/report.api.md index d9ed25e193..80b1eee3ba 100644 --- a/packages/integration-aws-node/api-report.md +++ b/packages/integration-aws-node/report.api.md @@ -35,5 +35,9 @@ export class DefaultAwsCredentialsManager implements AwsCredentialsManager { ): Promise; } +// Warnings were encountered during analysis: +// +// src/DefaultAwsCredentialsManager.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 33d02b443f..efe55d1094 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration-react +## 1.1.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + ## 1.1.31 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 3320cd5108..610ce6f02f 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/integration-react", - "version": "1.1.31", + "version": "1.1.32-next.0", "description": "Frontend package for managing integrations towards external systems", "backstage": { "role": "web-library" diff --git a/packages/integration-react/api-report.md b/packages/integration-react/report.api.md similarity index 100% rename from packages/integration-react/api-report.md rename to packages/integration-react/report.api.md diff --git a/packages/integration/api-report.md b/packages/integration/report.api.md similarity index 66% rename from packages/integration/api-report.md rename to packages/integration/report.api.md index e9b67bb6c1..e14a93b9a4 100644 --- a/packages/integration/api-report.md +++ b/packages/integration/report.api.md @@ -1027,4 +1027,127 @@ export class SingleInstanceGithubCredentialsProvider static create: (config: GithubIntegrationConfig) => GithubCredentialsProvider; getCredentials(opts: { url: string }): Promise; } + +// Warnings were encountered during analysis: +// +// src/ScmIntegrations.d.ts:21:5 - (ae-undocumented) Missing documentation for "awsS3". +// src/ScmIntegrations.d.ts:22:5 - (ae-undocumented) Missing documentation for "awsCodeCommit". +// src/ScmIntegrations.d.ts:23:5 - (ae-undocumented) Missing documentation for "azure". +// src/ScmIntegrations.d.ts:27:5 - (ae-undocumented) Missing documentation for "bitbucket". +// src/ScmIntegrations.d.ts:28:5 - (ae-undocumented) Missing documentation for "bitbucketCloud". +// src/ScmIntegrations.d.ts:29:5 - (ae-undocumented) Missing documentation for "bitbucketServer". +// src/ScmIntegrations.d.ts:30:5 - (ae-undocumented) Missing documentation for "gerrit". +// src/ScmIntegrations.d.ts:31:5 - (ae-undocumented) Missing documentation for "github". +// src/ScmIntegrations.d.ts:32:5 - (ae-undocumented) Missing documentation for "gitlab". +// src/ScmIntegrations.d.ts:33:5 - (ae-undocumented) Missing documentation for "gitea". +// src/ScmIntegrations.d.ts:34:5 - (ae-undocumented) Missing documentation for "harness". +// src/ScmIntegrations.d.ts:43:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/ScmIntegrations.d.ts:45:5 - (ae-undocumented) Missing documentation for "awsS3". +// src/ScmIntegrations.d.ts:46:5 - (ae-undocumented) Missing documentation for "awsCodeCommit". +// src/ScmIntegrations.d.ts:47:5 - (ae-undocumented) Missing documentation for "azure". +// src/ScmIntegrations.d.ts:51:5 - (ae-undocumented) Missing documentation for "bitbucket". +// src/ScmIntegrations.d.ts:52:5 - (ae-undocumented) Missing documentation for "bitbucketCloud". +// src/ScmIntegrations.d.ts:53:5 - (ae-undocumented) Missing documentation for "bitbucketServer". +// src/ScmIntegrations.d.ts:54:5 - (ae-undocumented) Missing documentation for "gerrit". +// src/ScmIntegrations.d.ts:55:5 - (ae-undocumented) Missing documentation for "github". +// src/ScmIntegrations.d.ts:56:5 - (ae-undocumented) Missing documentation for "gitlab". +// src/ScmIntegrations.d.ts:57:5 - (ae-undocumented) Missing documentation for "gitea". +// src/ScmIntegrations.d.ts:58:5 - (ae-undocumented) Missing documentation for "harness". +// src/ScmIntegrations.d.ts:59:5 - (ae-undocumented) Missing documentation for "list". +// src/ScmIntegrations.d.ts:60:5 - (ae-undocumented) Missing documentation for "byUrl". +// src/ScmIntegrations.d.ts:61:5 - (ae-undocumented) Missing documentation for "byHost". +// src/ScmIntegrations.d.ts:62:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/ScmIntegrations.d.ts:67:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:11:5 - (ae-undocumented) Missing documentation for "type". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "config". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/awsS3/AwsS3Integration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/awsS3/AwsS3Integration.d.ts:11:5 - (ae-undocumented) Missing documentation for "type". +// src/awsS3/AwsS3Integration.d.ts:12:5 - (ae-undocumented) Missing documentation for "title". +// src/awsS3/AwsS3Integration.d.ts:13:5 - (ae-undocumented) Missing documentation for "config". +// src/awsS3/AwsS3Integration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/awsS3/AwsS3Integration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/azure/AzureIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/azure/AzureIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/azure/AzureIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/azure/AzureIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/azure/AzureIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/azure/AzureIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/azure/DefaultAzureDevOpsCredentialsProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "fromIntegrations". +// src/azure/DefaultAzureDevOpsCredentialsProvider.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/azure/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/bitbucket/BitbucketIntegration.d.ts:11:5 - (ae-undocumented) Missing documentation for "factory". +// src/bitbucket/BitbucketIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "type". +// src/bitbucket/BitbucketIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "title". +// src/bitbucket/BitbucketIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "config". +// src/bitbucket/BitbucketIntegration.d.ts:16:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/bitbucket/BitbucketIntegration.d.ts:21:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/gerrit/GerritIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/gerrit/GerritIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/gerrit/GerritIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/gerrit/GerritIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/gerrit/GerritIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/gerrit/GerritIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/gitea/GiteaIntegration.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/gitea/GiteaIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/gitea/GiteaIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/gitea/GiteaIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/gitea/GiteaIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/gitea/GiteaIntegration.d.ts:19:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/github/DefaultGithubCredentialsProvider.d.ts:13:5 - (ae-undocumented) Missing documentation for "fromIntegrations". +// src/github/GithubIntegration.d.ts:11:5 - (ae-undocumented) Missing documentation for "factory". +// src/github/GithubIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "type". +// src/github/GithubIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "title". +// src/github/GithubIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "config". +// src/github/GithubIntegration.d.ts:16:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/github/GithubIntegration.d.ts:21:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/github/GithubIntegration.d.ts:22:5 - (ae-undocumented) Missing documentation for "parseRateLimitInfo". +// src/github/SingleInstanceGithubCredentialsProvider.d.ts:12:5 - (ae-undocumented) Missing documentation for "getAllInstallations". +// src/github/SingleInstanceGithubCredentialsProvider.d.ts:13:5 - (ae-undocumented) Missing documentation for "getAppToken". +// src/github/SingleInstanceGithubCredentialsProvider.d.ts:26:5 - (ae-undocumented) Missing documentation for "create". +// src/github/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/gitlab/DefaultGitlabCredentialsProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "fromIntegrations". +// src/gitlab/DefaultGitlabCredentialsProvider.d.ts:12:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/gitlab/GitLabIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/gitlab/GitLabIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/gitlab/GitLabIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/gitlab/GitLabIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/gitlab/GitLabIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/gitlab/GitLabIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/gitlab/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "GitlabCredentials". +// src/gitlab/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "GitlabCredentialsProvider". +// src/gitlab/types.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/harness/HarnessIntegration.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/harness/HarnessIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/harness/HarnessIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/harness/HarnessIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/harness/HarnessIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/harness/HarnessIntegration.d.ts:19:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/registry.d.ts:19:5 - (ae-undocumented) Missing documentation for "awsS3". +// src/registry.d.ts:20:5 - (ae-undocumented) Missing documentation for "awsCodeCommit". +// src/registry.d.ts:21:5 - (ae-undocumented) Missing documentation for "azure". +// src/registry.d.ts:25:5 - (ae-undocumented) Missing documentation for "bitbucket". +// src/registry.d.ts:26:5 - (ae-undocumented) Missing documentation for "bitbucketCloud". +// src/registry.d.ts:27:5 - (ae-undocumented) Missing documentation for "bitbucketServer". +// src/registry.d.ts:28:5 - (ae-undocumented) Missing documentation for "gerrit". +// src/registry.d.ts:29:5 - (ae-undocumented) Missing documentation for "github". +// src/registry.d.ts:30:5 - (ae-undocumented) Missing documentation for "gitlab". +// src/registry.d.ts:31:5 - (ae-undocumented) Missing documentation for "gitea". +// src/registry.d.ts:32:5 - (ae-undocumented) Missing documentation for "harness". +// src/types.d.ts:93:5 - (ae-undocumented) Missing documentation for "isRateLimited". ``` diff --git a/packages/opaque-internal/src/OpaqueType.test.ts b/packages/opaque-internal/src/OpaqueType.test.ts index 2e49ca9029..94fcb18d36 100644 --- a/packages/opaque-internal/src/OpaqueType.test.ts +++ b/packages/opaque-internal/src/OpaqueType.test.ts @@ -413,4 +413,40 @@ describe('OpaqueType', () => { expect(myInternal.$$type).toBe('my-type'); expect(myInternal.version).toBe(undefined); }); + + it('should work with class implementations', () => { + type MyType = { + $$type: 'my-type'; + }; + + const OpaqueMyType = OpaqueType.create<{ + public: MyType; + versions: { + version: 'v1'; + getX(): number; + }; + }>({ + type: 'my-type', + versions: ['v1'], + }); + + class MyTypeImpl { + getX() { + return 4; + } + } + + const myInstance = OpaqueMyType.createInstance('v1', new MyTypeImpl()); + + expect(myInstance.$$type).toBe('my-type'); + + expect(OpaqueMyType.isType(myInstance)).toBe(true); + + const myInternal = OpaqueMyType.toInternal(myInstance); + expect(myInternal).toBe(myInstance); + + expect(myInternal.$$type).toBe('my-type'); + expect(myInternal.version).toBe('v1'); + expect(myInternal.getX()).toBe(4); + }); }); diff --git a/packages/opaque-internal/src/OpaqueType.ts b/packages/opaque-internal/src/OpaqueType.ts index 7b6b6e0767..dd17f21da8 100644 --- a/packages/opaque-internal/src/OpaqueType.ts +++ b/packages/opaque-internal/src/OpaqueType.ts @@ -135,11 +135,10 @@ export class OpaqueType< : never) & Object, // & Object to allow for object properties too, e.g. toString() ): TPublic { - return { - ...(props as object), + return Object.assign(props as object, { $$type: this.#type, ...(version && { version }), - } as unknown as TPublic; + }) as unknown as TPublic; } #isThisInternalType(value: unknown): value is T['public'] & T['versions'] { diff --git a/packages/release-manifests/api-report.md b/packages/release-manifests/report.api.md similarity index 100% rename from packages/release-manifests/api-report.md rename to packages/release-manifests/report.api.md diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index 4157990d6c..7e772a99c0 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/repo-tools +## 0.10.0-next.0 + +### Minor Changes + +- 30c2be9: Update @microsoft/api-extractor and use their api report resolution. + Change api report format from `api-report.md` to `report.api.md` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + ## 0.9.7 ### Patch Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 8fcd5079a3..8e9f705671 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/repo-tools", - "version": "0.9.7", + "version": "0.10.0-next.0", "description": "CLI for Backstage repo tooling ", "backstage": { "role": "cli" @@ -50,8 +50,8 @@ "@backstage/config-loader": "workspace:^", "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3", - "@microsoft/api-documenter": "^7.22.33", - "@microsoft/api-extractor": "^7.36.4", + "@microsoft/api-documenter": "^7.25.7", + "@microsoft/api-extractor": "^7.47.2", "@openapitools/openapi-generator-cli": "^2.7.0", "@stoplight/spectral-core": "^1.18.0", "@stoplight/spectral-formatters": "^1.1.0", diff --git a/packages/repo-tools/src/commands/api-reports/api-extractor.ts b/packages/repo-tools/src/commands/api-reports/api-extractor.ts index 371f122713..70b4e54739 100644 --- a/packages/repo-tools/src/commands/api-reports/api-extractor.ts +++ b/packages/repo-tools/src/commands/api-reports/api-extractor.ts @@ -393,21 +393,20 @@ export async function runApiExtraction({ ); const remainingReportFiles = new Set( - fs - .readdirSync(projectFolder) - .filter( - filename => - filename.match(/^(.+)-api-report\.md$/) || - filename.match(/^api-report(-.+)?\.md$/), - ), + fs.readdirSync(projectFolder).filter( + filename => + // https://regex101.com/r/QDZIV0/2 + filename !== 'knip-report.md' && + // this has to temporarily match all old api report formats + filename.match(/^.*?(api-)?report(-[^.-]+)?(.*?)\.md$/), + ), ); for (const packageEntryPoint of packageEntryPoints) { const suffix = packageEntryPoint.name === 'index' ? '' : `-${packageEntryPoint.name}`; - const reportFileName = `api-report${suffix}.md`; + const reportFileName = `report${suffix}`; const reportPath = resolvePath(projectFolder, reportFileName); - remainingReportFiles.delete(reportFileName); const warningCountBefore = await countApiReportWarnings(reportPath); @@ -485,6 +484,11 @@ export async function runApiExtraction({ ignoreMissingEntryPoint: true, }); + // remove extracted reports from current list + for (const reportConfig of extractorConfig.reportConfigs) { + remainingReportFiles.delete(reportConfig.fileName); + } + // The `packageFolder` needs to point to the location within `dist-types` in order for relative // paths to be logged. Unfortunately the `prepare` method above derives it from the `packageJsonFullPath`, // which needs to point to the actual file, so we override `packageFolder` afterwards. @@ -522,7 +526,7 @@ export async function runApiExtraction({ ) { shouldLogInstructions = true; const match = message.text.match( - /Please copy the file "(.*)" to "api-report\.md"/, + /Please copy the file "(.*)" to "api-report\.api\.md"/, ); if (match) { conflictingFile = match[1]; diff --git a/packages/scaffolder-internal/.eslintrc.js b/packages/scaffolder-internal/.eslintrc.js new file mode 100644 index 0000000000..e487f765b2 --- /dev/null +++ b/packages/scaffolder-internal/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/packages/scaffolder-internal/CHANGELOG.md b/packages/scaffolder-internal/CHANGELOG.md new file mode 100644 index 0000000000..f0f7a9767b --- /dev/null +++ b/packages/scaffolder-internal/CHANGELOG.md @@ -0,0 +1,8 @@ +# @internal/scaffolder + +## 0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.0-next.0 diff --git a/packages/scaffolder-internal/README.md b/packages/scaffolder-internal/README.md new file mode 100644 index 0000000000..e7e6abeb57 --- /dev/null +++ b/packages/scaffolder-internal/README.md @@ -0,0 +1,3 @@ +# @internal/scaffolder + +This is an internal package used by the other scaffolder packages. It does not get published to NPM, but instead inlined into consuming packages due to the `backstage.inline` flag in `package.json`. diff --git a/packages/scaffolder-internal/catalog-info.yaml b/packages/scaffolder-internal/catalog-info.yaml new file mode 100644 index 0000000000..c2c2c013d3 --- /dev/null +++ b/packages/scaffolder-internal/catalog-info.yaml @@ -0,0 +1,9 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: internal-scaffolder + title: '@internal/scaffolder' +spec: + lifecycle: experimental + type: backstage-web-library + owner: maintainers diff --git a/packages/scaffolder-internal/package.json b/packages/scaffolder-internal/package.json new file mode 100644 index 0000000000..3df80f36ec --- /dev/null +++ b/packages/scaffolder-internal/package.json @@ -0,0 +1,32 @@ +{ + "name": "@internal/scaffolder", + "version": "0.0.2-next.0", + "backstage": { + "role": "web-library", + "inline": true + }, + "private": true, + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "packages/scaffolder-internal" + }, + "license": "Apache-2.0", + "sideEffects": false, + "main": "src/index.ts", + "types": "src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "lint": "backstage-cli package lint", + "test": "backstage-cli package test" + }, + "dependencies": { + "@backstage/plugin-scaffolder-react": "workspace:^", + "zod": "^3.22.4" + }, + "devDependencies": { + "@backstage/cli": "workspace:^" + } +} diff --git a/packages/cli/src/commands/onboard/index.ts b/packages/scaffolder-internal/src/index.ts similarity index 88% rename from packages/cli/src/commands/onboard/index.ts rename to packages/scaffolder-internal/src/index.ts index 4c23ea6e48..a5728f2ff6 100644 --- a/packages/cli/src/commands/onboard/index.ts +++ b/packages/scaffolder-internal/src/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -14,4 +14,4 @@ * limitations under the License. */ -export { command } from './command'; +export * from './wiring'; diff --git a/packages/scaffolder-internal/src/wiring/InternalFormField.ts b/packages/scaffolder-internal/src/wiring/InternalFormField.ts new file mode 100644 index 0000000000..5d7bf1ee7d --- /dev/null +++ b/packages/scaffolder-internal/src/wiring/InternalFormField.ts @@ -0,0 +1,33 @@ +/* + * Copyright 2024 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 { OpaqueType } from '@internal/opaque'; +import { z } from 'zod'; + +import { FormFieldExtensionData } from '@backstage/plugin-scaffolder-react/alpha'; + +/** @alpha */ +export interface FormField { + readonly $$type: '@backstage/scaffolder/FormField'; +} + +/** @alpha */ +export const OpaqueFormField = OpaqueType.create<{ + public: FormField; + versions: FormFieldExtensionData & { + readonly version: 'v1'; + }; +}>({ type: '@backstage/scaffolder/FormField', versions: ['v1'] }); diff --git a/packages/scaffolder-internal/src/wiring/index.ts b/packages/scaffolder-internal/src/wiring/index.ts new file mode 100644 index 0000000000..c85755bccf --- /dev/null +++ b/packages/scaffolder-internal/src/wiring/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2024 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 { OpaqueFormField, type FormField } from './InternalFormField'; diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 6ed813c269..82cede0446 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.101-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 0.2.100 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 1ea64aa69f..249ec2f062 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.100", + "version": "0.2.101-next.0", "backstage": { "role": "frontend" }, diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 86b76032d3..fefd4d2513 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @techdocs/cli +## 1.8.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + ## 1.8.19 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index c72c080caf..12ae968f2e 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,6 +1,6 @@ { "name": "@techdocs/cli", - "version": "1.8.19", + "version": "1.8.20-next.0", "description": "Utility CLI for managing TechDocs sites in Backstage.", "backstage": { "role": "cli" @@ -35,8 +35,8 @@ "prepack": "./scripts/prepack.sh", "start": "nodemon --", "test": "backstage-cli package test", - "test:e2e": "backstage-cli test --config cli-e2e-test.config.js", - "test:e2e:ci": "backstage-cli test --config cli-e2e-test.config.js --watchAll=false --ci" + "test:e2e": "backstage-cli package test --config cli-e2e-test.config.js", + "test:e2e:ci": "backstage-cli package test --config cli-e2e-test.config.js --watchAll=false --ci" }, "nodemonConfig": { "exec": "bin/techdocs-cli", diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 8f9721f1ea..b749d728f8 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 1.6.0 ### Minor Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 6ca282d9ec..b504419e76 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/test-utils", - "version": "1.6.0", + "version": "1.6.1-next.0", "description": "Utilities to test Backstage plugins and apps.", "backstage": { "role": "web-library" diff --git a/packages/test-utils/api-report-alpha.md b/packages/test-utils/report-alpha.api.md similarity index 63% rename from packages/test-utils/api-report-alpha.md rename to packages/test-utils/report-alpha.api.md index 945c754f83..ba098135fb 100644 --- a/packages/test-utils/api-report-alpha.md +++ b/packages/test-utils/report-alpha.api.md @@ -28,5 +28,12 @@ export class MockTranslationApi implements TranslationApi { >(): Observable>; } +// Warnings were encountered during analysis: +// +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "MockTranslationApi". +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:6:5 - (ae-undocumented) Missing documentation for "create". +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:8:5 - (ae-undocumented) Missing documentation for "getTranslation". +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:11:5 - (ae-undocumented) Missing documentation for "translation$". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/test-utils/api-report.md b/packages/test-utils/report.api.md similarity index 82% rename from packages/test-utils/api-report.md rename to packages/test-utils/report.api.md index ae54c588ba..4a1f297c4e 100644 --- a/packages/test-utils/api-report.md +++ b/packages/test-utils/report.api.md @@ -83,37 +83,21 @@ export function mockBreakpoint(options: { matches: boolean }): void; // @public export class MockConfigApi implements ConfigApi { constructor(data: JsonObject); - // (undocumented) get(key?: string): T; - // (undocumented) getBoolean(key: string): boolean; - // (undocumented) getConfig(key: string): Config; - // (undocumented) getConfigArray(key: string): Config[]; - // (undocumented) getNumber(key: string): number; - // (undocumented) getOptional(key?: string): T | undefined; - // (undocumented) getOptionalBoolean(key: string): boolean | undefined; - // (undocumented) getOptionalConfig(key: string): Config | undefined; - // (undocumented) getOptionalConfigArray(key: string): Config[] | undefined; - // (undocumented) getOptionalNumber(key: string): number | undefined; - // (undocumented) getOptionalString(key: string): string | undefined; - // (undocumented) getOptionalStringArray(key: string): string[] | undefined; - // (undocumented) getString(key: string): string; - // (undocumented) getStringArray(key: string): string[]; - // (undocumented) has(key: string): boolean; - // (undocumented) keys(): string[]; } @@ -141,7 +125,6 @@ export type MockErrorApiOptions = { // @public export class MockFetchApi implements FetchApi { constructor(options?: MockFetchApiOptions); - // (undocumented) get fetch(): typeof crossFetch; } @@ -289,4 +272,21 @@ export function wrapInTestApp( Component: ComponentType | ReactNode, options?: TestAppOptions, ): ReactElement; + +// Warnings were encountered during analysis: +// +// src/deprecated.d.ts:5:1 - (ae-undocumented) Missing documentation for "setupRequestMockHandlers". +// src/testUtils/apis/AnalyticsApi/MockAnalyticsApi.d.ts:10:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/testUtils/apis/AnalyticsApi/MockAnalyticsApi.d.ts:11:5 - (ae-undocumented) Missing documentation for "getEvents". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:28:5 - (ae-undocumented) Missing documentation for "post". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:29:5 - (ae-undocumented) Missing documentation for "error$". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:33:5 - (ae-undocumented) Missing documentation for "getErrors". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:34:5 - (ae-undocumented) Missing documentation for "waitForError". +// src/testUtils/apis/PermissionApi/MockPermissionApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "authorize". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:19:5 - (ae-undocumented) Missing documentation for "create". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:20:5 - (ae-undocumented) Missing documentation for "forBucket". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:21:5 - (ae-undocumented) Missing documentation for "snapshot". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:22:5 - (ae-undocumented) Missing documentation for "set". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:23:5 - (ae-undocumented) Missing documentation for "remove". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:24:5 - (ae-undocumented) Missing documentation for "observe$". ``` diff --git a/packages/theme/api-report.md b/packages/theme/report.api.md similarity index 81% rename from packages/theme/api-report.md rename to packages/theme/report.api.md index 988569ece7..b380ce9fd1 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/report.api.md @@ -459,4 +459,30 @@ export interface UnifiedThemeProviderProps { // (undocumented) theme: UnifiedTheme; } + +// Warnings were encountered during analysis: +// +// src/base/createBaseThemeOptions.d.ts:14:5 - (ae-undocumented) Missing documentation for "palette". +// src/base/createBaseThemeOptions.d.ts:15:5 - (ae-undocumented) Missing documentation for "defaultPageTheme". +// src/base/createBaseThemeOptions.d.ts:16:5 - (ae-undocumented) Missing documentation for "pageTheme". +// src/base/createBaseThemeOptions.d.ts:17:5 - (ae-undocumented) Missing documentation for "fontFamily". +// src/base/createBaseThemeOptions.d.ts:18:5 - (ae-undocumented) Missing documentation for "htmlFontSize". +// src/base/createBaseThemeOptions.d.ts:19:5 - (ae-undocumented) Missing documentation for "typography". +// src/unified/UnifiedTheme.d.ts:17:5 - (ae-undocumented) Missing documentation for "palette". +// src/unified/UnifiedTheme.d.ts:18:5 - (ae-undocumented) Missing documentation for "defaultPageTheme". +// src/unified/UnifiedTheme.d.ts:19:5 - (ae-undocumented) Missing documentation for "pageTheme". +// src/unified/UnifiedTheme.d.ts:20:5 - (ae-undocumented) Missing documentation for "fontFamily". +// src/unified/UnifiedTheme.d.ts:21:5 - (ae-undocumented) Missing documentation for "htmlFontSize". +// src/unified/UnifiedTheme.d.ts:22:5 - (ae-undocumented) Missing documentation for "components". +// src/unified/UnifiedTheme.d.ts:23:5 - (ae-undocumented) Missing documentation for "typography". +// src/unified/UnifiedThemeProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "children". +// src/unified/UnifiedThemeProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "theme". +// src/unified/UnifiedThemeProvider.d.ts:11:5 - (ae-undocumented) Missing documentation for "noCssBaseline". +// src/unified/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "getTheme". +// src/v4/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "palette". +// src/v4/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "page". +// src/v4/types.d.ts:33:5 - (ae-undocumented) Missing documentation for "getPageTheme". +// src/v4/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "palette". +// src/v4/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "page". +// src/v4/types.d.ts:44:5 - (ae-undocumented) Missing documentation for "getPageTheme". ``` diff --git a/packages/types/api-report.md b/packages/types/report.api.md similarity index 100% rename from packages/types/api-report.md rename to packages/types/report.api.md diff --git a/packages/version-bridge/api-report.md b/packages/version-bridge/report.api.md similarity index 100% rename from packages/version-bridge/api-report.md rename to packages/version-bridge/report.api.md diff --git a/packages/yarn-plugin/api-report.md b/packages/yarn-plugin/report.api.md similarity index 68% rename from packages/yarn-plugin/api-report.md rename to packages/yarn-plugin/report.api.md index f0300ec9a1..b246b802bb 100644 --- a/packages/yarn-plugin/api-report.md +++ b/packages/yarn-plugin/report.api.md @@ -8,4 +8,8 @@ import { Plugin as Plugin_2 } from '@yarnpkg/core'; // @public (undocumented) const plugin: Plugin_2; export default plugin; + +// Warnings were encountered during analysis: +// +// src/index.d.ts:11:15 - (ae-undocumented) Missing documentation for "plugin". ``` diff --git a/plugins/api-docs-module-protoc-gen-doc/api-report.md b/plugins/api-docs-module-protoc-gen-doc/report.api.md similarity index 72% rename from plugins/api-docs-module-protoc-gen-doc/api-report.md rename to plugins/api-docs-module-protoc-gen-doc/report.api.md index 836f8313d8..355b867e9a 100644 --- a/plugins/api-docs-module-protoc-gen-doc/api-report.md +++ b/plugins/api-docs-module-protoc-gen-doc/report.api.md @@ -11,4 +11,8 @@ export const grpcDocsApiWidget: { title: string; component: (definition: string) => React_2.JSX.Element; }; + +// Warnings were encountered during analysis: +// +// src/widgets.d.ts:5:22 - (ae-undocumented) Missing documentation for "grpcDocsApiWidget". ``` diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 4613c5b04b..4ad212412b 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-api-docs +## 0.11.10-next.0 + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 0.11.9 ### Patch Changes diff --git a/plugins/api-docs/README-alpha.md b/plugins/api-docs/README-alpha.md index 07f4d5b6bc..d92fdb53da 100644 --- a/plugins/api-docs/README-alpha.md +++ b/plugins/api-docs/README-alpha.md @@ -309,7 +309,7 @@ See a complete cards list below: ##### Has Apis Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of entities that have an api relation with a particular Software catalog entity. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of entities that have an api relation with a particular Software catalog entity. | Kind | Namespace | Name | Id | | ------------- | ---------- | ---------- | ------------------------------- | @@ -382,7 +382,7 @@ For more information about where to place extension overrides, see the official ##### Definition Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders an entity api definition widget. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders an entity api definition widget. | Kind | Namespace | Name | Id | | ------------- | ---------- | ------------ | --------------------------------- | @@ -455,7 +455,7 @@ For more information about where to place extension overrides, see the official ##### Provided Apis Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of apis provided by a particular Software Catalog Component. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of apis provided by a particular Software Catalog Component. | Kind | Namespace | Name | Id | | ------------- | ---------- | --------------- | ------------------------------------ | @@ -528,7 +528,7 @@ For more information about where to place extension overrides, see the official ##### Consumed Apis Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of apis consumed by a particular Software Catalog Component. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of apis consumed by a particular Software Catalog Component. | Kind | Namespace | Name | Id | | ------------- | ---------- | --------------- | ------------------------------------ | @@ -601,7 +601,7 @@ For more information about where to place extension overrides, see the official ##### Providing Components Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of components that provides a particular Software Catalog api. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of components that provides a particular Software Catalog api. | Kind | Namespace | Name | Id | | ------------- | ---------- | ---------------------- | ------------------------------------------- | @@ -676,7 +676,7 @@ For more information about where to place extension overrides, see the official ##### Consuming Components Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of components that consumes a particular Software Catalog api. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of components that consumes a particular Software Catalog api. | Kind | Namespace | Name | Id | | ------------- | ---------- | ---------------------- | ------------------------------------------- | @@ -760,7 +760,7 @@ See a complete contents list below: ##### Definition Entity Content -An [entity content](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a tab in the entity page showing a particular entity api definition. +An [entity content](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a tab in the entity page showing a particular entity api definition. | Kind | Namespace | Name | Id | | ---------------- | ---------- | ------------ | ------------------------------------ | diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 2dbfd8c084..9adaf2319d 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-api-docs", - "version": "0.11.9", + "version": "0.11.10-next.0", "description": "A Backstage plugin that helps represent API entities in the frontend", "backstage": { "role": "frontend-plugin", diff --git a/plugins/api-docs/api-report-alpha.md b/plugins/api-docs/report-alpha.api.md similarity index 98% rename from plugins/api-docs/api-report-alpha.md rename to plugins/api-docs/report-alpha.api.md index 820978b877..274d5d4aac 100644 --- a/plugins/api-docs/api-report-alpha.md +++ b/plugins/api-docs/report-alpha.api.md @@ -427,5 +427,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/api-docs/api-report.md b/plugins/api-docs/report.api.md similarity index 62% rename from plugins/api-docs/api-report.md rename to plugins/api-docs/report.api.md index 3c3f245a3c..74318781c8 100644 --- a/plugins/api-docs/api-report.md +++ b/plugins/api-docs/report.api.md @@ -229,4 +229,38 @@ export const TrpcApiDefinitionWidget: ( export type TrpcApiDefinitionWidgetProps = { definition: string; }; + +// Warnings were encountered during analysis: +// +// src/components/ApiDefinitionCard/ApiDefinitionCard.d.ts:3:22 - (ae-undocumented) Missing documentation for "ApiDefinitionCard". +// src/components/ApiDefinitionCard/ApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "ApiDefinitionWidget". +// src/components/ApiDefinitionCard/ApiDefinitionWidget.d.ts:10:1 - (ae-undocumented) Missing documentation for "defaultDefinitionWidgets". +// src/components/ApiDefinitionCard/ApiTypeTitle.d.ts:6:22 - (ae-undocumented) Missing documentation for "ApiTypeTitle". +// src/components/ApisCards/ConsumedApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConsumedApisCard". +// src/components/ApisCards/HasApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "HasApisCard". +// src/components/ApisCards/ProvidedApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ProvidedApisCard". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.d.ts:4:1 - (ae-undocumented) Missing documentation for "AsyncApiResolver". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:4:1 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidgetProps". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:9:22 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidget". +// src/components/ComponentsCards/ConsumingComponentsCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConsumingComponentsCard". +// src/components/ComponentsCards/ProvidingComponentsCard.d.ts:5:22 - (ae-undocumented) Missing documentation for "ProvidingComponentsCard". +// src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "GraphQlDefinitionWidgetProps". +// src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.d.ts:7:22 - (ae-undocumented) Missing documentation for "GraphQlDefinitionWidget". +// src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "OpenApiDefinitionWidgetProps". +// src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.d.ts:9:22 - (ae-undocumented) Missing documentation for "OpenApiDefinitionWidget". +// src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "PlainApiDefinitionWidgetProps". +// src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.d.ts:8:22 - (ae-undocumented) Missing documentation for "PlainApiDefinitionWidget". +// src/components/TrpcDefinitionWidget/TrpcApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "TrpcApiDefinitionWidgetProps". +// src/components/TrpcDefinitionWidget/TrpcApiDefinitionWidget.d.ts:7:22 - (ae-undocumented) Missing documentation for "TrpcApiDefinitionWidget". +// src/config.d.ts:4:22 - (ae-undocumented) Missing documentation for "apiDocsConfigRef". +// src/config.d.ts:6:1 - (ae-undocumented) Missing documentation for "ApiDocsConfig". +// src/config.d.ts:7:5 - (ae-undocumented) Missing documentation for "getApiDefinitionWidget". +// src/plugin.d.ts:4:22 - (ae-undocumented) Missing documentation for "apiDocsPlugin". +// src/plugin.d.ts:10:22 - (ae-undocumented) Missing documentation for "ApiExplorerPage". +// src/plugin.d.ts:12:22 - (ae-undocumented) Missing documentation for "EntityApiDefinitionCard". +// src/plugin.d.ts:14:22 - (ae-undocumented) Missing documentation for "EntityConsumedApisCard". +// src/plugin.d.ts:21:22 - (ae-undocumented) Missing documentation for "EntityConsumingComponentsCard". +// src/plugin.d.ts:26:22 - (ae-undocumented) Missing documentation for "EntityProvidedApisCard". +// src/plugin.d.ts:33:22 - (ae-undocumented) Missing documentation for "EntityProvidingComponentsCard". +// src/plugin.d.ts:38:22 - (ae-undocumented) Missing documentation for "EntityHasApisCard". ``` diff --git a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.test.tsx b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.test.tsx index d664ce78e8..95e279bad5 100644 --- a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.test.tsx +++ b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.test.tsx @@ -62,7 +62,7 @@ describe('', () => { relations: [], }; - const { getByText } = await renderInTestApp( + const { getByText, getByRole, container } = await renderInTestApp( @@ -77,6 +77,17 @@ describe('', () => { expect(getByText(/Consumed APIs/i)).toBeInTheDocument(); expect(getByText(/does not consume any APIs/i)).toBeInTheDocument(); + + // Also render external link icon + const externalLink = getByRole('link'); + expect(externalLink).toHaveAttribute( + 'href', + 'https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional', + ); + const externalLinkIcon: HTMLElement | null = container.querySelector( + 'svg[class*="externalLink"]', + ); + expect(externalLink).toContainElement(externalLinkIcon); }); it('shows consumed APIs', async () => { diff --git a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx index f68e6dcb40..0e0518a58f 100644 --- a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx @@ -85,8 +85,11 @@ export const ConsumedApisCard = (props: { APIs. - - Learn how to change this. + + Learn how to change this diff --git a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx index 3dbc4edd63..8c4f7dd26b 100644 --- a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx +++ b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx @@ -62,7 +62,7 @@ describe('', () => { relations: [], }; - const { getByText } = await renderInTestApp( + const { getByText, getByRole, container } = await renderInTestApp( @@ -77,6 +77,18 @@ describe('', () => { expect(getByText(/Provided APIs/i)).toBeInTheDocument(); expect(getByText(/does not provide any APIs/i)).toBeInTheDocument(); + expect(getByText(/Learn how to change this/)).toBeInTheDocument(); + + // Also render external link icon + const externalLink = getByRole('link'); + expect(externalLink).toHaveAttribute( + 'href', + 'https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional', + ); + const externalLinkIcon: HTMLElement | null = container.querySelector( + 'svg[class*="externalLink"]', + ); + expect(externalLink).toContainElement(externalLinkIcon); }); it('shows consumed APIs', async () => { diff --git a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx index 48099df375..f89f411488 100644 --- a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx @@ -84,11 +84,12 @@ export const ProvidedApisCard = (props: { This {entity.kind.toLocaleLowerCase('en-US')} does not provide any APIs. - - - Learn how to change this. - - + + Learn how to change this + } columns={columns} diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index ca9f7378bb..4323aed5af 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-app-backend +## 0.3.75-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + ## 0.3.74 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 29803243cd..c7316a9815 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-backend", - "version": "0.3.74", + "version": "0.3.75-next.0", "description": "A Backstage backend plugin that serves the Backstage frontend app", "backstage": { "role": "backend-plugin", diff --git a/plugins/app-backend/api-report-alpha.md b/plugins/app-backend/report-alpha.api.md similarity index 100% rename from plugins/app-backend/api-report-alpha.md rename to plugins/app-backend/report-alpha.api.md diff --git a/plugins/app-backend/api-report.md b/plugins/app-backend/report.api.md similarity index 65% rename from plugins/app-backend/api-report.md rename to plugins/app-backend/report.api.md index bb0ebb67db..ab36eb95d3 100644 --- a/plugins/app-backend/api-report.md +++ b/plugins/app-backend/report.api.md @@ -30,4 +30,13 @@ export interface RouterOptions { schema?: ConfigSchema; staticFallbackHandler?: express.Handler; } + +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:61:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md index fba5878502..c90ba12e47 100644 --- a/plugins/app-node/CHANGELOG.md +++ b/plugins/app-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-app-node +## 0.1.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config-loader@1.9.1 + ## 0.1.25 ### Patch Changes diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json index 147fb21ba1..7c18c414d3 100644 --- a/plugins/app-node/package.json +++ b/plugins/app-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-node", - "version": "0.1.25", + "version": "0.1.26-next.0", "description": "Node.js library for the app plugin", "backstage": { "role": "node-library", diff --git a/plugins/app-node/api-report.md b/plugins/app-node/report.api.md similarity index 100% rename from plugins/app-node/api-report.md rename to plugins/app-node/report.api.md diff --git a/plugins/app-visualizer/CHANGELOG.md b/plugins/app-visualizer/CHANGELOG.md index 507812098d..239452185e 100644 --- a/plugins/app-visualizer/CHANGELOG.md +++ b/plugins/app-visualizer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-app-visualizer +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + ## 0.1.10 ### Patch Changes diff --git a/plugins/app-visualizer/package.json b/plugins/app-visualizer/package.json index cb373cde4f..b25b27d60c 100644 --- a/plugins/app-visualizer/package.json +++ b/plugins/app-visualizer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-visualizer", - "version": "0.1.10", + "version": "0.1.11-next.0", "description": "Visualizes the Backstage app structure", "backstage": { "role": "frontend-plugin", diff --git a/plugins/app-visualizer/api-report.md b/plugins/app-visualizer/report.api.md similarity index 93% rename from plugins/app-visualizer/api-report.md rename to plugins/app-visualizer/report.api.md index 48eca04ed8..15f7384c42 100644 --- a/plugins/app-visualizer/api-report.md +++ b/plugins/app-visualizer/report.api.md @@ -71,5 +71,9 @@ const visualizerPlugin: FrontendPlugin< >; export default visualizerPlugin; +// Warnings were encountered during analysis: +// +// src/plugin.d.ts:20:22 - (ae-undocumented) Missing documentation for "visualizerPlugin". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/app/CHANGELOG.md b/plugins/app/CHANGELOG.md index 2da55bbed8..9d9775af86 100644 --- a/plugins/app/CHANGELOG.md +++ b/plugins/app/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/app/package.json b/plugins/app/package.json index 5609548942..39459854d0 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app", - "version": "0.1.0", + "version": "0.1.1-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "app", diff --git a/plugins/app/api-report.md b/plugins/app/report.api.md similarity index 99% rename from plugins/app/api-report.md rename to plugins/app/report.api.md index c8fb0a94d9..1ff398a346 100644 --- a/plugins/app/api-report.md +++ b/plugins/app/report.api.md @@ -709,5 +709,9 @@ const appPlugin: FrontendPlugin< >; export default appPlugin; +// Warnings were encountered during analysis: +// +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "appPlugin". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md index 56e401334e..b1230577b7 100644 --- a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-atlassian-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-atlassian-provider/package.json b/plugins/auth-backend-module-atlassian-provider/package.json index b5a78be89d..5adb3ab81d 100644 --- a/plugins/auth-backend-module-atlassian-provider/package.json +++ b/plugins/auth-backend-module-atlassian-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-atlassian-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The atlassian-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-atlassian-provider/api-report.md b/plugins/auth-backend-module-atlassian-provider/report.api.md similarity index 80% rename from plugins/auth-backend-module-atlassian-provider/api-report.md rename to plugins/auth-backend-module-atlassian-provider/report.api.md index 7abdf7ee70..7f32330451 100644 --- a/plugins/auth-backend-module-atlassian-provider/api-report.md +++ b/plugins/auth-backend-module-atlassian-provider/report.api.md @@ -27,4 +27,9 @@ export namespace atlassianSignInResolvers { // @public (undocumented) const authModuleAtlassianProvider: BackendFeature; export default authModuleAtlassianProvider; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "atlassianAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAtlassianProvider". ``` diff --git a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md index f4bf40485b..f1ea8d2dd9 100644 --- a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-auth0-provider +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/auth-backend-module-auth0-provider/package.json b/plugins/auth-backend-module-auth0-provider/package.json index fec3fefa68..491337e021 100644 --- a/plugins/auth-backend-module-auth0-provider/package.json +++ b/plugins/auth-backend-module-auth0-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-auth0-provider", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The auth0-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-auth0-provider/api-report.md b/plugins/auth-backend-module-auth0-provider/report.api.md similarity index 77% rename from plugins/auth-backend-module-auth0-provider/api-report.md rename to plugins/auth-backend-module-auth0-provider/report.api.md index fb7aa9d0ba..2d1b9074b4 100644 --- a/plugins/auth-backend-module-auth0-provider/api-report.md +++ b/plugins/auth-backend-module-auth0-provider/report.api.md @@ -22,4 +22,9 @@ export const auth0Authenticator: OAuthAuthenticator< // @public (undocumented) const authModuleAuth0Provider: BackendFeature; export default authModuleAuth0Provider; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "auth0Authenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAuth0Provider". ``` diff --git a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md index 520946d208..2a25a4df9e 100644 --- a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-auth-backend-module-aws-alb-provider +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-aws-alb-provider/package.json b/plugins/auth-backend-module-aws-alb-provider/package.json index b65f1de631..c62da2e29e 100644 --- a/plugins/auth-backend-module-aws-alb-provider/package.json +++ b/plugins/auth-backend-module-aws-alb-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-aws-alb-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The aws-alb provider module for the Backstage auth backend.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-aws-alb-provider/api-report.md b/plugins/auth-backend-module-aws-alb-provider/report.api.md similarity index 78% rename from plugins/auth-backend-module-aws-alb-provider/api-report.md rename to plugins/auth-backend-module-aws-alb-provider/report.api.md index b3a9ce4517..c7437a1b9d 100644 --- a/plugins/auth-backend-module-aws-alb-provider/api-report.md +++ b/plugins/auth-backend-module-aws-alb-provider/report.api.md @@ -46,4 +46,10 @@ export namespace awsAlbSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:6:22 - (ae-undocumented) Missing documentation for "awsAlbAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAwsAlbProvider". +// src/resolvers.d.ts:8:11 - (ae-undocumented) Missing documentation for "emailMatchingUserEntityProfileEmail". ``` diff --git a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md index 96fcc428c5..fcb9779e22 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-azure-easyauth-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-azure-easyauth-provider/package.json b/plugins/auth-backend-module-azure-easyauth-provider/package.json index 860999bb0c..83245bfa68 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/package.json +++ b/plugins/auth-backend-module-azure-easyauth-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-azure-easyauth-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The azure-easyauth-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-azure-easyauth-provider/api-report.md b/plugins/auth-backend-module-azure-easyauth-provider/report.api.md similarity index 66% rename from plugins/auth-backend-module-azure-easyauth-provider/api-report.md rename to plugins/auth-backend-module-azure-easyauth-provider/report.api.md index 9d337e3f34..3292654787 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/api-report.md +++ b/plugins/auth-backend-module-azure-easyauth-provider/report.api.md @@ -36,5 +36,13 @@ export namespace azureEasyAuthSignInResolvers { >; } +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:5:22 - (ae-undocumented) Missing documentation for "azureEasyAuthAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAzureEasyAuthProvider". +// src/resolvers.d.ts:3:1 - (ae-undocumented) Missing documentation for "azureEasyAuthSignInResolvers". +// src/resolvers.d.ts:4:11 - (ae-undocumented) Missing documentation for "idMatchingUserEntityAnnotation". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "AzureEasyAuthResult". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md index aadf524f47..521f5dfe93 100644 --- a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-bitbucket-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-bitbucket-provider/package.json b/plugins/auth-backend-module-bitbucket-provider/package.json index f33c7e6819..42dcb65ed9 100644 --- a/plugins/auth-backend-module-bitbucket-provider/package.json +++ b/plugins/auth-backend-module-bitbucket-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-bitbucket-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The bitbucket-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-bitbucket-provider/api-report.md b/plugins/auth-backend-module-bitbucket-provider/report.api.md similarity index 82% rename from plugins/auth-backend-module-bitbucket-provider/api-report.md rename to plugins/auth-backend-module-bitbucket-provider/report.api.md index ceb4141fd9..210a292050 100644 --- a/plugins/auth-backend-module-bitbucket-provider/api-report.md +++ b/plugins/auth-backend-module-bitbucket-provider/report.api.md @@ -31,4 +31,9 @@ export namespace bitbucketSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "bitbucketAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleBitbucketProvider". ``` diff --git a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md index c9c4f119ba..92daf8bb1c 100644 --- a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-bitbucket-server-provider +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/auth-backend-module-bitbucket-server-provider/package.json b/plugins/auth-backend-module-bitbucket-server-provider/package.json index 8d58fab60c..d18a9b0111 100644 --- a/plugins/auth-backend-module-bitbucket-server-provider/package.json +++ b/plugins/auth-backend-module-bitbucket-server-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-bitbucket-server-provider", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The bitbucket-server-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-bitbucket-server-provider/api-report.md b/plugins/auth-backend-module-bitbucket-server-provider/report.api.md similarity index 80% rename from plugins/auth-backend-module-bitbucket-server-provider/api-report.md rename to plugins/auth-backend-module-bitbucket-server-provider/report.api.md index d5c484f6e3..371873027a 100644 --- a/plugins/auth-backend-module-bitbucket-server-provider/api-report.md +++ b/plugins/auth-backend-module-bitbucket-server-provider/report.api.md @@ -30,4 +30,9 @@ export namespace bitbucketServerSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "bitbucketServerAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleBitbucketServerProvider". ``` diff --git a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md index 3ee07c8aba..faea9b49c3 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-cloudflare-access-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-cloudflare-access-provider/package.json b/plugins/auth-backend-module-cloudflare-access-provider/package.json index b696103e43..7c82ff38f0 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/package.json +++ b/plugins/auth-backend-module-cloudflare-access-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-cloudflare-access-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The cloudflare-access-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-cloudflare-access-provider/api-report.md b/plugins/auth-backend-module-cloudflare-access-provider/report.api.md similarity index 82% rename from plugins/auth-backend-module-cloudflare-access-provider/api-report.md rename to plugins/auth-backend-module-cloudflare-access-provider/report.api.md index 1547190d39..b9943b2bef 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/api-report.md +++ b/plugins/auth-backend-module-cloudflare-access-provider/report.api.md @@ -60,4 +60,10 @@ export namespace cloudflareAccessSignInResolvers { export function createCloudflareAccessAuthenticator(options?: { cache?: CacheService; }): ProxyAuthenticator; + +// Warnings were encountered during analysis: +// +// src/types.d.ts:55:1 - (ae-undocumented) Missing documentation for "CloudflareAccessGroup". +// src/types.d.ts:72:1 - (ae-undocumented) Missing documentation for "CloudflareAccessIdentityProfile". +// src/types.d.ts:81:1 - (ae-undocumented) Missing documentation for "CloudflareAccessResult". ``` diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md index b566f8ba6c..842c1b629c 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-gcp-iap-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-gcp-iap-provider/package.json b/plugins/auth-backend-module-gcp-iap-provider/package.json index d3db0f494f..988f012563 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/package.json +++ b/plugins/auth-backend-module-gcp-iap-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-gcp-iap-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "A GCP IAP auth provider module for the Backstage auth backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-gcp-iap-provider/api-report.md b/plugins/auth-backend-module-gcp-iap-provider/report.api.md similarity index 84% rename from plugins/auth-backend-module-gcp-iap-provider/api-report.md rename to plugins/auth-backend-module-gcp-iap-provider/report.api.md index 1476694f99..72887276d5 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/api-report.md +++ b/plugins/auth-backend-module-gcp-iap-provider/report.api.md @@ -50,5 +50,10 @@ export type GcpIapTokenInfo = { [key: string]: JsonPrimitive; }; +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:2:22 - (ae-undocumented) Missing documentation for "gcpIapAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGcpIapProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md index 8bf6992879..c2f108ecf3 100644 --- a/plugins/auth-backend-module-github-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-github-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json index 28a34d8618..8a70ee82b4 100644 --- a/plugins/auth-backend-module-github-provider/package.json +++ b/plugins/auth-backend-module-github-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-github-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The github-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-github-provider/api-report.md b/plugins/auth-backend-module-github-provider/report.api.md similarity index 80% rename from plugins/auth-backend-module-github-provider/api-report.md rename to plugins/auth-backend-module-github-provider/report.api.md index 222305adfd..0578c23d3e 100644 --- a/plugins/auth-backend-module-github-provider/api-report.md +++ b/plugins/auth-backend-module-github-provider/report.api.md @@ -27,4 +27,9 @@ export namespace githubSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "githubAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGithubProvider". ``` diff --git a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md index 81b3c4903f..cfd0db044f 100644 --- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-gitlab-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json index dcb663b599..68146cbe05 100644 --- a/plugins/auth-backend-module-gitlab-provider/package.json +++ b/plugins/auth-backend-module-gitlab-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-gitlab-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gitlab-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-gitlab-provider/api-report.md b/plugins/auth-backend-module-gitlab-provider/report.api.md similarity index 80% rename from plugins/auth-backend-module-gitlab-provider/api-report.md rename to plugins/auth-backend-module-gitlab-provider/report.api.md index 44c5ffb214..a72c00c6e5 100644 --- a/plugins/auth-backend-module-gitlab-provider/api-report.md +++ b/plugins/auth-backend-module-gitlab-provider/report.api.md @@ -27,4 +27,9 @@ export namespace gitlabSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "gitlabAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGitlabProvider". ``` diff --git a/plugins/auth-backend-module-google-provider/CHANGELOG.md b/plugins/auth-backend-module-google-provider/CHANGELOG.md index b633dbff58..4a20c3d9e4 100644 --- a/plugins/auth-backend-module-google-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-google-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json index 8a3c5c0b76..c0ee244873 100644 --- a/plugins/auth-backend-module-google-provider/package.json +++ b/plugins/auth-backend-module-google-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-google-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "A Google auth provider module for the Backstage auth backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-google-provider/api-report.md b/plugins/auth-backend-module-google-provider/report.api.md similarity index 81% rename from plugins/auth-backend-module-google-provider/api-report.md rename to plugins/auth-backend-module-google-provider/report.api.md index eeefb8e837..a2fc1bbce9 100644 --- a/plugins/auth-backend-module-google-provider/api-report.md +++ b/plugins/auth-backend-module-google-provider/report.api.md @@ -28,5 +28,10 @@ export namespace googleSignInResolvers { >; } +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "googleAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGoogleProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-guest-provider/CHANGELOG.md b/plugins/auth-backend-module-guest-provider/CHANGELOG.md index d3e948bfec..676f4b82ee 100644 --- a/plugins/auth-backend-module-guest-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-guest-provider/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-auth-backend-module-guest-provider +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-guest-provider/package.json b/plugins/auth-backend-module-guest-provider/package.json index 58134742f8..a82feb2e0f 100644 --- a/plugins/auth-backend-module-guest-provider/package.json +++ b/plugins/auth-backend-module-guest-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-guest-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The guest-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-guest-provider/api-report.md b/plugins/auth-backend-module-guest-provider/report.api.md similarity index 71% rename from plugins/auth-backend-module-guest-provider/api-report.md rename to plugins/auth-backend-module-guest-provider/report.api.md index b0ba5386a2..b100e5270b 100644 --- a/plugins/auth-backend-module-guest-provider/api-report.md +++ b/plugins/auth-backend-module-guest-provider/report.api.md @@ -8,4 +8,8 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @public (undocumented) const authModuleGuestProvider: BackendFeature; export default authModuleGuestProvider; + +// Warnings were encountered during analysis: +// +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGuestProvider". ``` diff --git a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md index 24e882705c..3b741f3258 100644 --- a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-microsoft-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 6c70f2fc9d..5263b76340 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-microsoft-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The microsoft-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-microsoft-provider/api-report.md b/plugins/auth-backend-module-microsoft-provider/report.api.md similarity index 78% rename from plugins/auth-backend-module-microsoft-provider/api-report.md rename to plugins/auth-backend-module-microsoft-provider/report.api.md index 6aef395d7c..3e7775cfa8 100644 --- a/plugins/auth-backend-module-microsoft-provider/api-report.md +++ b/plugins/auth-backend-module-microsoft-provider/report.api.md @@ -37,4 +37,10 @@ export namespace microsoftSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "microsoftAuthenticator". +// src/deprecated.d.ts:5:22 - (ae-undocumented) Missing documentation for "authModuleMicrosoftProvider". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleMicrosoftProvider". ``` diff --git a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md index 8b7a8533f1..d5eb620fa7 100644 --- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-oauth2-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json index 1855892f67..feb21cfe4e 100644 --- a/plugins/auth-backend-module-oauth2-provider/package.json +++ b/plugins/auth-backend-module-oauth2-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oauth2-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The oauth2-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oauth2-provider/api-report.md b/plugins/auth-backend-module-oauth2-provider/report.api.md similarity index 80% rename from plugins/auth-backend-module-oauth2-provider/api-report.md rename to plugins/auth-backend-module-oauth2-provider/report.api.md index 632591ec04..5648d043a2 100644 --- a/plugins/auth-backend-module-oauth2-provider/api-report.md +++ b/plugins/auth-backend-module-oauth2-provider/report.api.md @@ -27,4 +27,9 @@ export namespace oauth2SignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "oauth2Authenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOauth2Provider". ``` diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md index 7d26f71eb1..052a7a1797 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-oauth2-proxy-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/package.json b/plugins/auth-backend-module-oauth2-proxy-provider/package.json index 18eabf5596..79c2a4a178 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/package.json +++ b/plugins/auth-backend-module-oauth2-proxy-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oauth2-proxy-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The oauth2-proxy-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/api-report.md b/plugins/auth-backend-module-oauth2-proxy-provider/report.api.md similarity index 78% rename from plugins/auth-backend-module-oauth2-proxy-provider/api-report.md rename to plugins/auth-backend-module-oauth2-proxy-provider/report.api.md index 5c5cefd734..27b3a9feb2 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/api-report.md +++ b/plugins/auth-backend-module-oauth2-proxy-provider/report.api.md @@ -32,4 +32,9 @@ export type OAuth2ProxyResult = { headers: IncomingHttpHeaders; getHeader(name: string): string | undefined; }; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:10:22 - (ae-undocumented) Missing documentation for "oauth2ProxyAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOauth2ProxyProvider". ``` diff --git a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md index b772e88218..7aba336457 100644 --- a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-oidc-provider +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json index d4c6fc3530..12a6daf332 100644 --- a/plugins/auth-backend-module-oidc-provider/package.json +++ b/plugins/auth-backend-module-oidc-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oidc-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The oidc-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oidc-provider/api-report.md b/plugins/auth-backend-module-oidc-provider/report.api.md similarity index 85% rename from plugins/auth-backend-module-oidc-provider/api-report.md rename to plugins/auth-backend-module-oidc-provider/report.api.md index cd0a99e7fc..df717a9e1e 100644 --- a/plugins/auth-backend-module-oidc-provider/api-report.md +++ b/plugins/auth-backend-module-oidc-provider/report.api.md @@ -46,4 +46,9 @@ export namespace oidcSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:13:22 - (ae-undocumented) Missing documentation for "oidcAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOidcProvider". ``` diff --git a/plugins/auth-backend-module-okta-provider/CHANGELOG.md b/plugins/auth-backend-module-okta-provider/CHANGELOG.md index 3148206c01..8931c4a2bf 100644 --- a/plugins/auth-backend-module-okta-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-okta-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-okta-provider +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/auth-backend-module-okta-provider/package.json b/plugins/auth-backend-module-okta-provider/package.json index 6ec9cfab6c..1b5b46ecc8 100644 --- a/plugins/auth-backend-module-okta-provider/package.json +++ b/plugins/auth-backend-module-okta-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-okta-provider", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The okta-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-okta-provider/api-report.md b/plugins/auth-backend-module-okta-provider/report.api.md similarity index 80% rename from plugins/auth-backend-module-okta-provider/api-report.md rename to plugins/auth-backend-module-okta-provider/report.api.md index a142265100..97e587df76 100644 --- a/plugins/auth-backend-module-okta-provider/api-report.md +++ b/plugins/auth-backend-module-okta-provider/report.api.md @@ -27,4 +27,9 @@ export namespace oktaSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "oktaAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOktaProvider". ``` diff --git a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md index 30be5a0a93..4d344c4d72 100644 --- a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-onelogin-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-onelogin-provider/package.json b/plugins/auth-backend-module-onelogin-provider/package.json index 53140fb79d..4dae5a8805 100644 --- a/plugins/auth-backend-module-onelogin-provider/package.json +++ b/plugins/auth-backend-module-onelogin-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-onelogin-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The onelogin-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-onelogin-provider/api-report.md b/plugins/auth-backend-module-onelogin-provider/report.api.md similarity index 80% rename from plugins/auth-backend-module-onelogin-provider/api-report.md rename to plugins/auth-backend-module-onelogin-provider/report.api.md index 1991f00e0b..a636d96ae0 100644 --- a/plugins/auth-backend-module-onelogin-provider/api-report.md +++ b/plugins/auth-backend-module-onelogin-provider/report.api.md @@ -27,4 +27,9 @@ export namespace oneLoginSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "oneLoginAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOneLoginProvider". ``` diff --git a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md index ea2dfe0abb..0707122785 100644 --- a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-pinniped-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-pinniped-provider/package.json b/plugins/auth-backend-module-pinniped-provider/package.json index e7f33572a1..7ae787e202 100644 --- a/plugins/auth-backend-module-pinniped-provider/package.json +++ b/plugins/auth-backend-module-pinniped-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-pinniped-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The pinniped-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-pinniped-provider/api-report.md b/plugins/auth-backend-module-pinniped-provider/report.api.md similarity index 67% rename from plugins/auth-backend-module-pinniped-provider/api-report.md rename to plugins/auth-backend-module-pinniped-provider/report.api.md index e15f4ee324..a0500f5e74 100644 --- a/plugins/auth-backend-module-pinniped-provider/api-report.md +++ b/plugins/auth-backend-module-pinniped-provider/report.api.md @@ -37,4 +37,12 @@ export class PinnipedStrategyCache { client: BaseClient; }>; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:4:1 - (ae-undocumented) Missing documentation for "PinnipedStrategyCache". +// src/authenticator.d.ts:11:5 - (ae-undocumented) Missing documentation for "getStrategy". +// src/authenticator.d.ts:20:22 - (ae-undocumented) Missing documentation for "pinnipedAuthenticator". +// src/deprecated.d.ts:5:22 - (ae-undocumented) Missing documentation for "authModulePinnipedProvider". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModulePinnipedProvider". ``` diff --git a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md index 701e0bc321..8d1bf64acb 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-vmware-cloud-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-vmware-cloud-provider/package.json b/plugins/auth-backend-module-vmware-cloud-provider/package.json index 5b5b86d126..c4dce89eb8 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/package.json +++ b/plugins/auth-backend-module-vmware-cloud-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-vmware-cloud-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The vmware-cloud-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-vmware-cloud-provider/api-report.md b/plugins/auth-backend-module-vmware-cloud-provider/report.api.md similarity index 72% rename from plugins/auth-backend-module-vmware-cloud-provider/api-report.md rename to plugins/auth-backend-module-vmware-cloud-provider/report.api.md index 2a27d8fc7c..c970b237a9 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/api-report.md +++ b/plugins/auth-backend-module-vmware-cloud-provider/report.api.md @@ -43,4 +43,12 @@ export namespace vmwareCloudSignInResolvers { export type VMwarePassportProfile = PassportProfile & { organizationId?: string; }; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:4:1 - (ae-undocumented) Missing documentation for "VMwareCloudAuthenticatorContext". +// src/authenticator.d.ts:5:5 - (ae-undocumented) Missing documentation for "organizationId". +// src/authenticator.d.ts:6:5 - (ae-undocumented) Missing documentation for "providerStrategy". +// src/authenticator.d.ts:7:5 - (ae-undocumented) Missing documentation for "helper". +// src/authenticator.d.ts:10:1 - (ae-undocumented) Missing documentation for "VMwarePassportProfile". ``` diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index a4b014b744..7b86e02de0 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-auth-backend +## 0.23.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.23.0 ### Minor Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index d725eb4816..3dcabee5eb 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend", - "version": "0.23.0", + "version": "0.23.1-next.0", "description": "A Backstage backend plugin that handles authentication", "backstage": { "role": "backend-plugin", diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/report.api.md similarity index 76% rename from plugins/auth-backend/api-report.md rename to plugins/auth-backend/report.api.md index 20690528d1..80976525d3 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/report.api.md @@ -700,4 +700,68 @@ export const verifyNonce: (req: express.Request, providerId: string) => void; // @public @deprecated (undocumented) export type WebMessageResponse = WebMessageResponse_2; + +// Warnings were encountered during analysis: +// +// src/identity/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "TokenParams". +// src/lib/flow/authFlowHelpers.d.ts:8:22 - (ae-undocumented) Missing documentation for "postMessageResponse". +// src/lib/flow/authFlowHelpers.d.ts:13:22 - (ae-undocumented) Missing documentation for "ensuresXRequestedWith". +// src/lib/flow/types.d.ts:6:1 - (ae-undocumented) Missing documentation for "WebMessageResponse". +// src/lib/oauth/OAuthAdapter.d.ts:10:1 - (ae-undocumented) Missing documentation for "OAuthAdapterOptions". +// src/lib/oauth/OAuthAdapter.d.ts:23:1 - (ae-undocumented) Missing documentation for "OAuthAdapter". +// src/lib/oauth/OAuthAdapter.d.ts:26:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/lib/oauth/OAuthAdapter.d.ts:29:5 - (ae-undocumented) Missing documentation for "start". +// src/lib/oauth/OAuthAdapter.d.ts:30:5 - (ae-undocumented) Missing documentation for "frameHandler". +// src/lib/oauth/OAuthAdapter.d.ts:31:5 - (ae-undocumented) Missing documentation for "logout". +// src/lib/oauth/OAuthAdapter.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". +// src/lib/oauth/OAuthEnvironmentHandler.d.ts:6:22 - (ae-undocumented) Missing documentation for "OAuthEnvironmentHandler". +// src/lib/oauth/helpers.d.ts:7:22 - (ae-undocumented) Missing documentation for "readState". +// src/lib/oauth/helpers.d.ts:12:22 - (ae-undocumented) Missing documentation for "encodeState". +// src/lib/oauth/helpers.d.ts:17:22 - (ae-undocumented) Missing documentation for "verifyNonce". +// src/lib/oauth/types.d.ts:29:1 - (ae-undocumented) Missing documentation for "OAuthResult". +// src/lib/oauth/types.d.ts:44:1 - (ae-undocumented) Missing documentation for "OAuthResponse". +// src/lib/oauth/types.d.ts:53:1 - (ae-undocumented) Missing documentation for "OAuthProviderInfo". +// src/lib/oauth/types.d.ts:75:1 - (ae-undocumented) Missing documentation for "OAuthState". +// src/lib/oauth/types.d.ts:80:1 - (ae-undocumented) Missing documentation for "OAuthStartRequest". +// src/lib/oauth/types.d.ts:88:1 - (ae-undocumented) Missing documentation for "OAuthRefreshRequest". +// src/lib/oauth/types.d.ts:96:1 - (ae-undocumented) Missing documentation for "OAuthLogoutRequest". +// src/lib/oauth/types.d.ts:103:1 - (ae-undocumented) Missing documentation for "OAuthHandlers". +// src/providers/azure-easyauth/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "EasyAuthResult". +// src/providers/bitbucket/provider.d.ts:9:1 - (ae-undocumented) Missing documentation for "BitbucketOAuthResult". +// src/providers/bitbucket/provider.d.ts:23:1 - (ae-undocumented) Missing documentation for "BitbucketPassportProfile". +// src/providers/bitbucketServer/provider.d.ts:9:1 - (ae-undocumented) Missing documentation for "BitbucketServerOAuthResult". +// src/providers/cloudflare-access/provider.d.ts:90:1 - (ae-undocumented) Missing documentation for "CloudflareAccessResult". +// src/providers/github/provider.d.ts:5:1 - (ae-undocumented) Missing documentation for "GithubOAuthResult". +// src/providers/oauth2-proxy/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "OAuth2ProxyResult". +// src/providers/oidc/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "OidcAuthResult". +// src/providers/prepareBackstageIdentityResponse.d.ts:6:22 - (ae-undocumented) Missing documentation for "prepareBackstageIdentityResponse". +// src/providers/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "ProviderFactories". +// src/providers/router.d.ts:27:1 - (ae-undocumented) Missing documentation for "createOriginFilter". +// src/providers/saml/provider.d.ts:6:1 - (ae-undocumented) Missing documentation for "SamlAuthResult". +// src/providers/types.d.ts:7:1 - (ae-undocumented) Missing documentation for "AuthResolverCatalogUserQuery". +// src/providers/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "AuthResolverContext". +// src/providers/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "CookieConfigurer". +// src/providers/types.d.ts:22:1 - (ae-undocumented) Missing documentation for "OAuthStartResponse". +// src/providers/types.d.ts:36:1 - (ae-undocumented) Missing documentation for "AuthProviderConfig". +// src/providers/types.d.ts:41:1 - (ae-undocumented) Missing documentation for "AuthProviderRouteHandlers". +// src/providers/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "AuthProviderFactory". +// src/providers/types.d.ts:51:1 - (ae-undocumented) Missing documentation for "AuthResponse". +// src/providers/types.d.ts:56:1 - (ae-undocumented) Missing documentation for "ProfileInfo". +// src/providers/types.d.ts:61:1 - (ae-undocumented) Missing documentation for "SignInInfo". +// src/providers/types.d.ts:66:1 - (ae-undocumented) Missing documentation for "SignInResolver". +// src/providers/types.d.ts:96:1 - (ae-undocumented) Missing documentation for "StateEncoder". +// src/service/router.d.ts:11:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "database". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "tokenManager". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:19:5 - (ae-undocumented) Missing documentation for "tokenFactoryAlgorithm". +// src/service/router.d.ts:20:5 - (ae-undocumented) Missing documentation for "providerFactories". +// src/service/router.d.ts:21:5 - (ae-undocumented) Missing documentation for "disableDefaultProviderFactories". +// src/service/router.d.ts:22:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/router.d.ts:23:5 - (ae-undocumented) Missing documentation for "ownershipResolver". +// src/service/router.d.ts:29:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index db1c60642a..bcede6f788 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-auth-node +## 0.5.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.5.2 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 3149536bf6..6925fc82b6 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.5.2", + "version": "0.5.3-next.0", "backstage": { "role": "node-library", "pluginId": "auth", diff --git a/plugins/auth-node/api-report.md b/plugins/auth-node/report.api.md similarity index 58% rename from plugins/auth-node/api-report.md rename to plugins/auth-node/report.api.md index 5a8750127d..4cf9d5fd4b 100644 --- a/plugins/auth-node/api-report.md +++ b/plugins/auth-node/report.api.md @@ -703,4 +703,128 @@ export type WebMessageResponse = type: 'authorization_response'; error: Error; }; + +// Warnings were encountered during analysis: +// +// src/extensions/AuthOwnershipResolutionExtensionPoint.d.ts:3:1 - (ae-undocumented) Missing documentation for "AuthOwnershipResolutionExtensionPoint". +// src/extensions/AuthOwnershipResolutionExtensionPoint.d.ts:4:5 - (ae-undocumented) Missing documentation for "setAuthOwnershipResolver". +// src/extensions/AuthOwnershipResolutionExtensionPoint.d.ts:7:22 - (ae-undocumented) Missing documentation for "authOwnershipResolutionExtensionPoint". +// src/extensions/AuthProvidersExtensionPoint.d.ts:3:1 - (ae-undocumented) Missing documentation for "AuthProviderRegistrationOptions". +// src/extensions/AuthProvidersExtensionPoint.d.ts:4:5 - (ae-undocumented) Missing documentation for "providerId". +// src/extensions/AuthProvidersExtensionPoint.d.ts:5:5 - (ae-undocumented) Missing documentation for "factory". +// src/extensions/AuthProvidersExtensionPoint.d.ts:8:1 - (ae-undocumented) Missing documentation for "AuthProvidersExtensionPoint". +// src/extensions/AuthProvidersExtensionPoint.d.ts:9:5 - (ae-undocumented) Missing documentation for "registerProvider". +// src/extensions/AuthProvidersExtensionPoint.d.ts:12:22 - (ae-undocumented) Missing documentation for "authProvidersExtensionPoint". +// src/flow/sendWebMessageResponse.d.ts:17:1 - (ae-undocumented) Missing documentation for "sendWebMessageResponse". +// src/identity/DefaultIdentityClient.d.ts:35:5 - (ae-undocumented) Missing documentation for "getIdentity". +// src/identity/IdentityClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "create". +// src/oauth/OAuthEnvironmentHandler.d.ts:5:1 - (ae-undocumented) Missing documentation for "OAuthEnvironmentHandler". +// src/oauth/OAuthEnvironmentHandler.d.ts:7:5 - (ae-undocumented) Missing documentation for "mapConfig". +// src/oauth/OAuthEnvironmentHandler.d.ts:9:5 - (ae-undocumented) Missing documentation for "start". +// src/oauth/OAuthEnvironmentHandler.d.ts:10:5 - (ae-undocumented) Missing documentation for "frameHandler". +// src/oauth/OAuthEnvironmentHandler.d.ts:11:5 - (ae-undocumented) Missing documentation for "refresh". +// src/oauth/OAuthEnvironmentHandler.d.ts:12:5 - (ae-undocumented) Missing documentation for "logout". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:6:1 - (ae-undocumented) Missing documentation for "PassportOAuthResult". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:17:1 - (ae-undocumented) Missing documentation for "PassportOAuthPrivateInfo". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:21:1 - (ae-undocumented) Missing documentation for "PassportOAuthDoneCallback". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:23:1 - (ae-undocumented) Missing documentation for "PassportOAuthAuthenticatorHelper". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:25:5 - (ae-undocumented) Missing documentation for "defaultProfileTransform". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:26:5 - (ae-undocumented) Missing documentation for "from". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:28:5 - (ae-undocumented) Missing documentation for "start". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:32:5 - (ae-undocumented) Missing documentation for "authenticate". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:33:5 - (ae-undocumented) Missing documentation for "refresh". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:34:5 - (ae-undocumented) Missing documentation for "fetchProfile". +// src/oauth/createOAuthProviderFactory.d.ts:6:1 - (ae-undocumented) Missing documentation for "createOAuthProviderFactory". +// src/oauth/createOAuthRouteHandlers.d.ts:6:1 - (ae-undocumented) Missing documentation for "OAuthRouteHandlersOptions". +// src/oauth/createOAuthRouteHandlers.d.ts:7:5 - (ae-undocumented) Missing documentation for "authenticator". +// src/oauth/createOAuthRouteHandlers.d.ts:8:5 - (ae-undocumented) Missing documentation for "appUrl". +// src/oauth/createOAuthRouteHandlers.d.ts:9:5 - (ae-undocumented) Missing documentation for "baseUrl". +// src/oauth/createOAuthRouteHandlers.d.ts:10:5 - (ae-undocumented) Missing documentation for "isOriginAllowed". +// src/oauth/createOAuthRouteHandlers.d.ts:11:5 - (ae-undocumented) Missing documentation for "providerId". +// src/oauth/createOAuthRouteHandlers.d.ts:12:5 - (ae-undocumented) Missing documentation for "config". +// src/oauth/createOAuthRouteHandlers.d.ts:13:5 - (ae-undocumented) Missing documentation for "resolverContext". +// src/oauth/createOAuthRouteHandlers.d.ts:14:5 - (ae-undocumented) Missing documentation for "additionalScopes". +// src/oauth/createOAuthRouteHandlers.d.ts:15:5 - (ae-undocumented) Missing documentation for "stateTransform". +// src/oauth/createOAuthRouteHandlers.d.ts:16:5 - (ae-undocumented) Missing documentation for "profileTransform". +// src/oauth/createOAuthRouteHandlers.d.ts:17:5 - (ae-undocumented) Missing documentation for "cookieConfigurer". +// src/oauth/createOAuthRouteHandlers.d.ts:18:5 - (ae-undocumented) Missing documentation for "signInResolver". +// src/oauth/createOAuthRouteHandlers.d.ts:21:1 - (ae-undocumented) Missing documentation for "createOAuthRouteHandlers". +// src/oauth/state.d.ts:16:1 - (ae-undocumented) Missing documentation for "OAuthStateTransform". +// src/oauth/state.d.ts:22:1 - (ae-undocumented) Missing documentation for "encodeOAuthState". +// src/oauth/state.d.ts:24:1 - (ae-undocumented) Missing documentation for "decodeOAuthState". +// src/oauth/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "OAuthSession". +// src/oauth/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "accessToken". +// src/oauth/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "tokenType". +// src/oauth/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "idToken". +// src/oauth/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "scope". +// src/oauth/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "expiresInSeconds". +// src/oauth/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "refreshToken". +// src/oauth/types.d.ts:12:5 - (ae-undocumented) Missing documentation for "refreshTokenExpiresInSeconds". +// src/oauth/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorScopeOptions". +// src/oauth/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "persist". +// src/oauth/types.d.ts:17:5 - (ae-undocumented) Missing documentation for "required". +// src/oauth/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "transform". +// src/oauth/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorStartInput". +// src/oauth/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "scope". +// src/oauth/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "state". +// src/oauth/types.d.ts:33:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:36:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorAuthenticateInput". +// src/oauth/types.d.ts:37:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorRefreshInput". +// src/oauth/types.d.ts:41:5 - (ae-undocumented) Missing documentation for "scope". +// src/oauth/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "refreshToken". +// src/oauth/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorLogoutInput". +// src/oauth/types.d.ts:47:5 - (ae-undocumented) Missing documentation for "accessToken". +// src/oauth/types.d.ts:48:5 - (ae-undocumented) Missing documentation for "refreshToken". +// src/oauth/types.d.ts:49:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:52:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorResult". +// src/oauth/types.d.ts:53:5 - (ae-undocumented) Missing documentation for "fullProfile". +// src/oauth/types.d.ts:54:5 - (ae-undocumented) Missing documentation for "session". +// src/oauth/types.d.ts:57:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticator". +// src/oauth/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "defaultProfileTransform". +// src/oauth/types.d.ts:60:5 - (ae-undocumented) Missing documentation for "shouldPersistScopes". +// src/oauth/types.d.ts:61:5 - (ae-undocumented) Missing documentation for "scopes". +// src/oauth/types.d.ts:62:5 - (ae-undocumented) Missing documentation for "initialize". +// src/oauth/types.d.ts:66:5 - (ae-undocumented) Missing documentation for "start". +// src/oauth/types.d.ts:70:5 - (ae-undocumented) Missing documentation for "authenticate". +// src/oauth/types.d.ts:71:5 - (ae-undocumented) Missing documentation for "refresh". +// src/oauth/types.d.ts:72:5 - (ae-undocumented) Missing documentation for "logout". +// src/oauth/types.d.ts:75:1 - (ae-undocumented) Missing documentation for "createOAuthAuthenticator". +// src/passport/PassportHelpers.d.ts:6:1 - (ae-undocumented) Missing documentation for "PassportHelpers". +// src/passport/PassportHelpers.d.ts:8:5 - (ae-undocumented) Missing documentation for "transformProfile". +// src/passport/PassportHelpers.d.ts:9:5 - (ae-undocumented) Missing documentation for "executeRedirectStrategy". +// src/passport/PassportHelpers.d.ts:19:5 - (ae-undocumented) Missing documentation for "executeFrameHandlerStrategy". +// src/passport/PassportHelpers.d.ts:23:5 - (ae-undocumented) Missing documentation for "executeRefreshTokenStrategy". +// src/passport/PassportHelpers.d.ts:34:5 - (ae-undocumented) Missing documentation for "executeFetchUserProfileStrategy". +// src/passport/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "PassportProfile". +// src/passport/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "PassportDoneCallback". +// src/proxy/createProxyAuthProviderFactory.d.ts:5:1 - (ae-undocumented) Missing documentation for "createProxyAuthProviderFactory". +// src/proxy/createProxyRouteHandlers.d.ts:5:1 - (ae-undocumented) Missing documentation for "ProxyAuthRouteHandlersOptions". +// src/proxy/createProxyRouteHandlers.d.ts:6:5 - (ae-undocumented) Missing documentation for "authenticator". +// src/proxy/createProxyRouteHandlers.d.ts:7:5 - (ae-undocumented) Missing documentation for "config". +// src/proxy/createProxyRouteHandlers.d.ts:8:5 - (ae-undocumented) Missing documentation for "resolverContext". +// src/proxy/createProxyRouteHandlers.d.ts:9:5 - (ae-undocumented) Missing documentation for "signInResolver". +// src/proxy/createProxyRouteHandlers.d.ts:10:5 - (ae-undocumented) Missing documentation for "profileTransform". +// src/proxy/createProxyRouteHandlers.d.ts:13:1 - (ae-undocumented) Missing documentation for "createProxyAuthRouteHandlers". +// src/proxy/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ProxyAuthenticator". +// src/proxy/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "defaultProfileTransform". +// src/proxy/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "initialize". +// src/proxy/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "authenticate". +// src/proxy/types.d.ts:18:1 - (ae-undocumented) Missing documentation for "createProxyAuthenticator". +// src/sign-in/createSignInResolverFactory.d.ts:5:1 - (ae-undocumented) Missing documentation for "SignInResolverFactory". +// src/sign-in/createSignInResolverFactory.d.ts:6:5 - (ae-undocumented) Missing documentation for "__call". +// src/sign-in/createSignInResolverFactory.d.ts:7:5 - (ae-undocumented) Missing documentation for "optionsJsonSchema". +// src/sign-in/createSignInResolverFactory.d.ts:10:1 - (ae-undocumented) Missing documentation for "SignInResolverFactoryOptions". +// src/sign-in/createSignInResolverFactory.d.ts:11:5 - (ae-undocumented) Missing documentation for "optionsSchema". +// src/sign-in/createSignInResolverFactory.d.ts:12:5 - (ae-undocumented) Missing documentation for "create". +// src/sign-in/createSignInResolverFactory.d.ts:15:1 - (ae-undocumented) Missing documentation for "createSignInResolverFactory". +// src/sign-in/readDeclarativeSignInResolver.d.ts:5:1 - (ae-undocumented) Missing documentation for "ReadDeclarativeSignInResolverOptions". +// src/sign-in/readDeclarativeSignInResolver.d.ts:6:5 - (ae-undocumented) Missing documentation for "config". +// src/sign-in/readDeclarativeSignInResolver.d.ts:7:5 - (ae-undocumented) Missing documentation for "signInResolverFactories". +// src/sign-in/readDeclarativeSignInResolver.d.ts:12:1 - (ae-undocumented) Missing documentation for "readDeclarativeSignInResolver". +// src/types.d.ts:139:5 - (ae-undocumented) Missing documentation for "resolveOwnershipEntityRefs". +// src/types.d.ts:204:1 - (ae-undocumented) Missing documentation for "AuthProviderConfig". +// src/types.d.ts:224:1 - (ae-undocumented) Missing documentation for "AuthProviderFactory". +// src/types.d.ts:250:1 - (ae-undocumented) Missing documentation for "ClientAuthResponse". ``` diff --git a/plugins/auth-react/CHANGELOG.md b/plugins/auth-react/CHANGELOG.md index dd77e5b3af..f64b8fb26c 100644 --- a/plugins/auth-react/CHANGELOG.md +++ b/plugins/auth-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-react +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + ## 0.1.6 ### Patch Changes diff --git a/plugins/auth-react/package.json b/plugins/auth-react/package.json index 8c4ec251de..0fc89df74c 100644 --- a/plugins/auth-react/package.json +++ b/plugins/auth-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-react", - "version": "0.1.6", + "version": "0.1.7-next.0", "description": "Web library for the auth plugin", "backstage": { "role": "web-library", diff --git a/plugins/auth-react/api-report.md b/plugins/auth-react/report.api.md similarity index 100% rename from plugins/auth-react/api-report.md rename to plugins/auth-react/report.api.md diff --git a/plugins/bitbucket-cloud-common/api-report.md b/plugins/bitbucket-cloud-common/api-report.md deleted file mode 100644 index 833a367c03..0000000000 --- a/plugins/bitbucket-cloud-common/api-report.md +++ /dev/null @@ -1,485 +0,0 @@ -## API Report File for "@backstage/plugin-bitbucket-cloud-common" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { BitbucketCloudIntegrationConfig } from '@backstage/integration'; - -// @public (undocumented) -export class BitbucketCloudClient { - // (undocumented) - static fromConfig( - config: BitbucketCloudIntegrationConfig, - ): BitbucketCloudClient; - // (undocumented) - listBranchesByRepository( - repository: string, - workspace: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - listProjectsByWorkspace( - workspace: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - listRepositoriesByWorkspace( - workspace: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - listWorkspaces( - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - searchCode( - workspace: string, - query: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; -} - -// @public (undocumented) -export namespace Events { - // (undocumented) - export interface Change { - // (undocumented) - closed: boolean; - // (undocumented) - commits: Models.Commit[]; - // (undocumented) - created: boolean; - // (undocumented) - forced: boolean; - // (undocumented) - links: ChangeLinks; - // (undocumented) - new: Models.Branch; - // (undocumented) - old: Models.Branch; - // (undocumented) - truncated: boolean; - } - // (undocumented) - export interface ChangeLinks { - // (undocumented) - commits: Models.Link; - // (undocumented) - diff: Models.Link; - // (undocumented) - html: Models.Link; - } - // (undocumented) - export interface RepoEvent { - // (undocumented) - actor: Models.Account; - // (undocumented) - repository: Models.Repository & { - workspace: Models.Workspace; - }; - } - // (undocumented) - export interface RepoPush { - // (undocumented) - changes: Change[]; - } - // (undocumented) - export interface RepoPushEvent extends RepoEvent { - // (undocumented) - push: RepoPush; - } -} - -// @public (undocumented) -export type FilterAndSortOptions = { - q?: string; - sort?: string; -}; - -// @public (undocumented) -export namespace Models { - export interface Account extends ModelObject { - // (undocumented) - created_on?: string; - // (undocumented) - display_name?: string; - // (undocumented) - links?: AccountLinks; - // (undocumented) - username?: string; - // (undocumented) - uuid?: string; - } - export interface AccountLinks { - // (undocumented) - [key: string]: unknown; - // (undocumented) - avatar?: Link; - } - export interface Author extends ModelObject { - raw?: string; - // (undocumented) - user?: Account; - } - export interface BaseCommit extends ModelObject { - // (undocumented) - author?: Author; - // (undocumented) - date?: string; - // (undocumented) - hash?: string; - // (undocumented) - message?: string; - // (undocumented) - parents?: Array; - // (undocumented) - summary?: BaseCommitSummary; - } - // (undocumented) - export interface BaseCommitSummary { - html?: string; - markup?: BaseCommitSummaryMarkupEnum; - raw?: string; - } - const BaseCommitSummaryMarkupEnum: { - readonly Markdown: 'markdown'; - readonly Creole: 'creole'; - readonly Plaintext: 'plaintext'; - }; - export type BaseCommitSummaryMarkupEnum = - (typeof BaseCommitSummaryMarkupEnum)[keyof typeof BaseCommitSummaryMarkupEnum]; - export interface Branch { - default_merge_strategy?: string; - // (undocumented) - links?: RefLinks; - merge_strategies?: Array; - name?: string; - // (undocumented) - target?: Commit; - // (undocumented) - type: string; - } - const BranchMergeStrategiesEnum: { - readonly MergeCommit: 'merge_commit'; - readonly Squash: 'squash'; - readonly FastForward: 'fast_forward'; - }; - export type BranchMergeStrategiesEnum = - (typeof BranchMergeStrategiesEnum)[keyof typeof BranchMergeStrategiesEnum]; - export interface Commit extends BaseCommit { - // (undocumented) - participants?: Array; - // (undocumented) - repository?: Repository; - } - export interface CommitFile { - // (undocumented) - [key: string]: unknown; - // (undocumented) - attributes?: CommitFileAttributesEnum; - // (undocumented) - commit?: Commit; - escaped_path?: string; - path?: string; - // (undocumented) - type: string; - } - const // (undocumented) - CommitFileAttributesEnum: { - readonly Link: 'link'; - readonly Executable: 'executable'; - readonly Subrepository: 'subrepository'; - readonly Binary: 'binary'; - readonly Lfs: 'lfs'; - }; - // (undocumented) - export type CommitFileAttributesEnum = - (typeof CommitFileAttributesEnum)[keyof typeof CommitFileAttributesEnum]; - export interface Link { - // (undocumented) - href?: string; - // (undocumented) - name?: string; - } - export interface ModelObject { - // (undocumented) - [key: string]: unknown; - // (undocumented) - type: string; - } - export interface Paginated { - next?: string; - page?: number; - pagelen?: number; - previous?: string; - size?: number; - values?: Array | Set; - } - export interface PaginatedBranches extends Paginated { - values?: Set; - } - export interface PaginatedProjects extends Paginated { - values?: Set; - } - export interface PaginatedRepositories extends Paginated { - values?: Set; - } - export interface PaginatedWorkspaces extends Paginated { - values?: Set; - } - export interface Participant extends ModelObject { - // (undocumented) - approved?: boolean; - participated_on?: string; - // (undocumented) - role?: ParticipantRoleEnum; - // (undocumented) - state?: ParticipantStateEnum; - // (undocumented) - user?: Account; - } - const // (undocumented) - ParticipantRoleEnum: { - readonly Participant: 'PARTICIPANT'; - readonly Reviewer: 'REVIEWER'; - }; - // (undocumented) - export type ParticipantRoleEnum = - (typeof ParticipantRoleEnum)[keyof typeof ParticipantRoleEnum]; - const // (undocumented) - ParticipantStateEnum: { - readonly Approved: 'approved'; - readonly ChangesRequested: 'changes_requested'; - readonly Null: 'null'; - }; - // (undocumented) - export type ParticipantStateEnum = - (typeof ParticipantStateEnum)[keyof typeof ParticipantStateEnum]; - export interface Project extends ModelObject { - // (undocumented) - created_on?: string; - // (undocumented) - description?: string; - has_publicly_visible_repos?: boolean; - is_private?: boolean; - key?: string; - // (undocumented) - links?: ProjectLinks; - name?: string; - // (undocumented) - owner?: Team; - // (undocumented) - updated_on?: string; - uuid?: string; - } - // (undocumented) - export interface ProjectLinks { - // (undocumented) - avatar?: Link; - // (undocumented) - html?: Link; - } - // (undocumented) - export interface RefLinks { - // (undocumented) - commits?: Link; - // (undocumented) - html?: Link; - // (undocumented) - self?: Link; - } - export interface Repository extends ModelObject { - // (undocumented) - created_on?: string; - // (undocumented) - description?: string; - fork_policy?: RepositoryForkPolicyEnum; - full_name?: string; - has_issues?: boolean; - has_wiki?: boolean; - // (undocumented) - is_private?: boolean; - // (undocumented) - language?: string; - // (undocumented) - links?: RepositoryLinks; - // (undocumented) - mainbranch?: Branch; - // (undocumented) - name?: string; - // (undocumented) - owner?: Account; - // (undocumented) - parent?: Repository; - // (undocumented) - project?: Project; - // (undocumented) - scm?: RepositoryScmEnum; - // (undocumented) - size?: number; - slug?: string; - // (undocumented) - updated_on?: string; - uuid?: string; - } - const RepositoryForkPolicyEnum: { - readonly AllowForks: 'allow_forks'; - readonly NoPublicForks: 'no_public_forks'; - readonly NoForks: 'no_forks'; - }; - export type RepositoryForkPolicyEnum = - (typeof RepositoryForkPolicyEnum)[keyof typeof RepositoryForkPolicyEnum]; - const // (undocumented) - RepositoryScmEnum: { - readonly Git: 'git'; - }; - // (undocumented) - export interface RepositoryLinks { - // (undocumented) - avatar?: Link; - // (undocumented) - clone?: Array; - // (undocumented) - commits?: Link; - // (undocumented) - downloads?: Link; - // (undocumented) - forks?: Link; - // (undocumented) - hooks?: Link; - // (undocumented) - html?: Link; - // (undocumented) - pullrequests?: Link; - // (undocumented) - self?: Link; - // (undocumented) - watchers?: Link; - } - // (undocumented) - export type RepositoryScmEnum = - (typeof RepositoryScmEnum)[keyof typeof RepositoryScmEnum]; - // (undocumented) - export interface SearchCodeSearchResult { - // (undocumented) - readonly content_match_count?: number; - // (undocumented) - readonly content_matches?: Array; - // (undocumented) - file?: CommitFile; - // (undocumented) - readonly path_matches?: Array; - // (undocumented) - readonly type?: string; - } - // (undocumented) - export interface SearchContentMatch { - // (undocumented) - readonly lines?: Array; - } - // (undocumented) - export interface SearchLine { - // (undocumented) - readonly line?: number; - // (undocumented) - readonly segments?: Array; - } - // (undocumented) - export interface SearchResultPage extends Paginated { - // (undocumented) - readonly query_substituted?: boolean; - readonly values?: Array; - } - // (undocumented) - export interface SearchSegment { - // (undocumented) - readonly match?: boolean; - // (undocumented) - readonly text?: string; - } - export interface Team extends Account { - // (undocumented) - links?: TeamLinks; - } - export interface TeamLinks extends AccountLinks { - // (undocumented) - html?: Link; - // (undocumented) - members?: Link; - // (undocumented) - projects?: Link; - // (undocumented) - repositories?: Link; - // (undocumented) - self?: Link; - } - export interface Workspace extends ModelObject { - // (undocumented) - created_on?: string; - is_private?: boolean; - // (undocumented) - links?: WorkspaceLinks; - name?: string; - slug?: string; - // (undocumented) - updated_on?: string; - uuid?: string; - } - // (undocumented) - export interface WorkspaceLinks { - // (undocumented) - avatar?: Link; - // (undocumented) - html?: Link; - // (undocumented) - members?: Link; - // (undocumented) - owners?: Link; - // (undocumented) - projects?: Link; - // (undocumented) - repositories?: Link; - // (undocumented) - self?: Link; - // (undocumented) - snippets?: Link; - } -} - -// @public (undocumented) -export type PaginationOptions = { - page?: number; - pagelen?: number; -}; - -// @public (undocumented) -export type PartialResponseOptions = { - fields?: string; -}; - -// @public (undocumented) -export type RequestOptions = FilterAndSortOptions & - PaginationOptions & - PartialResponseOptions & { - [key: string]: string | number | undefined; - }; - -// @public (undocumented) -export class WithPagination< - TPage extends Models.Paginated, - TResultItem, -> { - constructor( - createUrl: (options: PaginationOptions) => URL, - fetch: (url: URL) => Promise, - ); - // (undocumented) - getPage(options?: PaginationOptions): Promise; - // (undocumented) - iteratePages(options?: PaginationOptions): AsyncGenerator; - // (undocumented) - iterateResults( - options?: PaginationOptions, - ): AsyncGenerator, void, unknown>; -} -``` diff --git a/plugins/bitbucket-cloud-common/report.api.md b/plugins/bitbucket-cloud-common/report.api.md new file mode 100644 index 0000000000..ebad8ff878 --- /dev/null +++ b/plugins/bitbucket-cloud-common/report.api.md @@ -0,0 +1,635 @@ +## API Report File for "@backstage/plugin-bitbucket-cloud-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BitbucketCloudIntegrationConfig } from '@backstage/integration'; + +// @public (undocumented) +export class BitbucketCloudClient { + // (undocumented) + static fromConfig( + config: BitbucketCloudIntegrationConfig, + ): BitbucketCloudClient; + // (undocumented) + listBranchesByRepository( + repository: string, + workspace: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) + listProjectsByWorkspace( + workspace: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) + listRepositoriesByWorkspace( + workspace: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) + listWorkspaces( + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) + searchCode( + workspace: string, + query: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; +} + +// @public (undocumented) +export namespace Events { + // (undocumented) + export interface Change { + // (undocumented) + closed: boolean; + // (undocumented) + commits: Models.Commit[]; + // (undocumented) + created: boolean; + // (undocumented) + forced: boolean; + // (undocumented) + links: ChangeLinks; + // (undocumented) + new: Models.Branch; + // (undocumented) + old: Models.Branch; + // (undocumented) + truncated: boolean; + } + // (undocumented) + export interface ChangeLinks { + // (undocumented) + commits: Models.Link; + // (undocumented) + diff: Models.Link; + // (undocumented) + html: Models.Link; + } + // (undocumented) + export interface RepoEvent { + // (undocumented) + actor: Models.Account; + // (undocumented) + repository: Models.Repository & { + workspace: Models.Workspace; + }; + } + // (undocumented) + export interface RepoPush { + // (undocumented) + changes: Change[]; + } + // (undocumented) + export interface RepoPushEvent extends RepoEvent { + // (undocumented) + push: RepoPush; + } +} + +// @public (undocumented) +export type FilterAndSortOptions = { + q?: string; + sort?: string; +}; + +// @public (undocumented) +export namespace Models { + export interface Account extends ModelObject { + // (undocumented) + created_on?: string; + // (undocumented) + display_name?: string; + // (undocumented) + links?: AccountLinks; + // (undocumented) + username?: string; + // (undocumented) + uuid?: string; + } + export interface AccountLinks { + // (undocumented) + [key: string]: unknown; + // (undocumented) + avatar?: Link; + } + export interface Author extends ModelObject { + raw?: string; + // (undocumented) + user?: Account; + } + export interface BaseCommit extends ModelObject { + // (undocumented) + author?: Author; + // (undocumented) + date?: string; + // (undocumented) + hash?: string; + // (undocumented) + message?: string; + // (undocumented) + parents?: Array; + // (undocumented) + summary?: BaseCommitSummary; + } + // (undocumented) + export interface BaseCommitSummary { + html?: string; + markup?: BaseCommitSummaryMarkupEnum; + raw?: string; + } + const BaseCommitSummaryMarkupEnum: { + readonly Markdown: 'markdown'; + readonly Creole: 'creole'; + readonly Plaintext: 'plaintext'; + }; + export type BaseCommitSummaryMarkupEnum = + (typeof BaseCommitSummaryMarkupEnum)[keyof typeof BaseCommitSummaryMarkupEnum]; + export interface Branch { + default_merge_strategy?: string; + // (undocumented) + links?: RefLinks; + merge_strategies?: Array; + name?: string; + // (undocumented) + target?: Commit; + // (undocumented) + type: string; + } + const BranchMergeStrategiesEnum: { + readonly MergeCommit: 'merge_commit'; + readonly Squash: 'squash'; + readonly FastForward: 'fast_forward'; + }; + export type BranchMergeStrategiesEnum = + (typeof BranchMergeStrategiesEnum)[keyof typeof BranchMergeStrategiesEnum]; + export interface Commit extends BaseCommit { + // (undocumented) + participants?: Array; + // (undocumented) + repository?: Repository; + } + export interface CommitFile { + // (undocumented) + [key: string]: unknown; + // (undocumented) + attributes?: CommitFileAttributesEnum; + // (undocumented) + commit?: Commit; + escaped_path?: string; + path?: string; + // (undocumented) + type: string; + } + const // (undocumented) + CommitFileAttributesEnum: { + readonly Link: 'link'; + readonly Executable: 'executable'; + readonly Subrepository: 'subrepository'; + readonly Binary: 'binary'; + readonly Lfs: 'lfs'; + }; + // (undocumented) + export type CommitFileAttributesEnum = + (typeof CommitFileAttributesEnum)[keyof typeof CommitFileAttributesEnum]; + export interface Link { + // (undocumented) + href?: string; + // (undocumented) + name?: string; + } + export interface ModelObject { + // (undocumented) + [key: string]: unknown; + // (undocumented) + type: string; + } + export interface Paginated { + next?: string; + page?: number; + pagelen?: number; + previous?: string; + size?: number; + values?: Array | Set; + } + export interface PaginatedBranches extends Paginated { + values?: Set; + } + export interface PaginatedProjects extends Paginated { + values?: Set; + } + export interface PaginatedRepositories extends Paginated { + values?: Set; + } + export interface PaginatedWorkspaces extends Paginated { + values?: Set; + } + export interface Participant extends ModelObject { + // (undocumented) + approved?: boolean; + participated_on?: string; + // (undocumented) + role?: ParticipantRoleEnum; + // (undocumented) + state?: ParticipantStateEnum; + // (undocumented) + user?: Account; + } + const // (undocumented) + ParticipantRoleEnum: { + readonly Participant: 'PARTICIPANT'; + readonly Reviewer: 'REVIEWER'; + }; + // (undocumented) + export type ParticipantRoleEnum = + (typeof ParticipantRoleEnum)[keyof typeof ParticipantRoleEnum]; + const // (undocumented) + ParticipantStateEnum: { + readonly Approved: 'approved'; + readonly ChangesRequested: 'changes_requested'; + readonly Null: 'null'; + }; + // (undocumented) + export type ParticipantStateEnum = + (typeof ParticipantStateEnum)[keyof typeof ParticipantStateEnum]; + export interface Project extends ModelObject { + // (undocumented) + created_on?: string; + // (undocumented) + description?: string; + has_publicly_visible_repos?: boolean; + is_private?: boolean; + key?: string; + // (undocumented) + links?: ProjectLinks; + name?: string; + // (undocumented) + owner?: Team; + // (undocumented) + updated_on?: string; + uuid?: string; + } + // (undocumented) + export interface ProjectLinks { + // (undocumented) + avatar?: Link; + // (undocumented) + html?: Link; + } + // (undocumented) + export interface RefLinks { + // (undocumented) + commits?: Link; + // (undocumented) + html?: Link; + // (undocumented) + self?: Link; + } + export interface Repository extends ModelObject { + // (undocumented) + created_on?: string; + // (undocumented) + description?: string; + fork_policy?: RepositoryForkPolicyEnum; + full_name?: string; + has_issues?: boolean; + has_wiki?: boolean; + // (undocumented) + is_private?: boolean; + // (undocumented) + language?: string; + // (undocumented) + links?: RepositoryLinks; + // (undocumented) + mainbranch?: Branch; + // (undocumented) + name?: string; + // (undocumented) + owner?: Account; + // (undocumented) + parent?: Repository; + // (undocumented) + project?: Project; + // (undocumented) + scm?: RepositoryScmEnum; + // (undocumented) + size?: number; + slug?: string; + // (undocumented) + updated_on?: string; + uuid?: string; + } + const RepositoryForkPolicyEnum: { + readonly AllowForks: 'allow_forks'; + readonly NoPublicForks: 'no_public_forks'; + readonly NoForks: 'no_forks'; + }; + export type RepositoryForkPolicyEnum = + (typeof RepositoryForkPolicyEnum)[keyof typeof RepositoryForkPolicyEnum]; + const // (undocumented) + RepositoryScmEnum: { + readonly Git: 'git'; + }; + // (undocumented) + export interface RepositoryLinks { + // (undocumented) + avatar?: Link; + // (undocumented) + clone?: Array; + // (undocumented) + commits?: Link; + // (undocumented) + downloads?: Link; + // (undocumented) + forks?: Link; + // (undocumented) + hooks?: Link; + // (undocumented) + html?: Link; + // (undocumented) + pullrequests?: Link; + // (undocumented) + self?: Link; + // (undocumented) + watchers?: Link; + } + // (undocumented) + export type RepositoryScmEnum = + (typeof RepositoryScmEnum)[keyof typeof RepositoryScmEnum]; + // (undocumented) + export interface SearchCodeSearchResult { + // (undocumented) + readonly content_match_count?: number; + // (undocumented) + readonly content_matches?: Array; + // (undocumented) + file?: CommitFile; + // (undocumented) + readonly path_matches?: Array; + // (undocumented) + readonly type?: string; + } + // (undocumented) + export interface SearchContentMatch { + // (undocumented) + readonly lines?: Array; + } + // (undocumented) + export interface SearchLine { + // (undocumented) + readonly line?: number; + // (undocumented) + readonly segments?: Array; + } + // (undocumented) + export interface SearchResultPage extends Paginated { + // (undocumented) + readonly query_substituted?: boolean; + readonly values?: Array; + } + // (undocumented) + export interface SearchSegment { + // (undocumented) + readonly match?: boolean; + // (undocumented) + readonly text?: string; + } + export interface Team extends Account { + // (undocumented) + links?: TeamLinks; + } + export interface TeamLinks extends AccountLinks { + // (undocumented) + html?: Link; + // (undocumented) + members?: Link; + // (undocumented) + projects?: Link; + // (undocumented) + repositories?: Link; + // (undocumented) + self?: Link; + } + export interface Workspace extends ModelObject { + // (undocumented) + created_on?: string; + is_private?: boolean; + // (undocumented) + links?: WorkspaceLinks; + name?: string; + slug?: string; + // (undocumented) + updated_on?: string; + uuid?: string; + } + // (undocumented) + export interface WorkspaceLinks { + // (undocumented) + avatar?: Link; + // (undocumented) + html?: Link; + // (undocumented) + members?: Link; + // (undocumented) + owners?: Link; + // (undocumented) + projects?: Link; + // (undocumented) + repositories?: Link; + // (undocumented) + self?: Link; + // (undocumented) + snippets?: Link; + } +} + +// @public (undocumented) +export type PaginationOptions = { + page?: number; + pagelen?: number; +}; + +// @public (undocumented) +export type PartialResponseOptions = { + fields?: string; +}; + +// @public (undocumented) +export type RequestOptions = FilterAndSortOptions & + PaginationOptions & + PartialResponseOptions & { + [key: string]: string | number | undefined; + }; + +// @public (undocumented) +export class WithPagination< + TPage extends Models.Paginated, + TResultItem, +> { + constructor( + createUrl: (options: PaginationOptions) => URL, + fetch: (url: URL) => Promise, + ); + // (undocumented) + getPage(options?: PaginationOptions): Promise; + // (undocumented) + iteratePages(options?: PaginationOptions): AsyncGenerator; + // (undocumented) + iterateResults( + options?: PaginationOptions, + ): AsyncGenerator, void, unknown>; +} + +// Warnings were encountered during analysis: +// +// src/BitbucketCloudClient.d.ts:6:1 - (ae-undocumented) Missing documentation for "BitbucketCloudClient". +// src/BitbucketCloudClient.d.ts:8:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/BitbucketCloudClient.d.ts:10:5 - (ae-undocumented) Missing documentation for "searchCode". +// src/BitbucketCloudClient.d.ts:11:5 - (ae-undocumented) Missing documentation for "listRepositoriesByWorkspace". +// src/BitbucketCloudClient.d.ts:12:5 - (ae-undocumented) Missing documentation for "listProjectsByWorkspace". +// src/BitbucketCloudClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "listWorkspaces". +// src/BitbucketCloudClient.d.ts:14:5 - (ae-undocumented) Missing documentation for "listBranchesByRepository". +// src/events/index.d.ts:3:1 - (ae-undocumented) Missing documentation for "Events". +// src/events/index.d.ts:5:5 - (ae-undocumented) Missing documentation for "RepoEvent". +// src/events/index.d.ts:6:9 - (ae-undocumented) Missing documentation for "repository". +// src/events/index.d.ts:9:9 - (ae-undocumented) Missing documentation for "actor". +// src/events/index.d.ts:12:5 - (ae-undocumented) Missing documentation for "RepoPushEvent". +// src/events/index.d.ts:13:9 - (ae-undocumented) Missing documentation for "push". +// src/events/index.d.ts:16:5 - (ae-undocumented) Missing documentation for "RepoPush". +// src/events/index.d.ts:17:9 - (ae-undocumented) Missing documentation for "changes". +// src/events/index.d.ts:20:5 - (ae-undocumented) Missing documentation for "Change". +// src/events/index.d.ts:21:9 - (ae-undocumented) Missing documentation for "old". +// src/events/index.d.ts:22:9 - (ae-undocumented) Missing documentation for "new". +// src/events/index.d.ts:23:9 - (ae-undocumented) Missing documentation for "truncated". +// src/events/index.d.ts:24:9 - (ae-undocumented) Missing documentation for "created". +// src/events/index.d.ts:25:9 - (ae-undocumented) Missing documentation for "forced". +// src/events/index.d.ts:26:9 - (ae-undocumented) Missing documentation for "closed". +// src/events/index.d.ts:27:9 - (ae-undocumented) Missing documentation for "links". +// src/events/index.d.ts:28:9 - (ae-undocumented) Missing documentation for "commits". +// src/events/index.d.ts:31:5 - (ae-undocumented) Missing documentation for "ChangeLinks". +// src/events/index.d.ts:32:9 - (ae-undocumented) Missing documentation for "commits". +// src/events/index.d.ts:33:9 - (ae-undocumented) Missing documentation for "diff". +// src/events/index.d.ts:34:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:13:1 - (ae-undocumented) Missing documentation for "Models". +// src/models/index.d.ts:19:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:20:9 - (ae-undocumented) Missing documentation for "display_name". +// src/models/index.d.ts:21:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:22:9 - (ae-undocumented) Missing documentation for "username". +// src/models/index.d.ts:23:9 - (ae-undocumented) Missing documentation for "uuid". +// src/models/index.d.ts:30:9 - (ae-undocumented) Missing documentation for "__index". +// src/models/index.d.ts:31:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:42:9 - (ae-undocumented) Missing documentation for "user". +// src/models/index.d.ts:49:9 - (ae-undocumented) Missing documentation for "author". +// src/models/index.d.ts:50:9 - (ae-undocumented) Missing documentation for "date". +// src/models/index.d.ts:51:9 - (ae-undocumented) Missing documentation for "hash". +// src/models/index.d.ts:52:9 - (ae-undocumented) Missing documentation for "message". +// src/models/index.d.ts:53:9 - (ae-undocumented) Missing documentation for "parents". +// src/models/index.d.ts:54:9 - (ae-undocumented) Missing documentation for "summary". +// src/models/index.d.ts:59:5 - (ae-undocumented) Missing documentation for "BaseCommitSummary". +// src/models/index.d.ts:92:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:97:9 - (ae-undocumented) Missing documentation for "target". +// src/models/index.d.ts:98:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:127:9 - (ae-undocumented) Missing documentation for "participants". +// src/models/index.d.ts:128:9 - (ae-undocumented) Missing documentation for "repository". +// src/models/index.d.ts:135:9 - (ae-undocumented) Missing documentation for "__index". +// src/models/index.d.ts:136:9 - (ae-undocumented) Missing documentation for "attributes". +// src/models/index.d.ts:137:9 - (ae-undocumented) Missing documentation for "commit". +// src/models/index.d.ts:146:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:151:11 - (ae-undocumented) Missing documentation for "CommitFileAttributesEnum". +// src/models/index.d.ts:161:5 - (ae-undocumented) Missing documentation for "CommitFileAttributesEnum". +// src/models/index.d.ts:167:9 - (ae-undocumented) Missing documentation for "href". +// src/models/index.d.ts:168:9 - (ae-undocumented) Missing documentation for "name". +// src/models/index.d.ts:175:9 - (ae-undocumented) Missing documentation for "__index". +// src/models/index.d.ts:176:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:253:9 - (ae-undocumented) Missing documentation for "approved". +// src/models/index.d.ts:258:9 - (ae-undocumented) Missing documentation for "role". +// src/models/index.d.ts:259:9 - (ae-undocumented) Missing documentation for "state". +// src/models/index.d.ts:260:9 - (ae-undocumented) Missing documentation for "user". +// src/models/index.d.ts:265:11 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". +// src/models/index.d.ts:272:5 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". +// src/models/index.d.ts:276:11 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". +// src/models/index.d.ts:284:5 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". +// src/models/index.d.ts:291:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:292:9 - (ae-undocumented) Missing documentation for "description". +// src/models/index.d.ts:310:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:315:9 - (ae-undocumented) Missing documentation for "owner". +// src/models/index.d.ts:316:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:325:5 - (ae-undocumented) Missing documentation for "ProjectLinks". +// src/models/index.d.ts:326:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:327:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:332:5 - (ae-undocumented) Missing documentation for "RefLinks". +// src/models/index.d.ts:333:9 - (ae-undocumented) Missing documentation for "commits". +// src/models/index.d.ts:334:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:335:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:342:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:343:9 - (ae-undocumented) Missing documentation for "description". +// src/models/index.d.ts:372:9 - (ae-undocumented) Missing documentation for "is_private". +// src/models/index.d.ts:373:9 - (ae-undocumented) Missing documentation for "language". +// src/models/index.d.ts:374:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:375:9 - (ae-undocumented) Missing documentation for "mainbranch". +// src/models/index.d.ts:376:9 - (ae-undocumented) Missing documentation for "name". +// src/models/index.d.ts:377:9 - (ae-undocumented) Missing documentation for "owner". +// src/models/index.d.ts:378:9 - (ae-undocumented) Missing documentation for "parent". +// src/models/index.d.ts:379:9 - (ae-undocumented) Missing documentation for "project". +// src/models/index.d.ts:380:9 - (ae-undocumented) Missing documentation for "scm". +// src/models/index.d.ts:381:9 - (ae-undocumented) Missing documentation for "size". +// src/models/index.d.ts:386:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:421:11 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". +// src/models/index.d.ts:427:5 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". +// src/models/index.d.ts:431:5 - (ae-undocumented) Missing documentation for "RepositoryLinks". +// src/models/index.d.ts:432:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:433:9 - (ae-undocumented) Missing documentation for "clone". +// src/models/index.d.ts:434:9 - (ae-undocumented) Missing documentation for "commits". +// src/models/index.d.ts:435:9 - (ae-undocumented) Missing documentation for "downloads". +// src/models/index.d.ts:436:9 - (ae-undocumented) Missing documentation for "forks". +// src/models/index.d.ts:437:9 - (ae-undocumented) Missing documentation for "hooks". +// src/models/index.d.ts:438:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:439:9 - (ae-undocumented) Missing documentation for "pullrequests". +// src/models/index.d.ts:440:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:441:9 - (ae-undocumented) Missing documentation for "watchers". +// src/models/index.d.ts:446:5 - (ae-undocumented) Missing documentation for "SearchCodeSearchResult". +// src/models/index.d.ts:447:9 - (ae-undocumented) Missing documentation for "content_match_count". +// src/models/index.d.ts:448:9 - (ae-undocumented) Missing documentation for "content_matches". +// src/models/index.d.ts:449:9 - (ae-undocumented) Missing documentation for "file". +// src/models/index.d.ts:450:9 - (ae-undocumented) Missing documentation for "path_matches". +// src/models/index.d.ts:451:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:456:5 - (ae-undocumented) Missing documentation for "SearchContentMatch". +// src/models/index.d.ts:457:9 - (ae-undocumented) Missing documentation for "lines". +// src/models/index.d.ts:462:5 - (ae-undocumented) Missing documentation for "SearchLine". +// src/models/index.d.ts:463:9 - (ae-undocumented) Missing documentation for "line". +// src/models/index.d.ts:464:9 - (ae-undocumented) Missing documentation for "segments". +// src/models/index.d.ts:469:5 - (ae-undocumented) Missing documentation for "SearchResultPage". +// src/models/index.d.ts:470:9 - (ae-undocumented) Missing documentation for "query_substituted". +// src/models/index.d.ts:479:5 - (ae-undocumented) Missing documentation for "SearchSegment". +// src/models/index.d.ts:480:9 - (ae-undocumented) Missing documentation for "match". +// src/models/index.d.ts:481:9 - (ae-undocumented) Missing documentation for "text". +// src/models/index.d.ts:488:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:495:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:496:9 - (ae-undocumented) Missing documentation for "members". +// src/models/index.d.ts:497:9 - (ae-undocumented) Missing documentation for "projects". +// src/models/index.d.ts:498:9 - (ae-undocumented) Missing documentation for "repositories". +// src/models/index.d.ts:499:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:507:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:513:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:522:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:531:5 - (ae-undocumented) Missing documentation for "WorkspaceLinks". +// src/models/index.d.ts:532:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:533:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:534:9 - (ae-undocumented) Missing documentation for "members". +// src/models/index.d.ts:535:9 - (ae-undocumented) Missing documentation for "owners". +// src/models/index.d.ts:536:9 - (ae-undocumented) Missing documentation for "projects". +// src/models/index.d.ts:537:9 - (ae-undocumented) Missing documentation for "repositories". +// src/models/index.d.ts:538:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:539:9 - (ae-undocumented) Missing documentation for "snippets". +// src/pagination.d.ts:3:1 - (ae-undocumented) Missing documentation for "PaginationOptions". +// src/pagination.d.ts:8:1 - (ae-undocumented) Missing documentation for "WithPagination". +// src/pagination.d.ts:12:5 - (ae-undocumented) Missing documentation for "getPage". +// src/pagination.d.ts:13:5 - (ae-undocumented) Missing documentation for "iteratePages". +// src/pagination.d.ts:14:5 - (ae-undocumented) Missing documentation for "iterateResults". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "FilterAndSortOptions". +// src/types.d.ts:8:1 - (ae-undocumented) Missing documentation for "PartialResponseOptions". +// src/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "RequestOptions". +``` diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index abaa55e7ab..6a6ca89a9c 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.4.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 28e61af808..79257f9acd 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", - "version": "0.4.2", + "version": "0.4.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards AWS", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-aws/api-report-alpha.md b/plugins/catalog-backend-module-aws/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-aws/api-report-alpha.md rename to plugins/catalog-backend-module-aws/report-alpha.api.md diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/report.api.md similarity index 74% rename from plugins/catalog-backend-module-aws/api-report.md rename to plugins/catalog-backend-module-aws/report.api.md index 98d757270e..3d24c71035 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/report.api.md @@ -89,7 +89,6 @@ export class AwsS3DiscoveryProcessor implements CatalogProcessor { // @public export class AwsS3EntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -100,7 +99,6 @@ export class AwsS3EntityProvider implements EntityProvider { scheduler?: SchedulerService; }, ): AwsS3EntityProvider[]; - // (undocumented) getProviderName(): string; // (undocumented) refresh(logger: LoggerService): Promise; @@ -114,4 +112,17 @@ export type EksClusterEntityTransformer = ( cluster: Cluster, accountId: string, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/processors/AwsEKSClusterProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/AwsEKSClusterProcessor.d.ts:26:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AwsEKSClusterProcessor.d.ts:27:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/AwsOrganizationCloudAccountProcessor.d.ts:17:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/AwsOrganizationCloudAccountProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AwsOrganizationCloudAccountProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/AwsS3DiscoveryProcessor.d.ts:15:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AwsS3DiscoveryProcessor.d.ts:16:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/providers/AwsS3EntityProvider.d.ts:20:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/AwsS3EntityProvider.d.ts:31:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 6a3f52794b..215c06eab2 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index b60f6fcff0..6a28c8ae81 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", - "version": "0.2.2", + "version": "0.2.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards Azure", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-azure/api-report-alpha.md b/plugins/catalog-backend-module-azure/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-azure/api-report-alpha.md rename to plugins/catalog-backend-module-azure/report-alpha.api.md diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/report.api.md similarity index 74% rename from plugins/catalog-backend-module-azure/api-report.md rename to plugins/catalog-backend-module-azure/report.api.md index 9220b08ab4..f3121296a5 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/report.api.md @@ -39,7 +39,6 @@ export class AzureDevOpsDiscoveryProcessor implements CatalogProcessor { // @public export class AzureDevOpsEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -50,9 +49,16 @@ export class AzureDevOpsEntityProvider implements EntityProvider { scheduler?: SchedulerService; }, ): AzureDevOpsEntityProvider[]; - // (undocumented) getProviderName(): string; // (undocumented) refresh(logger: LoggerService): Promise; } + +// Warnings were encountered during analysis: +// +// src/processors/AzureDevOpsDiscoveryProcessor.d.ts:26:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/AzureDevOpsDiscoveryProcessor.d.ts:33:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AzureDevOpsDiscoveryProcessor.d.ts:34:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/providers/AzureDevOpsEntityProvider.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/AzureDevOpsEntityProvider.d.ts:29:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md index caccf4b596..b2eb03c321 100644 --- a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-backstage-openapi +## 0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.4.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-backstage-openapi/package.json b/plugins/catalog-backend-module-backstage-openapi/package.json index de6a137af1..e72a9eb9de 100644 --- a/plugins/catalog-backend-module-backstage-openapi/package.json +++ b/plugins/catalog-backend-module-backstage-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-backstage-openapi", - "version": "0.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-backstage-openapi/api-report.md b/plugins/catalog-backend-module-backstage-openapi/report.api.md similarity index 65% rename from plugins/catalog-backend-module-backstage-openapi/api-report.md rename to plugins/catalog-backend-module-backstage-openapi/report.api.md index 06334182cb..88ad499e84 100644 --- a/plugins/catalog-backend-module-backstage-openapi/api-report.md +++ b/plugins/catalog-backend-module-backstage-openapi/report.api.md @@ -18,5 +18,11 @@ export type MetaApiDocsPluginOptions = { // @public (undocumented) export const metaOpenApiDocsPluginId = 'meta-api-docs'; +// Warnings were encountered during analysis: +// +// src/index.d.ts:4:1 - (ae-undocumented) Missing documentation for "MetaApiDocsPluginOptions". +// src/index.d.ts:10:22 - (ae-undocumented) Missing documentation for "metaOpenApiDocsPluginId". +// src/index.d.ts:14:22 - (ae-undocumented) Missing documentation for "catalogModuleInternalOpenApiSpec". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 04b208efa6..344fda6c2a 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.3.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.3.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 76daa74ba9..9abd0703dc 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", - "version": "0.3.2", + "version": "0.3.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.md b/plugins/catalog-backend-module-bitbucket-cloud/report-alpha.api.md similarity index 69% rename from plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.md rename to plugins/catalog-backend-module-bitbucket-cloud/report-alpha.api.md index 34ec7a692a..3f0a2d1514 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/report-alpha.api.md @@ -9,5 +9,9 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; const catalogModuleBitbucketCloudEntityProvider: BackendFeature; export default catalogModuleBitbucketCloudEntityProvider; +// Warnings were encountered during analysis: +// +// src/module/catalogModuleBitbucketCloudEntityProvider.d.ts:4:22 - (ae-undocumented) Missing documentation for "catalogModuleBitbucketCloudEntityProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md b/plugins/catalog-backend-module-bitbucket-cloud/report.api.md similarity index 79% rename from plugins/catalog-backend-module-bitbucket-cloud/api-report.md rename to plugins/catalog-backend-module-bitbucket-cloud/report.api.md index bba0b754e2..d6c1977ce8 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/report.api.md @@ -16,7 +16,6 @@ import { TokenManager } from '@backstage/backend-common'; // @public export class BitbucketCloudEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -30,13 +29,17 @@ export class BitbucketCloudEntityProvider implements EntityProvider { tokenManager?: TokenManager; }, ): BitbucketCloudEntityProvider[]; - // (undocumented) getProviderName(): string; - // (undocumented) getTaskId(): string; // (undocumented) onRepoPush(event: Events.RepoPushEvent): Promise; // (undocumented) refresh(logger: LoggerService): Promise; } + +// Warnings were encountered during analysis: +// +// src/providers/BitbucketCloudEntityProvider.d.ts:28:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/BitbucketCloudEntityProvider.d.ts:44:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/BitbucketCloudEntityProvider.d.ts:47:5 - (ae-undocumented) Missing documentation for "onRepoPush". ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index a167c8c0de..dd4c51cf86 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index ab33b095f2..bf4d7954a7 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.2.2", + "version": "0.2.3-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report-alpha.md b/plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md similarity index 68% rename from plugins/catalog-backend-module-bitbucket-server/api-report-alpha.md rename to plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md index 7edb314814..49648580f8 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report-alpha.md +++ b/plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md @@ -9,5 +9,9 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; const catalogModuleBitbucketServerEntityProvider: BackendFeature; export default catalogModuleBitbucketServerEntityProvider; +// Warnings were encountered during analysis: +// +// src/module/catalogModuleBitbucketServerEntityProvider.d.ts:4:22 - (ae-undocumented) Missing documentation for "catalogModuleBitbucketServerEntityProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.md b/plugins/catalog-backend-module-bitbucket-server/report.api.md similarity index 70% rename from plugins/catalog-backend-module-bitbucket-server/api-report.md rename to plugins/catalog-backend-module-bitbucket-server/report.api.md index 211096639c..a7febe8e7a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/report.api.md @@ -49,7 +49,6 @@ export class BitbucketServerClient { // @public export class BitbucketServerEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -61,7 +60,6 @@ export class BitbucketServerEntityProvider implements EntityProvider { scheduler?: SchedulerService; }, ): BitbucketServerEntityProvider[]; - // (undocumented) getProviderName(): string; // (undocumented) refresh(logger: LoggerService): Promise; @@ -111,4 +109,19 @@ export type BitbucketServerRepository = { >; archived: boolean; }; + +// Warnings were encountered during analysis: +// +// src/lib/BitbucketServerClient.d.ts:11:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/lib/BitbucketServerClient.d.ts:17:5 - (ae-undocumented) Missing documentation for "listProjects". +// src/lib/BitbucketServerClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "listRepositories". +// src/lib/BitbucketServerClient.d.ts:24:5 - (ae-undocumented) Missing documentation for "getFile". +// src/lib/BitbucketServerClient.d.ts:29:5 - (ae-undocumented) Missing documentation for "getRepository". +// src/lib/BitbucketServerClient.d.ts:33:5 - (ae-undocumented) Missing documentation for "resolvePath". +// src/lib/BitbucketServerClient.d.ts:48:1 - (ae-undocumented) Missing documentation for "BitbucketServerListOptions". +// src/lib/BitbucketServerClient.d.ts:56:1 - (ae-undocumented) Missing documentation for "BitbucketServerPagedResponse". +// src/lib/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "BitbucketServerRepository". +// src/lib/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "BitbucketServerProject". +// src/providers/BitbucketServerEntityProvider.d.ts:20:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/BitbucketServerEntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-gcp/CHANGELOG.md b/plugins/catalog-backend-module-gcp/CHANGELOG.md index 3e3c4621f8..0401ef7124 100644 --- a/plugins/catalog-backend-module-gcp/CHANGELOG.md +++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gcp +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.3.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index 2805118f78..f8e7986831 100644 --- a/plugins/catalog-backend-module-gcp/package.json +++ b/plugins/catalog-backend-module-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gcp", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "A Backstage catalog backend module that helps integrate towards GCP", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gcp/api-report-alpha.md b/plugins/catalog-backend-module-gcp/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-gcp/api-report-alpha.md rename to plugins/catalog-backend-module-gcp/report-alpha.api.md diff --git a/plugins/catalog-backend-module-gcp/api-report.md b/plugins/catalog-backend-module-gcp/report.api.md similarity index 71% rename from plugins/catalog-backend-module-gcp/api-report.md rename to plugins/catalog-backend-module-gcp/report.api.md index 6260d07c88..cf490f09ae 100644 --- a/plugins/catalog-backend-module-gcp/api-report.md +++ b/plugins/catalog-backend-module-gcp/report.api.md @@ -46,4 +46,12 @@ export class GkeEntityProvider implements EntityProvider { // (undocumented) refresh(): Promise; } + +// Warnings were encountered during analysis: +// +// src/providers/GkeEntityProvider.d.ts:17:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GkeEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfigWithClient". +// src/providers/GkeEntityProvider.d.ts:28:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GkeEntityProvider.d.ts:29:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GkeEntityProvider.d.ts:35:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index fa62124c19..dd3555a6ee 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 0a18e4bded..723e7f9836 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.2.2", + "version": "0.2.3-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-gerrit/api-report-alpha.md b/plugins/catalog-backend-module-gerrit/report-alpha.api.md similarity index 69% rename from plugins/catalog-backend-module-gerrit/api-report-alpha.md rename to plugins/catalog-backend-module-gerrit/report-alpha.api.md index 02aceb07c6..0774a27299 100644 --- a/plugins/catalog-backend-module-gerrit/api-report-alpha.md +++ b/plugins/catalog-backend-module-gerrit/report-alpha.api.md @@ -9,5 +9,9 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; const catalogModuleGerritEntityProvider: BackendFeature; export default catalogModuleGerritEntityProvider; +// Warnings were encountered during analysis: +// +// src/module/catalogModuleGerritEntityProvider.d.ts:4:22 - (ae-undocumented) Missing documentation for "catalogModuleGerritEntityProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-gerrit/api-report.md b/plugins/catalog-backend-module-gerrit/report.api.md similarity index 65% rename from plugins/catalog-backend-module-gerrit/api-report.md rename to plugins/catalog-backend-module-gerrit/report.api.md index abf2a83e7b..56930f3357 100644 --- a/plugins/catalog-backend-module-gerrit/api-report.md +++ b/plugins/catalog-backend-module-gerrit/report.api.md @@ -29,5 +29,13 @@ export class GerritEntityProvider implements EntityProvider { refresh(logger: LoggerService): Promise; } +// Warnings were encountered during analysis: +// +// src/providers/GerritEntityProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "GerritEntityProvider". +// src/providers/GerritEntityProvider.d.ts:11:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GerritEntityProvider.d.ts:17:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GerritEntityProvider.d.ts:18:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GerritEntityProvider.d.ts:20:5 - (ae-undocumented) Missing documentation for "refresh". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-github-org/CHANGELOG.md b/plugins/catalog-backend-module-github-org/CHANGELOG.md index ed3b42a1e7..c39c744677 100644 --- a/plugins/catalog-backend-module-github-org/CHANGELOG.md +++ b/plugins/catalog-backend-module-github-org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-github-org +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-github@0.7.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-github-org/package.json b/plugins/catalog-backend-module-github-org/package.json index 32625be7e5..6ee5584748 100644 --- a/plugins/catalog-backend-module-github-org/package.json +++ b/plugins/catalog-backend-module-github-org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-github-org", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The github-org backend module for the catalog plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-github-org/api-report.md b/plugins/catalog-backend-module-github-org/report.api.md similarity index 100% rename from plugins/catalog-backend-module-github-org/api-report.md rename to plugins/catalog-backend-module-github-org/report.api.md diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index d7ea344fcf..b2c7d359a6 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-github +## 0.7.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.7.3 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index cdd91ee0ef..876deb2db8 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-github", - "version": "0.7.3", + "version": "0.7.4-next.0", "description": "A Backstage catalog backend module that helps integrate towards GitHub", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-github/api-report-alpha.md b/plugins/catalog-backend-module-github/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-github/api-report-alpha.md rename to plugins/catalog-backend-module-github/report-alpha.api.md diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/report.api.md similarity index 70% rename from plugins/catalog-backend-module-github/api-report.md rename to plugins/catalog-backend-module-github/report.api.md index 025d845644..4ffe434615 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/report.api.md @@ -83,7 +83,6 @@ export class GitHubEntityProvider implements EntityProvider { // @public export class GithubEntityProvider implements EntityProvider, EventSubscriber { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -95,13 +94,10 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { scheduler?: SchedulerService; }, ): GithubEntityProvider[]; - // (undocumented) getProviderName(): string; - // (undocumented) onEvent(params: EventParams): Promise; // (undocumented) refresh(logger: LoggerService): Promise; - // (undocumented) supportsEventTopics(): string[]; } @@ -154,14 +150,12 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { teamTransformer?: TeamTransformer; alwaysUseDefaultNamespace?: boolean; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( config: Config, options: GithubMultiOrgEntityProviderOptions, ): GithubMultiOrgEntityProvider; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -231,14 +225,12 @@ export class GithubOrgEntityProvider implements EntityProvider { userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( config: Config, options: GithubOrgEntityProviderOptions, ): GithubOrgEntityProvider; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -326,4 +318,41 @@ export type UserTransformer = ( item: GithubUser, ctx: TransformerContext, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/analyzers/GithubLocationAnalyzer.d.ts:8:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzerOptions". +// src/analyzers/GithubLocationAnalyzer.d.ts:17:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzer". +// src/analyzers/GithubLocationAnalyzer.d.ts:23:5 - (ae-undocumented) Missing documentation for "supports". +// src/analyzers/GithubLocationAnalyzer.d.ts:24:5 - (ae-undocumented) Missing documentation for "analyze". +// src/deprecated.d.ts:9:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProvider". +// src/deprecated.d.ts:10:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/deprecated.d.ts:16:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProviderOptions". +// src/deprecated.d.ts:21:1 - (ae-undocumented) Missing documentation for "GitHubEntityProvider". +// src/deprecated.d.ts:23:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/deprecated.d.ts:29:5 - (ae-undocumented) Missing documentation for "connect". +// src/deprecated.d.ts:30:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/deprecated.d.ts:31:5 - (ae-undocumented) Missing documentation for "refresh". +// src/lib/defaultTransformers.d.ts:10:5 - (ae-undocumented) Missing documentation for "client". +// src/lib/defaultTransformers.d.ts:11:5 - (ae-undocumented) Missing documentation for "query". +// src/lib/defaultTransformers.d.ts:12:5 - (ae-undocumented) Missing documentation for "org". +// src/processors/GithubDiscoveryProcessor.d.ts:25:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/GithubDiscoveryProcessor.d.ts:34:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/GithubDiscoveryProcessor.d.ts:35:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/GithubMultiOrgReaderProcessor.d.ts:19:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/GithubMultiOrgReaderProcessor.d.ts:33:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/GithubMultiOrgReaderProcessor.d.ts:34:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/GithubOrgReaderProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/GithubOrgReaderProcessor.d.ts:27:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/GithubOrgReaderProcessor.d.ts:28:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/providers/GithubEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GithubEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/GithubEntityProvider.d.ts:51:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:60:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:71:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:81:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:93:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:102:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubMultiOrgEntityProvider.d.ts:84:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GithubOrgEntityProvider.d.ts:71:5 - (ae-undocumented) Missing documentation for "fromConfig". ``` diff --git a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md index 1b2575bfa1..873043659b 100644 --- a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gitlab-org +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-gitlab-org/package.json b/plugins/catalog-backend-module-gitlab-org/package.json index fcf680e2a2..ac03c3f267 100644 --- a/plugins/catalog-backend-module-gitlab-org/package.json +++ b/plugins/catalog-backend-module-gitlab-org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab-org", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gitlab-org backend module for the catalog plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gitlab-org/api-report.md b/plugins/catalog-backend-module-gitlab-org/report.api.md similarity index 100% rename from plugins/catalog-backend-module-gitlab-org/api-report.md rename to plugins/catalog-backend-module-gitlab-org/report.api.md diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 3aa3f73ae3..97d8126847 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.4.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 0e2763b5cd..ddad638848 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", - "version": "0.4.2", + "version": "0.4.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards GitLab", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gitlab/api-report-alpha.md b/plugins/catalog-backend-module-gitlab/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-gitlab/api-report-alpha.md rename to plugins/catalog-backend-module-gitlab/report-alpha.api.md diff --git a/plugins/catalog-backend-module-gitlab/api-report.md b/plugins/catalog-backend-module-gitlab/report.api.md similarity index 65% rename from plugins/catalog-backend-module-gitlab/api-report.md rename to plugins/catalog-backend-module-gitlab/report.api.md index b2c71c787b..0cc2f93ce1 100644 --- a/plugins/catalog-backend-module-gitlab/api-report.md +++ b/plugins/catalog-backend-module-gitlab/report.api.md @@ -171,4 +171,29 @@ export interface UserTransformerOptions { // (undocumented) user: GitLabUser; } + +// Warnings were encountered during analysis: +// +// src/GitLabDiscoveryProcessor.d.ts:14:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/GitLabDiscoveryProcessor.d.ts:20:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/GitLabDiscoveryProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/lib/types.d.ts:48:1 - (ae-undocumented) Missing documentation for "GitLabGroupSamlIdentity". +// src/lib/types.d.ts:234:5 - (ae-undocumented) Missing documentation for "group". +// src/lib/types.d.ts:235:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:249:5 - (ae-undocumented) Missing documentation for "user". +// src/lib/types.d.ts:250:5 - (ae-undocumented) Missing documentation for "integrationConfig". +// src/lib/types.d.ts:251:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:252:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". +// src/lib/types.d.ts:266:5 - (ae-undocumented) Missing documentation for "groups". +// src/lib/types.d.ts:267:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:268:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:34:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:75:15 - (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}' +// src/providers/GitlabDiscoveryEntityProvider.d.ts:76:30 - (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag +// src/providers/GitlabDiscoveryEntityProvider.d.ts:76:17 - (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@" +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:31:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "connect". ``` diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index a4e3c12c23..755ec20fa2 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.5.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.5.3 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index e10ec5479e..971f76cfef 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", - "version": "0.5.3", + "version": "0.5.4-next.0", "description": "An entity provider for streaming large asset sources into the catalog", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.md b/plugins/catalog-backend-module-incremental-ingestion/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.md rename to plugins/catalog-backend-module-incremental-ingestion/report-alpha.api.md diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report.md b/plugins/catalog-backend-module-incremental-ingestion/report.api.md similarity index 82% rename from plugins/catalog-backend-module-incremental-ingestion/api-report.md rename to plugins/catalog-backend-module-incremental-ingestion/report.api.md index 22b497b2f7..7160ff504f 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/api-report.md +++ b/plugins/catalog-backend-module-incremental-ingestion/report.api.md @@ -94,4 +94,12 @@ export type PluginEnvironment = { reader: UrlReaderService; permissions: PermissionEvaluator; }; + +// Warnings were encountered during analysis: +// +// src/service/IncrementalCatalogBuilder.d.ts:6:1 - (ae-undocumented) Missing documentation for "IncrementalCatalogBuilder". +// src/service/IncrementalCatalogBuilder.d.ts:20:5 - (ae-undocumented) Missing documentation for "build". +// src/service/IncrementalCatalogBuilder.d.ts:23:5 - (ae-undocumented) Missing documentation for "addIncrementalEntityProvider". +// src/types.d.ts:106:1 - (ae-undocumented) Missing documentation for "IncrementalEntityProviderOptions". +// src/types.d.ts:145:1 - (ae-undocumented) Missing documentation for "PluginEnvironment". ``` diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 9bc6f0cd94..7b7c97d4e9 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.9.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 8b5c8d0136..c8487244ba 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", - "version": "0.9.0", + "version": "0.9.1-next.0", "description": "A Backstage catalog backend module that helps integrate towards LDAP", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-ldap/api-report.md b/plugins/catalog-backend-module-ldap/report.api.md similarity index 91% rename from plugins/catalog-backend-module-ldap/api-report.md rename to plugins/catalog-backend-module-ldap/report.api.md index a786d48fdb..e8b20073a3 100644 --- a/plugins/catalog-backend-module-ldap/api-report.md +++ b/plugins/catalog-backend-module-ldap/report.api.md @@ -113,7 +113,6 @@ export class LdapOrgEntityProvider implements EntityProvider { userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -125,7 +124,6 @@ export class LdapOrgEntityProvider implements EntityProvider { configRoot: Config, options: LdapOrgEntityProviderLegacyOptions, ): LdapOrgEntityProvider; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -277,4 +275,13 @@ export type VendorConfig = { dnAttributeName?: string; uuidAttributeName?: string; }; + +// Warnings were encountered during analysis: +// +// src/ldap/client.d.ts:16:5 - (ae-undocumented) Missing documentation for "create". +// src/processors/LdapOrgEntityProvider.d.ts:107:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/LdapOrgEntityProvider.d.ts:108:5 - (ae-undocumented) Missing documentation for "fromLegacyConfig". +// src/processors/LdapOrgReaderProcessor.d.ts:16:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/LdapOrgReaderProcessor.d.ts:27:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/LdapOrgReaderProcessor.d.ts:28:5 - (ae-undocumented) Missing documentation for "readLocation". ``` diff --git a/plugins/catalog-backend-module-logs/CHANGELOG.md b/plugins/catalog-backend-module-logs/CHANGELOG.md index d069d1b029..e546bea60f 100644 --- a/plugins/catalog-backend-module-logs/CHANGELOG.md +++ b/plugins/catalog-backend-module-logs/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-logs +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-logs/package.json b/plugins/catalog-backend-module-logs/package.json index 7bec54a38b..af90a57ad6 100644 --- a/plugins/catalog-backend-module-logs/package.json +++ b/plugins/catalog-backend-module-logs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-logs", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "A module that subscribes to catalog releated events and logs them.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-logs/api-report.md b/plugins/catalog-backend-module-logs/report.api.md similarity index 100% rename from plugins/catalog-backend-module-logs/api-report.md rename to plugins/catalog-backend-module-logs/report.api.md diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 78a6366d5b..dc1fc0b714 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.6.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 33442969a4..7d0c96874d 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", - "version": "0.6.2", + "version": "0.6.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-msgraph/api-report-alpha.md b/plugins/catalog-backend-module-msgraph/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-msgraph/api-report-alpha.md rename to plugins/catalog-backend-module-msgraph/report-alpha.api.md diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/report.api.md similarity index 90% rename from plugins/catalog-backend-module-msgraph/api-report.md rename to plugins/catalog-backend-module-msgraph/report.api.md index acc3b8531b..3df99752db 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/report.api.md @@ -128,14 +128,12 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { organizationTransformer?: OrganizationTransformer; providerConfigTransformer?: ProviderConfigTransformer; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( configRoot: Config, options: MicrosoftGraphOrgEntityProviderOptions, ): MicrosoftGraphOrgEntityProvider[]; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -292,4 +290,14 @@ export type UserTransformer = ( user: MicrosoftGraph.User, userPhoto?: string, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/microsoftGraph/client.d.ts:109:5 - (ae-undocumented) Missing documentation for "getUserPhoto". +// src/microsoftGraph/client.d.ts:129:5 - (ae-undocumented) Missing documentation for "getGroupPhoto". +// src/microsoftGraph/client.d.ts:176:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-msgraph" does not have an export "entityName" +// src/processors/MicrosoftGraphOrgEntityProvider.d.ts:119:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:31:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:32:5 - (ae-undocumented) Missing documentation for "readLocation". ``` diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 7004736f0d..42e9d911ad 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 79079ef637..132496ad60 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-openapi/api-report.md b/plugins/catalog-backend-module-openapi/report.api.md similarity index 71% rename from plugins/catalog-backend-module-openapi/api-report.md rename to plugins/catalog-backend-module-openapi/report.api.md index d79d852387..c913e63294 100644 --- a/plugins/catalog-backend-module-openapi/api-report.md +++ b/plugins/catalog-backend-module-openapi/report.api.md @@ -47,5 +47,14 @@ export class OpenApiRefProcessor implements CatalogProcessor { preProcessEntity(entity: Entity, location: LocationSpec): Promise; } +// Warnings were encountered during analysis: +// +// src/OpenApiRefProcessor.d.ts:12:1 - (ae-undocumented) Missing documentation for "OpenApiRefProcessor". +// src/OpenApiRefProcessor.d.ts:16:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/OpenApiRefProcessor.d.ts:25:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/OpenApiRefProcessor.d.ts:26:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/index.d.ts:8:22 - (ae-undocumented) Missing documentation for "openApiPlaceholderResolver". +// src/jsonSchemaRefPlaceholderResolver.d.ts:4:1 - (ae-undocumented) Missing documentation for "jsonSchemaRefPlaceholderResolver". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index 3b0c5f6747..eb133b2b2c 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index f3fe141d81..e900e2a98a 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", - "version": "0.2.2", + "version": "0.2.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-puppetdb/api-report-alpha.md b/plugins/catalog-backend-module-puppetdb/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-puppetdb/api-report-alpha.md rename to plugins/catalog-backend-module-puppetdb/report-alpha.api.md diff --git a/plugins/catalog-backend-module-puppetdb/api-report.md b/plugins/catalog-backend-module-puppetdb/report.api.md similarity index 67% rename from plugins/catalog-backend-module-puppetdb/api-report.md rename to plugins/catalog-backend-module-puppetdb/report.api.md index 691b752a6b..00874a3b2f 100644 --- a/plugins/catalog-backend-module-puppetdb/api-report.md +++ b/plugins/catalog-backend-module-puppetdb/report.api.md @@ -24,7 +24,6 @@ export const defaultResourceTransformer: ResourceTransformer; // @public export class PuppetDbEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; static fromConfig( config: Config, @@ -35,7 +34,6 @@ export class PuppetDbEntityProvider implements EntityProvider { transformer?: ResourceTransformer; }, ): PuppetDbEntityProvider[]; - // (undocumented) getProviderName(): string; refresh(logger: LoggerService): Promise; } @@ -77,4 +75,12 @@ export type ResourceTransformer = ( node: PuppetNode, config: PuppetDbEntityProviderConfig, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/providers/PuppetDbEntityProvider.d.ts:39:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/PuppetDbEntityProvider.d.ts:41:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "LoggerService" +// src/providers/PuppetDbEntityProvider.d.ts:41:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "SchedulerServiceTaskRunner" +// src/providers/PuppetDbEntityProvider.d.ts:51:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/PuppetDbEntityProvider.d.ts:53:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "SchedulerServiceTaskRunner" ``` diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md index 96c5fe1ba3..5072903466 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-scaffolder-entity-model +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json index d3166b7d7e..d1474909ab 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/api-report.md b/plugins/catalog-backend-module-scaffolder-entity-model/report.api.md similarity index 70% rename from plugins/catalog-backend-module-scaffolder-entity-model/api-report.md rename to plugins/catalog-backend-module-scaffolder-entity-model/report.api.md index 49542b0396..e4af5d5ef5 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/api-report.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/report.api.md @@ -26,4 +26,10 @@ export class ScaffolderEntitiesProcessor implements CatalogProcessor { // (undocumented) validateEntityKind(entity: Entity): Promise; } + +// Warnings were encountered during analysis: +// +// src/processor/ScaffolderEntitiesProcessor.d.ts:10:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processor/ScaffolderEntitiesProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "validateEntityKind". +// src/processor/ScaffolderEntitiesProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "postProcessEntity". ``` diff --git a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md index f0d3b702d7..4f4b6220b8 100644 --- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md +++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-unprocessed +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + ## 0.5.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json index 4ebe703500..16364bcba6 100644 --- a/plugins/catalog-backend-module-unprocessed/package.json +++ b/plugins/catalog-backend-module-unprocessed/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-unprocessed", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "Backstage Catalog module to view unprocessed entities", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-unprocessed/api-report.md b/plugins/catalog-backend-module-unprocessed/report.api.md similarity index 79% rename from plugins/catalog-backend-module-unprocessed/api-report.md rename to plugins/catalog-backend-module-unprocessed/report.api.md index 493082ac7c..ea3a9d974c 100644 --- a/plugins/catalog-backend-module-unprocessed/api-report.md +++ b/plugins/catalog-backend-module-unprocessed/report.api.md @@ -27,4 +27,9 @@ export class UnprocessedEntitiesModule { // (undocumented) registerRoutes(): void; } + +// Warnings were encountered during analysis: +// +// src/UnprocessedEntitiesModule.d.ts:15:5 - (ae-undocumented) Missing documentation for "create". +// src/UnprocessedEntitiesModule.d.ts:26:5 - (ae-undocumented) Missing documentation for "registerRoutes". ``` diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index f8d2a3186d..050b972d07 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog-backend +## 1.26.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 1.26.0 ### Minor Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index c46cd1c2cc..1a18bfdebc 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend", - "version": "1.26.0", + "version": "1.26.1-next.0", "description": "The Backstage backend plugin that provides the Backstage catalog", "backstage": { "role": "backend-plugin", diff --git a/plugins/catalog-backend/api-report-alpha.md b/plugins/catalog-backend/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend/api-report-alpha.md rename to plugins/catalog-backend/report-alpha.api.md diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/report.api.md similarity index 67% rename from plugins/catalog-backend/api-report.md rename to plugins/catalog-backend/report.api.md index 7717066d2a..375f14e5f8 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/report.api.md @@ -478,4 +478,85 @@ export class UrlReaderProcessor implements CatalogProcessor_2 { cache: CatalogProcessorCache_2, ): Promise; } + +// Warnings were encountered during analysis: +// +// src/constants.d.ts:2:22 - (ae-undocumented) Missing documentation for "CATALOG_CONFLICTS_TOPIC". +// src/constants.d.ts:4:22 - (ae-undocumented) Missing documentation for "CATALOG_ERRORS_TOPIC". +// src/deprecated.d.ts:8:22 - (ae-undocumented) Missing documentation for "locationSpecToMetadataName". +// src/deprecated.d.ts:13:22 - (ae-undocumented) Missing documentation for "locationSpecToLocationEntity". +// src/deprecated.d.ts:18:22 - (ae-undocumented) Missing documentation for "processingResult". +// src/deprecated.d.ts:31:1 - (ae-undocumented) Missing documentation for "EntitiesSearchFilter". +// src/deprecated.d.ts:36:1 - (ae-undocumented) Missing documentation for "EntityFilter". +// src/deprecated.d.ts:41:1 - (ae-undocumented) Missing documentation for "DeferredEntity". +// src/deprecated.d.ts:46:1 - (ae-undocumented) Missing documentation for "EntityRelationSpec". +// src/deprecated.d.ts:51:1 - (ae-undocumented) Missing documentation for "CatalogProcessor". +// src/deprecated.d.ts:56:1 - (ae-undocumented) Missing documentation for "CatalogProcessorParser". +// src/deprecated.d.ts:61:1 - (ae-undocumented) Missing documentation for "CatalogProcessorCache". +// src/deprecated.d.ts:66:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEmit". +// src/deprecated.d.ts:71:1 - (ae-undocumented) Missing documentation for "CatalogProcessorLocationResult". +// src/deprecated.d.ts:76:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEntityResult". +// src/deprecated.d.ts:81:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRelationResult". +// src/deprecated.d.ts:86:1 - (ae-undocumented) Missing documentation for "CatalogProcessorErrorResult". +// src/deprecated.d.ts:91:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRefreshKeysResult". +// src/deprecated.d.ts:96:1 - (ae-undocumented) Missing documentation for "CatalogProcessorResult". +// src/deprecated.d.ts:101:1 - (ae-undocumented) Missing documentation for "EntityProvider". +// src/deprecated.d.ts:106:1 - (ae-undocumented) Missing documentation for "EntityProviderConnection". +// src/deprecated.d.ts:111:1 - (ae-undocumented) Missing documentation for "EntityProviderMutation". +// src/deprecated.d.ts:129:1 - (ae-undocumented) Missing documentation for "AnalyzeOptions". +// src/deprecated.d.ts:134:1 - (ae-undocumented) Missing documentation for "LocationAnalyzer". +// src/deprecated.d.ts:139:1 - (ae-undocumented) Missing documentation for "ScmLocationAnalyzer". +// src/deprecated.d.ts:144:1 - (ae-undocumented) Missing documentation for "PlaceholderResolver". +// src/deprecated.d.ts:149:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverParams". +// src/deprecated.d.ts:154:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverRead". +// src/deprecated.d.ts:159:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverResolveUrl". +// src/deprecated.d.ts:164:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationRequest". +// src/deprecated.d.ts:169:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationResponse". +// src/deprecated.d.ts:202:22 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactory". +// src/deprecated.d.ts:207:22 - (ae-undocumented) Missing documentation for "defaultCatalogCollatorEntityTransformer". +// src/deprecated.d.ts:212:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactoryOptions". +// src/deprecated.d.ts:217:1 - (ae-undocumented) Missing documentation for "CatalogCollatorEntityTransformer". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:8:1 - (ae-undocumented) Missing documentation for "CodeOwnersProcessor". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/AnnotateLocationEntityProcessor.d.ts:6:1 - (ae-undocumented) Missing documentation for "AnnotateLocationEntityProcessor". +// src/modules/core/AnnotateLocationEntityProcessor.d.ts:11:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/AnnotateLocationEntityProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:7:1 - (ae-undocumented) Missing documentation for "AnnotateScmSlugEntityProcessor". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:14:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:17:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:5:1 - (ae-undocumented) Missing documentation for "BuiltinKindsEntityProcessor". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:7:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateEntityKind". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:9:5 - (ae-undocumented) Missing documentation for "postProcessEntity". +// src/modules/core/FileReaderProcessor.d.ts:4:1 - (ae-undocumented) Missing documentation for "FileReaderProcessor". +// src/modules/core/FileReaderProcessor.d.ts:5:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/FileReaderProcessor.d.ts:6:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/modules/core/LocationEntityProcessor.d.ts:10:1 - (ae-undocumented) Missing documentation for "LocationEntityProcessorOptions". +// src/modules/core/LocationEntityProcessor.d.ts:28:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/LocationEntityProcessor.d.ts:29:5 - (ae-undocumented) Missing documentation for "postProcessEntity". +// src/modules/core/PlaceholderProcessor.d.ts:8:1 - (ae-undocumented) Missing documentation for "PlaceholderProcessorOptions". +// src/modules/core/PlaceholderProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/PlaceholderProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/UrlReaderProcessor.d.ts:5:1 - (ae-undocumented) Missing documentation for "UrlReaderProcessor". +// src/modules/core/UrlReaderProcessor.d.ts:11:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/UrlReaderProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/modules/util/parse.d.ts:5:1 - (ae-undocumented) Missing documentation for "parseEntityYaml". +// src/processing/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "start". +// src/processing/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "stop". +// src/search/DefaultCatalogCollator.d.ts:11:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollator". +// src/search/DefaultCatalogCollator.d.ts:12:5 - (ae-undocumented) Missing documentation for "discovery". +// src/search/DefaultCatalogCollator.d.ts:13:5 - (ae-undocumented) Missing documentation for "locationTemplate". +// src/search/DefaultCatalogCollator.d.ts:14:5 - (ae-undocumented) Missing documentation for "filter". +// src/search/DefaultCatalogCollator.d.ts:15:5 - (ae-undocumented) Missing documentation for "catalogClient". +// src/search/DefaultCatalogCollator.d.ts:16:5 - (ae-undocumented) Missing documentation for "type". +// src/search/DefaultCatalogCollator.d.ts:17:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/search/DefaultCatalogCollator.d.ts:18:5 - (ae-undocumented) Missing documentation for "tokenManager". +// src/search/DefaultCatalogCollator.d.ts:19:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/search/DefaultCatalogCollator.d.ts:31:5 - (ae-undocumented) Missing documentation for "applyArgsToFormat". +// src/search/DefaultCatalogCollator.d.ts:33:5 - (ae-undocumented) Missing documentation for "execute". +// src/service/CatalogBuilder.d.ts:19:1 - (ae-undocumented) Missing documentation for "CatalogEnvironment". +// src/service/CatalogBuilder.d.ts:233:5 - (ae-undocumented) Missing documentation for "subscribe". ``` diff --git a/plugins/catalog-common/api-report-alpha.md b/plugins/catalog-common/report-alpha.api.md similarity index 100% rename from plugins/catalog-common/api-report-alpha.md rename to plugins/catalog-common/report-alpha.api.md diff --git a/plugins/catalog-common/api-report.md b/plugins/catalog-common/report.api.md similarity index 60% rename from plugins/catalog-common/api-report.md rename to plugins/catalog-common/report.api.md index 231c8aac34..95b1d9b6c6 100644 --- a/plugins/catalog-common/api-report.md +++ b/plugins/catalog-common/report.api.md @@ -64,4 +64,16 @@ export type LocationSpec = { target: string; presence?: 'optional' | 'required'; }; + +// Warnings were encountered during analysis: +// +// src/ingestion/LocationAnalyzer.d.ts:5:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationRequest". +// src/ingestion/LocationAnalyzer.d.ts:10:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationResponse". +// src/ingestion/LocationAnalyzer.d.ts:39:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationEntityField". +// src/search/CatalogEntityDocument.d.ts:9:5 - (ae-undocumented) Missing documentation for "componentType". +// src/search/CatalogEntityDocument.d.ts:10:5 - (ae-undocumented) Missing documentation for "type". +// src/search/CatalogEntityDocument.d.ts:11:5 - (ae-undocumented) Missing documentation for "namespace". +// src/search/CatalogEntityDocument.d.ts:12:5 - (ae-undocumented) Missing documentation for "kind". +// src/search/CatalogEntityDocument.d.ts:13:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/search/CatalogEntityDocument.d.ts:14:5 - (ae-undocumented) Missing documentation for "owner". ``` diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index db1008893c..893e899b5f 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-graph +## 0.4.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + ## 0.4.9 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 1ad32fd55d..d9c0198853 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.4.9", + "version": "0.4.10-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "catalog-graph", diff --git a/plugins/catalog-graph/api-report-alpha.md b/plugins/catalog-graph/report-alpha.api.md similarity index 97% rename from plugins/catalog-graph/api-report-alpha.md rename to plugins/catalog-graph/report-alpha.api.md index f4699e9ceb..944fa203f1 100644 --- a/plugins/catalog-graph/api-report-alpha.md +++ b/plugins/catalog-graph/report-alpha.api.md @@ -165,5 +165,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-graph/api-report.md b/plugins/catalog-graph/report.api.md similarity index 86% rename from plugins/catalog-graph/api-report.md rename to plugins/catalog-graph/report.api.md index fc40e5b6c4..8812394d4f 100644 --- a/plugins/catalog-graph/api-report.md +++ b/plugins/catalog-graph/report.api.md @@ -138,4 +138,11 @@ export type EntityRelationsGraphProps = { // @public export type RelationPairs = [string, string][]; + +// Warnings were encountered during analysis: +// +// src/components/EntityRelationsGraph/DefaultRenderLabel.d.ts:5:1 - (ae-undocumented) Missing documentation for "CustomLabelClassKey". +// src/components/EntityRelationsGraph/DefaultRenderNode.d.ts:5:1 - (ae-undocumented) Missing documentation for "CustomNodeClassKey". +// src/components/EntityRelationsGraph/EntityRelationsGraph.d.ts:7:1 - (ae-undocumented) Missing documentation for "EntityRelationsGraphClassKey". +// src/components/EntityRelationsGraph/EntityRelationsGraph.d.ts:11:1 - (ae-undocumented) Missing documentation for "EntityRelationsGraphProps". ``` diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 3b735c622a..94779c3090 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-import +## 0.12.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/plugin-catalog-common@1.1.0 + ## 0.12.3 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 8dbf810bb3..aeddafc06f 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-import", - "version": "0.12.3", + "version": "0.12.4-next.0", "description": "A Backstage plugin the helps you import entities into your catalog", "backstage": { "role": "frontend-plugin", diff --git a/plugins/catalog-import/api-report-alpha.md b/plugins/catalog-import/report-alpha.api.md similarity index 93% rename from plugins/catalog-import/api-report-alpha.md rename to plugins/catalog-import/report-alpha.api.md index 1706404b94..d966e04e7e 100644 --- a/plugins/catalog-import/api-report-alpha.md +++ b/plugins/catalog-import/report-alpha.api.md @@ -67,5 +67,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-import/api-report.md b/plugins/catalog-import/report.api.md similarity index 62% rename from plugins/catalog-import/api-report.md rename to plugins/catalog-import/report.api.md index c61aa97b06..8c26da769d 100644 --- a/plugins/catalog-import/api-report.md +++ b/plugins/catalog-import/report.api.md @@ -366,4 +366,46 @@ export interface StepPrepareCreatePullRequestProps { // Warnings were encountered during analysis: // // src/api/CatalogImportApi.d.ts:25:5 - (ae-forgotten-export) The symbol "PartialEntity" needs to be exported by the entry point index.d.ts +// src/api/CatalogImportApi.d.ts:33:5 - (ae-undocumented) Missing documentation for "analyzeUrl". +// src/api/CatalogImportApi.d.ts:34:5 - (ae-undocumented) Missing documentation for "preparePullRequest". +// src/api/CatalogImportApi.d.ts:38:5 - (ae-undocumented) Missing documentation for "submitPullRequest". +// src/api/CatalogImportClient.d.ts:26:5 - (ae-undocumented) Missing documentation for "analyzeUrl". +// src/api/CatalogImportClient.d.ts:27:5 - (ae-undocumented) Missing documentation for "preparePullRequest". +// src/api/CatalogImportClient.d.ts:31:5 - (ae-undocumented) Missing documentation for "submitPullRequest". +// src/components/EntityListComponent/EntityListComponent.d.ts:9:5 - (ae-undocumented) Missing documentation for "locations". +// src/components/EntityListComponent/EntityListComponent.d.ts:13:5 - (ae-undocumented) Missing documentation for "locationListItemIcon". +// src/components/EntityListComponent/EntityListComponent.d.ts:14:5 - (ae-undocumented) Missing documentation for "collapsed". +// src/components/EntityListComponent/EntityListComponent.d.ts:15:5 - (ae-undocumented) Missing documentation for "firstListItem". +// src/components/EntityListComponent/EntityListComponent.d.ts:16:5 - (ae-undocumented) Missing documentation for "onItemClick". +// src/components/EntityListComponent/EntityListComponent.d.ts:17:5 - (ae-undocumented) Missing documentation for "withLinks". +// src/components/ImportInfoCard/ImportInfoCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "exampleLocationUrl". +// src/components/ImportInfoCard/ImportInfoCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "exampleRepositoryUrl". +// src/components/ImportStepper/ImportStepper.d.ts:11:5 - (ae-undocumented) Missing documentation for "initialUrl". +// src/components/ImportStepper/ImportStepper.d.ts:12:5 - (ae-undocumented) Missing documentation for "generateStepper". +// src/components/ImportStepper/ImportStepper.d.ts:13:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:10:5 - (ae-undocumented) Missing documentation for "onAnalysis". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:13:5 - (ae-undocumented) Missing documentation for "disablePullRequest". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:14:5 - (ae-undocumented) Missing documentation for "analysisUrl". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:15:5 - (ae-undocumented) Missing documentation for "exampleLocationUrl". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:10:5 - (ae-undocumented) Missing documentation for "name". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:11:5 - (ae-undocumented) Missing documentation for "options". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:12:5 - (ae-undocumented) Missing documentation for "required". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:13:5 - (ae-undocumented) Missing documentation for "errors". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:14:5 - (ae-undocumented) Missing documentation for "rules". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:15:5 - (ae-undocumented) Missing documentation for "loading". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:16:5 - (ae-undocumented) Missing documentation for "loadingText". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:17:5 - (ae-undocumented) Missing documentation for "helperText". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:18:5 - (ae-undocumented) Missing documentation for "errorHelperText". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:19:5 - (ae-undocumented) Missing documentation for "textFieldProps". +// src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.d.ts:9:5 - (ae-undocumented) Missing documentation for "repositoryUrl". +// src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.d.ts:10:5 - (ae-undocumented) Missing documentation for "entities". +// src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.d.ts:11:5 - (ae-undocumented) Missing documentation for "classes". +// src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.d.ts:8:5 - (ae-undocumented) Missing documentation for "title". +// src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.d.ts:9:5 - (ae-undocumented) Missing documentation for "description". +// src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.d.ts:10:5 - (ae-undocumented) Missing documentation for "classes". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:20:5 - (ae-undocumented) Missing documentation for "analyzeResult". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:23:5 - (ae-undocumented) Missing documentation for "onPrepare". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:26:5 - (ae-undocumented) Missing documentation for "onGoBack". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:27:5 - (ae-undocumented) Missing documentation for "renderFormFields". +// src/components/useImportState.d.ts:80:1 - (ae-undocumented) Missing documentation for "ImportState". ``` diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 48e160abf2..6adb452cbd 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-node +## 1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + ## 1.13.0 ### Minor Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index b9138a1f12..3c7052b78b 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-node", - "version": "1.13.0", + "version": "1.13.1-next.0", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", "backstage": { "role": "node-library", diff --git a/plugins/catalog-node/api-report-alpha.md b/plugins/catalog-node/report-alpha.api.md similarity index 67% rename from plugins/catalog-node/api-report-alpha.md rename to plugins/catalog-node/report-alpha.api.md index ba02079ceb..4ef79f1f3c 100644 --- a/plugins/catalog-node/api-report-alpha.md +++ b/plugins/catalog-node/report-alpha.api.md @@ -98,5 +98,25 @@ export const catalogProcessingExtensionPoint: ExtensionPoint; +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:8:1 - (ae-undocumented) Missing documentation for "CatalogLocationsExtensionPoint". +// src/extensions.d.ts:18:22 - (ae-undocumented) Missing documentation for "catalogLocationsExtensionPoint". +// src/extensions.d.ts:22:1 - (ae-undocumented) Missing documentation for "CatalogProcessingExtensionPoint". +// src/extensions.d.ts:23:5 - (ae-undocumented) Missing documentation for "addProcessor". +// src/extensions.d.ts:24:5 - (ae-undocumented) Missing documentation for "addEntityProvider". +// src/extensions.d.ts:25:5 - (ae-undocumented) Missing documentation for "addPlaceholderResolver". +// src/extensions.d.ts:26:5 - (ae-undocumented) Missing documentation for "setOnProcessingErrorHandler". +// src/extensions.d.ts:32:1 - (ae-undocumented) Missing documentation for "CatalogModelExtensionPoint". +// src/extensions.d.ts:50:22 - (ae-undocumented) Missing documentation for "catalogProcessingExtensionPoint". +// src/extensions.d.ts:54:1 - (ae-undocumented) Missing documentation for "CatalogAnalysisExtensionPoint". +// src/extensions.d.ts:77:22 - (ae-undocumented) Missing documentation for "catalogAnalysisExtensionPoint". +// src/extensions.d.ts:79:22 - (ae-undocumented) Missing documentation for "catalogModelExtensionPoint". +// src/extensions.d.ts:83:1 - (ae-undocumented) Missing documentation for "CatalogPermissionRuleInput". +// src/extensions.d.ts:87:1 - (ae-undocumented) Missing documentation for "CatalogPermissionExtensionPoint". +// src/extensions.d.ts:88:5 - (ae-undocumented) Missing documentation for "addPermissions". +// src/extensions.d.ts:89:5 - (ae-undocumented) Missing documentation for "addPermissionRules". +// src/extensions.d.ts:94:22 - (ae-undocumented) Missing documentation for "catalogPermissionExtensionPoint". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-node/api-report-testUtils.md b/plugins/catalog-node/report-testUtils.api.md similarity index 100% rename from plugins/catalog-node/api-report-testUtils.md rename to plugins/catalog-node/report-testUtils.api.md diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/report.api.md similarity index 78% rename from plugins/catalog-node/api-report.md rename to plugins/catalog-node/report.api.md index 43209aa862..1e585d59e2 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/report.api.md @@ -243,4 +243,22 @@ export type ScmLocationAnalyzer = { existing: AnalyzeLocationExistingEntity[]; }>; }; + +// Warnings were encountered during analysis: +// +// src/api/processor.d.ts:9:1 - (ae-undocumented) Missing documentation for "CatalogProcessor". +// src/api/processor.d.ts:104:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEmit". +// src/api/processor.d.ts:106:1 - (ae-undocumented) Missing documentation for "CatalogProcessorLocationResult". +// src/api/processor.d.ts:111:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEntityResult". +// src/api/processor.d.ts:117:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRelationResult". +// src/api/processor.d.ts:122:1 - (ae-undocumented) Missing documentation for "CatalogProcessorErrorResult". +// src/api/processor.d.ts:128:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRefreshKeysResult". +// src/api/processor.d.ts:133:1 - (ae-undocumented) Missing documentation for "CatalogProcessorResult". +// src/processing/types.d.ts:16:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverRead". +// src/processing/types.d.ts:18:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverResolveUrl". +// src/processing/types.d.ts:20:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverParams". +// src/processing/types.d.ts:29:1 - (ae-undocumented) Missing documentation for "PlaceholderResolver". +// src/processing/types.d.ts:31:1 - (ae-undocumented) Missing documentation for "LocationAnalyzer". +// src/processing/types.d.ts:41:1 - (ae-undocumented) Missing documentation for "AnalyzeOptions". +// src/processing/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "ScmLocationAnalyzer". ``` diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 22e64d61cd..0a8a508060 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-react +## 1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 1.13.0 ### Minor Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 5520486d74..974a6e1817 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-react", - "version": "1.13.0", + "version": "1.13.1-next.0", "description": "A frontend library that helps other Backstage plugins interact with the catalog", "backstage": { "role": "web-library", diff --git a/plugins/catalog-react/api-report-alpha.md b/plugins/catalog-react/report-alpha.api.md similarity index 95% rename from plugins/catalog-react/api-report-alpha.md rename to plugins/catalog-react/report-alpha.api.md index 516d655967..6eec97b815 100644 --- a/plugins/catalog-react/api-report-alpha.md +++ b/plugins/catalog-react/report-alpha.api.md @@ -221,5 +221,11 @@ export function useEntityPermission( error?: Error; }; +// Warnings were encountered during analysis: +// +// src/alpha/converters/convertLegacyEntityCardExtension.d.ts:5:1 - (ae-undocumented) Missing documentation for "convertLegacyEntityCardExtension". +// src/alpha/converters/convertLegacyEntityContentExtension.d.ts:5:1 - (ae-undocumented) Missing documentation for "convertLegacyEntityContentExtension". +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "catalogReactTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/report.api.md similarity index 64% rename from plugins/catalog-react/api-report.md rename to plugins/catalog-react/report.api.md index 0293fca239..fccc269e07 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/report.api.md @@ -839,4 +839,118 @@ export function useStarredEntity( toggleStarredEntity: () => void; isStarredEntity: boolean; }; + +// Warnings were encountered during analysis: +// +// src/apis/StarredEntitiesApi/MockStarredEntitiesApi.d.ts:12:5 - (ae-undocumented) Missing documentation for "toggleStarred". +// src/apis/StarredEntitiesApi/MockStarredEntitiesApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "starredEntitie$". +// src/components/CatalogFilterLayout/CatalogFilterLayout.d.ts:15:22 - (ae-undocumented) Missing documentation for "CatalogFilterLayout". +// src/components/DefaultFilters/DefaultFilters.d.ts:16:22 - (ae-undocumented) Missing documentation for "DefaultFilters". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:6:1 - (ae-undocumented) Missing documentation for "AllowedEntityFilters". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:12:1 - (ae-undocumented) Missing documentation for "EntityAutocompletePickerProps". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:25:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityAutocompletePickerClassKey". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:27:1 - (ae-undocumented) Missing documentation for "EntityAutocompletePicker". +// src/components/EntityKindPicker/EntityKindPicker.d.ts:13:5 - (ae-undocumented) Missing documentation for "initialFilter". +// src/components/EntityKindPicker/EntityKindPicker.d.ts:14:5 - (ae-undocumented) Missing documentation for "hidden". +// src/components/EntityKindPicker/EntityKindPicker.d.ts:17:22 - (ae-undocumented) Missing documentation for "EntityKindPicker". +// src/components/EntityLifecyclePicker/EntityLifecyclePicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityLifecyclePickerClassKey". +// src/components/EntityLifecyclePicker/EntityLifecyclePicker.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityLifecyclePicker". +// src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityNamespacePickerClassKey". +// src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:10:5 - (ae-undocumented) Missing documentation for "initiallySelectedNamespaces". +// src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:13:22 - (ae-undocumented) Missing documentation for "EntityNamespacePicker". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityOwnerPickerClassKey". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:5:1 - (ae-undocumented) Missing documentation for "FixedWidthFormControlLabelClassKey". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:9:1 - (ae-undocumented) Missing documentation for "EntityOwnerPickerProps". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:13:22 - (ae-undocumented) Missing documentation for "EntityOwnerPicker". +// src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityProcessingStatusPickerClassKey". +// src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityProcessingStatusPicker". +// src/components/EntityRefLink/humanize.d.ts:8:1 - (ae-undocumented) Missing documentation for "humanizeEntityRef". +// src/components/EntitySearchBar/EntitySearchBar.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntitySearchBarClassKey". +// src/components/EntityTable/EntityTable.d.ts:10:5 - (ae-undocumented) Missing documentation for "title". +// src/components/EntityTable/EntityTable.d.ts:11:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/EntityTable/EntityTable.d.ts:12:5 - (ae-undocumented) Missing documentation for "entities". +// src/components/EntityTable/EntityTable.d.ts:13:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/EntityTable/EntityTable.d.ts:14:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/EntityTable/EntityTable.d.ts:15:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/EntityTable/columns.d.ts:4:22 - (ae-undocumented) Missing documentation for "columnFactories". +// src/components/EntityTagPicker/EntityTagPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityTagPickerClassKey". +// src/components/EntityTagPicker/EntityTagPicker.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntityTagPickerProps". +// src/components/EntityTagPicker/EntityTagPicker.d.ts:9:22 - (ae-undocumented) Missing documentation for "EntityTagPicker". +// src/components/EntityTypePicker/EntityTypePicker.d.ts:8:5 - (ae-undocumented) Missing documentation for "initialFilter". +// src/components/EntityTypePicker/EntityTypePicker.d.ts:9:5 - (ae-undocumented) Missing documentation for "hidden". +// src/components/EntityTypePicker/EntityTypePicker.d.ts:12:22 - (ae-undocumented) Missing documentation for "EntityTypePicker". +// src/components/FavoriteEntity/FavoriteEntity.d.ts:5:1 - (ae-undocumented) Missing documentation for "FavoriteEntityProps". +// src/components/MissingAnnotationEmptyState/MissingAnnotationEmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyStateClassKey". +// src/components/UnregisterEntityDialog/UnregisterEntityDialog.d.ts:4:1 - (ae-undocumented) Missing documentation for "UnregisterEntityDialogProps". +// src/components/UnregisterEntityDialog/UnregisterEntityDialog.d.ts:11:22 - (ae-undocumented) Missing documentation for "UnregisterEntityDialog". +// src/components/UserListPicker/UserListPicker.d.ts:5:1 - (ae-undocumented) Missing documentation for "CatalogReactUserListPickerClassKey". +// src/components/UserListPicker/UserListPicker.d.ts:15:1 - (ae-undocumented) Missing documentation for "UserListPickerProps". +// src/components/UserListPicker/UserListPicker.d.ts:20:22 - (ae-undocumented) Missing documentation for "UserListPicker". +// src/filters.d.ts:8:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:10:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:11:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:18:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:20:5 - (ae-undocumented) Missing documentation for "getTypes". +// src/filters.d.ts:21:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:22:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:29:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:31:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:32:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:33:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:40:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:42:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:43:5 - (ae-undocumented) Missing documentation for "getFullTextFilters". +// src/filters.d.ts:47:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:57:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:59:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:60:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:72:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:74:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:75:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:76:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:83:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:85:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:86:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:87:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:92:1 - (ae-undocumented) Missing documentation for "EntityUserFilter". +// src/filters.d.ts:93:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:94:5 - (ae-undocumented) Missing documentation for "refs". +// src/filters.d.ts:96:5 - (ae-undocumented) Missing documentation for "owned". +// src/filters.d.ts:97:5 - (ae-undocumented) Missing documentation for "all". +// src/filters.d.ts:98:5 - (ae-undocumented) Missing documentation for "starred". +// src/filters.d.ts:99:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:100:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:101:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:109:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:110:5 - (ae-undocumented) Missing documentation for "isOwnedEntity". +// src/filters.d.ts:111:5 - (ae-undocumented) Missing documentation for "isStarredEntity". +// src/filters.d.ts:113:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:114:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:121:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:123:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:124:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:131:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:133:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/hooks/useEntity.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntityLoadingStatus". +// src/hooks/useEntity.d.ts:16:5 - (ae-undocumented) Missing documentation for "children". +// src/hooks/useEntity.d.ts:17:5 - (ae-undocumented) Missing documentation for "entity". +// src/hooks/useEntity.d.ts:18:5 - (ae-undocumented) Missing documentation for "loading". +// src/hooks/useEntity.d.ts:19:5 - (ae-undocumented) Missing documentation for "error". +// src/hooks/useEntity.d.ts:20:5 - (ae-undocumented) Missing documentation for "refresh". +// src/hooks/useEntity.d.ts:34:5 - (ae-undocumented) Missing documentation for "children". +// src/hooks/useEntity.d.ts:35:5 - (ae-undocumented) Missing documentation for "entity". +// src/hooks/useEntityListProvider.d.ts:6:1 - (ae-undocumented) Missing documentation for "DefaultEntityFilters". +// src/hooks/useEntityListProvider.d.ts:19:1 - (ae-undocumented) Missing documentation for "PaginationMode". +// src/hooks/useEntityListProvider.d.ts:21:1 - (ae-undocumented) Missing documentation for "EntityListContextProps". +// src/hooks/useEntityListProvider.d.ts:65:1 - (ae-undocumented) Missing documentation for "EntityListProviderProps". +// src/hooks/useStarredEntities.d.ts:3:1 - (ae-undocumented) Missing documentation for "useStarredEntities". +// src/hooks/useStarredEntity.d.ts:3:1 - (ae-undocumented) Missing documentation for "useStarredEntity". +// src/overridableComponents.d.ts:6:1 - (ae-undocumented) Missing documentation for "CatalogReactComponentsNameToClassKey". +// src/overridableComponents.d.ts:19:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". +// src/testUtils/providers.d.ts:4:1 - (ae-undocumented) Missing documentation for "MockEntityListContextProvider". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityFilter". +// src/types.d.ts:25:1 - (ae-undocumented) Missing documentation for "UserListFilterKind". +// src/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "EntityListPagination". +// src/utils/getEntitySourceLocation.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntitySourceLocation". +// src/utils/getEntitySourceLocation.d.ts:9:1 - (ae-undocumented) Missing documentation for "getEntitySourceLocation". ``` diff --git a/plugins/catalog-unprocessed-entities-common/api-report.md b/plugins/catalog-unprocessed-entities-common/report.api.md similarity index 100% rename from plugins/catalog-unprocessed-entities-common/api-report.md rename to plugins/catalog-unprocessed-entities-common/report.api.md diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md index 90a68b4a80..b55177a209 100644 --- a/plugins/catalog-unprocessed-entities/CHANGELOG.md +++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-unprocessed-entities +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + ## 0.2.8 ### Patch Changes diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json index 9dc5e6e51e..038cee37fc 100644 --- a/plugins/catalog-unprocessed-entities/package.json +++ b/plugins/catalog-unprocessed-entities/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-unprocessed-entities", - "version": "0.2.8", + "version": "0.2.9-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "catalog-unprocessed-entities", diff --git a/plugins/catalog-unprocessed-entities/api-report.md b/plugins/catalog-unprocessed-entities/report.api.md similarity index 91% rename from plugins/catalog-unprocessed-entities/api-report.md rename to plugins/catalog-unprocessed-entities/report.api.md index 7d8f6299da..dd0386204a 100644 --- a/plugins/catalog-unprocessed-entities/api-report.md +++ b/plugins/catalog-unprocessed-entities/report.api.md @@ -73,5 +73,9 @@ export type UnprocessedEntityError = { }; }; +// Warnings were encountered during analysis: +// +// src/components/UnprocessedEntities.d.ts:3:22 - (ae-undocumented) Missing documentation for "UnprocessedEntitiesContent". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 9396a70cfa..8279dc3879 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-catalog +## 1.24.0-next.0 + +### Minor Changes + +- 71f9f0c: Updated default columns for location entities to remove description and tags from the catalog table view. + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + ## 1.23.0 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 98c8c4aeb2..e6cfb9ca47 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog", - "version": "1.23.0", + "version": "1.24.0-next.0", "description": "The Backstage plugin for browsing the Backstage catalog", "backstage": { "role": "frontend-plugin", diff --git a/plugins/catalog/api-report-alpha.md b/plugins/catalog/report-alpha.api.md similarity index 99% rename from plugins/catalog/api-report-alpha.md rename to plugins/catalog/report-alpha.api.md index b448ae9288..b7fa14d003 100644 --- a/plugins/catalog/api-report-alpha.md +++ b/plugins/catalog/report-alpha.api.md @@ -113,7 +113,7 @@ export const catalogTranslationRef: TranslationRef< readonly 'hasSubdomainsCard.emptyMessage': 'No subdomain is part of this domain'; readonly 'hasSystemsCard.title': 'Has systems'; readonly 'hasSystemsCard.emptyMessage': 'No system is part of this domain'; - readonly 'relatedEntitiesCard.emptyHelpLinkTitle': 'Learn how to change this.'; + readonly 'relatedEntitiesCard.emptyHelpLinkTitle': 'Learn how to change this'; readonly 'systemDiagramCard.title': 'System Diagram'; readonly 'systemDiagramCard.description': 'Use pinch & zoo to move around the diagram.'; readonly 'systemDiagramCard.edgeLabels.dependsOn': 'depends on'; @@ -870,5 +870,10 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha/plugin.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "catalogTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog/api-report.md b/plugins/catalog/report.api.md similarity index 54% rename from plugins/catalog/api-report.md rename to plugins/catalog/report.api.md index 4017e8d494..a7538900a0 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/report.api.md @@ -265,7 +265,6 @@ export class DefaultEntityPresentationApi implements EntityPresentationApi { options: DefaultEntityPresentationApiOptions, ): EntityPresentationApi; static createLocal(): EntityPresentationApi; - // (undocumented) forEntity( entityOrRef: Entity | string, context?: { @@ -668,4 +667,131 @@ export type SystemDiagramCardClassKey = | 'componentNode' | 'apiNode' | 'resourceNode'; + +// Warnings were encountered during analysis: +// +// src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.d.ts:15:5 - (ae-undocumented) Missing documentation for "toggleStarred". +// src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.d.ts:16:5 - (ae-undocumented) Missing documentation for "starredEntitie$". +// src/components/AboutCard/AboutCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/AboutCard/AboutContent.d.ts:9:5 - (ae-undocumented) Missing documentation for "entity". +// src/components/AboutCard/AboutContent.d.ts:12:1 - (ae-undocumented) Missing documentation for "AboutContent". +// src/components/AboutCard/AboutField.d.ts:8:5 - (ae-undocumented) Missing documentation for "label". +// src/components/AboutCard/AboutField.d.ts:9:5 - (ae-undocumented) Missing documentation for "value". +// src/components/AboutCard/AboutField.d.ts:10:5 - (ae-undocumented) Missing documentation for "gridSizes". +// src/components/AboutCard/AboutField.d.ts:11:5 - (ae-undocumented) Missing documentation for "children". +// src/components/AboutCard/AboutField.d.ts:14:1 - (ae-undocumented) Missing documentation for "AboutField". +// src/components/CatalogKindHeader/CatalogKindHeader.d.ts:23:1 - (ae-undocumented) Missing documentation for "CatalogKindHeader". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:12:5 - (ae-undocumented) Missing documentation for "initiallySelectedFilter". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:13:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:14:5 - (ae-undocumented) Missing documentation for "actions". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:15:5 - (ae-undocumented) Missing documentation for "initialKind". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:16:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:17:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:18:5 - (ae-undocumented) Missing documentation for "ownerPickerMode". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:19:5 - (ae-undocumented) Missing documentation for "filters". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:20:5 - (ae-undocumented) Missing documentation for "initiallySelectedNamespaces". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:21:5 - (ae-undocumented) Missing documentation for "pagination". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:4:1 - (ae-undocumented) Missing documentation for "CatalogSearchResultListItemClassKey". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:11:5 - (ae-undocumented) Missing documentation for "icon". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:12:5 - (ae-undocumented) Missing documentation for "result". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:13:5 - (ae-undocumented) Missing documentation for "highlight". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:14:5 - (ae-undocumented) Missing documentation for "rank". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:15:5 - (ae-undocumented) Missing documentation for "lineClamp". +// src/components/CatalogTable/CatalogTable.d.ts:10:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/CatalogTable/CatalogTable.d.ts:11:5 - (ae-undocumented) Missing documentation for "actions". +// src/components/CatalogTable/CatalogTable.d.ts:12:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/CatalogTable/CatalogTable.d.ts:13:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/CatalogTable/CatalogTable.d.ts:14:5 - (ae-undocumented) Missing documentation for "subtitle". +// src/components/CatalogTable/CatalogTable.d.ts:17:22 - (ae-undocumented) Missing documentation for "CatalogTable". +// src/components/CatalogTable/CatalogTableToolbar.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogTableToolbarClassKey". +// src/components/CatalogTable/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "CatalogTableRow". +// src/components/CatalogTable/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "entity". +// src/components/CatalogTable/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "resolved". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependencyOfComponentsCardProps". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependsOnComponentsCardProps". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependsOnResourcesCardProps". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/EntityContextMenu/EntityContextMenu.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntityContextMenuClassKey". +// src/components/EntityLabelsCard/EntityLabelsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntityLabelsCardProps". +// src/components/EntityLabelsCard/EntityLabelsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/EntityLabelsCard/EntityLabelsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/EntityLabelsCard/EntityLabelsEmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityLabelsEmptyStateClassKey". +// src/components/EntityLayout/EntityLayout.d.ts:6:1 - (ae-undocumented) Missing documentation for "EntityLayoutRouteProps". +// src/components/EntityLayout/EntityLayout.d.ts:25:1 - (ae-undocumented) Missing documentation for "EntityLayoutProps". +// src/components/EntityLayout/EntityLayout.d.ts:26:5 - (ae-undocumented) Missing documentation for "UNSTABLE_extraContextMenuItems". +// src/components/EntityLayout/EntityLayout.d.ts:27:5 - (ae-undocumented) Missing documentation for "UNSTABLE_contextMenuOptions". +// src/components/EntityLayout/EntityLayout.d.ts:28:5 - (ae-undocumented) Missing documentation for "children". +// src/components/EntityLayout/EntityLayout.d.ts:29:5 - (ae-undocumented) Missing documentation for "NotFoundComponent". +// src/components/EntityLinksCard/EntityLinksCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntityLinksCardProps". +// src/components/EntityLinksCard/EntityLinksCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "cols". +// src/components/EntityLinksCard/EntityLinksCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/EntityLinksCard/EntityLinksEmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityLinksEmptyStateClassKey". +// src/components/EntityLinksCard/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "Breakpoint". +// src/components/EntityLinksCard/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "ColumnBreakpoints". +// src/components/EntitySwitch/EntitySwitch.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntitySwitchCaseProps". +// src/components/EntitySwitch/EntitySwitch.d.ts:6:5 - (ae-undocumented) Missing documentation for "if". +// src/components/EntitySwitch/EntitySwitch.d.ts:9:5 - (ae-undocumented) Missing documentation for "children". +// src/components/EntitySwitch/EntitySwitch.d.ts:16:5 - (ae-undocumented) Missing documentation for "children". +// src/components/EntitySwitch/EntitySwitch.d.ts:17:5 - (ae-undocumented) Missing documentation for "renderMultipleMatches". +// src/components/EntitySwitch/EntitySwitch.d.ts:20:22 - (ae-undocumented) Missing documentation for "EntitySwitch". +// src/components/EntitySwitch/conditions.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityPredicates". +// src/components/EntitySwitch/conditions.d.ts:4:5 - (ae-undocumented) Missing documentation for "kind". +// src/components/EntitySwitch/conditions.d.ts:5:5 - (ae-undocumented) Missing documentation for "type". +// src/components/FilteredEntityLayout/index.d.ts:6:22 - (ae-undocumented) Missing documentation for "FilteredEntityLayout". +// src/components/FilteredEntityLayout/index.d.ts:13:22 - (ae-undocumented) Missing documentation for "FilterContainer". +// src/components/FilteredEntityLayout/index.d.ts:24:22 - (ae-undocumented) Missing documentation for "EntityListContainer". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasComponentsCardProps". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasResourcesCardProps". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasSubcomponentsCardProps". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasSubdomainsCardProps". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasSystemsCardProps". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/RelatedEntitiesCard/RelatedEntitiesCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "RelatedEntitiesCardProps". +// src/components/SystemDiagramCard/SystemDiagramCard.d.ts:3:1 - (ae-undocumented) Missing documentation for "SystemDiagramCardClassKey". +// src/overridableComponents.d.ts:10:1 - (ae-undocumented) Missing documentation for "PluginCatalogComponentsNameToClassKey". +// src/overridableComponents.d.ts:19:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". +// src/plugin.d.ts:17:22 - (ae-undocumented) Missing documentation for "catalogPlugin". +// src/plugin.d.ts:38:22 - (ae-undocumented) Missing documentation for "CatalogIndexPage". +// src/plugin.d.ts:40:22 - (ae-undocumented) Missing documentation for "CatalogEntityPage". +// src/plugin.d.ts:55:22 - (ae-undocumented) Missing documentation for "EntityLinksCard". +// src/plugin.d.ts:57:22 - (ae-undocumented) Missing documentation for "EntityLabelsCard". +// src/plugin.d.ts:59:22 - (ae-undocumented) Missing documentation for "EntityHasSystemsCard". +// src/plugin.d.ts:61:22 - (ae-undocumented) Missing documentation for "EntityHasComponentsCard". +// src/plugin.d.ts:63:22 - (ae-undocumented) Missing documentation for "EntityHasSubcomponentsCard". +// src/plugin.d.ts:65:22 - (ae-undocumented) Missing documentation for "EntityHasSubdomainsCard". +// src/plugin.d.ts:67:22 - (ae-undocumented) Missing documentation for "EntityHasResourcesCard". +// src/plugin.d.ts:69:22 - (ae-undocumented) Missing documentation for "EntityDependsOnComponentsCard". +// src/plugin.d.ts:71:22 - (ae-undocumented) Missing documentation for "EntityDependencyOfComponentsCard". +// src/plugin.d.ts:73:22 - (ae-undocumented) Missing documentation for "EntityDependsOnResourcesCard". +// src/plugin.d.ts:75:22 - (ae-undocumented) Missing documentation for "RelatedEntitiesCard". +// src/plugin.d.ts:77:22 - (ae-undocumented) Missing documentation for "CatalogSearchResultListItem". ``` diff --git a/plugins/catalog/src/alpha/translation.ts b/plugins/catalog/src/alpha/translation.ts index f38a34be84..e5e6fa18e2 100644 --- a/plugins/catalog/src/alpha/translation.ts +++ b/plugins/catalog/src/alpha/translation.ts @@ -152,7 +152,7 @@ export const catalogTranslationRef = createTranslationRef({ emptyMessage: 'No system is part of this domain', }, relatedEntitiesCard: { - emptyHelpLinkTitle: 'Learn how to change this.', + emptyHelpLinkTitle: 'Learn how to change this', }, systemDiagramCard: { title: 'System Diagram', diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx index a2814527cc..5b57cbd80e 100644 --- a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx +++ b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx @@ -84,7 +84,6 @@ export const RelatedEntitiesCard = ( asRenderableEntities, tableOptions = {}, } = props; - const { t } = useTranslationRef(catalogTranslationRef); const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { @@ -116,7 +115,7 @@ export const RelatedEntitiesCard = (

{emptyMessage} - + {t('relatedEntitiesCard.emptyHelpLinkTitle')} diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 31878e26b6..a201962de3 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-config-schema +## 0.1.60-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.1.59 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 66dfa77417..5739b187b7 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-config-schema", - "version": "0.1.59", + "version": "0.1.60-next.0", "description": "A Backstage plugin that lets you browse the configuration schema of your app", "backstage": { "role": "frontend-plugin", diff --git a/plugins/config-schema/api-report.md b/plugins/config-schema/report.api.md similarity index 60% rename from plugins/config-schema/api-report.md rename to plugins/config-schema/report.api.md index 16630ae8d0..00a7a7fe0c 100644 --- a/plugins/config-schema/api-report.md +++ b/plugins/config-schema/report.api.md @@ -44,4 +44,15 @@ export class StaticSchemaLoader implements ConfigSchemaApi { // (undocumented) schema$(): Observable; } + +// Warnings were encountered during analysis: +// +// src/api/StaticSchemaLoader.d.ts:13:5 - (ae-undocumented) Missing documentation for "schema$". +// src/api/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "ConfigSchemaResult". +// src/api/types.d.ts:5:5 - (ae-undocumented) Missing documentation for "schema". +// src/api/types.d.ts:8:1 - (ae-undocumented) Missing documentation for "ConfigSchemaApi". +// src/api/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "schema$". +// src/api/types.d.ts:12:22 - (ae-undocumented) Missing documentation for "configSchemaApiRef". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "configSchemaPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConfigSchemaPage". ``` diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index 37b3ccff1b..e007e1102b 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-devtools-backend +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-common@0.8.1 + ## 0.4.0 ### Minor Changes diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 4b7044d2d8..83a42fb4d5 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-backend", - "version": "0.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin", "pluginId": "devtools", diff --git a/plugins/devtools-backend/api-report.md b/plugins/devtools-backend/report.api.md similarity index 59% rename from plugins/devtools-backend/api-report.md rename to plugins/devtools-backend/report.api.md index 5fceda3d46..1ca69d686e 100644 --- a/plugins/devtools-backend/api-report.md +++ b/plugins/devtools-backend/report.api.md @@ -48,4 +48,19 @@ export interface RouterOptions { // (undocumented) permissions: PermissionsService; } + +// Warnings were encountered during analysis: +// +// src/api/DevToolsBackendApi.d.ts:5:1 - (ae-undocumented) Missing documentation for "DevToolsBackendApi". +// src/api/DevToolsBackendApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "listExternalDependencyDetails". +// src/api/DevToolsBackendApi.d.ts:12:5 - (ae-undocumented) Missing documentation for "listConfig". +// src/api/DevToolsBackendApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "listInfo". +// src/service/router.d.ts:8:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "devToolsBackendApi". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:20:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/devtools-common/api-report.md b/plugins/devtools-common/report.api.md similarity index 56% rename from plugins/devtools-common/api-report.md rename to plugins/devtools-common/report.api.md index 83af75d11a..bf71f1b87a 100644 --- a/plugins/devtools-common/api-report.md +++ b/plugins/devtools-common/report.api.md @@ -73,4 +73,20 @@ export type PackageDependency = { name: string; versions: string; }; + +// Warnings were encountered during analysis: +// +// src/permissions.d.ts:4:22 - (ae-undocumented) Missing documentation for "devToolsAdministerPermission". +// src/permissions.d.ts:8:22 - (ae-undocumented) Missing documentation for "devToolsInfoReadPermission". +// src/permissions.d.ts:12:22 - (ae-undocumented) Missing documentation for "devToolsConfigReadPermission". +// src/permissions.d.ts:16:22 - (ae-undocumented) Missing documentation for "devToolsExternalDependenciesReadPermission". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "Endpoint". +// src/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "ExternalDependency". +// src/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "DevToolsInfo". +// src/types.d.ts:25:1 - (ae-undocumented) Missing documentation for "PackageDependency". +// src/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "ExternalDependencyStatus". +// src/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "healthy". +// src/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "unhealthy". +// src/types.d.ts:35:1 - (ae-undocumented) Missing documentation for "ConfigInfo". +// src/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "ConfigError". ``` diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index 0c7198065c..85011bebbb 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-devtools +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 0.1.18 ### Patch Changes diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 781faebd66..3bcb6d5c64 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.18", + "version": "0.1.19-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "devtools", diff --git a/plugins/devtools/api-report-alpha.md b/plugins/devtools/report-alpha.api.md similarity index 94% rename from plugins/devtools/api-report-alpha.md rename to plugins/devtools/report-alpha.api.md index 1b026d1f78..aa1806277e 100644 --- a/plugins/devtools/api-report-alpha.md +++ b/plugins/devtools/report-alpha.api.md @@ -89,5 +89,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha/plugin.d.ts:53:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/devtools/api-report.md b/plugins/devtools/report.api.md similarity index 62% rename from plugins/devtools/api-report.md rename to plugins/devtools/report.api.md index bba36a5a9a..75dfdc32f6 100644 --- a/plugins/devtools/api-report.md +++ b/plugins/devtools/report.api.md @@ -57,4 +57,14 @@ export type SubRoute = { } >; }; + +// Warnings were encountered during analysis: +// +// src/components/Content/ConfigContent/ConfigContent.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConfigContent". +// src/components/Content/ExternalDependenciesContent/ExternalDependenciesContent.d.ts:5:22 - (ae-undocumented) Missing documentation for "ExternalDependenciesContent". +// src/components/Content/InfoContent/InfoContent.d.ts:3:22 - (ae-undocumented) Missing documentation for "InfoContent". +// src/components/DevToolsLayout/DevToolsLayout.d.ts:4:1 - (ae-undocumented) Missing documentation for "SubRoute". +// src/components/DevToolsLayout/DevToolsLayout.d.ts:13:1 - (ae-undocumented) Missing documentation for "DevToolsLayoutProps". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "devToolsPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "DevToolsPage". ``` diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 4ed917a974..176df94002 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.4.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + ## 0.4.2 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 8c90791520..b131be935b 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.4.2", + "version": "0.4.3-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-aws-sqs/api-report-alpha.md b/plugins/events-backend-module-aws-sqs/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-aws-sqs/api-report-alpha.md rename to plugins/events-backend-module-aws-sqs/report-alpha.api.md diff --git a/plugins/events-backend-module-aws-sqs/api-report.md b/plugins/events-backend-module-aws-sqs/report.api.md similarity index 71% rename from plugins/events-backend-module-aws-sqs/api-report.md rename to plugins/events-backend-module-aws-sqs/report.api.md index ac806bf01b..eee183519d 100644 --- a/plugins/events-backend-module-aws-sqs/api-report.md +++ b/plugins/events-backend-module-aws-sqs/report.api.md @@ -20,4 +20,9 @@ export class AwsSqsConsumingEventPublisher { // (undocumented) start(): Promise; } + +// Warnings were encountered during analysis: +// +// src/publisher/AwsSqsConsumingEventPublisher.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/publisher/AwsSqsConsumingEventPublisher.d.ts:28:5 - (ae-undocumented) Missing documentation for "start". ``` diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index 1dad6248f6..336a8a6d94 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index aa77766734..51ac31dc08 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-azure/api-report-alpha.md b/plugins/events-backend-module-azure/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-azure/api-report-alpha.md rename to plugins/events-backend-module-azure/report-alpha.api.md diff --git a/plugins/events-backend-module-azure/api-report.md b/plugins/events-backend-module-azure/report.api.md similarity index 70% rename from plugins/events-backend-module-azure/api-report.md rename to plugins/events-backend-module-azure/report.api.md index 66529ef2d4..0ad4d4e9fd 100644 --- a/plugins/events-backend-module-azure/api-report.md +++ b/plugins/events-backend-module-azure/report.api.md @@ -15,4 +15,9 @@ export class AzureDevOpsEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/AzureDevOpsEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/AzureDevOpsEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index f7743ab341..362e7ebd90 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 321ce6b4e5..08ceeeff33 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-bitbucket-cloud/api-report-alpha.md b/plugins/events-backend-module-bitbucket-cloud/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-bitbucket-cloud/api-report-alpha.md rename to plugins/events-backend-module-bitbucket-cloud/report-alpha.api.md diff --git a/plugins/events-backend-module-bitbucket-cloud/api-report.md b/plugins/events-backend-module-bitbucket-cloud/report.api.md similarity index 70% rename from plugins/events-backend-module-bitbucket-cloud/api-report.md rename to plugins/events-backend-module-bitbucket-cloud/report.api.md index ba4f61d739..51aa7f27cb 100644 --- a/plugins/events-backend-module-bitbucket-cloud/api-report.md +++ b/plugins/events-backend-module-bitbucket-cloud/report.api.md @@ -15,4 +15,9 @@ export class BitbucketCloudEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/BitbucketCloudEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/BitbucketCloudEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index 144ed1d525..7bcc732795 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 7024f58546..8052734395 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-gerrit/api-report-alpha.md b/plugins/events-backend-module-gerrit/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-gerrit/api-report-alpha.md rename to plugins/events-backend-module-gerrit/report-alpha.api.md diff --git a/plugins/events-backend-module-gerrit/api-report.md b/plugins/events-backend-module-gerrit/report.api.md similarity index 71% rename from plugins/events-backend-module-gerrit/api-report.md rename to plugins/events-backend-module-gerrit/report.api.md index c75857aa43..7a3f75ca6f 100644 --- a/plugins/events-backend-module-gerrit/api-report.md +++ b/plugins/events-backend-module-gerrit/report.api.md @@ -15,4 +15,9 @@ export class GerritEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/GerritEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/GerritEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index cd683927d6..f80dbcc120 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-github +## 0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 534af9fa58..89eb9b2439 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-github/api-report-alpha.md b/plugins/events-backend-module-github/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-github/api-report-alpha.md rename to plugins/events-backend-module-github/report-alpha.api.md diff --git a/plugins/events-backend-module-github/api-report.md b/plugins/events-backend-module-github/report.api.md similarity index 76% rename from plugins/events-backend-module-github/api-report.md rename to plugins/events-backend-module-github/report.api.md index 5341f86039..a3b8adaaa5 100644 --- a/plugins/events-backend-module-github/api-report.md +++ b/plugins/events-backend-module-github/report.api.md @@ -22,4 +22,9 @@ export class GithubEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/GithubEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/GithubEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index 84893760b1..8388606685 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 12f2a8045d..42bb8e5f44 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-gitlab/api-report-alpha.md b/plugins/events-backend-module-gitlab/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-gitlab/api-report-alpha.md rename to plugins/events-backend-module-gitlab/report-alpha.api.md diff --git a/plugins/events-backend-module-gitlab/api-report.md b/plugins/events-backend-module-gitlab/report.api.md similarity index 76% rename from plugins/events-backend-module-gitlab/api-report.md rename to plugins/events-backend-module-gitlab/report.api.md index f348436375..9753380364 100644 --- a/plugins/events-backend-module-gitlab/api-report.md +++ b/plugins/events-backend-module-gitlab/report.api.md @@ -20,4 +20,9 @@ export class GitlabEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/GitlabEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/GitlabEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 19cbf132b4..c5bc0b1fd8 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + ## 0.1.35 ### Patch Changes diff --git a/plugins/events-backend-test-utils/api-report.md b/plugins/events-backend-test-utils/api-report.md deleted file mode 100644 index 9630c3d4e2..0000000000 --- a/plugins/events-backend-test-utils/api-report.md +++ /dev/null @@ -1,63 +0,0 @@ -## API Report File for "@backstage/plugin-events-backend-test-utils" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { EventBroker } from '@backstage/plugin-events-node'; -import { EventParams } from '@backstage/plugin-events-node'; -import { EventPublisher } from '@backstage/plugin-events-node'; -import { EventsService } from '@backstage/plugin-events-node'; -import { EventsServiceSubscribeOptions } from '@backstage/plugin-events-node'; -import { EventSubscriber } from '@backstage/plugin-events-node'; - -// @public @deprecated (undocumented) -export class TestEventBroker implements EventBroker { - // (undocumented) - publish(params: EventParams): Promise; - // (undocumented) - readonly published: EventParams[]; - // (undocumented) - subscribe( - ...subscribers: Array> - ): void; - // (undocumented) - readonly subscribed: EventSubscriber[]; -} - -// @public @deprecated (undocumented) -export class TestEventPublisher implements EventPublisher { - // (undocumented) - get eventBroker(): EventBroker | undefined; - // (undocumented) - setEventBroker(eventBroker: EventBroker): Promise; -} - -// @public (undocumented) -export class TestEventsService implements EventsService { - // (undocumented) - publish(params: EventParams): Promise; - // (undocumented) - get published(): EventParams[]; - // (undocumented) - reset(): void; - // (undocumented) - subscribe(options: EventsServiceSubscribeOptions): Promise; - // (undocumented) - get subscribed(): EventsServiceSubscribeOptions[]; -} - -// @public @deprecated (undocumented) -export class TestEventSubscriber implements EventSubscriber { - constructor(name: string, topics: string[]); - // (undocumented) - readonly name: string; - // (undocumented) - onEvent(params: EventParams): Promise; - // (undocumented) - readonly receivedEvents: Record; - // (undocumented) - supportsEventTopics(): string[]; - // (undocumented) - readonly topics: string[]; -} -``` diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index e5f068d3da..2cd57ed302 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-test-utils", - "version": "0.1.35", + "version": "0.1.36-next.0", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", "backstage": { "role": "node-library", diff --git a/plugins/events-backend-test-utils/report.api.md b/plugins/events-backend-test-utils/report.api.md new file mode 100644 index 0000000000..d88a9dbee0 --- /dev/null +++ b/plugins/events-backend-test-utils/report.api.md @@ -0,0 +1,86 @@ +## API Report File for "@backstage/plugin-events-backend-test-utils" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { EventBroker } from '@backstage/plugin-events-node'; +import { EventParams } from '@backstage/plugin-events-node'; +import { EventPublisher } from '@backstage/plugin-events-node'; +import { EventsService } from '@backstage/plugin-events-node'; +import { EventsServiceSubscribeOptions } from '@backstage/plugin-events-node'; +import { EventSubscriber } from '@backstage/plugin-events-node'; + +// @public @deprecated (undocumented) +export class TestEventBroker implements EventBroker { + // (undocumented) + publish(params: EventParams): Promise; + // (undocumented) + readonly published: EventParams[]; + // (undocumented) + subscribe( + ...subscribers: Array> + ): void; + // (undocumented) + readonly subscribed: EventSubscriber[]; +} + +// @public @deprecated (undocumented) +export class TestEventPublisher implements EventPublisher { + // (undocumented) + get eventBroker(): EventBroker | undefined; + // (undocumented) + setEventBroker(eventBroker: EventBroker): Promise; +} + +// @public (undocumented) +export class TestEventsService implements EventsService { + // (undocumented) + publish(params: EventParams): Promise; + // (undocumented) + get published(): EventParams[]; + // (undocumented) + reset(): void; + // (undocumented) + subscribe(options: EventsServiceSubscribeOptions): Promise; + // (undocumented) + get subscribed(): EventsServiceSubscribeOptions[]; +} + +// @public @deprecated (undocumented) +export class TestEventSubscriber implements EventSubscriber { + constructor(name: string, topics: string[]); + // (undocumented) + readonly name: string; + // (undocumented) + onEvent(params: EventParams): Promise; + // (undocumented) + readonly receivedEvents: Record; + // (undocumented) + supportsEventTopics(): string[]; + // (undocumented) + readonly topics: string[]; +} + +// Warnings were encountered during analysis: +// +// src/testUtils/TestEventBroker.d.ts:6:1 - (ae-undocumented) Missing documentation for "TestEventBroker". +// src/testUtils/TestEventBroker.d.ts:7:5 - (ae-undocumented) Missing documentation for "published". +// src/testUtils/TestEventBroker.d.ts:8:5 - (ae-undocumented) Missing documentation for "subscribed". +// src/testUtils/TestEventBroker.d.ts:9:5 - (ae-undocumented) Missing documentation for "publish". +// src/testUtils/TestEventBroker.d.ts:10:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/testUtils/TestEventPublisher.d.ts:6:1 - (ae-undocumented) Missing documentation for "TestEventPublisher". +// src/testUtils/TestEventPublisher.d.ts:8:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/testUtils/TestEventPublisher.d.ts:9:5 - (ae-undocumented) Missing documentation for "eventBroker". +// src/testUtils/TestEventSubscriber.d.ts:6:1 - (ae-undocumented) Missing documentation for "TestEventSubscriber". +// src/testUtils/TestEventSubscriber.d.ts:7:5 - (ae-undocumented) Missing documentation for "name". +// src/testUtils/TestEventSubscriber.d.ts:8:5 - (ae-undocumented) Missing documentation for "topics". +// src/testUtils/TestEventSubscriber.d.ts:9:5 - (ae-undocumented) Missing documentation for "receivedEvents". +// src/testUtils/TestEventSubscriber.d.ts:11:5 - (ae-undocumented) Missing documentation for "supportsEventTopics". +// src/testUtils/TestEventSubscriber.d.ts:12:5 - (ae-undocumented) Missing documentation for "onEvent". +// src/testUtils/TestEventsService.d.ts:3:1 - (ae-undocumented) Missing documentation for "TestEventsService". +// src/testUtils/TestEventsService.d.ts:5:5 - (ae-undocumented) Missing documentation for "publish". +// src/testUtils/TestEventsService.d.ts:6:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/testUtils/TestEventsService.d.ts:7:5 - (ae-undocumented) Missing documentation for "published". +// src/testUtils/TestEventsService.d.ts:8:5 - (ae-undocumented) Missing documentation for "subscribed". +// src/testUtils/TestEventsService.d.ts:9:5 - (ae-undocumented) Missing documentation for "reset". +``` diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 041bf852f0..645cd6af10 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-events-backend +## 0.3.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 5c728ee: The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events. + + The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances. + + The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus. + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.3.12 ### Patch Changes diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts new file mode 100644 index 0000000000..d75834884e --- /dev/null +++ b/plugins/events-backend/dev/index.ts @@ -0,0 +1,151 @@ +/* + * Copyright 2024 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 { WinstonLogger } from '@backstage/backend-defaults/rootLogger'; +import { createBackend } from '@backstage/backend-defaults'; +import { + coreServices, + createBackendPlugin, + createServiceFactory, +} from '@backstage/backend-plugin-api'; +import { mockServices } from '@backstage/backend-test-utils'; +import { eventsServiceRef } from '@backstage/plugin-events-node'; + +function makeBackend(port: number) { + const backend = createBackend(); + + backend.add( + mockServices.rootConfig.factory({ + data: { + backend: { + baseUrl: `http://localhost:${port}`, + listen: { port }, + database: { + client: 'pg', + connection: { + host: 'localhost', + port: 5432, + user: process.env.USER || 'postgres', + }, + }, + }, + }, + }), + ); + backend.add( + createServiceFactory({ + service: coreServices.rootLogger, + deps: {}, + async factory() { + return WinstonLogger.create({ + meta: { + service: 'backstage', + port, + }, + // level: 'debug', + format: WinstonLogger.colorFormat(), + }); + }, + }), + ); + backend.add(import('../src/alpha')); + + return backend; +} + +const backend7008 = makeBackend(7008); +backend7008.add( + createBackendPlugin({ + pluginId: 'producer', + register(reg) { + reg.registerInit({ + deps: { + events: eventsServiceRef, + logger: coreServices.logger, + rootLifecycle: coreServices.rootLifecycle, + }, + async init({ events, logger, rootLifecycle }) { + rootLifecycle.addStartupHook(async () => { + const publish = () => { + logger.info(`Publishing event to topic 'test'`); + events + .publish({ + eventPayload: { foo: 'bar' }, + topic: 'test', + }) + .catch(error => { + logger.error(`Failed to publish event from producer`, error); + }); + }; + publish(); + setInterval(publish, 10000); + }); + }, + }); + }, + }), +); +backend7008.start(); + +const backend7009 = makeBackend(7009); +backend7009.add( + createBackendPlugin({ + pluginId: 'consumer', + register(reg) { + reg.registerInit({ + deps: { + events: eventsServiceRef, + logger: coreServices.logger, + }, + async init({ events, logger }) { + await events.subscribe({ + id: 'test', + topics: ['test'], + async onEvent(event) { + logger.info(`Received event: ${JSON.stringify(event)}`); + }, + }); + }, + }); + }, + }), +); +backend7009.start(); + +const backend7010 = makeBackend(7010); +backend7010.add( + createBackendPlugin({ + pluginId: 'consumer', + register(reg) { + reg.registerInit({ + deps: { + events: eventsServiceRef, + logger: coreServices.logger, + }, + async init({ events, logger }) { + await events.subscribe({ + id: 'test', + topics: ['test'], + async onEvent(event) { + logger.info(`Received event: ${JSON.stringify(event)}`); + }, + }); + }, + }); + }, + }), +); +backend7010.start(); diff --git a/plugins/events-backend/migrations/20240523100528_init.js b/plugins/events-backend/migrations/20240523100528_init.js new file mode 100644 index 0000000000..9fbef79a75 --- /dev/null +++ b/plugins/events-backend/migrations/20240523100528_init.js @@ -0,0 +1,98 @@ +/* + * Copyright 2024 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. + */ + +// @ts-check + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ +exports.up = async function up(knex) { + // The event bus only supports PostgresSQL + if (knex.client.config.client === 'pg') { + await knex.schema.createTable('event_bus_events', table => { + table.comment('Events published to the events bus'); + table + .bigIncrements('id') + .primary() + .comment('The unique ID of this event'); + table + .text('created_by') + .notNullable() + .comment('The principal that published the event'); + table + .dateTime('created_at') + .defaultTo(knex.fn.now()) + .notNullable() + .comment('The time that the event was created'); + table.text('topic').notNullable().comment('The topic of the event'); + table + .text('data_json') + .notNullable() + .comment('The payload data of this event'); + table + .specificType('notified_subscribers', 'text ARRAY') + .comment( + 'The IDs of the subscribers that have already consumed this event', + ); + + table.index('topic', 'event_bus_events_topic_idx'); + }); + + await knex.schema.createTable('event_bus_subscriptions', table => { + table.comment('Subscriptions to the event bus'); + table + .string('id') + .primary() + .notNullable() + .comment('The unique ID of this particular subscription'); + table + .text('created_by') + .notNullable() + .comment('The principal that created the subscription'); + table + .dateTime('created_at') + .defaultTo(knex.fn.now()) + .notNullable() + .comment('The time that the subscription was created'); + table + .dateTime('updated_at') + .defaultTo(knex.fn.now()) + .notNullable() + .comment('The time that the subscription was last updated'); + table + .bigInteger('read_until') + .notNullable() + .comment( + 'The sequence counter until which the subscription has read events', + ); + table + .specificType('topics', 'text ARRAY') + .comment('The topics that this subscriber is interested in'); + }); + } +}; + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ +exports.down = async function down(knex) { + if (knex.client.config.client === 'pg') { + await knex.schema.dropTable('event_bus_subscriptions'); + await knex.schema.dropTable('event_bus_events'); + } +}; diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 34f64d05e0..0f035e3539 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.3.12", + "version": "0.3.13-next.0", "backstage": { "role": "backend-plugin", "pluginId": "events", @@ -39,11 +39,13 @@ }, "files": [ "config.d.ts", - "dist" + "dist", + "migrations" ], "scripts": { "build": "backstage-cli package build", "clean": "backstage-cli package clean", + "generate": "backstage-repo-tools package schema openapi generate --server --client-package plugins/events-node", "lint": "backstage-cli package lint", "prepack": "backstage-cli package prepack", "postpack": "backstage-cli package postpack", @@ -52,18 +54,25 @@ }, "dependencies": { "@backstage/backend-common": "^0.25.0", + "@backstage/backend-openapi-utils": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", "@backstage/plugin-events-node": "workspace:^", + "@backstage/types": "workspace:^", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", + "knex": "^3.0.0", "winston": "^3.2.1" }, "devDependencies": { + "@backstage/backend-app-api": "workspace:^", + "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/plugin-events-backend-test-utils": "workspace:^", + "@backstage/repo-tools": "workspace:^", "supertest": "^7.0.0" }, "configSchema": "config.d.ts" diff --git a/plugins/events-backend/api-report-alpha.md b/plugins/events-backend/report-alpha.api.md similarity index 100% rename from plugins/events-backend/api-report-alpha.md rename to plugins/events-backend/report-alpha.api.md diff --git a/plugins/events-backend/api-report.md b/plugins/events-backend/report.api.md similarity index 70% rename from plugins/events-backend/api-report.md rename to plugins/events-backend/report.api.md index 8b5d4e8d31..5511d8c410 100644 --- a/plugins/events-backend/api-report.md +++ b/plugins/events-backend/report.api.md @@ -56,4 +56,14 @@ export class HttpPostIngressEventPublisher { logger: LoggerService; }): HttpPostIngressEventPublisher; } + +// Warnings were encountered during analysis: +// +// src/service/DefaultEventBroker.d.ts:21:5 - (ae-undocumented) Missing documentation for "publish". +// src/service/DefaultEventBroker.d.ts:22:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/service/EventsBackend.d.ts:14:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/service/EventsBackend.d.ts:15:5 - (ae-undocumented) Missing documentation for "addPublishers". +// src/service/EventsBackend.d.ts:16:5 - (ae-undocumented) Missing documentation for "addSubscribers". +// src/service/http/HttpPostIngressEventPublisher.d.ts:15:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/service/http/HttpPostIngressEventPublisher.d.ts:24:5 - (ae-undocumented) Missing documentation for "bind". ``` diff --git a/plugins/events-backend/src/migrations.test.ts b/plugins/events-backend/src/migrations.test.ts new file mode 100644 index 0000000000..1c90260ed3 --- /dev/null +++ b/plugins/events-backend/src/migrations.test.ts @@ -0,0 +1,101 @@ +/* + * 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 { Knex } from 'knex'; +import { TestDatabases } from '@backstage/backend-test-utils'; +import fs from 'fs'; + +const migrationsDir = `${__dirname}/../migrations`; +const migrationsFiles = fs.readdirSync(migrationsDir).sort(); + +async function migrateUpOnce(knex: Knex): Promise { + await knex.migrate.up({ directory: migrationsDir }); +} + +async function migrateDownOnce(knex: Knex): Promise { + await knex.migrate.down({ directory: migrationsDir }); +} + +async function migrateUntilBefore(knex: Knex, target: string): Promise { + const index = migrationsFiles.indexOf(target); + if (index === -1) { + throw new Error(`Migration ${target} not found`); + } + for (let i = 0; i < index; i++) { + await migrateUpOnce(knex); + } +} + +jest.setTimeout(60_000); + +describe('migrations', () => { + const databases = TestDatabases.create({ + ids: ['POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], + }); + + it.each(databases.eachSupportedId())( + '20240523100528_init.js, %p', + async databaseId => { + const knex = await databases.init(databaseId); + + await migrateUntilBefore(knex, '20240523100528_init.js'); + await migrateUpOnce(knex); + + await knex('event_bus_events').insert({ + topic: 'test', + created_by: 'abc', + data_json: JSON.stringify({ message: 'hello' }), + notified_subscribers: ['tester'], + }); + await knex('event_bus_subscriptions').insert({ + id: 'tester', + created_by: 'abc', + read_until: '5', + topics: ['test', 'test2'], + }); + + await expect(knex('event_bus_events')).resolves.toEqual([ + { + id: '1', + created_by: 'abc', + topic: 'test', + data_json: JSON.stringify({ message: 'hello' }), + created_at: expect.anything(), + notified_subscribers: ['tester'], + }, + ]); + await expect(knex('event_bus_subscriptions')).resolves.toEqual([ + { + id: 'tester', + created_by: 'abc', + created_at: expect.anything(), + updated_at: expect.anything(), + read_until: '5', + topics: ['test', 'test2'], + }, + ]); + + await migrateDownOnce(knex); + + // This looks odd - you might expect a .toThrow at the end but that + // actually is flaky for some reason specifically on sqlite when + // performing multiple runs in sequence + await expect(knex('event_bus_events')).rejects.toEqual(expect.anything()); + + await knex.destroy(); + }, + ); +}); diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts new file mode 100644 index 0000000000..8f8d6c6a82 --- /dev/null +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -0,0 +1,291 @@ +/* + * Copyright 2024 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; + +export const spec = { + openapi: '3.0.3', + info: { + title: 'events', + version: '1', + description: 'The Backstage backend plugin that powers the events system.', + license: { + name: 'Apache-2.0', + url: 'http://www.apache.org/licenses/LICENSE-2.0.html', + }, + contact: {}, + }, + servers: [ + { + url: '/', + }, + ], + components: { + examples: {}, + headers: {}, + parameters: { + subscriptionId: { + name: 'subscriptionId', + in: 'path', + required: true, + allowReserved: true, + schema: { + type: 'string', + }, + }, + }, + requestBodies: {}, + responses: { + ErrorResponse: { + description: 'An error response from the backend.', + content: { + 'application/json; charset=utf-8': { + schema: { + $ref: '#/components/schemas/Error', + }, + }, + }, + }, + }, + schemas: { + Event: { + type: 'object', + required: ['topic', 'payload'], + properties: { + topic: { + type: 'string', + description: 'The topic that the event is published on', + }, + payload: { + description: 'The event payload', + }, + }, + }, + Error: { + type: 'object', + properties: { + error: { + type: 'object', + properties: { + name: { + type: 'string', + }, + message: { + type: 'string', + }, + }, + required: ['name', 'message'], + }, + request: { + type: 'object', + properties: { + method: { + type: 'string', + }, + url: { + type: 'string', + }, + }, + required: ['method', 'url'], + }, + response: { + type: 'object', + properties: { + statusCode: { + type: 'number', + }, + }, + required: ['statusCode'], + }, + }, + required: ['error', 'request', 'response'], + }, + }, + securitySchemes: { + JWT: { + type: 'http', + scheme: 'bearer', + bearerFormat: 'JWT', + }, + }, + }, + paths: { + '/bus/v1/events': { + post: { + operationId: 'PostEvent', + description: 'Publish a new event', + responses: { + '201': { + description: 'The event was published successfully', + }, + '204': { + description: + 'The event did not need to be published as all subscribers have already been notified', + }, + default: { + $ref: '#/components/responses/ErrorResponse', + }, + }, + security: [ + {}, + { + JWT: [], + }, + ], + requestBody: { + required: true, + content: { + 'application/json': { + schema: { + type: 'object', + required: ['event'], + properties: { + event: { + $ref: '#/components/schemas/Event', + }, + notifiedSubscribers: { + type: 'array', + description: + 'The IDs of subscriptions that have already received this event', + items: { + type: 'string', + }, + }, + }, + }, + examples: { + 'Publishing a simple Event': { + value: { + event: { + topic: 'test-topic', + payload: { + myData: 'foo', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + '/bus/v1/subscriptions/{subscriptionId}': { + put: { + operationId: 'PutSubscription', + description: + 'Ensures that the subscription exists with the provided configuration', + responses: { + '201': { + description: 'The subscription exists or was created successfully', + }, + default: { + $ref: '#/components/responses/ErrorResponse', + }, + }, + security: [ + {}, + { + JWT: [], + }, + ], + parameters: [ + { + $ref: '#/components/parameters/subscriptionId', + }, + ], + requestBody: { + required: true, + content: { + 'application/json': { + schema: { + type: 'object', + required: ['topics'], + properties: { + topics: { + type: 'array', + description: 'The topics to subscribe to', + items: { + type: 'string', + }, + }, + }, + }, + examples: { + 'Subscribing to a single topic': { + value: { + topics: ['test-topic'], + }, + }, + }, + }, + }, + }, + }, + }, + '/bus/v1/subscriptions/{subscriptionId}/events': { + get: { + operationId: 'GetSubscriptionEvents', + description: 'Get new events for the provided subscription', + responses: { + '200': { + description: 'New events', + content: { + 'application/json': { + schema: { + type: 'object', + required: ['events'], + properties: { + events: { + type: 'array', + items: { + $ref: '#/components/schemas/Event', + }, + }, + }, + }, + }, + }, + }, + '202': { + description: + 'No new events are available. Response will block until the client should try again.', + }, + default: { + $ref: '#/components/responses/ErrorResponse', + }, + }, + security: [ + {}, + { + JWT: [], + }, + ], + parameters: [ + { + $ref: '#/components/parameters/subscriptionId', + }, + ], + }, + }, + }, +} as const; +export const createOpenApiRouter = async ( + options?: Parameters['1'], +) => createValidatedOpenApiRouter(spec, options); diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml new file mode 100644 index 0000000000..97f7705f87 --- /dev/null +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -0,0 +1,182 @@ +openapi: 3.0.3 +info: + title: events + version: '1' + description: The Backstage backend plugin that powers the events system. + license: + name: Apache-2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + contact: {} +servers: + - url: / +components: + examples: {} + headers: {} + parameters: + subscriptionId: + name: subscriptionId + in: path + required: true + allowReserved: true + schema: + type: string + requestBodies: {} + responses: + ErrorResponse: + description: An error response from the backend. + content: + application/json; charset=utf-8: + schema: + $ref: '#/components/schemas/Error' + schemas: + Event: + type: object + required: + - topic + - payload + properties: + topic: + type: string + description: The topic that the event is published on + payload: + description: The event payload + + Error: + type: object + properties: + error: + type: object + properties: + name: + type: string + message: + type: string + required: + - name + - message + request: + type: object + properties: + method: + type: string + url: + type: string + required: + - method + - url + response: + type: object + properties: + statusCode: + type: number + required: + - statusCode + required: + - error + - request + - response + securitySchemes: + JWT: + type: http + scheme: bearer + bearerFormat: JWT +paths: + /bus/v1/events: + post: + operationId: PostEvent + description: Publish a new event + responses: + '201': + description: The event was published successfully + '204': + description: The event did not need to be published as all subscribers have already been notified + default: + $ref: '#/components/responses/ErrorResponse' + security: + - {} + - JWT: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - event + properties: + event: + $ref: '#/components/schemas/Event' + notifiedSubscribers: + type: array + description: The IDs of subscriptions that have already received this event + items: + type: string + examples: + Publishing a simple Event: + value: + event: + topic: test-topic + payload: + myData: foo + + /bus/v1/subscriptions/{subscriptionId}: + put: + operationId: PutSubscription + description: Ensures that the subscription exists with the provided configuration + responses: + '201': + description: The subscription exists or was created successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - {} + - JWT: [] + parameters: + - $ref: '#/components/parameters/subscriptionId' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - topics + properties: + topics: + type: array + description: The topics to subscribe to + items: + type: string + examples: + Subscribing to a single topic: + value: + topics: + - test-topic + + /bus/v1/subscriptions/{subscriptionId}/events: + get: + operationId: GetSubscriptionEvents + description: Get new events for the provided subscription + responses: + '200': + description: New events + content: + application/json: + schema: + type: object + required: + - events + properties: + events: + type: array + items: + $ref: '#/components/schemas/Event' + '202': + description: No new events are available. Response will block until the client should try again. + default: + $ref: '#/components/responses/ErrorResponse' + security: + - {} + - JWT: [] + parameters: + - $ref: '#/components/parameters/subscriptionId' diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 48ce1090fb..2c0befe1fd 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -14,11 +14,20 @@ * limitations under the License. */ +/* eslint-disable jest/expect-expect */ + import { createBackendModule, createServiceFactory, } from '@backstage/backend-plugin-api'; -import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { + TestBackend, + TestDatabaseId, + TestDatabases, + mockCredentials, + mockServices, + startTestBackend, +} from '@backstage/backend-test-utils'; import { eventsServiceRef } from '@backstage/plugin-events-node'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; import { TestEventsService } from '@backstage/plugin-events-backend-test-utils'; @@ -92,4 +101,334 @@ describe('eventsPlugin', () => { test: 'fake-ext', }); }); + + describe('event bus', () => { + class ReqHelper { + constructor(private readonly backend: TestBackend) {} + + subscribe(id: string, topics: string[], options?: { auth?: string }) { + return request(this.backend.server) + .put(`/api/events/bus/v1/subscriptions/${id}`) + .set( + 'authorization', + options?.auth ?? mockCredentials.service.header(), + ) + .send({ topics }); + } + + publish( + topic: string, + payload: unknown, + options?: { notifiedSubscribers?: string[] }, + ) { + return request(this.backend.server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ + event: { topic, payload }, + notifiedSubscribers: options?.notifiedSubscribers, + }); + } + + readEvents(id: string) { + return request(this.backend.server) + .get(`/api/events/bus/v1/subscriptions/${id}/events`) + .set('authorization', mockCredentials.service.header()) + .send(); + } + } + + const databases = TestDatabases.create({ + ids: ['SQLITE_3', 'MYSQL_8', 'POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], + }); + + async function mockKnexFactory(databaseId: TestDatabaseId) { + const knex = await databases.init(databaseId); + return mockServices.database.mock({ + getClient: async () => knex, + }).factory; + } + + let backend: TestBackend | undefined = undefined; + afterEach(async () => { + if (backend) { + await backend.stop(); + backend = undefined; + } + }); + + it.each(databases.eachSupportedId())( + 'should be possible to publish events as a service, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + await helper + .publish('test', { n: 1 }) + .set('authorization', mockCredentials.none.header()) + .expect(401); + + await helper + .publish('test', { n: 1 }) + .set('authorization', mockCredentials.user.header()) + .expect(403); + + await helper + .publish('test', { n: 1 }) + .set('authorization', mockCredentials.service.header()) + .expect(204); // 204, since there are no subscribers + }, + ); + + it.each(databases.eachSupportedId())( + 'should be possible to subscribe as a service and receive an event, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + await helper + .subscribe('tester', ['test']) + .set('authorization', mockCredentials.none.header()) + .expect(401); + + await helper + .subscribe('tester', ['test']) + .set('authorization', mockCredentials.user.header()) + .expect(403); + + await helper.subscribe('tester', ['test']).expect(201); + + await helper + .readEvents('tester') + .set('authorization', mockCredentials.none.header()) + .expect(401); + + await helper + .readEvents('tester') + .set('authorization', mockCredentials.user.header()) + .expect(403); + + await helper.publish('test', { n: 1 }).expect(201); // 201, since there is a subscriber + + await helper.readEvents('tester').expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); + }, + ); + + it.each(databases.eachSupportedId())( + 'should only send an event for each subscriber once, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + // 2 subscribers + await helper.subscribe('tester-1', ['test']).expect(201); + await helper.subscribe('tester-2', ['test']).expect(201); + + // A single event + await helper.publish('test', { n: 1 }).expect(201); + + // Single client for subscriber 1 gets the event + await helper.readEvents('tester-1').expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); + + // Two clients for subscriber 2, only one gets the event + const res1 = helper.readEvents('tester-2'); + const res2 = helper.readEvents('tester-2'); + + const res = await Promise.race([res1, res2]); + expect(res.status).toBe(200); + expect(res.body).toEqual({ + events: [{ topic: 'test', payload: { n: 1 } }], + }); + + // Post another event, which triggers the other client to return + await helper.publish('test', { n: 2 }).expect(201); + + const otherRes = await Promise.all([res1, res2]).then(rs => + rs.find(r => r !== res), + ); + expect(otherRes?.status).toBe(202); + + // Reading subscriber 2 should now return the second event only + await helper.readEvents('tester-2').expect(200, { + events: [{ topic: 'test', payload: { n: 2 } }], + }); + }, + ); + + it.each(databases.eachSupportedId())( + 'should not notify subscribers that have already consumed the event, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + // 2 subscribers + await helper.subscribe('tester-1', ['test']).expect(201); + await helper.subscribe('tester-2', ['test']).expect(201); + + // A single event for each subscriber, that should not be sent to the other one + await helper + .publish( + 'test', + { for: 'tester-2' }, + { + notifiedSubscribers: ['tester-1'], + }, + ) + .expect(201); + await helper + .publish( + 'test', + { for: 'tester-1' }, + { + notifiedSubscribers: ['tester-2'], + }, + ) + .expect(201); + + // Single client for subscriber 1 gets the event + await helper.readEvents('tester-1').expect(200, { + events: [{ topic: 'test', payload: { for: 'tester-1' } }], + }); + // Single client for subscriber 2 gets the event + await helper.readEvents('tester-2').expect(200, { + events: [{ topic: 'test', payload: { for: 'tester-2' } }], + }); + }, + ); + + it.each(databases.eachSupportedId())( + 'should return multiple events in order, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + // 2 subscribers + await helper.subscribe('tester', ['test']).expect(201); + + // A sequence of events published one at a time + for (let n = 0; n < 15; ++n) { + await helper.publish('test', { n }).expect(201); + } + + // Batch size it 10 + await helper.readEvents('tester').expect(200, { + events: [ + { topic: 'test', payload: { n: 0 } }, + { topic: 'test', payload: { n: 1 } }, + { topic: 'test', payload: { n: 2 } }, + { topic: 'test', payload: { n: 3 } }, + { topic: 'test', payload: { n: 4 } }, + { topic: 'test', payload: { n: 5 } }, + { topic: 'test', payload: { n: 6 } }, + { topic: 'test', payload: { n: 7 } }, + { topic: 'test', payload: { n: 8 } }, + { topic: 'test', payload: { n: 9 } }, + ], + }); + + await helper.readEvents('tester').expect(200, { + events: [ + { topic: 'test', payload: { n: 10 } }, + { topic: 'test', payload: { n: 11 } }, + { topic: 'test', payload: { n: 12 } }, + { topic: 'test', payload: { n: 13 } }, + { topic: 'test', payload: { n: 14 } }, + ], + }); + }, + ); + + it.each(databases.eachSupportedId())( + 'should skip publishing if all subscribers have already consumed the event, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + await helper.subscribe('tester', ['test']).expect(201); + + await helper + .publish( + 'test', + { for: 'tester-2' }, + { notifiedSubscribers: ['tester'] }, + ) + .expect(204); + }, + ); + + it.each(databases.eachSupportedId())( + 'should time out when no events are available, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + await helper.subscribe('tester', ['test']).expect(201); + + jest.useFakeTimers({ + advanceTimers: true, + }); + + try { + // Can't use supertest for this one because it can't handle the partially blocking response + const res = await fetch( + `http://localhost:${backend.server.port()}/api/events/bus/v1/subscriptions/tester/events`, + { + headers: { + authorization: mockCredentials.service.header(), + }, + }, + ); + + expect(res.status).toBe(202); + + const reader = res.body!.getReader(); + const isClosed = () => + Promise.race([ + reader + .read() + .then(() => reader.closed) + .then(() => true), + new Promise(r => setTimeout(r, 100, false)), + ]); + + await expect(isClosed()).resolves.toBe(false); + await jest.advanceTimersByTimeAsync(30000); + await expect(isClosed()).resolves.toBe(false); + await jest.advanceTimersByTimeAsync(30000); + await expect(isClosed()).resolves.toBe(true); + } finally { + jest.useRealTimers(); + } + }, + ); + + it.each(databases.eachSupportedId())( + 'should refuse listen without a subscription, %p', + async databaseId => { + backend = await startTestBackend({ + features: [eventsPlugin, await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + await helper.readEvents('nonexistent').expect(404); + }, + ); + }); }); diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index d95dbf3efc..1369ee98ca 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -28,6 +28,7 @@ import { } from '@backstage/plugin-events-node'; import Router from 'express-promise-router'; import { HttpPostIngressEventPublisher } from './http'; +import { createEventBusRouter } from './hub'; class EventsExtensionPointImpl implements EventsExtensionPoint { #httpPostIngresses: HttpPostIngressOptions[] = []; @@ -74,10 +75,23 @@ export const eventsPlugin = createBackendPlugin({ deps: { config: coreServices.rootConfig, events: eventsServiceRef, + database: coreServices.database, logger: coreServices.logger, + scheduler: coreServices.scheduler, + lifecycle: coreServices.lifecycle, + httpAuth: coreServices.httpAuth, router: coreServices.httpRouter, }, - async init({ config, events, logger, router }) { + async init({ + config, + events, + database, + logger, + scheduler, + lifecycle, + httpAuth, + router, + }) { const ingresses = Object.fromEntries( extensionPoint.httpPostIngresses.map(ingress => [ ingress.topic, @@ -93,6 +107,17 @@ export const eventsPlugin = createBackendPlugin({ }); const eventsRouter = Router(); http.bind(eventsRouter); + + router.use( + await createEventBusRouter({ + database, + logger, + httpAuth, + scheduler, + lifecycle, + }), + ); + router.use(eventsRouter); router.addAuthPolicy({ allow: 'unauthenticated', diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts new file mode 100644 index 0000000000..7086d90cbf --- /dev/null +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -0,0 +1,245 @@ +/* + * Copyright 2024 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 { + TestDatabases, + mockCredentials, + mockServices, +} from '@backstage/backend-test-utils'; +import { DatabaseEventBusStore } from './DatabaseEventBusStore'; + +const logger = mockServices.logger.mock(); + +const databases = TestDatabases.create({ + ids: ['POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], +}); + +describe('DatabaseEventBusStore', () => { + it.each(databases.eachSupportedId())( + 'should clean up old events, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ logger, db }); + + await store.upsertSubscription( + 'tester-1', + ['test'], + mockCredentials.service(), + ); + await store.upsertSubscription( + 'tester-2', + ['test'], + mockCredentials.service(), + ); + + for (let i = 0; i < 10; ++i) { + await store.publish({ + event: { topic: 'test', eventPayload: { n: i } }, + credentials: mockCredentials.service(), + }); + } + + const { events: events1 } = await store.readSubscription('tester-1'); + expect(events1.length).toBe(10); + + await store.clean(); + + await expect(store.readSubscription('tester-2')).rejects.toThrow( + "Subscription with ID 'tester-2' not found", + ); + + await store.upsertSubscription( + 'tester-3', + ['test'], + mockCredentials.service(), + ); + + // Reset read pointer to read form the beginning + await db('event_bus_subscriptions').select({ id: 'tester-3' }).update({ + read_until: 0, + }); + + const { events: events3 } = await store.readSubscription('tester-3'); + expect(events3.length).toBe(5); + }, + ); + + it.each(databases.eachSupportedId())( + 'should always clean up events outside the max age window, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + maxAge: 0, + }); + + await store.upsertSubscription( + 'tester-1', + ['test'], + mockCredentials.service(), + ); + await store.upsertSubscription( + 'tester-2', + ['test'], + mockCredentials.service(), + ); + + for (let i = 0; i < 10; ++i) { + await store.publish({ + event: { topic: 'test', eventPayload: { n: i } }, + credentials: mockCredentials.service(), + }); + } + + const { events: events1 } = await store.readSubscription('tester-1'); + expect(events1.length).toBe(10); + + await store.clean(); + + await expect(store.readSubscription('tester-2')).rejects.toThrow( + "Subscription with ID 'tester-2' not found", + ); + + await store.upsertSubscription( + 'tester-3', + ['test'], + mockCredentials.service(), + ); + + // Reset read pointer to read form the beginning + await db('event_bus_subscriptions').select({ id: 'tester-3' }).update({ + read_until: 0, + }); + + const { events: events3 } = await store.readSubscription('tester-3'); + expect(events3.length).toBe(0); + }, + ); + + it.each(databases.eachSupportedId())( + 'should not clean up events within the min age window, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + minAge: 1000, + }); + + await store.upsertSubscription( + 'tester-1', + ['test'], + mockCredentials.service(), + ); + + for (let i = 0; i < 10; ++i) { + await store.publish({ + event: { topic: 'test', eventPayload: { n: i } }, + credentials: mockCredentials.service(), + }); + } + + await store.clean(); + + const { events: events1 } = await store.readSubscription('tester-1'); + expect(events1.length).toBe(10); + }, + ); + + it.each(databases.eachSupportedId())( + 'should clean up a large number of events, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + }); + + const COUNT = '100000'; + + await db.raw(` + INSERT INTO event_bus_events (id, created_by, topic, data_json) + SELECT id, 'abc', 'test', '{}' + FROM generate_series(1, ${COUNT}) AS id + `); + + await expect(db('event_bus_events').count()).resolves.toEqual([ + { count: COUNT }, + ]); + + const start = Date.now(); + + await store.clean(); + + // Local testing shows this takes about 80ms, but if this is flaky we can + // reduce the count down to 10_000. + expect(Date.now() - start).toBeLessThan(500); + + await expect(db('event_bus_events').count()).resolves.toEqual([ + { count: '5' }, + ]); + }, + ); + + it.each(databases.eachSupportedId())( + 'should perform well when looking up events by topic, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + }); + + const COUNT = '100000'; + + // Insert 100,000 events, a lot more than we'd expect to ever have + // in a real-world scenario given our count window size is 10,000. + await db.raw(` + INSERT INTO event_bus_events (id, created_by, topic, data_json, notified_subscribers) + SELECT id, 'abc', CONCAT('test-', MOD(id, 10)), CONCAT('{"payload":{"id":"', id, '"}}'), '{"${String( + Math.random(), + ).slice(2, 6)}"}' + FROM generate_series(1, ${COUNT}) AS id + `); + await db('event_bus_subscriptions').insert({ + id: 'tester', + created_by: 'abc', + read_until: 0, + topics: ['test-5'], + }); + + const start = Date.now(); + const { events } = await store.readSubscription('tester'); + const duration = Date.now() - start; + + expect(events).toEqual([ + { topic: 'test-5', eventPayload: { id: '5' } }, + { topic: 'test-5', eventPayload: { id: '15' } }, + { topic: 'test-5', eventPayload: { id: '25' } }, + { topic: 'test-5', eventPayload: { id: '35' } }, + { topic: 'test-5', eventPayload: { id: '45' } }, + { topic: 'test-5', eventPayload: { id: '55' } }, + { topic: 'test-5', eventPayload: { id: '65' } }, + { topic: 'test-5', eventPayload: { id: '75' } }, + { topic: 'test-5', eventPayload: { id: '85' } }, + { topic: 'test-5', eventPayload: { id: '95' } }, + ]); + + expect(duration).toBeLessThan(20); + }, + ); +}); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts new file mode 100644 index 0000000000..107dabfc27 --- /dev/null +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -0,0 +1,622 @@ +/* + * Copyright 2024 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 { EventParams } from '@backstage/plugin-events-node'; +import { EventBusStore } from './types'; +import { Knex } from 'knex'; +import { + BackstageCredentials, + BackstageServicePrincipal, + DatabaseService, + LifecycleService, + LoggerService, + SchedulerService, + resolvePackagePath, +} from '@backstage/backend-plugin-api'; +import { ForwardedError, NotFoundError } from '@backstage/errors'; +import { HumanDuration, durationToMilliseconds } from '@backstage/types'; + +const WINDOW_MAX_COUNT_DEFAULT = 10_000; +const WINDOW_MIN_AGE_DEFAULT = { minutes: 10 }; +const WINDOW_MAX_AGE_DEFAULT = { days: 1 }; + +const MAX_BATCH_SIZE = 10; +const LISTENER_CONNECTION_TIMEOUT_MS = 60_000; +const KEEPALIVE_INTERVAL_MS = 60_000; + +const TABLE_EVENTS = 'event_bus_events'; +const TABLE_SUBSCRIPTIONS = 'event_bus_subscriptions'; +const TOPIC_PUBLISH = 'event_bus_publish'; + +type EventsRow = { + id: string; + created_by: string; + created_at: Date; + topic: string; + data_json: string; + notified_subscribers: string[]; +}; + +type SubscriptionsRow = { + id: string; + created_by: string; + created_at: Date; + updated_at: Date; + read_until: string; + topics: string[]; +}; + +function creatorId( + credentials: BackstageCredentials, +) { + return `service=${credentials.principal.subject}`; +} + +const migrationsDir = resolvePackagePath( + '@backstage/plugin-events-backend', + 'migrations', +); + +interface InternalDbClient { + acquireRawConnection(): Promise; + destroyRawConnection(conn: InternalDbConnection): Promise; +} + +interface InternalDbConnection { + query(sql: string): Promise; + end(): Promise; + on( + event: 'notification', + listener: (event: { channel: string; payload: string }) => void, + ): void; + on(event: 'error', listener: (error: Error) => void): void; + on(event: 'end', listener: (error?: Error) => void): void; + removeAllListeners(): void; +} + +// This internal class manages a single connection to the database that all listeners share +class DatabaseEventBusListener { + readonly #client: InternalDbClient; + readonly #logger: LoggerService; + + readonly #listeners = new Set<{ + topics: Set; + resolve: (result: { topic: string }) => void; + reject: (error: Error) => void; + }>(); + + #isShuttingDown = false; + #connPromise?: Promise; + #connTimeout?: NodeJS.Timeout; + #keepaliveInterval?: NodeJS.Timeout; + + constructor(client: InternalDbClient, logger: LoggerService) { + this.#client = client; + this.#logger = logger.child({ type: 'DatabaseEventBusListener' }); + } + + async setupListener( + topics: Set, + signal: AbortSignal, + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }> { + if (this.#connTimeout) { + clearTimeout(this.#connTimeout); + this.#connTimeout = undefined; + } + + await this.#ensureConnection(); + + const updatePromise = new Promise<{ topic: string }>((resolve, reject) => { + const listener = { + topics, + resolve(result: { topic: string }) { + resolve(result); + cleanup(); + }, + reject(err: Error) { + reject(err); + cleanup(); + }, + }; + this.#listeners.add(listener); + + const onAbort = () => { + this.#listeners.delete(listener); + this.#maybeTimeoutConnection(); + reject(signal.reason); + cleanup(); + }; + + function cleanup() { + signal.removeEventListener('abort', onAbort); + } + + signal.addEventListener('abort', onAbort); + }); + + // Ignore unhandled rejections + updatePromise.catch(() => {}); + + return { waitForUpdate: () => updatePromise }; + } + + async shutdown() { + if (this.#isShuttingDown) { + return; + } + this.#isShuttingDown = true; + const conn = await this.#connPromise?.catch(() => undefined); + if (conn) { + this.#destroyConnection(conn); + } + } + + #handleNotify(topic: string) { + this.#logger.debug(`Listener received notification for topic '${topic}'`); + for (const l of this.#listeners) { + if (l.topics.has(topic)) { + l.resolve({ topic }); + this.#listeners.delete(l); + } + } + this.#maybeTimeoutConnection(); + } + + // We don't try to reconnect on error, instead we notify all listeners and let + // them try to establish a new connection + #handleError(error: Error) { + this.#logger.error( + `Listener connection failed, notifying all listeners`, + error, + ); + for (const l of this.#listeners) { + l.reject(new Error('Listener connection failed')); + } + this.#listeners.clear(); + this.#maybeTimeoutConnection(); + } + + #maybeTimeoutConnection() { + // If we don't have any listeners, destroy the connection after a timeout + if (this.#listeners.size === 0 && !this.#connTimeout) { + this.#connTimeout = setTimeout(() => { + this.#connTimeout = undefined; + this.#connPromise?.then(conn => { + this.#logger.info('Listener connection timed out, destroying'); + this.#connPromise = undefined; + this.#destroyConnection(conn); + }); + }, LISTENER_CONNECTION_TIMEOUT_MS); + } + } + + #destroyConnection(conn: InternalDbConnection) { + if (this.#keepaliveInterval) { + clearInterval(this.#keepaliveInterval); + this.#keepaliveInterval = undefined; + } + this.#client.destroyRawConnection(conn).catch(error => { + this.#logger.error(`Listener failed to destroy connection`, error); + }); + conn.removeAllListeners(); + } + + async #ensureConnection() { + if (this.#isShuttingDown) { + throw new Error('Listener is shutting down'); + } + if (this.#connPromise) { + await this.#connPromise; + return; + } + this.#connPromise = Promise.resolve().then(async () => { + const conn = await this.#client.acquireRawConnection(); + + try { + await conn.query(`LISTEN ${TOPIC_PUBLISH}`); + + // Set up a keepalive interval to make sure the connection stays alive + if (this.#keepaliveInterval) { + clearInterval(this.#keepaliveInterval); + } + this.#keepaliveInterval = setInterval(() => { + conn.query('select 1').catch(error => { + this.#connPromise = undefined; + this.#destroyConnection(conn); + this.#handleError(new ForwardedError('Keepalive failed', error)); + }); + }, KEEPALIVE_INTERVAL_MS); + + conn.on('notification', event => { + this.#handleNotify(event.payload); + }); + conn.on('error', error => { + this.#connPromise = undefined; + this.#destroyConnection(conn); + this.#handleError(error); + }); + conn.on('end', error => { + this.#connPromise = undefined; + this.#destroyConnection(conn); + this.#handleError( + error ?? new Error('Connection ended unexpectedly'), + ); + }); + return conn; + } catch (error) { + this.#destroyConnection(conn); + throw error; + } + }); + try { + await this.#connPromise; + } catch (error) { + this.#connPromise = undefined; + throw error; + } + } +} + +export class DatabaseEventBusStore implements EventBusStore { + static async create(options: { + database: DatabaseService; + logger: LoggerService; + scheduler: SchedulerService; + lifecycle: LifecycleService; + window?: { + /** Events within this range will never be deleted */ + minAge?: HumanDuration; + /** Events outside of this age will always be deleted */ + maxAge?: HumanDuration; + /** Events outside of this count will be deleted if they are outside the minAge window */ + maxCount?: number; + }; + }): Promise { + const db = await options.database.getClient(); + + if (db.client.config.client !== 'pg') { + throw new Error( + `DatabaseEventBusStore only supports PostgreSQL, got '${db.client.config.client}'`, + ); + } + + if (!options.database.migrations?.skip) { + await db.migrate.latest({ + directory: migrationsDir, + }); + } + + const listener = new DatabaseEventBusListener(db.client, options.logger); + + const store = new DatabaseEventBusStore( + db, + options.logger, + listener, + options.window?.maxCount ?? WINDOW_MAX_COUNT_DEFAULT, + durationToMilliseconds(options.window?.minAge ?? WINDOW_MIN_AGE_DEFAULT), + durationToMilliseconds(options.window?.maxAge ?? WINDOW_MAX_AGE_DEFAULT), + ); + + await options.scheduler.scheduleTask({ + id: 'event-bus-cleanup', + frequency: { seconds: 10 }, + timeout: { minutes: 1 }, + initialDelay: { seconds: 10 }, + fn: () => store.#cleanup(), + }); + + options.lifecycle.addShutdownHook(async () => { + await listener.shutdown(); + }); + + return store; + } + + /** @internal */ + static async forTest({ + db, + logger, + minAge = 0, + maxAge = 10_000, + }: { + db: Knex; + logger: LoggerService; + minAge?: number; + maxAge?: number; + }) { + await db.migrate.latest({ directory: migrationsDir }); + + const store = new DatabaseEventBusStore( + db, + logger, + new DatabaseEventBusListener(db.client, logger), + 5, + minAge, + maxAge, + ); + + return Object.assign(store, { clean: () => store.#cleanup() }); + } + + readonly #db: Knex; + readonly #logger: LoggerService; + readonly #listener: DatabaseEventBusListener; + readonly #windowMaxCount: number; + readonly #windowMinAge: number; + readonly #windowMaxAge: number; + + private constructor( + db: Knex, + logger: LoggerService, + listener: DatabaseEventBusListener, + windowMaxCount: number, + windowMinAge: number, + windowMaxAge: number, + ) { + this.#db = db; + this.#logger = logger; + this.#listener = listener; + this.#windowMaxCount = windowMaxCount; + this.#windowMinAge = windowMinAge; + this.#windowMaxAge = windowMaxAge; + } + + async publish(options: { + event: EventParams; + notifiedSubscribers?: string[]; + credentials: BackstageCredentials; + }): Promise<{ eventId: string } | undefined> { + const topic = options.event.topic; + const notifiedSubscribers = options.notifiedSubscribers ?? []; + // This query inserts a new event into the database, but only if there are + // subscribers to the topic that have not already been notified + const result = await this.#db + // There's no clean way to create a INSERT INTO .. SELECT with knex, so we end up with quite a lot of .raw(...) + .into( + this.#db.raw('?? (??, ??, ??, ??)', [ + TABLE_EVENTS, + // These are the rows that we insert, and should match the SELECT below + 'created_by', + 'topic', + 'data_json', + 'notified_subscribers', + ]), + ) + .insert( + (q: Knex.QueryBuilder) => + q + // We're not reading data to insert from anywhere else, just raw data + .select( + this.#db.raw('?', [creatorId(options.credentials)]), + this.#db.raw('?', [topic]), + this.#db.raw('?', [ + JSON.stringify({ + payload: options.event.eventPayload, + metadata: options.event.metadata, + }), + ]), + this.#db.raw('?', [notifiedSubscribers]), + ) + // The rest of this query is to check whether there are any + // subscribers that have not been notified yet + .from(TABLE_SUBSCRIPTIONS) + .whereNotIn('id', notifiedSubscribers) // Skip notified subscribers + .andWhere(this.#db.raw('? = ANY(topics)', [topic])) // Match topic + .having(this.#db.raw('count(*)'), '>', 0), // Check if there are any results + ) + .returning<{ id: string }[]>('id'); + + if (result.length === 0) { + return undefined; + } + if (result.length > 1) { + throw new Error( + `Failed to insert event, unexpectedly updated ${result.length} rows`, + ); + } + + const [{ id }] = result; + + // Notify other event bus instances that an event is available on the topic + const notifyResult = await this.#db.select( + this.#db.raw(`pg_notify(?, ?)`, [TOPIC_PUBLISH, topic]), + ); + if (notifyResult?.length !== 1) { + this.#logger.warn( + `Failed to notify subscribers of event with ID '${id}' on topic '${topic}'`, + ); + } + + return { eventId: id }; + } + + async upsertSubscription( + id: string, + topics: string[], + credentials: BackstageCredentials, + ): Promise { + const [{ max: maxId }] = await this.#db(TABLE_EVENTS).max('id'); + const result = await this.#db(TABLE_SUBSCRIPTIONS) + .insert({ + id, + created_by: creatorId(credentials), + updated_at: this.#db.fn.now(), + topics, + read_until: maxId || 0, + }) + .onConflict('id') + .merge(['created_by', 'topics', 'updated_at']) + .returning('*'); + + if (result.length !== 1) { + throw new Error( + `Failed to upsert subscription, updated ${result.length} rows`, + ); + } + } + + async readSubscription(id: string): Promise<{ events: EventParams[] }> { + // The below query selects the subscription we're reading from, locks it for + // an update, reads events for the subscription up to the limit, and then + // updates the pointer to the last read event. + // + // This is written as a plain SQL query to spare us all the horrors of + // expressing this in knex. + + const { rows: result } = await this.#db.raw<{ + rows: [] | [{ events: EventsRow[] }]; + }>( + ` + WITH subscription AS ( + SELECT topics, read_until + FROM event_bus_subscriptions + WHERE id = :id + FOR UPDATE + ), + selected_events AS ( + SELECT event_bus_events.* + FROM event_bus_events + INNER JOIN subscription + ON event_bus_events.topic = ANY(subscription.topics) + WHERE event_bus_events.id > subscription.read_until + AND NOT :id = ANY(event_bus_events.notified_subscribers) + ORDER BY event_bus_events.id ASC LIMIT :limit + ), + last_event_id AS ( + SELECT max(id) AS last_event_id + FROM selected_events + ), + events_array AS ( + SELECT json_agg(row_to_json(selected_events)) AS events + FROM selected_events + ) + UPDATE event_bus_subscriptions + SET read_until = COALESCE(last_event_id, (SELECT MAX(id) FROM event_bus_events), 0) + FROM events_array, last_event_id + WHERE event_bus_subscriptions.id = :id + RETURNING events_array.events + `, + { id, limit: MAX_BATCH_SIZE }, + ); + + if (result.length === 0) { + throw new NotFoundError(`Subscription with ID '${id}' not found`); + } else if (result.length > 1) { + throw new Error( + `Failed to read subscription, unexpectedly updated ${result.length} rows`, + ); + } + + const rows = result[0].events; + if (!rows || rows.length === 0) { + return { events: [] }; + } + + return { + events: rows.map(row => { + const { payload, metadata } = JSON.parse(row.data_json); + return { + topic: row.topic, + eventPayload: payload, + metadata, + }; + }), + }; + } + + async setupListener( + subscriptionId: string, + options: { + signal: AbortSignal; + }, + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }> { + const result = await this.#db(TABLE_SUBSCRIPTIONS) + .select('topics') + .where({ id: subscriptionId }) + .first(); + + if (!result) { + throw new NotFoundError( + `Subscription with ID '${subscriptionId}' not found`, + ); + } + + options.signal.throwIfAborted(); + + return this.#listener.setupListener( + new Set(result.topics ?? []), + options.signal, + ); + } + + async #cleanup() { + try { + const eventCount = await this.#db(TABLE_EVENTS) + .delete() + // Delete any events that are outside both the min age and size window + .orWhere(inner => + inner + .whereIn( + 'id', + this.#db + .select('id') + .from(TABLE_EVENTS) + .orderBy('id', 'desc') + .offset(this.#windowMaxCount), + ) + .andWhere( + 'created_at', + '<', + new Date(Date.now() - this.#windowMinAge), + ), + ) + // If events are outside the max age they will always be deleted + .orWhere('created_at', '<', new Date(Date.now() - this.#windowMaxAge)); + + if (eventCount > 0) { + this.#logger.info( + `Event cleanup resulted in ${eventCount} old events being deleted`, + ); + } + } catch (error) { + this.#logger.error('Event cleanup failed', error); + } + + try { + // Delete any subscribers that aren't keeping up with current events + const [{ min: minId }] = await this.#db(TABLE_EVENTS).min('id'); + + let subscriberCount; + if (minId === null) { + // No events left, remove all subscribers. This can happen if no events + // are published within the max age window. + subscriberCount = await this.#db(TABLE_SUBSCRIPTIONS).delete(); + } else { + subscriberCount = await this.#db(TABLE_SUBSCRIPTIONS) + .delete() + // Read pointer points to the ID that has been read, so we need an additional offset + .where('read_until', '<', minId - 1); + } + + if (subscriberCount > 0) { + this.#logger.info( + `Subscription cleanup resulted in ${subscriberCount} stale subscribers being deleted`, + ); + } + } catch (error) { + this.#logger.error('Subscription cleanup failed', error); + } + } +} diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts new file mode 100644 index 0000000000..52d075951d --- /dev/null +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts @@ -0,0 +1,91 @@ +/* + * Copyright 2024 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 { EventParams } from '@backstage/plugin-events-node'; +import { MemoryEventBusStore } from './MemoryEventBusStore'; +import { mockCredentials } from '@backstage/backend-test-utils'; + +function mkEvent(message: string): EventParams { + return { + topic: 'test', + eventPayload: { message }, + }; +} + +describe('MemoryEventBusStore', () => { + it('should publish to subscribers', async () => { + const store = new MemoryEventBusStore(); + + await expect( + store.publish({ + event: mkEvent('hello'), + notifiedSubscribers: [], + credentials: mockCredentials.service(), + }), + ).resolves.toEqual(undefined); + + await expect(store.readSubscription('test')).rejects.toThrow( + 'Subscription not found', + ); + + await store.upsertSubscription('tester', ['test']); + + await expect( + store.publish({ + event: mkEvent('hello'), + notifiedSubscribers: [], + credentials: mockCredentials.service(), + }), + ).resolves.toEqual({ eventId: '1' }); + + await expect( + store.publish({ + event: mkEvent('ignored'), + notifiedSubscribers: ['tester'], + credentials: mockCredentials.service(), + }), + ).resolves.toEqual(undefined); + + await expect(store.readSubscription('tester')).resolves.toEqual({ + events: [mkEvent('hello')], + }); + }); + + it('should clean up old events', async () => { + const store = new MemoryEventBusStore({ maxEvents: 5 }); + + await store.upsertSubscription('tester', ['test']); + + for (let i = 0; i < 20; ++i) { + await expect( + store.publish({ + event: mkEvent(`hello ${i}`), + notifiedSubscribers: [], + credentials: mockCredentials.service(), + }), + ).resolves.toEqual({ eventId: String(i + 1) }); + } + + await expect(store.readSubscription('tester')).resolves.toEqual({ + events: [ + mkEvent('hello 15'), + mkEvent('hello 16'), + mkEvent('hello 17'), + mkEvent('hello 18'), + mkEvent('hello 19'), + ], + }); + }); +}); diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts new file mode 100644 index 0000000000..6c999dc390 --- /dev/null +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -0,0 +1,164 @@ +/* + * Copyright 2024 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 { EventParams } from '@backstage/plugin-events-node'; +import { EventBusStore } from './types'; +import { NotFoundError } from '@backstage/errors'; +import { + BackstageCredentials, + BackstageServicePrincipal, +} from '@backstage/backend-plugin-api'; + +const MAX_BATCH_SIZE = 10; +const MAX_EVENTS_DEFAULT = 1_000; + +export class MemoryEventBusStore implements EventBusStore { + #maxEvents: number; + #events = new Array< + EventParams & { seq: number; notifiedSubscribers: Set } + >(); + #subscribers = new Map< + string, + { id: string; seq: number; topics: Set } + >(); + #listeners = new Set<{ + topics: Set; + resolve(result: { topic: string }): void; + }>(); + + constructor(options: { maxEvents?: number } = {}) { + this.#maxEvents = options.maxEvents ?? MAX_EVENTS_DEFAULT; + } + + async publish(options: { + event: EventParams; + notifiedSubscribers: string[]; + credentials: BackstageCredentials; + }): Promise<{ eventId: string } | undefined> { + const topic = options.event.topic; + const notifiedSubscribers = new Set(options.notifiedSubscribers); + + let hasOtherSubscribers = false; + for (const sub of this.#subscribers.values()) { + if (sub.topics.has(topic) && !notifiedSubscribers.has(sub.id)) { + hasOtherSubscribers = true; + break; + } + } + if (!hasOtherSubscribers) { + return undefined; + } + + const nextSeq = this.#getMaxSeq() + 1; + this.#events.push({ ...options.event, notifiedSubscribers, seq: nextSeq }); + + for (const listener of this.#listeners) { + if (listener.topics.has(topic)) { + listener.resolve({ topic }); + this.#listeners.delete(listener); + } + } + + // Trim old events + if (this.#events.length > this.#maxEvents) { + this.#events.shift(); + } + + return { eventId: String(nextSeq) }; + } + + #getMaxSeq() { + return this.#events[this.#events.length - 1]?.seq ?? 0; + } + + async upsertSubscription(id: string, topics: string[]): Promise { + const existing = this.#subscribers.get(id); + if (existing) { + existing.topics = new Set(topics); + return; + } + const sub = { + id: id, + seq: this.#getMaxSeq(), + topics: new Set(topics), + }; + this.#subscribers.set(id, sub); + } + + async readSubscription(id: string): Promise<{ events: EventParams[] }> { + const sub = this.#subscribers.get(id); + if (!sub) { + throw new NotFoundError(`Subscription not found`); + } + const events = this.#events + .filter( + event => + event.seq > sub.seq && + sub.topics.has(event.topic) && + !event.notifiedSubscribers.has(id), + ) + .slice(0, MAX_BATCH_SIZE); + + sub.seq = events[events.length - 1]?.seq ?? sub.seq; + + return { + events: events.map(({ topic, eventPayload }) => ({ + topic, + eventPayload, + })), + }; + } + + async setupListener( + subscriptionId: string, + options: { + signal: AbortSignal; + }, + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }> { + return { + waitForUpdate: async () => { + options.signal.throwIfAborted(); + + const sub = this.#subscribers.get(subscriptionId); + if (!sub) { + throw new NotFoundError(`Subscription not found`); + } + + return new Promise<{ topic: string }>((resolve, reject) => { + const listener = { + topics: sub.topics, + resolve(result: { topic: string }) { + resolve(result); + cleanup(); + }, + }; + this.#listeners.add(listener); + + const onAbort = () => { + this.#listeners.delete(listener); + reject(options.signal.reason); + cleanup(); + }; + + function cleanup() { + options.signal.removeEventListener('abort', onAbort); + } + + options.signal.addEventListener('abort', onAbort); + }); + }, + }; + } +} diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts new file mode 100644 index 0000000000..4a332d5ce5 --- /dev/null +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -0,0 +1,278 @@ +/* + * Copyright 2024 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 { + DatabaseService, + HttpAuthService, + LifecycleService, + LoggerService, + SchedulerService, +} from '@backstage/backend-plugin-api'; +import { Handler } from 'express'; +import { createOpenApiRouter } from '../../schema/openapi.generated'; +import { MemoryEventBusStore } from './MemoryEventBusStore'; +import { DatabaseEventBusStore } from './DatabaseEventBusStore'; +import { EventBusStore } from './types'; +import { EventParams } from '@backstage/plugin-events-node'; + +const DEFAULT_NOTIFY_TIMEOUT_MS = 55_000; // Just below 60s, which is a common HTTP timeout + +/* + +# Event Bus + +This comment describes the event bus that is implemented here in the events +backend, and by default used by the events service. + +## Overview + +The events bus implements a subscription mechanism where subscribers must exist +upfront for events to be stored. It uses a single inbox for all events, with +each subscriber having its own pointer for how far into the inbox it has read. + +In order to avoid busy polling, the API uses a long-polling mechanism where a +request is left hanging until the client should try to read again. + +The event bus is not implemented with any guarantees of events being consumed, +but it does aim to make it unlikely that events are dropped + +## API + +### POST /bus/v1/events + +This endpoint is used to publish new events to the event bus on a specific +topic. It can optionally include a set of subscription IDs for subscribers that +have already been notified of the event. This is to enable an optimization where +we notify subscribers locally if possible, and avoid the need for events to be +relayed through the events bus at all of possible. + +For an event to be published and stored there must already exist a subscriber +that is subscribed to the event's topic, and that hasn't already been notified +of the event. If no such subscriber is found, the event will be discarded. + +### PUT /bus/v1/subscriptions/:subscriptionId + +This endpoint is used to create or update a subscriptions. Subscriptions are +shared across the entire bus and divided by subscription ID. Multiple clients +can be reading events from the same subscription at the same time, but only one +of those clients will receive each event. This enables division of work by using +the same subscriber ID across multiple instances, as well as broadcasting by +ensuring separate subscribers IDs. + +### GET /bus/v1/subscriptions/:subscriptionId/events + +This endpoint is used to read events from a subscription. It will return a batch +of events for the subscribed topics that have not yet been read by the +subscription. If no such events are available, the endpoint will return a 202 +response and then hang end response until an event is available or a timeout is +reached. This allows clients to call this endpoint in a loop but will keep +traffic overhead fairly low. + +## Delivery guarantees + +When reading events from the event bus, clients should always implement a +graceful shutdown where they process any events that are received from the +events endpoint before shutting down. This is also the reason that the events +endpoint does not return any events when responding with a 202 blocking the +response, because there would otherwise be a race condition where the events +might be lost in transit if the client shuts down. By always sending an empty +response and requiring the client to send another request, we ensure that the +client is prepared to halt shutdown until the request had been fully processed. + +## Local processing optimization + +When possible, events will be processed locally before sent to the event bus. +The client will also inform the bus of which subscriptions have already been +notified of the event, so that the bus can completely avoid storing an event if +it has already been fully consumed by all subscribers. + +## Automated cleanup & event window + +Events are deleted once they are outside the guaranteed storage window. By +default the window 10 minutes for all events, and 24 hours for the last 10000 +events. This ensures that the event log doesn't grow indefinitely, while still +allowing subscribers with restarts or outages to catch up to past events, +ensuring that events are likely not lost. + +Subscriptions are also cleaned up if their read pointer falls outside of the +current event window. This ensures that stale subscribers don't accumulate and +cause unnecessary storage of events. + +*/ + +async function createEventBusStore(deps: { + logger: LoggerService; + database: DatabaseService; + scheduler: SchedulerService; + lifecycle: LifecycleService; + httpAuth: HttpAuthService; +}): Promise { + const db = await deps.database.getClient(); + if (db.client.config.client === 'pg') { + deps.logger.info('Database is PostgreSQL, using database store'); + return await DatabaseEventBusStore.create(deps); + } + + deps.logger.info('Database is not PostgreSQL, using memory store'); + return new MemoryEventBusStore(); +} + +/** + * Creates a new event bus router + * @internal + */ +export async function createEventBusRouter(options: { + logger: LoggerService; + database: DatabaseService; + scheduler: SchedulerService; + lifecycle: LifecycleService; + httpAuth: HttpAuthService; + notifyTimeoutMs?: number; // for testing +}): Promise { + const { httpAuth, notifyTimeoutMs = DEFAULT_NOTIFY_TIMEOUT_MS } = options; + const logger = options.logger.child({ type: 'EventBus' }); + + const store = await createEventBusStore(options); + + const apiRouter = await createOpenApiRouter(); + + apiRouter.post('/bus/v1/events', async (req, res) => { + const credentials = await httpAuth.credentials(req, { + allow: ['service'], + }); + const topic = req.body.event.topic; + const notifiedSubscribers = req.body.notifiedSubscribers; + const result = await store.publish({ + event: { + topic, + eventPayload: req.body.event.payload, + } as EventParams, + notifiedSubscribers, + credentials, + }); + if (result) { + logger.debug( + `Published event to '${topic}' with ID '${result.eventId}'`, + { + subject: credentials.principal.subject, + }, + ); + res.status(201).end(); + } else { + if (notifiedSubscribers) { + const notified = `'${notifiedSubscribers.join("', '")}'`; + logger.debug( + `Skipped publishing of event to '${topic}', subscribers have already been notified: ${notified}`, + { subject: credentials.principal.subject }, + ); + } else { + logger.debug( + `Skipped publishing of event to '${topic}', no subscribers present`, + { subject: credentials.principal.subject }, + ); + } + res.status(204).end(); + } + }); + + apiRouter.get( + '/bus/v1/subscriptions/:subscriptionId/events', + async (req, res) => { + const credentials = await httpAuth.credentials(req, { + allow: ['service'], + }); + const id = req.params.subscriptionId; + + const controller = new AbortController(); + req.on('end', () => controller.abort()); + + // By setting up the listener first we make sure we don't miss any events + // that are published while reading. If an event is published we'll receive + // a notification, which we may ignore depending on the outcome of the read + const listener = await store.setupListener(id, { + signal: controller.signal, + }); + + // By timing out requests we make sure they don't stall or that events get stuck. + // For the caller there's no difference between a timeout and a + // notification, either way they should try reading again. + const timeout = setTimeout(() => { + controller.abort(); + }, notifyTimeoutMs); + + try { + const { events } = await store.readSubscription(id); + + logger.debug( + `Reading subscription '${id}' resulted in ${events.length} events`, + { subject: credentials.principal.subject }, + ); + + if (events.length > 0) { + res.json({ + events: events.map(event => ({ + topic: event.topic, + payload: event.eventPayload, + })), + }); + } else { + res.status(202); + res.flushHeaders(); + + try { + const { topic } = await listener.waitForUpdate(); + logger.debug( + `Received notification for subscription '${id}' for topic '${topic}'`, + { subject: credentials.principal.subject }, + ); + } catch (error) { + if (error !== controller.signal.reason) { + logger.error(`Error listening for subscription '${id}'`, error); + } + } finally { + // A small extra delay ensures a more even spread of events across + // consumers in case some consumers are faster than others + await new Promise(resolve => + setTimeout(resolve, 1 + Math.random() * 9), + ); + res.end(); + } + } + } finally { + controller.abort(); + clearTimeout(timeout); + } + }, + ); + + apiRouter.put('/bus/v1/subscriptions/:subscriptionId', async (req, res) => { + const credentials = await httpAuth.credentials(req, { + allow: ['service'], + }); + const id = req.params.subscriptionId; + + await store.upsertSubscription(id, req.body.topics, credentials); + + logger.debug( + `New subscription '${id}' for topics '${req.body.topics.join("', '")}'`, + { subject: credentials.principal.subject }, + ); + + res.status(201).end(); + }); + + return apiRouter; +} diff --git a/packages/cli/src/commands/install/steps/index.ts b/plugins/events-backend/src/service/hub/index.ts similarity index 77% rename from packages/cli/src/commands/install/steps/index.ts rename to plugins/events-backend/src/service/hub/index.ts index 590fba120f..a4f2f263f1 100644 --- a/packages/cli/src/commands/install/steps/index.ts +++ b/plugins/events-backend/src/service/hub/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2021 The Backstage Authors + * Copyright 2024 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. @@ -14,6 +14,4 @@ * limitations under the License. */ -export { appRoute } from './appRoute'; -export { dependencies } from './dependencies'; -export { message } from './message'; +export { createEventBusRouter } from './createEventBusRouter'; diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts new file mode 100644 index 0000000000..316d9e561f --- /dev/null +++ b/plugins/events-backend/src/service/hub/types.ts @@ -0,0 +1,44 @@ +/* + * Copyright 2024 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 { + BackstageCredentials, + BackstageServicePrincipal, +} from '@backstage/backend-plugin-api'; +import { EventParams } from '@backstage/plugin-events-node'; + +export type EventBusStore = { + publish(options: { + event: EventParams; + notifiedSubscribers?: string[]; + credentials: BackstageCredentials; + }): Promise<{ eventId: string } | undefined>; + + upsertSubscription( + subscriptionId: string, + topics: string[], + credentials: BackstageCredentials, + ): Promise; + + readSubscription(subscriptionId: string): Promise<{ events: EventParams[] }>; + + setupListener( + subscriptionId: string, + options: { + signal: AbortSignal; + }, + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }>; +}; diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 87ad15d23f..2485fbb71d 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-events-node +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- a90ce4a: The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.4.0 ### Minor Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 6795c13441..d02945d633 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-node", - "version": "0.4.0", + "version": "0.4.1-next.0", "description": "The plugin-events-node module for @backstage/plugin-events-backend", "backstage": { "role": "node-library", @@ -51,7 +51,11 @@ "test": "backstage-cli package test" }, "dependencies": { - "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/types": "workspace:^", + "cross-fetch": "^4.0.0", + "uri-template": "^2.0.0" }, "devDependencies": { "@backstage/backend-common": "^0.25.0", diff --git a/plugins/events-node/api-report-alpha.md b/plugins/events-node/report-alpha.api.md similarity index 64% rename from plugins/events-node/api-report-alpha.md rename to plugins/events-node/report-alpha.api.md index f61048ac94..d11b170365 100644 --- a/plugins/events-node/api-report-alpha.md +++ b/plugins/events-node/report-alpha.api.md @@ -28,5 +28,14 @@ export interface EventsExtensionPoint { // @alpha (undocumented) export const eventsExtensionPoint: ExtensionPoint; +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:5:1 - (ae-undocumented) Missing documentation for "EventsExtensionPoint". +// src/extensions.d.ts:9:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/extensions.d.ts:13:5 - (ae-undocumented) Missing documentation for "addPublishers". +// src/extensions.d.ts:17:5 - (ae-undocumented) Missing documentation for "addSubscribers". +// src/extensions.d.ts:18:5 - (ae-undocumented) Missing documentation for "addHttpPostIngress". +// src/extensions.d.ts:23:22 - (ae-undocumented) Missing documentation for "eventsExtensionPoint". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-node/api-report.md b/plugins/events-node/report.api.md similarity index 58% rename from plugins/events-node/api-report.md rename to plugins/events-node/report.api.md index d8a2281faa..2c06f50d56 100644 --- a/plugins/events-node/api-report.md +++ b/plugins/events-node/report.api.md @@ -3,6 +3,9 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AuthService } from '@backstage/backend-plugin-api'; +import { DiscoveryService } from '@backstage/backend-plugin-api'; +import { LifecycleService } from '@backstage/backend-plugin-api'; import { LoggerService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; import { ServiceRef } from '@backstage/backend-plugin-api'; @@ -11,7 +14,15 @@ import { ServiceRef } from '@backstage/backend-plugin-api'; export class DefaultEventsService implements EventsService { // (undocumented) static create(options: { logger: LoggerService }): DefaultEventsService; - forPlugin(pluginId: string): EventsService; + forPlugin( + pluginId: string, + options?: { + discovery: DiscoveryService; + logger: LoggerService; + auth: AuthService; + lifecycle: LifecycleService; + }, + ): EventsService; // (undocumented) publish(params: EventParams): Promise; // (undocumented) @@ -128,4 +139,26 @@ export abstract class SubTopicEventRouter extends EventRouter { // (undocumented) protected abstract determineSubTopic(params: EventParams): string | undefined; } + +// Warnings were encountered during analysis: +// +// src/api/DefaultEventsService.d.ts:16:5 - (ae-undocumented) Missing documentation for "create". +// src/api/DefaultEventsService.d.ts:31:5 - (ae-undocumented) Missing documentation for "publish". +// src/api/DefaultEventsService.d.ts:32:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/api/EventParams.d.ts:4:1 - (ae-undocumented) Missing documentation for "EventParams". +// src/api/EventPublisher.d.ts:15:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/api/EventRouter.d.ts:18:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/api/EventRouter.d.ts:19:5 - (ae-undocumented) Missing documentation for "determineDestinationTopic". +// src/api/EventRouter.d.ts:26:5 - (ae-undocumented) Missing documentation for "onEvent". +// src/api/EventsService.d.ts:26:1 - (ae-undocumented) Missing documentation for "EventsServiceSubscribeOptions". +// src/api/EventsService.d.ts:37:1 - (ae-undocumented) Missing documentation for "EventsServiceEventHandler". +// src/api/SubTopicEventRouter.d.ts:18:5 - (ae-undocumented) Missing documentation for "determineSubTopic". +// src/api/SubTopicEventRouter.d.ts:19:5 - (ae-undocumented) Missing documentation for "determineDestinationTopic". +// src/api/http/HttpPostIngressOptions.d.ts:5:1 - (ae-undocumented) Missing documentation for "HttpPostIngressOptions". +// src/api/http/HttpPostIngressOptions.d.ts:6:5 - (ae-undocumented) Missing documentation for "topic". +// src/api/http/HttpPostIngressOptions.d.ts:7:5 - (ae-undocumented) Missing documentation for "validator". +// src/api/http/validation/RequestDetails.d.ts:4:1 - (ae-undocumented) Missing documentation for "RequestDetails". +// src/api/http/validation/RequestRejectionDetails.d.ts:8:5 - (ae-undocumented) Missing documentation for "status". +// src/api/http/validation/RequestRejectionDetails.d.ts:9:5 - (ae-undocumented) Missing documentation for "payload". +// src/service.d.ts:10:22 - (ae-undocumented) Missing documentation for "eventsServiceFactory". ``` diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index bb5c2a0ca8..aa77d6e696 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -14,9 +14,320 @@ * limitations under the License. */ -import { LoggerService } from '@backstage/backend-plugin-api'; +import { + AuthService, + DiscoveryService, + LifecycleService, + LoggerService, +} from '@backstage/backend-plugin-api'; import { EventParams } from './EventParams'; import { EventsService, EventsServiceSubscribeOptions } from './EventsService'; +import { DefaultApiClient } from '../generated'; +import { ResponseError } from '@backstage/errors'; + +const POLL_BACKOFF_START_MS = 1_000; +const POLL_BACKOFF_MAX_MS = 60_000; +const POLL_BACKOFF_FACTOR = 2; + +/** + * Local event bus for subscribers within the same process. + * + * When publishing events we'll keep track of which subscribers we managed to + * reach locally, and forward those subscriber IDs to the events backend if it + * is in use. The events backend will then both avoid forwarding the same events + * to those subscribers again, but also avoid storing the event altogether if + * there are no other subscribers. + * @internal + */ +export class LocalEventBus { + readonly #logger: LoggerService; + + readonly #subscribers = new Map< + string, + Omit[] + >(); + + constructor(logger: LoggerService) { + this.#logger = logger; + } + + async publish( + params: EventParams, + ): Promise<{ notifiedSubscribers: string[] }> { + this.#logger.debug( + `Event received: topic=${params.topic}, metadata=${JSON.stringify( + params.metadata, + )}, payload=${JSON.stringify(params.eventPayload)}`, + ); + + if (!this.#subscribers.has(params.topic)) { + return { notifiedSubscribers: [] }; + } + + const onEventPromises: Promise[] = []; + this.#subscribers.get(params.topic)?.forEach(subscription => { + onEventPromises.push( + (async () => { + try { + await subscription.onEvent(params); + } catch (error) { + this.#logger.warn( + `Subscriber "${subscription.id}" failed to process event for topic "${params.topic}"`, + error, + ); + } + return subscription.id; + })(), + ); + }); + + return { notifiedSubscribers: await Promise.all(onEventPromises) }; + } + + async subscribe(options: EventsServiceSubscribeOptions): Promise { + options.topics.forEach(topic => { + if (!this.#subscribers.has(topic)) { + this.#subscribers.set(topic, []); + } + + this.#subscribers.get(topic)!.push({ + id: options.id, + onEvent: options.onEvent, + }); + }); + } +} + +/** + * Plugin specific events bus that delegates to the local bus, as well as the + * events backend if it is available. + */ +class PluginEventsService implements EventsService { + constructor( + private readonly pluginId: string, + private readonly localBus: LocalEventBus, + private readonly logger: LoggerService, + private client?: DefaultApiClient, + private readonly auth?: AuthService, + ) {} + + async publish(params: EventParams): Promise { + const lock = this.#getShutdownLock(); + try { + const { notifiedSubscribers } = await this.localBus.publish(params); + + if (!this.client) { + return; + } + const token = await this.#getToken(); + if (!token) { + return; + } + const res = await this.client.postEvent( + { + body: { + event: { payload: params.eventPayload, topic: params.topic }, + notifiedSubscribers, + }, + }, + { token }, + ); + + if (!res.ok) { + if (res.status === 404) { + this.logger.warn( + `Event publish request failed with status 404, events backend not found. Future events will not be persisted.`, + ); + delete this.client; + return; + } + throw await ResponseError.fromResponse(res); + } + } finally { + lock.release(); + } + } + + async subscribe(options: EventsServiceSubscribeOptions): Promise { + const subscriptionId = `${this.pluginId}.${options.id}`; + + await this.localBus.subscribe({ + id: subscriptionId, + topics: options.topics, + onEvent: options.onEvent, + }); + + if (!this.client) { + return; + } + const token = await this.#getToken(); + if (!token) { + return; + } + const res = await this.client.putSubscription( + { + path: { subscriptionId }, + body: { topics: options.topics }, + }, + { token }, + ); + if (!res.ok) { + if (res.status === 404) { + this.logger.warn( + `Event subscribe request failed with status 404, events backend not found. Will only receive events that were sent locally on this process.`, + ); + delete this.client; + return; + } + throw await ResponseError.fromResponse(res); + } + + this.#startPolling(subscriptionId, options.topics, options.onEvent); + } + + #startPolling( + subscriptionId: string, + topics: string[], + onEvent: EventsServiceSubscribeOptions['onEvent'], + ) { + let backoffMs = POLL_BACKOFF_START_MS; + const poll = async () => { + if (!this.client) { + return; + } + const lock = this.#getShutdownLock(); + try { + const token = await this.#getToken(); + if (!token) { + return; + } + const res = await this.client.getSubscriptionEvents( + { + path: { subscriptionId }, + }, + { token }, + ); + + if (!res.ok) { + if (res.status === 404) { + this.logger.info( + `Polling event subscription resulted in a 404, recreating subscription`, + ); + const putRes = await this.client.putSubscription( + { + path: { subscriptionId }, + body: { topics }, + }, + { token }, + ); + if (!putRes.ok) { + throw await ResponseError.fromResponse(res); + } + } + throw await ResponseError.fromResponse(res); + } + backoffMs = POLL_BACKOFF_START_MS; + + // 202 means there were no immediately available events, but the + // response will block until either new events are available or the + // request times out. In both cases we should should try to read events + // immediately again + if (res.status === 202) { + lock.release(); + await res.body?.getReader()?.closed; + process.nextTick(poll); + } else if (res.status === 200) { + const data = await res.json(); + if (data) { + for (const event of data.events ?? []) { + try { + await onEvent({ + topic: event.topic, + eventPayload: event.payload, + }); + } catch (error) { + this.logger.warn( + `Subscriber "${subscriptionId}" failed to process event for topic "${event.topic}"`, + error, + ); + } + } + } + process.nextTick(poll); + } else { + this.logger.warn( + `Unexpected response status ${res.status} from events backend for subscription "${subscriptionId}"`, + ); + } + } catch (error) { + this.logger.warn( + `Poll failed for subscription "${subscriptionId}", retrying in ${backoffMs.toFixed( + 0, + )}ms`, + error, + ); + setTimeout(poll, backoffMs); + backoffMs = Math.min( + backoffMs * POLL_BACKOFF_FACTOR, + POLL_BACKOFF_MAX_MS, + ); + } finally { + lock.release(); + } + }; + poll(); + } + + async #getToken() { + if (!this.auth) { + throw new Error('Auth service not available'); + } + + try { + const { token } = await this.auth.getPluginRequestToken({ + onBehalfOf: await this.auth.getOwnServiceCredentials(), + targetPluginId: 'events', + }); + return token; + } catch (error) { + // This is a bit hacky, but handles the case where new auth is used + // without legacy auth fallback, and the events backend is not installed + if (String(error).includes('Unable to generate legacy token')) { + this.logger.warn( + `The events backend is not available and neither is legacy auth. Future events will not be persisted.`, + ); + delete this.client; + return undefined; + } + throw error; + } + } + + async shutdown() { + this.#isShuttingDown = true; + await Promise.all(this.#shutdownLocks); + } + + #isShuttingDown = false; + #shutdownLocks: Promise[] = []; + + // This locking mechanism helps ensure that we are either idle or waiting for + // a blocked events call before shutting down. It increases out changes of + // never dropping any events on shutdown. + #getShutdownLock(): { release(): void } { + if (this.#isShuttingDown) { + throw new Error('Service is shutting down'); + } + + let release: () => void; + this.#shutdownLocks.push( + new Promise(resolve => { + release = resolve; + }), + ); + return { release: release! }; + } +} /** * In-process event broker which will pass the event to all registered subscribers @@ -28,15 +339,16 @@ import { EventsService, EventsServiceSubscribeOptions } from './EventsService'; */ // TODO(pjungermann): add opentelemetry? (see plugins/catalog-backend/src/util/opentelemetry.ts, etc.) export class DefaultEventsService implements EventsService { - private readonly subscribers = new Map< - string, - Omit[] - >(); - - private constructor(private readonly logger: LoggerService) {} + private constructor( + private readonly logger: LoggerService, + private readonly localBus: LocalEventBus, + ) {} static create(options: { logger: LoggerService }): DefaultEventsService { - return new DefaultEventsService(options.logger); + return new DefaultEventsService( + options.logger, + new LocalEventBus(options.logger), + ); } /** @@ -45,60 +357,40 @@ export class DefaultEventsService implements EventsService { * * @param pluginId - The plugin that the `EventService` should be created for. */ - forPlugin(pluginId: string): EventsService { - return { - publish: (params: EventParams): Promise => { - return this.publish(params); - }, - subscribe: (options: EventsServiceSubscribeOptions): Promise => { - return this.subscribe({ - ...options, - id: `${pluginId}.${options.id}`, - }); - }, - }; + forPlugin( + pluginId: string, + options?: { + discovery: DiscoveryService; + logger: LoggerService; + auth: AuthService; + lifecycle: LifecycleService; + }, + ): EventsService { + const client = + options && + new DefaultApiClient({ + discoveryApi: options.discovery, + fetchApi: { fetch }, // use native node fetch + }); + const logger = options?.logger ?? this.logger; + const service = new PluginEventsService( + pluginId, + this.localBus, + logger, + client, + options?.auth, + ); + options?.lifecycle.addShutdownHook(async () => { + await service.shutdown(); + }); + return service; } async publish(params: EventParams): Promise { - this.logger.debug( - `Event received: topic=${params.topic}, metadata=${JSON.stringify( - params.metadata, - )}, payload=${JSON.stringify(params.eventPayload)}`, - ); - - if (!this.subscribers.has(params.topic)) { - return; - } - - const onEventPromises: Promise[] = []; - this.subscribers.get(params.topic)?.forEach(subscription => { - onEventPromises.push( - (async () => { - try { - await subscription.onEvent(params); - } catch (error) { - this.logger.warn( - `Subscriber "${subscription.id}" failed to process event for topic "${params.topic}"`, - error, - ); - } - })(), - ); - }); - - await Promise.all(onEventPromises); + await this.localBus.publish(params); } async subscribe(options: EventsServiceSubscribeOptions): Promise { - options.topics.forEach(topic => { - if (!this.subscribers.has(topic)) { - this.subscribers.set(topic, []); - } - - this.subscribers.get(topic)!.push({ - id: options.id, - onEvent: options.onEvent, - }); - }); + this.localBus.subscribe(options); } } diff --git a/plugins/events-node/src/generated/apis/DefaultApi.client.ts b/plugins/events-node/src/generated/apis/DefaultApi.client.ts new file mode 100644 index 0000000000..4bdeed0c33 --- /dev/null +++ b/plugins/events-node/src/generated/apis/DefaultApi.client.ts @@ -0,0 +1,152 @@ +/* + * Copyright 2024 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { DiscoveryApi } from '../types/discovery'; +import { FetchApi } from '../types/fetch'; +import crossFetch from 'cross-fetch'; +import { pluginId } from '../pluginId'; +import * as parser from 'uri-template'; + +import { GetSubscriptionEvents200Response } from '../models/GetSubscriptionEvents200Response.model'; +import { PostEventRequest } from '../models/PostEventRequest.model'; +import { PutSubscriptionRequest } from '../models/PutSubscriptionRequest.model'; + +/** + * Wraps the Response type to convey a type on the json call. + * + * @public + */ +export type TypedResponse = Omit & { + json: () => Promise; +}; + +/** + * Options you can pass into a request for additional information. + * + * @public + */ +export interface RequestOptions { + token?: string; +} + +/** + * no description + */ +export class DefaultApiClient { + private readonly discoveryApi: DiscoveryApi; + private readonly fetchApi: FetchApi; + + constructor(options: { + discoveryApi: { getBaseUrl(pluginId: string): Promise }; + fetchApi?: { fetch: typeof fetch }; + }) { + this.discoveryApi = options.discoveryApi; + this.fetchApi = options.fetchApi || { fetch: crossFetch }; + } + + /** + * Get new events for the provided subscription + * @param subscriptionId + */ + public async getSubscriptionEvents( + // @ts-ignore + request: { + path: { + subscriptionId: string; + }; + }, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/bus/v1/subscriptions/{subscriptionId}/events`; + + const uri = parser.parse(uriTemplate).expand({ + subscriptionId: request.path.subscriptionId, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Publish a new event + * @param postEventRequest + */ + public async postEvent( + // @ts-ignore + request: { + body: PostEventRequest; + }, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/bus/v1/events`; + + const uri = parser.parse(uriTemplate).expand({}); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request.body), + }); + } + + /** + * Ensures that the subscription exists with the provided configuration + * @param subscriptionId + * @param putSubscriptionRequest + */ + public async putSubscription( + // @ts-ignore + request: { + path: { + subscriptionId: string; + }; + body: PutSubscriptionRequest; + }, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/bus/v1/subscriptions/{subscriptionId}`; + + const uri = parser.parse(uriTemplate).expand({ + subscriptionId: request.path.subscriptionId, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'PUT', + body: JSON.stringify(request.body), + }); + } +} diff --git a/plugins/events-node/src/generated/apis/index.ts b/plugins/events-node/src/generated/apis/index.ts new file mode 100644 index 0000000000..51dcca33fe --- /dev/null +++ b/plugins/events-node/src/generated/apis/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2024 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 './DefaultApi.client'; diff --git a/plugins/events-node/src/generated/index.ts b/plugins/events-node/src/generated/index.ts new file mode 100644 index 0000000000..bb399e97a0 --- /dev/null +++ b/plugins/events-node/src/generated/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2024 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 './apis'; +export * from './models'; diff --git a/plugins/events-node/src/generated/models/ErrorError.model.ts b/plugins/events-node/src/generated/models/ErrorError.model.ts new file mode 100644 index 0000000000..4bcc60b660 --- /dev/null +++ b/plugins/events-node/src/generated/models/ErrorError.model.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2024 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface ErrorError { + name: string; + message: string; +} diff --git a/plugins/events-node/src/generated/models/ErrorRequest.model.ts b/plugins/events-node/src/generated/models/ErrorRequest.model.ts new file mode 100644 index 0000000000..be62627814 --- /dev/null +++ b/plugins/events-node/src/generated/models/ErrorRequest.model.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2024 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface ErrorRequest { + method: string; + url: string; +} diff --git a/plugins/events-node/src/generated/models/ErrorResponse.model.ts b/plugins/events-node/src/generated/models/ErrorResponse.model.ts new file mode 100644 index 0000000000..008f8b7348 --- /dev/null +++ b/plugins/events-node/src/generated/models/ErrorResponse.model.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2024 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface ErrorResponse { + statusCode: number; +} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/DefaultAnalysisOutputs.ts b/plugins/events-node/src/generated/models/Event.model.ts similarity index 58% rename from packages/cli/src/commands/onboard/discovery/analyzers/DefaultAnalysisOutputs.ts rename to plugins/events-node/src/generated/models/Event.model.ts index a370b8f166..a196b42db7 100644 --- a/packages/cli/src/commands/onboard/discovery/analyzers/DefaultAnalysisOutputs.ts +++ b/plugins/events-node/src/generated/models/Event.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -14,16 +14,17 @@ * limitations under the License. */ -import { AnalysisOutput, AnalysisOutputs } from './types'; +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** -export class DefaultAnalysisOutputs implements AnalysisOutputs { - readonly #outputs = new Map(); - - produce(output: AnalysisOutput) { - this.#outputs.set(output.entity.metadata.name, output); - } - - list() { - return Array.from(this.#outputs).map(([_, output]) => output); - } +export interface Event { + /** + * The topic that the event is published on + */ + topic: string; + /** + * The event payload + */ + payload: any | null; } diff --git a/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts b/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts new file mode 100644 index 0000000000..c9fc37f5bb --- /dev/null +++ b/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2024 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { Event } from '../models/Event.model'; + +export interface GetSubscriptionEvents200Response { + events: Array; +} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/types.ts b/plugins/events-node/src/generated/models/ModelError.model.ts similarity index 51% rename from packages/cli/src/commands/onboard/discovery/analyzers/types.ts rename to plugins/events-node/src/generated/models/ModelError.model.ts index 57b6f2152b..88b8e76762 100644 --- a/packages/cli/src/commands/onboard/discovery/analyzers/types.ts +++ b/plugins/events-node/src/generated/models/ModelError.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -14,24 +14,15 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; -import { Repository } from '../providers/types'; +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { ErrorError } from '../models/ErrorError.model'; +import { ErrorRequest } from '../models/ErrorRequest.model'; +import { ErrorResponse } from '../models/ErrorResponse.model'; -export type AnalysisOutput = { - type: 'entity'; - path: string; - entity: Entity; -}; - -export interface AnalysisOutputs { - produce(output: AnalysisOutput): void; - list(): AnalysisOutput[]; -} - -export interface Analyzer { - name(): string; - analyzeRepository(options: { - repository: Repository; - output: AnalysisOutputs; - }): Promise; +export interface ModelError { + error: ErrorError; + request: ErrorRequest; + response: ErrorResponse; } diff --git a/packages/cli/src/commands/onboard/discovery/providers/github/GithubFile.ts b/plugins/events-node/src/generated/models/PostEventRequest.model.ts similarity index 54% rename from packages/cli/src/commands/onboard/discovery/providers/github/GithubFile.ts rename to plugins/events-node/src/generated/models/PostEventRequest.model.ts index 25279b0949..75289ed25b 100644 --- a/packages/cli/src/commands/onboard/discovery/providers/github/GithubFile.ts +++ b/plugins/events-node/src/generated/models/PostEventRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -14,22 +14,15 @@ * limitations under the License. */ -import { RepositoryFile } from '../types'; +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { Event } from '../models/Event.model'; -export class GithubFile implements RepositoryFile { - readonly #path: string; - readonly #content: string; - - constructor(path: string, content: string) { - this.#path = path; - this.#content = content; - } - - get path(): string { - return this.#path; - } - - async text(): Promise { - return this.#content; - } +export interface PostEventRequest { + event: Event; + /** + * The IDs of subscriptions that have already received this event + */ + notifiedSubscribers?: Array; } diff --git a/packages/cli/src/commands/plugin/test.ts b/plugins/events-node/src/generated/models/PutSubscriptionRequest.model.ts similarity index 60% rename from packages/cli/src/commands/plugin/test.ts rename to plugins/events-node/src/generated/models/PutSubscriptionRequest.model.ts index ca076ae6fc..3de35e0f81 100644 --- a/packages/cli/src/commands/plugin/test.ts +++ b/plugins/events-node/src/generated/models/PutSubscriptionRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2024 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. @@ -14,18 +14,13 @@ * limitations under the License. */ -import { OptionValues } from 'commander'; -import { run } from '../../lib/run'; +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** -export default async (opts: OptionValues) => { - const args = ['test']; - - if (opts.watch) { - args.push('--watch'); - } - if (opts.coverage) { - args.push('--coverage'); - } - - await run('web-scripts', args); -}; +export interface PutSubscriptionRequest { + /** + * The topics to subscribe to + */ + topics: Array; +} diff --git a/plugins/events-node/src/generated/models/index.ts b/plugins/events-node/src/generated/models/index.ts new file mode 100644 index 0000000000..5044f65fff --- /dev/null +++ b/plugins/events-node/src/generated/models/index.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2024 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 '../models/ErrorError.model'; +export * from '../models/ErrorRequest.model'; +export * from '../models/ErrorResponse.model'; +export * from '../models/Event.model'; +export * from '../models/GetSubscriptionEvents200Response.model'; +export * from '../models/ModelError.model'; +export * from '../models/PostEventRequest.model'; +export * from '../models/PutSubscriptionRequest.model'; diff --git a/plugins/events-node/src/generated/pluginId.ts b/plugins/events-node/src/generated/pluginId.ts new file mode 100644 index 0000000000..36b5433cc3 --- /dev/null +++ b/plugins/events-node/src/generated/pluginId.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2024 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 const pluginId = 'events'; diff --git a/plugins/events-node/src/generated/types/discovery.ts b/plugins/events-node/src/generated/types/discovery.ts new file mode 100644 index 0000000000..a7f87d3780 --- /dev/null +++ b/plugins/events-node/src/generated/types/discovery.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2023 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. + */ + +/** + * This is a copy of the DiscoveryApi, to avoid importing core-plugin-api. + */ +export type DiscoveryApi = { + getBaseUrl(pluginId: string): Promise; +}; diff --git a/packages/cli/src/commands/versions/lint.ts b/plugins/events-node/src/generated/types/fetch.ts similarity index 74% rename from packages/cli/src/commands/versions/lint.ts rename to plugins/events-node/src/generated/types/fetch.ts index 66b5fc04c4..3de56c028e 100644 --- a/packages/cli/src/commands/versions/lint.ts +++ b/plugins/events-node/src/generated/types/fetch.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2023 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. @@ -14,8 +14,9 @@ * limitations under the License. */ -export default async () => { - throw new Error( - 'This command has been removed, please consider alternatives such as `yarn dedupe` instead.', - ); +/** + * This is a copy of FetchApi, to avoid importing core-plugin-api. + */ +export type FetchApi = { + fetch: typeof fetch; }; diff --git a/plugins/events-node/src/service.ts b/plugins/events-node/src/service.ts index af0e562c80..4f758f44e6 100644 --- a/plugins/events-node/src/service.ts +++ b/plugins/events-node/src/service.ts @@ -38,11 +38,23 @@ export const eventsServiceFactory = createServiceFactory({ deps: { pluginMetadata: coreServices.pluginMetadata, rootLogger: coreServices.rootLogger, + discovery: coreServices.discovery, + logger: coreServices.logger, + lifecycle: coreServices.lifecycle, + auth: coreServices.auth, }, async createRootContext({ rootLogger }) { return DefaultEventsService.create({ logger: rootLogger }); }, - async factory({ pluginMetadata }, eventsService) { - return eventsService.forPlugin(pluginMetadata.getId()); + async factory( + { pluginMetadata, discovery, logger, lifecycle, auth }, + eventsService, + ) { + return eventsService.forPlugin(pluginMetadata.getId(), { + discovery, + logger, + lifecycle, + auth, + }); }, }); diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index bfd56d043c..defe793b6d 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list-backend +## 1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 1.0.31 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 189bb4b192..4bd2ffff09 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.31", + "version": "1.0.32-next.0", "backstage": { "role": "backend-plugin", "pluginId": "todo-list", diff --git a/plugins/example-todo-list-backend/api-report.md b/plugins/example-todo-list-backend/report.api.md similarity index 100% rename from plugins/example-todo-list-backend/api-report.md rename to plugins/example-todo-list-backend/report.api.md diff --git a/plugins/example-todo-list-common/api-report.md b/plugins/example-todo-list-common/report.api.md similarity index 100% rename from plugins/example-todo-list-common/api-report.md rename to plugins/example-todo-list-common/report.api.md diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index ed60f8fbe2..401fb64dc3 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list +## 1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + ## 1.0.31 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index c336d7073a..bcf4ee435e 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.31", + "version": "1.0.32-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "todo-list", diff --git a/plugins/example-todo-list/api-report.md b/plugins/example-todo-list/report.api.md similarity index 100% rename from plugins/example-todo-list/api-report.md rename to plugins/example-todo-list/report.api.md diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md index c12b9dff80..0599b80264 100644 --- a/plugins/home-react/CHANGELOG.md +++ b/plugins/home-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-home-react +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + ## 0.1.17 ### Patch Changes diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index f60cf9a728..db5a59467c 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-home-react", - "version": "0.1.17", + "version": "0.1.18-next.0", "description": "A Backstage plugin that contains react components helps you build a home page", "backstage": { "role": "web-library", diff --git a/plugins/home-react/api-report.md b/plugins/home-react/report.api.md similarity index 69% rename from plugins/home-react/api-report.md rename to plugins/home-react/report.api.md index 268f598a63..802d73605c 100644 --- a/plugins/home-react/api-report.md +++ b/plugins/home-react/report.api.md @@ -74,4 +74,15 @@ export const SettingsModal: (props: { componentName?: string; children: JSX.Element; }) => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/components/SettingsModal.d.ts:3:22 - (ae-undocumented) Missing documentation for "SettingsModal". +// src/extensions.d.ts:6:1 - (ae-undocumented) Missing documentation for "ComponentRenderer". +// src/extensions.d.ts:12:1 - (ae-undocumented) Missing documentation for "ComponentParts". +// src/extensions.d.ts:21:1 - (ae-undocumented) Missing documentation for "RendererProps". +// src/extensions.d.ts:27:1 - (ae-undocumented) Missing documentation for "CardExtensionProps". +// src/extensions.d.ts:33:1 - (ae-undocumented) Missing documentation for "CardLayout". +// src/extensions.d.ts:48:1 - (ae-undocumented) Missing documentation for "CardSettings". +// src/extensions.d.ts:55:1 - (ae-undocumented) Missing documentation for "CardConfig". ``` diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 64fcb5f789..f53548001d 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-home +## 0.7.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-home-react@0.1.18-next.0 + ## 0.7.10 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 668abf68a8..e135e53892 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-home", - "version": "0.7.10", + "version": "0.7.11-next.0", "description": "A Backstage plugin that helps you build a home page", "backstage": { "role": "frontend-plugin", diff --git a/plugins/home/api-report-alpha.md b/plugins/home/report-alpha.api.md similarity index 90% rename from plugins/home/api-report-alpha.md rename to plugins/home/report-alpha.api.md index 429af86a12..e8f8ddf6a1 100644 --- a/plugins/home/api-report-alpha.md +++ b/plugins/home/report-alpha.api.md @@ -78,5 +78,10 @@ export const titleExtensionDataRef: ConfigurableExtensionDataRef< {} >; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:5:22 - (ae-undocumented) Missing documentation for "titleExtensionDataRef". +// src/alpha.d.ts:9:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/home/api-report.md b/plugins/home/report.api.md similarity index 75% rename from plugins/home/api-report.md rename to plugins/home/report.api.md index 023c649ab4..985aed50ca 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/report.api.md @@ -327,4 +327,34 @@ export const WelcomeTitle: ({ export type WelcomeTitleLanguageProps = { language?: string[]; }; + +// Warnings were encountered during analysis: +// +// src/api/VisitsApi.d.ts:106:22 - (ae-undocumented) Missing documentation for "visitsApiRef". +// src/api/VisitsStorageApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "VisitsStorageApiOptions". +// src/api/VisitsStorageApi.d.ts:20:5 - (ae-undocumented) Missing documentation for "create". +// src/api/VisitsWebStorageApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "VisitsWebStorageApiOptions". +// src/api/VisitsWebStorageApi.d.ts:14:5 - (ae-undocumented) Missing documentation for "create". +// src/assets/TemplateBackstageLogo.d.ts:3:22 - (ae-undocumented) Missing documentation for "TemplateBackstageLogo". +// src/assets/TemplateBackstageLogoIcon.d.ts:3:22 - (ae-undocumented) Missing documentation for "TemplateBackstageLogoIcon". +// src/deprecated.d.ts:7:22 - (ae-undocumented) Missing documentation for "createCardExtension". +// src/deprecated.d.ts:12:1 - (ae-undocumented) Missing documentation for "CardExtensionProps". +// src/deprecated.d.ts:17:1 - (ae-undocumented) Missing documentation for "CardLayout". +// src/deprecated.d.ts:22:1 - (ae-undocumented) Missing documentation for "CardSettings". +// src/deprecated.d.ts:27:1 - (ae-undocumented) Missing documentation for "CardConfig". +// src/deprecated.d.ts:32:1 - (ae-undocumented) Missing documentation for "ComponentParts". +// src/deprecated.d.ts:37:1 - (ae-undocumented) Missing documentation for "ComponentRenderer". +// src/deprecated.d.ts:42:1 - (ae-undocumented) Missing documentation for "RendererProps". +// src/deprecated.d.ts:47:22 - (ae-undocumented) Missing documentation for "SettingsModal". +// src/homePageComponents/HeaderWorldClock/HeaderWorldClock.d.ts:3:1 - (ae-undocumented) Missing documentation for "ClockConfig". +// src/homePageComponents/Toolkit/Context.d.ts:3:1 - (ae-undocumented) Missing documentation for "Tool". +// src/homePageComponents/VisitedByType/Content.d.ts:4:1 - (ae-undocumented) Missing documentation for "VisitedByTypeKind". +// src/homePageComponents/VisitedByType/Content.d.ts:6:1 - (ae-undocumented) Missing documentation for "VisitedByTypeProps". +// src/homePageComponents/WelcomeTitle/WelcomeTitle.d.ts:3:1 - (ae-undocumented) Missing documentation for "WelcomeTitleLanguageProps". +// src/plugin.d.ts:5:22 - (ae-undocumented) Missing documentation for "homePlugin". +// src/plugin.d.ts:9:22 - (ae-undocumented) Missing documentation for "HomepageCompositionRoot". +// src/plugin.d.ts:14:22 - (ae-undocumented) Missing documentation for "ComponentAccordion". +// src/plugin.d.ts:24:22 - (ae-undocumented) Missing documentation for "ComponentTabs". +// src/plugin.d.ts:32:22 - (ae-undocumented) Missing documentation for "ComponentTab". +// src/plugin.d.ts:53:22 - (ae-undocumented) Missing documentation for "HomePageRandomJoke". ``` diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index f4c911debc..cdf9c02a99 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-kubernetes-backend +## 0.18.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-kubernetes-node@0.1.20-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-permission-common@0.8.1 + ## 0.18.6 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 68abc77498..98eb59a4f8 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-backend", - "version": "0.18.6", + "version": "0.18.7-next.0", "description": "A Backstage backend plugin that integrates towards Kubernetes", "backstage": { "role": "backend-plugin", diff --git a/plugins/kubernetes-backend/api-report-alpha.md b/plugins/kubernetes-backend/report-alpha.api.md similarity index 100% rename from plugins/kubernetes-backend/api-report-alpha.md rename to plugins/kubernetes-backend/report-alpha.api.md diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/report.api.md similarity index 54% rename from plugins/kubernetes-backend/api-report.md rename to plugins/kubernetes-backend/report.api.md index 2711085b81..e01ada7e1c 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/report.api.md @@ -425,4 +425,118 @@ export type SigningCreds = { secretAccessKey: string | undefined; sessionToken: string | undefined; }; + +// Warnings were encountered during analysis: +// +// src/auth/AksStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "AksStrategy". +// src/auth/AksStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AksStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AksStrategy.d.ts:10:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/AnonymousStrategy.d.ts:6:1 - (ae-undocumented) Missing documentation for "AnonymousStrategy". +// src/auth/AnonymousStrategy.d.ts:7:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AnonymousStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AnonymousStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/AwsIamStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "SigningCreds". +// src/auth/AwsIamStrategy.d.ts:16:1 - (ae-undocumented) Missing documentation for "AwsIamStrategy". +// src/auth/AwsIamStrategy.d.ts:21:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AwsIamStrategy.d.ts:22:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AwsIamStrategy.d.ts:24:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/AzureIdentityStrategy.d.ts:8:1 - (ae-undocumented) Missing documentation for "AzureIdentityStrategy". +// src/auth/AzureIdentityStrategy.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AzureIdentityStrategy.d.ts:15:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AzureIdentityStrategy.d.ts:19:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/DispatchStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "DispatchStrategyOptions". +// src/auth/DispatchStrategy.d.ts:19:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/DispatchStrategy.d.ts:20:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/DispatchStrategy.d.ts:21:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/GoogleServiceAccountStrategy.d.ts:6:1 - (ae-undocumented) Missing documentation for "GoogleServiceAccountStrategy". +// src/auth/GoogleServiceAccountStrategy.d.ts:7:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/GoogleServiceAccountStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/GoogleServiceAccountStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/GoogleStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "GoogleStrategy". +// src/auth/GoogleStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/GoogleStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/GoogleStrategy.d.ts:10:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/OidcStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "OidcStrategy". +// src/auth/OidcStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/OidcStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/OidcStrategy.d.ts:10:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/ServiceAccountStrategy.d.ts:6:1 - (ae-undocumented) Missing documentation for "ServiceAccountStrategy". +// src/auth/ServiceAccountStrategy.d.ts:7:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/ServiceAccountStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/ServiceAccountStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "AuthenticationStrategy". +// src/auth/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "KubernetesCredential". +// src/service/KubernetesBuilder.d.ts:14:1 - (ae-undocumented) Missing documentation for "KubernetesEnvironment". +// src/service/KubernetesBuilder.d.ts:15:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/KubernetesBuilder.d.ts:16:5 - (ae-undocumented) Missing documentation for "config". +// src/service/KubernetesBuilder.d.ts:17:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/KubernetesBuilder.d.ts:18:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/KubernetesBuilder.d.ts:19:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/KubernetesBuilder.d.ts:20:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/KubernetesBuilder.d.ts:21:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/KubernetesBuilder.d.ts:44:1 - (ae-undocumented) Missing documentation for "KubernetesBuilder". +// src/service/KubernetesBuilder.d.ts:45:5 - (ae-undocumented) Missing documentation for "env". +// src/service/KubernetesBuilder.d.ts:53:5 - (ae-undocumented) Missing documentation for "createBuilder". +// src/service/KubernetesBuilder.d.ts:55:5 - (ae-undocumented) Missing documentation for "build". +// src/service/KubernetesBuilder.d.ts:56:5 - (ae-undocumented) Missing documentation for "setClusterSupplier". +// src/service/KubernetesBuilder.d.ts:57:5 - (ae-undocumented) Missing documentation for "setDefaultClusterRefreshInterval". +// src/service/KubernetesBuilder.d.ts:58:5 - (ae-undocumented) Missing documentation for "setObjectsProvider". +// src/service/KubernetesBuilder.d.ts:59:5 - (ae-undocumented) Missing documentation for "setFetcher". +// src/service/KubernetesBuilder.d.ts:60:5 - (ae-undocumented) Missing documentation for "setServiceLocator". +// src/service/KubernetesBuilder.d.ts:61:5 - (ae-undocumented) Missing documentation for "setProxy". +// src/service/KubernetesBuilder.d.ts:62:5 - (ae-undocumented) Missing documentation for "setAuthStrategyMap". +// src/service/KubernetesBuilder.d.ts:65:5 - (ae-undocumented) Missing documentation for "addAuthStrategy". +// src/service/KubernetesBuilder.d.ts:66:5 - (ae-undocumented) Missing documentation for "buildCustomResources". +// src/service/KubernetesBuilder.d.ts:67:5 - (ae-undocumented) Missing documentation for "buildClusterSupplier". +// src/service/KubernetesBuilder.d.ts:68:5 - (ae-undocumented) Missing documentation for "buildObjectsProvider". +// src/service/KubernetesBuilder.d.ts:69:5 - (ae-undocumented) Missing documentation for "buildFetcher". +// src/service/KubernetesBuilder.d.ts:70:5 - (ae-undocumented) Missing documentation for "buildServiceLocator". +// src/service/KubernetesBuilder.d.ts:71:5 - (ae-undocumented) Missing documentation for "buildMultiTenantServiceLocator". +// src/service/KubernetesBuilder.d.ts:72:5 - (ae-undocumented) Missing documentation for "buildSingleTenantServiceLocator". +// src/service/KubernetesBuilder.d.ts:73:5 - (ae-undocumented) Missing documentation for "buildCatalogRelationServiceLocator". +// src/service/KubernetesBuilder.d.ts:74:5 - (ae-undocumented) Missing documentation for "buildHttpServiceLocator". +// src/service/KubernetesBuilder.d.ts:75:5 - (ae-undocumented) Missing documentation for "buildProxy". +// src/service/KubernetesBuilder.d.ts:76:5 - (ae-undocumented) Missing documentation for "buildRouter". +// src/service/KubernetesBuilder.d.ts:77:5 - (ae-undocumented) Missing documentation for "buildAuthStrategyMap". +// src/service/KubernetesBuilder.d.ts:80:5 - (ae-undocumented) Missing documentation for "fetchClusterDetails". +// src/service/KubernetesBuilder.d.ts:83:5 - (ae-undocumented) Missing documentation for "getServiceLocatorMethod". +// src/service/KubernetesBuilder.d.ts:84:5 - (ae-undocumented) Missing documentation for "getFetcher". +// src/service/KubernetesBuilder.d.ts:85:5 - (ae-undocumented) Missing documentation for "getClusterSupplier". +// src/service/KubernetesBuilder.d.ts:86:5 - (ae-undocumented) Missing documentation for "getServiceLocator". +// src/service/KubernetesBuilder.d.ts:87:5 - (ae-undocumented) Missing documentation for "getObjectsProvider". +// src/service/KubernetesBuilder.d.ts:88:5 - (ae-undocumented) Missing documentation for "getObjectTypesToFetch". +// src/service/KubernetesBuilder.d.ts:89:5 - (ae-undocumented) Missing documentation for "getProxy". +// src/service/KubernetesBuilder.d.ts:90:5 - (ae-undocumented) Missing documentation for "getAuthStrategyMap". +// src/service/KubernetesFanOutHandler.d.ts:9:22 - (ae-undocumented) Missing documentation for "DEFAULT_OBJECTS". +// src/service/KubernetesProxy.d.ts:50:5 - (ae-undocumented) Missing documentation for "createRequestHandler". +// src/service/router.d.ts:11:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "clusterSupplier". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "permissions". +// src/types/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "ServiceLocatorMethod". +// src/types/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsProviderOptions". +// src/types/types.d.ts:15:5 - (ae-undocumented) Missing documentation for "logger". +// src/types/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "config". +// src/types/types.d.ts:17:5 - (ae-undocumented) Missing documentation for "fetcher". +// src/types/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "serviceLocator". +// src/types/types.d.ts:19:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:20:5 - (ae-undocumented) Missing documentation for "objectTypesToFetch". +// src/types/types.d.ts:26:1 - (ae-undocumented) Missing documentation for "ObjectsByEntityRequest". +// src/types/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsProvider". +// src/types/types.d.ts:34:1 - (ae-undocumented) Missing documentation for "CustomResourcesByEntity". +// src/types/types.d.ts:39:1 - (ae-undocumented) Missing documentation for "AuthMetadata". +// src/types/types.d.ts:44:1 - (ae-undocumented) Missing documentation for "ClusterDetails". +// src/types/types.d.ts:49:1 - (ae-undocumented) Missing documentation for "KubernetesClustersSupplier". +// src/types/types.d.ts:53:1 - (ae-undocumented) Missing documentation for "KubernetesObjectTypes". +// src/types/types.d.ts:57:1 - (ae-undocumented) Missing documentation for "ObjectToFetch". +// src/types/types.d.ts:61:1 - (ae-undocumented) Missing documentation for "CustomResource". +// src/types/types.d.ts:65:1 - (ae-undocumented) Missing documentation for "ObjectFetchParams". +// src/types/types.d.ts:69:1 - (ae-undocumented) Missing documentation for "FetchResponseWrapper". +// src/types/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "KubernetesFetcher". +// src/types/types.d.ts:77:1 - (ae-undocumented) Missing documentation for "ServiceLocatorRequestContext". +// src/types/types.d.ts:81:1 - (ae-undocumented) Missing documentation for "KubernetesServiceLocator". ``` diff --git a/plugins/kubernetes-cluster/CHANGELOG.md b/plugins/kubernetes-cluster/CHANGELOG.md index 5ee963e040..61ca156c8d 100644 --- a/plugins/kubernetes-cluster/CHANGELOG.md +++ b/plugins/kubernetes-cluster/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes-cluster +## 0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + ## 0.0.15 ### Patch Changes diff --git a/plugins/kubernetes-cluster/package.json b/plugins/kubernetes-cluster/package.json index 654036ea82..9134d428af 100644 --- a/plugins/kubernetes-cluster/package.json +++ b/plugins/kubernetes-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-cluster", - "version": "0.0.15", + "version": "0.0.16-next.0", "description": "A Backstage plugin that shows details of Kubernetes clusters", "backstage": { "role": "frontend-plugin", diff --git a/plugins/kubernetes-cluster/api-report.md b/plugins/kubernetes-cluster/report.api.md similarity index 73% rename from plugins/kubernetes-cluster/api-report.md rename to plugins/kubernetes-cluster/report.api.md index 10d248097a..5e16134c2d 100644 --- a/plugins/kubernetes-cluster/api-report.md +++ b/plugins/kubernetes-cluster/report.api.md @@ -21,4 +21,9 @@ export const isKubernetesClusterAvailable: (entity: Entity) => boolean; // @public (undocumented) export const Router: () => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/Router.d.ts:8:22 - (ae-undocumented) Missing documentation for "isKubernetesClusterAvailable". +// src/Router.d.ts:14:22 - (ae-undocumented) Missing documentation for "Router". ``` diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md deleted file mode 100644 index 81e9ca28e7..0000000000 --- a/plugins/kubernetes-common/api-report.md +++ /dev/null @@ -1,468 +0,0 @@ -## API Report File for "@backstage/plugin-kubernetes-common" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { BasicPermission } from '@backstage/plugin-permission-common'; -import { Entity } from '@backstage/catalog-model'; -import { FetchResponse as FetchResponse_2 } from '@backstage/plugin-kubernetes-common'; -import type { JsonObject } from '@backstage/types'; -import type { JsonValue } from '@backstage/types'; -import { ObjectsByEntityResponse as ObjectsByEntityResponse_2 } from '@backstage/plugin-kubernetes-common'; -import { PodStatus } from '@kubernetes/client-node'; -import { V1ConfigMap } from '@kubernetes/client-node'; -import { V1CronJob } from '@kubernetes/client-node'; -import { V1DaemonSet } from '@kubernetes/client-node'; -import { V1Deployment } from '@kubernetes/client-node'; -import { V1Ingress } from '@kubernetes/client-node'; -import { V1Job } from '@kubernetes/client-node'; -import { V1LimitRange } from '@kubernetes/client-node'; -import { V1Pod } from '@kubernetes/client-node'; -import { V1ReplicaSet } from '@kubernetes/client-node'; -import { V1ResourceQuota } from '@kubernetes/client-node'; -import { V1Service } from '@kubernetes/client-node'; -import { V1StatefulSet } from '@kubernetes/client-node'; -import { V2HorizontalPodAutoscaler } from '@kubernetes/client-node'; - -// @public -export const ANNOTATION_KUBERNETES_API_SERVER = 'kubernetes.io/api-server'; - -// @public -export const ANNOTATION_KUBERNETES_API_SERVER_CA = - 'kubernetes.io/api-server-certificate-authority'; - -// @public -export const ANNOTATION_KUBERNETES_AUTH_PROVIDER = - 'kubernetes.io/auth-provider'; - -// @public -export const ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE = - 'kubernetes.io/aws-assume-role'; - -// @public -export const ANNOTATION_KUBERNETES_AWS_CLUSTER_ID = - 'kubernetes.io/x-k8s-aws-id'; - -// @public -export const ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID = - 'kubernetes.io/aws-external-id'; - -// @public -export const ANNOTATION_KUBERNETES_DASHBOARD_APP = - 'kubernetes.io/dashboard-app'; - -// @public -export const ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS = - 'kubernetes.io/dashboard-parameters'; - -// @public -export const ANNOTATION_KUBERNETES_DASHBOARD_URL = - 'kubernetes.io/dashboard-url'; - -// @public -export const ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER = - 'kubernetes.io/oidc-token-provider'; - -// @public -export const ANNOTATION_KUBERNETES_SKIP_METRICS_LOOKUP = - 'kubernetes.io/skip-metrics-lookup'; - -// @public -export const ANNOTATION_KUBERNETES_SKIP_TLS_VERIFY = - 'kubernetes.io/skip-tls-verify'; - -// @public (undocumented) -export type AuthProviderType = 'google' | 'serviceAccount' | 'aws' | 'azure'; - -// @public (undocumented) -export interface ClientContainerStatus { - // (undocumented) - container: string; - // (undocumented) - cpuUsage: ClientCurrentResourceUsage; - // (undocumented) - memoryUsage: ClientCurrentResourceUsage; -} - -// @public (undocumented) -export interface ClientCurrentResourceUsage { - // (undocumented) - currentUsage: number | string; - // (undocumented) - limitTotal: number | string; - // (undocumented) - requestTotal: number | string; -} - -// @public (undocumented) -export interface ClientPodStatus { - // (undocumented) - containers: ClientContainerStatus[]; - // (undocumented) - cpu: ClientCurrentResourceUsage; - // (undocumented) - memory: ClientCurrentResourceUsage; - // (undocumented) - pod: V1Pod; -} - -// @public (undocumented) -export interface ClusterAttributes { - dashboardApp?: string; - dashboardParameters?: JsonObject; - dashboardUrl?: string; - name: string; - title?: string; -} - -// @public (undocumented) -export interface ClusterObjects { - // (undocumented) - cluster: ClusterAttributes; - // (undocumented) - errors: KubernetesFetchError[]; - // (undocumented) - podMetrics: ClientPodStatus[]; - // (undocumented) - resources: FetchResponse[]; -} - -// @public (undocumented) -export interface ConfigMapFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'configmaps'; -} - -// @public (undocumented) -export interface CronJobsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'cronjobs'; -} - -// @public (undocumented) -export interface CustomObjectsByEntityRequest { - // (undocumented) - auth: KubernetesRequestAuth; - // (undocumented) - customResources: CustomResourceMatcher[]; - // (undocumented) - entity: Entity; -} - -// @public (undocumented) -export interface CustomResourceFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'customresources'; -} - -// @public (undocumented) -export interface CustomResourceMatcher { - // (undocumented) - apiVersion: string; - // (undocumented) - group: string; - // (undocumented) - plural: string; -} - -// @public (undocumented) -export interface DaemonSetsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'daemonsets'; -} - -// @public (undocumented) -export interface DeploymentFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'deployments'; -} - -// @public (undocumented) -export interface DeploymentResources { - // (undocumented) - deployments: V1Deployment[]; - // (undocumented) - horizontalPodAutoscalers: V2HorizontalPodAutoscaler[]; - // (undocumented) - pods: V1Pod[]; - // (undocumented) - replicaSets: V1ReplicaSet[]; -} - -// @public -export interface DetectedError { - // (undocumented) - message: string; - // (undocumented) - occurrenceCount: number; - // (undocumented) - proposedFix?: ProposedFix; - // (undocumented) - severity: ErrorSeverity; - // (undocumented) - sourceRef: ResourceRef; - // (undocumented) - type: string; -} - -// @public -export type DetectedErrorsByCluster = Map; - -// @public -export const detectErrors: ( - objects: ObjectsByEntityResponse_2, -) => DetectedErrorsByCluster; - -// @public (undocumented) -export interface DocsSolution extends ProposedFixBase { - // (undocumented) - docsLink: string; - // (undocumented) - type: 'docs'; -} - -// @public (undocumented) -export interface ErrorMapper { - // (undocumented) - detectErrors: (resource: T) => DetectedError[]; -} - -// @public -export type ErrorSeverity = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; - -// @public (undocumented) -export interface EventsSolution extends ProposedFixBase { - // (undocumented) - podName: string; - // (undocumented) - type: 'events'; -} - -// @public (undocumented) -export type FetchResponse = - | PodFetchResponse - | ServiceFetchResponse - | ConfigMapFetchResponse - | DeploymentFetchResponse - | LimitRangeFetchResponse - | ResourceQuotaFetchResponse - | ReplicaSetsFetchResponse - | HorizontalPodAutoscalersFetchResponse - | JobsFetchResponse - | CronJobsFetchResponse - | IngressesFetchResponse - | CustomResourceFetchResponse - | StatefulSetsFetchResponse - | DaemonSetsFetchResponse - | PodStatusFetchResponse; - -// @public (undocumented) -export interface GroupedResponses extends DeploymentResources { - // (undocumented) - configMaps: V1ConfigMap[]; - // (undocumented) - cronJobs: V1CronJob[]; - // (undocumented) - customResources: any[]; - // (undocumented) - daemonSets: V1DaemonSet[]; - // (undocumented) - ingresses: V1Ingress[]; - // (undocumented) - jobs: V1Job[]; - // (undocumented) - services: V1Service[]; - // (undocumented) - statefulsets: V1StatefulSet[]; -} - -// @public (undocumented) -export const groupResponses: ( - fetchResponse: FetchResponse_2[], -) => GroupedResponses; - -// @public (undocumented) -export interface HorizontalPodAutoscalersFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'horizontalpodautoscalers'; -} - -// @public (undocumented) -export interface IngressesFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'ingresses'; -} - -// @public (undocumented) -export interface JobsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'jobs'; -} - -// @public (undocumented) -export type KubernetesErrorTypes = - | 'BAD_REQUEST' - | 'UNAUTHORIZED_ERROR' - | 'NOT_FOUND' - | 'SYSTEM_ERROR' - | 'UNKNOWN_ERROR'; - -// @public (undocumented) -export type KubernetesFetchError = StatusError | RawFetchError; - -// @public -export const kubernetesPermissions: BasicPermission[]; - -// @public -export const kubernetesProxyPermission: BasicPermission; - -// @public (undocumented) -export type KubernetesRequestAuth = { - [providerKey: string]: JsonValue | undefined; -}; - -// @public (undocumented) -export interface KubernetesRequestBody { - // (undocumented) - auth?: KubernetesRequestAuth; - // (undocumented) - entity: Entity; -} - -// @public (undocumented) -export interface LimitRangeFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'limitranges'; -} - -// @public (undocumented) -export interface LogSolution extends ProposedFixBase { - // (undocumented) - container: string; - // (undocumented) - type: 'logs'; -} - -// @public (undocumented) -export interface ObjectsByEntityResponse { - // (undocumented) - items: ClusterObjects[]; -} - -// @public (undocumented) -export interface PodFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'pods'; -} - -// @public (undocumented) -export interface PodStatusFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'podstatus'; -} - -// @public (undocumented) -export type ProposedFix = LogSolution | DocsSolution | EventsSolution; - -// @public (undocumented) -export interface ProposedFixBase { - // (undocumented) - actions: string[]; - // (undocumented) - errorType: string; - // (undocumented) - rootCauseExplanation: string; -} - -// @public (undocumented) -export interface RawFetchError { - // (undocumented) - errorType: 'FETCH_ERROR'; - // (undocumented) - message: string; -} - -// @public (undocumented) -export interface ReplicaSetsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'replicasets'; -} - -// @public (undocumented) -export interface ResourceQuotaFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'resourcequotas'; -} - -// @public -export interface ResourceRef { - // (undocumented) - apiGroup: string; - // (undocumented) - kind: string; - // (undocumented) - name: string; - // (undocumented) - namespace: string; -} - -// @public (undocumented) -export interface ServiceFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'services'; -} - -// @public (undocumented) -export interface StatefulSetsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'statefulsets'; -} - -// @public (undocumented) -export interface StatusError { - // (undocumented) - errorType: KubernetesErrorTypes; - // (undocumented) - resourcePath?: string; - // (undocumented) - statusCode?: number; -} - -// @public (undocumented) -export interface WorkloadsByEntityRequest { - // (undocumented) - auth: KubernetesRequestAuth; - // (undocumented) - entity: Entity; -} -``` diff --git a/plugins/kubernetes-common/report.api.md b/plugins/kubernetes-common/report.api.md new file mode 100644 index 0000000000..283788cfe5 --- /dev/null +++ b/plugins/kubernetes-common/report.api.md @@ -0,0 +1,604 @@ +## API Report File for "@backstage/plugin-kubernetes-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BasicPermission } from '@backstage/plugin-permission-common'; +import { Entity } from '@backstage/catalog-model'; +import { FetchResponse as FetchResponse_2 } from '@backstage/plugin-kubernetes-common'; +import type { JsonObject } from '@backstage/types'; +import type { JsonValue } from '@backstage/types'; +import { ObjectsByEntityResponse as ObjectsByEntityResponse_2 } from '@backstage/plugin-kubernetes-common'; +import { PodStatus } from '@kubernetes/client-node'; +import { V1ConfigMap } from '@kubernetes/client-node'; +import { V1CronJob } from '@kubernetes/client-node'; +import { V1DaemonSet } from '@kubernetes/client-node'; +import { V1Deployment } from '@kubernetes/client-node'; +import { V1Ingress } from '@kubernetes/client-node'; +import { V1Job } from '@kubernetes/client-node'; +import { V1LimitRange } from '@kubernetes/client-node'; +import { V1Pod } from '@kubernetes/client-node'; +import { V1ReplicaSet } from '@kubernetes/client-node'; +import { V1ResourceQuota } from '@kubernetes/client-node'; +import { V1Service } from '@kubernetes/client-node'; +import { V1StatefulSet } from '@kubernetes/client-node'; +import { V2HorizontalPodAutoscaler } from '@kubernetes/client-node'; + +// @public +export const ANNOTATION_KUBERNETES_API_SERVER = 'kubernetes.io/api-server'; + +// @public +export const ANNOTATION_KUBERNETES_API_SERVER_CA = + 'kubernetes.io/api-server-certificate-authority'; + +// @public +export const ANNOTATION_KUBERNETES_AUTH_PROVIDER = + 'kubernetes.io/auth-provider'; + +// @public +export const ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE = + 'kubernetes.io/aws-assume-role'; + +// @public +export const ANNOTATION_KUBERNETES_AWS_CLUSTER_ID = + 'kubernetes.io/x-k8s-aws-id'; + +// @public +export const ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID = + 'kubernetes.io/aws-external-id'; + +// @public +export const ANNOTATION_KUBERNETES_DASHBOARD_APP = + 'kubernetes.io/dashboard-app'; + +// @public +export const ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS = + 'kubernetes.io/dashboard-parameters'; + +// @public +export const ANNOTATION_KUBERNETES_DASHBOARD_URL = + 'kubernetes.io/dashboard-url'; + +// @public +export const ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER = + 'kubernetes.io/oidc-token-provider'; + +// @public +export const ANNOTATION_KUBERNETES_SKIP_METRICS_LOOKUP = + 'kubernetes.io/skip-metrics-lookup'; + +// @public +export const ANNOTATION_KUBERNETES_SKIP_TLS_VERIFY = + 'kubernetes.io/skip-tls-verify'; + +// @public (undocumented) +export type AuthProviderType = 'google' | 'serviceAccount' | 'aws' | 'azure'; + +// @public (undocumented) +export interface ClientContainerStatus { + // (undocumented) + container: string; + // (undocumented) + cpuUsage: ClientCurrentResourceUsage; + // (undocumented) + memoryUsage: ClientCurrentResourceUsage; +} + +// @public (undocumented) +export interface ClientCurrentResourceUsage { + // (undocumented) + currentUsage: number | string; + // (undocumented) + limitTotal: number | string; + // (undocumented) + requestTotal: number | string; +} + +// @public (undocumented) +export interface ClientPodStatus { + // (undocumented) + containers: ClientContainerStatus[]; + // (undocumented) + cpu: ClientCurrentResourceUsage; + // (undocumented) + memory: ClientCurrentResourceUsage; + // (undocumented) + pod: V1Pod; +} + +// @public (undocumented) +export interface ClusterAttributes { + dashboardApp?: string; + dashboardParameters?: JsonObject; + dashboardUrl?: string; + name: string; + title?: string; +} + +// @public (undocumented) +export interface ClusterObjects { + // (undocumented) + cluster: ClusterAttributes; + // (undocumented) + errors: KubernetesFetchError[]; + // (undocumented) + podMetrics: ClientPodStatus[]; + // (undocumented) + resources: FetchResponse[]; +} + +// @public (undocumented) +export interface ConfigMapFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'configmaps'; +} + +// @public (undocumented) +export interface CronJobsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'cronjobs'; +} + +// @public (undocumented) +export interface CustomObjectsByEntityRequest { + // (undocumented) + auth: KubernetesRequestAuth; + // (undocumented) + customResources: CustomResourceMatcher[]; + // (undocumented) + entity: Entity; +} + +// @public (undocumented) +export interface CustomResourceFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'customresources'; +} + +// @public (undocumented) +export interface CustomResourceMatcher { + // (undocumented) + apiVersion: string; + // (undocumented) + group: string; + // (undocumented) + plural: string; +} + +// @public (undocumented) +export interface DaemonSetsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'daemonsets'; +} + +// @public (undocumented) +export interface DeploymentFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'deployments'; +} + +// @public (undocumented) +export interface DeploymentResources { + // (undocumented) + deployments: V1Deployment[]; + // (undocumented) + horizontalPodAutoscalers: V2HorizontalPodAutoscaler[]; + // (undocumented) + pods: V1Pod[]; + // (undocumented) + replicaSets: V1ReplicaSet[]; +} + +// @public +export interface DetectedError { + // (undocumented) + message: string; + // (undocumented) + occurrenceCount: number; + // (undocumented) + proposedFix?: ProposedFix; + // (undocumented) + severity: ErrorSeverity; + // (undocumented) + sourceRef: ResourceRef; + // (undocumented) + type: string; +} + +// @public +export type DetectedErrorsByCluster = Map; + +// @public +export const detectErrors: ( + objects: ObjectsByEntityResponse_2, +) => DetectedErrorsByCluster; + +// @public (undocumented) +export interface DocsSolution extends ProposedFixBase { + // (undocumented) + docsLink: string; + // (undocumented) + type: 'docs'; +} + +// @public (undocumented) +export interface ErrorMapper { + // (undocumented) + detectErrors: (resource: T) => DetectedError[]; +} + +// @public +export type ErrorSeverity = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; + +// @public (undocumented) +export interface EventsSolution extends ProposedFixBase { + // (undocumented) + podName: string; + // (undocumented) + type: 'events'; +} + +// @public (undocumented) +export type FetchResponse = + | PodFetchResponse + | ServiceFetchResponse + | ConfigMapFetchResponse + | DeploymentFetchResponse + | LimitRangeFetchResponse + | ResourceQuotaFetchResponse + | ReplicaSetsFetchResponse + | HorizontalPodAutoscalersFetchResponse + | JobsFetchResponse + | CronJobsFetchResponse + | IngressesFetchResponse + | CustomResourceFetchResponse + | StatefulSetsFetchResponse + | DaemonSetsFetchResponse + | PodStatusFetchResponse; + +// @public (undocumented) +export interface GroupedResponses extends DeploymentResources { + // (undocumented) + configMaps: V1ConfigMap[]; + // (undocumented) + cronJobs: V1CronJob[]; + // (undocumented) + customResources: any[]; + // (undocumented) + daemonSets: V1DaemonSet[]; + // (undocumented) + ingresses: V1Ingress[]; + // (undocumented) + jobs: V1Job[]; + // (undocumented) + services: V1Service[]; + // (undocumented) + statefulsets: V1StatefulSet[]; +} + +// @public (undocumented) +export const groupResponses: ( + fetchResponse: FetchResponse_2[], +) => GroupedResponses; + +// @public (undocumented) +export interface HorizontalPodAutoscalersFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'horizontalpodautoscalers'; +} + +// @public (undocumented) +export interface IngressesFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'ingresses'; +} + +// @public (undocumented) +export interface JobsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'jobs'; +} + +// @public (undocumented) +export type KubernetesErrorTypes = + | 'BAD_REQUEST' + | 'UNAUTHORIZED_ERROR' + | 'NOT_FOUND' + | 'SYSTEM_ERROR' + | 'UNKNOWN_ERROR'; + +// @public (undocumented) +export type KubernetesFetchError = StatusError | RawFetchError; + +// @public +export const kubernetesPermissions: BasicPermission[]; + +// @public +export const kubernetesProxyPermission: BasicPermission; + +// @public (undocumented) +export type KubernetesRequestAuth = { + [providerKey: string]: JsonValue | undefined; +}; + +// @public (undocumented) +export interface KubernetesRequestBody { + // (undocumented) + auth?: KubernetesRequestAuth; + // (undocumented) + entity: Entity; +} + +// @public (undocumented) +export interface LimitRangeFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'limitranges'; +} + +// @public (undocumented) +export interface LogSolution extends ProposedFixBase { + // (undocumented) + container: string; + // (undocumented) + type: 'logs'; +} + +// @public (undocumented) +export interface ObjectsByEntityResponse { + // (undocumented) + items: ClusterObjects[]; +} + +// @public (undocumented) +export interface PodFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'pods'; +} + +// @public (undocumented) +export interface PodStatusFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'podstatus'; +} + +// @public (undocumented) +export type ProposedFix = LogSolution | DocsSolution | EventsSolution; + +// @public (undocumented) +export interface ProposedFixBase { + // (undocumented) + actions: string[]; + // (undocumented) + errorType: string; + // (undocumented) + rootCauseExplanation: string; +} + +// @public (undocumented) +export interface RawFetchError { + // (undocumented) + errorType: 'FETCH_ERROR'; + // (undocumented) + message: string; +} + +// @public (undocumented) +export interface ReplicaSetsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'replicasets'; +} + +// @public (undocumented) +export interface ResourceQuotaFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'resourcequotas'; +} + +// @public +export interface ResourceRef { + // (undocumented) + apiGroup: string; + // (undocumented) + kind: string; + // (undocumented) + name: string; + // (undocumented) + namespace: string; +} + +// @public (undocumented) +export interface ServiceFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'services'; +} + +// @public (undocumented) +export interface StatefulSetsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'statefulsets'; +} + +// @public (undocumented) +export interface StatusError { + // (undocumented) + errorType: KubernetesErrorTypes; + // (undocumented) + resourcePath?: string; + // (undocumented) + statusCode?: number; +} + +// @public (undocumented) +export interface WorkloadsByEntityRequest { + // (undocumented) + auth: KubernetesRequestAuth; + // (undocumented) + entity: Entity; +} + +// Warnings were encountered during analysis: +// +// src/error-detection/types.d.ts:19:5 - (ae-undocumented) Missing documentation for "name". +// src/error-detection/types.d.ts:20:5 - (ae-undocumented) Missing documentation for "namespace". +// src/error-detection/types.d.ts:21:5 - (ae-undocumented) Missing documentation for "kind". +// src/error-detection/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "apiGroup". +// src/error-detection/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "severity". +// src/error-detection/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "message". +// src/error-detection/types.d.ts:33:5 - (ae-undocumented) Missing documentation for "proposedFix". +// src/error-detection/types.d.ts:34:5 - (ae-undocumented) Missing documentation for "sourceRef". +// src/error-detection/types.d.ts:35:5 - (ae-undocumented) Missing documentation for "occurrenceCount". +// src/error-detection/types.d.ts:38:1 - (ae-undocumented) Missing documentation for "ProposedFix". +// src/error-detection/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "ProposedFixBase". +// src/error-detection/types.d.ts:41:5 - (ae-undocumented) Missing documentation for "errorType". +// src/error-detection/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "rootCauseExplanation". +// src/error-detection/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "actions". +// src/error-detection/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "LogSolution". +// src/error-detection/types.d.ts:47:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:48:5 - (ae-undocumented) Missing documentation for "container". +// src/error-detection/types.d.ts:51:1 - (ae-undocumented) Missing documentation for "DocsSolution". +// src/error-detection/types.d.ts:52:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:53:5 - (ae-undocumented) Missing documentation for "docsLink". +// src/error-detection/types.d.ts:56:1 - (ae-undocumented) Missing documentation for "EventsSolution". +// src/error-detection/types.d.ts:57:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "podName". +// src/error-detection/types.d.ts:61:1 - (ae-undocumented) Missing documentation for "ErrorMapper". +// src/error-detection/types.d.ts:62:5 - (ae-undocumented) Missing documentation for "detectErrors". +// src/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "KubernetesRequestAuth". +// src/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "CustomResourceMatcher". +// src/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "group". +// src/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/types.d.ts:12:5 - (ae-undocumented) Missing documentation for "plural". +// src/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "WorkloadsByEntityRequest". +// src/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "auth". +// src/types.d.ts:17:5 - (ae-undocumented) Missing documentation for "entity". +// src/types.d.ts:20:1 - (ae-undocumented) Missing documentation for "CustomObjectsByEntityRequest". +// src/types.d.ts:21:5 - (ae-undocumented) Missing documentation for "auth". +// src/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "entity". +// src/types.d.ts:26:1 - (ae-undocumented) Missing documentation for "KubernetesRequestBody". +// src/types.d.ts:27:5 - (ae-undocumented) Missing documentation for "auth". +// src/types.d.ts:28:5 - (ae-undocumented) Missing documentation for "entity". +// src/types.d.ts:31:1 - (ae-undocumented) Missing documentation for "ClusterAttributes". +// src/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "ClusterObjects". +// src/types.d.ts:74:5 - (ae-undocumented) Missing documentation for "cluster". +// src/types.d.ts:75:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:76:5 - (ae-undocumented) Missing documentation for "podMetrics". +// src/types.d.ts:77:5 - (ae-undocumented) Missing documentation for "errors". +// src/types.d.ts:80:1 - (ae-undocumented) Missing documentation for "ObjectsByEntityResponse". +// src/types.d.ts:81:5 - (ae-undocumented) Missing documentation for "items". +// src/types.d.ts:84:1 - (ae-undocumented) Missing documentation for "AuthProviderType". +// src/types.d.ts:86:1 - (ae-undocumented) Missing documentation for "FetchResponse". +// src/types.d.ts:88:1 - (ae-undocumented) Missing documentation for "PodFetchResponse". +// src/types.d.ts:89:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:90:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:93:1 - (ae-undocumented) Missing documentation for "ServiceFetchResponse". +// src/types.d.ts:94:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:98:1 - (ae-undocumented) Missing documentation for "ConfigMapFetchResponse". +// src/types.d.ts:99:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:100:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:103:1 - (ae-undocumented) Missing documentation for "DeploymentFetchResponse". +// src/types.d.ts:104:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:105:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:108:1 - (ae-undocumented) Missing documentation for "ReplicaSetsFetchResponse". +// src/types.d.ts:109:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:113:1 - (ae-undocumented) Missing documentation for "LimitRangeFetchResponse". +// src/types.d.ts:114:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:115:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:118:1 - (ae-undocumented) Missing documentation for "ResourceQuotaFetchResponse". +// src/types.d.ts:119:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:120:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:123:1 - (ae-undocumented) Missing documentation for "HorizontalPodAutoscalersFetchResponse". +// src/types.d.ts:124:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:125:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:128:1 - (ae-undocumented) Missing documentation for "JobsFetchResponse". +// src/types.d.ts:129:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:130:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:133:1 - (ae-undocumented) Missing documentation for "CronJobsFetchResponse". +// src/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:135:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:138:1 - (ae-undocumented) Missing documentation for "IngressesFetchResponse". +// src/types.d.ts:139:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:140:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:143:1 - (ae-undocumented) Missing documentation for "CustomResourceFetchResponse". +// src/types.d.ts:144:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:145:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:148:1 - (ae-undocumented) Missing documentation for "StatefulSetsFetchResponse". +// src/types.d.ts:149:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:150:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:153:1 - (ae-undocumented) Missing documentation for "DaemonSetsFetchResponse". +// src/types.d.ts:154:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:155:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:158:1 - (ae-undocumented) Missing documentation for "PodStatusFetchResponse". +// src/types.d.ts:159:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:160:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:163:1 - (ae-undocumented) Missing documentation for "KubernetesFetchError". +// src/types.d.ts:165:1 - (ae-undocumented) Missing documentation for "StatusError". +// src/types.d.ts:166:5 - (ae-undocumented) Missing documentation for "errorType". +// src/types.d.ts:167:5 - (ae-undocumented) Missing documentation for "statusCode". +// src/types.d.ts:168:5 - (ae-undocumented) Missing documentation for "resourcePath". +// src/types.d.ts:171:1 - (ae-undocumented) Missing documentation for "RawFetchError". +// src/types.d.ts:172:5 - (ae-undocumented) Missing documentation for "errorType". +// src/types.d.ts:173:5 - (ae-undocumented) Missing documentation for "message". +// src/types.d.ts:176:1 - (ae-undocumented) Missing documentation for "KubernetesErrorTypes". +// src/types.d.ts:178:1 - (ae-undocumented) Missing documentation for "ClientCurrentResourceUsage". +// src/types.d.ts:179:5 - (ae-undocumented) Missing documentation for "currentUsage". +// src/types.d.ts:180:5 - (ae-undocumented) Missing documentation for "requestTotal". +// src/types.d.ts:181:5 - (ae-undocumented) Missing documentation for "limitTotal". +// src/types.d.ts:184:1 - (ae-undocumented) Missing documentation for "ClientContainerStatus". +// src/types.d.ts:185:5 - (ae-undocumented) Missing documentation for "container". +// src/types.d.ts:186:5 - (ae-undocumented) Missing documentation for "cpuUsage". +// src/types.d.ts:187:5 - (ae-undocumented) Missing documentation for "memoryUsage". +// src/types.d.ts:190:1 - (ae-undocumented) Missing documentation for "ClientPodStatus". +// src/types.d.ts:191:5 - (ae-undocumented) Missing documentation for "pod". +// src/types.d.ts:192:5 - (ae-undocumented) Missing documentation for "cpu". +// src/types.d.ts:193:5 - (ae-undocumented) Missing documentation for "memory". +// src/types.d.ts:194:5 - (ae-undocumented) Missing documentation for "containers". +// src/types.d.ts:197:1 - (ae-undocumented) Missing documentation for "DeploymentResources". +// src/types.d.ts:198:5 - (ae-undocumented) Missing documentation for "pods". +// src/types.d.ts:199:5 - (ae-undocumented) Missing documentation for "replicaSets". +// src/types.d.ts:200:5 - (ae-undocumented) Missing documentation for "deployments". +// src/types.d.ts:201:5 - (ae-undocumented) Missing documentation for "horizontalPodAutoscalers". +// src/types.d.ts:204:1 - (ae-undocumented) Missing documentation for "GroupedResponses". +// src/types.d.ts:205:5 - (ae-undocumented) Missing documentation for "services". +// src/types.d.ts:206:5 - (ae-undocumented) Missing documentation for "configMaps". +// src/types.d.ts:207:5 - (ae-undocumented) Missing documentation for "ingresses". +// src/types.d.ts:208:5 - (ae-undocumented) Missing documentation for "jobs". +// src/types.d.ts:209:5 - (ae-undocumented) Missing documentation for "cronJobs". +// src/types.d.ts:210:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types.d.ts:211:5 - (ae-undocumented) Missing documentation for "statefulsets". +// src/types.d.ts:212:5 - (ae-undocumented) Missing documentation for "daemonSets". +// src/util/response.d.ts:4:22 - (ae-undocumented) Missing documentation for "groupResponses". +``` diff --git a/plugins/kubernetes-node/CHANGELOG.md b/plugins/kubernetes-node/CHANGELOG.md index 0b3cdc8a98..f6c7d44738 100644 --- a/plugins/kubernetes-node/CHANGELOG.md +++ b/plugins/kubernetes-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kubernetes-node +## 0.1.20-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.1.19 ### Patch Changes diff --git a/plugins/kubernetes-node/package.json b/plugins/kubernetes-node/package.json index 01413cf777..57e26a57f0 100644 --- a/plugins/kubernetes-node/package.json +++ b/plugins/kubernetes-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-node", - "version": "0.1.19", + "version": "0.1.20-next.0", "description": "Node.js library for the kubernetes plugin", "backstage": { "role": "node-library", diff --git a/plugins/kubernetes-node/api-report.md b/plugins/kubernetes-node/report.api.md similarity index 60% rename from plugins/kubernetes-node/api-report.md rename to plugins/kubernetes-node/report.api.md index f5b210b424..20c7f76b1f 100644 --- a/plugins/kubernetes-node/api-report.md +++ b/plugins/kubernetes-node/report.api.md @@ -282,4 +282,60 @@ export interface ServiceLocatorRequestContext { // (undocumented) objectTypesToFetch: Set; } + +// Warnings were encountered during analysis: +// +// src/auth/PinnipedHelper.d.ts:7:1 - (ae-undocumented) Missing documentation for "PinnipedClientCerts". +// src/auth/PinnipedHelper.d.ts:16:1 - (ae-undocumented) Missing documentation for "PinnipedParameters". +// src/auth/PinnipedHelper.d.ts:31:1 - (ae-undocumented) Missing documentation for "PinnipedHelper". +// src/auth/PinnipedHelper.d.ts:34:5 - (ae-undocumented) Missing documentation for "tokenCredentialRequest". +// src/extensions.d.ts:8:5 - (ae-undocumented) Missing documentation for "addObjectsProvider". +// src/extensions.d.ts:22:5 - (ae-undocumented) Missing documentation for "addClusterSupplier". +// src/extensions.d.ts:36:5 - (ae-undocumented) Missing documentation for "addAuthStrategy". +// src/extensions.d.ts:50:5 - (ae-undocumented) Missing documentation for "addFetcher". +// src/extensions.d.ts:64:5 - (ae-undocumented) Missing documentation for "addServiceLocator". +// src/types/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsProvider". +// src/types/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "getKubernetesObjectsByEntity". +// src/types/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "getCustomResourcesByEntity". +// src/types/types.d.ts:21:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsByEntity". +// src/types/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "entity". +// src/types/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "auth". +// src/types/types.d.ts:29:1 - (ae-undocumented) Missing documentation for "CustomResourcesByEntity". +// src/types/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:41:1 - (ae-undocumented) Missing documentation for "ClusterDetails". +// src/types/types.d.ts:50:5 - (ae-undocumented) Missing documentation for "url". +// src/types/types.d.ts:51:5 - (ae-undocumented) Missing documentation for "authMetadata". +// src/types/types.d.ts:52:5 - (ae-undocumented) Missing documentation for "skipTLSVerify". +// src/types/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "caData". +// src/types/types.d.ts:59:5 - (ae-undocumented) Missing documentation for "caFile". +// src/types/types.d.ts:131:1 - (ae-undocumented) Missing documentation for "AuthenticationStrategy". +// src/types/types.d.ts:132:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/types/types.d.ts:133:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/types/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/types/types.d.ts:140:1 - (ae-undocumented) Missing documentation for "KubernetesObjectTypes". +// src/types/types.d.ts:145:1 - (ae-undocumented) Missing documentation for "ObjectToFetch". +// src/types/types.d.ts:146:5 - (ae-undocumented) Missing documentation for "objectType". +// src/types/types.d.ts:147:5 - (ae-undocumented) Missing documentation for "group". +// src/types/types.d.ts:148:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/types/types.d.ts:149:5 - (ae-undocumented) Missing documentation for "plural". +// src/types/types.d.ts:155:1 - (ae-undocumented) Missing documentation for "CustomResource". +// src/types/types.d.ts:156:5 - (ae-undocumented) Missing documentation for "objectType". +// src/types/types.d.ts:162:1 - (ae-undocumented) Missing documentation for "ObjectFetchParams". +// src/types/types.d.ts:163:5 - (ae-undocumented) Missing documentation for "serviceId". +// src/types/types.d.ts:164:5 - (ae-undocumented) Missing documentation for "clusterDetails". +// src/types/types.d.ts:165:5 - (ae-undocumented) Missing documentation for "credential". +// src/types/types.d.ts:166:5 - (ae-undocumented) Missing documentation for "objectTypesToFetch". +// src/types/types.d.ts:167:5 - (ae-undocumented) Missing documentation for "labelSelector". +// src/types/types.d.ts:168:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:169:5 - (ae-undocumented) Missing documentation for "namespace". +// src/types/types.d.ts:175:1 - (ae-undocumented) Missing documentation for "FetchResponseWrapper". +// src/types/types.d.ts:176:5 - (ae-undocumented) Missing documentation for "errors". +// src/types/types.d.ts:177:5 - (ae-undocumented) Missing documentation for "responses". +// src/types/types.d.ts:185:5 - (ae-undocumented) Missing documentation for "fetchObjectsForService". +// src/types/types.d.ts:186:5 - (ae-undocumented) Missing documentation for "fetchPodMetricsByNamespaces". +// src/types/types.d.ts:191:1 - (ae-undocumented) Missing documentation for "ServiceLocatorRequestContext". +// src/types/types.d.ts:192:5 - (ae-undocumented) Missing documentation for "objectTypesToFetch". +// src/types/types.d.ts:193:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:194:5 - (ae-undocumented) Missing documentation for "credentials". +// src/types/types.d.ts:201:5 - (ae-undocumented) Missing documentation for "getClustersByEntity". ``` diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md index 58652a9e4b..bd812ce393 100644 --- a/plugins/kubernetes-react/CHANGELOG.md +++ b/plugins/kubernetes-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes-react +## 0.4.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.4.3 ### Patch Changes diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json index eac51e8bdc..68ccce1b88 100644 --- a/plugins/kubernetes-react/package.json +++ b/plugins/kubernetes-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-react", - "version": "0.4.3", + "version": "0.4.4-next.0", "description": "Web library for the kubernetes-react plugin", "backstage": { "role": "web-library", diff --git a/plugins/kubernetes-react/api-report.md b/plugins/kubernetes-react/report.api.md similarity index 51% rename from plugins/kubernetes-react/api-report.md rename to plugins/kubernetes-react/report.api.md index adb75a7d60..9b0080f019 100644 --- a/plugins/kubernetes-react/api-report.md +++ b/plugins/kubernetes-react/report.api.md @@ -865,4 +865,173 @@ export const usePodMetrics: ( clusterName: string, matcher: PodMetricsMatcher, ) => ClientPodStatus | undefined; + +// Warnings were encountered during analysis: +// +// src/api/KubernetesBackendClient.d.ts:6:1 - (ae-undocumented) Missing documentation for "KubernetesBackendClient". +// src/api/KubernetesBackendClient.d.ts:17:5 - (ae-undocumented) Missing documentation for "getCluster". +// src/api/KubernetesBackendClient.d.ts:23:5 - (ae-undocumented) Missing documentation for "getObjectsByEntity". +// src/api/KubernetesBackendClient.d.ts:24:5 - (ae-undocumented) Missing documentation for "getWorkloadsByEntity". +// src/api/KubernetesBackendClient.d.ts:25:5 - (ae-undocumented) Missing documentation for "getCustomObjectsByEntity". +// src/api/KubernetesBackendClient.d.ts:26:5 - (ae-undocumented) Missing documentation for "getClusters". +// src/api/KubernetesBackendClient.d.ts:30:5 - (ae-undocumented) Missing documentation for "proxy". +// src/api/KubernetesClusterLinkFormatter.d.ts:4:1 - (ae-undocumented) Missing documentation for "KubernetesClusterLinkFormatter". +// src/api/KubernetesClusterLinkFormatter.d.ts:11:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/KubernetesProxyClient.d.ts:15:5 - (ae-undocumented) Missing documentation for "getEventsByInvolvedObjectName". +// src/api/KubernetesProxyClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "getPodLogs". +// src/api/formatters/AksClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "AksClusterLinksFormatter". +// src/api/formatters/AksClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/EksClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "EksClusterLinksFormatter". +// src/api/formatters/EksClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/GkeClusterLinksFormatter.d.ts:4:1 - (ae-undocumented) Missing documentation for "GkeClusterLinksFormatter". +// src/api/formatters/GkeClusterLinksFormatter.d.ts:7:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/OpenshiftClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "OpenshiftClusterLinksFormatter". +// src/api/formatters/OpenshiftClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/RancherClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "RancherClusterLinksFormatter". +// src/api/formatters/RancherClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/StandardClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "StandardClusterLinksFormatter". +// src/api/formatters/StandardClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/index.d.ts:11:22 - (ae-undocumented) Missing documentation for "DEFAULT_FORMATTER_NAME". +// src/api/formatters/index.d.ts:13:1 - (ae-undocumented) Missing documentation for "getDefaultFormatters". +// src/api/types.d.ts:5:22 - (ae-undocumented) Missing documentation for "kubernetesApiRef". +// src/api/types.d.ts:7:22 - (ae-undocumented) Missing documentation for "kubernetesProxyApiRef". +// src/api/types.d.ts:9:22 - (ae-undocumented) Missing documentation for "kubernetesClusterLinkFormatterApiRef". +// src/api/types.d.ts:11:1 - (ae-undocumented) Missing documentation for "KubernetesApi". +// src/api/types.d.ts:12:5 - (ae-undocumented) Missing documentation for "getObjectsByEntity". +// src/api/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "getClusters". +// src/api/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "getCluster". +// src/api/types.d.ts:24:5 - (ae-undocumented) Missing documentation for "getWorkloadsByEntity". +// src/api/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "getCustomObjectsByEntity". +// src/api/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "proxy". +// src/api/types.d.ts:33:1 - (ae-undocumented) Missing documentation for "KubernetesProxyApi". +// src/api/types.d.ts:34:5 - (ae-undocumented) Missing documentation for "getPodLogs". +// src/api/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "getEventsByInvolvedObjectName". +// src/api/types.d.ts:52:1 - (ae-undocumented) Missing documentation for "FormatClusterLinkOptions". +// src/api/types.d.ts:60:1 - (ae-undocumented) Missing documentation for "KubernetesClusterLinkFormatterApi". +// src/api/types.d.ts:61:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/components/CronJobsAccordions/CronJobsAccordions.d.ts:7:1 - (ae-undocumented) Missing documentation for "CronJobsAccordionsProps". +// src/components/CronJobsAccordions/CronJobsAccordions.d.ts:15:22 - (ae-undocumented) Missing documentation for "CronJobsAccordions". +// src/components/CustomResources/CustomResources.d.ts:7:1 - (ae-undocumented) Missing documentation for "CustomResourcesProps". +// src/components/CustomResources/CustomResources.d.ts:8:5 - (ae-undocumented) Missing documentation for "children". +// src/components/CustomResources/CustomResources.d.ts:15:22 - (ae-undocumented) Missing documentation for "CustomResources". +// src/components/ErrorPanel/ErrorPanel.d.ts:8:1 - (ae-undocumented) Missing documentation for "ErrorPanelProps". +// src/components/ErrorPanel/ErrorPanel.d.ts:19:22 - (ae-undocumented) Missing documentation for "ErrorPanel". +// src/components/ErrorReporting/ErrorReporting.d.ts:8:1 - (ae-undocumented) Missing documentation for "ErrorReportingProps". +// src/components/ErrorReporting/ErrorReporting.d.ts:17:22 - (ae-undocumented) Missing documentation for "ErrorReporting". +// src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.d.ts:4:22 - (ae-undocumented) Missing documentation for "HorizontalPodAutoscalerDrawer". +// src/components/IngressesAccordions/IngressesAccordions.d.ts:7:1 - (ae-undocumented) Missing documentation for "IngressesAccordionsProps". +// src/components/IngressesAccordions/IngressesAccordions.d.ts:13:22 - (ae-undocumented) Missing documentation for "IngressesAccordions". +// src/components/JobsAccordions/JobsAccordions.d.ts:8:1 - (ae-undocumented) Missing documentation for "JobsAccordionsProps". +// src/components/JobsAccordions/JobsAccordions.d.ts:17:22 - (ae-undocumented) Missing documentation for "JobsAccordions". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:10:5 - (ae-undocumented) Missing documentation for "metadata". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:18:5 - (ae-undocumented) Missing documentation for "open". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:19:5 - (ae-undocumented) Missing documentation for "kubernetesObject". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:20:5 - (ae-undocumented) Missing documentation for "label". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:21:5 - (ae-undocumented) Missing documentation for "drawerContentsHeader". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:22:5 - (ae-undocumented) Missing documentation for "children". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:9:1 - (ae-undocumented) Missing documentation for "LinkErrorPanelProps". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:19:22 - (ae-undocumented) Missing documentation for "LinkErrorPanel". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:25:1 - (ae-undocumented) Missing documentation for "KubernetesDrawerable". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:26:5 - (ae-undocumented) Missing documentation for "metadata". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:32:1 - (ae-undocumented) Missing documentation for "KubernetesStructuredMetadataTableDrawerProps". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:33:5 - (ae-undocumented) Missing documentation for "object". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:34:5 - (ae-undocumented) Missing documentation for "renderObject". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:35:5 - (ae-undocumented) Missing documentation for "buttonVariant". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:36:5 - (ae-undocumented) Missing documentation for "kind". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:37:5 - (ae-undocumented) Missing documentation for "expanded". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:38:5 - (ae-undocumented) Missing documentation for "children". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:44:22 - (ae-undocumented) Missing documentation for "KubernetesStructuredMetadataTableDrawer". +// src/components/KubernetesDrawer/ManifestYaml.d.ts:8:5 - (ae-undocumented) Missing documentation for "object". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:10:5 - (ae-undocumented) Missing documentation for "cluster". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:11:5 - (ae-undocumented) Missing documentation for "containerName". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:12:5 - (ae-undocumented) Missing documentation for "podName". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:13:5 - (ae-undocumented) Missing documentation for "podNamespace". +// src/components/Pods/ErrorList/ErrorList.d.ts:9:5 - (ae-undocumented) Missing documentation for "podAndErrors". +// src/components/Pods/Events/Events.d.ts:9:5 - (ae-undocumented) Missing documentation for "warningEventsOnly". +// src/components/Pods/Events/Events.d.ts:10:5 - (ae-undocumented) Missing documentation for "events". +// src/components/Pods/Events/Events.d.ts:24:5 - (ae-undocumented) Missing documentation for "involvedObjectName". +// src/components/Pods/Events/Events.d.ts:25:5 - (ae-undocumented) Missing documentation for "namespace". +// src/components/Pods/Events/Events.d.ts:26:5 - (ae-undocumented) Missing documentation for "clusterName". +// src/components/Pods/Events/Events.d.ts:27:5 - (ae-undocumented) Missing documentation for "warningEventsOnly". +// src/components/Pods/Events/useEvents.d.ts:7:5 - (ae-undocumented) Missing documentation for "involvedObjectName". +// src/components/Pods/Events/useEvents.d.ts:8:5 - (ae-undocumented) Missing documentation for "namespace". +// src/components/Pods/Events/useEvents.d.ts:9:5 - (ae-undocumented) Missing documentation for "clusterName". +// src/components/Pods/FixDialog/FixDialog.d.ts:10:5 - (ae-undocumented) Missing documentation for "open". +// src/components/Pods/FixDialog/FixDialog.d.ts:11:5 - (ae-undocumented) Missing documentation for "clusterName". +// src/components/Pods/FixDialog/FixDialog.d.ts:12:5 - (ae-undocumented) Missing documentation for "pod". +// src/components/Pods/FixDialog/FixDialog.d.ts:13:5 - (ae-undocumented) Missing documentation for "error". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:11:5 - (ae-undocumented) Missing documentation for "podScope". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:12:5 - (ae-undocumented) Missing documentation for "containerSpec". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:13:5 - (ae-undocumented) Missing documentation for "containerStatus". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:14:5 - (ae-undocumented) Missing documentation for "containerMetrics". +// src/components/Pods/PodDrawer/PendingPodContent.d.ts:9:5 - (ae-undocumented) Missing documentation for "pod". +// src/components/Pods/PodDrawer/PodDrawer.d.ts:9:5 - (ae-undocumented) Missing documentation for "open". +// src/components/Pods/PodDrawer/PodDrawer.d.ts:10:5 - (ae-undocumented) Missing documentation for "podAndErrors". +// src/components/Pods/PodLogs/PodLogs.d.ts:9:5 - (ae-undocumented) Missing documentation for "containerScope". +// src/components/Pods/PodLogs/PodLogs.d.ts:10:5 - (ae-undocumented) Missing documentation for "previous". +// src/components/Pods/PodLogs/PodLogsDialog.d.ts:9:5 - (ae-undocumented) Missing documentation for "containerScope". +// src/components/Pods/PodLogs/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "podName". +// src/components/Pods/PodLogs/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "podNamespace". +// src/components/Pods/PodLogs/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "cluster". +// src/components/Pods/PodLogs/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "containerName". +// src/components/Pods/PodLogs/usePodLogs.d.ts:8:5 - (ae-undocumented) Missing documentation for "containerScope". +// src/components/Pods/PodLogs/usePodLogs.d.ts:9:5 - (ae-undocumented) Missing documentation for "previous". +// src/components/Pods/PodsTable.d.ts:9:22 - (ae-undocumented) Missing documentation for "READY_COLUMNS". +// src/components/Pods/PodsTable.d.ts:15:22 - (ae-undocumented) Missing documentation for "RESOURCE_COLUMNS". +// src/components/Pods/PodsTable.d.ts:21:1 - (ae-undocumented) Missing documentation for "PodColumns". +// src/components/Pods/PodsTable.d.ts:27:1 - (ae-undocumented) Missing documentation for "PodsTablesProps". +// src/components/Pods/PodsTable.d.ts:37:22 - (ae-undocumented) Missing documentation for "PodsTable". +// src/components/Pods/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "cluster". +// src/components/Pods/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "pod". +// src/components/Pods/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "errors". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:8:5 - (ae-undocumented) Missing documentation for "compressed". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:9:5 - (ae-undocumented) Missing documentation for "title". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:10:5 - (ae-undocumented) Missing documentation for "usage". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:11:5 - (ae-undocumented) Missing documentation for "total". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:12:5 - (ae-undocumented) Missing documentation for "totalFormatted". +// src/components/ServicesAccordions/ServicesAccordions.d.ts:7:1 - (ae-undocumented) Missing documentation for "ServicesAccordionsProps". +// src/components/ServicesAccordions/ServicesAccordions.d.ts:13:22 - (ae-undocumented) Missing documentation for "ServicesAccordions". +// src/hooks/Cluster.d.ts:6:22 - (ae-undocumented) Missing documentation for "ClusterContext". +// src/hooks/GroupedResponses.d.ts:8:22 - (ae-undocumented) Missing documentation for "GroupedResponsesContext". +// src/hooks/PodNamesWithErrors.d.ts:5:22 - (ae-undocumented) Missing documentation for "PodNamesWithErrorsContext". +// src/hooks/PodNamesWithMetrics.d.ts:6:22 - (ae-undocumented) Missing documentation for "PodNamesWithMetricsContext". +// src/hooks/useKubernetesObjects.d.ts:7:1 - (ae-undocumented) Missing documentation for "KubernetesObjects". +// src/hooks/useKubernetesObjects.d.ts:8:5 - (ae-undocumented) Missing documentation for "kubernetesObjects". +// src/hooks/useKubernetesObjects.d.ts:9:5 - (ae-undocumented) Missing documentation for "loading". +// src/hooks/useKubernetesObjects.d.ts:10:5 - (ae-undocumented) Missing documentation for "error". +// src/hooks/useKubernetesObjects.d.ts:16:22 - (ae-undocumented) Missing documentation for "useKubernetesObjects". +// src/hooks/useMatchingErrors.d.ts:15:1 - (ae-undocumented) Missing documentation for "ErrorMatcher". +// src/hooks/usePodMetrics.d.ts:13:1 - (ae-undocumented) Missing documentation for "PodMetricsMatcher". +// src/kubernetes-auth-provider/AksKubernetesAuthProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "AksKubernetesAuthProvider". +// src/kubernetes-auth-provider/AksKubernetesAuthProvider.d.ts:8:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/AksKubernetesAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "GoogleKubernetesAuthProvider". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:6:5 - (ae-undocumented) Missing documentation for "authProvider". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:8:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/KubernetesAuthProviders.d.ts:5:1 - (ae-undocumented) Missing documentation for "KubernetesAuthProviders". +// src/kubernetes-auth-provider/KubernetesAuthProviders.d.ts:14:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/KubernetesAuthProviders.d.ts:15:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "OidcKubernetesAuthProvider". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:6:5 - (ae-undocumented) Missing documentation for "providerName". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:7:5 - (ae-undocumented) Missing documentation for "authProvider". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/ServerSideAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/ServerSideAuthProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "KubernetesAuthProvider". +// src/kubernetes-auth-provider/types.d.ts:4:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/types.d.ts:5:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/types.d.ts:10:22 - (ae-undocumented) Missing documentation for "kubernetesAuthProvidersApiRef". +// src/kubernetes-auth-provider/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "KubernetesAuthProvidersApi". +// src/kubernetes-auth-provider/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/types.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/types/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ClusterLinksFormatterOptions". +// src/types/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "dashboardUrl". +// src/types/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "dashboardParameters". +// src/types/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "object". +// src/types/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/types/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "ClusterLinksFormatter". +// src/types/types.d.ts:15:5 - (ae-undocumented) Missing documentation for "formatClusterLink". ``` diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 87d9e99904..3d19fd1cb4 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-kubernetes +## 0.11.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + ## 0.11.14 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index ddcd090bb4..775a8dd82e 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes", - "version": "0.11.14", + "version": "0.11.15-next.0", "description": "A Backstage plugin that integrates towards Kubernetes", "backstage": { "role": "frontend-plugin", diff --git a/plugins/kubernetes/api-report-alpha.md b/plugins/kubernetes/report-alpha.api.md similarity index 97% rename from plugins/kubernetes/api-report-alpha.md rename to plugins/kubernetes/report-alpha.api.md index 9ba748577f..93919acd47 100644 --- a/plugins/kubernetes/api-report-alpha.md +++ b/plugins/kubernetes/report-alpha.api.md @@ -162,5 +162,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha/plugin.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/kubernetes/api-report.md b/plugins/kubernetes/report.api.md similarity index 80% rename from plugins/kubernetes/api-report.md rename to plugins/kubernetes/report.api.md index 64b56cf786..e5038b674a 100644 --- a/plugins/kubernetes/api-report.md +++ b/plugins/kubernetes/report.api.md @@ -47,4 +47,11 @@ export const Router: (props: { }) => React_2.JSX.Element; export * from '@backstage/plugin-kubernetes-react'; + +// Warnings were encountered during analysis: +// +// src/Router.d.ts:3:22 - (ae-undocumented) Missing documentation for "isKubernetesAvailable". +// src/Router.d.ts:4:22 - (ae-undocumented) Missing documentation for "Router". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "kubernetesPlugin". +// src/plugin.d.ts:17:22 - (ae-undocumented) Missing documentation for "EntityKubernetesContent". ``` diff --git a/plugins/notifications-backend-module-email/CHANGELOG.md b/plugins/notifications-backend-module-email/CHANGELOG.md index ca0b80f39f..74d452e9d6 100644 --- a/plugins/notifications-backend-module-email/CHANGELOG.md +++ b/plugins/notifications-backend-module-email/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-notifications-backend-module-email +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.3.0 ### Minor Changes diff --git a/plugins/notifications-backend-module-email/package.json b/plugins/notifications-backend-module-email/package.json index 6e80dc5e0b..af4160ea52 100644 --- a/plugins/notifications-backend-module-email/package.json +++ b/plugins/notifications-backend-module-email/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend-module-email", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The email backend module for the notifications plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/notifications-backend-module-email/api-report.md b/plugins/notifications-backend-module-email/report.api.md similarity index 57% rename from plugins/notifications-backend-module-email/api-report.md rename to plugins/notifications-backend-module-email/report.api.md index be3b58d1fd..2116bd4ef4 100644 --- a/plugins/notifications-backend-module-email/api-report.md +++ b/plugins/notifications-backend-module-email/report.api.md @@ -29,4 +29,15 @@ export interface NotificationTemplateRenderer { // (undocumented) getText?(notification: Notification_2): Promise; } + +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationTemplateRenderer". +// src/extensions.d.ts:6:5 - (ae-undocumented) Missing documentation for "getSubject". +// src/extensions.d.ts:7:5 - (ae-undocumented) Missing documentation for "getText". +// src/extensions.d.ts:8:5 - (ae-undocumented) Missing documentation for "getHtml". +// src/extensions.d.ts:13:1 - (ae-undocumented) Missing documentation for "NotificationsEmailTemplateExtensionPoint". +// src/extensions.d.ts:14:5 - (ae-undocumented) Missing documentation for "setTemplateRenderer". +// src/extensions.d.ts:19:22 - (ae-undocumented) Missing documentation for "notificationsEmailTemplateExtensionPoint". +// src/module.d.ts:4:22 - (ae-undocumented) Missing documentation for "notificationsModuleEmail". ``` diff --git a/plugins/notifications-backend/CHANGELOG.md b/plugins/notifications-backend/CHANGELOG.md index fd814cad01..84b0bc716f 100644 --- a/plugins/notifications-backend/CHANGELOG.md +++ b/plugins/notifications-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-notifications-backend +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.4.0 ### Minor Changes diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json index 434cc01ae6..9c441f237b 100644 --- a/plugins/notifications-backend/package.json +++ b/plugins/notifications-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend", - "version": "0.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin", "pluginId": "notifications", diff --git a/plugins/notifications-backend/api-report.md b/plugins/notifications-backend/report.api.md similarity index 100% rename from plugins/notifications-backend/api-report.md rename to plugins/notifications-backend/report.api.md diff --git a/plugins/notifications-common/api-report.md b/plugins/notifications-common/report.api.md similarity index 64% rename from plugins/notifications-common/api-report.md rename to plugins/notifications-common/report.api.md index 0f59a85849..a02bfb2eaa 100644 --- a/plugins/notifications-common/api-report.md +++ b/plugins/notifications-common/report.api.md @@ -67,4 +67,16 @@ export type NotificationStatus = { unread: number; read: number; }; + +// Warnings were encountered during analysis: +// +// src/filters.d.ts:4:22 - (ae-undocumented) Missing documentation for "getProcessorFiltersFromConfig". +// src/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "NotificationSeverity". +// src/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "NotificationPayload". +// src/types.d.ts:36:1 - (ae-undocumented) Missing documentation for "Notification". +// src/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "NotificationStatus". +// src/types.d.ts:84:1 - (ae-undocumented) Missing documentation for "NewNotificationSignal". +// src/types.d.ts:89:1 - (ae-undocumented) Missing documentation for "NotificationReadSignal". +// src/types.d.ts:94:1 - (ae-undocumented) Missing documentation for "NotificationSignal". +// src/types.d.ts:98:1 - (ae-undocumented) Missing documentation for "NotificationProcessorFilters". ``` diff --git a/plugins/notifications-node/CHANGELOG.md b/plugins/notifications-node/CHANGELOG.md index a0b75a977e..da05f50026 100644 --- a/plugins/notifications-node/CHANGELOG.md +++ b/plugins/notifications-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-notifications-node +## 0.2.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.2.6 ### Patch Changes diff --git a/plugins/notifications-node/package.json b/plugins/notifications-node/package.json index bc762515bf..3c221654bb 100644 --- a/plugins/notifications-node/package.json +++ b/plugins/notifications-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-node", - "version": "0.2.6", + "version": "0.2.7-next.0", "description": "Node.js library for the notifications plugin", "backstage": { "role": "node-library", diff --git a/plugins/notifications-node/api-report.md b/plugins/notifications-node/report.api.md similarity index 64% rename from plugins/notifications-node/api-report.md rename to plugins/notifications-node/report.api.md index 995b98bc21..869bf6c6bb 100644 --- a/plugins/notifications-node/api-report.md +++ b/plugins/notifications-node/report.api.md @@ -87,4 +87,20 @@ export interface NotificationsProcessingExtensionPoint { // @public (undocumented) export const notificationsProcessingExtensionPoint: ExtensionPoint; + +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:73:1 - (ae-undocumented) Missing documentation for "NotificationsProcessingExtensionPoint". +// src/extensions.d.ts:74:5 - (ae-undocumented) Missing documentation for "addProcessor". +// src/extensions.d.ts:79:22 - (ae-undocumented) Missing documentation for "notificationsProcessingExtensionPoint". +// src/extensions.d.ts:84:1 - (ae-undocumented) Missing documentation for "NotificationProcessorFilters". +// src/lib.d.ts:3:22 - (ae-undocumented) Missing documentation for "notificationService". +// src/service/DefaultNotificationService.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationServiceOptions". +// src/service/DefaultNotificationService.d.ts:10:1 - (ae-undocumented) Missing documentation for "NotificationRecipients". +// src/service/DefaultNotificationService.d.ts:26:1 - (ae-undocumented) Missing documentation for "NotificationSendOptions". +// src/service/DefaultNotificationService.d.ts:31:1 - (ae-undocumented) Missing documentation for "DefaultNotificationService". +// src/service/DefaultNotificationService.d.ts:35:5 - (ae-undocumented) Missing documentation for "create". +// src/service/DefaultNotificationService.d.ts:36:5 - (ae-undocumented) Missing documentation for "send". +// src/service/NotificationService.d.ts:3:1 - (ae-undocumented) Missing documentation for "NotificationService". +// src/service/NotificationService.d.ts:4:5 - (ae-undocumented) Missing documentation for "send". ``` diff --git a/plugins/notifications/CHANGELOG.md b/plugins/notifications/CHANGELOG.md index d353b7a51f..5c70937ec8 100644 --- a/plugins/notifications/CHANGELOG.md +++ b/plugins/notifications/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-notifications +## 0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-common@0.0.5 + - @backstage/plugin-signals-react@0.0.6-next.0 + ## 0.3.1 ### Patch Changes diff --git a/plugins/notifications/package.json b/plugins/notifications/package.json index 7026275e97..4307e48756 100644 --- a/plugins/notifications/package.json +++ b/plugins/notifications/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications", - "version": "0.3.1", + "version": "0.3.2-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "notifications", diff --git a/plugins/notifications/api-report.md b/plugins/notifications/report.api.md similarity index 66% rename from plugins/notifications/api-report.md rename to plugins/notifications/report.api.md index 5e06ae2616..ab1fc6d5a1 100644 --- a/plugins/notifications/api-report.md +++ b/plugins/notifications/report.api.md @@ -176,5 +176,29 @@ export function useNotificationsApi( value: T; }; +// Warnings were encountered during analysis: +// +// src/api/NotificationsApi.d.ts:3:22 - (ae-undocumented) Missing documentation for "notificationsApiRef". +// src/api/NotificationsApi.d.ts:5:1 - (ae-undocumented) Missing documentation for "GetNotificationsOptions". +// src/api/NotificationsApi.d.ts:17:1 - (ae-undocumented) Missing documentation for "UpdateNotificationsOptions". +// src/api/NotificationsApi.d.ts:23:1 - (ae-undocumented) Missing documentation for "GetNotificationsResponse". +// src/api/NotificationsApi.d.ts:28:1 - (ae-undocumented) Missing documentation for "NotificationsApi". +// src/api/NotificationsApi.d.ts:29:5 - (ae-undocumented) Missing documentation for "getNotifications". +// src/api/NotificationsApi.d.ts:30:5 - (ae-undocumented) Missing documentation for "getNotification". +// src/api/NotificationsApi.d.ts:31:5 - (ae-undocumented) Missing documentation for "getStatus". +// src/api/NotificationsApi.d.ts:32:5 - (ae-undocumented) Missing documentation for "updateNotifications". +// src/api/NotificationsClient.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationsClient". +// src/api/NotificationsClient.d.ts:12:5 - (ae-undocumented) Missing documentation for "getNotifications". +// src/api/NotificationsClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "getNotification". +// src/api/NotificationsClient.d.ts:14:5 - (ae-undocumented) Missing documentation for "getStatus". +// src/api/NotificationsClient.d.ts:15:5 - (ae-undocumented) Missing documentation for "updateNotifications". +// src/components/NotificationsPage/NotificationsPage.d.ts:3:1 - (ae-undocumented) Missing documentation for "NotificationsPageProps". +// src/components/NotificationsSideBarItem/NotificationsSideBarItem.d.ts:12:22 - (ae-undocumented) Missing documentation for "NotificationsSidebarItem". +// src/components/NotificationsTable/NotificationsTable.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationsTableProps". +// src/components/NotificationsTable/NotificationsTable.d.ts:15:22 - (ae-undocumented) Missing documentation for "NotificationsTable". +// src/hooks/useNotificationsApi.d.ts:3:1 - (ae-undocumented) Missing documentation for "useNotificationsApi". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "notificationsPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "NotificationsPage". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 9f5b468c92..7e718f77b1 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-org-react +## 0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + ## 0.1.28 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 3c62dc95b1..f6d700cce3 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.28", + "version": "0.1.29-next.0", "backstage": { "role": "web-library", "pluginId": "org", diff --git a/plugins/org-react/api-report.md b/plugins/org-react/report.api.md similarity index 77% rename from plugins/org-react/api-report.md rename to plugins/org-react/report.api.md index 5cfe5ca90a..924f1ea7ca 100644 --- a/plugins/org-react/api-report.md +++ b/plugins/org-react/report.api.md @@ -19,5 +19,9 @@ export type GroupListPickerProps = { onChange: (value: GroupEntity | undefined) => void; }; +// Warnings were encountered during analysis: +// +// src/components/GroupListPicker/GroupListPicker.d.ts:15:22 - (ae-undocumented) Missing documentation for "GroupListPicker". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index e89cf71442..cfb24ea351 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-org +## 0.6.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + ## 0.6.29 ### Patch Changes diff --git a/plugins/org/README-alpha.md b/plugins/org/README-alpha.md index 91aaa28167..942192252b 100644 --- a/plugins/org/README-alpha.md +++ b/plugins/org/README-alpha.md @@ -90,7 +90,7 @@ Route binding is also possible through code. For more information, see [this](ht ### Entity Group Profile Card -This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension allows you to view, edit, or update groups metadata, such as team avatar, name, email, parent, and child groups. +This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension allows you to view, edit, or update groups metadata, such as team avatar, name, email, parent, and child groups. | Kind | Namespace | Name | Id | | ------------- | --------- | --------------- | ------------------------------- | @@ -142,7 +142,7 @@ For more information about where to place extension overrides, see the official ### Entity Members List Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that displays the names and emails of group members. By clicking the member's name, you'll be directed to the user's catalog page, and the email opens your default email program. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that displays the names and emails of group members. By clicking the member's name, you'll be directed to the user's catalog page, and the email opens your default email program. | Kind | Namespace | Name | Id | | ------------- | --------- | -------------- | ------------------------------ | @@ -194,7 +194,7 @@ For more information about where to place extension overrides, see the official ### Entity Ownership Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that displays direct or aggregated group or user ownership relationships. Each entity listed in the card links to its respective entity page in the catalog. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that displays direct or aggregated group or user ownership relationships. Each entity listed in the card links to its respective entity page in the catalog. | Kind | Namespace | Name | Id | | ------------- | --------- | ----------- | --------------------------- | @@ -246,7 +246,7 @@ For more information about where to place extension overrides, see the official ### Entity User Profile Card -This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension allows you to view user metadata including avatar, name, email, and team. Clicking on the email link will open your default email program while clicking on the team link will direct you to the team page in the catalog plugin. +This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension allows you to view user metadata including avatar, name, email, and team. Clicking on the email link will open your default email program while clicking on the team link will direct you to the team page in the catalog plugin. | Kind | Namespace | Name | Id | | ------------- | --------- | -------------- | ------------------------------ | diff --git a/plugins/org/package.json b/plugins/org/package.json index 953680a6cc..e35d4bdfa2 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org", - "version": "0.6.29", + "version": "0.6.30-next.0", "description": "A Backstage plugin that helps you create entity pages for your organization", "backstage": { "role": "frontend-plugin", diff --git a/plugins/org/api-report-alpha.md b/plugins/org/report-alpha.api.md similarity index 97% rename from plugins/org/api-report-alpha.md rename to plugins/org/report-alpha.api.md index 1040b61733..14833df450 100644 --- a/plugins/org/api-report-alpha.md +++ b/plugins/org/report-alpha.api.md @@ -161,5 +161,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/org/api-report.md b/plugins/org/report.api.md similarity index 69% rename from plugins/org/api-report.md rename to plugins/org/report.api.md index af03687240..033d363606 100644 --- a/plugins/org/api-report.md +++ b/plugins/org/report.api.md @@ -102,4 +102,19 @@ export const UserProfileCard: (props: { variant?: InfoCardVariants; showLinks?: boolean; }) => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/components/Cards/Group/GroupProfile/GroupProfileCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "GroupProfileCard". +// src/components/Cards/Group/MembersList/MembersListCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "MemberComponentClassKey". +// src/components/Cards/Group/MembersList/MembersListCard.d.ts:6:1 - (ae-undocumented) Missing documentation for "MembersListCardClassKey". +// src/components/Cards/Group/MembersList/MembersListCard.d.ts:8:22 - (ae-undocumented) Missing documentation for "MembersListCard". +// src/components/Cards/OwnershipCard/OwnershipCard.d.ts:5:22 - (ae-undocumented) Missing documentation for "OwnershipCard". +// src/components/Cards/User/UserProfileCard/UserProfileCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "UserProfileCard". +// src/components/Cards/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "EntityRelationAggregation". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "orgPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "EntityGroupProfileCard". +// src/plugin.d.ts:12:22 - (ae-undocumented) Missing documentation for "EntityMembersListCard". +// src/plugin.d.ts:21:22 - (ae-undocumented) Missing documentation for "EntityOwnershipCard". +// src/plugin.d.ts:30:22 - (ae-undocumented) Missing documentation for "EntityUserProfileCard". ``` diff --git a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md index 8eeb7a3928..c34d0f0345 100644 --- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md +++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-backend-module-allow-all-policy +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.2.0 ### Minor Changes diff --git a/plugins/permission-backend-module-policy-allow-all/package.json b/plugins/permission-backend-module-policy-allow-all/package.json index 064fdd250c..0d09c2d027 100644 --- a/plugins/permission-backend-module-policy-allow-all/package.json +++ b/plugins/permission-backend-module-policy-allow-all/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend-module-allow-all-policy", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "Allow all policy backend module for the permission plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/permission-backend-module-policy-allow-all/api-report.md b/plugins/permission-backend-module-policy-allow-all/report.api.md similarity index 100% rename from plugins/permission-backend-module-policy-allow-all/api-report.md rename to plugins/permission-backend-module-policy-allow-all/report.api.md diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 06ccf6fba1..db03bb0bc4 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.50-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + ## 0.5.49 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 2fb7fa06e9..02afa36abf 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.49", + "version": "0.5.50-next.0", "backstage": { "role": "backend-plugin", "pluginId": "permission", diff --git a/plugins/permission-backend/api-report-alpha.md b/plugins/permission-backend/report-alpha.api.md similarity index 100% rename from plugins/permission-backend/api-report-alpha.md rename to plugins/permission-backend/report-alpha.api.md diff --git a/plugins/permission-backend/api-report.md b/plugins/permission-backend/report.api.md similarity index 62% rename from plugins/permission-backend/api-report.md rename to plugins/permission-backend/report.api.md index bd976a8d7b..11d5ca7d62 100644 --- a/plugins/permission-backend/api-report.md +++ b/plugins/permission-backend/report.api.md @@ -35,4 +35,15 @@ export interface RouterOptions { // (undocumented) userInfo?: UserInfoService; } + +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "policy". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "identity". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:19:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:20:5 - (ae-undocumented) Missing documentation for "userInfo". ``` diff --git a/plugins/permission-common/api-report.md b/plugins/permission-common/report.api.md similarity index 97% rename from plugins/permission-common/api-report.md rename to plugins/permission-common/report.api.md index 465c43846f..856b650dba 100644 --- a/plugins/permission-common/api-report.md +++ b/plugins/permission-common/report.api.md @@ -261,4 +261,8 @@ export type ResourcePermission = export function toPermissionEvaluator( permissionAuthorizer: PermissionAuthorizer, ): PermissionEvaluator; + +// Warnings were encountered during analysis: +// +// src/types/permission.d.ts:71:5 - (ae-undocumented) Missing documentation for "authorize". ``` diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 12327470b4..a1daff9267 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-permission-node +## 0.8.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + ## 0.8.3 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 74a1ca062e..b38647f983 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-node", - "version": "0.8.3", + "version": "0.8.4-next.0", "description": "Common permission and authorization utilities for backend plugins", "backstage": { "role": "node-library", diff --git a/plugins/permission-node/api-report-alpha.md b/plugins/permission-node/report-alpha.api.md similarity index 100% rename from plugins/permission-node/api-report-alpha.md rename to plugins/permission-node/report-alpha.api.md diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/report.api.md similarity index 93% rename from plugins/permission-node/api-report.md rename to plugins/permission-node/report.api.md index 0f0885e180..3deb87d141 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/report.api.md @@ -149,7 +149,7 @@ export type CreatePermissionIntegrationRouterResourceOptions< > = { resourceType: TResourceType; permissions?: Array; - rules: PermissionRule>[]; + rules: PermissionRule>[]; getResources?: ( resourceRefs: string[], ) => Promise>; @@ -255,8 +255,8 @@ export type PermissionRule< description: string; resourceType: TResourceType; paramsSchema?: z.ZodSchema; - apply(resource: TResource, params: NoInfer): boolean; - toQuery(params: NoInfer): PermissionCriteria; + apply(resource: TResource, params: NoInfer_2): boolean; + toQuery(params: NoInfer_2): PermissionCriteria; }; // @public @@ -295,4 +295,11 @@ export class ServerPermissionClient implements PermissionsService { }, ): ServerPermissionClient; } + +// Warnings were encountered during analysis: +// +// src/ServerPermissionClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/ServerPermissionClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "authorizeConditional". +// src/ServerPermissionClient.d.ts:21:5 - (ae-undocumented) Missing documentation for "authorize". +// src/policy/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "handle". ``` diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index 2f07d389b0..19d993863b 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-react +## 0.4.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.4.26 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 4891de2d7b..fc60a9fc1f 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.26", + "version": "0.4.27-next.0", "backstage": { "role": "web-library", "pluginId": "permission", diff --git a/plugins/permission-react/api-report.md b/plugins/permission-react/report.api.md similarity index 88% rename from plugins/permission-react/api-report.md rename to plugins/permission-react/report.api.md index 4c51d16b80..d1b5de1d9e 100644 --- a/plugins/permission-react/api-report.md +++ b/plugins/permission-react/report.api.md @@ -100,4 +100,10 @@ export function usePermission( resourceRef: string | undefined; }, ): AsyncPermissionResult; + +// Warnings were encountered during analysis: +// +// src/apis/IdentityPermissionApi.d.ts:14:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/IdentityPermissionApi.d.ts:19:5 - (ae-undocumented) Missing documentation for "authorize". +// src/hooks/usePermission.d.ts:3:1 - (ae-undocumented) Missing documentation for "AsyncPermissionResult". ``` diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 181ef77367..e5cafdaecf 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-proxy-backend +## 0.5.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + ## 0.5.6 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 7dc5701ba6..f8838dec87 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-proxy-backend", - "version": "0.5.6", + "version": "0.5.7-next.0", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", "backstage": { "role": "backend-plugin", diff --git a/plugins/proxy-backend/api-report-alpha.md b/plugins/proxy-backend/report-alpha.api.md similarity index 100% rename from plugins/proxy-backend/api-report-alpha.md rename to plugins/proxy-backend/report-alpha.api.md diff --git a/plugins/proxy-backend/api-report.md b/plugins/proxy-backend/report.api.md similarity index 56% rename from plugins/proxy-backend/api-report.md rename to plugins/proxy-backend/report.api.md index 9e1b5087f1..bf6ac6ae39 100644 --- a/plugins/proxy-backend/api-report.md +++ b/plugins/proxy-backend/report.api.md @@ -24,4 +24,13 @@ export interface RouterOptions { // (undocumented) skipInvalidProxies?: boolean; } + +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "skipInvalidProxies". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "reviveConsumedRequestBodies". ``` diff --git a/plugins/scaffolder-backend-module-azure/CHANGELOG.md b/plugins/scaffolder-backend-module-azure/CHANGELOG.md index 076dc42d93..e52f6fa57b 100644 --- a/plugins/scaffolder-backend-module-azure/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-azure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-azure +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-azure/package.json b/plugins/scaffolder-backend-module-azure/package.json index fba65e02ff..4490a28fe9 100644 --- a/plugins/scaffolder-backend-module-azure/package.json +++ b/plugins/scaffolder-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-azure", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The azure module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-azure/api-report.md b/plugins/scaffolder-backend-module-azure/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-azure/api-report.md rename to plugins/scaffolder-backend-module-azure/report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md index 88dab87778..dc19b0d486 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket-cloud +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json index e120a17eb5..a75dedfdac 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The Bitbucket Cloud module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/api-report.md b/plugins/scaffolder-backend-module-bitbucket-cloud/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-bitbucket-cloud/api-report.md rename to plugins/scaffolder-backend-module-bitbucket-cloud/report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md index 4a75e537b7..7c5811f46f 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket-server +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-bitbucket-server/package.json b/plugins/scaffolder-backend-module-bitbucket-server/package.json index 496d4b1838..0773caee07 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket-server", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The Bitbucket Server module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket-server/api-report.md b/plugins/scaffolder-backend-module-bitbucket-server/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-bitbucket-server/api-report.md rename to plugins/scaffolder-backend-module-bitbucket-server/report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md index df89ac8c99..6aa69d3d2f 100644 --- a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json index ad74d77800..a901ca6b43 100644 --- a/plugins/scaffolder-backend-module-bitbucket/package.json +++ b/plugins/scaffolder-backend-module-bitbucket/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The bitbucket module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket/api-report.md b/plugins/scaffolder-backend-module-bitbucket/report.api.md similarity index 80% rename from plugins/scaffolder-backend-module-bitbucket/api-report.md rename to plugins/scaffolder-backend-module-bitbucket/report.api.md index 952b1665fb..8721760248 100644 --- a/plugins/scaffolder-backend-module-bitbucket/api-report.md +++ b/plugins/scaffolder-backend-module-bitbucket/report.api.md @@ -56,4 +56,11 @@ export const createPublishBitbucketServerAction: typeof bitbucketServer.createPu // @public @deprecated (undocumented) export const createPublishBitbucketServerPullRequestAction: typeof bitbucketServer.createPublishBitbucketServerPullRequestAction; + +// Warnings were encountered during analysis: +// +// src/deprecated.d.ts:8:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". +// src/deprecated.d.ts:13:22 - (ae-undocumented) Missing documentation for "createBitbucketPipelinesRunAction". +// src/deprecated.d.ts:29:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". +// src/deprecated.d.ts:34:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". ``` diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index bc7bab5571..5a13196f53 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 4c537ab275..17a4b22d70 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md b/plugins/scaffolder-backend-module-confluence-to-markdown/report.api.md similarity index 82% rename from plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md rename to plugins/scaffolder-backend-module-confluence-to-markdown/report.api.md index 2dd5e244dd..4d08c12e7d 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/report.api.md @@ -26,4 +26,8 @@ export const createConfluenceToMarkdownAction: (options: { }, JsonObject >; + +// Warnings were encountered during analysis: +// +// src/actions/confluence/confluenceToMarkdown.d.ts:7:22 - (ae-undocumented) Missing documentation for "createConfluenceToMarkdownAction". ``` diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 917898b85f..d17094098b 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + ## 0.3.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 848f9b29dc..d29f2c5816 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-cookiecutter/api-report.md b/plugins/scaffolder-backend-module-cookiecutter/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-cookiecutter/api-report.md rename to plugins/scaffolder-backend-module-cookiecutter/report.api.md diff --git a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md index b8a1f12e37..eb55df680c 100644 --- a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-gcp +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gcp/package.json b/plugins/scaffolder-backend-module-gcp/package.json index 6c444c5f6f..fa14277842 100644 --- a/plugins/scaffolder-backend-module-gcp/package.json +++ b/plugins/scaffolder-backend-module-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gcp", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The GCP Bucket module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gcp/api-report.md b/plugins/scaffolder-backend-module-gcp/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gcp/api-report.md rename to plugins/scaffolder-backend-module-gcp/report.api.md diff --git a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md index 95efcd0a97..ec7c952034 100644 --- a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-gerrit +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gerrit/package.json b/plugins/scaffolder-backend-module-gerrit/package.json index 3416c9bde4..d11693405c 100644 --- a/plugins/scaffolder-backend-module-gerrit/package.json +++ b/plugins/scaffolder-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gerrit", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gerrit module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gerrit/api-report.md b/plugins/scaffolder-backend-module-gerrit/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gerrit/api-report.md rename to plugins/scaffolder-backend-module-gerrit/report.api.md diff --git a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md index ed7401c42e..c6bfad9a7d 100644 --- a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-gitea +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitea/package.json b/plugins/scaffolder-backend-module-gitea/package.json index 45839957f0..f9592cea31 100644 --- a/plugins/scaffolder-backend-module-gitea/package.json +++ b/plugins/scaffolder-backend-module-gitea/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitea", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gitea module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gitea/api-report.md b/plugins/scaffolder-backend-module-gitea/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gitea/api-report.md rename to plugins/scaffolder-backend-module-gitea/report.api.md diff --git a/plugins/scaffolder-backend-module-github/CHANGELOG.md b/plugins/scaffolder-backend-module-github/CHANGELOG.md index 0baf331688..e2c84aa901 100644 --- a/plugins/scaffolder-backend-module-github/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-github/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-scaffolder-backend-module-github +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.5.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json index 52eb430f2d..1fd5adc05e 100644 --- a/plugins/scaffolder-backend-module-github/package.json +++ b/plugins/scaffolder-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-github", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "The github module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-github/api-report.md b/plugins/scaffolder-backend-module-github/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-github/api-report.md rename to plugins/scaffolder-backend-module-github/report.api.md diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index 8d81728911..c806280e50 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- f2f68cf: Updated `gitlab:group:ensureExists` action to instead use oauth client. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.5.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index e5f1364675..6c904c9c22 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.5.0", + "version": "0.5.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend-module-gitlab/api-report.md b/plugins/scaffolder-backend-module-gitlab/report.api.md similarity index 92% rename from plugins/scaffolder-backend-module-gitlab/api-report.md rename to plugins/scaffolder-backend-module-gitlab/report.api.md index 49bda648f6..f00055a876 100644 --- a/plugins/scaffolder-backend-module-gitlab/api-report.md +++ b/plugins/scaffolder-backend-module-gitlab/report.api.md @@ -277,4 +277,13 @@ export enum IssueType { // (undocumented) TEST = 'test_case', } + +// Warnings were encountered during analysis: +// +// src/commonGitlabConfig.d.ts:23:5 - (ae-undocumented) Missing documentation for "ISSUE". +// src/commonGitlabConfig.d.ts:24:5 - (ae-undocumented) Missing documentation for "INCIDENT". +// src/commonGitlabConfig.d.ts:25:5 - (ae-undocumented) Missing documentation for "TEST". +// src/commonGitlabConfig.d.ts:26:5 - (ae-undocumented) Missing documentation for "TASK". +// src/commonGitlabConfig.d.ts:34:5 - (ae-undocumented) Missing documentation for "CLOSE". +// src/commonGitlabConfig.d.ts:35:5 - (ae-undocumented) Missing documentation for "REOPEN". ``` diff --git a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md index 511daca72d..321e730e00 100644 --- a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-notifications +## 0.1.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.1.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-notifications/package.json b/plugins/scaffolder-backend-module-notifications/package.json index 3adcff6701..fcc270c08d 100644 --- a/plugins/scaffolder-backend-module-notifications/package.json +++ b/plugins/scaffolder-backend-module-notifications/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-notifications", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The notifications backend module for the scaffolder plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-notifications/api-report.md b/plugins/scaffolder-backend-module-notifications/report.api.md similarity index 86% rename from plugins/scaffolder-backend-module-notifications/api-report.md rename to plugins/scaffolder-backend-module-notifications/report.api.md index 091782449f..7e283573b0 100644 --- a/plugins/scaffolder-backend-module-notifications/api-report.md +++ b/plugins/scaffolder-backend-module-notifications/report.api.md @@ -29,4 +29,8 @@ export function createSendNotificationAction(options: { // @public const scaffolderModuleNotifications: BackendFeature; export default scaffolderModuleNotifications; + +// Warnings were encountered during analysis: +// +// src/actions/sendNotification.d.ts:6:1 - (ae-undocumented) Missing documentation for "createSendNotificationAction". ``` diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 39bdcd9fcd..5cb11291bc 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + ## 0.5.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 65879c4407..972214ddaf 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "A module for the scaffolder backend that lets you template projects using Rails", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-rails/api-report.md b/plugins/scaffolder-backend-module-rails/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-rails/api-report.md rename to plugins/scaffolder-backend-module-rails/report.api.md diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index 0cc13a7dae..67b8e75c31 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index efbe35b51a..85c01039ea 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.2.0", + "version": "0.2.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend-module-sentry/api-report.md b/plugins/scaffolder-backend-module-sentry/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-sentry/api-report.md rename to plugins/scaffolder-backend-module-sentry/report.api.md diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 29b75e4bb9..59fe0c8ea2 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/types@1.1.1 + ## 0.4.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 254a472243..2b9a787dee 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.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend-module-yeoman/api-report.md b/plugins/scaffolder-backend-module-yeoman/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-yeoman/api-report.md rename to plugins/scaffolder-backend-module-yeoman/report.api.md diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index d75bdaa0f7..ddf1bb1a8e 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/plugin-scaffolder-backend +## 1.26.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 734c2d4: Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage: + + ```yaml + - id: fetch-file + name: Fetch File + action: fetch:template:file + input: + url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml + targetPath: './target/catalog-info.yaml' + values: + component_id: My Component + owner: Test + ``` + +- 094eaa3: Remove references to in-repo backend-common +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 1.25.0 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 61e08340d9..cc748e4e5b 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend", - "version": "1.25.0", + "version": "1.26.0-next.0", "description": "The Backstage backend plugin that helps you create new things", "backstage": { "role": "backend-plugin", diff --git a/plugins/scaffolder-backend/api-report-alpha.md b/plugins/scaffolder-backend/report-alpha.api.md similarity index 93% rename from plugins/scaffolder-backend/api-report-alpha.md rename to plugins/scaffolder-backend/report-alpha.api.md index db62c6caf7..d53ce7a4e4 100644 --- a/plugins/scaffolder-backend/api-report-alpha.md +++ b/plugins/scaffolder-backend/report-alpha.api.md @@ -93,5 +93,9 @@ export const scaffolderTemplateConditions: Conditions<{ >; }>; +// Warnings were encountered during analysis: +// +// src/service/conditionExports.d.ts:48:22 - (ae-undocumented) Missing documentation for "createScaffolderActionConditionalDecision". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/report.api.md similarity index 65% rename from plugins/scaffolder-backend/api-report.md rename to plugins/scaffolder-backend/report.api.md index 4b7ce13794..9ea60fcfdd 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/report.api.md @@ -202,6 +202,26 @@ export function createFetchTemplateAction(options: { JsonObject >; +// @public +export function createFetchTemplateFileAction(options: { + reader: UrlReaderService; + integrations: ScmIntegrations; + additionalTemplateFilters?: Record; + additionalTemplateGlobals?: Record; +}): TemplateAction_2< + { + url: string; + targetPath: string; + values: any; + cookiecutterCompat?: boolean | undefined; + replace?: boolean | undefined; + trimBlocks?: boolean | undefined; + lstripBlocks?: boolean | undefined; + token?: string | undefined; + }, + JsonObject +>; + // @public export const createFilesystemDeleteAction: () => TemplateAction_2< { @@ -378,7 +398,6 @@ export interface CurrentClaimedTask { spec: TaskSpec; state?: JsonObject; taskId: string; - // (undocumented) workspace?: Promise; } @@ -468,6 +487,8 @@ export class DatabaseTaskStore implements TaskStore { targetPath: string; }): Promise; // (undocumented) + retryTask?(options: { taskId: string }): Promise; + // (undocumented) saveTaskState(options: { taskId: string; state?: JsonObject }): Promise; // (undocumented) serializeWorkspace(options: { path: string; taskId: string }): Promise; @@ -720,6 +741,8 @@ export interface TaskStore { targetPath: string; }): Promise; // (undocumented) + retryTask?(options: { taskId: string }): Promise; + // (undocumented) saveTaskState?(options: { taskId: string; state?: JsonObject; @@ -756,6 +779,7 @@ export type TaskStoreEmitOptions = { // @public export type TaskStoreListEventsOptions = { + isTaskRecoverable?: boolean; taskId: string; after?: number | undefined; }; @@ -815,4 +839,117 @@ export type TemplatePermissionRuleInput< typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, TParams >; + +// Warnings were encountered during analysis: +// +// src/deprecated.d.ts:8:1 - (ae-undocumented) Missing documentation for "ActionContext". +// src/deprecated.d.ts:13:22 - (ae-undocumented) Missing documentation for "createTemplateAction". +// src/deprecated.d.ts:18:1 - (ae-undocumented) Missing documentation for "TaskSecrets". +// src/deprecated.d.ts:23:1 - (ae-undocumented) Missing documentation for "TemplateAction". +// src/lib/templating/SecureTemplater.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateFilter". +// src/lib/templating/SecureTemplater.d.ts:11:1 - (ae-undocumented) Missing documentation for "TemplateGlobal". +// src/scaffolder/actions/TemplateActionRegistry.d.ts:8:5 - (ae-undocumented) Missing documentation for "register". +// src/scaffolder/actions/TemplateActionRegistry.d.ts:9:5 - (ae-undocumented) Missing documentation for "get". +// src/scaffolder/actions/TemplateActionRegistry.d.ts:10:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/actions/builtin/createBuiltinActions.d.ts:36:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". +// src/scaffolder/actions/deprecated.d.ts:12:22 - (ae-undocumented) Missing documentation for "createGithubActionsDispatchAction". +// src/scaffolder/actions/deprecated.d.ts:17:22 - (ae-undocumented) Missing documentation for "createGithubDeployKeyAction". +// src/scaffolder/actions/deprecated.d.ts:22:22 - (ae-undocumented) Missing documentation for "createGithubEnvironmentAction". +// src/scaffolder/actions/deprecated.d.ts:27:22 - (ae-undocumented) Missing documentation for "createGithubIssuesLabelAction". +// src/scaffolder/actions/deprecated.d.ts:32:1 - (ae-undocumented) Missing documentation for "CreateGithubPullRequestActionOptions". +// src/scaffolder/actions/deprecated.d.ts:37:22 - (ae-undocumented) Missing documentation for "createGithubRepoCreateAction". +// src/scaffolder/actions/deprecated.d.ts:42:22 - (ae-undocumented) Missing documentation for "createGithubRepoPushAction". +// src/scaffolder/actions/deprecated.d.ts:47:22 - (ae-undocumented) Missing documentation for "createGithubWebhookAction". +// src/scaffolder/actions/deprecated.d.ts:52:22 - (ae-undocumented) Missing documentation for "createPublishGithubAction". +// src/scaffolder/actions/deprecated.d.ts:57:22 - (ae-undocumented) Missing documentation for "createPublishGithubPullRequestAction". +// src/scaffolder/actions/deprecated.d.ts:79:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketAction". +// src/scaffolder/actions/deprecated.d.ts:84:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". +// src/scaffolder/actions/deprecated.d.ts:89:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". +// src/scaffolder/actions/deprecated.d.ts:94:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". +// src/scaffolder/actions/deprecated.d.ts:99:22 - (ae-undocumented) Missing documentation for "createPublishAzureAction". +// src/scaffolder/actions/deprecated.d.ts:104:22 - (ae-undocumented) Missing documentation for "createPublishGerritAction". +// src/scaffolder/actions/deprecated.d.ts:109:22 - (ae-undocumented) Missing documentation for "createPublishGerritReviewAction". +// src/scaffolder/actions/deprecated.d.ts:114:22 - (ae-undocumented) Missing documentation for "createPublishGitlabAction". +// src/scaffolder/actions/deprecated.d.ts:119:22 - (ae-undocumented) Missing documentation for "createPublishGitlabMergeRequestAction". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:41:5 - (ae-undocumented) Missing documentation for "create". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:48:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:67:5 - (ae-undocumented) Missing documentation for "getTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:68:5 - (ae-undocumented) Missing documentation for "createTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:69:5 - (ae-undocumented) Missing documentation for "claimTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:70:5 - (ae-undocumented) Missing documentation for "heartbeatTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:71:5 - (ae-undocumented) Missing documentation for "listStaleTasks". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:79:5 - (ae-undocumented) Missing documentation for "completeTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:84:5 - (ae-undocumented) Missing documentation for "emitLogEvent". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:87:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:92:5 - (ae-undocumented) Missing documentation for "saveTaskState". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:96:5 - (ae-undocumented) Missing documentation for "listEvents". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:99:5 - (ae-undocumented) Missing documentation for "shutdownTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:100:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:104:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:107:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:111:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:114:5 - (ae-undocumented) Missing documentation for "retryTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:117:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:24:5 - (ae-undocumented) Missing documentation for "create". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:26:5 - (ae-undocumented) Missing documentation for "spec". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:27:5 - (ae-undocumented) Missing documentation for "cancelSignal". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:28:5 - (ae-undocumented) Missing documentation for "secrets". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:29:5 - (ae-undocumented) Missing documentation for "createdBy". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:30:5 - (ae-undocumented) Missing documentation for "getWorkspaceName". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:31:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:35:5 - (ae-undocumented) Missing documentation for "done". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:36:5 - (ae-undocumented) Missing documentation for "emitLog". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:37:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:40:5 - (ae-undocumented) Missing documentation for "updateCheckpoint". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:49:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:52:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:53:5 - (ae-undocumented) Missing documentation for "complete". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:55:5 - (ae-undocumented) Missing documentation for "getInitiatorCredentials". +// src/scaffolder/tasks/TaskWorker.d.ts:60:5 - (ae-undocumented) Missing documentation for "create". +// src/scaffolder/tasks/TaskWorker.d.ts:61:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/TaskWorker.d.ts:62:5 - (ae-undocumented) Missing documentation for "start". +// src/scaffolder/tasks/TaskWorker.d.ts:63:5 - (ae-undocumented) Missing documentation for "stop". +// src/scaffolder/tasks/TaskWorker.d.ts:64:5 - (ae-undocumented) Missing documentation for "onReadyToClaimTask". +// src/scaffolder/tasks/TaskWorker.d.ts:65:5 - (ae-undocumented) Missing documentation for "runOneTask". +// src/scaffolder/tasks/types.d.ts:124:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/scaffolder/tasks/types.d.ts:125:5 - (ae-undocumented) Missing documentation for "createTask". +// src/scaffolder/tasks/types.d.ts:126:5 - (ae-undocumented) Missing documentation for "retryTask". +// src/scaffolder/tasks/types.d.ts:129:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/types.d.ts:132:5 - (ae-undocumented) Missing documentation for "getTask". +// src/scaffolder/tasks/types.d.ts:133:5 - (ae-undocumented) Missing documentation for "claimTask". +// src/scaffolder/tasks/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "completeTask". +// src/scaffolder/tasks/types.d.ts:139:5 - (ae-undocumented) Missing documentation for "heartbeatTask". +// src/scaffolder/tasks/types.d.ts:140:5 - (ae-undocumented) Missing documentation for "listStaleTasks". +// src/scaffolder/tasks/types.d.ts:147:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/tasks/types.d.ts:167:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/tasks/types.d.ts:186:5 - (ae-undocumented) Missing documentation for "emitLogEvent". +// src/scaffolder/tasks/types.d.ts:187:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/types.d.ts:192:5 - (ae-undocumented) Missing documentation for "saveTaskState". +// src/scaffolder/tasks/types.d.ts:196:5 - (ae-undocumented) Missing documentation for "listEvents". +// src/scaffolder/tasks/types.d.ts:199:5 - (ae-undocumented) Missing documentation for "shutdownTask". +// src/scaffolder/tasks/types.d.ts:200:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/types.d.ts:204:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/types.d.ts:207:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/service/router.d.ts:17:1 - (ae-undocumented) Missing documentation for "TemplatePermissionRuleInput". +// src/service/router.d.ts:22:1 - (ae-undocumented) Missing documentation for "ActionPermissionRuleInput". +// src/service/router.d.ts:30:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:31:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:32:5 - (ae-undocumented) Missing documentation for "reader". +// src/service/router.d.ts:33:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/service/router.d.ts:34:5 - (ae-undocumented) Missing documentation for "database". +// src/service/router.d.ts:35:5 - (ae-undocumented) Missing documentation for "catalogClient". +// src/service/router.d.ts:36:5 - (ae-undocumented) Missing documentation for "scheduler". +// src/service/router.d.ts:37:5 - (ae-undocumented) Missing documentation for "actions". +// src/service/router.d.ts:42:5 - (ae-undocumented) Missing documentation for "taskWorkers". +// src/service/router.d.ts:48:5 - (ae-undocumented) Missing documentation for "taskBroker". +// src/service/router.d.ts:49:5 - (ae-undocumented) Missing documentation for "additionalTemplateFilters". +// src/service/router.d.ts:50:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". +// src/service/router.d.ts:51:5 - (ae-undocumented) Missing documentation for "additionalWorkspaceProviders". +// src/service/router.d.ts:52:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/router.d.ts:53:5 - (ae-undocumented) Missing documentation for "permissionRules". +// src/service/router.d.ts:54:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:55:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:56:5 - (ae-undocumented) Missing documentation for "identity". +// src/service/router.d.ts:57:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:58:5 - (ae-undocumented) Missing documentation for "autocompleteHandlers". ``` diff --git a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts index 27b4f6b196..cf0f557639 100644 --- a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts +++ b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts @@ -44,6 +44,7 @@ import { createFetchPlainAction, createFetchPlainFileAction, createFetchTemplateAction, + createFetchTemplateFileAction, createFilesystemDeleteAction, createFilesystemRenameAction, createWaitAction, @@ -149,6 +150,12 @@ export const scaffolderPlugin = createBackendPlugin({ additionalTemplateFilters, additionalTemplateGlobals, }), + createFetchTemplateFileAction({ + integrations, + reader, + additionalTemplateFilters, + additionalTemplateGlobals, + }), createDebugLogAction(), createWaitAction(), // todo(blam): maybe these should be a -catalog module? diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts index 3c09d91c2d..59182ab46d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts @@ -37,6 +37,7 @@ import { createFetchPlainAction, createFetchPlainFileAction, createFetchTemplateAction, + createFetchTemplateFileAction, } from './fetch'; import { createFilesystemDeleteAction, @@ -158,6 +159,12 @@ export const createBuiltinActions = ( additionalTemplateFilters, additionalTemplateGlobals, }), + createFetchTemplateFileAction({ + integrations, + reader, + additionalTemplateFilters, + additionalTemplateGlobals, + }), createPublishGerritAction({ integrations, config, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts index 67f1bc360f..dd3942a458 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts @@ -17,3 +17,4 @@ export { createFetchPlainAction } from './plain'; export { createFetchPlainFileAction } from './plainFile'; export { createFetchTemplateAction } from './template'; +export { createFetchTemplateFileAction } from './templateFile'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.test.ts new file mode 100644 index 0000000000..c7823ee9d8 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.test.ts @@ -0,0 +1,107 @@ +/* + * Copyright 2024 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 { join as joinPath } from 'path'; +import fs from 'fs-extra'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createFetchTemplateFileAction } from './templateFile'; +import { + ActionContext, + TemplateAction, + fetchFile, +} from '@backstage/plugin-scaffolder-node'; +import { examples } from './templateFile.examples'; +import yaml from 'yaml'; +import { createMockDirectory } from '@backstage/backend-test-utils'; + +jest.mock('@backstage/plugin-scaffolder-node', () => ({ + ...jest.requireActual('@backstage/plugin-scaffolder-node'), + fetchFile: jest.fn(), +})); + +type FetchTemplateInput = ReturnType< + typeof createFetchTemplateFileAction +> extends TemplateAction + ? U + : never; + +const mockFetchFile = fetchFile as jest.MockedFunction; + +describe('fetch:template:file examples', () => { + let action: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + + const mockContext = (input: any) => + createMockActionContext({ + templateInfo: { + baseUrl: 'base-url', + entityRef: 'template:default/test-template', + }, + input, + workspacePath, + }); + + beforeEach(() => { + mockDir.clear(); + action = createFetchTemplateFileAction({ + reader: Symbol('UrlReader') as unknown as UrlReaderService, + integrations: Symbol('Integrations') as unknown as ScmIntegrations, + }); + }); + + describe('handler', () => { + describe('with valid input', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext(yaml.parse(examples[0].example).steps[0].input); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: + '${{ values.name }}: ${{ values.count }} ${{ values.itemList | dump }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('uses fetchFile to retrieve the template content', () => { + expect(mockFetchFile).toHaveBeenCalledWith( + expect.objectContaining({ + baseUrl: context.templateInfo?.baseUrl, + fetchUrl: context.input.url, + }), + ); + }); + + it('copies files with no templating in names or content successfully', async () => { + await expect( + fs.readFile( + joinPath(workspacePath, context.input.targetPath), + 'utf-8', + ), + ).resolves.toEqual('test-project: 1234 ["first","second","third"]'); + }); + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.ts new file mode 100644 index 0000000000..b2f3947f3a --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.ts @@ -0,0 +1,42 @@ +/* + * Copyright 2024 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 { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Downloads a template file and fill it out with values.', + example: yaml.stringify({ + steps: [ + { + action: 'fetch:template:file', + id: 'fetch-template-file', + name: 'Fetch template file', + input: { + url: './skeleton.txt', + targetPath: './target/skeleton.txt', + values: { + name: 'test-project', + count: 1234, + itemList: ['first', 'second', 'third'], + }, + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.test.ts new file mode 100644 index 0000000000..23721e685a --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.test.ts @@ -0,0 +1,251 @@ +/* + * Copyright 2024 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. + */ + +jest.mock('@backstage/plugin-scaffolder-node', () => { + const actual = jest.requireActual('@backstage/plugin-scaffolder-node'); + return { ...actual, fetchFile: jest.fn() }; +}); + +import { join as joinPath } from 'path'; +import fs from 'fs-extra'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; +import { ScmIntegrations } from '@backstage/integration'; +import { createFetchTemplateFileAction } from './templateFile'; +import { + ActionContext, + TemplateAction, + fetchFile, +} from '@backstage/plugin-scaffolder-node'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +type FetchTemplateInput = ReturnType< + typeof createFetchTemplateFileAction +> extends TemplateAction + ? U + : never; + +const mockFetchFile = fetchFile as jest.MockedFunction; + +describe('fetch:template:file', () => { + let action: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + const mockContext = (inputPatch: Partial = {}) => + createMockActionContext({ + templateInfo: { + baseUrl: 'base-url', + entityRef: 'template:default/test-template', + }, + input: { + url: './skeleton.txt', + targetPath: './target/skeleton.txt', + values: { + test: 'value', + }, + ...inputPatch, + }, + workspacePath, + }); + + beforeEach(() => { + mockDir.setContent({ + workspace: {}, + }); + action = createFetchTemplateFileAction({ + reader: Symbol('UrlReader') as unknown as UrlReaderService, + integrations: Symbol('Integrations') as unknown as ScmIntegrations, + }); + }); + + it(`returns a TemplateAction with the id 'fetch:template:file'`, () => { + expect(action.id).toEqual('fetch:template:file'); + }); + + describe('handler', () => { + it('should disallow a target path outside working directory', async () => { + await expect( + action.handler(mockContext({ targetPath: '../' })), + ).rejects.toThrow( + /Relative path is not allowed to refer to a directory outside its parent/, + ); + }); + + describe('valid input', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + values: { + name: 'test-project', + count: 1234, + itemList: ['first', 'second', 'third'], + }, + token: 'mockToken', + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: + '${{ values.name }}: ${{ values.count }} ${{ values.itemList | dump }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('uses fetchFile to retrieve the template content', () => { + expect(mockFetchFile).toHaveBeenCalledWith( + expect.objectContaining({ + baseUrl: context.templateInfo?.baseUrl, + fetchUrl: context.input.url, + }), + ); + }); + + it('passed through the token to fetchFile', () => { + expect(mockFetchFile).toHaveBeenCalledWith( + expect.objectContaining({ + token: 'mockToken', + }), + ); + }); + + it('templates content successfully', async () => { + await expect( + fs.readFile( + joinPath(workspacePath, context.input.targetPath), + 'utf-8', + ), + ).resolves.toEqual('test-project: 1234 ["first","second","third"]'); + }); + }); + + describe('with replacement of existing files', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + url: './static-content.txt', + targetPath: './target/static-content.txt', + values: { + name: 'test-project', + count: 1234, + }, + replace: true, + }); + + mockDir.setContent({ + [joinPath(workspacePath, 'target')]: { + 'static-content.txt': 'static-content', + }, + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: '${{ values.name }}: ${{ values.count }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('overwrites existing file', async () => { + await expect( + fs.readFile(`${workspacePath}/target/static-content.txt`, 'utf-8'), + ).resolves.toEqual('test-project: 1234'); + }); + }); + + describe('without replacement of existing files', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + url: './static-content.txt', + targetPath: './target/static-content.txt', + values: { + name: 'test-project', + count: 1234, + }, + replace: false, + }); + + mockDir.setContent({ + [joinPath(workspacePath, 'target')]: { + 'static-content.txt': 'static-content', + }, + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: '${{ values.name }}: ${{ values.count }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('keeps existing file', async () => { + await expect( + fs.readFile(`${workspacePath}/target/static-content.txt`, 'utf-8'), + ).resolves.toEqual('static-content'); + }); + }); + + describe('cookiecutter compatibility mode', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + targetPath: './target/test-project.txt', + values: { + name: 'test-project', + count: 1234, + itemList: ['first', 'second', 'third'], + }, + cookiecutterCompat: true, + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: + 'static:{{ cookiecutter.name }}:{{ cookiecutter.count }}:{{ cookiecutter.itemList | jsonify }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('copies files with cookiecutter-style templated variables successfully', async () => { + await expect( + fs.readFile(`${workspacePath}/target/test-project.txt`, 'utf-8'), + ).resolves.toEqual( + 'static:test-project:1234:["first","second","third"]', + ); + }); + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts new file mode 100644 index 0000000000..5734156148 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts @@ -0,0 +1,169 @@ +/* + * Copyright 2024 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 { UrlReaderService } from '@backstage/backend-plugin-api'; +import { resolveSafeChildPath } from '@backstage/backend-plugin-api'; +import { ScmIntegrations } from '@backstage/integration'; +import { examples } from './templateFile.examples'; +import { + createTemplateAction, + fetchFile, + TemplateFilter, + TemplateGlobal, +} from '@backstage/plugin-scaffolder-node'; +import { SecureTemplater } from '../../../../lib/templating/SecureTemplater'; +import { createDefaultFilters } from '../../../../lib/templating/filters'; +import path from 'path'; +import fs from 'fs-extra'; + +/** + * Downloads a single file and templates variables into file. + * Then places the result in the workspace, or optionally in a subdirectory + * specified by the 'targetPath' input option. + * @public + */ +export function createFetchTemplateFileAction(options: { + reader: UrlReaderService; + integrations: ScmIntegrations; + additionalTemplateFilters?: Record; + additionalTemplateGlobals?: Record; +}) { + const { + reader, + integrations, + additionalTemplateFilters, + additionalTemplateGlobals, + } = options; + + const defaultTemplateFilters = createDefaultFilters({ integrations }); + + return createTemplateAction<{ + url: string; + targetPath: string; + values: any; + cookiecutterCompat?: boolean; + replace?: boolean; + trimBlocks?: boolean; + lstripBlocks?: boolean; + token?: string; + }>({ + id: 'fetch:template:file', + description: 'Downloads single file and places it in the workspace.', + examples, + schema: { + input: { + type: 'object', + required: ['url', 'targetPath'], + properties: { + url: { + title: 'Fetch URL', + description: + 'Relative path or absolute URL pointing to the single file to fetch.', + type: 'string', + }, + targetPath: { + title: 'Target Path', + description: + 'Target path within the working directory to download the file as.', + type: 'string', + }, + values: { + title: 'Template Values', + description: 'Values to pass on to the templating engine', + type: 'object', + }, + cookiecutterCompat: { + title: 'Cookiecutter compatibility mode', + description: + 'Enable features to maximise compatibility with templates built for fetch:cookiecutter', + type: 'boolean', + }, + replace: { + title: 'Replace file', + description: + 'If set, replace file in targetPath instead of overwriting existing one.', + type: 'boolean', + }, + token: { + title: 'Token', + description: + 'An optional token to use for authentication when reading the resources.', + type: 'string', + }, + }, + }, + }, + supportsDryRun: true, + async handler(ctx) { + ctx.logger.info('Fetching template file content from remote URL'); + + const workDir = await ctx.createTemporaryDirectory(); + // Write to a tmp file, render the template, then copy to workspace. + const tmpFilePath = path.join(workDir, 'tmp'); + + const outputPath = resolveSafeChildPath( + ctx.workspacePath, + ctx.input.targetPath, + ); + + if (fs.existsSync(outputPath) && !ctx.input.replace) { + ctx.logger.info( + `File ${ctx.input.targetPath} already exists in workspace, not replacing.`, + ); + return; + } + + await fetchFile({ + reader, + integrations, + baseUrl: ctx.templateInfo?.baseUrl, + fetchUrl: ctx.input.url, + outputPath: tmpFilePath, + token: ctx.input.token, + }); + + const { cookiecutterCompat, values } = ctx.input; + const context = { + [cookiecutterCompat ? 'cookiecutter' : 'values']: values, + }; + + ctx.logger.info( + `Processing template file with input values`, + ctx.input.values, + ); + + const renderTemplate = await SecureTemplater.loadRenderer({ + cookiecutterCompat, + templateFilters: { + ...defaultTemplateFilters, + ...additionalTemplateFilters, + }, + templateGlobals: additionalTemplateGlobals, + nunjucksConfigs: { + trimBlocks: ctx.input.trimBlocks, + lstripBlocks: ctx.input.lstripBlocks, + }, + }); + + const contents = await fs.readFile(tmpFilePath, 'utf-8'); + const result = renderTemplate(contents, context); + await fs.ensureDir(path.dirname(outputPath)); + await fs.outputFile(outputPath, result); + + ctx.logger.info(`Template file has been written to ${outputPath}`); + }, + }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts index a58c5cb863..fbd314cbbc 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts @@ -16,7 +16,7 @@ import { DatabaseManager } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; -import { DatabaseTaskStore } from './DatabaseTaskStore'; +import { DatabaseTaskStore, RawDbTaskEventRow } from './DatabaseTaskStore'; import { TaskSpec } from '@backstage/plugin-scaffolder-common'; import { ConflictError } from '@backstage/errors'; import { createMockDirectory } from '@backstage/backend-test-utils'; @@ -267,6 +267,48 @@ describe('DatabaseTaskStore', () => { expect(event.type).toBe('log'); }); + it('should be able to retied cancelled recoverable task', async () => { + const { store, manager } = await createStore(); + const client = await manager.getClient(); + + const { taskId } = await store.createTask({ + spec: { + EXPERIMENTAL_recovery: { EXPERIMENTAL_strategy: 'startOver' }, + } as TaskSpec, + createdBy: 'me#too', + }); + await store.completeTask({ taskId, status: 'cancelled', eventBody: {} }); + + await store.retryTask?.({ taskId }); + + const taskAfterRetry = await store.getTask(taskId); + expect(taskAfterRetry.status).toBe('open'); + + expect( + await client('task_events') + .where({ + task_id: taskId, + event_type: 'recovered', + }) + .select(['body', 'event_type', 'task_id']), + ).toEqual([ + { + body: JSON.stringify({ recoverStrategy: 'startOver' }), + event_type: 'recovered', + task_id: taskId, + }, + ]); + + expect( + await client('task_events') + .where({ + task_id: taskId, + }) + .andWhere(q => q.whereIn('event_type', ['cancelled', 'completion'])) + .select(['body', 'event_type', 'task_id']), + ).toEqual([]); + }); + it('should complete the task', async () => { const { store } = await createStore(); const { taskId } = await store.createTask({ diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index 20e9672f04..65bafca619 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -484,7 +484,7 @@ export class DatabaseTaskStore implements TaskStore { async listEvents( options: TaskStoreListEventsOptions, ): Promise<{ events: SerializedTaskEvent[] }> { - const { taskId, after } = options; + const { isTaskRecoverable, taskId, after } = options; const rawEvents = await this.db('task_events') .where({ task_id: taskId, @@ -502,6 +502,7 @@ export class DatabaseTaskStore implements TaskStore { const body = JSON.parse(event.body) as JsonObject; return { id: Number(event.id), + isTaskRecoverable, taskId, body, type: event.event_type, @@ -602,6 +603,44 @@ export class DatabaseTaskStore implements TaskStore { }); } + async retryTask?(options: { taskId: string }): Promise { + await this.db.transaction(async tx => { + const result = await tx('tasks') + .where('id', options.taskId) + .update( + { + status: 'open', + last_heartbeat_at: this.db.fn.now(), + }, + ['id', 'spec'], + ); + + for (const { id, spec } of result) { + const taskSpec = JSON.parse(spec as string) as TaskSpec; + + /** + * Once task is picked up, all event types are replayed. + * We have to remove cancelled or completion event_type as these are as actions for frontend to perform. + * In contrary, we send 'recovered' event_type to reset the state on the frontend side. + * + */ + await tx('task_events') + .where('task_id', id) + .andWhere(q => q.whereIn('event_type', ['cancelled', 'completion'])) + .del(); + + await tx('task_events').insert({ + task_id: id, + event_type: 'recovered', + body: JSON.stringify({ + recoverStrategy: + taskSpec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy ?? 'none', + }), + }); + } + }); + } + async recoverTasks( options: TaskStoreRecoverTaskOptions, ): Promise<{ ids: string[] }> { diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts index 3960228529..1da2b4b349 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts @@ -254,7 +254,9 @@ export interface CurrentClaimedTask { * The creator of the task. */ createdBy?: string; - + /** + * The workspace of the task. + */ workspace?: Promise; } @@ -317,7 +319,7 @@ export class StorageTaskBroker implements TaskBroker { shouldUnsubscribe = true; } - if (event.type === 'completion') { + if (event.type === 'completion' && !event.isTaskRecoverable) { shouldUnsubscribe = true; } } @@ -416,8 +418,17 @@ export class StorageTaskBroker implements TaskBroker { let cancelled = false; (async () => { + const task = await this.storage.getTask(taskId); + const isTaskRecoverable = + task.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy === + 'startOver'; + while (!cancelled) { - const result = await this.storage.listEvents({ taskId, after }); + const result = await this.storage.listEvents({ + isTaskRecoverable, + taskId, + after, + }); const { events } = result; if (events.length) { after = events[events.length - 1].id; @@ -485,4 +496,9 @@ export class StorageTaskBroker implements TaskBroker { }, }); } + + async retry?(taskId: string): Promise { + await this.storage.retryTask?.({ taskId }); + this.signalDispatch(); + } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts index ab424806bf..bb3ce448fc 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts @@ -19,6 +19,7 @@ import { CurrentClaimedTask } from './StorageTaskBroker'; import { WorkspaceProvider } from '@backstage/plugin-scaffolder-node/alpha'; import { DatabaseWorkspaceProvider } from './DatabaseWorkspaceProvider'; import { TaskStore } from './types'; +import fs from 'fs-extra'; export interface WorkspaceService { serializeWorkspace(options: { path: string }): Promise; @@ -74,6 +75,7 @@ export class DefaultWorkspaceService implements WorkspaceService { targetPath: string; }): Promise { if (this.isWorkspaceSerializationEnabled()) { + await fs.mkdirp(options.targetPath); await this.workspaceProvider.rehydrateWorkspace(options); } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts index b87e0c4b9b..874793922f 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts @@ -119,6 +119,7 @@ export type TaskStoreEmitOptions = { * @public */ export type TaskStoreListEventsOptions = { + isTaskRecoverable?: boolean; taskId: string; after?: number | undefined; }; @@ -170,6 +171,8 @@ export interface TaskStore { options: TaskStoreCreateTaskOptions, ): Promise; + retryTask?(options: { taskId: string }): Promise; + recoverTasks?( options: TaskStoreRecoverTaskOptions, ): Promise<{ ids: string[] }>; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 4584d64257..80406496d2 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -652,6 +652,19 @@ export async function createRouter( await taskBroker.cancel?.(taskId); res.status(200).json({ status: 'cancelled' }); }) + .post('/v2/tasks/:taskId/retry', async (req, res) => { + const credentials = await httpAuth.credentials(req); + // Requires both read and cancel permissions + await checkPermission({ + credentials, + permissions: [taskCreatePermission, taskReadPermission], + permissionService: permissions, + }); + + const { taskId } = req.params; + await taskBroker.retry?.(taskId); + res.status(201).json({ id: taskId }); + }) .get('/v2/tasks/:taskId/eventstream', async (req, res) => { const credentials = await httpAuth.credentials(req); await checkPermission({ @@ -687,7 +700,7 @@ export async function createRouter( res.write( `event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`, ); - if (event.type === 'completion') { + if (event.type === 'completion' && !event.isTaskRecoverable) { shouldUnsubscribe = true; } } diff --git a/plugins/scaffolder-common/api-report-alpha.md b/plugins/scaffolder-common/report-alpha.api.md similarity index 100% rename from plugins/scaffolder-common/api-report-alpha.md rename to plugins/scaffolder-common/report-alpha.api.md diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/report.api.md similarity index 77% rename from plugins/scaffolder-common/api-report.md rename to plugins/scaffolder-common/report.api.md index 8d7a61910d..2058c08203 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/report.api.md @@ -123,4 +123,15 @@ export interface TemplatePresentationV1beta3 extends JsonObject { export interface TemplateRecoveryV1beta3 extends JsonObject { EXPERIMENTAL_strategy?: 'none' | 'startOver'; } + +// Warnings were encountered during analysis: +// +// src/TemplateEntityV1beta3.d.ts:102:5 - (ae-undocumented) Missing documentation for "id". +// src/TemplateEntityV1beta3.d.ts:103:5 - (ae-undocumented) Missing documentation for "name". +// src/TemplateEntityV1beta3.d.ts:104:5 - (ae-undocumented) Missing documentation for "action". +// src/TemplateEntityV1beta3.d.ts:105:5 - (ae-undocumented) Missing documentation for "input". +// src/TemplateEntityV1beta3.d.ts:106:5 - (ae-undocumented) Missing documentation for "if". +// src/TemplateEntityV1beta3.d.ts:107:5 - (ae-undocumented) Missing documentation for ""backstage:permissions"". +// src/TemplateEntityV1beta3.d.ts:115:5 - (ae-undocumented) Missing documentation for ""backstage:permissions"". +// src/TemplateEntityV1beta3.d.ts:123:5 - (ae-undocumented) Missing documentation for "tags". ``` diff --git a/plugins/scaffolder-node-test-utils/CHANGELOG.md b/plugins/scaffolder-node-test-utils/CHANGELOG.md index 749cc17741..18d10de230 100644 --- a/plugins/scaffolder-node-test-utils/CHANGELOG.md +++ b/plugins/scaffolder-node-test-utils/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-node-test-utils +## 0.1.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-test-utils@1.0.1-next.0 + - @backstage/types@1.1.1 + ## 0.1.12 ### Patch Changes diff --git a/plugins/scaffolder-node-test-utils/package.json b/plugins/scaffolder-node-test-utils/package.json index 5339803ea4..0fc95260a7 100644 --- a/plugins/scaffolder-node-test-utils/package.json +++ b/plugins/scaffolder-node-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-node-test-utils", - "version": "0.1.12", + "version": "0.1.13-next.0", "backstage": { "role": "node-library", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-node-test-utils/api-report.md b/plugins/scaffolder-node-test-utils/report.api.md similarity index 100% rename from plugins/scaffolder-node-test-utils/api-report.md rename to plugins/scaffolder-node-test-utils/report.api.md diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index bee15083dd..7a2ef1ab8e 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-node +## 0.5.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 0.4.11 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 164da18a7a..590d178beb 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-node", - "version": "0.4.11", + "version": "0.5.0-next.0", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "node-library", diff --git a/plugins/scaffolder-node/api-report-alpha.md b/plugins/scaffolder-node/report-alpha.api.md similarity index 77% rename from plugins/scaffolder-node/api-report-alpha.md rename to plugins/scaffolder-node/report-alpha.api.md index c9b8130f0e..2258515b6d 100644 --- a/plugins/scaffolder-node/api-report-alpha.md +++ b/plugins/scaffolder-node/report-alpha.api.md @@ -109,5 +109,17 @@ export interface WorkspaceProvider { }): Promise; } +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:9:5 - (ae-undocumented) Missing documentation for "addActions". +// src/alpha.d.ts:23:5 - (ae-undocumented) Missing documentation for "setTaskBroker". +// src/alpha.d.ts:37:5 - (ae-undocumented) Missing documentation for "addTemplateFilters". +// src/alpha.d.ts:38:5 - (ae-undocumented) Missing documentation for "addTemplateGlobals". +// src/alpha.d.ts:64:5 - (ae-undocumented) Missing documentation for "addAutocompleteProvider". +// src/alpha.d.ts:81:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/alpha.d.ts:85:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/alpha.d.ts:88:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/alpha.d.ts:99:5 - (ae-undocumented) Missing documentation for "addProviders". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/report.api.md similarity index 71% rename from plugins/scaffolder-node/api-report.md rename to plugins/scaffolder-node/report.api.md index 6bfa743415..ed4f19c7d8 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/report.api.md @@ -292,6 +292,7 @@ export type SerializedTask = { // @public export type SerializedTaskEvent = { id: number; + isTaskRecoverable?: boolean; taskId: string; body: JsonObject; type: TaskEventType; @@ -340,6 +341,8 @@ export interface TaskBroker { // (undocumented) recoverTasks?(): Promise; // (undocumented) + retry?(taskId: string): Promise; + // (undocumented) vacuumTasks(options: { timeoutS: number }): Promise; } @@ -478,4 +481,51 @@ export type TemplateFilter = (...args: JsonValue[]) => JsonValue | undefined; export type TemplateGlobal = | ((...args: JsonValue[]) => JsonValue | undefined) | JsonValue; + +// Warnings were encountered during analysis: +// +// src/actions/createTemplateAction.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateExample". +// src/actions/createTemplateAction.d.ts:11:1 - (ae-undocumented) Missing documentation for "TemplateActionOptions". +// src/actions/gitHelpers.d.ts:5:1 - (ae-undocumented) Missing documentation for "initRepoAndPush". +// src/actions/gitHelpers.d.ts:27:1 - (ae-undocumented) Missing documentation for "commitAndPushRepo". +// src/actions/gitHelpers.d.ts:49:1 - (ae-undocumented) Missing documentation for "cloneRepo". +// src/actions/gitHelpers.d.ts:66:1 - (ae-undocumented) Missing documentation for "createBranch". +// src/actions/gitHelpers.d.ts:80:1 - (ae-undocumented) Missing documentation for "addFiles". +// src/actions/gitHelpers.d.ts:94:1 - (ae-undocumented) Missing documentation for "commitAndPushBranch". +// src/actions/types.d.ts:60:1 - (ae-undocumented) Missing documentation for "TemplateAction". +// src/actions/util.d.ts:5:22 - (ae-undocumented) Missing documentation for "getRepoSourceDirectory". +// src/actions/util.d.ts:9:22 - (ae-undocumented) Missing documentation for "parseRepoUrl". +// src/files/serializeDirectoryContents.d.ts:6:1 - (ae-undocumented) Missing documentation for "serializeDirectoryContents". +// src/files/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "SerializedFile". +// src/files/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "path". +// src/files/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "content". +// src/files/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "executable". +// src/files/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "symlink". +// src/tasks/types.d.ts:83:5 - (ae-undocumented) Missing documentation for "cancelSignal". +// src/tasks/types.d.ts:84:5 - (ae-undocumented) Missing documentation for "spec". +// src/tasks/types.d.ts:85:5 - (ae-undocumented) Missing documentation for "secrets". +// src/tasks/types.d.ts:86:5 - (ae-undocumented) Missing documentation for "createdBy". +// src/tasks/types.d.ts:87:5 - (ae-undocumented) Missing documentation for "done". +// src/tasks/types.d.ts:88:5 - (ae-undocumented) Missing documentation for "isDryRun". +// src/tasks/types.d.ts:89:5 - (ae-undocumented) Missing documentation for "complete". +// src/tasks/types.d.ts:90:5 - (ae-undocumented) Missing documentation for "emitLog". +// src/tasks/types.d.ts:91:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/tasks/types.d.ts:94:5 - (ae-undocumented) Missing documentation for "updateCheckpoint". +// src/tasks/types.d.ts:103:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/tasks/types.d.ts:106:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/tasks/types.d.ts:107:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/tasks/types.d.ts:111:5 - (ae-undocumented) Missing documentation for "getWorkspaceName". +// src/tasks/types.d.ts:112:5 - (ae-undocumented) Missing documentation for "getInitiatorCredentials". +// src/tasks/types.d.ts:120:5 - (ae-undocumented) Missing documentation for "cancel". +// src/tasks/types.d.ts:121:5 - (ae-undocumented) Missing documentation for "retry". +// src/tasks/types.d.ts:122:5 - (ae-undocumented) Missing documentation for "claim". +// src/tasks/types.d.ts:123:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/tasks/types.d.ts:124:5 - (ae-undocumented) Missing documentation for "dispatch". +// src/tasks/types.d.ts:125:5 - (ae-undocumented) Missing documentation for "vacuumTasks". +// src/tasks/types.d.ts:128:5 - (ae-undocumented) Missing documentation for "event$". +// src/tasks/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "get". +// src/tasks/types.d.ts:135:5 - (ae-undocumented) Missing documentation for "list". +// src/tasks/types.d.ts:155:5 - (ae-undocumented) Missing documentation for "list". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "TemplateFilter". +// src/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "TemplateGlobal". ``` diff --git a/plugins/scaffolder-node/src/tasks/types.ts b/plugins/scaffolder-node/src/tasks/types.ts index 27a131c513..b830c0633a 100644 --- a/plugins/scaffolder-node/src/tasks/types.ts +++ b/plugins/scaffolder-node/src/tasks/types.ts @@ -76,6 +76,7 @@ export type TaskEventType = 'completion' | 'log' | 'cancelled' | 'recovered'; */ export type SerializedTaskEvent = { id: number; + isTaskRecoverable?: boolean; taskId: string; body: JsonObject; type: TaskEventType; @@ -163,6 +164,8 @@ export interface TaskContext { export interface TaskBroker { cancel?(taskId: string): Promise; + retry?(taskId: string): Promise; + claim(): Promise; recoverTasks?(): Promise; diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index dc10389984..a18a9ae471 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-scaffolder-react +## 1.13.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin + +### Patch Changes + +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 1.12.0 ### Minor Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index b0906070ff..99dd7cf949 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-react", - "version": "1.12.0", + "version": "1.13.0-next.0", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", "backstage": { "role": "web-library", @@ -62,6 +62,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", + "@backstage/frontend-plugin-api": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/plugin-permission-react": "workspace:^", "@backstage/plugin-scaffolder-common": "workspace:^", diff --git a/plugins/scaffolder-react/api-report-alpha.md b/plugins/scaffolder-react/report-alpha.api.md similarity index 56% rename from plugins/scaffolder-react/api-report-alpha.md rename to plugins/scaffolder-react/report-alpha.api.md index 545cc02e9e..75c6d08e32 100644 --- a/plugins/scaffolder-react/api-report-alpha.md +++ b/plugins/scaffolder-react/report-alpha.api.md @@ -7,10 +7,15 @@ import { ApiHolder } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; +import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { CustomFieldValidator } from '@backstage/plugin-scaffolder-react'; import { Dispatch } from 'react'; +import { ExtensionBlueprint } from '@backstage/frontend-plugin-api'; +import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; +import { FieldSchema } from '@backstage/plugin-scaffolder-react'; import { FieldValidation } from '@rjsf/utils'; +import { FormField } from '@internal/scaffolder'; import { FormProps } from '@backstage/plugin-scaffolder-react'; import { IconComponent } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; @@ -34,6 +39,7 @@ import { TemplateParameterSchema } from '@backstage/plugin-scaffolder-react'; import { TemplatePresentationV1beta3 } from '@backstage/plugin-scaffolder-common'; import { UiSchema } from '@rjsf/utils'; import { WidgetProps } from '@rjsf/utils'; +import { z } from 'zod'; // @alpha (undocumented) export type BackstageOverrides = Overrides & { @@ -57,6 +63,12 @@ export const createAsyncValidators: ( // @alpha export const createFieldValidation: () => FieldValidation; +// @alpha +export function createFormField< + TReturnValue extends z.ZodType, + TUiOptions extends z.ZodType, +>(opts: FormFieldExtensionData): FormField; + // @alpha export const DefaultTemplateOutputs: (props: { output?: ScaffolderTaskOutput; @@ -76,6 +88,49 @@ export const Form: ( props: PropsWithChildren, ) => React_2.JSX.Element; +// @alpha +export const FormFieldBlueprint: ExtensionBlueprint<{ + kind: 'scaffolder-form-field'; + name: undefined; + params: { + field: () => Promise; + }; + output: ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + formFieldLoader: ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >; + }; +}>; + +// @alpha (undocumented) +export type FormFieldExtensionData< + TReturnValue extends z.ZodType = z.ZodType, + TUiOptions extends z.ZodType = z.ZodType, +> = { + name: string; + component: ( + props: FieldExtensionComponentProps< + z.output, + z.output + >, + ) => JSX.Element | null; + validation?: CustomFieldValidator< + z.output, + z.output + >; + schema?: FieldSchema, z.output>; +}; + // @alpha (undocumented) export type FormValidation = { [name: string]: FieldValidation | FormValidation; @@ -318,5 +373,51 @@ export type WorkflowProps = { | 'layouts' >; +// Warnings were encountered during analysis: +// +// src/next/blueprints/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "FormFieldExtensionData". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:7:5 - (ae-undocumented) Missing documentation for "rawDescription". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:8:5 - (ae-undocumented) Missing documentation for "errors". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:9:5 - (ae-undocumented) Missing documentation for "rawErrors". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:10:5 - (ae-undocumented) Missing documentation for "help". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:11:5 - (ae-undocumented) Missing documentation for "rawHelp". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:12:5 - (ae-undocumented) Missing documentation for "required". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:13:5 - (ae-undocumented) Missing documentation for "disabled". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:14:5 - (ae-undocumented) Missing documentation for "displayLabel". +// src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.d.ts:5:1 - (ae-undocumented) Missing documentation for "ScaffolderPageContextMenuProps". +// src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.d.ts:14:1 - (ae-undocumented) Missing documentation for "ScaffolderPageContextMenu". +// src/next/components/Stepper/createAsyncValidators.d.ts:6:1 - (ae-undocumented) Missing documentation for "FormValidation". +// src/next/components/Stepper/createAsyncValidators.d.ts:10:22 - (ae-undocumented) Missing documentation for "createAsyncValidators". +// src/next/components/TaskSteps/TaskSteps.d.ts:10:5 - (ae-undocumented) Missing documentation for "steps". +// src/next/components/TaskSteps/TaskSteps.d.ts:11:5 - (ae-undocumented) Missing documentation for "activeStep". +// src/next/components/TaskSteps/TaskSteps.d.ts:12:5 - (ae-undocumented) Missing documentation for "isComplete". +// src/next/components/TaskSteps/TaskSteps.d.ts:13:5 - (ae-undocumented) Missing documentation for "isError". +// src/next/components/TemplateCard/TemplateCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "template". +// src/next/components/TemplateCard/TemplateCard.d.ts:10:5 - (ae-undocumented) Missing documentation for "additionalLinks". +// src/next/components/TemplateCard/TemplateCard.d.ts:15:5 - (ae-undocumented) Missing documentation for "onSelected". +// src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "ScaffolderReactTemplateCategoryPickerClassKey". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:10:5 - (ae-undocumented) Missing documentation for "templates". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:18:5 - (ae-undocumented) Missing documentation for "onSelected". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:19:5 - (ae-undocumented) Missing documentation for "title". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:20:5 - (ae-undocumented) Missing documentation for "components". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:8:1 - (ae-undocumented) Missing documentation for "TemplateGroupsProps". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:9:5 - (ae-undocumented) Missing documentation for "groups". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:10:5 - (ae-undocumented) Missing documentation for "templateFilter". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:11:5 - (ae-undocumented) Missing documentation for "TemplateCardComponent". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:14:5 - (ae-undocumented) Missing documentation for "onTemplateSelected". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:15:5 - (ae-undocumented) Missing documentation for "additionalLinksForEntity". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:24:22 - (ae-undocumented) Missing documentation for "TemplateGroups". +// src/next/components/Workflow/Workflow.d.ts:7:1 - (ae-undocumented) Missing documentation for "WorkflowProps". +// src/next/components/Workflow/Workflow.d.ts:20:22 - (ae-undocumented) Missing documentation for "Workflow". +// src/next/components/Workflow/Workflow.d.ts:24:22 - (ae-undocumented) Missing documentation for "EmbeddableWorkflow". +// src/next/hooks/useTemplateParameterSchema.d.ts:5:22 - (ae-undocumented) Missing documentation for "useTemplateParameterSchema". +// src/next/hooks/useTemplateSchema.d.ts:10:5 - (ae-undocumented) Missing documentation for "uiSchema". +// src/next/hooks/useTemplateSchema.d.ts:11:5 - (ae-undocumented) Missing documentation for "mergedSchema". +// src/next/hooks/useTemplateSchema.d.ts:12:5 - (ae-undocumented) Missing documentation for "schema". +// src/next/hooks/useTemplateSchema.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/next/hooks/useTemplateSchema.d.ts:14:5 - (ae-undocumented) Missing documentation for "description". +// src/next/overridableComponents.d.ts:5:1 - (ae-undocumented) Missing documentation for "ScaffolderReactComponentsNameToClassKey". +// src/next/overridableComponents.d.ts:9:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/report.api.md similarity index 73% rename from plugins/scaffolder-react/api-report.md rename to plugins/scaffolder-react/report.api.md index f73365f0ac..d7cf450bf5 100644 --- a/plugins/scaffolder-react/api-report.md +++ b/plugins/scaffolder-react/report.api.md @@ -6,7 +6,7 @@ /// import { ApiHolder } from '@backstage/core-plugin-api'; -import { ApiRef } from '@backstage/core-plugin-api'; +import { ApiRef } from '@backstage/frontend-plugin-api'; import { ComponentType } from 'react'; import { CustomValidator } from '@rjsf/utils'; import { ElementType } from 'react'; @@ -44,6 +44,7 @@ import { TemplatesType } from '@rjsf/utils'; import { UIOptionsType } from '@rjsf/utils'; import { UiSchema } from '@rjsf/utils'; import { ValidatorType } from '@rjsf/utils'; +import { z } from 'zod'; // @public export type Action = { @@ -125,6 +126,18 @@ export interface FieldExtensionUiSchema 'ui:options'?: TUiOptions & UIOptionsType; } +// @public +export interface FieldSchema { + // (undocumented) + readonly schema: CustomFieldExtensionSchema; + // (undocumented) + readonly TProps: FieldExtensionComponentProps; + // @deprecated (undocumented) + readonly type: FieldExtensionComponentProps; + // @deprecated (undocumented) + readonly uiOptionsType: TUiOptions; +} + // @public export type FormProps = Pick< FormProps_2, @@ -168,6 +181,15 @@ export type LogEvent = { taskId: string; }; +// @public (undocumented) +export function makeFieldSchema< + TReturnType extends z.ZodType, + TUiOptions extends z.ZodType, +>(options: { + output: (zImpl: typeof z) => TReturnType; + uiOptions?: (zImpl: typeof z) => TUiOptions; +}): FieldSchema, z.output>; + // @public export type ReviewStepProps = { disableButtons: boolean; @@ -213,6 +235,7 @@ export interface ScaffolderApi { listTasks?(options: { filterByOwnership: 'owned' | 'all' }): Promise<{ tasks: ScaffolderTask[]; }>; + retry?(taskId: string): Promise; scaffold( options: ScaffolderScaffoldOptions, ): Promise; @@ -432,6 +455,8 @@ export interface ScaffolderStreamLogsOptions { // (undocumented) after?: number; // (undocumented) + isTaskRecoverable?: boolean; + // (undocumented) taskId: string; } @@ -528,5 +553,50 @@ export const useTaskEventStream: (taskId: string) => TaskStream; // @public export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets; +// Warnings were encountered during analysis: +// +// src/api/ref.d.ts:3:22 - (ae-undocumented) Missing documentation for "scaffolderApiRef". +// src/api/types.d.ts:53:1 - (ae-undocumented) Missing documentation for "ScaffolderOutputLink". +// src/api/types.d.ts:60:1 - (ae-undocumented) Missing documentation for "ScaffolderOutputText". +// src/api/types.d.ts:67:1 - (ae-undocumented) Missing documentation for "ScaffolderTaskOutput". +// src/api/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "templateRef". +// src/api/types.d.ts:96:5 - (ae-undocumented) Missing documentation for "values". +// src/api/types.d.ts:97:5 - (ae-undocumented) Missing documentation for "secrets". +// src/api/types.d.ts:105:5 - (ae-undocumented) Missing documentation for "taskId". +// src/api/types.d.ts:113:5 - (ae-undocumented) Missing documentation for "allowedHosts". +// src/api/types.d.ts:121:5 - (ae-undocumented) Missing documentation for "integrations". +// src/api/types.d.ts:133:5 - (ae-undocumented) Missing documentation for "isTaskRecoverable". +// src/api/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "taskId". +// src/api/types.d.ts:135:5 - (ae-undocumented) Missing documentation for "after". +// src/api/types.d.ts:138:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunOptions". +// src/api/types.d.ts:139:5 - (ae-undocumented) Missing documentation for "template". +// src/api/types.d.ts:140:5 - (ae-undocumented) Missing documentation for "values". +// src/api/types.d.ts:141:5 - (ae-undocumented) Missing documentation for "secrets". +// src/api/types.d.ts:142:5 - (ae-undocumented) Missing documentation for "directoryContents". +// src/api/types.d.ts:148:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunResponse". +// src/api/types.d.ts:149:5 - (ae-undocumented) Missing documentation for "directoryContents". +// src/api/types.d.ts:154:5 - (ae-undocumented) Missing documentation for "log". +// src/api/types.d.ts:155:5 - (ae-undocumented) Missing documentation for "steps". +// src/api/types.d.ts:156:5 - (ae-undocumented) Missing documentation for "output". +// src/api/types.d.ts:164:5 - (ae-undocumented) Missing documentation for "getTemplateParameterSchema". +// src/api/types.d.ts:172:5 - (ae-undocumented) Missing documentation for "getTask". +// src/api/types.d.ts:185:5 - (ae-undocumented) Missing documentation for "listTasks". +// src/api/types.d.ts:190:5 - (ae-undocumented) Missing documentation for "getIntegrationsList". +// src/api/types.d.ts:195:5 - (ae-undocumented) Missing documentation for "streamLogs". +// src/api/types.d.ts:196:5 - (ae-undocumented) Missing documentation for "dryRun". +// src/api/types.d.ts:197:5 - (ae-undocumented) Missing documentation for "autocomplete". +// src/components/types.d.ts:7:1 - (ae-undocumented) Missing documentation for "TemplateGroupFilter". +// src/extensions/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "uiSchema". +// src/extensions/types.d.ts:30:5 - (ae-undocumented) Missing documentation for ""ui:options"". +// src/layouts/createScaffolderLayout.d.ts:16:5 - (ae-undocumented) Missing documentation for "name". +// src/layouts/createScaffolderLayout.d.ts:17:5 - (ae-undocumented) Missing documentation for "component". +// src/secrets/SecretsContext.d.ts:14:5 - (ae-undocumented) Missing documentation for "setSecrets". +// src/secrets/SecretsContext.d.ts:15:5 - (ae-undocumented) Missing documentation for "secrets". +// src/utils.d.ts:4:1 - (ae-undocumented) Missing documentation for "makeFieldSchema". +// src/utils.d.ts:15:5 - (ae-undocumented) Missing documentation for "type". +// src/utils.d.ts:17:5 - (ae-undocumented) Missing documentation for "uiOptionsType". +// src/utils.d.ts:18:5 - (ae-undocumented) Missing documentation for "schema". +// src/utils.d.ts:19:5 - (ae-undocumented) Missing documentation for "TProps". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-react/src/api/ref.ts b/plugins/scaffolder-react/src/api/ref.ts index 3dee426b09..4cf50d377b 100644 --- a/plugins/scaffolder-react/src/api/ref.ts +++ b/plugins/scaffolder-react/src/api/ref.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createApiRef } from '@backstage/core-plugin-api'; +import { createApiRef } from '@backstage/frontend-plugin-api'; import { ScaffolderApi } from './types'; /** @public */ diff --git a/plugins/scaffolder-react/src/api/types.ts b/plugins/scaffolder-react/src/api/types.ts index eaef54ff1b..3816c4bcbf 100644 --- a/plugins/scaffolder-react/src/api/types.ts +++ b/plugins/scaffolder-react/src/api/types.ts @@ -161,6 +161,7 @@ export interface ScaffolderGetIntegrationsListResponse { * @public */ export interface ScaffolderStreamLogsOptions { + isTaskRecoverable?: boolean; taskId: string; after?: number; } @@ -213,6 +214,13 @@ export interface ScaffolderApi { */ cancelTask(taskId: string): Promise; + /** + * Starts the task again from the point where it failed. + * + * @param taskId - the id of the task + */ + retry?(taskId: string): Promise; + listTasks?(options: { filterByOwnership: 'owned' | 'all'; }): Promise<{ tasks: ScaffolderTask[] }>; diff --git a/plugins/scaffolder-react/src/hooks/useEventStream.ts b/plugins/scaffolder-react/src/hooks/useEventStream.ts index f63f6024e6..7c5ce09ab7 100644 --- a/plugins/scaffolder-react/src/hooks/useEventStream.ts +++ b/plugins/scaffolder-react/src/hooks/useEventStream.ts @@ -143,6 +143,11 @@ function reducer(draft: TaskStream, action: ReducerAction) { } case 'RECOVERED': { + draft.cancelled = false; + draft.completed = false; + draft.output = undefined; + draft.error = undefined; + for (const stepId in draft.steps) { if (draft.steps.hasOwnProperty(stepId)) { draft.steps[stepId].startedAt = undefined; @@ -185,12 +190,16 @@ export const useTaskEventStream = (taskId: string): TaskStream => { let subscription: Subscription | undefined; let logPusher: NodeJS.Timeout | undefined; let retryCount = 1; + let isTaskRecoverable = false; const startStreamLogProcess = () => scaffolderApi.getTask(taskId).then( task => { if (didCancel) { return; } + isTaskRecoverable = + task.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy === + 'startOver'; dispatch({ type: 'INIT', data: task }); // TODO(blam): Use a normal fetch to fetch the current log for the event stream @@ -199,7 +208,10 @@ export const useTaskEventStream = (taskId: string): TaskStream => { // stream logs. Without this, if you have a lot of logs, it can look like the // task is being rebuilt on load as it progresses through the steps at a slower // rate whilst it builds the status from the event logs - const observable = scaffolderApi.streamLogs({ taskId }); + const observable = scaffolderApi.streamLogs({ + isTaskRecoverable, + taskId, + }); const collectedLogEvents = new Array(); @@ -270,12 +282,14 @@ export const useTaskEventStream = (taskId: string): TaskStream => { ); void startStreamLogProcess(); return () => { - didCancel = true; - if (subscription) { - subscription.unsubscribe(); - } - if (logPusher) { - clearInterval(logPusher); + if (!isTaskRecoverable) { + didCancel = true; + if (subscription) { + subscription.unsubscribe(); + } + if (logPusher) { + clearInterval(logPusher); + } } }; }, [scaffolderApi, dispatch, taskId]); diff --git a/plugins/scaffolder-react/src/index.ts b/plugins/scaffolder-react/src/index.ts index 70560cc694..e73df50fce 100644 --- a/plugins/scaffolder-react/src/index.ts +++ b/plugins/scaffolder-react/src/index.ts @@ -21,3 +21,4 @@ export * from './secrets'; export * from './api'; export * from './hooks'; export * from './layouts'; +export * from './utils'; diff --git a/plugins/scaffolder-react/src/next/blueprints/FormFieldBlueprint.tsx b/plugins/scaffolder-react/src/next/blueprints/FormFieldBlueprint.tsx new file mode 100644 index 0000000000..e99adcba82 --- /dev/null +++ b/plugins/scaffolder-react/src/next/blueprints/FormFieldBlueprint.tsx @@ -0,0 +1,56 @@ +/* + * Copyright 2024 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 { + createExtensionBlueprint, + createExtensionDataRef, +} from '@backstage/frontend-plugin-api'; +import { z } from 'zod'; + +import { OpaqueFormField, FormField } from '@internal/scaffolder'; +import { FormFieldExtensionData } from './types'; + +const formFieldExtensionDataRef = createExtensionDataRef< + () => Promise +>().with({ + id: 'scaffolder.form-field-loader', +}); + +/** + * @alpha + * Creates extensions that are Field Extensions for the Scaffolder + * */ +export const FormFieldBlueprint = createExtensionBlueprint({ + kind: 'scaffolder-form-field', + attachTo: { id: 'api:scaffolder/form-fields', input: 'formFields' }, + dataRefs: { + formFieldLoader: formFieldExtensionDataRef, + }, + output: [formFieldExtensionDataRef], + *factory(params: { field: () => Promise }) { + yield formFieldExtensionDataRef(params.field); + }, +}); + +/** + * @alpha + * Used to create a form field binding with typechecking for compliance + */ +export function createFormField< + TReturnValue extends z.ZodType, + TUiOptions extends z.ZodType, +>(opts: FormFieldExtensionData): FormField { + return OpaqueFormField.createInstance('v1', opts); +} diff --git a/packages/cli/src/lib/diff/index.ts b/plugins/scaffolder-react/src/next/blueprints/index.ts similarity index 83% rename from packages/cli/src/lib/diff/index.ts rename to plugins/scaffolder-react/src/next/blueprints/index.ts index 79a55f023e..165c583ac8 100644 --- a/packages/cli/src/lib/diff/index.ts +++ b/plugins/scaffolder-react/src/next/blueprints/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2024 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. @@ -14,7 +14,5 @@ * limitations under the License. */ -export * from './handlers'; -export * from './prompts'; -export * from './read'; +export * from './FormFieldBlueprint'; export * from './types'; diff --git a/plugins/scaffolder-react/src/next/blueprints/types.ts b/plugins/scaffolder-react/src/next/blueprints/types.ts new file mode 100644 index 0000000000..eccf7e4606 --- /dev/null +++ b/plugins/scaffolder-react/src/next/blueprints/types.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2024 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 { z } from 'zod'; +import { + CustomFieldValidator, + FieldExtensionComponentProps, + FieldSchema, +} from '@backstage/plugin-scaffolder-react'; + +/** @alpha */ +export type FormFieldExtensionData< + TReturnValue extends z.ZodType = z.ZodType, + TUiOptions extends z.ZodType = z.ZodType, +> = { + name: string; + component: ( + props: FieldExtensionComponentProps< + z.output, + z.output + >, + ) => JSX.Element | null; + validation?: CustomFieldValidator< + z.output, + z.output + >; + schema?: FieldSchema, z.output>; +}; diff --git a/plugins/scaffolder-react/src/next/index.ts b/plugins/scaffolder-react/src/next/index.ts index 2c9c1706f0..07f4565166 100644 --- a/plugins/scaffolder-react/src/next/index.ts +++ b/plugins/scaffolder-react/src/next/index.ts @@ -17,3 +17,4 @@ export * from './components'; export * from './lib'; export * from './hooks'; export * from './overridableComponents'; +export * from './blueprints'; diff --git a/plugins/scaffolder-react/src/utils.ts b/plugins/scaffolder-react/src/utils.ts new file mode 100644 index 0000000000..63a62fe3fc --- /dev/null +++ b/plugins/scaffolder-react/src/utils.ts @@ -0,0 +1,60 @@ +/* + * Copyright 2024 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 zodToJsonSchema from 'zod-to-json-schema'; +import { JSONSchema7 } from 'json-schema'; +import { z } from 'zod'; +import { + CustomFieldExtensionSchema, + FieldExtensionComponentProps, +} from './extensions'; + +/** @public */ +export function makeFieldSchema< + TReturnType extends z.ZodType, + TUiOptions extends z.ZodType, +>(options: { + output: (zImpl: typeof z) => TReturnType; + uiOptions?: (zImpl: typeof z) => TUiOptions; +}): FieldSchema, z.output> { + const { output, uiOptions } = options; + return { + TProps: undefined as any, + schema: { + returnValue: zodToJsonSchema(output(z)) as JSONSchema7, + uiOptions: uiOptions && (zodToJsonSchema(uiOptions(z)) as JSONSchema7), + }, + + // These will be removed - just here for backwards compat whilst we're moving across + type: undefined as any, + uiOptionsType: undefined as any, + }; +} + +/** + * @public + * FieldSchema encapsulates a JSONSchema7 along with the + * matching FieldExtensionComponentProps type for a field extension. + */ +export interface FieldSchema { + /** @deprecated use TProps instead */ + readonly type: FieldExtensionComponentProps; + /** @deprecated will be removed */ + readonly uiOptionsType: TUiOptions; + + readonly schema: CustomFieldExtensionSchema; + readonly TProps: FieldExtensionComponentProps; +} diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index e9ae626c3e..2ba6b7e94a 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-scaffolder +## 1.26.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin +- cc3f80c: Added ability to create a new local scaffolder template to ease onboarding when creating new templates. +- 5492eb6: Added ability to link to a specific action on the actions page + +### Patch Changes + +- b2b2aa8: Fix extra divider displayed in owner list picker on list tasks page +- 7f1f483: Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there. +- 7a3d622: Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page. +- 4698646: Change task list created at column to show timestamp +- 4130291: Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page. +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- 09fcd95: Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 1.25.0 ### Minor Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 83418e5da5..f73082cd22 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder", - "version": "1.25.0", + "version": "1.26.0-next.0", "description": "The Backstage plugin that helps you create new things", "backstage": { "role": "frontend-plugin", @@ -30,7 +30,7 @@ "sideEffects": false, "exports": { ".": "./src/index.ts", - "./alpha": "./src/alpha.tsx", + "./alpha": "./src/alpha/index.ts", "./package.json": "./package.json" }, "main": "src/index.ts", @@ -38,7 +38,7 @@ "typesVersions": { "*": { "alpha": [ - "src/alpha.tsx" + "src/alpha/index.ts" ], "package.json": [ "package.json" @@ -90,6 +90,7 @@ "classnames": "^2.2.6", "git-url-parse": "^14.0.0", "humanize-duration": "^3.25.1", + "idb-keyval": "5.0.2", "json-schema": "^0.4.0", "json-schema-library": "^9.0.0", "jszip": "^3.10.1", diff --git a/plugins/scaffolder/api-report-alpha.md b/plugins/scaffolder/report-alpha.api.md similarity index 82% rename from plugins/scaffolder/api-report-alpha.md rename to plugins/scaffolder/report-alpha.api.md index 9e4f1265c8..4319362ef9 100644 --- a/plugins/scaffolder/api-report-alpha.md +++ b/plugins/scaffolder/report-alpha.api.md @@ -3,16 +3,21 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +/// + import { AnyApiFactory } from '@backstage/frontend-plugin-api'; import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; +import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { ExternalRouteRef } from '@backstage/frontend-plugin-api'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; +import { FormField } from '@internal/scaffolder'; import type { FormProps as FormProps_2 } from '@rjsf/core'; import { FormProps as FormProps_3 } from '@backstage/plugin-scaffolder-react'; import { FrontendPlugin } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; +import { JSX as JSX_2 } from 'react'; import { LayoutOptions } from '@backstage/plugin-scaffolder-react'; import { PathParams } from '@backstage/core-plugin-api'; import { default as React_2 } from 'react'; @@ -69,11 +74,7 @@ const _default: FrontendPlugin< path?: string | undefined; }; output: - | ConfigurableExtensionDataRef< - React_2.JSX.Element, - 'core.reactElement', - {} - > + | ConfigurableExtensionDataRef | ConfigurableExtensionDataRef | ConfigurableExtensionDataRef< RouteRef, @@ -110,6 +111,48 @@ const _default: FrontendPlugin< routeRef: RouteRef; }; }>; + 'scaffolder-form-field:scaffolder/repo-url-picker': ExtensionDefinition<{ + kind: 'scaffolder-form-field'; + name: 'repo-url-picker'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >; + inputs: {}; + params: { + field: () => Promise; + }; + }>; + 'api:scaffolder/form-fields': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: { + formFields: ExtensionInput< + ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >, + { + singleton: false; + optional: false; + } + >; + }; + kind: 'api'; + name: 'form-fields'; + params: { + factory: AnyApiFactory; + }; + }>; } >; export default _default; @@ -216,6 +259,7 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'ongoingTask.title': 'Run of'; readonly 'ongoingTask.contextMenu.cancel': 'Cancel'; readonly 'ongoingTask.contextMenu.startOver': 'Start Over'; + readonly 'ongoingTask.contextMenu.retry': 'Retry'; readonly 'ongoingTask.contextMenu.hideLogs': 'Hide Logs'; readonly 'ongoingTask.contextMenu.showLogs': 'Show Logs'; readonly 'ongoingTask.contextMenu.hideButtonBar': 'Hide Button Bar'; @@ -224,10 +268,14 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'ongoingTask.pageTitle.hasTemplateName': 'Run of {{templateName}}'; readonly 'ongoingTask.pageTitle.noTemplateName': 'Scaffolder Run'; readonly 'ongoingTask.cancelButtonTitle': 'Cancel'; + readonly 'ongoingTask.retryButtonTitle': 'Retry'; readonly 'ongoingTask.startOverButtonTitle': 'Start Over'; readonly 'ongoingTask.hideLogsButtonTitle': 'Hide Logs'; readonly 'ongoingTask.showLogsButtonTitle': 'Show Logs'; + readonly 'templateEditorForm.stepper.emptyText': 'There are no spec parameters in the template to preview.'; readonly 'templateTypePicker.title': 'Categories'; + readonly 'templateFormPage.title': 'Template Form Playground'; + readonly 'templateFormPage.subtitle': 'Edit, preview, and try out templates and template forms'; readonly 'templateEditorPage.title': 'Template Editor'; readonly 'templateEditorPage.subtitle': 'Edit, preview, and try out templates and template forms'; readonly 'templateEditorPage.dryRunResults.title': 'Dry-run results'; @@ -238,10 +286,11 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'templateEditorPage.dryRunResultsView.tab.log': 'Log'; readonly 'templateEditorPage.dryRunResultsView.tab.files': 'Files'; readonly 'templateEditorPage.taskStatusStepper.skippedStepTitle': 'Skipped'; - readonly 'templateEditorPage.customFieldExplorer.preview.title': 'Example Template Spec'; + readonly 'templateEditorPage.customFieldExplorer.preview.title': 'Template Spec'; readonly 'templateEditorPage.customFieldExplorer.fieldForm.title': 'Field Options'; readonly 'templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle': 'Apply'; readonly 'templateEditorPage.customFieldExplorer.selectFieldLabel': 'Choose Custom Field Extension'; + readonly 'templateEditorPage.customFieldExplorer.fieldPreview.title': 'Field Preview'; readonly 'templateEditorPage.templateEditorBrowser.closeConfirmMessage': 'Are you sure? Unsaved changes will be lost'; readonly 'templateEditorPage.templateEditorBrowser.saveIconTooltip': 'Save all files'; readonly 'templateEditorPage.templateEditorBrowser.reloadIconTooltip': 'Reload directory'; @@ -250,6 +299,9 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'templateEditorPage.templateEditorIntro.loadLocal.title': 'Load Template Directory'; readonly 'templateEditorPage.templateEditorIntro.loadLocal.description': 'Load a local template directory, allowing you to both edit and try executing your own template.'; readonly 'templateEditorPage.templateEditorIntro.loadLocal.unsupportedTooltip': 'Only supported in some Chromium-based browsers'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.title': 'Create New Template'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.description': 'Create a local template directory, allowing you to both edit and try executing your own template.'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.unsupportedTooltip': 'Only supported in some Chromium-based browsers'; readonly 'templateEditorPage.templateEditorIntro.formEditor.title': 'Edit Template Form'; readonly 'templateEditorPage.templateEditorIntro.formEditor.description': 'Preview and edit a template form, either using a sample template or by loading a template from the catalog.'; readonly 'templateEditorPage.templateEditorIntro.fieldExplorer.title': 'Custom Field Explorer'; @@ -306,5 +358,15 @@ export type TemplateWizardPageProps = { }; }; +// Warnings were encountered during analysis: +// +// src/alpha/components/TemplateEditorPage/CustomFieldExplorer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderCustomFieldExplorerClassKey". +// src/alpha/components/TemplateEditorPage/TemplateEditor.d.ts:6:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateEditorClassKey". +// src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateFormPreviewerClassKey". +// src/alpha/components/TemplateListPage/TemplateListPage.d.ts:7:1 - (ae-undocumented) Missing documentation for "TemplateListPageProps". +// src/alpha/components/TemplateWizardPage/TemplateWizardPage.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateWizardPageProps". +// src/alpha/plugin.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "scaffolderTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/report.api.md similarity index 78% rename from plugins/scaffolder/api-report.md rename to plugins/scaffolder/report.api.md index fb53761145..b93a59a82c 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/report.api.md @@ -19,6 +19,7 @@ import { FetchApi } from '@backstage/core-plugin-api'; import { FieldExtensionComponent as FieldExtensionComponent_2 } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionComponentProps as FieldExtensionComponentProps_2 } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions as FieldExtensionOptions_2 } from '@backstage/plugin-scaffolder-react'; +import { FieldSchema as FieldSchema_2 } from '@backstage/plugin-scaffolder-react'; import { FieldValidation } from '@rjsf/utils'; import { FormProps } from '@backstage/plugin-scaffolder-react'; import { IdentityApi } from '@backstage/core-plugin-api'; @@ -174,15 +175,8 @@ export type FieldExtensionComponentProps< // @public @deprecated (undocumented) export type FieldExtensionOptions = FieldExtensionOptions_2; -// @public -export interface FieldSchema { - // (undocumented) - readonly schema: CustomFieldExtensionSchema_2; - // (undocumented) - readonly type: FieldExtensionComponentProps_2; - // (undocumented) - readonly uiOptionsType: TUiOptions; -} +// @public @deprecated (undocumented) +export interface FieldSchema extends FieldSchema_2 {} // @public @deprecated (undocumented) export type LayoutOptions = LayoutOptions_2; @@ -196,7 +190,7 @@ export type ListActionsResponse = ListActionsResponse_2; // @public @deprecated (undocumented) export type LogEvent = LogEvent_2; -// @public +// @public @deprecated (undocumented) export function makeFieldSchemaFromZod< TReturnSchema extends z.ZodType, TUiOptionsSchema extends z.ZodType = z.ZodType, @@ -443,7 +437,7 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent_2< >; // @public (undocumented) -export const RepoUrlPickerFieldSchema: FieldSchema< +export const RepoUrlPickerFieldSchema: FieldSchema_2< string, { allowedHosts?: string[] | undefined; @@ -469,7 +463,7 @@ export const RepoUrlPickerFieldSchema: FieldSchema< } >; -// @public +// @public @deprecated export type RepoUrlPickerUiOptions = typeof RepoUrlPickerFieldSchema.uiOptionsType; @@ -562,6 +556,8 @@ export class ScaffolderClient implements ScaffolderApi_2 { tasks: ScaffolderTask_2[]; }>; // (undocumented) + retry?(taskId: string): Promise; + // (undocumented) scaffold( options: ScaffolderScaffoldOptions_2, ): Promise; @@ -612,6 +608,9 @@ export const scaffolderPlugin: BackstagePlugin< actions: SubRouteRef; listTasks: SubRouteRef; edit: SubRouteRef; + editor: SubRouteRef; + customFields: SubRouteRef; + templateForm: SubRouteRef; }, { registerComponent: ExternalRouteRef; @@ -667,4 +666,56 @@ export const TemplateTypePicker: () => React_2.JSX.Element | null; // @public @deprecated (undocumented) export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets_2; + +// Warnings were encountered during analysis: +// +// src/api.d.ts:23:5 - (ae-undocumented) Missing documentation for "listTasks". +// src/api.d.ts:28:5 - (ae-undocumented) Missing documentation for "getIntegrationsList". +// src/api.d.ts:29:5 - (ae-undocumented) Missing documentation for "getTemplateParameterSchema". +// src/api.d.ts:30:5 - (ae-undocumented) Missing documentation for "scaffold". +// src/api.d.ts:31:5 - (ae-undocumented) Missing documentation for "getTask". +// src/api.d.ts:32:5 - (ae-undocumented) Missing documentation for "streamLogs". +// src/api.d.ts:33:5 - (ae-undocumented) Missing documentation for "dryRun". +// src/api.d.ts:36:5 - (ae-undocumented) Missing documentation for "listActions". +// src/api.d.ts:37:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/api.d.ts:38:5 - (ae-undocumented) Missing documentation for "retry". +// src/api.d.ts:39:5 - (ae-undocumented) Missing documentation for "autocomplete". +// src/components/OngoingTask/OngoingTask.d.ts:6:22 - (ae-undocumented) Missing documentation for "OngoingTask". +// src/components/fields/EntityPicker/schema.d.ts:15:22 - (ae-undocumented) Missing documentation for "EntityPickerFieldSchema". +// src/components/fields/EntityTagsPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "EntityTagsPickerFieldSchema". +// src/components/fields/OwnedEntityPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "OwnedEntityPickerFieldSchema". +// src/components/fields/OwnerPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "OwnerPickerFieldSchema". +// src/components/fields/RepoUrlPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "RepoUrlPickerFieldSchema". +// src/components/fields/utils.d.ts:7:1 - (ae-undocumented) Missing documentation for "FieldSchema". +// src/components/fields/utils.d.ts:15:1 - (ae-undocumented) Missing documentation for "makeFieldSchemaFromZod". +// src/deprecated.d.ts:7:22 - (ae-undocumented) Missing documentation for "rootRouteRef". +// src/deprecated.d.ts:12:22 - (ae-undocumented) Missing documentation for "createScaffolderFieldExtension". +// src/deprecated.d.ts:17:22 - (ae-undocumented) Missing documentation for "ScaffolderFieldExtensions". +// src/deprecated.d.ts:24:22 - (ae-undocumented) Missing documentation for "useTemplateSecrets". +// src/deprecated.d.ts:29:22 - (ae-undocumented) Missing documentation for "scaffolderApiRef". +// src/deprecated.d.ts:34:1 - (ae-undocumented) Missing documentation for "ScaffolderApi". +// src/deprecated.d.ts:39:1 - (ae-undocumented) Missing documentation for "ScaffolderUseTemplateSecrets". +// src/deprecated.d.ts:44:1 - (ae-undocumented) Missing documentation for "TemplateParameterSchema". +// src/deprecated.d.ts:49:1 - (ae-undocumented) Missing documentation for "CustomFieldExtensionSchema". +// src/deprecated.d.ts:54:1 - (ae-undocumented) Missing documentation for "CustomFieldValidator". +// src/deprecated.d.ts:59:1 - (ae-undocumented) Missing documentation for "FieldExtensionOptions". +// src/deprecated.d.ts:64:1 - (ae-undocumented) Missing documentation for "FieldExtensionComponentProps". +// src/deprecated.d.ts:69:1 - (ae-undocumented) Missing documentation for "FieldExtensionComponent". +// src/deprecated.d.ts:74:1 - (ae-undocumented) Missing documentation for "ListActionsResponse". +// src/deprecated.d.ts:79:1 - (ae-undocumented) Missing documentation for "LogEvent". +// src/deprecated.d.ts:84:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunOptions". +// src/deprecated.d.ts:89:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunResponse". +// src/deprecated.d.ts:94:1 - (ae-undocumented) Missing documentation for "ScaffolderGetIntegrationsListOptions". +// src/deprecated.d.ts:99:1 - (ae-undocumented) Missing documentation for "ScaffolderGetIntegrationsListResponse". +// src/deprecated.d.ts:104:1 - (ae-undocumented) Missing documentation for "ScaffolderOutputlink". +// src/deprecated.d.ts:109:1 - (ae-undocumented) Missing documentation for "ScaffolderScaffoldOptions". +// src/deprecated.d.ts:114:1 - (ae-undocumented) Missing documentation for "ScaffolderScaffoldResponse". +// src/deprecated.d.ts:119:1 - (ae-undocumented) Missing documentation for "ScaffolderStreamLogsOptions". +// src/deprecated.d.ts:124:1 - (ae-undocumented) Missing documentation for "ScaffolderTask". +// src/deprecated.d.ts:129:1 - (ae-undocumented) Missing documentation for "ScaffolderTaskOutput". +// src/deprecated.d.ts:134:1 - (ae-undocumented) Missing documentation for "ScaffolderTaskStatus". +// src/deprecated.d.ts:139:22 - (ae-undocumented) Missing documentation for "createScaffolderLayout". +// src/deprecated.d.ts:144:22 - (ae-undocumented) Missing documentation for "ScaffolderLayouts". +// src/deprecated.d.ts:151:1 - (ae-undocumented) Missing documentation for "LayoutTemplate". +// src/deprecated.d.ts:156:1 - (ae-undocumented) Missing documentation for "LayoutOptions". ``` diff --git a/plugins/scaffolder/src/alpha.tsx b/plugins/scaffolder/src/alpha.tsx deleted file mode 100644 index d7def54d25..0000000000 --- a/plugins/scaffolder/src/alpha.tsx +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2023 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 { - createApiFactory, - createFrontendPlugin, - discoveryApiRef, - fetchApiRef, - identityApiRef, - ApiBlueprint, - PageBlueprint, - NavItemBlueprint, -} from '@backstage/frontend-plugin-api'; -import CreateComponentIcon from '@material-ui/icons/AddCircleOutline'; -import { - compatWrapper, - convertLegacyRouteRef, - convertLegacyRouteRefs, -} from '@backstage/core-compat-api'; -import { scmIntegrationsApiRef } from '@backstage/integration-react'; -import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; -import { ScaffolderClient } from './api'; -import { - registerComponentRouteRef, - rootRouteRef, - viewTechDocRouteRef, - selectedTemplateRouteRef, - scaffolderTaskRouteRef, - scaffolderListTaskRouteRef, - actionsRouteRef, - editRouteRef, -} from './routes'; - -export { - type FormProps, - type TemplateListPageProps, - type TemplateWizardPageProps, - type ScaffolderCustomFieldExplorerClassKey, - type ScaffolderTemplateEditorClassKey, - type ScaffolderTemplateFormPreviewerClassKey, -} from './next'; - -export { scaffolderTranslationRef } from './translation'; - -const scaffolderApi = ApiBlueprint.make({ - params: { - factory: createApiFactory({ - api: scaffolderApiRef, - deps: { - discoveryApi: discoveryApiRef, - scmIntegrationsApi: scmIntegrationsApiRef, - fetchApi: fetchApiRef, - identityApi: identityApiRef, - }, - factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => - new ScaffolderClient({ - discoveryApi, - scmIntegrationsApi, - fetchApi, - identityApi, - }), - }), - }, -}); - -const scaffolderPage = PageBlueprint.make({ - params: { - routeRef: convertLegacyRouteRef(rootRouteRef), - defaultPath: '/create', - loader: () => - import('./components/Router').then(m => compatWrapper()), - }, -}); - -const scaffolderNavItem = NavItemBlueprint.make({ - params: { - routeRef: convertLegacyRouteRef(rootRouteRef), - title: 'Create...', - icon: CreateComponentIcon, - }, -}); - -/** @alpha */ -export default createFrontendPlugin({ - id: 'scaffolder', - routes: convertLegacyRouteRefs({ - root: rootRouteRef, - selectedTemplate: selectedTemplateRouteRef, - ongoingTask: scaffolderTaskRouteRef, - actions: actionsRouteRef, - listTasks: scaffolderListTaskRouteRef, - edit: editRouteRef, - }), - externalRoutes: convertLegacyRouteRefs({ - registerComponent: registerComponentRouteRef, - viewTechDoc: viewTechDocRouteRef, - }), - extensions: [scaffolderApi, scaffolderPage, scaffolderNavItem], -}); diff --git a/plugins/scaffolder/src/alpha/api.tsx b/plugins/scaffolder/src/alpha/api.tsx new file mode 100644 index 0000000000..06364cd6e9 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api.tsx @@ -0,0 +1,46 @@ +/* + * Copyright 2024 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 { + ApiBlueprint, + createApiFactory, + discoveryApiRef, + fetchApiRef, + identityApiRef, +} from '@backstage/frontend-plugin-api'; +import { scmIntegrationsApiRef } from '@backstage/integration-react'; +import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; +import { ScaffolderClient } from '../api'; + +export const scaffolderApi = ApiBlueprint.make({ + params: { + factory: createApiFactory({ + api: scaffolderApiRef, + deps: { + discoveryApi: discoveryApiRef, + scmIntegrationsApi: scmIntegrationsApiRef, + fetchApi: fetchApiRef, + identityApi: identityApiRef, + }, + factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => + new ScaffolderClient({ + discoveryApi, + scmIntegrationsApi, + fetchApi, + identityApi, + }), + }), + }, +}); diff --git a/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts b/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts new file mode 100644 index 0000000000..35141463d5 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts @@ -0,0 +1,63 @@ +/* + * Copyright 2024 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 { + ApiBlueprint, + createApiFactory, + createExtensionInput, +} from '@backstage/frontend-plugin-api'; +import { formFieldsApiRef } from './ref'; +import { ScaffolderFormFieldsApi } from './types'; +import { FormFieldBlueprint } from '@backstage/plugin-scaffolder-react/alpha'; +import { FormField, OpaqueFormField } from '@internal/scaffolder'; + +class DefaultScaffolderFormFieldsApi implements ScaffolderFormFieldsApi { + constructor( + private readonly formFieldLoaders: Array<() => Promise> = [], + ) {} + + async getFormFields() { + const formFields = await Promise.all( + this.formFieldLoaders.map(loader => loader()), + ); + + const internalFormFields = formFields.map(OpaqueFormField.toInternal); + + return internalFormFields; + } +} + +export const formFieldsApi = ApiBlueprint.makeWithOverrides({ + name: 'form-fields', + inputs: { + formFields: createExtensionInput([ + FormFieldBlueprint.dataRefs.formFieldLoader, + ]), + }, + factory(originalFactory, { inputs }) { + const formFieldLoaders = inputs.formFields.map(e => + e.get(FormFieldBlueprint.dataRefs.formFieldLoader), + ); + + return originalFactory({ + factory: createApiFactory({ + api: formFieldsApiRef, + deps: {}, + factory: () => new DefaultScaffolderFormFieldsApi(formFieldLoaders), + }), + }); + }, +}); diff --git a/plugins/scaffolder/src/alpha/api/index.ts b/plugins/scaffolder/src/alpha/api/index.ts new file mode 100644 index 0000000000..bbc30ef50b --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2024 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 { formFieldsApiRef } from './ref'; +export type { ScaffolderFormFieldsApi } from './types'; diff --git a/plugins/scaffolder/src/alpha/api/ref.ts b/plugins/scaffolder/src/alpha/api/ref.ts new file mode 100644 index 0000000000..52bc44e674 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/ref.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2024 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 { createApiRef } from '@backstage/frontend-plugin-api'; +import { ScaffolderFormFieldsApi } from './types'; + +export const formFieldsApiRef = createApiRef({ + id: 'plugin.scaffolder.form-fields', +}); diff --git a/plugins/scaffolder/src/alpha/api/types.ts b/plugins/scaffolder/src/alpha/api/types.ts new file mode 100644 index 0000000000..81f08b18e2 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/types.ts @@ -0,0 +1,21 @@ +/* + * Copyright 2024 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 { FormFieldExtensionData } from '@backstage/plugin-scaffolder-react/alpha'; + +export interface ScaffolderFormFieldsApi { + getFormFields(): Promise; +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx index 4516537f32..daa014078d 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx @@ -34,7 +34,7 @@ import { TemplateEditorForm } from './TemplateEditorForm'; import validator from '@rjsf/validator-ajv8'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; /** @public */ export type ScaffolderCustomFieldExplorerClassKey = diff --git a/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.tsx new file mode 100644 index 0000000000..3b6fe53d8e --- /dev/null +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.tsx @@ -0,0 +1,221 @@ +/* + * 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 React, { useCallback, useMemo, useState } from 'react'; +import yaml from 'yaml'; +import validator from '@rjsf/validator-ajv8'; +import CodeMirror from '@uiw/react-codemirror'; +import { StreamLanguage } from '@codemirror/language'; +import { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml'; + +import { makeStyles } from '@material-ui/core/styles'; +import FormControl from '@material-ui/core/FormControl'; +import InputLabel from '@material-ui/core/InputLabel'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; + +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { Form } from '@backstage/plugin-scaffolder-react/alpha'; +import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; + +import { scaffolderTranslationRef } from '../../../translation'; +import { TemplateEditorForm } from './TemplateEditorForm'; + +const useStyles = makeStyles( + theme => ({ + root: { + gridArea: 'pageContent', + display: 'grid', + gridTemplateRows: 'auto 1fr', + }, + controls: { + marginBottom: theme.spacing(2), + }, + code: { + width: '100%', + }, + }), + { name: 'ScaffolderCustomFieldExtensionsPlaygroud' }, +); + +export const CustomFieldPlaygroud = ({ + fieldExtensions = [], +}: { + fieldExtensions?: FieldExtensionOptions[]; +}) => { + const classes = useStyles(); + const { t } = useTranslationRef(scaffolderTranslationRef); + const fieldOptions = fieldExtensions.filter(field => !!field.schema); + const [refreshKey, setRefreshKey] = useState(Date.now()); + const [fieldFormState, setFieldFormState] = useState({}); + const [selectedField, setSelectedField] = useState(fieldOptions[0]); + const sampleFieldTemplate = useMemo( + () => + yaml.stringify({ + parameters: [ + { + title: `${selectedField.name} Example`, + properties: { + [selectedField.name]: { + type: selectedField.schema?.returnValue?.type, + 'ui:field': selectedField.name, + 'ui:options': fieldFormState, + }, + }, + }, + ], + }), + [fieldFormState, selectedField], + ); + + const fieldComponents = useMemo(() => { + return Object.fromEntries( + fieldExtensions.map(({ name, component }) => [name, component]), + ); + }, [fieldExtensions]); + + const handleSelectionChange = useCallback( + (selection: FieldExtensionOptions) => { + setSelectedField(selection); + setFieldFormState({}); + }, + [setFieldFormState, setSelectedField], + ); + + const handleFieldConfigChange = useCallback( + (state: {}) => { + setFieldFormState(state); + // Force TemplateEditorForm to re-render since some fields + // may not be responsive to ui:option changes + setRefreshKey(Date.now()); + }, + [setFieldFormState, setRefreshKey], + ); + + return ( +
+
+ + + {t('templateEditorPage.customFieldExplorer.selectFieldLabel')} + + + +
+
+ + } + aria-controls="panel-code-content" + id="panel-code-header" + > + + {t('templateEditorPage.customFieldExplorer.preview.title')} + + + +
+ +
+
+
+ + } + aria-controls="panel-preview-content" + id="panel-preview-header" + > + + {t('templateEditorPage.customFieldExplorer.fieldPreview.title')} + + + + null} + /> + + + + } + aria-controls="panel-options-content" + id="panel-options-header" + > + + {t('templateEditorPage.customFieldExplorer.fieldForm.title')} + + + +
handleFieldConfigChange(e.formData)} + validator={validator} + schema={selectedField.schema?.uiOptions || {}} + experimental_defaultFormStateBehavior={{ + allOf: 'populateDefaults', + }} + > + +
+
+
+
+
+ ); +}; diff --git a/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldsPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldsPage.tsx new file mode 100644 index 0000000000..2d13847339 --- /dev/null +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldsPage.tsx @@ -0,0 +1,57 @@ +/* + * Copyright 2024 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, { useCallback } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { Page, Header, Content } from '@backstage/core-components'; +import { useRouteRef } from '@backstage/core-plugin-api'; +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; + +import { editRouteRef } from '../../../routes'; +import { scaffolderTranslationRef } from '../../../translation'; + +import { CustomFieldExplorer } from './CustomFieldExplorer'; + +interface CustomFieldsPageProps { + fieldExtensions?: FieldExtensionOptions[]; +} + +export function CustomFieldsPage(props: CustomFieldsPageProps) { + const navigate = useNavigate(); + const editLink = useRouteRef(editRouteRef); + const { t } = useTranslationRef(scaffolderTranslationRef); + + const handleClose = useCallback(() => { + navigate(editLink()); + }, [navigate, editLink]); + + return ( + +
+ + + + + ); +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DirectoryEditorContext.tsx similarity index 94% rename from plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DirectoryEditorContext.tsx index 0edf390bfe..ebc5ab10ba 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DirectoryEditorContext.tsx @@ -14,13 +14,13 @@ * limitations under the License. */ -import { ErrorPanel, Progress } from '@backstage/core-components'; +import { ErrorPanel } from '@backstage/core-components'; import { useAsync, useRerender } from '@react-hookz/web'; import React, { createContext, ReactNode, useContext, useEffect } from 'react'; import { TemplateDirectoryAccess, TemplateFileAccess, -} from '../../lib/filesystem'; +} from '../../../lib/filesystem'; const MAX_SIZE = 1024 * 1024; const MAX_SIZE_MESSAGE = 'This file is too large to be displayed'; @@ -191,20 +191,17 @@ const DirectoryEditorContext = createContext( undefined, ); -export function useDirectoryEditor(): DirectoryEditor { +export function useDirectoryEditor(): DirectoryEditor | undefined { const value = useContext(DirectoryEditorContext); const rerender = useRerender(); useEffect(() => value?.subscribe(rerender), [value, rerender]); - if (!value) { - throw new Error('must be used within a DirectoryEditorProvider'); - } return value; } interface DirectoryEditorProviderProps { - directory: TemplateDirectoryAccess; + directory?: TemplateDirectoryAccess; children?: ReactNode; } @@ -226,13 +223,13 @@ export function DirectoryEditorProvider(props: DirectoryEditorProviderProps) { ); useEffect(() => { - execute(directory); + if (directory) { + execute(directory); + } }, [execute, directory]); if (error) { return ; - } else if (!result) { - return ; } return ( diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.tsx index 12521e3f3f..070a7aaec8 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.tsx @@ -27,7 +27,7 @@ import { useDryRun } from '../DryRunContext'; import { DryRunResultsList } from './DryRunResultsList'; import { DryRunResultsView } from './DryRunResultsView'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles(theme => ({ header: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx index 9f44933466..8305577990 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx @@ -27,9 +27,9 @@ import DeleteIcon from '@material-ui/icons/Delete'; import DownloadIcon from '@material-ui/icons/GetApp'; import React from 'react'; import { useDryRun } from '../DryRunContext'; -import { downloadBlob } from '../../../lib/download'; +import { downloadBlob } from '../../../../lib/download'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles(theme => ({ root: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx index 7de248dd56..422cd6faa9 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx @@ -26,11 +26,11 @@ import CodeMirror from '@uiw/react-codemirror'; import React, { useEffect, useMemo, useState } from 'react'; import { useDryRun } from '../DryRunContext'; import { DryRunResultsSplitView } from './DryRunResultsSplitView'; -import { FileBrowser } from '../../../components/FileBrowser'; +import { FileBrowser } from '../../../../components/FileBrowser'; import { TaskPageLinks } from './TaskPageLinks'; import { TaskStatusStepper } from './TaskStatusStepper'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles({ root: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/IconLink.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/IconLink.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx similarity index 98% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx index 7696051950..ec7d734ca4 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx @@ -32,7 +32,7 @@ import useInterval from 'react-use/esm/useInterval'; import humanizeDuration from 'humanize-duration'; import classNames from 'classnames'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles((theme: Theme) => createStyles({ diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/index.ts b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/index.ts diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditor.tsx similarity index 65% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditor.tsx index a4d5472699..48501e6c6f 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditor.tsx @@ -15,13 +15,15 @@ */ import { makeStyles } from '@material-ui/core/styles'; import React, { useState } from 'react'; +import Paper from '@material-ui/core/Paper'; import type { FormProps, LayoutOptions, } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; -import { TemplateDirectoryAccess } from '../../lib/filesystem'; +import { TemplateDirectoryAccess } from '../../../lib/filesystem'; import { DirectoryEditorProvider } from './DirectoryEditorContext'; +import { TemplateEditorToolbar } from './TemplateEditorToolbar'; import { TemplateEditorBrowser } from './TemplateEditorBrowser'; import { DryRunProvider } from './DryRunContext'; import { TemplateEditorTextArea } from './TemplateEditorTextArea'; @@ -37,17 +39,22 @@ export type ScaffolderTemplateEditorClassKey = | 'results'; const useStyles = makeStyles( - { + theme => ({ // Reset and fix sizing to make sure scrolling behaves correctly root: { + height: '100%', gridArea: 'pageContent', display: 'grid', gridTemplateAreas: ` + "toolbar toolbar toolbar" "browser editor preview" "results results results" `, gridTemplateColumns: '1fr 3fr 2fr', - gridTemplateRows: '1fr auto', + gridTemplateRows: 'auto 1fr auto', + }, + toolbar: { + gridArea: 'toolbar', }, browser: { gridArea: 'browser', @@ -56,51 +63,76 @@ const useStyles = makeStyles( editor: { gridArea: 'editor', overflow: 'auto', + borderLeft: `1px solid ${theme.palette.divider}`, }, preview: { gridArea: 'preview', + position: 'relative', + borderLeft: `1px solid ${theme.palette.divider}`, + backgroundColor: theme.palette.background.default, + }, + scroll: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + padding: theme.spacing(1), overflow: 'auto', }, results: { gridArea: 'results', }, - }, + }), { name: 'ScaffolderTemplateEditor' }, ); export const TemplateEditor = (props: { - directory: TemplateDirectoryAccess; + directory?: TemplateDirectoryAccess; fieldExtensions?: FieldExtensionOptions[]; layouts?: LayoutOptions[]; onClose?: () => void; formProps?: FormProps; + onLoad?: () => void; }) => { const classes = useStyles(); - const [errorText, setErrorText] = useState(); return ( -
+ +
+ +
- +
- +
+ +
-
+
); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.test.tsx similarity index 95% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.test.tsx index cec311a5cd..958548a131 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.test.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.test.tsx @@ -17,7 +17,7 @@ import { renderInTestApp } from '@backstage/test-utils'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { MockFileSystemAccess } from '../../lib/filesystem/MockFileSystemAccess'; +import { MockFileSystemAccess } from '../../../lib/filesystem/MockFileSystemAccess'; import { DirectoryEditorProvider } from './DirectoryEditorContext'; import { TemplateEditorBrowser } from './TemplateEditorBrowser'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.tsx similarity index 66% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.tsx index 8bea86b074..b478502f6e 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import Grid from '@material-ui/core/Grid'; import Divider from '@material-ui/core/Divider'; import IconButton from '@material-ui/core/IconButton'; import Tooltip from '@material-ui/core/Tooltip'; @@ -22,40 +23,36 @@ import RefreshIcon from '@material-ui/icons/Refresh'; import SaveIcon from '@material-ui/icons/Save'; import React from 'react'; import { useDirectoryEditor } from './DirectoryEditorContext'; -import { FileBrowser } from '../../components/FileBrowser'; +import { FileBrowser } from '../../../components/FileBrowser'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; -const useStyles = makeStyles(theme => ({ - button: { - padding: theme.spacing(1), - }, - buttons: { - display: 'flex', - flexFlow: 'row nowrap', - alignItems: 'center', - justifyContent: 'flex-start', - }, - buttonsGap: { - flex: '1 1 auto', - }, - buttonsDivider: { - marginBottom: theme.spacing(1), - }, -})); +const useStyles = makeStyles( + theme => ({ + grid: { + '& svg': { + margin: theme.spacing(1), + }, + }, + closeButton: { + marginLeft: 'auto', + }, + }), + { name: 'ScaffolderTemplateEditorBrowser' }, +); /** The local file browser for the template editor */ export function TemplateEditorBrowser(props: { onClose?: () => void }) { const classes = useStyles(); const directoryEditor = useDirectoryEditor(); - const changedFiles = directoryEditor.files.filter(file => file.dirty); + const changedFiles = directoryEditor?.files.filter(file => file.dirty); const { t } = useTranslationRef(scaffolderTranslationRef); const handleClose = () => { if (!props.onClose) { return; } - if (changedFiles.length > 0) { + if (changedFiles?.length) { // eslint-disable-next-line no-alert const accepted = window.confirm( t('templateEditorPage.templateEditorBrowser.closeConfirmMessage'), @@ -69,14 +66,14 @@ export function TemplateEditorBrowser(props: { onClose?: () => void }) { return ( <> -
+ !file.dirty)} - onClick={() => directoryEditor.save()} + size="small" + disabled={directoryEditor?.files.every(file => !file.dirty)} + onClick={() => directoryEditor?.save()} > @@ -86,27 +83,27 @@ export function TemplateEditorBrowser(props: { onClose?: () => void }) { 'templateEditorPage.templateEditorBrowser.reloadIconTooltip', )} > - directoryEditor.reload()} - > + directoryEditor?.reload()}> -
- + -
- +
+ file.path)} + selected={directoryEditor?.selectedFile?.path ?? ''} + onSelect={directoryEditor?.setSelectedFile} + filePaths={directoryEditor?.files.map(file => file.path) ?? []} /> ); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorForm.tsx similarity index 84% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorForm.tsx index 41a2ffb476..56ebaabb83 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorForm.tsx @@ -16,9 +16,12 @@ import { useApiHolder } from '@backstage/core-plugin-api'; import { JsonObject, JsonValue } from '@backstage/types'; import { makeStyles } from '@material-ui/core/styles'; +import Paper from '@material-ui/core/Paper'; +import Typography from '@material-ui/core/Typography'; import React, { Component, ReactNode, useMemo, useState } from 'react'; import useDebounce from 'react-use/esm/useDebounce'; import yaml from 'yaml'; +import { useTranslationRef } from '@backstage/frontend-plugin-api'; import { LayoutOptions, TemplateParameterSchema, @@ -32,19 +35,11 @@ import { import { useDryRun } from './DryRunContext'; import { useDirectoryEditor } from './DirectoryEditorContext'; +import { scaffolderTranslationRef } from '../../../translation'; + const useStyles = makeStyles({ containerWrapper: { - position: 'relative', width: '100%', - height: '100%', - }, - container: { - position: 'absolute', - top: 0, - bottom: 0, - left: 0, - right: 0, - overflow: 'auto', }, }); @@ -107,6 +102,7 @@ export function TemplateEditorForm(props: TemplateEditorFormProps) { } = props; const classes = useStyles(); const apiHolder = useApiHolder(); + const { t } = useTranslationRef(scaffolderTranslationRef); const [steps, setSteps] = useState(); @@ -181,26 +177,28 @@ export function TemplateEditorForm(props: TemplateEditorFormProps) { [contentIsSpec, content, apiHolder], ); - if (!steps) { - return null; - } - return (
-
- - { - await onDryRun?.(options); - }} - layouts={layouts} - formProps={props.formProps} - /> - -
+ {steps ? ( + + + { + await onDryRun?.(options); + }} + layouts={layouts} + formProps={props.formProps} + /> + + + ) : ( + + {t('templateEditorForm.stepper.emptyText')} + + )}
); } @@ -216,7 +214,7 @@ export function TemplateEditorFormDirectoryEditorDryRun( const dryRun = useDryRun(); const directoryEditor = useDirectoryEditor(); - const { selectedFile } = directoryEditor; + const { selectedFile } = directoryEditor ?? {}; const handleDryRun = async (data: JsonObject) => { if (!selectedFile) { @@ -227,7 +225,7 @@ export function TemplateEditorFormDirectoryEditorDryRun( await dryRun.execute({ templateContent: selectedFile.content, values: data, - files: directoryEditor.files, + files: directoryEditor?.files ?? [], }); setErrorText(); } catch (e) { @@ -241,7 +239,7 @@ export function TemplateEditorFormDirectoryEditorDryRun( ? selectedFile.content : undefined; - return ( + return directoryEditor ? ( - ); + ) : null; } TemplateEditorForm.DirectoryEditorDryRun = diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorIntro.tsx similarity index 75% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorIntro.tsx index d785708a51..c65ef569a6 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorIntro.tsx @@ -22,9 +22,9 @@ import Tooltip from '@material-ui/core/Tooltip'; import Typography from '@material-ui/core/Typography'; import InfoOutlinedIcon from '@material-ui/icons/InfoOutlined'; import { makeStyles } from '@material-ui/core/styles'; -import { WebFileSystemAccess } from '../../lib/filesystem'; +import { WebFileSystemAccess } from '../../../lib/filesystem'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles(theme => ({ introText: { @@ -46,7 +46,9 @@ const useStyles = makeStyles(theme => ({ interface EditorIntroProps { style?: JSX.IntrinsicElements['div']['style']; - onSelect?: (option: 'local' | 'form' | 'field-explorer') => void; + onSelect?: ( + option: 'create-template' | 'local' | 'form' | 'field-explorer', + ) => void; } export function TemplateEditorIntro(props: EditorIntroProps) { @@ -93,6 +95,47 @@ export function TemplateEditorIntro(props: EditorIntroProps) { ); + const cardCreateLocal = ( + + props.onSelect?.('create-template')} + > + + + {t('templateEditorPage.templateEditorIntro.createLocal.title')} + + + {t( + 'templateEditorPage.templateEditorIntro.createLocal.description', + )} + + + + {!supportsLoad && ( +
+ + + +
+ )} +
+ ); + const cardFormEditor = ( props.onSelect?.('form')}> @@ -140,6 +183,7 @@ export function TemplateEditorIntro(props: EditorIntroProps) { }} > {supportsLoad && cardLoadLocal} + {supportsLoad && cardCreateLocal} {cardFormEditor} {!supportsLoad && cardLoadLocal} {cardFieldExplorer} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorPage.tsx similarity index 50% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorPage.tsx index 03d656c98d..8d71db2551 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorPage.tsx @@ -13,57 +13,36 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { useState } from 'react'; +import React from 'react'; import { Content, Header, Page } from '@backstage/core-components'; -import { - TemplateDirectoryAccess, - WebFileSystemAccess, -} from '../../lib/filesystem'; -import { CustomFieldExplorer } from './CustomFieldExplorer'; -import { TemplateEditor } from './TemplateEditor'; -import { TemplateFormPreviewer } from './TemplateFormPreviewer'; -import { - FieldExtensionOptions, - FormProps, - type LayoutOptions, -} from '@backstage/plugin-scaffolder-react'; + +import { WebFileSystemAccess } from '../../../lib/filesystem'; + import { TemplateEditorIntro } from './TemplateEditorIntro'; import { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha'; import { useNavigate } from 'react-router-dom'; import { useRouteRef } from '@backstage/core-plugin-api'; import { actionsRouteRef, + editorRouteRef, + customFieldsRouteRef, rootRouteRef, scaffolderListTaskRouteRef, -} from '../../routes'; + templateFormRouteRef, +} from '../../../routes'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; +import { WebFileSystemStore } from '../../../lib/filesystem/WebFileSystemAccess'; +import { createExampleTemplate } from '../../../lib/filesystem/createExampleTemplate'; -type Selection = - | { - type: 'local'; - directory: TemplateDirectoryAccess; - } - | { - type: 'form'; - } - | { - type: 'field-explorer'; - }; - -interface TemplateEditorPageProps { - defaultPreviewTemplate?: string; - customFieldExtensions?: FieldExtensionOptions[]; - layouts?: LayoutOptions[]; - formProps?: FormProps; -} - -export function TemplateEditorPage(props: TemplateEditorPageProps) { - const [selection, setSelection] = useState(); +export function TemplateEditorPage() { const navigate = useNavigate(); const actionsLink = useRouteRef(actionsRouteRef); const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const createLink = useRouteRef(rootRouteRef); + const editorLink = useRouteRef(editorRouteRef); + const customFieldsLink = useRouteRef(customFieldsRouteRef); + const templateFormLink = useRouteRef(templateFormRouteRef); const { t } = useTranslationRef(scaffolderTranslationRef); const scaffolderPageContextMenuProps = { @@ -73,54 +52,6 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { onCreateClicked: () => navigate(createLink()), }; - let content: JSX.Element | null = null; - if (selection?.type === 'local') { - content = ( - setSelection(undefined)} - layouts={props.layouts} - formProps={props.formProps} - /> - ); - } else if (selection?.type === 'form') { - content = ( - setSelection(undefined)} - layouts={props.layouts} - formProps={props.formProps} - /> - ); - } else if (selection?.type === 'field-explorer') { - content = ( - setSelection(undefined)} - /> - ); - } else { - content = ( - - { - if (option === 'local') { - WebFileSystemAccess.requestDirectoryAccess() - .then(directory => setSelection({ type: 'local', directory })) - .catch(() => {}); - } else if (option === 'form') { - setSelection({ type: 'form' }); - } else if (option === 'field-explorer') { - setSelection({ type: 'field-explorer' }); - } - }} - /> - - ); - } - return (
- {content} + + { + if (option === 'local') { + WebFileSystemAccess.requestDirectoryAccess() + .then(directory => WebFileSystemStore.setDirectory(directory)) + .then(() => navigate(editorLink())) + .catch(() => {}); + } else if (option === 'create-template') { + WebFileSystemAccess.requestDirectoryAccess() + .then(directory => { + createExampleTemplate(directory).then(() => { + WebFileSystemStore.setDirectory(directory); + navigate(editorLink()); + }); + }) + .catch(() => {}); + } else if (option === 'form') { + navigate(templateFormLink()); + } else if (option === 'field-explorer') { + navigate(customFieldsLink()); + } + }} + /> +
); } diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorTextArea.tsx similarity index 84% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorTextArea.tsx index 696b21d1df..34788f6cb1 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorTextArea.tsx @@ -20,6 +20,8 @@ import { showPanel } from '@codemirror/view'; import IconButton from '@material-ui/core/IconButton'; import Paper from '@material-ui/core/Paper'; import Tooltip from '@material-ui/core/Tooltip'; +import Link from '@material-ui/core/Link'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import RefreshIcon from '@material-ui/icons/Refresh'; import SaveIcon from '@material-ui/icons/Save'; @@ -28,7 +30,7 @@ import CodeMirror from '@uiw/react-codemirror'; import React, { useMemo } from 'react'; import { useDirectoryEditor } from './DirectoryEditorContext'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles(theme => ({ container: { @@ -36,6 +38,12 @@ const useStyles = makeStyles(theme => ({ width: '100%', height: '100%', }, + typography: { + padding: theme.spacing(1.5), + }, + button: { + verticalAlign: 'top', + }, codeMirror: { position: 'absolute', top: 0, @@ -142,10 +150,33 @@ export function TemplateEditorTextArea(props: { /** A version of the TemplateEditorTextArea that is connected to the DirectoryEditor context */ export function TemplateEditorDirectoryEditorTextArea(props: { errorText?: string; + onLoad?: () => void; }) { + const classes = useStyles(); const directoryEditor = useDirectoryEditor(); - const actions = directoryEditor.selectedFile?.dirty + if (!directoryEditor) { + return ( + + Please{' '} + + load + {' '} + a template directory. + + ); + } + + const actions = directoryEditor?.selectedFile?.dirty ? { onSave: () => directoryEditor.save(), onReload: () => directoryEditor.reload(), @@ -158,7 +189,9 @@ export function TemplateEditorDirectoryEditorTextArea(props: { directoryEditor.selectedFile?.updateContent(content)} + onUpdate={content => + directoryEditor?.selectedFile?.updateContent(content) + } {...actions} /> ); diff --git a/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorToolbar.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorToolbar.tsx new file mode 100644 index 0000000000..a33915ae01 --- /dev/null +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorToolbar.tsx @@ -0,0 +1,155 @@ +/* + * Copyright 2024 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, { ReactNode, useState } from 'react'; + +import { makeStyles } from '@material-ui/core/styles'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import Tooltip from '@material-ui/core/Tooltip'; +import ButtonGroup from '@material-ui/core/ButtonGroup'; +import Button from '@material-ui/core/Button'; +import Drawer from '@material-ui/core/Drawer'; +import Dialog from '@material-ui/core/Dialog'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogContentText from '@material-ui/core/DialogContentText'; +import DialogActions from '@material-ui/core/DialogActions'; +import ExtensionIcon from '@material-ui/icons/Extension'; +import DescriptionIcon from '@material-ui/icons/Description'; + +import { Link } from '@backstage/core-components'; +import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; + +import { ActionPageContent } from '../../../components/ActionsPage/ActionsPage'; +import { CustomFieldPlaygroud } from './CustomFieldPlaygroud'; + +const useStyles = makeStyles( + theme => ({ + paper: { + width: '40%', + padding: theme.spacing(2), + backgroundColor: theme.palette.background.default, + }, + appbar: { + zIndex: 1, + }, + toolbar: { + display: 'grid', + gridTemplateColumns: 'auto 1fr', + gridGap: theme.spacing(1), + padding: theme.spacing(0, 1), + backgroundColor: theme.palette.background.paper, + }, + toolbarCustomActions: { + display: 'grid', + alignItems: 'center', + gridAutoFlow: 'Column', + gridGap: theme.spacing(1), + }, + toolbarDefaultActions: { + justifySelf: 'end', + }, + }), + { name: 'ScaffolderTemplateEditorToolbar' }, +); + +export function TemplateEditorToolbar(props: { + children?: ReactNode; + fieldExtensions?: FieldExtensionOptions[]; +}) { + const { children, fieldExtensions } = props; + const classes = useStyles(); + const [showFieldsDrawer, setShowFieldsDrawer] = useState(false); + const [showActionsDrawer, setShowActionsDrawer] = useState(false); + const [showPublishModal, setShowPublishModal] = useState(false); + + return ( + + +
{children}
+ + + + + + + + + + setShowFieldsDrawer(false)} + > + + + setShowActionsDrawer(false)} + > + + + setShowPublishModal(false)} + open={showPublishModal} + aria-labelledby="publish-dialog-title" + aria-describedby="publish-dialog-description" + > + Publish changes + + + Follow the instructions below to create or update a template: +
    +
  1. Save the template files in a local directory
  2. +
  3. + Create a pull request to a new or existing git repository +
  4. +
  5. + If the template already exists, the changes will be reflected + in the software catalog once the pull request gets merged +
  6. +
  7. + But if you are creating a new template, follow this{' '} + + documentation + {' '} + to register the new template repository in software catalog +
  8. +
+
+
+ + + +
+
+
+ ); +} diff --git a/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPage.tsx new file mode 100644 index 0000000000..b1f98878ad --- /dev/null +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPage.tsx @@ -0,0 +1,76 @@ +/* + * Copyright 2024 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, { useCallback } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { makeStyles } from '@material-ui/core/styles'; + +import { Page, Header, Content } from '@backstage/core-components'; +import { useRouteRef } from '@backstage/core-plugin-api'; +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { + FormProps, + LayoutOptions, + FieldExtensionOptions, +} from '@backstage/plugin-scaffolder-react'; + +import { editRouteRef } from '../../../routes'; +import { scaffolderTranslationRef } from '../../../translation'; + +import { TemplateFormPreviewer } from './TemplateFormPreviewer'; + +const useStyles = makeStyles({ + root: { + padding: 0, + }, +}); + +interface TemplateFormPageProps { + layouts?: LayoutOptions[]; + formProps?: FormProps; + fieldExtensions?: FieldExtensionOptions[]; + defaultPreviewTemplate?: string; +} + +export function TemplateFormPage(props: TemplateFormPageProps) { + const classes = useStyles(); + const navigate = useNavigate(); + const editLink = useRouteRef(editRouteRef); + const { t } = useTranslationRef(scaffolderTranslationRef); + + const handleClose = useCallback(() => { + navigate(editLink()); + }, [navigate, editLink]); + + return ( + +
+ + + + + ); +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.tsx similarity index 67% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.tsx index 4f79b7f5c2..ca4ae8d8d6 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.tsx @@ -13,18 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Entity } from '@backstage/catalog-model'; import { alertApiRef, useApi } from '@backstage/core-plugin-api'; import { catalogApiRef, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import FormControl from '@material-ui/core/FormControl'; -import IconButton from '@material-ui/core/IconButton'; -import InputLabel from '@material-ui/core/InputLabel'; import LinearProgress from '@material-ui/core/LinearProgress'; -import MenuItem from '@material-ui/core/MenuItem'; +import Paper from '@material-ui/core/Paper'; +import FormControl from '@material-ui/core/FormControl'; +import Input from '@material-ui/core/Input'; import Select from '@material-ui/core/Select'; +import Tooltip from '@material-ui/core/Tooltip'; +import IconButton from '@material-ui/core/IconButton'; +import MenuItem from '@material-ui/core/MenuItem'; import { makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import React, { useCallback, useState } from 'react'; @@ -35,10 +38,11 @@ import { FieldExtensionOptions, FormProps, } from '@backstage/plugin-scaffolder-react'; +import { TemplateEditorToolbar } from './TemplateEditorToolbar'; import { TemplateEditorForm } from './TemplateEditorForm'; import { TemplateEditorTextArea } from './TemplateEditorTextArea'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const EXAMPLE_TEMPLATE_PARAMS_YAML = `# Edit the template parameters below to see how they will render in the scaffolder form UI parameters: @@ -94,27 +98,40 @@ export type ScaffolderTemplateFormPreviewerClassKey = const useStyles = makeStyles( theme => ({ root: { + height: '100%', gridArea: 'pageContent', display: 'grid', gridTemplateAreas: ` - "controls controls" + "toolbar toolbar" "textArea preview" `, gridTemplateRows: 'auto 1fr', gridTemplateColumns: '1fr 1fr', }, - controls: { - gridArea: 'controls', - display: 'flex', - flexFlow: 'row nowrap', - alignItems: 'center', - margin: theme.spacing(1), + toolbar: { + gridArea: 'toolbar', }, textArea: { gridArea: 'textArea', + height: '100%', }, preview: { gridArea: 'preview', + position: 'relative', + borderLeft: `1px solid ${theme.palette.divider}`, + backgroundColor: theme.palette.background.default, + }, + scroll: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + padding: theme.spacing(1), + }, + formControl: { + minWidth: 120, + maxWidth: 300, }, }), { name: 'ScaffolderTemplateFormPreviewer' }, @@ -137,8 +154,9 @@ export const TemplateFormPreviewer = ({ const { t } = useTranslationRef(scaffolderTranslationRef); const alertApi = useApi(alertApiRef); const catalogApi = useApi(catalogApiRef); - const [selectedTemplate, setSelectedTemplate] = useState(''); const [errorText, setErrorText] = useState(); + const [selectedTemplate, setSelectedTemplate] = + useState(null); const [templateOptions, setTemplateOptions] = useState([]); const [templateYaml, setTemplateYaml] = useState(defaultPreviewTemplate); @@ -188,29 +206,45 @@ export const TemplateFormPreviewer = ({ return ( <> {loading && } -
-
- - - {t('templateEditorPage.templateFormPreviewer.title')} - - - - - - - + +
+ + + + + + + + } + renderValue={selected => { + if (!selected) { + return t('templateEditorPage.templateFormPreviewer.title'); + } + return (selected as Entity).metadata.title; + }} + inputProps={{ + 'aria-label': t( + 'templateEditorPage.templateFormPreviewer.title', + ), + }} + > + {templateOptions.map((option, index) => ( + + {option.label} + + ))} + + +
- +
+ +
-
+ ); }; diff --git a/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplatePage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplatePage.tsx new file mode 100644 index 0000000000..b70ceba163 --- /dev/null +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplatePage.tsx @@ -0,0 +1,95 @@ +/* + * Copyright 2024 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, { useCallback } from 'react'; +import useAsyncRetry from 'react-use/esm/useAsyncRetry'; + +import { Page, Header, Content, Progress } from '@backstage/core-components'; +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { + FormProps, + FieldExtensionOptions, + type LayoutOptions, +} from '@backstage/plugin-scaffolder-react'; + +import { scaffolderTranslationRef } from '../../../translation'; +import { + WebFileSystemAccess, + WebFileSystemStore, +} from '../../../lib/filesystem'; +import { TemplateEditor } from './TemplateEditor'; + +import { makeStyles } from '@material-ui/core/styles'; + +const useStyles = makeStyles( + { + content: { + padding: 0, + }, + }, + { name: 'ScaffolderTemplateEditorToolbar' }, +); + +interface TemplatePageProps { + defaultPreviewTemplate?: string; + fieldExtensions?: FieldExtensionOptions[]; + layouts?: LayoutOptions[]; + formProps?: FormProps; +} + +export function TemplatePage(props: TemplatePageProps) { + const classes = useStyles(); + const { t } = useTranslationRef(scaffolderTranslationRef); + + const { value, loading, retry } = useAsyncRetry(async () => { + const directory = await WebFileSystemStore.getDirectory(); + if (!directory) return undefined; + return WebFileSystemAccess.fromHandle(directory); + }, []); + + const handleLoadDirectory = useCallback(() => { + WebFileSystemAccess.requestDirectoryAccess() + .then(WebFileSystemStore.setDirectory) + .then(retry); + }, [retry]); + + const handleCloseDirectory = useCallback(() => { + WebFileSystemStore.setDirectory(undefined).then(retry); + }, [retry]); + + return ( + +
+ + {loading ? ( + + ) : ( + + )} + + + ); +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/index.ts similarity index 85% rename from plugins/scaffolder/src/next/TemplateEditorPage/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/index.ts index 7f70c55ed9..84ab74da98 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/index.ts @@ -14,7 +14,10 @@ * limitations under the License. */ +export { TemplatePage } from './TemplatePage'; +export { TemplateFormPage } from './TemplateFormPage'; export { TemplateEditorPage } from './TemplateEditorPage'; +export { CustomFieldsPage } from './CustomFieldsPage'; export type { ScaffolderCustomFieldExplorerClassKey } from './CustomFieldExplorer'; export type { ScaffolderTemplateEditorClassKey } from './TemplateEditor'; export type { ScaffolderTemplateFormPreviewerClassKey } from './TemplateFormPreviewer'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.tsx diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.test.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.test.tsx index 2ad0752cc8..ba00845577 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.test.tsx @@ -25,7 +25,7 @@ import { TestApiProvider, } from '@backstage/test-utils'; import React from 'react'; -import { rootRouteRef } from '../../routes'; +import { rootRouteRef } from '../../../routes'; import { TemplateListPage } from './TemplateListPage'; describe('TemplateListPage', () => { diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.tsx similarity index 98% rename from plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.tsx index 4c95027af7..8d0c73f0a7 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.tsx @@ -50,14 +50,14 @@ import { scaffolderListTaskRouteRef, selectedTemplateRouteRef, viewTechDocRouteRef, -} from '../../routes'; +} from '../../../routes'; import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { TemplateGroupFilter } from '@backstage/plugin-scaffolder-react'; import { TranslationFunction, useTranslationRef, } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; /** * @alpha diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/alpha/components/TemplateListPage/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TemplateListPage/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateListPage/index.ts diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.test.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.test.tsx index 2639e8149c..689a96b95d 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.test.tsx @@ -28,7 +28,7 @@ import { SecretsContextProvider, } from '@backstage/plugin-scaffolder-react'; import { TemplateWizardPage } from './TemplateWizardPage'; -import { rootRouteRef } from '../../routes'; +import { rootRouteRef } from '../../../routes'; import { ANNOTATION_EDIT_URL } from '@backstage/catalog-model'; import { CatalogApi } from '@backstage/catalog-client'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.tsx index 0524b99f8f..b5e24a7d52 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.tsx @@ -44,9 +44,9 @@ import { rootRouteRef, scaffolderTaskRouteRef, selectedTemplateRouteRef, -} from '../../routes'; +} from '../../../routes'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; import { TemplateWizardPageContextMenu } from './TemplateWizardPageContextMenu'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPageContextMenu.tsx b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPageContextMenu.tsx rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.tsx index 50e406112a..80274cef55 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPageContextMenu.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.tsx @@ -25,7 +25,7 @@ import Edit from '@material-ui/icons/Edit'; import MoreVert from '@material-ui/icons/MoreVert'; import React, { useState } from 'react'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles(theme => ({ button: { diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/index.ts b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TemplateWizardPage/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/index.ts diff --git a/plugins/scaffolder/src/next/index.ts b/plugins/scaffolder/src/alpha/components/index.ts similarity index 100% rename from plugins/scaffolder/src/next/index.ts rename to plugins/scaffolder/src/alpha/components/index.ts diff --git a/plugins/scaffolder/src/next/types.ts b/plugins/scaffolder/src/alpha/components/types.ts similarity index 100% rename from plugins/scaffolder/src/next/types.ts rename to plugins/scaffolder/src/alpha/components/types.ts diff --git a/plugins/scaffolder/src/alpha/extensions.tsx b/plugins/scaffolder/src/alpha/extensions.tsx new file mode 100644 index 0000000000..191dcf407c --- /dev/null +++ b/plugins/scaffolder/src/alpha/extensions.tsx @@ -0,0 +1,52 @@ +/* + * Copyright 2023 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 { + compatWrapper, + convertLegacyRouteRef, +} from '@backstage/core-compat-api'; +import { + NavItemBlueprint, + PageBlueprint, +} from '@backstage/frontend-plugin-api'; +import React from 'react'; +import { rootRouteRef } from '../routes'; +import CreateComponentIcon from '@material-ui/icons/AddCircleOutline'; +import { FormFieldBlueprint } from '@backstage/plugin-scaffolder-react/alpha'; + +export const scaffolderPage = PageBlueprint.make({ + params: { + routeRef: convertLegacyRouteRef(rootRouteRef), + defaultPath: '/create', + loader: () => + import('../components/Router').then(m => compatWrapper()), + }, +}); + +export const scaffolderNavItem = NavItemBlueprint.make({ + params: { + routeRef: convertLegacyRouteRef(rootRouteRef), + title: 'Create...', + icon: CreateComponentIcon, + }, +}); + +export const repoUrlPickerFormField = FormFieldBlueprint.make({ + name: 'repo-url-picker', + params: { + field: () => import('./fields/RepoUrlPicker').then(m => m.RepoUrlPicker), + }, +}); diff --git a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabFile.ts b/plugins/scaffolder/src/alpha/fields/RepoUrlPicker.ts similarity index 54% rename from packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabFile.ts rename to plugins/scaffolder/src/alpha/fields/RepoUrlPicker.ts index 06f3189ba6..add8408b2d 100644 --- a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabFile.ts +++ b/plugins/scaffolder/src/alpha/fields/RepoUrlPicker.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -13,26 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { createFormField } from '@backstage/plugin-scaffolder-react/alpha'; +import { RepoUrlPicker as Component } from '../../components/fields/RepoUrlPicker/RepoUrlPicker'; +import { + RepoUrlPickerFieldSchema, + repoPickerValidation, +} from '../../components'; -import { RepositoryFile } from '../types'; - -/** - * A single file in a GitLab repository. - */ -export class GitlabFile implements RepositoryFile { - readonly #path: string; - readonly #content: string; - - constructor(path: string, content: string) { - this.#path = path; - this.#content = content; - } - - get path(): string { - return this.#path; - } - - async text(): Promise { - return this.#content; - } -} +export const RepoUrlPicker = createFormField({ + component: Component, + name: 'RepoUrlPicker', + validation: repoPickerValidation, + schema: RepoUrlPickerFieldSchema, +}); diff --git a/plugins/scaffolder/src/alpha/index.ts b/plugins/scaffolder/src/alpha/index.ts new file mode 100644 index 0000000000..bd3104a274 --- /dev/null +++ b/plugins/scaffolder/src/alpha/index.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2024 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 { + type FormProps, + type TemplateListPageProps, + type TemplateWizardPageProps, + type ScaffolderCustomFieldExplorerClassKey, + type ScaffolderTemplateEditorClassKey, + type ScaffolderTemplateFormPreviewerClassKey, +} from './components'; + +export { scaffolderTranslationRef } from '../translation'; + +export { default } from './plugin'; diff --git a/plugins/scaffolder/src/alpha/plugin.tsx b/plugins/scaffolder/src/alpha/plugin.tsx new file mode 100644 index 0000000000..54e375e875 --- /dev/null +++ b/plugins/scaffolder/src/alpha/plugin.tsx @@ -0,0 +1,59 @@ +/* + * Copyright 2024 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 { convertLegacyRouteRefs } from '@backstage/core-compat-api'; +import { createFrontendPlugin } from '@backstage/frontend-plugin-api'; +import { + rootRouteRef, + actionsRouteRef, + editRouteRef, + registerComponentRouteRef, + scaffolderListTaskRouteRef, + scaffolderTaskRouteRef, + selectedTemplateRouteRef, + viewTechDocRouteRef, +} from '../routes'; +import { scaffolderApi } from './api'; +import { + repoUrlPickerFormField, + scaffolderNavItem, + scaffolderPage, +} from './extensions'; +import { formFieldsApi } from './api/FormFieldsApi'; + +/** @alpha */ +export default createFrontendPlugin({ + id: 'scaffolder', + routes: convertLegacyRouteRefs({ + root: rootRouteRef, + selectedTemplate: selectedTemplateRouteRef, + ongoingTask: scaffolderTaskRouteRef, + actions: actionsRouteRef, + listTasks: scaffolderListTaskRouteRef, + edit: editRouteRef, + }), + externalRoutes: convertLegacyRouteRefs({ + registerComponent: registerComponentRouteRef, + viewTechDoc: viewTechDocRouteRef, + }), + extensions: [ + scaffolderApi, + scaffolderPage, + scaffolderNavItem, + formFieldsApi, + repoUrlPickerFormField, + ], +}); diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts index 1809ed4c15..93db7386f3 100644 --- a/plugins/scaffolder/src/api.ts +++ b/plugins/scaffolder/src/api.ts @@ -217,12 +217,10 @@ export class ScaffolderClient implements ScaffolderApi { } private streamLogsEventStream({ + isTaskRecoverable, taskId, after, - }: { - taskId: string; - after?: number; - }): Observable { + }: ScaffolderStreamLogsOptions): Observable { return new ObservableImpl(subscriber => { const params = new URLSearchParams(); if (after !== undefined) { @@ -246,14 +244,14 @@ export class ScaffolderClient implements ScaffolderApi { }; const ctrl = new AbortController(); - fetchEventSource(url, { + void fetchEventSource(url, { fetch: this.fetchApi.fetch, signal: ctrl.signal, onmessage(e: EventSourceMessage) { if (e.event === 'log') { processEvent(e); return; - } else if (e.event === 'completion') { + } else if (e.event === 'completion' && !isTaskRecoverable) { processEvent(e); subscriber.complete(); ctrl.abort(); @@ -338,6 +336,21 @@ export class ScaffolderClient implements ScaffolderApi { return await response.json(); } + async retry?(taskId: string): Promise { + const baseUrl = await this.discoveryApi.getBaseUrl('scaffolder'); + const url = `${baseUrl}/v2/tasks/${encodeURIComponent(taskId)}/retry`; + + const response = await this.fetchApi.fetch(url, { + method: 'POST', + }); + + if (!response.ok) { + throw await ResponseError.fromResponse(response); + } + + return await response.json(); + } + async autocomplete({ token, resource, diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 2f9bcba279..0949d948fc 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { Fragment, useState } from 'react'; +import React, { Fragment, useEffect, useState } from 'react'; import useAsync from 'react-use/esm/useAsync'; import { ActionExample, @@ -38,6 +38,7 @@ import { JSONSchema7, JSONSchema7Definition } from 'json-schema'; import classNames from 'classnames'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import ExpandLessIcon from '@material-ui/icons/ExpandLess'; +import LinkIcon from '@material-ui/icons/Link'; import { useApi, useRouteRef } from '@backstage/core-plugin-api'; import { @@ -46,6 +47,7 @@ import { EmptyState, ErrorPanel, Header, + Link, MarkdownContent, Page, Progress, @@ -85,6 +87,9 @@ const useStyles = makeStyles(theme => ({ color: theme.palette.error.light, }, }, + link: { + paddingLeft: theme.spacing(1), + }, })); const ExamplesTable = (props: { examples: ActionExample[] }) => { @@ -115,16 +120,23 @@ const ExamplesTable = (props: { examples: ActionExample[] }) => { ); }; -const ActionPageContent = () => { +export const ActionPageContent = () => { const api = useApi(scaffolderApiRef); const { t } = useTranslationRef(scaffolderTranslationRef); const classes = useStyles(); const { loading, value, error } = useAsync(async () => { return api.listActions(); - }); + }, [api]); + const [isExpanded, setIsExpanded] = useState<{ [key: string]: boolean }>({}); + useEffect(() => { + if (value && window.location.hash) { + document.querySelector(window.location.hash)?.scrollIntoView(); + } + }, [value]); + if (loading) { return ; } @@ -295,9 +307,20 @@ const ActionPageContent = () => { ); return ( - + {action.id} + + + {action.description && } {action.schema?.input && ( diff --git a/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx b/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx index 1273b8ad09..9c5dc84249 100644 --- a/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx +++ b/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx @@ -21,12 +21,13 @@ import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import ChevronRightIcon from '@material-ui/icons/ChevronRight'; import TreeItem from '@material-ui/lab/TreeItem'; -const useStyles = makeStyles({ +const useStyles = makeStyles(theme => ({ root: { whiteSpace: 'nowrap', overflowY: 'auto', + padding: theme.spacing(1), }, -}); +})); export type FileEntry = | { diff --git a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx index 00efed45ba..44f3d46974 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx @@ -113,10 +113,10 @@ export const OwnerListPicker = (props: { - {group.items.map(item => ( + {group.items.map((item, index) => ( onSelectOwner(item.id as 'owned' | 'all')} selected={item.id === filter} diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx index 9cd1353ae1..c172c2122f 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx @@ -13,22 +13,48 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import { renderInTestApp } from '@backstage/test-utils'; - import React from 'react'; import { CreatedAtColumn } from './CreatedAtColumn'; -import { DateTime } from 'luxon'; +import { renderInTestApp } from '@backstage/test-utils'; describe('', () => { - it('should render the column with the time', async () => { - const props = { - createdAt: DateTime.now().toISO()!, - }; + const testDate = '2024-09-22T13:30:00Z'; - const { getByText } = await renderInTestApp(); + const mockNavigatorLanguage = (language: string) => { + jest.spyOn(window.navigator, 'language', 'get').mockReturnValue(language); + }; - const text = getByText('0 seconds ago'); - expect(text).toBeDefined(); + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('should render the column using mocked locale (de-DE)', async () => { + mockNavigatorLanguage('de-DE'); + const { getByText } = await renderInTestApp( + , + ); + expect(getByText('22.9.2024, 13:30:00')).toBeDefined(); + }); + + it('should render the column with the default locale (en-US)', async () => { + mockNavigatorLanguage(''); + const { getByText } = await renderInTestApp( + , + ); + expect(getByText('9/22/2024, 1:30:00 PM')).toBeDefined(); + }); + + it('should render the column with a specified locale (fr-FR)', async () => { + const { getByText } = await renderInTestApp( + , + ); + expect(getByText('22/09/2024 13:30:00')).toBeDefined(); + }); + + it('should render the column with a specified locale (en-DE)', async () => { + const { getByText } = await renderInTestApp( + , + ); + expect(getByText('22/09/2024, 13:30:00')).toBeDefined(); }); }); diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx index 3b47287fd6..525e4cea04 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx @@ -13,20 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { DateTime, Interval } from 'luxon'; -import humanizeDuration from 'humanize-duration'; +import { DateTime } from 'luxon'; import React from 'react'; import Typography from '@material-ui/core/Typography'; -export const CreatedAtColumn = ({ createdAt }: { createdAt: string }) => { - const createdAtTime = DateTime.fromISO(createdAt); - const formatted = Interval.fromDateTimes(createdAtTime, DateTime.local()) - .toDuration() - .valueOf(); +interface CreatedAtColumnProps { + createdAt: string; + locale?: string; +} - return ( - - {humanizeDuration(formatted, { round: true })} ago - - ); +export const CreatedAtColumn: React.FC = ({ + createdAt, + locale, +}) => { + const createdAtTime = DateTime.fromISO(createdAt); + + const userLocale = locale || window.navigator.language || 'en-US'; + + const formatted = createdAtTime.setLocale(userLocale).toLocaleString({ + ...DateTime.DATETIME_SHORT_WITH_SECONDS, + }); + + return {formatted}; }; diff --git a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx index e0ab01fc67..f189a6a03c 100644 --- a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx +++ b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx @@ -23,7 +23,8 @@ import Popover from '@material-ui/core/Popover'; import { makeStyles, Theme, useTheme } from '@material-ui/core/styles'; import { useAsync } from '@react-hookz/web'; import Cancel from '@material-ui/icons/Cancel'; -import Retry from '@material-ui/icons/Repeat'; +import Repeat from '@material-ui/icons/Repeat'; +import Replay from '@material-ui/icons/Replay'; import Toc from '@material-ui/icons/Toc'; import ControlPointIcon from '@material-ui/icons/ControlPoint'; import MoreVert from '@material-ui/icons/MoreVert'; @@ -41,8 +42,11 @@ import { scaffolderTranslationRef } from '../../translation'; type ContextMenuProps = { cancelEnabled?: boolean; + canRetry: boolean; + isRetryableTask: boolean; logsVisible?: boolean; buttonBarVisible?: boolean; + onRetry?: () => void; onStartOver?: () => void; onToggleLogs?: (state: boolean) => void; onToggleButtonBar?: (state: boolean) => void; @@ -58,8 +62,11 @@ const useStyles = makeStyles(() => ({ export const ContextMenu = (props: ContextMenuProps) => { const { cancelEnabled, + canRetry, + isRetryableTask, logsVisible, buttonBarVisible, + onRetry, onStartOver, onToggleLogs, onToggleButtonBar, @@ -147,10 +154,22 @@ export const ContextMenu = (props: ContextMenuProps) => { data-testid="start-over-task" > - + + {isRetryableTask && ( + + + + + + + )} ({ cancelButton: { marginRight: theme.spacing(1), }, + retryButton: { + marginRight: theme.spacing(1), + }, logsVisibilityButton: { marginRight: theme.spacing(1), }, @@ -130,6 +133,12 @@ export const OngoingTask = (props: { return 0; }, [steps]); + const isRetryableTask = + taskStream.task?.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy === + 'startOver'; + + const canRetry = canReadTask && canCreateTask && isRetryableTask; + const startOver = useCallback(() => { const { namespace, name } = taskStream.task?.spec.templateInfo?.entity?.metadata ?? {}; @@ -157,6 +166,13 @@ export const OngoingTask = (props: { templateRouteRef, ]); + const [{ status: _ }, { execute: triggerRetry }] = useAsync(async () => { + if (taskId) { + analytics.captureEvent('retried', 'Template has been retried'); + await scaffolderApi.retry?.(taskId); + } + }); + const [{ status: cancelStatus }, { execute: triggerCancel }] = useAsync( async () => { if (taskId) { @@ -190,9 +206,12 @@ export const OngoingTask = (props: { > {t('ongoingTask.cancelButtonTitle')} + {isRetryableTask && ( + + )}