diff --git a/.changeset/1724.md b/.changeset/1724.md new file mode 100644 index 0000000000..2ac03f94e9 --- /dev/null +++ b/.changeset/1724.md @@ -0,0 +1,27 @@ +--- +'@backstage/cli': minor +'@backstage/plugin-api-docs': minor +'@backstage/plugin-app-backend': minor +'@backstage/plugin-auth-backend': minor +'@backstage/plugin-catalog-graphql': minor +'@backstage/plugin-catalog': minor +'@backstage/plugin-circleci': minor +'@backstage/plugin-explore': minor +'@backstage/plugin-gcp-projects': minor +'@backstage/plugin-github-actions': minor +'@backstage/plugin-gitops-profiles': minor +'@backstage/plugin-graphiql': minor +'@backstage/plugin-jenkins': minor +'@backstage/plugin-kubernetes': minor +'@backstage/plugin-lighthouse': minor +'@backstage/plugin-newrelic': minor +'@backstage/plugin-register-component': minor +'@backstage/plugin-rollbar': minor +'@backstage/plugin-scaffolder': minor +'@backstage/plugin-sentry': minor +'@backstage/plugin-tech-radar': minor +'@backstage/plugin-techdocs': minor +'@backstage/plugin-welcome': minor +--- + +Create backend plugin through CLI diff --git a/.changeset/2284.md b/.changeset/2284.md new file mode 100644 index 0000000000..655cc5a3e8 --- /dev/null +++ b/.changeset/2284.md @@ -0,0 +1,11 @@ +--- +'@backstage/core-api': minor +'@backstage/core': minor +'@backstage/plugin-auth-backend': minor +--- + +Add SAML login to backstage + +![](https://user-images.githubusercontent.com/872486/92251660-bb9e3400-eeff-11ea-86fe-1f2a0262cd31.png) + +![](https://user-images.githubusercontent.com/872486/93851658-1a76f200-fce3-11ea-990b-26ca1a327a15.png) diff --git a/.changeset/2515.md b/.changeset/2515.md new file mode 100644 index 0000000000..32f5edd6b7 --- /dev/null +++ b/.changeset/2515.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-cloudbuild': minor +--- + +Releasing Google Cloud Build Plugin diff --git a/.changeset/2532.md b/.changeset/2532.md new file mode 100644 index 0000000000..14307f6c08 --- /dev/null +++ b/.changeset/2532.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-model': minor +--- + +Add handling and docs for entity references diff --git a/.changeset/2535.md b/.changeset/2535.md new file mode 100644 index 0000000000..bd28f3ce03 --- /dev/null +++ b/.changeset/2535.md @@ -0,0 +1,14 @@ +--- +'@backstage/core': patch +'@backstage/theme': patch +--- + +Fix banner position and color + +This PR closes: #2245 + +The "fixed" props added to control the position of the banner. When it is set to true the banner will be shown in bottom of that page and the width will be based on the content of the message. + +![](https://user-images.githubusercontent.com/15106494/93765685-999df480-fc15-11ea-8fa5-11cac5836cf1.png) + +![](https://user-images.githubusercontent.com/15106494/93765697-9e62a880-fc15-11ea-92af-b6a7fee4bb21.png) diff --git a/.changeset/2541.md b/.changeset/2541.md new file mode 100644 index 0000000000..1ba29da040 --- /dev/null +++ b/.changeset/2541.md @@ -0,0 +1,5 @@ +--- +'@backstage/theme': minor +--- + +Tweak dark mode colors diff --git a/.changeset/2543.md b/.changeset/2543.md new file mode 100644 index 0000000000..00311ade45 --- /dev/null +++ b/.changeset/2543.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Add Azure DevOps support to the scaffolder backend + +This adds support for Azure DevOps to the scaffolder (preparer & publisher). I thought I should get this in there now since #2426 has been merged. I had a previous PR with only the preparer but I closed that in favor of this one. + +I stayed with the 'azure/api' structure but I guess we should try and go the same way as with GitHub here #2501 diff --git a/.changeset/2562.md b/.changeset/2562.md new file mode 100644 index 0000000000..716f370ad9 --- /dev/null +++ b/.changeset/2562.md @@ -0,0 +1,7 @@ +--- +'@backstage/create-app': minor +'@backstage/plugin-auth-backend': minor +'@backstage/plugin-techdocs-backend': minor +--- + +Change the default backend plugin mount point to /api diff --git a/.changeset/2563.md b/.changeset/2563.md new file mode 100644 index 0000000000..318d5cf5ef --- /dev/null +++ b/.changeset/2563.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-github-actions': minor +--- + +Adds a widget to show recent git workflow runs to the github actions plugin. The default setting is the last 5 runs across all branches but both branch and the number of runs are configurable. diff --git a/.changeset/2565.md b/.changeset/2565.md new file mode 100644 index 0000000000..92253101ee --- /dev/null +++ b/.changeset/2565.md @@ -0,0 +1,59 @@ +--- +'@backstage/core-api': patch +--- + +Add initial RouteRefRegistry + +Starting out some work to bring routing back and working as part of the work towards finalizing #1536 + +This is some of the groundwork of an experiment we're working on to enable routing via RouteRefs, while letting the app itself look something like this: + +```jsx +const App = () => ( + + + + {' '} + // catalogRouteRef + + + + + + + // statusRouteRef + + + + + + + + + + // sentryRouteRef + + + + + + + + + + + + + + + +); +``` + +As part of inverting the composition of the app, route refs and routing in general was somewhat broken, intentionally. Right now it's not really possible to easily route to different parts of the app from a plugin, or even different parts of the plugin that are not within the same router. + +The core part of the experiment is to construct a map of ApiRef[] -> path overrides. Each key in the map is the list of route refs to traversed to reach a leaf in the routing tree, and the value is the path override at that point. For example, the above tree would add entries like [techDocsRouteRef] -> '/docs', and [entityRouteRef, apiDocsRouteRef] -> '/api'. By mapping out the entire app in this structure, the idea is that we can navigate to any point in the app using RouteRefs. + +The RouteRefRegistry is an implementation of such a map, and the idea is to add it in master to make it a bit easier to experiment and iterate. This is not an exposed API at this point. + +We've explored a couple of alternatives for how to enable routing, but it's boiled down to either a solution centred around the route map mentioned above, or treating all routes as static and globally unique, with no room for flexibility, customization or conflicts between different plugins. We're starting out pursuing this options 😁. We also expect that a the app-wide routing table will make things like dynamic loading a lot cleaner, as there would be a much more clear handoff between the main chunk and dynamic chunks. diff --git a/.changeset/2575.md b/.changeset/2575.md new file mode 100644 index 0000000000..b08f50ed13 --- /dev/null +++ b/.changeset/2575.md @@ -0,0 +1,5 @@ +--- +'@backstage/core': minor +--- + +Fix dense in Structured Metadata Table diff --git a/.changeset/2586.md b/.changeset/2586.md new file mode 100644 index 0000000000..568adb8a3e --- /dev/null +++ b/.changeset/2586.md @@ -0,0 +1,6 @@ +--- +'@backstage/catalog-model': minor +'@backstage/plugin-catalog-backend': minor +--- + +Entirely case insensitive read path of entities diff --git a/.changeset/2587.md b/.changeset/2587.md new file mode 100644 index 0000000000..910de1ca04 --- /dev/null +++ b/.changeset/2587.md @@ -0,0 +1,9 @@ +--- +'@backstage/catalog-model': minor +--- + +Add the User & Group entities + +A user describes a person, such as an employee, a contractor, or similar. Users belong to Group entities in the catalog. + +A group describes an organizational entity, such as for example a team, a business unit, or a loose collection of people in an interest group. Members of these groups are modeled in the catalog as kind User. diff --git a/.changeset/2597.md b/.changeset/2597.md new file mode 100644 index 0000000000..9db25e8d0e --- /dev/null +++ b/.changeset/2597.md @@ -0,0 +1,6 @@ +--- +'@backstage/catalog-model': minor +'@backstage/plugin-catalog-backend': minor +--- + +Add ApiDefinitionAtLocationProcessor that allows to load a API definition from another location diff --git a/.changeset/2598.md b/.changeset/2598.md new file mode 100644 index 0000000000..03e10e7db8 --- /dev/null +++ b/.changeset/2598.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-techdocs': minor +--- + +Add a message if techdocs takes long time to load + +Fixes #2416. + +The UI after the change should look like this: + +![techdocs-progress-bar](https://user-images.githubusercontent.com/33940798/94189286-296ac980-fec8-11ea-9051-1b3db938d12f.gif) diff --git a/.changeset/2600.md b/.changeset/2600.md new file mode 100644 index 0000000000..6fc9775fa1 --- /dev/null +++ b/.changeset/2600.md @@ -0,0 +1,19 @@ +--- +'@backstage/plugin-techdocs-backend': minor +'@backstage/plugin-proxy-backend': minor +'@backstage/plugin-auth-backend': minor +'@backstage/create-app': minor +'@backstage/backend-common': minor +--- + +Add service discovery interface and implement for single host deployments + +Fixes #1847, #2596 + +Went with an interface similar to the frontend DiscoveryApi, since it's dead simple but still provides a lot of flexibility in the implementation. + +Also ended up with two different methods, one for internal endpoint discovery and one for external. The two use-cases are explained a bit more in the docs, but basically it's service-to-service vs callback URLs. + +This did get me thinking about uniqueness and that we're heading towards a global namespace for backend plugin IDs. That's probably fine, but if we're happy with that we should leverage it a bit more to simplify the backend setup. For example we'd have each plugin provide its own ID and not manually mount on paths in the backend. + +Draft until we're happy with the implementation, then I can add more docs and changelog entry. Also didn't go on a thorough hunt for places where discovery can be used, but I don't think there are many since it's been pretty awkward to do service-to-service communication. diff --git a/.changeset/2603.md b/.changeset/2603.md new file mode 100644 index 0000000000..c24d2ea033 --- /dev/null +++ b/.changeset/2603.md @@ -0,0 +1,8 @@ +--- +'@backstage/backend-common': minor +'@backstage/create-app': minor +--- + +Make CSP configurable to fix app-backend served app not being able to fetch + +See discussion [here on discord](https://discordapp.com/channels/687207715902193673/687235481154617364/758721460163575850) diff --git a/.changeset/2606.md b/.changeset/2606.md new file mode 100644 index 0000000000..f6059e7705 --- /dev/null +++ b/.changeset/2606.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Move auth provider router creation to router diff --git a/.changeset/2609.md b/.changeset/2609.md new file mode 100644 index 0000000000..6bb8ab7a40 --- /dev/null +++ b/.changeset/2609.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Sync scaffolded backend with example diff --git a/.changeset/2610.md b/.changeset/2610.md new file mode 100644 index 0000000000..92ec8dcc0c --- /dev/null +++ b/.changeset/2610.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-circleci': minor +--- + +Refactor to use DiscoveryApi diff --git a/.changeset/2611.md b/.changeset/2611.md new file mode 100644 index 0000000000..cbf3129038 --- /dev/null +++ b/.changeset/2611.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Remove discovery api override diff --git a/.changeset/2612.md b/.changeset/2612.md new file mode 100644 index 0000000000..bf093d8f77 --- /dev/null +++ b/.changeset/2612.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins': patch +--- + +Refactor to use DiscoveryApi diff --git a/.changeset/2613.md b/.changeset/2613.md new file mode 100644 index 0000000000..cf8c1a155a --- /dev/null +++ b/.changeset/2613.md @@ -0,0 +1,12 @@ +--- +'@backstage/plugin-auth-backend': minor +--- + +Initial implementation of catalog user lookup + +This adds a basic catalog client + method for the Google provider to look up users in the catalog. It expects to find a single user entity in the catalog with a google.com/email annotation that matches the email of the Google profile. + +Right now it falls back to the old behavior of splitting the email, since I don't wanna break the sign-in flow for existing apps, not yet anyway x). + +- Added "@backstage/catalog-model@^0.1.1-alpha.23" as a dependency +- Added "node-fetch@^2.6.1" as a dependency diff --git a/.changeset/2614.md b/.changeset/2614.md new file mode 100644 index 0000000000..7e2660bc80 --- /dev/null +++ b/.changeset/2614.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': minor +--- + +Default to using internal scope for new plugins diff --git a/.changeset/2615.md b/.changeset/2615.md new file mode 100644 index 0000000000..412b8127c4 --- /dev/null +++ b/.changeset/2615.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': minor +--- + +Use localhost to fall back to IPv4 if IPv6 isn't available diff --git a/.changeset/2616.md b/.changeset/2616.md new file mode 100644 index 0000000000..9a70c0e79f --- /dev/null +++ b/.changeset/2616.md @@ -0,0 +1,7 @@ +--- +'@backstage/create-app': minor +--- + +Remove identity-backend + +Not used, and we're heading down the route of identities in the catalog diff --git a/.changeset/2623.md b/.changeset/2623.md new file mode 100644 index 0000000000..abd5ce7a4c --- /dev/null +++ b/.changeset/2623.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog': minor +--- + +Created EntityNotFound component for catalog which displays the 404 page when entity is not found. + +Fixes #2266 diff --git a/.changeset/2624.md b/.changeset/2624.md new file mode 100644 index 0000000000..dcfc800713 --- /dev/null +++ b/.changeset/2624.md @@ -0,0 +1,17 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Make title meaningful after component creation + +Fixes #2458. + +After the change, the UX should look like this: + +### If the component creation was successful: + +![successfully-created-component](https://user-images.githubusercontent.com/33940798/94339294-8bd1e000-0016-11eb-885b-7936fcc23b63.gif) + +### If the component creation failed: + +![failed-to-create-component](https://user-images.githubusercontent.com/33940798/94339296-90969400-0016-11eb-9a74-ce16b3dd8d88.gif) diff --git a/.changeset/2625-catalog-backend.md b/.changeset/2625-catalog-backend.md new file mode 100644 index 0000000000..bcd49dddb2 --- /dev/null +++ b/.changeset/2625-catalog-backend.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Add codeowners processor + +- Add `codeowners-utils@^1.0.2` as a dependency +- Add `core-js@^3.6.5` as a dependency +- Added new CodeOwnersProcessor diff --git a/.changeset/2625-cli.md b/.changeset/2625-cli.md new file mode 100644 index 0000000000..c5a5437b69 --- /dev/null +++ b/.changeset/2625-cli.md @@ -0,0 +1,7 @@ +--- +'@backstage/cli': patch +--- + +Add codeowners processor + +- Include ESNext.Promise in TypeScript compilation diff --git a/.changeset/2628.md b/.changeset/2628.md new file mode 100644 index 0000000000..0ac36d456a --- /dev/null +++ b/.changeset/2628.md @@ -0,0 +1,22 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +This feature works the same as \$secret does in config - it allows programmatic substitution of values into a document. + +This is particularly useful e.g. for API type entities where you do not want to repeat your entire API spec document inside the catalog-info.yaml file. For those cases, you can instead do something like + +``` +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: my-federated-service +spec: + type: graphql + definition: + $text: ./schema.graphql +``` + +The textual content of that file will be injected as the value of definition, during each refresh loop. Both relative and absolute paths are supported, as well as any HTTP/HTTPS URL pointing to a service that returns the relevant data. + +The initial version supports injection of text file data, and structured data from JSON and YAML files. You can add any handler of your own in addition to these. diff --git a/.changeset/2630.md b/.changeset/2630.md new file mode 100644 index 0000000000..933204e292 --- /dev/null +++ b/.changeset/2630.md @@ -0,0 +1,9 @@ +--- +'@backstage/create-app': minor +'@backstage/plugin-catalog-backend': minor +--- + +Allow node v14 and add to master build matrix + +- Upgrade sqlite3@^5.0.0 in @backstage/plugin-catalog-backend +- Add Node 14 to engines in @backstage/create-app diff --git a/.changeset/2637.md b/.changeset/2637.md new file mode 100644 index 0000000000..9d368634b6 --- /dev/null +++ b/.changeset/2637.md @@ -0,0 +1,21 @@ +--- +'@backstage/plugin-cost-insights': minor +'@backstage/plugin-explore': minor +--- + +This PR adds Spotify's Cost Insights Tool. Cost Insights explains costs from cloud services in an understandable way, using software terms familiar to your engineers. This tool helps you and your team make trade-offs between cost optimization efforts and your other priorities. + +Cost Insights features: + +Daily cost graph by team or billing account +Cost comparison against configurable business metrics +Insights panels for configurable cloud products your company uses +Cost alerts and recommendations +Selectable time periods for month over month, or quarter over quarter cost comparison +Conversion of cost growth into average engineer cost (configurable) to help optimization trade-off decisions + +![plugin-cost-insights](https://user-images.githubusercontent.com/3030003/94430416-e166d380-0161-11eb-891c-9ce10187683e.gif) + +This PR adds the Cost Insights frontend React plugin with a defined CostInsightsApi. We include an example client with static data in the expected format. This API should talk with a cloud billing backend that aggregates billing data from your cloud provider. + +Fixes #688 💵 diff --git a/.changeset/2639.md b/.changeset/2639.md new file mode 100644 index 0000000000..e6a623088e --- /dev/null +++ b/.changeset/2639.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': minor +--- + +Upgrade dependency `esbuild@0.7.7` diff --git a/.changeset/2641.md b/.changeset/2641.md new file mode 100644 index 0000000000..3b06358e81 --- /dev/null +++ b/.changeset/2641.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Simplify the read function in processors diff --git a/.changeset/2656.md b/.changeset/2656.md new file mode 100644 index 0000000000..e253b6b1f6 --- /dev/null +++ b/.changeset/2656.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': minor +--- + +Lookup user in Google Auth Provider diff --git a/.changeset/2657.md b/.changeset/2657.md new file mode 100644 index 0000000000..9aa645d65f --- /dev/null +++ b/.changeset/2657.md @@ -0,0 +1,5 @@ +--- +'@backstage/core': minor +--- + +Added EmptyState component diff --git a/.changeset/2660.md b/.changeset/2660.md new file mode 100644 index 0000000000..758d523f07 --- /dev/null +++ b/.changeset/2660.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Resolve some dark mode styling issues in asyncAPI specs diff --git a/.changeset/2661.md b/.changeset/2661.md new file mode 100644 index 0000000000..e73b0abf26 --- /dev/null +++ b/.changeset/2661.md @@ -0,0 +1,5 @@ +--- +'@backstage/core': patch +--- + +Fixed banner component position in DismissableBanner component diff --git a/.changeset/2669-catalog-backend.md b/.changeset/2669-catalog-backend.md new file mode 100644 index 0000000000..32ee5c0f4d --- /dev/null +++ b/.changeset/2669-catalog-backend.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Add the ability to import users from GitHub Organization into the catalog. + +The token needs to have the scopes `user:email`, `read:user`, and `read:org`. diff --git a/.changeset/2669-catalog-model.md b/.changeset/2669-catalog-model.md new file mode 100644 index 0000000000..b9a2841a1b --- /dev/null +++ b/.changeset/2669-catalog-model.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-model': minor +--- + +Add the ability to import users from GitHub Organization into the catalog. diff --git a/.changeset/2669-create-app.md b/.changeset/2669-create-app.md new file mode 100644 index 0000000000..e7075ffeb8 --- /dev/null +++ b/.changeset/2669-create-app.md @@ -0,0 +1,7 @@ +--- +'@backstage/create-app': minor +--- + +Add the ability to import users from GitHub Organization into the catalog. + +The token needs to have the scopes `user:email`, `read:user`, and `read:org`. diff --git a/.changeset/2674.md b/.changeset/2674.md new file mode 100644 index 0000000000..15a7a0e849 --- /dev/null +++ b/.changeset/2674.md @@ -0,0 +1,12 @@ +--- +'@backstage/backend-common': minor +'@backstage/create-app': minor +--- + +Auto-create plugin databases + +Relates to #1598. + +This creates databases for plugins before handing off control to plugins. + +The list of plugins currently need to be hard-coded depending on the installed plugins. A later PR will properly refactor the code to provide a factory pattern where plugins specify what they need, and Knex instances will be provided based on the input. diff --git a/.changeset/2686.md b/.changeset/2686.md new file mode 100644 index 0000000000..8831c1309b --- /dev/null +++ b/.changeset/2686.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Update SSR template to pass CI diff --git a/.changeset/2689.md b/.changeset/2689.md new file mode 100644 index 0000000000..be75dd261b --- /dev/null +++ b/.changeset/2689.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Upgrade dependency rollup-plugin-typescript2 to ^0.27.3 diff --git a/.changeset/2722.md b/.changeset/2722.md new file mode 100644 index 0000000000..69642b5797 --- /dev/null +++ b/.changeset/2722.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-api-docs': minor +--- + +There were some missing features and markdown was not rendered properly, but this is fixed now. + +Details: + +- [`asyncapi/asyncapi-react#149`](https://github.com/asyncapi/asyncapi-react/pull/149) - fix: improve markdown rendering of nested fields +- [`asyncapi/asyncapi-react#150`](https://github.com/asyncapi/asyncapi-react/pull/150) - feat: display the description of channels and operations +- [`asyncapi/asyncapi-react#153`](https://github.com/asyncapi/asyncapi-react/pull/153) - fix: let the list of `enums` break into multiple lines