Merge branch 'backstage:master' into fix-kubernetes-exports

This commit is contained in:
matteosilv
2022-11-24 15:33:57 +01:00
committed by GitHub
517 changed files with 7248 additions and 812 deletions
+11
View File
@@ -1,5 +1,16 @@
# @backstage/app-defaults
## 1.0.9-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.12.1-next.0
- @backstage/core-app-api@1.2.1-next.0
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/theme@0.2.16
- @backstage/plugin-permission-react@0.4.8-next.0
## 1.0.8
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/app-defaults",
"description": "Provides the default wiring of a Backstage App",
"version": "1.0.8",
"version": "1.0.9-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+63
View File
@@ -1,5 +1,68 @@
# example-app
## 0.2.78-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-graph@0.2.24-next.0
- @backstage/plugin-pagerduty@0.5.5-next.0
- @backstage/plugin-techdocs-react@1.0.7-next.0
- @backstage/plugin-scaffolder@1.9.0-next.0
- @backstage/cli@0.21.2-next.0
- @backstage/plugin-cost-insights@0.12.1-next.0
- @backstage/core-components@0.12.1-next.0
- @backstage/plugin-user-settings@0.6.0-next.0
- @backstage/plugin-explore@0.3.43-next.0
- @backstage/core-app-api@1.2.1-next.0
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/integration-react@1.1.7-next.0
- @backstage/plugin-airbrake@0.3.12-next.0
- @backstage/plugin-apache-airflow@0.2.5-next.0
- @backstage/plugin-api-docs@0.8.12-next.0
- @backstage/plugin-azure-devops@0.2.3-next.0
- @backstage/plugin-azure-sites@0.1.1-next.0
- @backstage/plugin-badges@0.2.36-next.0
- @backstage/plugin-catalog-import@0.9.2-next.0
- @backstage/plugin-circleci@0.3.12-next.0
- @backstage/plugin-cloudbuild@0.3.12-next.0
- @backstage/plugin-code-coverage@0.2.5-next.0
- @backstage/plugin-dynatrace@1.0.2-next.0
- @backstage/plugin-gcalendar@0.3.8-next.0
- @backstage/plugin-gcp-projects@0.3.31-next.0
- @backstage/plugin-github-actions@0.5.12-next.0
- @backstage/plugin-gocd@0.1.18-next.0
- @backstage/plugin-graphiql@0.2.44-next.0
- @backstage/plugin-home@0.4.28-next.0
- @backstage/plugin-jenkins@0.7.11-next.0
- @backstage/plugin-kafka@0.3.12-next.0
- @backstage/plugin-kubernetes@0.7.5-next.0
- @backstage/plugin-lighthouse@0.3.12-next.0
- @backstage/plugin-newrelic@0.3.30-next.0
- @backstage/plugin-org@0.6.1-next.0
- @backstage/plugin-playlist@0.1.3-next.0
- @backstage/plugin-rollbar@0.4.12-next.0
- @backstage/plugin-search@1.0.5-next.0
- @backstage/plugin-sentry@0.4.5-next.0
- @backstage/plugin-shortcuts@0.3.4-next.0
- @backstage/plugin-stack-overflow@0.1.8-next.0
- @backstage/plugin-tech-insights@0.3.4-next.0
- @backstage/plugin-tech-radar@0.5.19-next.0
- @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.0
- @backstage/plugin-techdocs@1.4.1-next.0
- @backstage/plugin-todo@0.2.14-next.0
- @backstage/plugin-catalog-react@1.2.2-next.0
- @backstage/app-defaults@1.0.9-next.0
- @backstage/catalog-model@1.1.4-next.0
- @backstage/config@1.0.5-next.0
- @backstage/theme@0.2.16
- @backstage/plugin-catalog-common@1.0.9-next.0
- @backstage/plugin-newrelic-dashboard@0.2.5-next.0
- @backstage/plugin-permission-react@0.4.8-next.0
- @backstage/plugin-search-common@1.1.2-next.0
- @backstage/plugin-search-react@1.2.2-next.0
- @internal/plugin-catalog-customized@0.0.5-next.0
## 0.2.77
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app",
"version": "0.2.77",
"version": "0.2.78-next.0",
"private": true,
"backstage": {
"role": "frontend"
+12
View File
@@ -1,5 +1,17 @@
# @backstage/backend-app-api
## 0.2.4-next.0
### Patch Changes
- d6dbf1792b: Added `lifecycleFactory` implementation.
- Updated dependencies
- @backstage/backend-common@0.16.1-next.0
- @backstage/plugin-permission-node@0.7.2-next.0
- @backstage/backend-plugin-api@0.1.5-next.0
- @backstage/backend-tasks@0.3.8-next.0
- @backstage/errors@1.1.4-next.0
## 0.2.3
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-app-api",
"description": "Core API used by Backstage backend apps",
"version": "0.2.3",
"version": "0.2.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+14
View File
@@ -1,5 +1,19 @@
# @backstage/backend-common
## 0.16.1-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- dfc8edf9c5: Internal refactor to avoid usage of deprecated symbols.
- Updated dependencies
- @backstage/config-loader@1.1.7-next.0
- @backstage/integration@1.4.1-next.0
- @backstage/types@1.0.2-next.0
- @backstage/cli-common@0.1.10
- @backstage/config@1.0.5-next.0
- @backstage/errors@1.1.4-next.0
## 0.16.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
"version": "0.16.0",
"version": "0.16.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
@@ -574,4 +574,86 @@ describe('GitlabUrlReader', () => {
).rejects.toThrow(NotModifiedError);
});
});
describe('getGitlabFetchUrl', () => {
beforeEach(() => {
worker.use(
rest.get(
'*/api/v4/projects/group%2Fsubgroup%2Fproject',
(_, res, ctx) => res(ctx.status(200), ctx.json({ id: 12345 })),
),
);
});
it('should fall back to getGitLabFileFetchUrl for blob urls', async () => {
await expect(
(gitlabProcessor as any).getGitlabFetchUrl(
'https://gitlab.com/group/subgroup/project/-/blob/branch/my/path/to/file.yaml',
),
).resolves.toEqual(
'https://gitlab.com/api/v4/projects/12345/repository/files/my%2Fpath%2Fto%2Ffile.yaml/raw?ref=branch',
);
});
it('should work for job artifact urls', async () => {
await expect(
(gitlabProcessor as any).getGitlabFetchUrl(
'https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
),
).resolves.toEqual(
'https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
);
});
it('should fail on unfamiliar or non-Gitlab urls', async () => {
await expect(
(gitlabProcessor as any).getGitlabFetchUrl(
'https://gitlab.com/some/random/endpoint',
),
).rejects.toThrow('Please provide full path to yaml file from GitLab');
});
});
describe('getGitlabArtifactFetchUrl', () => {
beforeEach(() => {
worker.use(
rest.get(
'*/api/v4/projects/group%2Fsubgroup%2Fproject',
(_, res, ctx) => res(ctx.status(200), ctx.json({ id: 12345 })),
),
);
worker.use(
rest.get(
'*/api/v4/projects/groupA%2Fsubgroup%2Fproject',
(_, res, ctx) => res(ctx.status(404)),
),
);
});
it('should reject urls that are not for the job artifacts API', async () => {
await expect(
(gitlabProcessor as any).getGitlabArtifactFetchUrl(
new URL('https://gitlab.com/some/url'),
),
).rejects.toThrow('Unable to process url as an GitLab artifact');
});
it('should work for job artifact urls', async () => {
await expect(
(gitlabProcessor as any).getGitlabArtifactFetchUrl(
new URL(
'https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
),
),
).resolves.toEqual(
new URL(
'https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
),
);
});
it('errors in mapping the project ID should be captured', async () => {
await expect(
(gitlabProcessor as any).getGitlabArtifactFetchUrl(
new URL(
'https://gitlab.com/groupA/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
),
),
).rejects.toThrow(/^Unable to translate GitLab artifact URL:/);
});
});
});
@@ -73,7 +73,7 @@ export class GitlabUrlReader implements UrlReader {
options?: ReadUrlOptions,
): Promise<ReadUrlResponse> {
const { etag, signal } = options ?? {};
const builtUrl = await getGitLabFileFetchUrl(url, this.integration.config);
const builtUrl = await this.getGitlabFetchUrl(url);
let response: Response;
try {
@@ -256,4 +256,66 @@ export class GitlabUrlReader implements UrlReader {
const { host, token } = this.integration.config;
return `gitlab{host=${host},authed=${Boolean(token)}}`;
}
private async getGitlabFetchUrl(target: string): Promise<string> {
// If the target is for a job artifact then go down that path
const targetUrl = new URL(target);
if (targetUrl.pathname.includes('/-/jobs/artifacts/')) {
return this.getGitlabArtifactFetchUrl(targetUrl).then(value =>
value.toString(),
);
}
// Default to the old behavior of assuming the url is for a file
return getGitLabFileFetchUrl(target, this.integration.config);
}
// convert urls of the form:
// https://example.com/<namespace>/<project>/-/jobs/artifacts/<ref>/raw/<path_to_file>?job=<job_name>
// to urls of the form:
// https://example.com/api/v4/projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=<job_name>
private async getGitlabArtifactFetchUrl(target: URL): Promise<URL> {
if (!target.pathname.includes('/-/jobs/artifacts/')) {
throw new Error('Unable to process url as an GitLab artifact');
}
try {
const [namespaceAndProject, ref] =
target.pathname.split('/-/jobs/artifacts/');
const projectPath = new URL(target);
projectPath.pathname = namespaceAndProject;
const projectId = await this.resolveProjectToId(projectPath);
const relativePath = getGitLabIntegrationRelativePath(
this.integration.config,
);
const newUrl = new URL(target);
newUrl.pathname = `${relativePath}/api/v4/projects/${projectId}/jobs/artifacts/${ref}`;
return newUrl;
} catch (e) {
throw new Error(
`Unable to translate GitLab artifact URL: ${target}, ${e}`,
);
}
}
private async resolveProjectToId(pathToProject: URL): Promise<number> {
let project = pathToProject.pathname;
// Check relative path exist and remove it if so
const relativePath = getGitLabIntegrationRelativePath(
this.integration.config,
);
if (relativePath) {
project = project.replace(relativePath, '');
}
// Trim an initial / if it exists
project = project.replace(/^\//, '');
const result = await fetch(
`${
pathToProject.origin
}${relativePath}/api/v4/projects/${encodeURIComponent(project)}`,
);
const data = await result.json();
if (!result.ok) {
throw new Error(`Gitlab error: ${data.error}, ${data.error_description}`);
}
return Number(data.id);
}
}
+1 -1
View File
@@ -179,7 +179,7 @@ export class Git {
});
} catch (ex) {
this.config.logger?.error(
`Failed to fetch repo {dir=${dir},origin=${origin}}`,
`Failed to fetch repo {dir=${dir},remote=${remote}}`,
);
if (ex.data) {
throw new Error(`${ex.message} {data=${JSON.stringify(ex.data)}}`);
+9
View File
@@ -1,5 +1,14 @@
# @backstage/backend-defaults
## 0.1.4-next.0
### Patch Changes
- d6dbf1792b: Added `lifecycleFactory` to default service factories.
- Updated dependencies
- @backstage/backend-app-api@0.2.4-next.0
- @backstage/backend-plugin-api@0.1.5-next.0
## 0.1.3
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-defaults",
"description": "Backend defaults used by Backstage backend apps",
"version": "0.1.3",
"version": "0.1.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+10
View File
@@ -1,5 +1,15 @@
# example-backend-next
## 0.0.6-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-scaffolder-backend@1.8.1-next.0
- @backstage/plugin-catalog-backend@1.6.0-next.0
- @backstage/plugin-app-backend@0.3.39-next.0
- @backstage/backend-defaults@0.1.4-next.0
## 0.0.5
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
"version": "0.0.5",
"version": "0.0.6-next.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
+11
View File
@@ -1,5 +1,16 @@
# @backstage/backend-plugin-api
## 0.1.5-next.0
### Patch Changes
- d6dbf1792b: Added initial support for registering shutdown hooks via `lifecycleServiceRef`.
- Updated dependencies
- @backstage/backend-common@0.16.1-next.0
- @backstage/plugin-permission-common@0.7.2-next.0
- @backstage/backend-tasks@0.3.8-next.0
- @backstage/config@1.0.5-next.0
## 0.1.4
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-plugin-api",
"description": "Core API used by Backstage backend plugins",
"version": "0.1.4",
"version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+10
View File
@@ -1,5 +1,15 @@
# @backstage/backend-tasks
## 0.3.8-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.16.1-next.0
- @backstage/types@1.0.2-next.0
- @backstage/config@1.0.5-next.0
- @backstage/errors@1.1.4-next.0
## 0.3.7
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-tasks",
"description": "Common distributed task management library for Backstage backends",
"version": "0.3.7",
"version": "0.3.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+12
View File
@@ -1,5 +1,17 @@
# @backstage/backend-test-utils
## 0.1.31-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- Updated dependencies
- @backstage/cli@0.21.2-next.0
- @backstage/backend-app-api@0.2.4-next.0
- @backstage/backend-common@0.16.1-next.0
- @backstage/backend-plugin-api@0.1.5-next.0
- @backstage/config@1.0.5-next.0
## 0.1.30
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-test-utils",
"description": "Test helpers library for Backstage backends",
"version": "0.1.30",
"version": "0.1.31-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+46
View File
@@ -1,5 +1,51 @@
# example-backend
## 0.2.78-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-scaffolder-backend@1.8.1-next.0
- @backstage/catalog-client@1.2.0-next.0
- @backstage/plugin-catalog-backend@1.6.0-next.0
- @backstage/plugin-events-backend@0.2.0-next.0
- @backstage/plugin-search-backend-node@1.0.5-next.0
- @backstage/plugin-events-node@0.2.0-next.0
- @backstage/backend-common@0.16.1-next.0
- @backstage/integration@1.4.1-next.0
- @backstage/plugin-app-backend@0.3.39-next.0
- @backstage/plugin-auth-backend@0.17.2-next.0
- @backstage/plugin-auth-node@0.2.8-next.0
- @backstage/plugin-azure-devops-backend@0.3.18-next.0
- @backstage/plugin-azure-sites-backend@0.1.1-next.0
- @backstage/plugin-code-coverage-backend@0.2.5-next.0
- @backstage/plugin-graphql-backend@0.1.29-next.0
- @backstage/plugin-jenkins-backend@0.1.29-next.0
- @backstage/plugin-permission-backend@0.5.14-next.0
- @backstage/plugin-permission-common@0.7.2-next.0
- @backstage/plugin-permission-node@0.7.2-next.0
- @backstage/plugin-playlist-backend@0.2.2-next.0
- @backstage/plugin-proxy-backend@0.2.33-next.0
- @backstage/plugin-rollbar-backend@0.1.36-next.0
- @backstage/plugin-techdocs-backend@1.4.2-next.0
- @backstage/plugin-todo-backend@0.1.36-next.0
- @backstage/plugin-kubernetes-backend@0.8.1-next.0
- example-app@0.2.78-next.0
- @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.0
- @backstage/plugin-badges-backend@0.1.33-next.0
- @backstage/plugin-catalog-node@1.2.2-next.0
- @backstage/plugin-tech-insights-backend@0.5.5-next.0
- @backstage/backend-tasks@0.3.8-next.0
- @backstage/catalog-model@1.1.4-next.0
- @backstage/config@1.0.5-next.0
- @backstage/plugin-kafka-backend@0.2.32-next.0
- @backstage/plugin-search-backend@1.1.2-next.0
- @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.0
- @backstage/plugin-search-backend-module-pg@0.4.3-next.0
- @backstage/plugin-search-common@1.1.2-next.0
- @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.0
- @backstage/plugin-tech-insights-node@0.3.7-next.0
## 0.2.77
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend",
"version": "0.2.77",
"version": "0.2.78-next.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
+13
View File
@@ -1,5 +1,18 @@
# @backstage/catalog-client
## 1.2.0-next.0
### Minor Changes
- 00d90b520a: **BREAKING PRODUCERS**: Added a new `getEntitiesByRefs` endpoint to `CatalogApi`, for efficient batch fetching of entities by ref.
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- Updated dependencies
- @backstage/catalog-model@1.1.4-next.0
- @backstage/errors@1.1.4-next.0
## 1.1.2
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/catalog-client",
"description": "An isomorphic client for the catalog backend",
"version": "1.1.2",
"version": "1.2.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
+9
View File
@@ -1,5 +1,14 @@
# @backstage/catalog-model
## 1.1.4-next.0
### Patch Changes
- Updated dependencies
- @backstage/types@1.0.2-next.0
- @backstage/config@1.0.5-next.0
- @backstage/errors@1.1.4-next.0
## 1.1.3
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/catalog-model",
"description": "Types and validators that help describe the model of a Backstage Catalog",
"version": "1.1.3",
"version": "1.1.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
+15
View File
@@ -1,5 +1,20 @@
# @backstage/cli
## 0.21.2-next.0
### Patch Changes
- 91d050c140: changed tests created by create-plugin to follow eslint-rules best practices particularly testing-library/prefer-screen-queries and testing-library/render-result-naming-convention
- 459a3457e1: Bump `msw` version in default plugin/app templates
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- Updated dependencies
- @backstage/config-loader@1.1.7-next.0
- @backstage/release-manifests@0.0.8-next.0
- @backstage/types@1.0.2-next.0
- @backstage/cli-common@0.1.10
- @backstage/config@1.0.5-next.0
- @backstage/errors@1.1.4-next.0
## 0.21.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
"version": "0.21.0",
"version": "0.21.2-next.0",
"publishConfig": {
"access": "public"
},
+11
View File
@@ -1,5 +1,16 @@
# @backstage/config-loader
## 1.1.7-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- Updated dependencies
- @backstage/types@1.0.2-next.0
- @backstage/cli-common@0.1.10
- @backstage/config@1.0.5-next.0
- @backstage/errors@1.1.4-next.0
## 1.1.6
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/config-loader",
"description": "Config loading functionality used by Backstage backend, and CLI",
"version": "1.1.6",
"version": "1.1.7-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
@@ -45,7 +45,7 @@
"json-schema-merge-allof": "^0.8.1",
"json-schema-traverse": "^1.0.0",
"node-fetch": "^2.6.7",
"typescript-json-schema": "^0.54.0",
"typescript-json-schema": "^0.55.0",
"yaml": "^2.0.0",
"yup": "^0.32.9"
},
+7
View File
@@ -1,5 +1,12 @@
# @backstage/config
## 1.0.5-next.0
### Patch Changes
- Updated dependencies
- @backstage/types@1.0.2-next.0
## 1.0.4
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/config",
"description": "Config API used by Backstage core, backend, and CLI",
"version": "1.0.4",
"version": "1.0.5-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
+12
View File
@@ -1,5 +1,17 @@
# @backstage/core-app-api
## 1.2.1-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
- Updated dependencies
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/types@1.0.2-next.0
- @backstage/config@1.0.5-next.0
- @backstage/version-bridge@1.0.2
## 1.2.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-app-api",
"description": "Core app API used by Backstage apps",
"version": "1.2.0",
"version": "1.2.1-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -89,6 +89,6 @@ describe('AppIdentityProxy', () => {
});
await proxy.signOut();
expect(location.href).toBe('/foo');
expect(window.location.href).toBe('/foo');
});
});
@@ -124,6 +124,6 @@ export class AppIdentityProxy implements IdentityApi {
async signOut(): Promise<void> {
await this.waitForTarget.then(target => target.signOut());
location.href = this.signOutTargetUrl;
window.location.href = this.signOutTargetUrl;
}
}
@@ -154,7 +154,7 @@ export class DefaultAuthConnector<AuthSession>
const scope = this.joinScopesFunc(scopes);
const popupUrl = await this.buildUrl('/start', {
scope,
origin: location.origin,
origin: window.location.origin,
});
const payload = await showLoginPopup({
@@ -16,7 +16,7 @@
import React from 'react';
import { FeatureFlagged } from './FeatureFlagged';
import { render } from '@testing-library/react';
import { render, screen } from '@testing-library/react';
import { LocalStorageFeatureFlags } from '../apis';
import { TestApiProvider } from '@backstage/test-utils';
import { featureFlagsApiRef } from '@backstage/core-plugin-api';
@@ -35,7 +35,7 @@ describe('FeatureFlagged', () => {
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => true);
const { queryByText } = render(
render(
<Wrapper>
<div>
<FeatureFlagged with="hello-flag">
@@ -45,14 +45,14 @@ describe('FeatureFlagged', () => {
</Wrapper>,
);
expect(queryByText('BACKSTAGE!')).toBeInTheDocument();
expect(screen.getByText('BACKSTAGE!')).toBeInTheDocument();
});
it('should not render contents when the feature flag is disabled', async () => {
jest
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => false);
const { queryByText } = render(
render(
<Wrapper>
<div>
<FeatureFlagged with="hello-flag">
@@ -62,7 +62,7 @@ describe('FeatureFlagged', () => {
</Wrapper>,
);
expect(queryByText('BACKSTAGE!')).not.toBeInTheDocument();
expect(screen.queryByText('BACKSTAGE!')).not.toBeInTheDocument();
});
});
describe('without', () => {
@@ -71,7 +71,7 @@ describe('FeatureFlagged', () => {
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => true);
const { queryByText } = render(
render(
<Wrapper>
<div>
<FeatureFlagged without="hello-flag">
@@ -81,14 +81,14 @@ describe('FeatureFlagged', () => {
</Wrapper>,
);
expect(queryByText('BACKSTAGE!')).not.toBeInTheDocument();
expect(screen.queryByText('BACKSTAGE!')).not.toBeInTheDocument();
});
it('should render contents when the feature flag is disabled', async () => {
jest
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => false);
const { queryByText } = render(
render(
<Wrapper>
<div>
<FeatureFlagged without="hello-flag">
@@ -98,7 +98,7 @@ describe('FeatureFlagged', () => {
</Wrapper>,
);
expect(queryByText('BACKSTAGE!')).toBeInTheDocument();
expect(screen.getByText('BACKSTAGE!')).toBeInTheDocument();
});
});
});
+17
View File
@@ -1,5 +1,22 @@
# @backstage/core-components
## 0.12.1-next.0
### Patch Changes
- ea4a5be8f3: Create a variable for minimum height and add a prop named 'fit' for determining if the graph height should grow or be contained.
- 64a579a998: Add items prop to SupportButton. This prop can be used to override the items that would otherwise be grabbed from the config.
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
- 17a8e32f39: Updated dependency `rc-progress` to `3.4.1`.
- dfc8edf9c5: Internal refactor to avoid usage of deprecated symbols.
- Updated dependencies
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/config@1.0.5-next.0
- @backstage/errors@1.1.4-next.0
- @backstage/theme@0.2.16
- @backstage/version-bridge@1.0.2
## 0.12.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-components",
"description": "Core components used by Backstage plugins and apps",
"version": "0.12.0",
"version": "0.12.1-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -15,6 +15,7 @@
*/
import React from 'react';
import { screen } from '@testing-library/react';
import { AlertDisplay } from './AlertDisplay';
import { alertApiRef } from '@backstage/core-plugin-api';
import { AlertApiForwarder } from '@backstage/core-app-api';
@@ -34,7 +35,7 @@ describe('<AlertDisplay />', () => {
});
it('renders with message', async () => {
const { queryByText } = await renderInTestApp(
await renderInTestApp(
<TestApiProvider
apis={[
[
@@ -52,7 +53,7 @@ describe('<AlertDisplay />', () => {
</TestApiProvider>,
);
expect(queryByText(TEST_MESSAGE)).toBeInTheDocument();
expect(screen.getByText(TEST_MESSAGE)).toBeInTheDocument();
});
describe('with multiple messages', () => {
@@ -73,23 +74,23 @@ describe('<AlertDisplay />', () => {
] as const;
it('renders first message', async () => {
const { queryByText } = await renderInTestApp(
await renderInTestApp(
<TestApiProvider apis={apis}>
<AlertDisplay />
</TestApiProvider>,
);
expect(queryByText('message one')).toBeInTheDocument();
expect(screen.getByText('message one')).toBeInTheDocument();
});
it('renders a count of remaining messages', async () => {
const { queryByText } = await renderInTestApp(
await renderInTestApp(
<TestApiProvider apis={apis}>
<AlertDisplay />
</TestApiProvider>,
);
expect(queryByText('(2 older messages)')).toBeInTheDocument();
expect(screen.getByText('(2 older messages)')).toBeInTheDocument();
});
});
});
@@ -155,7 +155,7 @@ function useScrollDistance(
return [scrollLeft, scrollRight];
}
// Used to animate scrolling. Returns a single setScrollTarger function, when called with e.g. 200,
// Used to animate scrolling. Returns a single setScrollTarget function, when called with e.g. 200,
// the element pointer to by the ref will be scrolled 200px forwards over time.
function useSmoothScroll(
ref: React.MutableRefObject<HTMLElement | undefined>,
@@ -169,7 +169,7 @@ function useSmoothScroll(
return;
}
const startTime = performance.now();
const startTime = window.performance.now();
const id = requestAnimationFrame(frameTime => {
if (!ref.current) {
return;
@@ -60,11 +60,11 @@ describe('RealLogViewer', () => {
await userEvent.keyboard('{shift>}{enter}{/shift}');
expect(rendered.getByText('3/3')).toBeInTheDocument();
expect(rendered.queryByText('Some Log Line')).toBeInTheDocument();
expect(rendered.getByText('Some Log Line')).toBeInTheDocument();
await userEvent.keyboard('{meta>}{enter}{/meta}');
expect(rendered.queryByText('Some Log Line')).not.toBeInTheDocument();
await userEvent.keyboard('{meta>}{enter}{/meta}');
expect(rendered.queryByText('Some Log Line')).toBeInTheDocument();
expect(rendered.getByText('Some Log Line')).toBeInTheDocument();
// Tab down to line #2 and click
await userEvent.tab();
@@ -14,15 +14,15 @@
* limitations under the License.
*/
import React from 'react';
import { fireEvent, screen } from '@testing-library/react';
import { configApiRef } from '@backstage/core-plugin-api';
import {
MockConfigApi,
renderInTestApp,
TestApiProvider,
} from '@backstage/test-utils';
import { act, fireEvent, screen } from '@testing-library/react';
import React from 'react';
import { SupportButton } from './SupportButton';
import { configApiRef } from '@backstage/core-plugin-api';
const configApi = new MockConfigApi({
app: {
@@ -45,8 +45,9 @@ const POPOVER_ID = 'support-button-popover';
describe('<SupportButton />', () => {
it('renders without exploding', async () => {
await renderInTestApp(<SupportButton />);
expect(screen.getByTestId(SUPPORT_BUTTON_ID)).toBeInTheDocument();
await expect(
screen.findByTestId(SUPPORT_BUTTON_ID),
).resolves.toBeInTheDocument();
});
it('supports passing a title', async () => {
@@ -96,11 +97,13 @@ describe('<SupportButton />', () => {
it('shows popover on click', async () => {
await renderInTestApp(<SupportButton />);
const supportButton = screen.getByTestId(SUPPORT_BUTTON_ID);
expect(supportButton).toBeInTheDocument();
await expect(
screen.findByTestId(SUPPORT_BUTTON_ID),
).resolves.toBeInTheDocument();
await act(async () => {
fireEvent.click(screen.getByTestId(SUPPORT_BUTTON_ID));
});
fireEvent.click(supportButton);
expect(screen.getByTestId(POPOVER_ID)).toBeInTheDocument();
await expect(screen.findByTestId(POPOVER_ID)).resolves.toBeInTheDocument();
});
});
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { renderInTestApp } from '@backstage/test-utils';
import { act, fireEvent } from '@testing-library/react';
import React from 'react';
@@ -65,14 +66,14 @@ describe('RoutedTabs', () => {
expect(rendered.queryByText('tabbed-test-content')).not.toBeInTheDocument();
expect(rendered.getByText('tabbed-test-title-2')).toBeInTheDocument();
expect(rendered.queryByText('tabbed-test-content-2')).toBeInTheDocument();
expect(rendered.getByText('tabbed-test-content-2')).toBeInTheDocument();
const thirdTab = rendered.queryAllByRole('tab')[2];
act(() => {
fireEvent.click(thirdTab);
});
expect(rendered.getByText('tabbed-test-title-3')).toBeInTheDocument();
expect(rendered.queryByText('tabbed-test-content-3')).toBeInTheDocument();
expect(rendered.getByText('tabbed-test-content-3')).toBeInTheDocument();
});
describe('correctly delegates nested links', () => {
@@ -113,9 +114,9 @@ describe('RoutedTabs', () => {
expect(
rendered.queryByText('tabbed-test-content'),
).not.toBeInTheDocument();
expect(rendered.queryByText('tabbed-test-content-2')).toBeInTheDocument();
expect(rendered.getByText('tabbed-test-content-2')).toBeInTheDocument();
expect(
rendered.queryByText('tabbed-test-nested-content-2'),
rendered.getByText('tabbed-test-nested-content-2'),
).toBeInTheDocument();
});
@@ -125,7 +126,7 @@ describe('RoutedTabs', () => {
expect(
rendered.queryByText('tabbed-test-content'),
).not.toBeInTheDocument();
expect(rendered.queryByText('tabbed-test-content-2')).toBeInTheDocument();
expect(rendered.getByText('tabbed-test-content-2')).toBeInTheDocument();
expect(
rendered.queryByText('tabbed-test-nested-content-2'),
).not.toBeInTheDocument();
@@ -142,7 +143,7 @@ describe('RoutedTabs', () => {
expect(rendered.queryByText('tabbed-test-content')).not.toBeInTheDocument();
expect(rendered.getByText('tabbed-test-title-2')).toBeInTheDocument();
expect(rendered.queryByText('tabbed-test-content-2')).toBeInTheDocument();
expect(rendered.getByText('tabbed-test-content-2')).toBeInTheDocument();
});
it('redirects to the top level when no route is matching the url', async () => {
@@ -79,6 +79,6 @@ describe('TabbedLayout', () => {
expect(queryByText('tabbed-test-content')).not.toBeInTheDocument();
expect(getByText('tabbed-test-title-2')).toBeInTheDocument();
expect(queryByText('tabbed-test-content-2')).toBeInTheDocument();
expect(getByText('tabbed-test-content-2')).toBeInTheDocument();
});
});
@@ -43,7 +43,7 @@ describe('<ComponentContextMenu />', () => {
await fireEvent.click(rendered.queryByText('Some label') as Node);
expect(onClickFunction).toHaveBeenCalled();
// We do not expect the dropdown to disappear after click
expect(rendered.queryByText('Some label')).toBeInTheDocument();
expect(rendered.getByText('Some label')).toBeInTheDocument();
});
it('Disabled', async () => {
@@ -80,7 +80,7 @@ describe('<ComponentContextMenu />', () => {
await fireEvent.click(rendered.queryByText('Secondary label') as Node);
expect(onClickFunction).toHaveBeenCalled();
// We do not expect the dropdown to disappear after click
expect(rendered.queryByText('Some label')).toBeInTheDocument();
expect(rendered.getByText('Some label')).toBeInTheDocument();
});
it('should close when hitting escape', async () => {
+11
View File
@@ -1,5 +1,16 @@
# @backstage/core-plugin-api
## 1.1.1-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
- Updated dependencies
- @backstage/types@1.0.2-next.0
- @backstage/config@1.0.5-next.0
- @backstage/version-bridge@1.0.2
## 1.1.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-plugin-api",
"description": "Core API used by Backstage plugins",
"version": "1.1.0",
"version": "1.1.1-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+8
View File
@@ -1,5 +1,13 @@
# @backstage/create-app
## 0.4.35-next.0
### Patch Changes
- Bumped create-app version.
- Updated dependencies
- @backstage/cli-common@0.1.10
## 0.4.34
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/create-app",
"description": "A CLI that helps you create your own Backstage app",
"version": "0.4.34",
"version": "0.4.35-next.0",
"publishConfig": {
"access": "public"
},
+16
View File
@@ -1,5 +1,21 @@
# @backstage/dev-utils
## 1.0.9-next.0
### Patch Changes
- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
- Updated dependencies
- @backstage/core-components@0.12.1-next.0
- @backstage/core-app-api@1.2.1-next.0
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/integration-react@1.1.7-next.0
- @backstage/test-utils@1.2.3-next.0
- @backstage/plugin-catalog-react@1.2.2-next.0
- @backstage/app-defaults@1.0.9-next.0
- @backstage/catalog-model@1.1.4-next.0
- @backstage/theme@0.2.16
## 1.0.8
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/dev-utils",
"description": "Utilities for developing Backstage plugins.",
"version": "1.0.8",
"version": "1.0.9-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+7
View File
@@ -1,5 +1,12 @@
# @backstage/errors
## 1.1.4-next.0
### Patch Changes
- Updated dependencies
- @backstage/types@1.0.2-next.0
## 1.1.3
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/errors",
"description": "Common utilities for error handling within Backstage",
"version": "1.1.3",
"version": "1.1.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
+12
View File
@@ -1,5 +1,17 @@
# @backstage/integration-react
## 1.1.7-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- Updated dependencies
- @backstage/core-components@0.12.1-next.0
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/integration@1.4.1-next.0
- @backstage/config@1.0.5-next.0
- @backstage/theme@0.2.16
## 1.1.6
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration-react",
"description": "Frontend package for managing integrations towards external systems",
"version": "1.1.6",
"version": "1.1.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/integration
## 1.4.1-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- 34b039ca9f: Added `integrations.github.apps.allowedInstallationOwners` to the configuration schema.
- Updated dependencies
- @backstage/config@1.0.5-next.0
- @backstage/errors@1.1.4-next.0
## 1.4.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration",
"description": "Helpers for managing integrations towards external systems",
"version": "1.4.0",
"version": "1.4.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
+6
View File
@@ -1,5 +1,11 @@
# @backstage/release-manifests
## 0.0.8-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
## 0.0.7
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/release-manifests",
"description": "Helper library for receiving release manifests",
"version": "0.0.7",
"version": "0.0.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+12
View File
@@ -0,0 +1,12 @@
# @backstage/repo-tools
## 0.1.0-next.0
### Minor Changes
- 99713fd671: Introducing repo-tools package
### Patch Changes
- Updated dependencies
- @backstage/errors@1.1.4-next.0
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/repo-tools",
"description": "CLI for Backstage repo tooling ",
"version": "0.0.0",
"version": "0.1.0-next.0",
"publishConfig": {
"access": "public"
},
@@ -1,5 +1,24 @@
# techdocs-cli-embedded-app
## 0.2.77-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-techdocs-react@1.0.7-next.0
- @backstage/cli@0.21.2-next.0
- @backstage/core-components@0.12.1-next.0
- @backstage/core-app-api@1.2.1-next.0
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/integration-react@1.1.7-next.0
- @backstage/test-utils@1.2.3-next.0
- @backstage/plugin-techdocs@1.4.1-next.0
- @backstage/plugin-catalog@1.6.2-next.0
- @backstage/app-defaults@1.0.9-next.0
- @backstage/catalog-model@1.1.4-next.0
- @backstage/config@1.0.5-next.0
- @backstage/theme@0.2.16
## 0.2.76
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "techdocs-cli-embedded-app",
"version": "0.2.76",
"version": "0.2.77-next.0",
"private": true,
"backstage": {
"role": "frontend"
+11
View File
@@ -1,5 +1,16 @@
# @techdocs/cli
## 1.2.4-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.16.1-next.0
- @backstage/catalog-model@1.1.4-next.0
- @backstage/cli-common@0.1.10
- @backstage/config@1.0.5-next.0
- @backstage/plugin-techdocs-node@1.4.3-next.0
## 1.2.3
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@techdocs/cli",
"description": "Utility CLI for managing TechDocs sites in Backstage.",
"version": "1.2.3",
"version": "1.2.4-next.0",
"publishConfig": {
"access": "public"
},
+15
View File
@@ -1,5 +1,20 @@
# @backstage/test-utils
## 1.2.3-next.0
### Patch Changes
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
- Updated dependencies
- @backstage/core-app-api@1.2.1-next.0
- @backstage/core-plugin-api@1.1.1-next.0
- @backstage/plugin-permission-common@0.7.2-next.0
- @backstage/types@1.0.2-next.0
- @backstage/config@1.0.5-next.0
- @backstage/theme@0.2.16
- @backstage/plugin-permission-react@0.4.8-next.0
## 1.2.2
### Patch Changes
+6
View File
@@ -25,6 +25,7 @@ import { JsonObject } from '@backstage/types';
import { JsonValue } from '@backstage/types';
import { Observable } from '@backstage/types';
import { PermissionApi } from '@backstage/plugin-permission-react';
import { PropsWithChildren } from 'react';
import { ReactElement } from 'react';
import { ReactNode } from 'react';
import { RenderOptions } from '@testing-library/react';
@@ -165,6 +166,11 @@ export class MockPermissionApi implements PermissionApi {
): Promise<EvaluatePermissionResponse>;
}
// @alpha
export const MockPluginProvider: ({
children,
}: PropsWithChildren<{}>) => JSX.Element;
// @public
export class MockStorageApi implements StorageApi {
// (undocumented)
+6 -4
View File
@@ -1,11 +1,12 @@
{
"name": "@backstage/test-utils",
"description": "Utilities to test Backstage plugins and apps.",
"version": "1.2.2",
"version": "1.2.3-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
"types": "dist/index.d.ts"
"types": "dist/index.d.ts",
"alphaTypes": "dist/index.alpha.d.ts"
},
"backstage": {
"role": "web-library"
@@ -23,7 +24,7 @@
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "backstage-cli package build",
"build": "backstage-cli package build --experimental-type-build",
"lint": "backstage-cli package lint",
"test": "backstage-cli package test",
"prepack": "backstage-cli package prepack",
@@ -60,6 +61,7 @@
"msw": "^0.49.0"
},
"files": [
"dist"
"dist",
"alpha"
]
}
@@ -24,6 +24,7 @@ export {
export type { TestAppOptions } from './appWrappers';
export * from './msw';
export * from './logCollector';
export * from './providers';
export * from './testingLibrary';
export { TestApiProvider, TestApiRegistry } from './TestApiProvider';
export type { TestApiProviderProps } from './TestApiProvider';
@@ -0,0 +1,35 @@
/*
* 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 React, { PropsWithChildren } from 'react';
import { createPlugin, PluginProvider } from '@backstage/core-plugin-api';
/**
* Mock for PluginProvider to use in unit tests
* @alpha
*/
export const MockPluginProvider = ({ children }: PropsWithChildren<{}>) => {
type TestInputPluginOptions = {};
type TestPluginOptions = {};
const plugin = createPlugin({
id: 'my-plugin',
__experimentalConfigure(_: TestInputPluginOptions): TestPluginOptions {
return {};
},
});
return <PluginProvider plugin={plugin}>{children}</PluginProvider>;
};
+6
View File
@@ -1,5 +1,11 @@
# @backstage/types
## 1.0.2-next.0
### Patch Changes
- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
## 1.0.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/types",
"description": "Common TypeScript types used within Backstage",
"version": "1.0.1",
"version": "1.0.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -19,7 +19,9 @@ function getGlobalObject() {
if (typeof window !== 'undefined' && window.Math === Math) {
return window;
}
// eslint-disable-next-line no-restricted-globals
if (typeof self !== 'undefined' && self.Math === Math) {
// eslint-disable-next-line no-restricted-globals
return self;
}
// eslint-disable-next-line no-new-func