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
+
+
+
+
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.
+
+
+
+
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:
+
+
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:
+
+
+
+### If the component creation failed:
+
+
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
+
+
+
+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
diff --git a/.changeset/2798.md b/.changeset/2798.md
new file mode 100644
index 0000000000..2b202142ef
--- /dev/null
+++ b/.changeset/2798.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+Use the new `UrlReader` in `PlaceholderProcessor`.
+This allows to use the placeholder processor to include API definitions in API entities.
+Previously it was only possible to do this if the definition comes from the same location type as the entity itself.
diff --git a/.changeset/2803.md b/.changeset/2803.md
new file mode 100644
index 0000000000..3a4773757f
--- /dev/null
+++ b/.changeset/2803.md
@@ -0,0 +1,26 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+Remove the backstage.io/definition-at-location annotation.
+The annotation was superseded by the placeholder processor.
+
+```yaml
+apiVersion: backstage.io/v1alpha1
+kind: API
+metadata:
+ name: spotify
+ description: The Spotify web API
+ tags:
+ - spotify
+ - rest
+ annotations:
+ # Don't use this annotation, but the placeholder $text instead (see below).
+ backstage.io/definition-at-location: 'url:https://raw.githubusercontent.com/APIs-guru/openapi-directory/master/APIs/spotify.com/v1/swagger.yaml'
+spec:
+ type: openapi
+ lifecycle: production
+ owner: spotify@example.com
+ definition:
+ $text: https://raw.githubusercontent.com/APIs-guru/openapi-directory/master/APIs/spotify.com/v1/swagger.yaml
+```
diff --git a/.changeset/2804.md b/.changeset/2804.md
new file mode 100644
index 0000000000..5223a24791
--- /dev/null
+++ b/.changeset/2804.md
@@ -0,0 +1,15 @@
+---
+'@backstage/plugin-proxy-backend': minor
+---
+
+Limit the http headers that are forwarded from the request to a safe set of defaults.
+A user can configure additional headers that should be forwarded if the specific applications needs that.
+
+```yaml
+proxy:
+ '/my-api':
+ target: 'https://my-api.com/get'
+ allowedHeaders:
+ # We need to forward the Authorization header that was provided by the caller
+ - Authorization
+```
diff --git a/.changeset/codeowner-processor-url-reader.md b/.changeset/codeowner-processor-url-reader.md
new file mode 100644
index 0000000000..af4eb0997f
--- /dev/null
+++ b/.changeset/codeowner-processor-url-reader.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+Use the new `UrlReader` in the `CodeOwnersProcessor`.
diff --git a/.changeset/config.json b/.changeset/config.json
index c7c4f11e57..44a8523265 100644
--- a/.changeset/config.json
+++ b/.changeset/config.json
@@ -2,55 +2,7 @@
"$schema": "https://unpkg.com/@changesets/config@1.3.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
- "linked": [
- [
- "example-app",
- "@backstage/backend-common",
- "example-backend",
- "@backstage/catalog-model",
- "@backstage/cli-common",
- "@backstage/cli",
- "@backstage/config-loader",
- "@backstage/config",
- "@backstage/core-api",
- "@backstage/core",
- "@backstage/create-app",
- "@backstage/dev-utils",
- "docgen",
- "e2e-test",
- "storybook",
- "@techdocs/cli",
- "@backstage/test-utils-core",
- "@backstage/test-utils",
- "@backstage/theme",
- "@backstage/plugin-api-docs",
- "@backstage/plugin-app-backend",
- "@backstage/plugin-auth-backend",
- "@backstage/plugin-catalog-backend",
- "@backstage/plugin-catalog",
- "@backstage/plugin-circleci",
- "@backstage/plugin-gcp-projects",
- "@backstage/plugin-github-actions",
- "@backstage/plugin-gitops-profiles",
- "@backstage/plugin-graphiql",
- "@backstage/plugin-graphql-backend",
- "@backstage/plugin-jenkins",
- "@backstage/plugin-lighthouse",
- "@backstage/plugin-newrelic",
- "@backstage/plugin-proxy-backend",
- "@backstage/plugin-register-component",
- "@backstage/plugin-rollbar-backend",
- "@backstage/plugin-rollbar",
- "@backstage/plugin-scaffolder-backend",
- "@backstage/plugin-scaffolder",
- "@backstage/plugin-sentry-backend",
- "@backstage/plugin-sentry",
- "@backstage/plugin-tech-radar",
- "@backstage/plugin-techdocs-backend",
- "@backstage/plugin-techdocs",
- "@backstage/plugin-welcome"
- ]
- ],
+ "linked": [["*"]],
"access": "public",
"baseBranch": "master",
"updateInternalDependencies": "patch",
diff --git a/.changeset/create-app-url-reader-update.md b/.changeset/create-app-url-reader-update.md
new file mode 100644
index 0000000000..eb2e538b77
--- /dev/null
+++ b/.changeset/create-app-url-reader-update.md
@@ -0,0 +1,6 @@
+---
+'example-backend': patch
+'@backstage/create-app': patch
+---
+
+Bump @backstage/catalog-backend and pass the now required UrlReader interface to the plugin
diff --git a/.changeset/cyan-plants-dress.md b/.changeset/cyan-plants-dress.md
new file mode 100644
index 0000000000..19ebc63e53
--- /dev/null
+++ b/.changeset/cyan-plants-dress.md
@@ -0,0 +1,5 @@
+---
+'example-backend': patch
+---
+
+Pass GitHub token into Scaffolder GitHub Preparer
diff --git a/.changeset/good-islands-cheer.md b/.changeset/good-islands-cheer.md
new file mode 100644
index 0000000000..2e7109b312
--- /dev/null
+++ b/.changeset/good-islands-cheer.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights': minor
+---
+
+Enable custom alert types in Cost Insights
diff --git a/.changeset/long-ways-count.md b/.changeset/long-ways-count.md
new file mode 100644
index 0000000000..e04c1225cc
--- /dev/null
+++ b/.changeset/long-ways-count.md
@@ -0,0 +1,57 @@
+---
+'@backstage/plugin-techdocs-backend': minor
+'@backstage/create-app': patch
+---
+
+Updated naming of environment variables. New pattern [NAME]\_TOKEN for Github, Gitlab, Azure & Github enterprise access tokens.
+
+### Detail:
+
+- Previously we have to export same token for both, catalog & scaffolder
+
+```bash
+export GITHUB_ACCESS_TOKEN=foo
+export GITHUB_PRIVATE_TOKEN=foo
+```
+
+with latest changes, only single export is sufficient.
+
+```bash
+export GITHUB_TOKEN=foo
+export GITLAB_TOKEN=foo
+export GHE_TOKEN=foo
+export AZURE_TOKEN=foo
+```
+
+### list:
+
+
+
+
Old name
+
New name
+
+
+
GITHUB_ACCESS_TOKEN
+
GITHUB_TOKEN
+
+
+
GITHUB_PRIVATE_TOKEN
+
GITHUB_TOKEN
+
+
+
GITLAB_ACCESS_TOKEN
+
GITLAB_TOKEN
+
+
+
GITLAB_PRIVATE_TOKEN
+
GITLAB_TOKEN
+
+
+
AZURE_PRIVATE_TOKEN
+
AZURE_TOKEN
+
+
+
GHE_PRIVATE_TOKEN
+
GHE_TOKEN
+
+
diff --git a/.changeset/loud-lamps-visit.md b/.changeset/loud-lamps-visit.md
new file mode 100644
index 0000000000..9023061643
--- /dev/null
+++ b/.changeset/loud-lamps-visit.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Including source maps with all packages
diff --git a/.changeset/new-url-reader.md b/.changeset/new-url-reader.md
new file mode 100644
index 0000000000..94758c5bc1
--- /dev/null
+++ b/.changeset/new-url-reader.md
@@ -0,0 +1,12 @@
+---
+'@backstage/backend-common': patch
+---
+
+Added new UrlReader interface for reading opaque data from URLs with different providers.
+
+This new URL reading system is intended as a replacement for the various integrations towards
+external systems in the catalog, scaffolder, and techdocs. It is configured via a new top-level
+config section called 'integrations'.
+
+Along with the UrlReader interface is a new UrlReaders class, which exposes static factory
+methods for instantiating readers that can read from many different integrations simultaneously.
diff --git a/.changeset/ninety-pens-poke.md b/.changeset/ninety-pens-poke.md
new file mode 100644
index 0000000000..94bcb06749
--- /dev/null
+++ b/.changeset/ninety-pens-poke.md
@@ -0,0 +1,5 @@
+---
+'@backstage/create-app': patch
+---
+
+Fix for configured templates using 'url' locations even though it's not supported yet
diff --git a/.changeset/pretty-cups-joke.md b/.changeset/pretty-cups-joke.md
new file mode 100644
index 0000000000..49a1db2a75
--- /dev/null
+++ b/.changeset/pretty-cups-joke.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+Add authentication token to Scaffolder GitHub Preparer
diff --git a/.changeset/proud-eagles-grow.md b/.changeset/proud-eagles-grow.md
new file mode 100644
index 0000000000..ef83a4ad26
--- /dev/null
+++ b/.changeset/proud-eagles-grow.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Fixed duplicate help output, and print help on invalid command
diff --git a/.changeset/remove-location-processor-read.md b/.changeset/remove-location-processor-read.md
new file mode 100644
index 0000000000..78aea6d820
--- /dev/null
+++ b/.changeset/remove-location-processor-read.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+Remove the `read` argument of `LocationProcessor.processEntity`.
+Instead, pass the `UrlReader` into the constructor of your `LocationProcessor`.
diff --git a/.changeset/short-secrets.md b/.changeset/short-secrets.md
new file mode 100644
index 0000000000..72cb059979
--- /dev/null
+++ b/.changeset/short-secrets.md
@@ -0,0 +1,5 @@
+---
+'@backstage/config-loader': minor
+---
+
+Added support for new shorthand when defining secrets, where `$env: ENV` can be used instead of `$secret: { env: ENV }` etc.
diff --git a/.changeset/url-reader-processor.md b/.changeset/url-reader-processor.md
new file mode 100644
index 0000000000..40fef3c106
--- /dev/null
+++ b/.changeset/url-reader-processor.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+The catalog backend UrlReaderProcessor now uses a UrlReader from @backstage/backend-common, which must now be supplied to the constructor.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 0437698301..de7ce773bb 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -5,11 +5,9 @@
#### :heavy_check_mark: Checklist
-
+
-- [ ] All tests are passing `yarn test`
+- [ ] A changeset describing the change and affected packages. ([more info](https://github.com/spotify/backstage/blob/master/CONTRIBUTING.md#creating-changesets))
+- [ ] Added or updated documentation
+- [ ] Tests for new functionality and regression tests for bug fixes
- [ ] Screenshots attached (for UI changes)
-- [ ] Relevant documentation updated
-- [ ] Prettier run on changed files
-- [ ] Tests added for new functionality
-- [ ] Regression tests added for bug fixes
diff --git a/.codecov.yml b/.github/codecov.yml
similarity index 100%
rename from .codecov.yml
rename to .github/codecov.yml
diff --git a/.github/styles/vocab.txt b/.github/styles/vocab.txt
index 21045f04dd..59a0eadb49 100644
--- a/.github/styles/vocab.txt
+++ b/.github/styles/vocab.txt
@@ -32,6 +32,7 @@ Codehilite
codeowners
config
Config
+configmaps
configs
const
cookiecutter
@@ -67,6 +68,7 @@ graphviz
Hackathons
haproxy
heroku
+horizontalpodautoscalers
Hostname
http
https
@@ -139,7 +141,9 @@ Raghunandan
rankdir
readme
Readme
+Recharts
Redash
+replicasets
repo
Repo
repos
diff --git a/.github/workflows/microsite-build-check.yml b/.github/workflows/microsite-build-check.yml
index 0b614509f2..8a2fa99ed2 100644
--- a/.github/workflows/microsite-build-check.yml
+++ b/.github/workflows/microsite-build-check.yml
@@ -33,6 +33,10 @@ jobs:
run: yarn install --frozen-lockfile
working-directory: microsite
+ - name: prettier
+ run: yarn prettier:check
+ working-directory: microsite
+
- name: build microsite
run: yarn build
working-directory: microsite
diff --git a/.imgbotconfig b/.imgbotconfig
new file mode 100644
index 0000000000..f337e087dc
--- /dev/null
+++ b/.imgbotconfig
@@ -0,0 +1,5 @@
+{
+ "ignoredFiles": [
+ "docs/assets/**/*.svg"
+ ]
+}
diff --git a/.prettierignore b/.prettierignore
index 9e75b74eee..4b1acbb594 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,6 +1,6 @@
.yarn
dist
-microsite/build
+microsite
coverage
*.hbs
templates
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bf2638cfe9..487b94a39d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,12 @@ If you encounter issues while upgrading to a newer version, don't hesitate to re
### Backend (example-backend, or backends created with @backstage/create-app)
+- A plugin database manager has been created, and plugins can now accept that interface as an argument during initialisation. Notably, the `auth` plugin has a [`createRouter` signature change](./plugins/auth-backend/src/service/router.ts). See [packages/backend/src/index.ts](./packages/backend/src/index.ts) on how to set it up. [#2697](https://github.com/spotify/backstage/pull/2697)
+
+## v0.1.1-alpha.24
+
+### Backend (example-backend, or backends created with @backstage/create-app)
+
- The default mount point for backend plugins have been changed to `/api`. These changes are done in the backend package itself, so it is recommended that you sync up existing backend packages with this new pattern. [#2562](https://github.com/spotify/backstage/pull/2562)
- A service discovery mechanism for backend plugins has been added, and is now a requirement for several backend plugins. See [packages/backend/src/index.ts](./packages/backend/src/index.ts) for how to set it up using `SingleHostDiscovery` from `@backstage/backend-common`. Note that the default base path for plugins is set to `/api` to that change, but it can be set to use the old behavior via the `basePath` option. [#2600](https://github.com/spotify/backstage/pull/2600)
diff --git a/app-config.yaml b/app-config.yaml
index 88df40813e..228eafc588 100644
--- a/app-config.yaml
+++ b/app-config.yaml
@@ -18,23 +18,20 @@ proxy:
target: https://circleci.com/api/v1.1
headers:
Circle-Token:
- $secret:
- env: CIRCLECI_AUTH_TOKEN
+ $env: CIRCLECI_AUTH_TOKEN
'/jenkins/api':
target: http://localhost:8080
headers:
Authorization:
- $secret:
- env: JENKINS_BASIC_AUTH_HEADER
+ $env: JENKINS_BASIC_AUTH_HEADER
'/travisci/api':
target: https://api.travis-ci.com
changeOrigin: true
headers:
Authorization:
- $secret:
- env: TRAVISCI_AUTH_TOKEN
+ $env: TRAVISCI_AUTH_TOKEN
travis-api-version: 3
organization:
@@ -52,8 +49,7 @@ sentry:
rollbar:
organization: spotify
accountToken:
- $secret:
- env: ROLLBAR_ACCOUNT_TOKEN
+ $env: ROLLBAR_ACCOUNT_TOKEN
newrelic:
api:
@@ -67,174 +63,163 @@ kubernetes:
clusterLocatorMethod: 'configMultiTenant'
clusters: []
+integrations:
+ github:
+ - host: github.com
+ token:
+ $env: GITHUB_TOKEN
+ ### Example for how to add your GitHub Enterprise instance using the API:
+ # - host: ghe.example.net
+ # apiBaseUrl: https://ghe.example.net/api/v3
+ # token:
+ # $env: GHE_TOKEN
+ ### Example for how to add your GitHub Enterprise instance using raw HTTP fetches (token is optional):
+ # - host: ghe.example.net
+ # rawBaseUrl: https://ghe.example.net/raw
+ # token:
+ # $env: GHE_TOKEN
+ gitlab:
+ - host: gitlab.com
+ token:
+ $env: GITLAB_TOKEN
+ bitbucket:
+ - host: bitbucket.org
+ username:
+ $env: BITBUCKET_USERNAME
+ appPassword:
+ $env: BITBUCKET_APP_PASSWORD
+ azure:
+ - host: dev.azure.com
+ token:
+ $env: AZURE_TOKEN
+
catalog:
rules:
- allow: [Component, API, Group, User, Template, Location]
+
processors:
- github:
- providers:
- - target: https://github.com
- token:
- $secret:
- env: GITHUB_PRIVATE_TOKEN
- #### Example for how to add your GitHub Enterprise instance using the API:
- # - target: https://ghe.example.net
- # apiBaseUrl: https://ghe.example.net/api/v3
- # token:
- # $secret:
- # env: GHE_PRIVATE_TOKEN
- #### Example for how to add your GitHub Enterprise instance using raw HTTP fetches (token is optional):
- # - target: https://ghe.example.net
- # rawBaseUrl: https://ghe.example.net/raw
- # token:
- # $secret:
- # env: GHE_PRIVATE_TOKEN
githubOrg:
providers:
- target: https://github.com
token:
- $secret:
- env: GITHUB_PRIVATE_TOKEN
+ $env: GITHUB_TOKEN
#### Example for how to add your GitHub Enterprise instance using the API:
# - target: https://ghe.example.net
# apiBaseUrl: https://ghe.example.net/api/v3
# token:
- # $secret:
- # env: GHE_PRIVATE_TOKEN
- bitbucketApi:
- username:
- $secret:
- env: BITBUCKET_USERNAME
- appPassword:
- $secret:
- env: BITBUCKET_APP_PASSWORD
- gitlabApi:
- privateToken:
- $secret:
- env: GITLAB_PRIVATE_TOKEN
- azureApi:
- privateToken:
- $secret:
- env: AZURE_PRIVATE_TOKEN
+ # $env: GHE_TOKEN
+ ldapOrg:
+ ### Example for how to add your enterprise LDAP server
+ # providers:
+ # - target: ldaps://ds.example.net
+ # bind:
+ # dn: uid=ldap-reader-user,ou=people,ou=example,dc=example,dc=net
+ # secret: { $secret: { env: LDAP_SECRET } }
+ # users:
+ # dn: ou=people,ou=example,dc=example,dc=net
+ # options:
+ # filter: (uid=*)
+ # map:
+ # description: l
+ # groups:
+ # dn: ou=access,ou=groups,ou=example,dc=example,dc=net
+ # options:
+ # filter: (&(objectClass=some-group-class)(!(groupType=email)))
locations:
# Backstage example components
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/all-components.yaml
# Example component for github-actions
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/plugins/github-actions/examples/sample.yaml
# Example component for techdocs
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/plugins/techdocs-backend/examples/documented-component/documented-component.yaml
# Backstage example APIs
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/all-apis.yaml
# Backstage example templates
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/all-templates.yaml
scaffolder:
github:
token:
- $secret:
- env: GITHUB_ACCESS_TOKEN
+ $env: GITHUB_TOKEN
visibility: public # or 'internal' or 'private'
gitlab:
api:
baseUrl: https://gitlab.com
token:
- $secret:
- env: GITLAB_ACCESS_TOKEN
+ $env: GITLAB_TOKEN
azure:
baseUrl: https://dev.azure.com/{your-organization}
api:
token:
- $secret:
- env: AZURE_PRIVATE_TOKEN
+ $env: AZURE_TOKEN
auth:
providers:
google:
development:
clientId:
- $secret:
- env: AUTH_GOOGLE_CLIENT_ID
+ $env: AUTH_GOOGLE_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_GOOGLE_CLIENT_SECRET
+ $env: AUTH_GOOGLE_CLIENT_SECRET
github:
development:
clientId:
- $secret:
- env: AUTH_GITHUB_CLIENT_ID
+ $env: AUTH_GITHUB_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_GITHUB_CLIENT_SECRET
+ $env: AUTH_GITHUB_CLIENT_SECRET
enterpriseInstanceUrl:
- $secret:
- env: AUTH_GITHUB_ENTERPRISE_INSTANCE_URL
+ $env: AUTH_GITHUB_ENTERPRISE_INSTANCE_URL
gitlab:
development:
clientId:
- $secret:
- env: AUTH_GITLAB_CLIENT_ID
+ $env: AUTH_GITLAB_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_GITLAB_CLIENT_SECRET
+ $env: AUTH_GITLAB_CLIENT_SECRET
audience:
- $secret:
- env: GITLAB_BASE_URL
+ $env: GITLAB_BASE_URL
saml:
entryPoint: 'http://localhost:7001/'
issuer: 'passport-saml'
okta:
development:
clientId:
- $secret:
- env: AUTH_OKTA_CLIENT_ID
+ $env: AUTH_OKTA_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_OKTA_CLIENT_SECRET
+ $env: AUTH_OKTA_CLIENT_SECRET
audience:
- $secret:
- env: AUTH_OKTA_AUDIENCE
+ $env: AUTH_OKTA_AUDIENCE
oauth2:
development:
clientId:
- $secret:
- env: AUTH_OAUTH2_CLIENT_ID
+ $env: AUTH_OAUTH2_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_OAUTH2_CLIENT_SECRET
+ $env: AUTH_OAUTH2_CLIENT_SECRET
authorizationUrl:
- $secret:
- env: AUTH_OAUTH2_AUTH_URL
+ $env: AUTH_OAUTH2_AUTH_URL
tokenUrl:
- $secret:
- env: AUTH_OAUTH2_TOKEN_URL
+ $env: AUTH_OAUTH2_TOKEN_URL
auth0:
development:
clientId:
- $secret:
- env: AUTH_AUTH0_CLIENT_ID
+ $env: AUTH_AUTH0_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_AUTH0_CLIENT_SECRET
+ $env: AUTH_AUTH0_CLIENT_SECRET
domain:
- $secret:
- env: AUTH_AUTH0_DOMAIN
+ $env: AUTH_AUTH0_DOMAIN
microsoft:
development:
clientId:
- $secret:
- env: AUTH_MICROSOFT_CLIENT_ID
+ $env: AUTH_MICROSOFT_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_MICROSOFT_CLIENT_SECRET
+ $env: AUTH_MICROSOFT_CLIENT_SECRET
tenantId:
- $secret:
- env: AUTH_MICROSOFT_TENANT_ID
+ $env: AUTH_MICROSOFT_TENANT_ID
costInsights:
engineerCost: 200000
products:
diff --git a/backstage_overview.png b/backstage_overview.png
deleted file mode 100644
index 6c939c127c..0000000000
Binary files a/backstage_overview.png and /dev/null differ
diff --git a/contrib/docker/kubernetes-example-backend/Dockerfile b/contrib/docker/kubernetes-example-backend/Dockerfile
new file mode 100644
index 0000000000..df617decf5
--- /dev/null
+++ b/contrib/docker/kubernetes-example-backend/Dockerfile
@@ -0,0 +1,35 @@
+FROM node:12-buster
+
+WORKDIR /usr/src/app
+
+# (workaround) Install cookiecutter and mkdocs to avoid the need to run docker in docker
+RUN cd /tmp && curl -O https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz && \
+ tar -xvf Python-3.8.2.tar.xz && \
+ cd Python-3.8.2 && \
+ ./configure --enable-optimizations && \
+ make -j 4 && \
+ make altinstall
+
+RUN apt update
+RUN apt install -y mkdocs
+
+RUN pip3.8 install mkdocs-techdocs-core
+
+RUN pip3.8 install cookiecutter && \
+ apt remove -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev g++ python-pip python-dev && \
+ rm -rf /var/cache/apt/* /tmp/Python-3.8.2
+
+# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
+# The skeleton contains the package.json of each package in the monorepo,
+# and along with yarn.lock and the root package.json, that's enough to run yarn install.
+ADD yarn.lock package.json skeleton.tar ./
+
+RUN yarn install --frozen-lockfile --production
+
+# This will copy the contents of the dist-workspace when running the build-image command.
+# Do not use this Dockerfile outside of that command, as it will copy in the source code instead.
+COPY . .
+
+CMD ["node", "packages/backend"]
+
+
diff --git a/contrib/docker/kubernetes-example-backend/README.md b/contrib/docker/kubernetes-example-backend/README.md
new file mode 100644
index 0000000000..d0f9d57022
--- /dev/null
+++ b/contrib/docker/kubernetes-example-backend/README.md
@@ -0,0 +1,13 @@
+# Example backend Dockerfile
+
+This Dockerfile will build the example backend with certain additional binaries needed to workaround
+the docker requirement in the scaffolder and techdocs.
+
+# Usage
+
+```bash
+yarn docker-build -f --tag
+```
+
+> The absolute path is necessary as this directory is not copied to the build workspace when building
+> the docker image.
diff --git a/docker-compose.yaml b/docker-compose.yaml
deleted file mode 100644
index a9922cfb6c..0000000000
--- a/docker-compose.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-# Make sure that before you
-# run the docker-compose that you have run
-# $ yarn docker-build
-version: '3'
-
-services:
- backstage:
- image: 'example-backend:latest'
- ports:
- - '7000:7000'
- environment:
- NODE_ENV: development
diff --git a/docs/assets/architecture-decisions/catalog-core-entities.png b/docs/assets/architecture-decisions/catalog-core-entities.png
index b0c7cb4575..b7f238708f 100644
Binary files a/docs/assets/architecture-decisions/catalog-core-entities.png and b/docs/assets/architecture-decisions/catalog-core-entities.png differ
diff --git a/docs/assets/architecture-overview/circle-ci.png b/docs/assets/architecture-overview/circle-ci.png
index c5695196f1..48aebc9200 100644
Binary files a/docs/assets/architecture-overview/circle-ci.png and b/docs/assets/architecture-overview/circle-ci.png differ
diff --git a/docs/assets/architecture-overview/core-vs-plugin-components-highlighted.png b/docs/assets/architecture-overview/core-vs-plugin-components-highlighted.png
index 7d08fc5e36..f0a8e8871d 100644
Binary files a/docs/assets/architecture-overview/core-vs-plugin-components-highlighted.png and b/docs/assets/architecture-overview/core-vs-plugin-components-highlighted.png differ
diff --git a/docs/assets/architecture-overview/lighthouse-plugin-architecture.png b/docs/assets/architecture-overview/lighthouse-plugin-architecture.png
index 0da5d6f042..0d67bcf19b 100644
Binary files a/docs/assets/architecture-overview/lighthouse-plugin-architecture.png and b/docs/assets/architecture-overview/lighthouse-plugin-architecture.png differ
diff --git a/docs/assets/architecture-overview/lighthouse-plugin.png b/docs/assets/architecture-overview/lighthouse-plugin.png
index 9692fc0833..0b9d0ccc8a 100644
Binary files a/docs/assets/architecture-overview/lighthouse-plugin.png and b/docs/assets/architecture-overview/lighthouse-plugin.png differ
diff --git a/docs/assets/architecture-overview/tech-radar-plugin-architecture.png b/docs/assets/architecture-overview/tech-radar-plugin-architecture.png
index d55be5ee82..417a2764a1 100644
Binary files a/docs/assets/architecture-overview/tech-radar-plugin-architecture.png and b/docs/assets/architecture-overview/tech-radar-plugin-architecture.png differ
diff --git a/docs/assets/architecture-overview/tech-radar-plugin.png b/docs/assets/architecture-overview/tech-radar-plugin.png
index dbf39b6c63..062227ac80 100644
Binary files a/docs/assets/architecture-overview/tech-radar-plugin.png and b/docs/assets/architecture-overview/tech-radar-plugin.png differ
diff --git a/docs/assets/auth/oauth-popup-flow.svg b/docs/assets/auth/oauth-popup-flow.svg
index 2132903783..4a6e76ed21 100644
--- a/docs/assets/auth/oauth-popup-flow.svg
+++ b/docs/assets/auth/oauth-popup-flow.svg
@@ -1,50 +1,50 @@
\ No newline at end of file
+-->
diff --git a/docs/assets/contributorheader.png b/docs/assets/contributorheader.png
index 53d1027d85..64d0cb4cff 100644
Binary files a/docs/assets/contributorheader.png and b/docs/assets/contributorheader.png differ
diff --git a/docs/assets/dls/DLS.png b/docs/assets/dls/DLS.png
index 94214e4650..f84b94857d 100644
Binary files a/docs/assets/dls/DLS.png and b/docs/assets/dls/DLS.png differ
diff --git a/docs/assets/dls/designheader-updated.png b/docs/assets/dls/designheader-updated.png
index 56c5a56abb..39aded2252 100644
Binary files a/docs/assets/dls/designheader-updated.png and b/docs/assets/dls/designheader-updated.png differ
diff --git a/docs/assets/dls/designheader.png b/docs/assets/dls/designheader.png
index e9ace5c2e7..8f160039df 100644
Binary files a/docs/assets/dls/designheader.png and b/docs/assets/dls/designheader.png differ
diff --git a/docs/assets/dls/running-storybook.png b/docs/assets/dls/running-storybook.png
index 6cf1ded4b9..ce9422b99d 100644
Binary files a/docs/assets/dls/running-storybook.png and b/docs/assets/dls/running-storybook.png differ
diff --git a/docs/assets/dls/storybook-page.png b/docs/assets/dls/storybook-page.png
index 113f96e589..58470feaff 100644
Binary files a/docs/assets/dls/storybook-page.png and b/docs/assets/dls/storybook-page.png differ
diff --git a/docs/assets/getting-started/create-app_output.png b/docs/assets/getting-started/create-app_output.png
index caa39ec6d2..875ad05122 100644
Binary files a/docs/assets/getting-started/create-app_output.png and b/docs/assets/getting-started/create-app_output.png differ
diff --git a/docs/assets/getting-started/create-plugin_output.png b/docs/assets/getting-started/create-plugin_output.png
index f048a9f5fc..47231c2079 100644
Binary files a/docs/assets/getting-started/create-plugin_output.png and b/docs/assets/getting-started/create-plugin_output.png differ
diff --git a/docs/assets/headline.png b/docs/assets/headline.png
index 83d7b14f21..fef99a269f 100644
Binary files a/docs/assets/headline.png and b/docs/assets/headline.png differ
diff --git a/docs/assets/my-plugin_screenshot.png b/docs/assets/my-plugin_screenshot.png
index 0b2817fa1e..4f2849a691 100644
Binary files a/docs/assets/my-plugin_screenshot.png and b/docs/assets/my-plugin_screenshot.png differ
diff --git a/docs/assets/pop.png b/docs/assets/pop.png
index 441126f33c..614136b501 100644
Binary files a/docs/assets/pop.png and b/docs/assets/pop.png differ
diff --git a/docs/assets/software-catalog/bsc-edit.png b/docs/assets/software-catalog/bsc-edit.png
index d1ac1f52e5..f3a7daa1dd 100644
Binary files a/docs/assets/software-catalog/bsc-edit.png and b/docs/assets/software-catalog/bsc-edit.png differ
diff --git a/docs/assets/software-catalog/bsc-register-1.png b/docs/assets/software-catalog/bsc-register-1.png
index 117b2ea8ea..0e33c173fb 100644
Binary files a/docs/assets/software-catalog/bsc-register-1.png and b/docs/assets/software-catalog/bsc-register-1.png differ
diff --git a/docs/assets/software-catalog/bsc-register-2.png b/docs/assets/software-catalog/bsc-register-2.png
index fd1ea7b998..de71141ba0 100644
Binary files a/docs/assets/software-catalog/bsc-register-2.png and b/docs/assets/software-catalog/bsc-register-2.png differ
diff --git a/docs/assets/software-catalog/bsc-search.png b/docs/assets/software-catalog/bsc-search.png
index 8e417cb076..042e6055e0 100644
Binary files a/docs/assets/software-catalog/bsc-search.png and b/docs/assets/software-catalog/bsc-search.png differ
diff --git a/docs/assets/software-catalog/bsc-starred.png b/docs/assets/software-catalog/bsc-starred.png
index 27db19c842..c9721c27a2 100644
Binary files a/docs/assets/software-catalog/bsc-starred.png and b/docs/assets/software-catalog/bsc-starred.png differ
diff --git a/docs/assets/software-catalog/service-catalog-home.png b/docs/assets/software-catalog/service-catalog-home.png
index 742748632e..1d2e8ed317 100644
Binary files a/docs/assets/software-catalog/service-catalog-home.png and b/docs/assets/software-catalog/service-catalog-home.png differ
diff --git a/docs/assets/software-catalog/software-model-core-entities.png b/docs/assets/software-catalog/software-model-core-entities.png
index b718b7527c..60cb283802 100644
Binary files a/docs/assets/software-catalog/software-model-core-entities.png and b/docs/assets/software-catalog/software-model-core-entities.png differ
diff --git a/docs/assets/software-templates/added-to-the-catalog-list.png b/docs/assets/software-templates/added-to-the-catalog-list.png
index 4b544e51c1..c73c33ede3 100644
Binary files a/docs/assets/software-templates/added-to-the-catalog-list.png and b/docs/assets/software-templates/added-to-the-catalog-list.png differ
diff --git a/docs/assets/software-templates/complete.png b/docs/assets/software-templates/complete.png
index eee14fae0e..2a8de0ba1e 100644
Binary files a/docs/assets/software-templates/complete.png and b/docs/assets/software-templates/complete.png differ
diff --git a/docs/assets/software-templates/create.png b/docs/assets/software-templates/create.png
index 8a2e92b9f4..8123780cd3 100644
Binary files a/docs/assets/software-templates/create.png and b/docs/assets/software-templates/create.png differ
diff --git a/docs/assets/software-templates/failed.png b/docs/assets/software-templates/failed.png
index bca8c72d6a..4cb7ce84cc 100644
Binary files a/docs/assets/software-templates/failed.png and b/docs/assets/software-templates/failed.png differ
diff --git a/docs/assets/software-templates/go-to-catalog.png b/docs/assets/software-templates/go-to-catalog.png
index ae16230a02..ea03295846 100644
Binary files a/docs/assets/software-templates/go-to-catalog.png and b/docs/assets/software-templates/go-to-catalog.png differ
diff --git a/docs/assets/software-templates/running.png b/docs/assets/software-templates/running.png
index 208376e059..681c3702f7 100644
Binary files a/docs/assets/software-templates/running.png and b/docs/assets/software-templates/running.png differ
diff --git a/docs/assets/software-templates/template-picked-2.png b/docs/assets/software-templates/template-picked-2.png
index 685e356ee8..a1737c8e00 100644
Binary files a/docs/assets/software-templates/template-picked-2.png and b/docs/assets/software-templates/template-picked-2.png differ
diff --git a/docs/assets/software-templates/template-picked.png b/docs/assets/software-templates/template-picked.png
index 1094acec4a..79b1e260e0 100644
Binary files a/docs/assets/software-templates/template-picked.png and b/docs/assets/software-templates/template-picked.png differ
diff --git a/docs/assets/techdocs/documentation-template.png b/docs/assets/techdocs/documentation-template.png
index 1f44ad27c6..7539f1f6f4 100644
Binary files a/docs/assets/techdocs/documentation-template.png and b/docs/assets/techdocs/documentation-template.png differ
diff --git a/docs/assets/techdocs/techdocs_big_picture.png b/docs/assets/techdocs/techdocs_big_picture.png
index ffe437180f..8b8f7a2338 100644
Binary files a/docs/assets/techdocs/techdocs_big_picture.png and b/docs/assets/techdocs/techdocs_big_picture.png differ
diff --git a/docs/assets/utility-apis-fig1.svg b/docs/assets/utility-apis-fig1.svg
index 47123299c7..3261de88a8 100644
--- a/docs/assets/utility-apis-fig1.svg
+++ b/docs/assets/utility-apis-fig1.svg
@@ -1,3 +1,3 @@
-
\ No newline at end of file
+
diff --git a/docs/auth/auth-backend-classes.md b/docs/auth/auth-backend-classes.md
index 4ccee8ede9..9dc677b439 100644
--- a/docs/auth/auth-backend-classes.md
+++ b/docs/auth/auth-backend-classes.md
@@ -67,26 +67,21 @@ auth:
google:
development:
clientId:
- $secret:
- env: AUTH_GOOGLE_CLIENT_ID
+ $env: AUTH_GOOGLE_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_GOOGLE_CLIENT_SECRET
+ $env: AUTH_GOOGLE_CLIENT_SECRET
github:
development:
clientId:
- $secret:
- env: AUTH_GITHUB_CLIENT_ID
+ $env: AUTH_GITHUB_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_GITHUB_CLIENT_SECRET
+ $env: AUTH_GITHUB_CLIENT_SECRET
enterpriseInstanceUrl:
- $secret:
- env: AUTH_GITHUB_ENTERPRISE_INSTANCE_URL
+ $env: AUTH_GITHUB_ENTERPRISE_INSTANCE_URL
gitlab:
development:
clientId:
- $secret:
+ $env:
...
```
diff --git a/docs/conf/index.md b/docs/conf/index.md
index 83eff50a7d..e1dfc30582 100644
--- a/docs/conf/index.md
+++ b/docs/conf/index.md
@@ -18,7 +18,8 @@ allowing for customization.
Configuration is stored in `app-config.yaml` files, with support for suffixes
such as `app-config.production.yaml` to override values for specific
environments. The configuration files themselves contain plain YAML, but with
-support for loading in secrets from various sources using a `$secret` key.
+support for loading in secrets from various sources using for example `$env` and
+`$file` keys.
It is also possible to supply configuration through environment variables, for
example `APP_CONFIG_app_baseUrl=https://staging.example.com`. However these
diff --git a/docs/conf/writing.md b/docs/conf/writing.md
index 6d338e586d..5564e780bb 100644
--- a/docs/conf/writing.md
+++ b/docs/conf/writing.md
@@ -90,18 +90,17 @@ order:
## Secrets
-Secrets are supported via a special `$secret` key, which in turn provides a
-number of different ways to read in secrets. To load a configuration value as a
-secret, supply an object with a single `$secret` key, and within that supply an
-object that describes how the secret is loaded. For example, the following will
-read the config key `backend.mySecretKey` from the environment variable
-`MY_SECRET_KEY`:
+Secrets are supported via a special secret keys that are prefixed with `$`,
+which in turn provides a number of different ways to read in secrets. To load a
+configuration value as a secret, supply an object with one of the special secret
+keys, for example `$env` or `$file`. A full list of supported secret keys can be
+found below. For example, the following will read the config key
+`backend.mySecretKey` from the environment variable `MY_SECRET_KEY`:
```yaml
backend:
mySecretKey:
- $secret:
- env: MY_SECRET_KEY
+ $env: MY_SECRET_KEY
```
With the above configuration, calling `config.getString('backend.mySecretKey')`
@@ -123,8 +122,7 @@ This reads a secret from an environment variable. For example, the following
config loads the secret from the `MY_SECRET` env var.
```yaml
-$secret:
- env: MY_SECRET
+$env: MY_SECRET
```
### File Secrets
@@ -135,22 +133,19 @@ following reads the contents of `my-secret.txt` relative to the config file
itself:
```yaml
-$secret:
- file: ./my-secret.txt
+$file: ./my-secret.txt
```
### Data File Secrets
This reads secrets from a path within a JSON-like data file. The file path
-behaves similar to file secrets, but in addition a `path` is used to point to a
-specific value inside the file. Supported file extensions are `.json`, `.yaml`,
-and `.yml`. For example, the following would read out `my-secret-key` from
-`my-secrets.json`:
+behaves similar to file secrets, but with the addition of a url fragment that is
+used to point to a specific value inside the file. Supported file extensions are
+`.json`, `.yaml`, and `.yml`. For example, the following would read out
+`my-secret-key` from `my-secrets.json`:
```yaml
-$secret:
- data: ./my-secrets.json
- path: deployment.key
+$data: ./my-secrets.json#deployment.key
# my-secrets.json
{
diff --git a/docs/features/software-catalog/configuration.md b/docs/features/software-catalog/configuration.md
index c98bd73ca3..46de2d3d67 100644
--- a/docs/features/software-catalog/configuration.md
+++ b/docs/features/software-catalog/configuration.md
@@ -11,36 +11,50 @@ tasks, such as reading raw entity data from a remote source, parsing it,
transforming it, and validating it. These processors are configured under the
`catalog.processors` key.
-### Processor: github
+### Processor: url
-The `github` processor is responsible for fetching entity data from files on
-GitHub or GitHub Enterprise. The configuration for this processor lives under
-`catalog.processors.github`. Example:
+The `url` processor is responsible for fetching entity data from files in any
+external provider like GitHub, GitLab, Bitbucket, etc. The configuration of this
+processor lives under the top-level `integrations` key, as it is used by other
+parts of Backstage too.
```yaml
-catalog:
- processors:
- github:
- providers:
- - target: https://github.com
- token:
- $secret:
- env: GITHUB_PRIVATE_TOKEN
- - target: https://ghe.example.net
- apiBaseUrl: https://ghe.example.net/api/v3
- rawBaseUrl: https://ghe.example.net/raw
- token:
- $secret:
- env: GHE_PRIVATE_TOKEN
+integrations:
+ github:
+ - host: github.com
+ token:
+ $env: GITHUB_TOKEN
+ - host: ghe.example.net
+ apiBaseUrl: https://ghe.example.net/api/v3
+ rawBaseUrl: https://ghe.example.net/raw
+ token:
+ $env: GHE_TOKEN
+ gitlab:
+ - host: gitlab.com
+ token:
+ $env: GITLAB_TOKEN
+ bitbucket:
+ - host: bitbucket.org
+ username:
+ $env: BITBUCKET_USERNAME
+ appPassword:
+ $env: BITBUCKET_APP_PASSWORD
+ azure:
+ - host: dev.azure.com
+ token:
+ $env: AZURE_TOKEN
```
-The main subkey is `providers`, where you can list the various GitHub compatible
-providers you want to be able to fetch data from. Each entry is a structure with
-up to four elements:
+Each key under `integrations` is a separate configuration for each external
+provider. The providers each have their own configuration, so let's look at the
+GitHub section as an example.
-- `target` (required): The string prefix of the location target that you want to
- match on, with no trailing slash. For GitHub, it should be exactly
- `https://github.com`.
+Directly under the `github` key is a list of provider configurations, where you
+can list the various GitHub compatible providers you want to be able to fetch
+data from. Each entry is a structure with up to four elements:
+
+- `host` (optional): The host of the location target that you want to match on.
+ The default host is `github.com`.
- `token` (optional): An authentication token as expected by GitHub. If
supplied, it will be passed along with all calls to this provider, both API
and raw. If it is not supplied, anonymous access will be used.
@@ -74,7 +88,7 @@ the catalog under the `catalog.locations` key, for example:
```yaml
catalog:
locations:
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/artist-lookup-component.yaml
```
@@ -97,7 +111,7 @@ catalog:
- allow: [Component, API, Location, Template]
locations:
- - type: github
+ - type: url
target: https://github.com/org/example/blob/master/org-data.yaml
rules:
- allow: [Group]
diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md
index 7e2a4c3867..b045660202 100644
--- a/docs/features/software-catalog/extending-the-model.md
+++ b/docs/features/software-catalog/extending-the-model.md
@@ -16,11 +16,9 @@ Backstage natively supports tracking of the following component

Since these types are likely not the only kind of software you will want to
-track in Backstage, it is possible to
-
-It is possible to add your own software types that fit your organization's data
-model. Inside Spotify our model has grown significantly over the years, and now
-includes ML models, Apps, data pipelines and many more.
+track in Backstage, it is possible to add your own software types that fit your
+organization's data model. Inside Spotify our model has grown significantly over
+the years, and now includes ML models, Apps, data pipelines and many more.
## Adding a new type
diff --git a/docs/features/software-catalog/index.md b/docs/features/software-catalog/index.md
index 8be6a00579..4ba83146db 100644
--- a/docs/features/software-catalog/index.md
+++ b/docs/features/software-catalog/index.md
@@ -90,7 +90,7 @@ above example can be added using the following configuration:
```yaml
catalog:
locations:
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/artist-lookup-component.yaml
```
diff --git a/docs/features/software-catalog/installation.md b/docs/features/software-catalog/installation.md
index a825020eb6..26990033aa 100644
--- a/docs/features/software-catalog/installation.md
+++ b/docs/features/software-catalog/installation.md
@@ -166,21 +166,21 @@ our example templates through static configuration. Add the following to the
catalog:
locations:
# Backstage Example Component
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/artist-lookup-component.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-order-component.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/podcast-api-component.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/queue-proxy-component.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/searcher-component.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-lib-component.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/www-artist-component.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/shuffle-api-component.yaml
```
diff --git a/docs/features/software-catalog/well-known-annotations.md b/docs/features/software-catalog/well-known-annotations.md
index 1bd5528f22..40a4ca3ea1 100644
--- a/docs/features/software-catalog/well-known-annotations.md
+++ b/docs/features/software-catalog/well-known-annotations.md
@@ -41,27 +41,6 @@ expecting a two-item array out of it. The format of the target part is
type-dependent and could conceivably even be an empty string, but the separator
colon is always present.
-### backstage.io/definition-at-location
-
-```yaml
-# Example
-apiVersion: backstage.io/v1alpha1
-kind: API
-metadata:
- name: petstore
- annotations:
- backstage.io/definition-at-location: 'url:https://petstore.swagger.io/v2/swagger.json'
-spec:
- type: openapi
-```
-
-This annotation allows to fetch an API definition from another location, instead
-of wrapping the API definition inside the definition field. This allows to
-easily consume existing API definition. The definition is fetched during
-ingestion by a processor and included in the entity. It is updated on every
-refresh. The annotation contains a location reference string that contains the
-location processor type and the target.
-
### backstage.io/techdocs-ref
```yaml
@@ -179,6 +158,21 @@ fallback (`rollbar.organization` followed by `organization.name`).
Specifying this annotation may enable Rollbar related features in Backstage for
that entity.
+### backstage.io/ldap-rdn, backstage.io/ldap-uuid, backstage.io/ldap-dn
+
+```yaml
+# Example:
+metadata:
+ annotations:
+ backstage.io/ldap-rdn: my-team
+ backstage.io/ldap-uuid: c57e8ba2-6cc4-1039-9ebc-d5f241a7ca21
+ backstage.io/ldap-dn: cn=my-team,ou=access,ou=groups,ou=spotify,dc=spotify,dc=net
+```
+
+The value of these annotations are the corresponding attributes that were found
+when ingestion the entity from LDAP. Not all of them may be present, depending
+on what attributes that the server presented at ingestion time.
+
## Deprecated Annotations
The following annotations are deprecated, and only listed here to aid in
@@ -190,6 +184,25 @@ This annotation was used for a while to enable the GitHub Actions feature. This
is now instead using the [github.com/project-slug](#github-com-project-slug)
annotation, with the same value format.
+### backstage.io/definition-at-location
+
+This annotation allowed to load the API definition from another location. Now
+placeholders can be used instead:
+
+```
+apiVersion: backstage.io/v1alpha1
+kind: API
+metadata:
+ name: petstore
+ description: The Petstore API
+spec:
+ type: openapi
+ lifecycle: production
+ owner: petstore@example.com
+ definition:
+ $text: https://petstore.swagger.io/v2/swagger.json
+```
+
## Links
- [Descriptor Format: annotations](descriptor-format.md#annotations-optional)
diff --git a/docs/features/software-templates/adding-templates.md b/docs/features/software-templates/adding-templates.md
index 4283af7c72..5a4e0049ab 100644
--- a/docs/features/software-templates/adding-templates.md
+++ b/docs/features/software-templates/adding-templates.md
@@ -66,7 +66,7 @@ for example
```yaml
catalog:
locations:
- - type: github
+ - type: url
target: https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml
rules:
- allow: [Template]
diff --git a/docs/features/software-templates/extending/create-your-own-publisher.md b/docs/features/software-templates/extending/create-your-own-publisher.md
index ecb097f9d9..546980f033 100644
--- a/docs/features/software-templates/extending/create-your-own-publisher.md
+++ b/docs/features/software-templates/extending/create-your-own-publisher.md
@@ -34,7 +34,7 @@ import { Octokit } from '@octokit/rest';
import type { PluginEnvironment } from '../types';
export default async function createPlugin({ logger }: PluginEnvironment) {
- const githubClient = new Octokit({ auth: process.env.GITHUB_ACCESS_TOKEN });
+ const githubClient = new Octokit({ auth: process.env.GITHUB_TOKEN });
const publisher = new GithubPublisher({ client: githubClient });
return await createRouter({
diff --git a/docs/features/software-templates/installation.md b/docs/features/software-templates/installation.md
index eff7e53ad3..838c5e2d11 100644
--- a/docs/features/software-templates/installation.md
+++ b/docs/features/software-templates/installation.md
@@ -191,13 +191,13 @@ our example templates through static configuration. Add the following to the
catalog:
locations:
# Backstage Example Templates
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/create-react-app/template.yaml
- - type: github
+ - type: url
target: https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml
```
@@ -232,15 +232,13 @@ instance:
scaffolder:
github:
token:
- $secret:
- env: GITHUB_ACCESS_TOKEN
+ $env: GITHUB_TOKEN
visibility: public # or 'internal' or 'private'
gitlab:
api:
baseUrl: https://gitlab.com
token:
- $secret:
- env: SCAFFOLDER_GITLAB_PRIVATE_TOKEN
+ $env: GITLAB_TOKEN
```
#### Azure DevOps
@@ -257,8 +255,7 @@ scaffolder:
baseUrl: https://dev.azure.com/{your-organization}
api:
token:
- $secret:
- env: AZURE_PRIVATE_TOKEN
+ $env: AZURE_TOKEN
```
### Running the Backend
@@ -268,7 +265,7 @@ backend with the new configuration:
```bash
cd packages/backend
-GITHUB_ACCESS_TOKEN= yarn start
+GITHUB_TOKEN= yarn start
```
If you've also set up the frontend plugin, so you should be ready to go browse
diff --git a/docs/getting-started/create-an-app.md b/docs/getting-started/create-an-app.md
index 831e8af145..9be0e24452 100644
--- a/docs/getting-started/create-an-app.md
+++ b/docs/getting-started/create-an-app.md
@@ -74,6 +74,7 @@ app.
```
app
├── app-config.yaml
+├── catalog-info.yaml
├── lerna.json
├── package.json
└── packages
@@ -83,6 +84,9 @@ app
- **app-config.yaml**: Main configuration file for the app. See
[Configuration](https://backstage.io/docs/conf/) for more information.
+- **catalog-info.yaml**: Catalog Entities descriptors. See
+ [Descriptor Format of Catalog Entities](https://backstage.io/docs/features/software-catalog/descriptor-format)
+ to get started.
- **lerna.json**: Contains information about workspaces and other lerna
configuration needed for the monorepo setup.
- **package.json**: Root package.json for the project. _Note: Be sure that you
diff --git a/docs/getting-started/deployment-other.md b/docs/getting-started/deployment-other.md
index 2cd9708e2a..ab5833b634 100644
--- a/docs/getting-started/deployment-other.md
+++ b/docs/getting-started/deployment-other.md
@@ -17,14 +17,3 @@ $ docker run --rm -it -p 7000:7000 -e NODE_ENV=development example-backend:lates
```
Then open http://localhost/ on your browser.
-
-### Running with `docker-compose`
-
-There is also a `docker-compose.yaml` that you can use to replace the previous
-`docker run` command:
-
-```bash
-$ yarn install
-$ yarn docker-build
-$ docker-compose up
-```
diff --git a/docs/getting-started/development-environment.md b/docs/getting-started/development-environment.md
index 154a959f85..aa9aa0bde1 100644
--- a/docs/getting-started/development-environment.md
+++ b/docs/getting-started/development-environment.md
@@ -88,3 +88,17 @@ yarn create-plugin # Create a new plugin
> See
> [package.json](https://github.com/spotify/backstage/blob/master/package.json)
> for other yarn commands/options.
+
+## Local configuration
+
+Backstage allows you to specify the configuration used while running the
+application on your computer. Local configuration is read from
+`app-config.local.yaml`. This file is ignored by Git, which means that you can
+safely use it to reference secrets like GitHub tokens without worrying about
+these secrets, inadvertently ending up in the Git repository. You do not need to
+copy everything from the default config to the local config.
+`app-config.local.yaml` will be merged with `app-config.yaml` and overwrite the
+default app configs.
+
+You can learn more about the local configuration in
+[Static Configuration in Backstage](../conf/) section.
diff --git a/docs/plugins/existing-plugins.md b/docs/plugins/existing-plugins.md
index c1fbda379a..3c1ccb6438 100644
--- a/docs/plugins/existing-plugins.md
+++ b/docs/plugins/existing-plugins.md
@@ -4,12 +4,15 @@ title: Existing plugins
description: Lists of existing open source plugins
---
-## Open source plugins
+## The Plugin Marketplace
-The full list of open source plugins can be found
-[here](https://github.com/spotify/backstage/tree/master/plugins).
+Open source plugins that you can add to your Backstage deployment can be found
+at:
-## Plugin gallery
+https://backstage.io/plugins
-TODO: In the future we would like to have something similar to
-https://grafana.com/grafana/plugins
+
+
+## Links
+
+- [[blog] The Plugin Marketplace is open](https://backstage.io/blog/2020/09/30/plugin-marketplace)
diff --git a/docs/plugins/proxying.md b/docs/plugins/proxying.md
index a691c7f0bc..f55b4d9229 100644
--- a/docs/plugins/proxying.md
+++ b/docs/plugins/proxying.md
@@ -41,8 +41,7 @@ proxy:
target: http://larger.example.com:8080/svc.v1
headers:
Authorization:
- $secret:
- env: EXAMPLE_AUTH_HEADER
+ $env: EXAMPLE_AUTH_HEADER
```
Each key under the proxy configuration entry is a route to match, below the
@@ -58,6 +57,15 @@ is also possible to limit the forwarded HTTP methods with the configuration
`allowedMethods`, for example `allowedMethods: ['GET']` to enforce read-only
access.
+By default, the proxy will only forward safe HTTP request headers to the target.
+Those are based on the headers that are considered safe for CORS and includes
+headers like `content-type` or `last-modified`, as well as all headers that are
+set by the proxy. If the proxy should forward other headers like
+`authorization`, this must be enabled by the `allowedHeaders` config, for
+example `allowedHeaders: ['Authorization']`. This should help to not
+accidentally forward confidential headers (`cookie`, `X-Auth-Request-User`) to
+third-parties.
+
If the value is a string, it is assumed to correspond to:
```yaml
diff --git a/docs/tutorials/quickstart-app-auth.md b/docs/tutorials/quickstart-app-auth.md
index 7403f2c2dd..8f6b35617b 100644
--- a/docs/tutorials/quickstart-app-auth.md
+++ b/docs/tutorials/quickstart-app-auth.md
@@ -72,15 +72,12 @@ auth:
github:
development:
clientId:
- $secret:
- env: AUTH_GITHUB_CLIENT_ID
+ $env: AUTH_GITHUB_CLIENT_ID
clientSecret:
- $secret:
- env: AUTH_GITHUB_CLIENT_SECRET
+ $env: AUTH_GITHUB_CLIENT_SECRET
## uncomment the following three lines if using enterprise
# enterpriseInstanceUrl:
- # $secret:
- # env: AUTH_GITHUB_ENTERPRISE_INSTANCE_URL
+ # $env: AUTH_GITHUB_ENTERPRISE_INSTANCE_URL
```
2. Set environment variables in whatever fashion is easiest for you. I chose to
diff --git a/lerna.json b/lerna.json
index d43d4ff160..7d514abb97 100644
--- a/lerna.json
+++ b/lerna.json
@@ -2,5 +2,5 @@
"packages": ["packages/*", "plugins/*"],
"npmClient": "yarn",
"useWorkspaces": true,
- "version": "0.1.1-alpha.23"
+ "version": "0.1.1-alpha.24"
}
diff --git a/microsite/.prettierignore b/microsite/.prettierignore
new file mode 100644
index 0000000000..378eac25d3
--- /dev/null
+++ b/microsite/.prettierignore
@@ -0,0 +1 @@
+build
diff --git a/microsite/blog/2020-09-30-plugin-marketplace.md b/microsite/blog/2020-09-30-plugin-marketplace.md
index a8b9a88c20..0b96abbc60 100644
--- a/microsite/blog/2020-09-30-plugin-marketplace.md
+++ b/microsite/blog/2020-09-30-plugin-marketplace.md
@@ -6,7 +6,7 @@ authorURL: https://twitter.com/stalund
Backstage has an ambitious goal: to provide engineers with the best possible developer experience.
-A fantastic developer experience leads to happy, creative, and productive engineers. Our belief is that engineers should not have to be experts in various infrastructure tools to be productive. Infrastructure should be abstracted away, so that developers can spend more cycles building and testing, quickly and safely. Backstage unifies all your infrastructure tooling, services, and documentation to create a streamlined development environment from end to end.
+A great developer experience leads to happy, creative, and productive engineers. Our belief is that engineers should not have to be experts in various infrastructure tools or disciplines (e.g., machine learning or backend) to be productive. Infrastructure should be abstracted away, so that developers can spend more cycles building and testing, quickly and safely. Backstage unifies all your infrastructure tooling, services, and documentation to create a streamlined development environment from end to end.
Now you may be thinking, “Yeah, sure, that sounds nice and all, but how does Backstage actually abstract away infrastructure?” The short answer: [plugins](https://backstage.io/plugins).
@@ -16,11 +16,11 @@ Now you may be thinking, “Yeah, sure, that sounds nice and all, but how does B
Think of plugins as a mini version of an infrastructure tool or service — just the parts you need, made quick and easy. The advantage of using a Backstage plugin instead of a tool’s dedicated UI is that all your infrastructure is packaged into a “single pane of glass” instead of being spread out like independently built “islands”. Once you grow your infrastructure portfolio, the complexity really starts to add up. The Backstage plugin model allows you to add more tools without increasing the cognitive load for your users.
-Our goal for the plugin ecosystem is that anything can be a plugin. The definition of a plugin is flexible enough to allow you to expose pretty much any kind of infrastructure or software development tool as a plugin in Backstage. By following strong [design guidelines](https://backstage.io/blog/2020/09/30/backstage-design-system) we ensure the overall user experience stays consistent between plugins. If we all do our job well, the end user of Backstage does not see the boundaries between plugins. They are interacting with one consistent product — with many features.
+Our goal for the plugin ecosystem is that anything can be a plugin. The definition of a plugin is flexible enough to allow you to expose pretty much any kind of infrastructure or software development tool as a plugin in Backstage. By following clear [design guidelines](https://backstage.io/blog/2020/09/30/backstage-design-system) we ensure the overall user experience stays consistent between plugins. If we all do our job well, the end user of Backstage does not see the boundaries between plugins. They are interacting with one consistent product — with many features.
## Building an ecosystem
-Imagine a not-so-distant future where you walk up to Backstage, install it in your environment, and then choose from a gallery of existing, open source plugins that match whatever infrastructure you use inside your company. That is our vision for the Backstage plugin ecosystem.
+Imagine a not-so-distant future where you walk up to Backstage, install it in your environment, and then choose from a gallery of existing, open source plugins that serve and match whatever infrastructure and software development needs you have inside your company. That means you can get started with Backstage and see the gains of improved productivity within days, not months. That is our vision for the Backstage plugin ecosystem.
Running services on Kubernetes? There’s a plugin for that. Using Snyk for security scanning? There’s a plugin for that. Grafana, DataDog, or Rollbar for monitoring? There’s a plugin for that. Using Jenkins, CircleCI, GitHub Actions, or Travis CI? Pick the CI plugin of your choice. You get the picture. Regardless of your stack, there’s a plugin that you can use.
@@ -32,7 +32,7 @@ This grand vision is actually not that far off. Already today there is a growing
## Creating and suggesting new plugins
-Not all plugins you need will be open source. Every company has their own homegrown tooling. Building internal plugins lets you tailor your version of Backstage to be a perfect fit for your infrastructure. If you end up [building plugins](https://backstage.io/docs/plugins/create-a-plugin) that could be useful for other companies, please consider releasing them as open source and [add them to the Marketplace](https://backstage.io/docs/plugins/add-to-marketplace).
+Not all plugins you need will be open source. Every company has their own homegrown tooling. Building internal plugins lets you tailor your version of Backstage to be a perfect fit for your infrastructure and software development needs. If you end up [building plugins](https://backstage.io/docs/plugins/create-a-plugin) that could be useful for other companies, please consider releasing them as open source and [add them to the Marketplace](https://backstage.io/docs/plugins/add-to-marketplace).
If you start developing a plugin that you aim to release as open source, we suggest that you create a [new plugin Issue](https://github.com/spotify/backstage/issues/new?labels=plugin&template=plugin_template.md&title=%5BPlugin%5D+THE+PLUGIN+NAME). This helps the community know what plugins are in development and opens up opportunities for collaboration. You can also use this process if you have an idea for a good plugin, but you need help building it.
@@ -40,4 +40,4 @@ We are really excited to see all the amazing plugins that have already been buil
What plugins would you like to see in the Plugin Marketplace? [Tell us](https://github.com/spotify/backstage/issues/new?labels=plugin&template=plugin_template.md&title=%5BPlugin%5D+THE+PLUGIN+NAME)!
-_Special shout-out to community member [Iain Billett](https://github.com/iain-b) from Roadie for helping build and contribute the [plugin marketplace page](https://backstage.io/plugins) (as his first PR no less!)._
+_Special shout-out to community member [Iain Billett](https://github.com/iain-b) from [Roadie](https://roadie.io) for helping build and contribute the [Plugin Marketplace page](https://backstage.io/plugins) (as his first PR no less!)._
diff --git a/microsite/blog/assets/2/screen.gif b/microsite/blog/assets/2/screen.gif
index a0d52a23b4..f790d639cc 100644
Binary files a/microsite/blog/assets/2/screen.gif and b/microsite/blog/assets/2/screen.gif differ
diff --git a/microsite/blog/assets/20-05-20/Service_Catalog_MVP.png b/microsite/blog/assets/20-05-20/Service_Catalog_MVP.png
index 4a50f17d15..386b195ea9 100644
Binary files a/microsite/blog/assets/20-05-20/Service_Catalog_MVP.png and b/microsite/blog/assets/20-05-20/Service_Catalog_MVP.png differ
diff --git a/microsite/blog/assets/20-05-20/Service_Catalog_MVP_service.png b/microsite/blog/assets/20-05-20/Service_Catalog_MVP_service.png
index 8067f665c9..1a48b1900c 100644
Binary files a/microsite/blog/assets/20-05-20/Service_Catalog_MVP_service.png and b/microsite/blog/assets/20-05-20/Service_Catalog_MVP_service.png differ
diff --git a/microsite/blog/assets/20-05-20/tabs.png b/microsite/blog/assets/20-05-20/tabs.png
index 4a5b11f6fe..71516b6846 100644
Binary files a/microsite/blog/assets/20-05-20/tabs.png and b/microsite/blog/assets/20-05-20/tabs.png differ
diff --git a/microsite/blog/assets/20-07-01/auth-landing.png b/microsite/blog/assets/20-07-01/auth-landing.png
index e00f4c2e43..064802c90f 100644
Binary files a/microsite/blog/assets/20-07-01/auth-landing.png and b/microsite/blog/assets/20-07-01/auth-landing.png differ
diff --git a/microsite/blog/assets/20-07-01/auth-sidebar.png b/microsite/blog/assets/20-07-01/auth-sidebar.png
index b089ab6c0a..7c72a96ab5 100644
Binary files a/microsite/blog/assets/20-07-01/auth-sidebar.png and b/microsite/blog/assets/20-07-01/auth-sidebar.png differ
diff --git a/microsite/blog/assets/2020-08-05/cards.png b/microsite/blog/assets/2020-08-05/cards.png
index 4779618b92..a3e038ce1a 100644
Binary files a/microsite/blog/assets/2020-08-05/cards.png and b/microsite/blog/assets/2020-08-05/cards.png differ
diff --git a/microsite/blog/assets/2020-08-05/catalog.png b/microsite/blog/assets/2020-08-05/catalog.png
index e9c0c65ade..b1f3680511 100644
Binary files a/microsite/blog/assets/2020-08-05/catalog.png and b/microsite/blog/assets/2020-08-05/catalog.png differ
diff --git a/microsite/blog/assets/2020-08-05/create-component.png b/microsite/blog/assets/2020-08-05/create-component.png
index 4d815393fc..7f0c630d58 100644
Binary files a/microsite/blog/assets/2020-08-05/create-component.png and b/microsite/blog/assets/2020-08-05/create-component.png differ
diff --git a/microsite/blog/assets/2020-08-05/template-form.png b/microsite/blog/assets/2020-08-05/template-form.png
index 5805243f59..0643a7f3e8 100644
Binary files a/microsite/blog/assets/2020-08-05/template-form.png and b/microsite/blog/assets/2020-08-05/template-form.png differ
diff --git a/microsite/blog/assets/2020-08-05/templates.png b/microsite/blog/assets/2020-08-05/templates.png
index e350d463f6..af76121a72 100644
Binary files a/microsite/blog/assets/2020-08-05/templates.png and b/microsite/blog/assets/2020-08-05/templates.png differ
diff --git a/microsite/blog/assets/3/audit-list.png b/microsite/blog/assets/3/audit-list.png
index 84b64f976a..df18b9923f 100644
Binary files a/microsite/blog/assets/3/audit-list.png and b/microsite/blog/assets/3/audit-list.png differ
diff --git a/microsite/blog/assets/3/audit-view.png b/microsite/blog/assets/3/audit-view.png
index a2e9716cf4..df5f5691b0 100644
Binary files a/microsite/blog/assets/3/audit-view.png and b/microsite/blog/assets/3/audit-view.png differ
diff --git a/microsite/blog/assets/3/create-audit.png b/microsite/blog/assets/3/create-audit.png
index cb28de73a4..2b22d66b18 100644
Binary files a/microsite/blog/assets/3/create-audit.png and b/microsite/blog/assets/3/create-audit.png differ
diff --git a/microsite/blog/assets/3/lead-copy.png b/microsite/blog/assets/3/lead-copy.png
index fbf247eec8..8476461909 100644
Binary files a/microsite/blog/assets/3/lead-copy.png and b/microsite/blog/assets/3/lead-copy.png differ
diff --git a/microsite/blog/assets/3/lead.png b/microsite/blog/assets/3/lead.png
index 4b60c4961c..639b5b4a9e 100644
Binary files a/microsite/blog/assets/3/lead.png and b/microsite/blog/assets/3/lead.png differ
diff --git a/microsite/blog/assets/4/create-app.png b/microsite/blog/assets/4/create-app.png
index 52dcc13097..5ff683e5d0 100644
Binary files a/microsite/blog/assets/4/create-app.png and b/microsite/blog/assets/4/create-app.png differ
diff --git a/microsite/blog/assets/4/welcome.png b/microsite/blog/assets/4/welcome.png
index 5de0d57098..e217fda699 100644
Binary files a/microsite/blog/assets/4/welcome.png and b/microsite/blog/assets/4/welcome.png differ
diff --git a/microsite/blog/assets/5/lead.png b/microsite/blog/assets/5/lead.png
index 657268fc09..615cf4d349 100644
Binary files a/microsite/blog/assets/5/lead.png and b/microsite/blog/assets/5/lead.png differ
diff --git a/microsite/blog/assets/6/header.png b/microsite/blog/assets/6/header.png
index 6908e40dbc..3c39971d36 100644
Binary files a/microsite/blog/assets/6/header.png and b/microsite/blog/assets/6/header.png differ
diff --git a/microsite/blog/assets/Backstage-mural-DS.png b/microsite/blog/assets/Backstage-mural-DS.png
index 2944874706..6e2021a37c 100644
Binary files a/microsite/blog/assets/Backstage-mural-DS.png and b/microsite/blog/assets/Backstage-mural-DS.png differ
diff --git a/microsite/blog/assets/announcing-techdocs/discover1.png b/microsite/blog/assets/announcing-techdocs/discover1.png
index 5b23e64b43..33869b4d64 100644
Binary files a/microsite/blog/assets/announcing-techdocs/discover1.png and b/microsite/blog/assets/announcing-techdocs/discover1.png differ
diff --git a/microsite/blog/assets/announcing-techdocs/discover2.png b/microsite/blog/assets/announcing-techdocs/discover2.png
index 3737ee68db..e7ed8d39fe 100644
Binary files a/microsite/blog/assets/announcing-techdocs/discover2.png and b/microsite/blog/assets/announcing-techdocs/discover2.png differ
diff --git a/microsite/blog/assets/announcing-techdocs/docs-in-backstage.png b/microsite/blog/assets/announcing-techdocs/docs-in-backstage.png
index f3b724ff4f..ee8b4dead0 100644
Binary files a/microsite/blog/assets/announcing-techdocs/docs-in-backstage.png and b/microsite/blog/assets/announcing-techdocs/docs-in-backstage.png differ
diff --git a/microsite/blog/assets/announcing-techdocs/feedback-loop1.png b/microsite/blog/assets/announcing-techdocs/feedback-loop1.png
index 4e2d0de5df..d78144bded 100644
Binary files a/microsite/blog/assets/announcing-techdocs/feedback-loop1.png and b/microsite/blog/assets/announcing-techdocs/feedback-loop1.png differ
diff --git a/microsite/blog/assets/announcing-techdocs/feedback-loop2.png b/microsite/blog/assets/announcing-techdocs/feedback-loop2.png
index 516780e3ac..5177451c9e 100644
Binary files a/microsite/blog/assets/announcing-techdocs/feedback-loop2.png and b/microsite/blog/assets/announcing-techdocs/feedback-loop2.png differ
diff --git a/microsite/blog/assets/announcing-techdocs/github-issues.png b/microsite/blog/assets/announcing-techdocs/github-issues.png
index 3d5f3465c0..dfe345bd0a 100644
Binary files a/microsite/blog/assets/announcing-techdocs/github-issues.png and b/microsite/blog/assets/announcing-techdocs/github-issues.png differ
diff --git a/microsite/blog/assets/announcing-techdocs/metrics.png b/microsite/blog/assets/announcing-techdocs/metrics.png
index b332a65b0d..58e63951bf 100644
Binary files a/microsite/blog/assets/announcing-techdocs/metrics.png and b/microsite/blog/assets/announcing-techdocs/metrics.png differ
diff --git a/microsite/blog/assets/backstage-DS-header.png b/microsite/blog/assets/backstage-DS-header.png
index 2160ef3229..2637bcc2a3 100644
Binary files a/microsite/blog/assets/backstage-DS-header.png and b/microsite/blog/assets/backstage-DS-header.png differ
diff --git a/microsite/blog/assets/backstage-discord-DS.png b/microsite/blog/assets/backstage-discord-DS.png
index a0e513d7d8..bfee45ff18 100644
Binary files a/microsite/blog/assets/backstage-discord-DS.png and b/microsite/blog/assets/backstage-discord-DS.png differ
diff --git a/microsite/blog/assets/backstage-figma1-DS.png b/microsite/blog/assets/backstage-figma1-DS.png
index 00268eac2a..c2c32a00cb 100644
Binary files a/microsite/blog/assets/backstage-figma1-DS.png and b/microsite/blog/assets/backstage-figma1-DS.png differ
diff --git a/microsite/blog/assets/backstage-github-ds.png b/microsite/blog/assets/backstage-github-ds.png
index 6bd6bd976e..297056de6b 100644
Binary files a/microsite/blog/assets/backstage-github-ds.png and b/microsite/blog/assets/backstage-github-ds.png differ
diff --git a/microsite/blog/assets/backstage-guide-DS.png b/microsite/blog/assets/backstage-guide-DS.png
index 8c0c7e7c2e..4d57201010 100644
Binary files a/microsite/blog/assets/backstage-guide-DS.png and b/microsite/blog/assets/backstage-guide-DS.png differ
diff --git a/microsite/blog/assets/backstage-guidelines-ds.png b/microsite/blog/assets/backstage-guidelines-ds.png
index be5e9ff16f..3176a694db 100644
Binary files a/microsite/blog/assets/backstage-guidelines-ds.png and b/microsite/blog/assets/backstage-guidelines-ds.png differ
diff --git a/microsite/blog/assets/backstage-storybook-ds.png b/microsite/blog/assets/backstage-storybook-ds.png
index aeff6650eb..94d255b154 100644
Binary files a/microsite/blog/assets/backstage-storybook-ds.png and b/microsite/blog/assets/backstage-storybook-ds.png differ
diff --git a/microsite/blog/assets/backstage-world-DS.png b/microsite/blog/assets/backstage-world-DS.png
index 18e0da1425..354bf62829 100644
Binary files a/microsite/blog/assets/backstage-world-DS.png and b/microsite/blog/assets/backstage-world-DS.png differ
diff --git a/microsite/blog/assets/blog_1.png b/microsite/blog/assets/blog_1.png
index f8c3516fa7..7667c54538 100644
Binary files a/microsite/blog/assets/blog_1.png and b/microsite/blog/assets/blog_1.png differ
diff --git a/microsite/blog/assets/cncf-sandbox/cncf.png b/microsite/blog/assets/cncf-sandbox/cncf.png
index 624094b016..2edfeb9c8e 100644
Binary files a/microsite/blog/assets/cncf-sandbox/cncf.png and b/microsite/blog/assets/cncf-sandbox/cncf.png differ
diff --git a/microsite/blog/assets/illustration.svg b/microsite/blog/assets/illustration.svg
index 50e865ed4f..bba49c0449 100644
--- a/microsite/blog/assets/illustration.svg
+++ b/microsite/blog/assets/illustration.svg
@@ -1,104 +1 @@
-
+
\ No newline at end of file
diff --git a/microsite/blog/assets/marketplace.png b/microsite/blog/assets/marketplace.png
index 7681b436c7..01132b6aa2 100644
Binary files a/microsite/blog/assets/marketplace.png and b/microsite/blog/assets/marketplace.png differ
diff --git a/microsite/package.json b/microsite/package.json
index 734f1e4d49..335ada7212 100644
--- a/microsite/package.json
+++ b/microsite/package.json
@@ -7,13 +7,17 @@
"examples": "docusaurus-examples",
"start": "docusaurus-start",
"build": "docusaurus-build",
+ "prettier:check": "prettier --check .",
"publish-gh-pages": "docusaurus-publish",
"write-translations": "docusaurus-write-translations",
"version": "docusaurus-version",
"rename-version": "docusaurus-rename-version"
},
"devDependencies": {
- "docusaurus": "^2.0.0-alpha.64",
- "js-yaml": "^3.14.0"
- }
+ "@spotify/prettier-config": "^8.0.0",
+ "docusaurus": "^2.0.0-alpha.65",
+ "js-yaml": "^3.14.0",
+ "prettier": "^2.0.5"
+ },
+ "prettier": "@spotify/prettier-config"
}
diff --git a/microsite/pages/en/plugins.js b/microsite/pages/en/plugins.js
index 0ef8791970..a8255bcd0d 100644
--- a/microsite/pages/en/plugins.js
+++ b/microsite/pages/en/plugins.js
@@ -29,7 +29,7 @@ const Plugins = () => (
-
Plugin marketplace
+
Plugin Marketplace
Open source plugins that you can add to your Backstage deployment.
Learn how to build a plugin.
@@ -39,7 +39,7 @@ const Plugins = () => (
className="PluginAddNewButton ButtonFilled"
href={addPluginDocsLink}
>
- Add to marketplace
+ Add to Marketplace