Merge branch 'master' into timbonicus/example-data
@@ -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
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
'@backstage/core-api': minor
|
||||
'@backstage/core': minor
|
||||
'@backstage/plugin-auth-backend': minor
|
||||
---
|
||||
|
||||
Add SAML login to backstage
|
||||
|
||||

|
||||
|
||||

|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-cloudbuild': minor
|
||||
---
|
||||
|
||||
Releasing Google Cloud Build Plugin
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/catalog-model': minor
|
||||
---
|
||||
|
||||
Add handling and docs for entity references
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||

|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/theme': minor
|
||||
---
|
||||
|
||||
Tweak dark mode colors
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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 = () => (
|
||||
<BackstageRoutes>
|
||||
<Navigate key="/" to="/catalog" />
|
||||
<CatalogRoute path="/catalog">
|
||||
{' '}
|
||||
// catalogRouteRef
|
||||
<EntityPage type="service">
|
||||
<OverviewContent path="/">
|
||||
<WidgetA />
|
||||
<WidgetB />
|
||||
</OverviewContent>
|
||||
<CICDSwitcher path="/ci-cd" />
|
||||
<StatusRoute path="/api-status" /> // statusRouteRef
|
||||
<ApiDocsRoute path="/api" />
|
||||
<DocsRoute path="/docs" />
|
||||
</EntityPage>
|
||||
<EntityPage type="website">
|
||||
<OverviewContent path="/">
|
||||
<WidgetA />
|
||||
<WidgetB />
|
||||
</OverviewContent>
|
||||
<CICDSwitcher path="/ci-cd" />
|
||||
<SentryRoute path="/sentry" /> // sentryRouteRef
|
||||
<DocsRoute path="/docs" />
|
||||
</EntityPage>
|
||||
<EntityPage>
|
||||
<OverviewContent path="/">
|
||||
<WidgetA />
|
||||
<WidgetB />
|
||||
</OverviewContent>
|
||||
<DocsRoute path="/docs" />
|
||||
</EntityPage>
|
||||
</CatalogRoute>
|
||||
<DocsRoute path="/docs" />
|
||||
<TechRadarRoute path="/tech-radar" width={1500} height={800} />
|
||||
<GraphiQLRoute path="/graphiql" />
|
||||
<LighthouseRoute path="/lighthouse" />
|
||||
</BackstageRoutes>
|
||||
);
|
||||
```
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core': minor
|
||||
---
|
||||
|
||||
Fix dense in Structured Metadata Table
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/catalog-model': minor
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
---
|
||||
|
||||
Entirely case insensitive read path of entities
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||

|
||||
@@ -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.
|
||||
@@ -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)
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend': patch
|
||||
---
|
||||
|
||||
Move auth provider router creation to router
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Sync scaffolded backend with example
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-circleci': minor
|
||||
---
|
||||
|
||||
Refactor to use DiscoveryApi
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Remove discovery api override
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-jenkins': patch
|
||||
---
|
||||
|
||||
Refactor to use DiscoveryApi
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': minor
|
||||
---
|
||||
|
||||
Default to using internal scope for new plugins
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-common': minor
|
||||
---
|
||||
|
||||
Use localhost to fall back to IPv4 if IPv6 isn't available
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||

|
||||
@@ -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
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Add codeowners processor
|
||||
|
||||
- Include ESNext.Promise in TypeScript compilation
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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 💵
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': minor
|
||||
---
|
||||
|
||||
Upgrade dependency `esbuild@0.7.7`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
---
|
||||
|
||||
Simplify the read function in processors
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend': minor
|
||||
---
|
||||
|
||||
Lookup user in Google Auth Provider
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core': minor
|
||||
---
|
||||
|
||||
Added EmptyState component
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-api-docs': patch
|
||||
---
|
||||
|
||||
Resolve some dark mode styling issues in asyncAPI specs
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core': patch
|
||||
---
|
||||
|
||||
Fixed banner component position in DismissableBanner component
|
||||
@@ -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`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/catalog-model': minor
|
||||
---
|
||||
|
||||
Add the ability to import users from GitHub Organization into the catalog.
|
||||
@@ -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`.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Update SSR template to pass CI
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Upgrade dependency rollup-plugin-typescript2 to ^0.27.3
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
---
|
||||
|
||||
Use the new `UrlReader` in the `CodeOwnersProcessor`.
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'example-backend': patch
|
||||
---
|
||||
|
||||
Pass GitHub token into Scaffolder GitHub Preparer
|
||||
@@ -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:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Old name</th>
|
||||
<th>New name</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GITHUB_ACCESS_TOKEN</td>
|
||||
<td>GITHUB_TOKEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GITHUB_PRIVATE_TOKEN</td>
|
||||
<td>GITHUB_TOKEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GITLAB_ACCESS_TOKEN</td>
|
||||
<td>GITLAB_TOKEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GITLAB_PRIVATE_TOKEN</td>
|
||||
<td>GITLAB_TOKEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AZURE_PRIVATE_TOKEN</td>
|
||||
<td>AZURE_TOKEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GHE_PRIVATE_TOKEN</td>
|
||||
<td>GHE_TOKEN</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Including source maps with all packages
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Fix for configured templates using 'url' locations even though it's not supported yet
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Add authentication token to Scaffolder GitHub Preparer
|
||||
@@ -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`.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -13,3 +13,4 @@
|
||||
- [ ] Prettier run on changed files
|
||||
- [ ] Tests added for new functionality
|
||||
- [ ] Regression tests added for bug fixes
|
||||
- [ ] Added a changeset ([more info](https://github.com/spotify/backstage/blob/master/CONTRIBUTING.md#creating-changesets))
|
||||
|
||||
@@ -32,6 +32,7 @@ Codehilite
|
||||
codeowners
|
||||
config
|
||||
Config
|
||||
configmaps
|
||||
configs
|
||||
const
|
||||
cookiecutter
|
||||
@@ -67,6 +68,7 @@ graphviz
|
||||
Hackathons
|
||||
haproxy
|
||||
heroku
|
||||
horizontalpodautoscalers
|
||||
Hostname
|
||||
http
|
||||
https
|
||||
@@ -140,6 +142,7 @@ rankdir
|
||||
readme
|
||||
Readme
|
||||
Redash
|
||||
replicasets
|
||||
repo
|
||||
Repo
|
||||
repos
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"ignoredFiles": [
|
||||
"docs/assets/**/*.svg"
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
.yarn
|
||||
dist
|
||||
microsite/build
|
||||
microsite
|
||||
coverage
|
||||
*.hbs
|
||||
templates
|
||||
|
||||
@@ -8,6 +8,8 @@ If you encounter issues while upgrading to a newer version, don't hesitate to re
|
||||
|
||||
> Collect changes for the next release below
|
||||
|
||||
## 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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
Before Width: | Height: | Size: 349 KiB |
@@ -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"]
|
||||
|
||||
|
||||
@@ -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 <absolute_path_to_the_dockerfile> --tag <your_tag>
|
||||
```
|
||||
|
||||
> The absolute path is necessary as this directory is not copied to the build workspace when building
|
||||
> the docker image.
|
||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 265 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 293 KiB After Width: | Height: | Size: 201 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 269 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 691 KiB After Width: | Height: | Size: 504 KiB |
|
Before Width: | Height: | Size: 389 KiB After Width: | Height: | Size: 293 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 414 KiB After Width: | Height: | Size: 298 KiB |
|
Before Width: | Height: | Size: 234 KiB After Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 384 KiB After Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 652 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 599 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 786 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 665 KiB |