Merge branch 'backstage:master' into adr-plugin-adjustments

This commit is contained in:
Robunnin
2022-12-27 08:32:15 -05:00
committed by GitHub
17 changed files with 52 additions and 179 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': patch
---
Use the project tsconfig in case of selection all packages
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-techdocs-react': patch
'@backstage/plugin-techdocs': patch
---
Updated dependency `jss` to `~10.9.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-explore': patch
---
Makes the `GroupsDiagram` not grown on screen on its own.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-backend': patch
---
Allow max page limit for search results to be configurable
-131
View File
@@ -1,131 +0,0 @@
name: E2E Test Tugboat
on: deployment_status
jobs:
set-pending:
if: github.event.deployment_status.state != 'success' && github.event.deployment_status.state != 'failed'
name: Set pending waiting for Tugboat
runs-on: ubuntu-latest
steps:
# Set an initial commit status message to indicate that the tests are
# running.
- name: set pending status
uses: actions/github-script@v6
with:
github-token: ${{secrets.GH_SERVICE_ACCOUNT_TOKEN}}
debug: true
script: |
return github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.sha,
state: 'pending',
context: 'Backstage Tugboat E2E Tests',
description: 'Waiting for Tugboat to complete deployment',
target_url: "https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}"
});
run-tests:
# Only run after a successful Tugboat deployment.
if: github.event.deployment_status.state == 'success'
name: Run tests against Tugboat deployment
runs-on: ubuntu-latest
steps:
# Set an initial commit status message to indicate that the tests are
# running.
- name: set pending status
uses: actions/github-script@v6
with:
github-token: ${{secrets.GH_SERVICE_ACCOUNT_TOKEN}}
debug: true
script: |
return github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.sha,
state: 'pending',
context: 'Backstage Tugboat E2E Tests',
description: 'Running against tugboat preview',
target_url: "https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}"
});
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: yarn install
run: yarn --cwd cypress install
# This is required because the environment_url param that Tugboat uses
# to tell us where the preview is located isn't supported unless you
# specify the custom Accept header when getting the deployment_status,
# and GitHub actions doesn't do that by default. So instead we have to
# load the status object manually and get the data we need.
# https://developer.github.com/changes/2016-04-06-deployment-and-deployment-status-enhancements/
- name: get deployment status
id: get-status-env
uses: actions/github-script@v6
with:
github-token: ${{secrets.GH_SERVICE_ACCOUNT_TOKEN}}
result-encoding: string
script: |
const result = await github.rest.repos.getDeploymentStatus({
owner: context.repo.owner,
repo: context.repo.repo,
deployment_id: context.payload.deployment.id,
status_id: context.payload.deployment_status.id,
headers: {
'Accept': 'application/vnd.github.ant-man-preview+json'
},
});
console.log(result);
return result.data.environment_url;
- name: cypress run
uses: cypress-io/github-action@v2
env:
CYPRESS_baseUrl: ${{steps.get-status-env.outputs.result}}
with:
config-file: ./cypress.json
working-directory: ./cypress
browser: chrome
install: false
headless: true
- name: update artifact
if: ${{ always() }}
uses: actions/upload-artifact@v3
with:
name: cypress-videos
path: ./cypress/cypress/videos
- name: set status
if: ${{ failure() }}
uses: actions/github-script@v6
with:
github-token: ${{secrets.GH_SERVICE_ACCOUNT_TOKEN}}
script: |
return github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.sha,
state: "error",
context: 'Backstage Tugboat E2E Tests',
target_url: "https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}"
});
- name: set status
if: ${{ success() }}
uses: actions/github-script@v6
with:
github-token: ${{secrets.GH_SERVICE_ACCOUNT_TOKEN}}
script: |
return github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.sha,
state: "success",
context: 'Backstage Tugboat E2E Tests',
target_url: "https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}"
});
-17
View File
@@ -1,17 +0,0 @@
services:
backstage:
image: tugboatqa/node:lts
expose: 7007
default: true
commands:
init:
- mkdir -p /etc/service/node
- echo "#!/bin/sh" > /etc/service/node/run
- echo "yarn --cwd ${TUGBOAT_ROOT} start-backend --config ${TUGBOAT_ROOT}/app-config.yaml --config ${TUGBOAT_ROOT}/.tugboat/tugboat.app-config.production.yaml" >> /etc/service/node/run
- chmod +x /etc/service/node/run
build:
- yarn install --immutable
- yarn workspace example-app build
start:
# wget the endpoint. Will retry every 2 seconds. 30 retries = 1m for service to come up. Plenty.
- wget -O /dev/null -o /dev/null --tries=30 --timeout=5 --retry-connrefused http://localhost:7007
@@ -1,10 +0,0 @@
app:
title: Backstage Tugboat Preview
baseUrl: ${TUGBOAT_DEFAULT_SERVICE_URL}
backend:
baseUrl: ${TUGBOAT_DEFAULT_SERVICE_URL}
cors:
origin: ${TUGBOAT_DEFAULT_SERVICE_URL}
methods: [GET, POST, PUT, DELETE]
credentials: true
-4
View File
@@ -2,10 +2,6 @@
Hey 👋 Welcome to the Cypress tests for Backstage. They're designed to be run against the `packages/app` folder in the main repo, and be some form of smoke tests to make sure that we don't break any core functionality.
They run part of the PR build, and are triggered from the `.github/workflows/tugboat.yml` file.
The main app gets built up part of a [Tugboat Build](https://tugboat.qa), which when complete, sends a `deployment event` to the PR triggering the aforementioned workflow.
### Running Locally
In order to make typescript happy, this `cypress` package is separate from all the Jest dependencies in the monorepo workspaces setup.
@@ -66,7 +66,7 @@ export const buildApiReports = async (paths: string[] = [], opts: Options) => {
}
let temporaryTsConfigPath: string | undefined;
if (selectedPackageDirs) {
if (!isAllPackages) {
temporaryTsConfigPath = await createTemporaryTsConfig(selectedPackageDirs);
}
const tsconfigFilePath =
@@ -44,8 +44,10 @@ import useAsync from 'react-use/lib/useAsync';
const useStyles = makeStyles((theme: BackstageTheme) => ({
graph: {
minHeight: '100%',
flex: 1,
},
graphWrapper: {
display: 'flex',
height: '100%',
},
organizationNode: {
+5
View File
@@ -17,6 +17,11 @@
export interface Config {
/** Configuration options for the search plugin */
search?: {
/**
* Sets the maximum max page limit size. Defaults to 100.
*/
maxPageLimit?: number;
/**
* Options related to the search integration with the Backstage permissions system
*/
+2 -1
View File
@@ -48,6 +48,7 @@
"supertest": "^6.1.3"
},
"files": [
"dist"
"dist",
"config.d.ts"
]
}
@@ -59,7 +59,10 @@ describe('createRouter', () => {
'first-type': {},
'second-type': {},
},
config: new ConfigReader({ permissions: { enabled: false } }),
config: new ConfigReader({
permissions: { enabled: false },
search: { maxPageLimit: 200 },
}),
permissions: mockPermissionEvaluator,
logger,
});
@@ -112,8 +115,8 @@ describe('createRouter', () => {
});
});
it('should accept per page value under or equal to 100', async () => {
const response = await request(app).get(`/query?pageLimit=30`);
it('should accept per page value under or equal to configured max', async () => {
const response = await request(app).get(`/query?pageLimit=200`);
expect(response.status).toEqual(200);
expect(response.body).toMatchObject({
@@ -121,13 +124,13 @@ describe('createRouter', () => {
});
});
it('should reject per page value over 100', async () => {
const response = await request(app).get(`/query?pageLimit=200`);
it('should reject per page value over configured max', async () => {
const response = await request(app).get(`/query?pageLimit=300`);
expect(response.status).toEqual(400);
expect(response.body).toMatchObject({
error: {
message: /The page limit "200" is greater than "100"/i,
message: /The page limit "300" is greater than "200"/i,
},
});
});
+4 -1
View File
@@ -62,7 +62,7 @@ export type RouterOptions = {
logger: Logger;
};
const maxPageLimit = 100;
const defaultMaxPageLimit = 100;
const allowedLocationProtocols = ['http:', 'https:'];
/**
@@ -73,6 +73,9 @@ export async function createRouter(
): Promise<express.Router> {
const { engine: inputEngine, types, permissions, config, logger } = options;
const maxPageLimit =
config.getOptionalNumber('search.maxPageLimit') ?? defaultMaxPageLimit;
const requestSchema = z.object({
term: z.string().default(''),
filters: jsonObjectSchema.optional(),
+1 -1
View File
@@ -42,7 +42,7 @@
"@material-ui/core": "^4.12.2",
"@material-ui/lab": "4.0.0-alpha.57",
"@material-ui/styles": "^4.11.0",
"jss": "~10.8.2",
"jss": "~10.9.0",
"lodash": "^4.17.21",
"react-helmet": "6.1.0",
"react-use": "^17.2.4"
+1 -1
View File
@@ -52,7 +52,7 @@
"dompurify": "^2.2.9",
"event-source-polyfill": "1.0.25",
"git-url-parse": "^13.0.0",
"jss": "~10.8.2",
"jss": "~10.9.0",
"lodash": "^4.17.21",
"react-helmet": "6.1.0",
"react-use": "^17.2.4"
+6 -6
View File
@@ -7962,7 +7962,7 @@ __metadata:
"@testing-library/jest-dom": ^5.10.1
"@testing-library/react": ^12.1.3
"@testing-library/react-hooks": ^8.0.0
jss: ~10.8.2
jss: ~10.9.0
lodash: ^4.17.21
react-helmet: 6.1.0
react-use: ^17.2.4
@@ -8010,7 +8010,7 @@ __metadata:
dompurify: ^2.2.9
event-source-polyfill: 1.0.25
git-url-parse: ^13.0.0
jss: ~10.8.2
jss: ~10.9.0
lodash: ^4.17.21
msw: ^0.49.0
react-helmet: 6.1.0
@@ -27034,15 +27034,15 @@ __metadata:
languageName: node
linkType: hard
"jss@npm:^10.5.1, jss@npm:~10.8.2":
version: 10.8.2
resolution: "jss@npm:10.8.2"
"jss@npm:^10.5.1, jss@npm:~10.9.0":
version: 10.9.2
resolution: "jss@npm:10.9.2"
dependencies:
"@babel/runtime": ^7.3.1
csstype: ^3.0.2
is-in-browser: ^1.1.3
tiny-warning: ^1.0.2
checksum: b2647e44435e665c53eda80af2305addfea7e49c3b0c0271dc183abd8b1bb7c88bc5d77baf7bb8b2460640190eed900358fda514742d0bf4ebbc203984c879ba
checksum: 7ae5cd2f8602bf197ec90251d774b9f10d55eb2db0854ac78dc7fb6983828c202e8eb0d5c8c59c73b2f64718ebd33d6063afa799d625a995986a22dc1cc27230
languageName: node
linkType: hard