Merge branch 'master' into mob/auth-origins
This commit is contained in:
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-test-utils': patch
|
||||
---
|
||||
|
||||
Make sure that the unique databases names generated by `TestDatabases.create()`
|
||||
don't collide.
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Expose a new composable `TechDocsIndexPage` and a `DefaultTechDocsHome` with support for starring docs and filtering on owned, starred, owner, and tags.
|
||||
|
||||
You can migrate to the new UI view by making the following changes in your `App.tsx`:
|
||||
|
||||
```diff
|
||||
- <Route path="/docs" element={<TechdocsPage />} />
|
||||
+ <Route path="/docs" element={<TechDocsIndexPage />}>
|
||||
+ <DefaultTechDocsHome />
|
||||
+ </Route>
|
||||
+ <Route
|
||||
+ path="/docs/:namespace/:kind/:name/*"
|
||||
+ element={<TechDocsReaderPage />}
|
||||
+ />
|
||||
```
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
---
|
||||
|
||||
Use a more informative error message when URL reading isn't allowed due to no reader matching the target URL.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
Adds ability to send an ExternalId with the assume role request to AWS
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Added UI Schema support for array items for example, support EntityPicker within an array field
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
- Adds a new field `EntityNamePicker` that can be used in scaffolder templates to accept and validate an entity name. This field is registered by default, and can be used in templates by setting the `ui:field` property to `EntityNamePicker`. If you've customized your scaffolder field extensions, you can include this one by adding it when registering the scaffolder route:
|
||||
|
||||
```diff
|
||||
import {
|
||||
ScaffolderFieldExtensions,
|
||||
+ EntityNamePickerFieldExtension,
|
||||
} from '@backstage/plugin-scaffolder';
|
||||
|
||||
<Route path="/create" element={<ScaffolderPage />}>
|
||||
<ScaffolderFieldExtensions>
|
||||
{/* ...custom field extensions... */}
|
||||
|
||||
+ <EntityNamePickerFieldExtension />
|
||||
</ScaffolderFieldExtensions>
|
||||
</Route>;
|
||||
```
|
||||
|
||||
- Adds a new generic field `TextValuePicker` to be used when writing custom field extensions that use a standard UI with custom validation. An example of doing this can be found in `packages/app/src/components/scaffolder/customScaffolderExtensions.tsx`.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/core-app-api': patch
|
||||
---
|
||||
|
||||
Add support for serving the app with a base path other than `/`, which is enabled by including the path in `app.baseUrl`.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-sonarqube': minor
|
||||
---
|
||||
|
||||
Use IdentityApi to provide Auth Token for SonarQubeClient Api calls
|
||||
@@ -1,25 +0,0 @@
|
||||
---
|
||||
'@backstage/core-app-api': patch
|
||||
'@backstage/core-components': patch
|
||||
'@backstage/core-plugin-api': patch
|
||||
'@backstage/dev-utils': patch
|
||||
'@backstage/test-utils': patch
|
||||
'@backstage/test-utils-core': patch
|
||||
'@backstage/plugin-api-docs': patch
|
||||
'@backstage/plugin-catalog': patch
|
||||
'@backstage/plugin-catalog-import': patch
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
'@backstage/plugin-cost-insights': patch
|
||||
'@backstage/plugin-explore': patch
|
||||
'@backstage/plugin-git-release-manager': patch
|
||||
'@backstage/plugin-lighthouse': patch
|
||||
'@backstage/plugin-pagerduty': patch
|
||||
'@backstage/plugin-rollbar': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
'@backstage/plugin-search': patch
|
||||
'@backstage/plugin-sentry': patch
|
||||
'@backstage/plugin-tech-radar': patch
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Updated the index page redirect to work with apps served on a different base path than `/`.
|
||||
|
||||
To apply this change to an existing app, remove the `/` prefix from the target route in the `Navigate` element in `packages/app/src/App.tsx`:
|
||||
|
||||
```diff
|
||||
-<Navigate key="/" to="/catalog" />
|
||||
+<Navigate key="/" to="catalog" />
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-xcmetrics': patch
|
||||
---
|
||||
|
||||
Enable browsing detailed build information such as host configuration, errors, warnings, metadata and a timeline for all targets
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/integration': patch
|
||||
---
|
||||
|
||||
Adds an allow list of GitHub installations
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Switch `EventSource` implementation with header support from a Node.js API-based one to an XHR-based one.
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Use new composable `TechDocsIndexPage` and `DefaultTechDocsHome`
|
||||
|
||||
Make the following changes to your `App.tsx` to migrate existing apps:
|
||||
|
||||
```diff
|
||||
- <Route path="/docs" element={<TechdocsPage />} />
|
||||
+ <Route path="/docs" element={<TechDocsIndexPage />}>
|
||||
+ <DefaultTechDocsHome />
|
||||
+ </Route>
|
||||
+ <Route
|
||||
+ path="/docs/:namespace/:kind/:name/*"
|
||||
+ element={<TechDocsReaderPage />}
|
||||
+ />
|
||||
```
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-search-backend-module-elasticsearch': patch
|
||||
---
|
||||
|
||||
Fix to allow optionally reading `auth` parameter for custom hosted ElasticSearch instances. Also remove `bearer` auth config since it's currently unsupported.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-search-backend-module-pg': patch
|
||||
---
|
||||
|
||||
Add `plugin-search-backend-module-pg` providing a postgres based search engine.
|
||||
See the [README of `search-backend-module-pg`](https://github.com/backstage/backstage/blob/master/plugins/search-backend-module-pg/README.md) for usage instructions.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/integration': patch
|
||||
---
|
||||
|
||||
Remove repo restriction from GitHub credentials provider
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Migrate to using `webpack@5` 🎉
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Add a complete prettier setup to the created project. Prettier used to only be added as a dependency to create apps, but there wasn't a complete setup included that makes it easy to run prettier. That has now changed, and the new `prettier:check` command can be used to check the formatting of the files in your created project.
|
||||
|
||||
To apply this change to an existing app, a couple of changes need to be made.
|
||||
|
||||
Create a `.prettierignore` file at the root of your repository with the following contents:
|
||||
|
||||
```
|
||||
dist
|
||||
dist-types
|
||||
coverage
|
||||
.vscode
|
||||
```
|
||||
|
||||
Next update the root `package.json` by bumping the prettier version and adding the new `prettier:check` command:
|
||||
|
||||
```diff
|
||||
"scripts": {
|
||||
...
|
||||
+ "prettier:check": "prettier --check .",
|
||||
...
|
||||
},
|
||||
...
|
||||
"dependencies": {
|
||||
...
|
||||
- "prettier": "^1.19.1"
|
||||
+ "prettier": "^2.3.2"
|
||||
}
|
||||
```
|
||||
|
||||
Finally run `yarn prettier --write .` on your project to update the existing formatting.
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Removed the `/` prefix in the catalog `SidebarItem` element, as it is no longer needed.
|
||||
|
||||
To apply this change to an existing app, remove the `/` prefix from the catalog and any other sidebar items in `packages/app/src/components/Root/Root.ts`:
|
||||
|
||||
```diff
|
||||
-<SidebarItem icon={HomeIcon} to="/catalog" text="Home" />
|
||||
+<SidebarItem icon={HomeIcon} to="catalog" text="Home" />
|
||||
```
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Switched `@types/react-dom` dependency to of the app package to request `*` rather than a specific version.
|
||||
|
||||
To apply this change to an existing app, change the following in `packages/app/package.json`:
|
||||
|
||||
```diff
|
||||
- "@types/react-dom": "^16.9.8",
|
||||
+ "@types/react-dom": "*",
|
||||
```
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-api-docs': patch
|
||||
---
|
||||
|
||||
Support deep linking in OpenAPI definitions.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-catalog': patch
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
---
|
||||
|
||||
Move and rename `FavoriteEntity` component to `catalog-react`
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
'@backstage/techdocs-common': patch
|
||||
---
|
||||
|
||||
Stale TechDocs content (files that had previously been published but which have
|
||||
since been removed) is now removed from storage at publish-time. This is now
|
||||
supported by the following publishers:
|
||||
|
||||
- Google GCS
|
||||
- AWS S3
|
||||
- Azure Blob Storage
|
||||
|
||||
You may need to apply a greater level of permissions (e.g. the ability to
|
||||
delete objects in your storage provider) to any credentials/accounts used by
|
||||
the TechDocs CLI or TechDocs backend in order for this change to take effect.
|
||||
|
||||
For more details, see [#6132][issue-ref].
|
||||
|
||||
[issue-ref]: https://github.com/backstage/backstage/issues/6132
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Fix for `SidebarItem` matching the active route too broadly.
|
||||
@@ -15,6 +15,7 @@ Avro
|
||||
backrub
|
||||
Bigtable
|
||||
Billett
|
||||
Bitbucket
|
||||
Bitrise
|
||||
Blackbox
|
||||
bool
|
||||
@@ -84,6 +85,8 @@ facto
|
||||
failover
|
||||
Fargate
|
||||
Figma
|
||||
firehydrant
|
||||
FireHydrant
|
||||
Firekube
|
||||
Fiverr
|
||||
gitbeaker
|
||||
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
run: node scripts/verify-links.js
|
||||
|
||||
- name: prettier
|
||||
run: yarn prettier:check
|
||||
run: yarn prettier:check '!ADOPTERS.md'
|
||||
|
||||
- name: lock
|
||||
run: yarn lock:check
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
name: Prettier
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
autofix-markdown:
|
||||
name: Autofix Markdown files using Prettier
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
# Fetch changes to previous commit - required for 'only_changed' in Prettier action
|
||||
fetch-depth: 0
|
||||
|
||||
# Beginning of yarn setup, keep in sync between all workflows, see ci.yml
|
||||
- name: use node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
registry-url: https://registry.npmjs.org/ # Needed for auth
|
||||
- name: cache all node_modules
|
||||
id: cache-modules
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
|
||||
- name: find location of global yarn cache
|
||||
id: yarn-cache
|
||||
if: steps.cache-modules.outputs.cache-hit != 'true'
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: cache global yarn cache
|
||||
uses: actions/cache@v2
|
||||
if: steps.cache-modules.outputs.cache-hit != 'true'
|
||||
with:
|
||||
path: ${{ steps.yarn-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
- name: yarn install
|
||||
run: yarn install --frozen-lockfile
|
||||
# End of yarn setup
|
||||
|
||||
- name: Run Prettier on ADOPTERS.md
|
||||
uses: creyD/prettier_action@v3.1
|
||||
with:
|
||||
# Modifies commit only if prettier autofixed the ADOPTERS.md
|
||||
prettier_options: --config docs/prettier.config.js --write ADOPTERS.md
|
||||
only_changed: true
|
||||
commit_message: 'Autofix ADOPTERS.md using Prettier'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -152,6 +152,11 @@ integrations:
|
||||
- host: bitbucket.org
|
||||
username: ${BITBUCKET_USERNAME}
|
||||
appPassword: ${BITBUCKET_APP_PASSWORD}
|
||||
### Example for how to add your bitbucket server instance using the API:
|
||||
# - host: server.bitbucket.com
|
||||
# apiBaseUrl: server.bitbucket.com
|
||||
# username: ${BITBUCKET_SERVER_USERNAME}
|
||||
# appPassword: ${BITBUCKET_SERVER_APP_PASSWORD}
|
||||
azure:
|
||||
- host: dev.azure.com
|
||||
token: ${AZURE_TOKEN}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
# simply copies in the build output into the image. If you want to also perform
|
||||
# the build itself inside docker, use Dockerfile.build in this folder instead.
|
||||
|
||||
|
||||
# USAGE:
|
||||
#
|
||||
# - Copy this file and the "docker" folder from this directory to your project
|
||||
@@ -23,7 +22,7 @@
|
||||
#
|
||||
# yarn install
|
||||
# yarn tsc
|
||||
# yarn build --config <config1> --config <config2> ...
|
||||
# yarn workspace app build --config <config1> --config <config2> ...
|
||||
# docker build -t backstage-frontend -f Dockerfile.hostbuild .
|
||||
|
||||
|
||||
@@ -38,4 +37,3 @@ COPY docker/default.conf.template /etc/nginx/templates/default.conf.template
|
||||
COPY docker/inject-config.sh /docker-entrypoint.d/40-inject-config.sh
|
||||
|
||||
ENV PORT 80
|
||||
|
||||
|
||||
@@ -111,6 +111,48 @@ export default async function createPlugin({
|
||||
...
|
||||
```
|
||||
|
||||
## Resolving membership through the catalog
|
||||
|
||||
If you want to provide additional claims through Sign-In resolvers but still
|
||||
have the software catalog handle group (and transitive group) membership, you
|
||||
can do this using the `CatalogIdentityClient` provided as context to Sign-In
|
||||
resolvers:
|
||||
|
||||
```ts
|
||||
export default async function createPlugin({
|
||||
...
|
||||
}: PluginEnvironment): Promise<Router> {
|
||||
return await createRouter({
|
||||
...
|
||||
providerFactories: {
|
||||
google: createGoogleProvider({
|
||||
signIn: {
|
||||
resolver: async ({ profile: { email } }, ctx) => {
|
||||
const [sub] = email?.split('@') ?? '';
|
||||
// Fetch from an external system that returns entity claims like:
|
||||
// ['user:default/breanna.davison', ...]
|
||||
const ent = await externalSystemClient.getUsernames(email);
|
||||
|
||||
// Resolve group membership from the Backstage catalog
|
||||
const fullEnt = await ctx.catalogIdentityClient.resolveCatalogMembership({
|
||||
entityRefs: [sub].concat(ent),
|
||||
logger: ctx.logger,
|
||||
});
|
||||
const token = await ctx.tokenIssuer.issueToken({
|
||||
claims: { sub, ent: fullEnt },
|
||||
});
|
||||
return { sub, token };
|
||||
},
|
||||
},
|
||||
}),
|
||||
...
|
||||
```
|
||||
|
||||
The `resolveCatalogMembership` method will retrieve the referenced entities from
|
||||
the catalog, if possible, and check for
|
||||
[memberOf](../features/software-catalog/well-known-relations.md#memberof-and-hasmember)
|
||||
relations to add additional entity claims.
|
||||
|
||||
## AuthHandler
|
||||
|
||||
Similar to a custom sign-in resolver, you can also write a custom auth handler
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 18 KiB |
@@ -1,5 +1,33 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.41
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-cost-insights@0.11.4
|
||||
- @backstage/plugin-github-actions@0.4.16
|
||||
- @backstage/plugin-jenkins@0.5.3
|
||||
- @backstage/plugin-kubernetes@0.4.11
|
||||
- @backstage/plugin-pagerduty@0.3.11
|
||||
- @backstage/plugin-scaffolder@0.11.0
|
||||
- @backstage/plugin-sentry@0.3.18
|
||||
- @backstage/plugin-techdocs@0.10.4
|
||||
- @backstage/core-app-api@0.1.8
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/plugin-api-docs@0.6.6
|
||||
- @backstage/plugin-catalog@0.6.11
|
||||
- @backstage/plugin-catalog-import@0.5.17
|
||||
- @backstage/plugin-catalog-react@0.4.2
|
||||
- @backstage/plugin-explore@0.3.13
|
||||
- @backstage/plugin-lighthouse@0.2.23
|
||||
- @backstage/plugin-rollbar@0.3.12
|
||||
- @backstage/plugin-search@0.4.7
|
||||
- @backstage/plugin-tech-radar@0.4.5
|
||||
- @backstage/cli@0.7.8
|
||||
- @backstage/integration-react@0.1.7
|
||||
|
||||
## 0.2.40
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+24
-24
@@ -1,42 +1,42 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.40",
|
||||
"version": "0.2.41",
|
||||
"private": true,
|
||||
"bundled": true,
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/integration-react": "^0.1.6",
|
||||
"@backstage/plugin-api-docs": "^0.6.5",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/integration-react": "^0.1.7",
|
||||
"@backstage/plugin-api-docs": "^0.6.6",
|
||||
"@backstage/plugin-badges": "^0.2.7",
|
||||
"@backstage/plugin-catalog": "^0.6.10",
|
||||
"@backstage/plugin-catalog-import": "^0.5.16",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/plugin-catalog": "^0.6.11",
|
||||
"@backstage/plugin-catalog-import": "^0.5.17",
|
||||
"@backstage/plugin-catalog-react": "^0.4.2",
|
||||
"@backstage/plugin-circleci": "^0.2.21",
|
||||
"@backstage/plugin-cloudbuild": "^0.2.21",
|
||||
"@backstage/plugin-code-coverage": "^0.1.9",
|
||||
"@backstage/plugin-cost-insights": "^0.11.3",
|
||||
"@backstage/plugin-explore": "^0.3.12",
|
||||
"@backstage/plugin-cost-insights": "^0.11.4",
|
||||
"@backstage/plugin-explore": "^0.3.13",
|
||||
"@backstage/plugin-gcp-projects": "^0.3.2",
|
||||
"@backstage/plugin-github-actions": "^0.4.15",
|
||||
"@backstage/plugin-github-actions": "^0.4.16",
|
||||
"@backstage/plugin-graphiql": "^0.2.14",
|
||||
"@backstage/plugin-jenkins": "^0.5.2",
|
||||
"@backstage/plugin-jenkins": "^0.5.3",
|
||||
"@backstage/plugin-kafka": "^0.2.13",
|
||||
"@backstage/plugin-kubernetes": "^0.4.10",
|
||||
"@backstage/plugin-lighthouse": "^0.2.22",
|
||||
"@backstage/plugin-kubernetes": "^0.4.11",
|
||||
"@backstage/plugin-lighthouse": "^0.2.23",
|
||||
"@backstage/plugin-newrelic": "^0.3.2",
|
||||
"@backstage/plugin-org": "^0.3.19",
|
||||
"@backstage/plugin-pagerduty": "0.3.10",
|
||||
"@backstage/plugin-rollbar": "^0.3.11",
|
||||
"@backstage/plugin-scaffolder": "^0.10.3",
|
||||
"@backstage/plugin-search": "^0.4.6",
|
||||
"@backstage/plugin-sentry": "^0.3.17",
|
||||
"@backstage/plugin-pagerduty": "0.3.11",
|
||||
"@backstage/plugin-rollbar": "^0.3.12",
|
||||
"@backstage/plugin-scaffolder": "^0.11.0",
|
||||
"@backstage/plugin-search": "^0.4.7",
|
||||
"@backstage/plugin-sentry": "^0.3.18",
|
||||
"@backstage/plugin-shortcuts": "^0.1.6",
|
||||
"@backstage/plugin-tech-radar": "^0.4.4",
|
||||
"@backstage/plugin-techdocs": "^0.10.3",
|
||||
"@backstage/plugin-tech-radar": "^0.4.5",
|
||||
"@backstage/plugin-techdocs": "^0.10.4",
|
||||
"@backstage/plugin-todo": "^0.1.7",
|
||||
"@backstage/plugin-user-settings": "^0.3.3",
|
||||
"@backstage/search-common": "^0.1.3",
|
||||
@@ -60,7 +60,7 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@rjsf/core": "^3.0.0",
|
||||
"@testing-library/cypress": "^7.0.1",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/backend-common
|
||||
|
||||
## 0.8.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- f7ce7c565: Use a more informative error message when URL reading isn't allowed due to no reader matching the target URL.
|
||||
- ce1958021: Pass on credentials to the integrations package, so that it can properly pick the API route when using GitHub apps based auth
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
|
||||
## 0.8.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-common",
|
||||
"description": "Common functionality library for Backstage backends",
|
||||
"version": "0.8.8",
|
||||
"version": "0.8.9",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"private": false,
|
||||
@@ -33,7 +33,7 @@
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/config-loader": "^0.6.6",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.9",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@google-cloud/storage": "^5.8.0",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
"@types/cors": "^2.8.6",
|
||||
@@ -76,8 +76,8 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/test-utils": "^0.1.15",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@types/archiver": "^5.1.0",
|
||||
"@types/compression": "^1.7.0",
|
||||
"@types/concat-stream": "^1.6.0",
|
||||
|
||||
@@ -91,15 +91,20 @@ export class GithubUrlReader implements UrlReader {
|
||||
url: string,
|
||||
options?: ReadUrlOptions,
|
||||
): Promise<ReadUrlResponse> {
|
||||
const ghUrl = getGitHubFileFetchUrl(url, this.integration.config);
|
||||
const { headers } = await this.deps.credentialsProvider.getCredentials({
|
||||
const credentials = await this.deps.credentialsProvider.getCredentials({
|
||||
url,
|
||||
});
|
||||
const ghUrl = getGitHubFileFetchUrl(
|
||||
url,
|
||||
this.integration.config,
|
||||
credentials,
|
||||
);
|
||||
|
||||
let response: Response;
|
||||
try {
|
||||
response = await fetch(ghUrl.toString(), {
|
||||
response = await fetch(ghUrl, {
|
||||
headers: {
|
||||
...headers,
|
||||
...credentials?.headers,
|
||||
...(options?.etag && { 'If-None-Match': options.etag }),
|
||||
Accept: 'application/vnd.github.v3.raw',
|
||||
},
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/backend-test-utils
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 524045758: Make sure that the unique databases names generated by `TestDatabases.create()`
|
||||
don't collide.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.8.9
|
||||
- @backstage/cli@0.7.8
|
||||
|
||||
## 0.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-test-utils",
|
||||
"description": "Test helpers library for Backstage backends",
|
||||
"version": "0.1.4",
|
||||
"version": "0.1.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"private": false,
|
||||
@@ -30,8 +30,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.8.5",
|
||||
"@backstage/cli": "^0.7.1",
|
||||
"@backstage/backend-common": "^0.8.9",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"knex": "^0.95.1",
|
||||
"mysql2": "^2.2.5",
|
||||
@@ -41,7 +41,7 @@
|
||||
"uuid": "^8.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.1",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"jest": "^26.0.1"
|
||||
},
|
||||
"files": [
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# example-backend
|
||||
|
||||
## 0.2.41
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-auth-backend@0.3.20
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/plugin-scaffolder-backend@0.15.0
|
||||
- @backstage/backend-common@0.8.9
|
||||
- @backstage/plugin-kubernetes-backend@0.3.14
|
||||
- @backstage/plugin-search-backend-module-elasticsearch@0.0.2
|
||||
- @backstage/plugin-search-backend-module-pg@0.1.1
|
||||
- @backstage/plugin-catalog-backend@0.13.2
|
||||
- @backstage/plugin-code-coverage-backend@0.1.9
|
||||
- @backstage/plugin-scaffolder-backend-module-rails@0.1.4
|
||||
- @backstage/plugin-techdocs-backend@0.9.2
|
||||
- @backstage/plugin-todo-backend@0.1.9
|
||||
- example-app@0.2.41
|
||||
|
||||
## 0.2.38
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend",
|
||||
"version": "0.2.38",
|
||||
"version": "0.2.41",
|
||||
"main": "dist/index.cjs.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -27,35 +27,35 @@
|
||||
"migrate:create": "knex migrate:make -x ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.8.7",
|
||||
"@backstage/backend-common": "^0.8.9",
|
||||
"@backstage/catalog-client": "^0.3.17",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/integration": "^0.5.8",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@backstage/plugin-app-backend": "^0.3.15",
|
||||
"@backstage/plugin-auth-backend": "^0.3.18",
|
||||
"@backstage/plugin-auth-backend": "^0.3.20",
|
||||
"@backstage/plugin-badges-backend": "^0.1.8",
|
||||
"@backstage/plugin-catalog-backend": "^0.13.0",
|
||||
"@backstage/plugin-code-coverage-backend": "^0.1.8",
|
||||
"@backstage/plugin-catalog-backend": "^0.13.2",
|
||||
"@backstage/plugin-code-coverage-backend": "^0.1.9",
|
||||
"@backstage/plugin-graphql-backend": "^0.1.8",
|
||||
"@backstage/plugin-jenkins-backend": "^0.1.2",
|
||||
"@backstage/plugin-kubernetes-backend": "^0.3.11",
|
||||
"@backstage/plugin-kubernetes-backend": "^0.3.14",
|
||||
"@backstage/plugin-kafka-backend": "^0.2.8",
|
||||
"@backstage/plugin-proxy-backend": "^0.2.9",
|
||||
"@backstage/plugin-rollbar-backend": "^0.1.13",
|
||||
"@backstage/plugin-scaffolder-backend": "^0.14.1",
|
||||
"@backstage/plugin-scaffolder-backend-module-rails": "^0.1.3",
|
||||
"@backstage/plugin-scaffolder-backend": "^0.15.0",
|
||||
"@backstage/plugin-scaffolder-backend-module-rails": "^0.1.4",
|
||||
"@backstage/plugin-search-backend": "^0.2.3",
|
||||
"@backstage/plugin-search-backend-node": "^0.4.0",
|
||||
"@backstage/plugin-search-backend-module-elasticsearch": "^0.0.1",
|
||||
"@backstage/plugin-search-backend-module-pg": "^0.1.0",
|
||||
"@backstage/plugin-techdocs-backend": "^0.9.0",
|
||||
"@backstage/plugin-todo-backend": "^0.1.8",
|
||||
"@backstage/plugin-search-backend-module-elasticsearch": "^0.0.2",
|
||||
"@backstage/plugin-search-backend-module-pg": "^0.1.1",
|
||||
"@backstage/plugin-techdocs-backend": "^0.9.2",
|
||||
"@backstage/plugin-todo-backend": "^0.1.9",
|
||||
"@gitbeaker/node": "^30.2.0",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
"azure-devops-node-api": "^10.2.2",
|
||||
"dockerode": "^3.2.1",
|
||||
"example-app": "^0.2.37",
|
||||
"example-app": "^0.2.41",
|
||||
"express": "^4.17.1",
|
||||
"express-promise-router": "^4.1.0",
|
||||
"knex": "^0.95.1",
|
||||
@@ -65,7 +65,7 @@
|
||||
"winston": "^3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.5",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@types/dockerode": "^3.2.1",
|
||||
"@types/express": "^4.17.6",
|
||||
"@types/express-serve-static-core": "^4.17.5"
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @backstage/cli
|
||||
|
||||
## 0.7.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- c4ef9181a: Migrate to using `webpack@5` 🎉
|
||||
|
||||
## 0.7.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/cli",
|
||||
"description": "CLI for developing Backstage plugins and apps",
|
||||
"version": "0.7.7",
|
||||
"version": "0.7.8",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
@@ -118,13 +118,13 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/backend-common": "^0.8.8",
|
||||
"@backstage/backend-common": "^0.8.9",
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@types/diff": "^5.0.0",
|
||||
"@types/express": "^4.17.6",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/codemods
|
||||
|
||||
## 0.1.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-app-api@0.1.8
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
|
||||
## 0.1.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/codemods",
|
||||
"description": "A collection of codemods for Backstage projects",
|
||||
"version": "0.1.8",
|
||||
"version": "0.1.9",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/core-app-api
|
||||
|
||||
## 0.1.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 362657623: Add support for serving the app with a base path other than `/`, which is enabled by including the path in `app.baseUrl`.
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
|
||||
## 0.1.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/core-app-api",
|
||||
"description": "Core app API used by Backstage apps",
|
||||
"version": "0.1.7",
|
||||
"version": "0.1.8",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -29,9 +29,9 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -44,9 +44,9 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/test-utils-core": "^0.1.1",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@backstage/test-utils-core": "^0.1.2",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/react-hooks": "^3.4.2",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/core-components
|
||||
|
||||
## 0.3.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- 55a5dbd54: Fix for `SidebarItem` matching the active route too broadly.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/core-components",
|
||||
"description": "Core components used by Backstage plugins and apps",
|
||||
"version": "0.3.0",
|
||||
"version": "0.3.1",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -30,7 +30,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-table/core": "^3.1.0",
|
||||
@@ -70,9 +70,9 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @backstage/core-plugin-api
|
||||
|
||||
## 0.1.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/core-plugin-api",
|
||||
"description": "Core API used by Backstage plugins",
|
||||
"version": "0.1.5",
|
||||
"version": "0.1.6",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -41,10 +41,10 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/test-utils-core": "^0.1.1",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@backstage/test-utils-core": "^0.1.2",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/react-hooks": "^3.4.2",
|
||||
|
||||
@@ -1,5 +1,83 @@
|
||||
# @backstage/create-app
|
||||
|
||||
## 0.3.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 362ea5a72: Updated the index page redirect to work with apps served on a different base path than `/`.
|
||||
|
||||
To apply this change to an existing app, remove the `/` prefix from the target route in the `Navigate` element in `packages/app/src/App.tsx`:
|
||||
|
||||
```diff
|
||||
-<Navigate key="/" to="/catalog" />
|
||||
+<Navigate key="/" to="catalog" />
|
||||
```
|
||||
|
||||
- 80582cbec: Use new composable `TechDocsIndexPage` and `DefaultTechDocsHome`
|
||||
|
||||
Make the following changes to your `App.tsx` to migrate existing apps:
|
||||
|
||||
```diff
|
||||
- <Route path="/docs" element={<TechdocsPage />} />
|
||||
+ <Route path="/docs" element={<TechDocsIndexPage />}>
|
||||
+ <DefaultTechDocsHome />
|
||||
+ </Route>
|
||||
+ <Route
|
||||
+ path="/docs/:namespace/:kind/:name/*"
|
||||
+ element={<TechDocsReaderPage />}
|
||||
+ />
|
||||
```
|
||||
|
||||
- c4ef9181a: Migrate to using `webpack@5` 🎉
|
||||
- 56c773909: Add a complete prettier setup to the created project. Prettier used to only be added as a dependency to create apps, but there wasn't a complete setup included that makes it easy to run prettier. That has now changed, and the new `prettier:check` command can be used to check the formatting of the files in your created project.
|
||||
|
||||
To apply this change to an existing app, a couple of changes need to be made.
|
||||
|
||||
Create a `.prettierignore` file at the root of your repository with the following contents:
|
||||
|
||||
```
|
||||
dist
|
||||
dist-types
|
||||
coverage
|
||||
.vscode
|
||||
```
|
||||
|
||||
Next update the root `package.json` by bumping the prettier version and adding the new `prettier:check` command:
|
||||
|
||||
```diff
|
||||
"scripts": {
|
||||
...
|
||||
+ "prettier:check": "prettier --check .",
|
||||
...
|
||||
},
|
||||
...
|
||||
"dependencies": {
|
||||
...
|
||||
- "prettier": "^1.19.1"
|
||||
+ "prettier": "^2.3.2"
|
||||
}
|
||||
```
|
||||
|
||||
Finally run `yarn prettier --write .` on your project to update the existing formatting.
|
||||
|
||||
- 9f8f8dd6b: Removed the `/` prefix in the catalog `SidebarItem` element, as it is no longer needed.
|
||||
|
||||
To apply this change to an existing app, remove the `/` prefix from the catalog and any other sidebar items in `packages/app/src/components/Root/Root.ts`:
|
||||
|
||||
```diff
|
||||
-<SidebarItem icon={HomeIcon} to="/catalog" text="Home" />
|
||||
+<SidebarItem icon={HomeIcon} to="catalog" text="Home" />
|
||||
```
|
||||
|
||||
- 56c773909: Switched `@types/react-dom` dependency to of the app package to request `*` rather than a specific version.
|
||||
|
||||
To apply this change to an existing app, change the following in `packages/app/package.json`:
|
||||
|
||||
```diff
|
||||
- "@types/react-dom": "^16.9.8",
|
||||
+ "@types/react-dom": "*",
|
||||
```
|
||||
|
||||
## 0.3.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/create-app",
|
||||
"description": "Create app package for Backstage",
|
||||
"version": "0.3.34",
|
||||
"version": "0.3.35",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/dev-utils
|
||||
|
||||
## 0.2.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- Updated dependencies
|
||||
- @backstage/core-app-api@0.1.8
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/test-utils@0.1.17
|
||||
- @backstage/plugin-catalog-react@0.4.2
|
||||
- @backstage/integration-react@0.1.7
|
||||
|
||||
## 0.2.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/dev-utils",
|
||||
"description": "Utilities for developing Backstage plugins.",
|
||||
"version": "0.2.5",
|
||||
"version": "0.2.6",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -29,13 +29,13 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/integration-react": "^0.1.6",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/integration-react": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.2",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -50,7 +50,7 @@
|
||||
"react-router-dom": "6.0.0-beta.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@types/jest": "^26.0.7",
|
||||
"@types/node": "^14.14.32"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/integration-react
|
||||
|
||||
## 0.1.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
|
||||
## 0.1.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/integration-react",
|
||||
"version": "0.1.6",
|
||||
"version": "0.1.7",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -21,9 +21,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/integration": "^0.5.9",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -33,9 +33,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/integration
|
||||
|
||||
## 0.6.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- ce1958021: `getGitHubFileFetchUrl` and `getGitHubRequestOptions` now require a `credentials` argument. This is needed to address an issue where the raw route was chosen by the `UrlReader` when using GitHub Apps based auth.
|
||||
|
||||
Deprecated the `getGitHubRequestOptions` function, which is no longer used internally.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8bedb75ae: Update Luxon dependency to 2.x
|
||||
- 68af4d556: Adds an allow list of GitHub installations
|
||||
- 5fd31c2f4: Remove repo restriction from GitHub credentials provider
|
||||
|
||||
## 0.5.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -165,20 +165,23 @@ export function getBitbucketRequestOptions(
|
||||
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// Warning: (ae-forgotten-export) The symbol "GithubCredentials" needs to be exported by the entry point index.d.ts
|
||||
// Warning: (ae-missing-release-tag) "getGitHubFileFetchUrl" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public
|
||||
export function getGitHubFileFetchUrl(
|
||||
url: string,
|
||||
config: GitHubIntegrationConfig,
|
||||
credentials: GithubCredentials,
|
||||
): string;
|
||||
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// Warning: (ae-missing-release-tag) "getGitHubRequestOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public
|
||||
// @public @deprecated
|
||||
export function getGitHubRequestOptions(
|
||||
config: GitHubIntegrationConfig,
|
||||
credentials: GithubCredentials,
|
||||
): RequestInit;
|
||||
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
@@ -228,7 +231,6 @@ export class GithubCredentialsProvider {
|
||||
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
|
||||
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
|
||||
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
|
||||
// Warning: (ae-forgotten-export) The symbol "GithubCredentials" needs to be exported by the entry point index.d.ts
|
||||
getCredentials(opts: { url: string }): Promise<GithubCredentials>;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/integration",
|
||||
"version": "0.5.9",
|
||||
"version": "0.6.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -34,12 +34,12 @@
|
||||
"git-url-parse": "~11.4.4",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
"@octokit/auth-app": "^3.4.0",
|
||||
"luxon": "^1.25.0"
|
||||
"luxon": "^2.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/config-loader": "^0.6.6",
|
||||
"@backstage/test-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@types/jest": "^26.0.7",
|
||||
"@types/luxon": "^1.25.0",
|
||||
"msw": "^0.29.0"
|
||||
|
||||
@@ -250,11 +250,7 @@ export class GithubCredentialsProvider {
|
||||
}
|
||||
|
||||
return {
|
||||
headers: token
|
||||
? {
|
||||
Authorization: `Bearer ${token}`,
|
||||
}
|
||||
: undefined,
|
||||
headers: token ? { Authorization: `Bearer ${token}` } : undefined,
|
||||
token,
|
||||
type,
|
||||
};
|
||||
|
||||
@@ -16,8 +16,25 @@
|
||||
|
||||
import { GitHubIntegrationConfig } from './config';
|
||||
import { getGitHubFileFetchUrl, getGitHubRequestOptions } from './core';
|
||||
import { GithubCredentials } from './GithubCredentialsProvider';
|
||||
|
||||
describe('github core', () => {
|
||||
const appCredentials: GithubCredentials = {
|
||||
type: 'app',
|
||||
token: 'A',
|
||||
headers: {},
|
||||
};
|
||||
|
||||
const tokenCredentials: GithubCredentials = {
|
||||
type: 'token',
|
||||
token: 'A',
|
||||
headers: {},
|
||||
};
|
||||
|
||||
const noCredentials: GithubCredentials = {
|
||||
type: 'token',
|
||||
};
|
||||
|
||||
describe('getGitHubRequestOptions', () => {
|
||||
it('inserts a token when needed', () => {
|
||||
const withToken: GitHubIntegrationConfig = {
|
||||
@@ -30,10 +47,12 @@ describe('github core', () => {
|
||||
rawBaseUrl: '',
|
||||
};
|
||||
expect(
|
||||
(getGitHubRequestOptions(withToken).headers as any).Authorization,
|
||||
(getGitHubRequestOptions(withToken, appCredentials).headers as any)
|
||||
.Authorization,
|
||||
).toEqual('token A');
|
||||
expect(
|
||||
(getGitHubRequestOptions(withoutToken).headers as any).Authorization,
|
||||
(getGitHubRequestOptions(withoutToken, noCredentials).headers as any)
|
||||
.Authorization,
|
||||
).toBeUndefined();
|
||||
});
|
||||
});
|
||||
@@ -41,7 +60,7 @@ describe('github core', () => {
|
||||
describe('getGitHubFileFetchUrl', () => {
|
||||
it('rejects targets that do not look like URLs', () => {
|
||||
const config: GitHubIntegrationConfig = { host: '', apiBaseUrl: '' };
|
||||
expect(() => getGitHubFileFetchUrl('a/b', config)).toThrow(
|
||||
expect(() => getGitHubFileFetchUrl('a/b', config, noCredentials)).toThrow(
|
||||
/Incorrect URL: a\/b/,
|
||||
);
|
||||
});
|
||||
@@ -55,14 +74,16 @@ describe('github core', () => {
|
||||
getGitHubFileFetchUrl(
|
||||
'https://github.com/a/b/blob/branchname/path/to/c.yaml',
|
||||
config,
|
||||
appCredentials,
|
||||
),
|
||||
).toEqual(
|
||||
'https://api.github.com/repos/a/b/contents/path/to/c.yaml?ref=branchname',
|
||||
);
|
||||
expect(
|
||||
getGitHubFileFetchUrl(
|
||||
'https://ghe.mycompany.net/a/b/blob/branchname/path/to/c.yaml',
|
||||
'https://github.com/a/b/blob/branchname/path/to/c.yaml',
|
||||
config,
|
||||
tokenCredentials,
|
||||
),
|
||||
).toEqual(
|
||||
'https://api.github.com/repos/a/b/contents/path/to/c.yaml?ref=branchname',
|
||||
@@ -78,6 +99,16 @@ describe('github core', () => {
|
||||
getGitHubFileFetchUrl(
|
||||
'https://ghe.mycompany.net/a/b/blob/branchname/path/to/c.yaml',
|
||||
config,
|
||||
appCredentials,
|
||||
),
|
||||
).toEqual(
|
||||
'https://ghe.mycompany.net/api/v3/repos/a/b/contents/path/to/c.yaml?ref=branchname',
|
||||
);
|
||||
expect(
|
||||
getGitHubFileFetchUrl(
|
||||
'https://ghe.mycompany.net/a/b/blob/branchname/path/to/c.yaml',
|
||||
config,
|
||||
tokenCredentials,
|
||||
),
|
||||
).toEqual(
|
||||
'https://ghe.mycompany.net/api/v3/repos/a/b/contents/path/to/c.yaml?ref=branchname',
|
||||
@@ -93,6 +124,7 @@ describe('github core', () => {
|
||||
getGitHubFileFetchUrl(
|
||||
'https://github.com/a/b/tree/branchname/path/to/c.yaml',
|
||||
config,
|
||||
tokenCredentials,
|
||||
),
|
||||
).toEqual(
|
||||
'https://api.github.com/repos/a/b/contents/path/to/c.yaml?ref=branchname',
|
||||
@@ -108,6 +140,7 @@ describe('github core', () => {
|
||||
getGitHubFileFetchUrl(
|
||||
'https://ghe.mycompany.net/a/b/tree/branchname/path/to/c.yaml',
|
||||
config,
|
||||
tokenCredentials,
|
||||
),
|
||||
).toEqual(
|
||||
'https://ghe.mycompany.net/api/v3/repos/a/b/contents/path/to/c.yaml?ref=branchname',
|
||||
@@ -123,6 +156,7 @@ describe('github core', () => {
|
||||
getGitHubFileFetchUrl(
|
||||
'https://github.com/a/b/blob/branchname/path/to/c.yaml',
|
||||
config,
|
||||
tokenCredentials,
|
||||
),
|
||||
).toEqual(
|
||||
'https://raw.githubusercontent.com/a/b/branchname/path/to/c.yaml',
|
||||
@@ -138,6 +172,7 @@ describe('github core', () => {
|
||||
getGitHubFileFetchUrl(
|
||||
'https://ghe.mycompany.net/a/b/blob/branchname/path/to/c.yaml',
|
||||
config,
|
||||
tokenCredentials,
|
||||
),
|
||||
).toEqual('https://ghe.mycompany.net/raw/a/b/branchname/path/to/c.yaml');
|
||||
});
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
import parseGitUrl from 'git-url-parse';
|
||||
import { GitHubIntegrationConfig } from './config';
|
||||
import { GithubCredentials } from './GithubCredentialsProvider';
|
||||
|
||||
/**
|
||||
* Given a URL pointing to a file on a provider, returns a URL that is suitable
|
||||
@@ -32,6 +33,7 @@ import { GitHubIntegrationConfig } from './config';
|
||||
export function getGitHubFileFetchUrl(
|
||||
url: string,
|
||||
config: GitHubIntegrationConfig,
|
||||
credentials: GithubCredentials,
|
||||
): string {
|
||||
try {
|
||||
const { owner, name, ref, filepathtype, filepath } = parseGitUrl(url);
|
||||
@@ -49,7 +51,7 @@ export function getGitHubFileFetchUrl(
|
||||
}
|
||||
|
||||
const pathWithoutSlash = filepath.replace(/^\//, '');
|
||||
if (chooseEndpoint(config) === 'api') {
|
||||
if (chooseEndpoint(config, credentials) === 'api') {
|
||||
return `${config.apiBaseUrl}/repos/${owner}/${name}/contents/${pathWithoutSlash}?ref=${ref}`;
|
||||
}
|
||||
return `${config.rawBaseUrl}/${owner}/${name}/${ref}/${pathWithoutSlash}`;
|
||||
@@ -61,25 +63,31 @@ export function getGitHubFileFetchUrl(
|
||||
/**
|
||||
* Gets the request options necessary to make requests to a given provider.
|
||||
*
|
||||
* @deprecated This function is no longer used internally
|
||||
* @param config The relevant provider config
|
||||
*/
|
||||
export function getGitHubRequestOptions(
|
||||
config: GitHubIntegrationConfig,
|
||||
credentials: GithubCredentials,
|
||||
): RequestInit {
|
||||
const headers: HeadersInit = {};
|
||||
|
||||
if (chooseEndpoint(config) === 'api') {
|
||||
if (chooseEndpoint(config, credentials) === 'api') {
|
||||
headers.Accept = 'application/vnd.github.v3.raw';
|
||||
}
|
||||
if (config.token) {
|
||||
headers.Authorization = `token ${config.token}`;
|
||||
|
||||
if (credentials.token) {
|
||||
headers.Authorization = `token ${credentials.token}`;
|
||||
}
|
||||
|
||||
return { headers };
|
||||
}
|
||||
|
||||
export function chooseEndpoint(config: GitHubIntegrationConfig): 'api' | 'raw' {
|
||||
if (config.apiBaseUrl && (config.token || !config.rawBaseUrl)) {
|
||||
export function chooseEndpoint(
|
||||
config: GitHubIntegrationConfig,
|
||||
credentials: GithubCredentials,
|
||||
): 'api' | 'raw' {
|
||||
if (config.apiBaseUrl && (credentials.token || !config.rawBaseUrl)) {
|
||||
return 'api';
|
||||
}
|
||||
return 'raw';
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
# @backstage/techdocs-common
|
||||
|
||||
## 0.8.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- bc405be6e: Stale TechDocs content (files that had previously been published but which have
|
||||
since been removed) is now removed from storage at publish-time. This is now
|
||||
supported by the following publishers:
|
||||
|
||||
- Google GCS
|
||||
- AWS S3
|
||||
- Azure Blob Storage
|
||||
|
||||
You may need to apply a greater level of permissions (e.g. the ability to
|
||||
delete objects in your storage provider) to any credentials/accounts used by
|
||||
the TechDocs CLI or TechDocs backend in order for this change to take effect.
|
||||
|
||||
For more details, see [#6132][issue-ref].
|
||||
|
||||
[issue-ref]: https://github.com/backstage/backstage/issues/6132
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/backend-common@0.8.9
|
||||
|
||||
## 0.8.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/techdocs-common",
|
||||
"description": "Common functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.1",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"private": false,
|
||||
@@ -38,11 +38,11 @@
|
||||
"dependencies": {
|
||||
"@azure/identity": "^1.5.0",
|
||||
"@azure/storage-blob": "^12.5.0",
|
||||
"@backstage/backend-common": "^0.8.8",
|
||||
"@backstage/backend-common": "^0.8.9",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.9",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@google-cloud/storage": "^5.6.0",
|
||||
"@types/express": "^4.17.6",
|
||||
"aws-sdk": "^2.840.0",
|
||||
@@ -58,7 +58,7 @@
|
||||
"winston": "^3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@types/fs-extra": "^9.0.5",
|
||||
"@types/js-yaml": "^4.0.0",
|
||||
"@types/mime-types": "^2.1.0",
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# @backstage/test-utils-core
|
||||
|
||||
## 0.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/test-utils-core",
|
||||
"description": "Utilities to test Backstage core",
|
||||
"version": "0.1.1",
|
||||
"version": "0.1.2",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/test-utils
|
||||
|
||||
## 0.1.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- Updated dependencies
|
||||
- @backstage/core-app-api@0.1.8
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/test-utils-core@0.1.2
|
||||
|
||||
## 0.1.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/test-utils",
|
||||
"description": "Utilities to test Backstage plugins and apps.",
|
||||
"version": "0.1.16",
|
||||
"version": "0.1.17",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -29,9 +29,9 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-app-api": "^0.1.6",
|
||||
"@backstage/core-plugin-api": "^0.1.4",
|
||||
"@backstage/test-utils-core": "^0.1.1",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/test-utils-core": "^0.1.2",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
@@ -46,7 +46,7 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.6",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@types/jest": "^26.0.7",
|
||||
"@types/node": "^14.14.32"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @backstage/plugin-api-docs
|
||||
|
||||
## 0.6.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- 0383314c9: Support deep linking in OpenAPI definitions.
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/plugin-catalog@0.6.11
|
||||
- @backstage/plugin-catalog-react@0.4.2
|
||||
|
||||
## 0.6.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-api-docs",
|
||||
"version": "0.6.5",
|
||||
"version": "0.6.6",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -31,10 +31,10 @@
|
||||
"dependencies": {
|
||||
"@asyncapi/react-component": "^0.23.0",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/plugin-catalog": "^0.6.10",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/plugin-catalog": "^0.6.11",
|
||||
"@backstage/plugin-catalog-react": "^0.4.2",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-icons/font": "^1.0.2",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -52,10 +52,10 @@
|
||||
"swagger-ui-react": "^3.37.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/plugin-auth-backend
|
||||
|
||||
## 0.3.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 29f7cfffb: Added `resolveCatalogMembership` utility to query the catalog for additional authentication claims within sign-in resolvers.
|
||||
- 8bedb75ae: Update Luxon dependency to 2.x
|
||||
- bfe0ff93f: Add Sign In and Handler resolver for Okta provider
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.8.9
|
||||
- @backstage/test-utils@0.1.17
|
||||
|
||||
## 0.3.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -98,6 +98,13 @@ export const createMicrosoftProvider: (
|
||||
options?: MicrosoftProviderOptions | undefined,
|
||||
) => AuthProviderFactory;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "createOktaProvider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const createOktaProvider: (
|
||||
_options?: OktaProviderOptions | undefined,
|
||||
) => AuthProviderFactory;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -303,6 +310,21 @@ export type OAuthState = {
|
||||
env: string;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "oktaEmailSignInResolver" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const oktaEmailSignInResolver: SignInResolver<OAuthResult>;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "OktaProviderOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type OktaProviderOptions = {
|
||||
authHandler?: AuthHandler<OAuthResult>;
|
||||
signIn?: {
|
||||
resolver?: SignInResolver<OAuthResult>;
|
||||
};
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "postMessageResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-auth-backend",
|
||||
"version": "0.3.19",
|
||||
"version": "0.3.20",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,12 +29,12 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.8.7",
|
||||
"@backstage/backend-common": "^0.8.9",
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@types/express": "^4.17.6",
|
||||
"@types/passport": "^1.0.3",
|
||||
"compression": "^1.7.4",
|
||||
@@ -50,7 +50,7 @@
|
||||
"jose": "^1.27.1",
|
||||
"jwt-decode": "^3.1.0",
|
||||
"knex": "^0.95.1",
|
||||
"luxon": "^1.25.0",
|
||||
"luxon": "^2.0.2",
|
||||
"minimatch": "^3.0.3",
|
||||
"morgan": "^1.10.0",
|
||||
"node-cache": "^5.1.2",
|
||||
@@ -69,7 +69,7 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.6",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@types/body-parser": "^1.19.0",
|
||||
"@types/cookie-parser": "^1.4.2",
|
||||
"@types/express-session": "^1.17.2",
|
||||
|
||||
@@ -15,7 +15,11 @@
|
||||
*/
|
||||
|
||||
import { CatalogApi } from '@backstage/catalog-client';
|
||||
import { UserEntity } from '@backstage/catalog-model';
|
||||
import {
|
||||
RELATION_MEMBER_OF,
|
||||
UserEntity,
|
||||
UserEntityV1alpha1,
|
||||
} from '@backstage/catalog-model';
|
||||
import { TokenIssuer } from '../../identity';
|
||||
import { CatalogIdentityClient } from './CatalogIdentityClient';
|
||||
|
||||
@@ -37,12 +41,12 @@ describe('CatalogIdentityClient', () => {
|
||||
|
||||
afterEach(() => jest.resetAllMocks());
|
||||
|
||||
it('passes through the correct search params', async () => {
|
||||
it('findUser passes through the correct search params', async () => {
|
||||
catalogApi.getEntities.mockResolvedValueOnce({ items: [{} as UserEntity] });
|
||||
tokenIssuer.issueToken.mockResolvedValue('my-token');
|
||||
const client = new CatalogIdentityClient({
|
||||
catalogApi: catalogApi,
|
||||
tokenIssuer: tokenIssuer,
|
||||
catalogApi,
|
||||
tokenIssuer,
|
||||
});
|
||||
|
||||
await client.findUser({ annotations: { key: 'value' } });
|
||||
@@ -62,4 +66,88 @@ describe('CatalogIdentityClient', () => {
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('resolveCatalogMembership resolves membership', async () => {
|
||||
const mockUsers: Array<UserEntityV1alpha1> = [
|
||||
{
|
||||
apiVersion: 'backstage.io/v1beta1',
|
||||
kind: 'User',
|
||||
metadata: {
|
||||
name: 'inigom',
|
||||
},
|
||||
spec: {
|
||||
memberOf: ['team-a'],
|
||||
},
|
||||
relations: [
|
||||
{
|
||||
type: RELATION_MEMBER_OF,
|
||||
target: {
|
||||
kind: 'Group',
|
||||
namespace: 'default',
|
||||
name: 'team-a',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
apiVersion: 'backstage.io/v1beta1',
|
||||
kind: 'User',
|
||||
metadata: {
|
||||
name: 'mpatinkin',
|
||||
namespace: 'reality',
|
||||
},
|
||||
spec: {
|
||||
memberOf: ['screen-actors-guild'],
|
||||
},
|
||||
relations: [
|
||||
{
|
||||
type: RELATION_MEMBER_OF,
|
||||
target: {
|
||||
kind: 'Group',
|
||||
namespace: 'reality',
|
||||
name: 'screen-actors-guild',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
catalogApi.getEntities.mockResolvedValueOnce({ items: mockUsers });
|
||||
|
||||
const client = new CatalogIdentityClient({
|
||||
catalogApi,
|
||||
tokenIssuer,
|
||||
});
|
||||
|
||||
const claims = await client.resolveCatalogMembership({
|
||||
entityRefs: ['inigom', 'User:default/imontoya', 'User:reality/mpatinkin'],
|
||||
});
|
||||
|
||||
expect(catalogApi.getEntities).toHaveBeenCalledWith({
|
||||
filter: [
|
||||
{
|
||||
kind: 'user',
|
||||
'metadata.namespace': 'default',
|
||||
'metadata.name': 'inigom',
|
||||
},
|
||||
{
|
||||
kind: 'user',
|
||||
'metadata.namespace': 'default',
|
||||
'metadata.name': 'imontoya',
|
||||
},
|
||||
{
|
||||
kind: 'user',
|
||||
'metadata.namespace': 'reality',
|
||||
'metadata.name': 'mpatinkin',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
expect(claims).toMatchObject([
|
||||
'user:default/inigom',
|
||||
'user:default/imontoya',
|
||||
'user:reality/mpatinkin',
|
||||
'group:default/team-a',
|
||||
'group:reality/screen-actors-guild',
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -14,15 +14,27 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Logger } from 'winston';
|
||||
import { ConflictError, NotFoundError } from '@backstage/errors';
|
||||
import { CatalogApi } from '@backstage/catalog-client';
|
||||
import { UserEntity } from '@backstage/catalog-model';
|
||||
import {
|
||||
EntityName,
|
||||
parseEntityRef,
|
||||
RELATION_MEMBER_OF,
|
||||
stringifyEntityRef,
|
||||
UserEntity,
|
||||
} from '@backstage/catalog-model';
|
||||
import { TokenIssuer } from '../../identity';
|
||||
|
||||
type UserQuery = {
|
||||
annotations: Record<string, string>;
|
||||
};
|
||||
|
||||
type MemberClaimQuery = {
|
||||
entityRefs: string[];
|
||||
logger?: Logger;
|
||||
};
|
||||
|
||||
/**
|
||||
* A catalog client tailored for reading out identity data from the catalog.
|
||||
*/
|
||||
@@ -64,4 +76,62 @@ export class CatalogIdentityClient {
|
||||
|
||||
return items[0] as UserEntity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve additional entity claims from the catalog, using the passed-in entity names. Designed
|
||||
* to be used within a `signInResolver` where additional entity claims might be provided, but
|
||||
* group membership and transient group membership lean on imported catalog relations.
|
||||
*
|
||||
* Returns a superset of the entity names that can be passed directly to `issueToken` as `ent`.
|
||||
*/
|
||||
async resolveCatalogMembership({
|
||||
entityRefs,
|
||||
logger,
|
||||
}: MemberClaimQuery): Promise<string[]> {
|
||||
const resolvedEntityRefs = entityRefs
|
||||
.map((ref: string) => {
|
||||
try {
|
||||
const parsedRef = parseEntityRef(ref.toLocaleLowerCase('en-US'), {
|
||||
defaultKind: 'user',
|
||||
defaultNamespace: 'default',
|
||||
});
|
||||
return parsedRef;
|
||||
} catch {
|
||||
logger?.warn(`Failed to parse entityRef from ${ref}, ignoring`);
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.filter((ref): ref is EntityName => ref !== null);
|
||||
|
||||
const filter = resolvedEntityRefs.map(ref => ({
|
||||
kind: ref.kind,
|
||||
'metadata.namespace': ref.namespace,
|
||||
'metadata.name': ref.name,
|
||||
}));
|
||||
const entities = await this.catalogApi
|
||||
.getEntities({ filter })
|
||||
.then(r => r.items);
|
||||
|
||||
if (entityRefs.length !== entities.length) {
|
||||
const foundEntityNames = entities.map(stringifyEntityRef);
|
||||
const missingEntityNames = resolvedEntityRefs
|
||||
.map(stringifyEntityRef)
|
||||
.filter(s => !foundEntityNames.includes(s));
|
||||
logger?.debug(`Entities not found for refs ${missingEntityNames.join()}`);
|
||||
}
|
||||
|
||||
const memberOf = entities.flatMap(
|
||||
e =>
|
||||
e!.relations
|
||||
?.filter(r => r.type === RELATION_MEMBER_OF)
|
||||
.map(r => r.target) ?? [],
|
||||
);
|
||||
|
||||
const newEntityRefs = [
|
||||
...new Set(resolvedEntityRefs.concat(memberOf).map(stringifyEntityRef)),
|
||||
];
|
||||
|
||||
logger?.debug(`Found catalog membership: ${newEntityRefs.join()}`);
|
||||
return newEntityRefs;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
export * from './google';
|
||||
export * from './microsoft';
|
||||
export * from './okta';
|
||||
export { factories as defaultAuthProviderFactories } from './factories';
|
||||
|
||||
// Export the minimal interface required for implementing a
|
||||
|
||||
@@ -14,5 +14,5 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export { createOktaProvider } from './provider';
|
||||
export { createOktaProvider, oktaEmailSignInResolver } from './provider';
|
||||
export type { OktaProviderOptions } from './provider';
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright 2020 The Backstage Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { OktaAuthProvider } from './provider';
|
||||
import * as helpers from '../../lib/passport/PassportStrategyHelper';
|
||||
import { OAuthResult } from '../../lib/oauth';
|
||||
import { getVoidLogger } from '@backstage/backend-common';
|
||||
import { TokenIssuer } from '../../identity/types';
|
||||
import { CatalogIdentityClient } from '../../lib/catalog';
|
||||
|
||||
const mockFrameHandler = jest.spyOn(
|
||||
helpers,
|
||||
'executeFrameHandlerStrategy',
|
||||
) as unknown as jest.MockedFunction<
|
||||
() => Promise<{ result: OAuthResult; privateInfo: any }>
|
||||
>;
|
||||
|
||||
describe('createOktaProvider', () => {
|
||||
it('should auth', async () => {
|
||||
const tokenIssuer = {
|
||||
issueToken: jest.fn(),
|
||||
listPublicKeys: jest.fn(),
|
||||
};
|
||||
const catalogIdentityClient = {
|
||||
findUser: jest.fn(),
|
||||
};
|
||||
|
||||
const provider = new OktaAuthProvider({
|
||||
logger: getVoidLogger(),
|
||||
catalogIdentityClient:
|
||||
catalogIdentityClient as unknown as CatalogIdentityClient,
|
||||
tokenIssuer: tokenIssuer as unknown as TokenIssuer,
|
||||
authHandler: async ({ fullProfile }) => ({
|
||||
profile: {
|
||||
email: fullProfile.emails![0]!.value,
|
||||
displayName: fullProfile.displayName,
|
||||
},
|
||||
}),
|
||||
audience: 'http://example.com',
|
||||
clientId: 'mock',
|
||||
clientSecret: 'mock',
|
||||
callbackUrl: 'mock',
|
||||
});
|
||||
|
||||
mockFrameHandler.mockResolvedValueOnce({
|
||||
result: {
|
||||
fullProfile: {
|
||||
emails: [
|
||||
{
|
||||
type: 'work',
|
||||
value: 'conrad@example.com',
|
||||
},
|
||||
],
|
||||
displayName: 'Conrad',
|
||||
name: {
|
||||
familyName: 'Ribas',
|
||||
givenName: 'Francisco',
|
||||
},
|
||||
id: 'conrad',
|
||||
provider: 'okta',
|
||||
photos: [
|
||||
{
|
||||
value: 'some-data',
|
||||
},
|
||||
],
|
||||
},
|
||||
params: {
|
||||
id_token: 'idToken',
|
||||
scope: 'scope',
|
||||
expires_in: 123,
|
||||
},
|
||||
accessToken: 'accessToken',
|
||||
},
|
||||
privateInfo: {
|
||||
refreshToken: 'wacka',
|
||||
},
|
||||
});
|
||||
const { response } = await provider.handler({} as any);
|
||||
expect(response).toEqual({
|
||||
providerInfo: {
|
||||
accessToken: 'accessToken',
|
||||
expiresInSeconds: 123,
|
||||
idToken: 'idToken',
|
||||
scope: 'scope',
|
||||
},
|
||||
profile: {
|
||||
email: 'conrad@example.com',
|
||||
displayName: 'Conrad',
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -35,8 +35,16 @@ import {
|
||||
executeFetchUserProfileStrategy,
|
||||
PassportDoneCallback,
|
||||
} from '../../lib/passport';
|
||||
import { RedirectInfo, AuthProviderFactory } from '../types';
|
||||
import {
|
||||
AuthProviderFactory,
|
||||
AuthHandler,
|
||||
RedirectInfo,
|
||||
SignInResolver,
|
||||
} from '../types';
|
||||
import { StateStore } from 'passport-oauth2';
|
||||
import { CatalogIdentityClient, getEntityClaims } from '../../lib/catalog';
|
||||
import { TokenIssuer } from '../../identity';
|
||||
import { Logger } from 'winston';
|
||||
|
||||
type PrivateInfo = {
|
||||
refreshToken: string;
|
||||
@@ -44,10 +52,20 @@ type PrivateInfo = {
|
||||
|
||||
export type OktaAuthProviderOptions = OAuthProviderOptions & {
|
||||
audience: string;
|
||||
signInResolver?: SignInResolver<OAuthResult>;
|
||||
authHandler: AuthHandler<OAuthResult>;
|
||||
tokenIssuer: TokenIssuer;
|
||||
catalogIdentityClient: CatalogIdentityClient;
|
||||
logger: Logger;
|
||||
};
|
||||
|
||||
export class OktaAuthProvider implements OAuthHandlers {
|
||||
private readonly _strategy: any;
|
||||
private readonly _signInResolver?: SignInResolver<OAuthResult>;
|
||||
private readonly _authHandler: AuthHandler<OAuthResult>;
|
||||
private readonly _tokenIssuer: TokenIssuer;
|
||||
private readonly _catalogIdentityClient: CatalogIdentityClient;
|
||||
private readonly _logger: Logger;
|
||||
|
||||
/**
|
||||
* Due to passport-okta-oauth forcing options.state = true,
|
||||
@@ -67,6 +85,12 @@ export class OktaAuthProvider implements OAuthHandlers {
|
||||
};
|
||||
|
||||
constructor(options: OktaAuthProviderOptions) {
|
||||
this._signInResolver = options.signInResolver;
|
||||
this._authHandler = options.authHandler;
|
||||
this._tokenIssuer = options.tokenIssuer;
|
||||
this._catalogIdentityClient = options.catalogIdentityClient;
|
||||
this._logger = options.logger;
|
||||
|
||||
this._strategy = new OktaStrategy(
|
||||
{
|
||||
clientID: options.clientId,
|
||||
@@ -117,18 +141,8 @@ export class OktaAuthProvider implements OAuthHandlers {
|
||||
PrivateInfo
|
||||
>(req, this._strategy);
|
||||
|
||||
const profile = makeProfileInfo(result.fullProfile, result.params.id_token);
|
||||
|
||||
return {
|
||||
response: await this.populateIdentity({
|
||||
profile,
|
||||
providerInfo: {
|
||||
idToken: result.params.id_token,
|
||||
accessToken: result.accessToken,
|
||||
scope: result.params.scope,
|
||||
expiresInSeconds: result.params.expires_in,
|
||||
},
|
||||
}),
|
||||
response: await this.handleResult(result),
|
||||
refreshToken: privateInfo.refreshToken,
|
||||
};
|
||||
}
|
||||
@@ -144,52 +158,157 @@ export class OktaAuthProvider implements OAuthHandlers {
|
||||
this._strategy,
|
||||
accessToken,
|
||||
);
|
||||
const profile = makeProfileInfo(fullProfile, params.id_token);
|
||||
|
||||
return this.populateIdentity({
|
||||
providerInfo: {
|
||||
accessToken,
|
||||
idToken: params.id_token,
|
||||
expiresInSeconds: params.expires_in,
|
||||
scope: params.scope,
|
||||
},
|
||||
profile,
|
||||
return this.handleResult({
|
||||
fullProfile,
|
||||
params,
|
||||
accessToken,
|
||||
refreshToken: req.refreshToken,
|
||||
});
|
||||
}
|
||||
|
||||
private async populateIdentity(
|
||||
response: OAuthResponse,
|
||||
): Promise<OAuthResponse> {
|
||||
const { profile } = response;
|
||||
private async handleResult(result: OAuthResult) {
|
||||
const { profile } = await this._authHandler(result);
|
||||
|
||||
if (!profile.email) {
|
||||
throw new Error('Okta profile contained no email');
|
||||
const response: OAuthResponse = {
|
||||
providerInfo: {
|
||||
idToken: result.params.id_token,
|
||||
accessToken: result.accessToken,
|
||||
scope: result.params.scope,
|
||||
expiresInSeconds: result.params.expires_in,
|
||||
},
|
||||
profile,
|
||||
};
|
||||
|
||||
if (this._signInResolver) {
|
||||
response.backstageIdentity = await this._signInResolver(
|
||||
{
|
||||
result,
|
||||
profile,
|
||||
},
|
||||
{
|
||||
tokenIssuer: this._tokenIssuer,
|
||||
catalogIdentityClient: this._catalogIdentityClient,
|
||||
logger: this._logger,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// TODO(Rugvip): Hardcoded to the local part of the email for now
|
||||
const id = profile.email.split('@')[0];
|
||||
|
||||
return { ...response, backstageIdentity: { id } };
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
export type OktaProviderOptions = {};
|
||||
export const oktaEmailSignInResolver: SignInResolver<OAuthResult> = async (
|
||||
info,
|
||||
ctx,
|
||||
) => {
|
||||
const { profile } = info;
|
||||
|
||||
if (!profile.email) {
|
||||
throw new Error('Okta profile contained no email');
|
||||
}
|
||||
|
||||
const entity = await ctx.catalogIdentityClient.findUser({
|
||||
annotations: {
|
||||
'okta.com/email': profile.email,
|
||||
},
|
||||
});
|
||||
|
||||
const claims = getEntityClaims(entity);
|
||||
const token = await ctx.tokenIssuer.issueToken({ claims });
|
||||
|
||||
return { id: entity.metadata.name, entity, token };
|
||||
};
|
||||
|
||||
export const oktaDefaultSignInResolver: SignInResolver<OAuthResult> = async (
|
||||
info,
|
||||
ctx,
|
||||
) => {
|
||||
const { profile } = info;
|
||||
|
||||
if (!profile.email) {
|
||||
throw new Error('Okta profile contained no email');
|
||||
}
|
||||
|
||||
// TODO(Rugvip): Hardcoded to the local part of the email for now
|
||||
const userId = profile.email.split('@')[0];
|
||||
|
||||
const token = await ctx.tokenIssuer.issueToken({
|
||||
claims: { sub: userId, ent: [`user:default/${userId}`] },
|
||||
});
|
||||
|
||||
return { id: userId, token };
|
||||
};
|
||||
|
||||
export type OktaProviderOptions = {
|
||||
/**
|
||||
* The profile transformation function used to verify and convert the auth response
|
||||
* into the profile that will be presented to the user.
|
||||
*/
|
||||
authHandler?: AuthHandler<OAuthResult>;
|
||||
|
||||
/**
|
||||
* Configure sign-in for this provider, without it the provider can not be used to sign users in.
|
||||
*/
|
||||
/**
|
||||
* Maps an auth result to a Backstage identity for the user.
|
||||
*
|
||||
* Set to `'email'` to use the default email-based sign in resolver, which will search
|
||||
* the catalog for a single user entity that has a matching `okta.com/email` annotation.
|
||||
*/
|
||||
signIn?: {
|
||||
resolver?: SignInResolver<OAuthResult>;
|
||||
};
|
||||
};
|
||||
|
||||
export const createOktaProvider = (
|
||||
_options?: OktaProviderOptions,
|
||||
): AuthProviderFactory => {
|
||||
return ({ providerId, globalConfig, config, tokenIssuer }) =>
|
||||
return ({
|
||||
providerId,
|
||||
globalConfig,
|
||||
config,
|
||||
tokenIssuer,
|
||||
catalogApi,
|
||||
logger,
|
||||
}) =>
|
||||
OAuthEnvironmentHandler.mapConfig(config, envConfig => {
|
||||
const clientId = envConfig.getString('clientId');
|
||||
const clientSecret = envConfig.getString('clientSecret');
|
||||
const audience = envConfig.getString('audience');
|
||||
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
|
||||
|
||||
const catalogIdentityClient = new CatalogIdentityClient({
|
||||
catalogApi,
|
||||
tokenIssuer,
|
||||
});
|
||||
|
||||
const authHandler: AuthHandler<OAuthResult> = _options?.authHandler
|
||||
? _options.authHandler
|
||||
: async ({ fullProfile, params }) => ({
|
||||
profile: makeProfileInfo(fullProfile, params.id_token),
|
||||
});
|
||||
|
||||
const signInResolverFn =
|
||||
_options?.signIn?.resolver ?? oktaDefaultSignInResolver;
|
||||
|
||||
const signInResolver: SignInResolver<OAuthResult> = info =>
|
||||
signInResolverFn(info, {
|
||||
catalogIdentityClient,
|
||||
tokenIssuer,
|
||||
logger,
|
||||
});
|
||||
|
||||
const provider = new OktaAuthProvider({
|
||||
audience,
|
||||
clientId,
|
||||
clientSecret,
|
||||
callbackUrl,
|
||||
authHandler,
|
||||
signInResolver,
|
||||
tokenIssuer,
|
||||
catalogIdentityClient,
|
||||
logger,
|
||||
});
|
||||
|
||||
return OAuthAdapter.fromConfig(globalConfig, provider, {
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
@@ -35,10 +35,10 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/plugin-bitrise
|
||||
|
||||
## 0.1.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8bedb75ae: Update Luxon dependency to 2.x
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/plugin-catalog-react@0.4.2
|
||||
|
||||
## 0.1.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-bitrise",
|
||||
"version": "0.1.9",
|
||||
"version": "0.1.10",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -21,16 +21,16 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/plugin-catalog-react": "^0.4.2",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
"cross-fetch": "^3.0.6",
|
||||
"lodash": "^4.17.21",
|
||||
"luxon": "^1.26.0",
|
||||
"luxon": "^2.0.2",
|
||||
"qs": "^6.9.6",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
@@ -38,10 +38,10 @@
|
||||
"recharts": "^1.8.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/plugin-catalog-backend
|
||||
|
||||
## 0.13.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/backend-common@0.8.9
|
||||
|
||||
## 0.13.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend",
|
||||
"version": "0.13.1",
|
||||
"version": "0.13.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,12 +29,12 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.8.6",
|
||||
"@backstage/backend-common": "^0.8.9",
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.8",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@backstage/plugin-search-backend-node": "^0.4.0",
|
||||
"@backstage/search-common": "^0.1.2",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
@@ -61,9 +61,9 @@
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/backend-test-utils": "^0.1.4",
|
||||
"@backstage/cli": "^0.7.6",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/backend-test-utils": "^0.1.5",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@types/core-js": "^2.5.4",
|
||||
"@types/git-url-parse": "^9.0.0",
|
||||
"@types/lodash": "^4.14.151",
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @backstage/plugin-catalog-import
|
||||
|
||||
## 0.5.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/plugin-catalog-react@0.4.2
|
||||
- @backstage/integration-react@0.1.7
|
||||
|
||||
## 0.5.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-import",
|
||||
"version": "0.5.16",
|
||||
"version": "0.5.17",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -32,11 +32,11 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/integration": "^0.5.9",
|
||||
"@backstage/integration-react": "^0.1.6",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@backstage/integration-react": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.2",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -54,10 +54,10 @@
|
||||
"yaml": "^1.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/react-hooks": "^3.3.0",
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @backstage/plugin-catalog-react
|
||||
|
||||
## 0.4.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- a440d3b38: Move and rename `FavoriteEntity` component to `catalog-react`
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/core-app-api@0.1.8
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
|
||||
## 0.4.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-react",
|
||||
"version": "0.4.1",
|
||||
"version": "0.4.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -30,10 +30,10 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/integration": "^0.5.9",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -47,9 +47,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/react-hooks": "^3.3.0",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-catalog
|
||||
|
||||
## 0.6.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- a440d3b38: Move and rename `FavoriteEntity` component to `catalog-react`
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/plugin-catalog-react@0.4.2
|
||||
- @backstage/integration-react@0.1.7
|
||||
|
||||
## 0.6.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -32,12 +32,12 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.9",
|
||||
"@backstage/integration-react": "^0.1.6",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@backstage/integration-react": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.2",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -54,10 +54,10 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/react-hooks": "^3.3.0",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -50,10 +50,10 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -48,10 +48,10 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/plugin-code-coverage-backend
|
||||
|
||||
## 0.1.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/integration@0.6.0
|
||||
- @backstage/backend-common@0.8.9
|
||||
|
||||
## 0.1.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-code-coverage-backend",
|
||||
"version": "0.1.8",
|
||||
"version": "0.1.9",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -19,12 +19,12 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.8.5",
|
||||
"@backstage/backend-common": "^0.8.9",
|
||||
"@backstage/catalog-client": "^0.3.16",
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.8",
|
||||
"@backstage/integration": "^0.6.0",
|
||||
"@types/express": "^4.17.6",
|
||||
"cross-fetch": "^3.0.6",
|
||||
"express": "^4.17.1",
|
||||
@@ -36,7 +36,7 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.1",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@types/express-xml-bodyparser": "^0.3.2",
|
||||
"@types/supertest": "^2.0.8",
|
||||
"msw": "^0.29.0",
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.0",
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.4.1",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
@@ -40,10 +40,10 @@
|
||||
"recharts": "^1.8.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -35,10 +35,10 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/plugin-cost-insights
|
||||
|
||||
## 0.11.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8bedb75ae: Update Luxon dependency to 2.x
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
|
||||
## 0.11.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-cost-insights",
|
||||
"version": "0.11.3",
|
||||
"version": "0.11.4",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -31,8 +31,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.3.0",
|
||||
"@backstage/core-plugin-api": "^0.1.5",
|
||||
"@backstage/core-components": "^0.3.1",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/theme": "^0.2.9",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -42,7 +42,7 @@
|
||||
"@types/recharts": "^1.8.14",
|
||||
"classnames": "^2.2.6",
|
||||
"history": "^5.0.0",
|
||||
"luxon": "^1.26.0",
|
||||
"luxon": "^2.0.2",
|
||||
"pluralize": "^8.0.0",
|
||||
"qs": "^6.9.4",
|
||||
"react": "^16.13.1",
|
||||
@@ -54,10 +54,10 @@
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.7",
|
||||
"@backstage/core-app-api": "^0.1.7",
|
||||
"@backstage/dev-utils": "^0.2.5",
|
||||
"@backstage/test-utils": "^0.1.16",
|
||||
"@backstage/cli": "^0.7.8",
|
||||
"@backstage/core-app-api": "^0.1.8",
|
||||
"@backstage/dev-utils": "^0.2.6",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
"@testing-library/user-event": "^13.1.8",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/plugin-explore
|
||||
|
||||
## 0.3.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version.
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.3.1
|
||||
- @backstage/core-plugin-api@0.1.6
|
||||
- @backstage/plugin-catalog-react@0.4.2
|
||||
|
||||
## 0.3.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user