Merge branch 'backstage:master' into plugin-azure-functions
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-node': minor
|
||||
---
|
||||
|
||||
Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` so make sure imports are updated.
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': minor
|
||||
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
|
||||
---
|
||||
|
||||
Bitbucket Cloud provider: Add option to configure schedule via `app-config.yaml` instead of in code.
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
'@backstage/plugin-catalog-graph': patch
|
||||
---
|
||||
|
||||
Added `curve` prop to the `DependencyGraph` component to select the type of layout
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Make the `/next` scaffolder work end to end with the old `TaskPage` view
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
---
|
||||
|
||||
Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not.
|
||||
|
||||
Moved the following types from this package to `@backstage/plugin-catalog-backend`.
|
||||
|
||||
- AnalyzeLocationResponse
|
||||
- AnalyzeLocationRequest
|
||||
- AnalyzeLocationExistingEntity
|
||||
- AnalyzeLocationGenerateEntity
|
||||
- AnalyzeLocationEntityField
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-bazaar': patch
|
||||
---
|
||||
|
||||
Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props.
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-github': patch
|
||||
---
|
||||
|
||||
`GitHubEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code.
|
||||
|
||||
Please find how to configure the schedule at the config at
|
||||
https://backstage.io/docs/integrations/github/discovery
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-common': patch
|
||||
---
|
||||
|
||||
Moved the following types from `@backstage/plugin-catalog-backend` to this package.
|
||||
|
||||
- AnalyzeLocationResponse
|
||||
- AnalyzeLocationRequest
|
||||
- AnalyzeLocationExistingEntity
|
||||
- AnalyzeLocationGenerateEntity
|
||||
- AnalyzeLocationEntityField
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-bitbucket': patch
|
||||
---
|
||||
|
||||
Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`.
|
||||
|
||||
Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud`
|
||||
or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead.
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-import': minor
|
||||
---
|
||||
|
||||
**Breaking**
|
||||
Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials.
|
||||
|
||||
Add the following to your `CatalogBuilder` to have the repo URL ingestion working again.
|
||||
|
||||
```ts
|
||||
// catalog.ts
|
||||
import { GitHubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github';
|
||||
...
|
||||
builder.addLocationAnalyzers(
|
||||
new GitHubLocationAnalyzer({
|
||||
discovery: env.discovery,
|
||||
config: env.config,
|
||||
}),
|
||||
);
|
||||
...
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
---
|
||||
|
||||
Fix BitBucket server integration
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
'@backstage/plugin-permission-common': minor
|
||||
'@backstage/plugin-permission-node': minor
|
||||
---
|
||||
|
||||
**BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed.
|
||||
|
||||
To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so...
|
||||
|
||||
```ts
|
||||
createPermissionRule({
|
||||
apply: (resource, foo, bar) => true,
|
||||
toQuery: (foo, bar) => {},
|
||||
});
|
||||
```
|
||||
|
||||
The API has now changed to expect the parameters as a single object
|
||||
|
||||
```ts
|
||||
createPermissionRule({
|
||||
paramSchema: z.object({
|
||||
foo: z.string().describe('Foo value to match'),
|
||||
bar: z.string().describe('Bar value to match'),
|
||||
}),
|
||||
apply: (resource, { foo, bar }) => true,
|
||||
toQuery: ({ foo, bar }) => {},
|
||||
});
|
||||
```
|
||||
|
||||
One final change made is to limit the possible values for a parameter to primitives and arrays of primitives.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-github': patch
|
||||
---
|
||||
|
||||
Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files.
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-github': patch
|
||||
---
|
||||
|
||||
Use schedule from config at backend module.
|
||||
|
||||
Also, it removes `GithubEntityProviderCatalogModuleOptions`
|
||||
in favor of config-only for the backend module setup
|
||||
like at other similar modules.
|
||||
+31
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"mode": "pre",
|
||||
"mode": "exit",
|
||||
"tag": "next",
|
||||
"initialVersions": {
|
||||
"example-app": "0.2.75",
|
||||
@@ -177,47 +177,68 @@
|
||||
},
|
||||
"changesets": [
|
||||
"blue-lions-greet",
|
||||
"brave-goats-rush",
|
||||
"brave-peaches-brush",
|
||||
"breezy-pots-worry",
|
||||
"bright-rules-shout",
|
||||
"brown-grapes-battle",
|
||||
"calm-moose-fetch",
|
||||
"calm-pianos-burn",
|
||||
"clean-camels-sneeze",
|
||||
"clever-ties-burn",
|
||||
"cuddly-bikes-tease",
|
||||
"cuddly-ways-fail",
|
||||
"curly-rats-itch",
|
||||
"curvy-kiwis-fold",
|
||||
"curvy-lemons-change",
|
||||
"curvy-pets-wash",
|
||||
"dry-shirts-attack",
|
||||
"dull-rocks-warn",
|
||||
"early-rocks-smell",
|
||||
"eleven-apples-accept",
|
||||
"fair-tools-melt",
|
||||
"fifty-berries-learn",
|
||||
"five-tables-grow",
|
||||
"fresh-donuts-arrive",
|
||||
"fuzzy-dolls-give",
|
||||
"fuzzy-dolls-shake",
|
||||
"giant-pianos-repeat",
|
||||
"great-numbers-reply",
|
||||
"grumpy-pans-knock",
|
||||
"hot-geese-vanish",
|
||||
"itchy-schools-run",
|
||||
"kind-bees-suffer",
|
||||
"kind-penguins-report",
|
||||
"large-dingos-juggle",
|
||||
"large-jars-fry",
|
||||
"lazy-beds-pull",
|
||||
"lazy-eyes-switch",
|
||||
"lazy-fireants-check",
|
||||
"little-hats-yell",
|
||||
"little-roses-rule",
|
||||
"loud-dots-sit",
|
||||
"lovely-peaches-fold",
|
||||
"lucky-beans-bathe",
|
||||
"lucky-cows-boil",
|
||||
"mean-spiders-design",
|
||||
"mighty-lions-march",
|
||||
"moody-carrots-shout",
|
||||
"odd-pandas-suffer",
|
||||
"odd-singers-taste",
|
||||
"old-cobras-suffer",
|
||||
"old-melons-bathe",
|
||||
"old-needles-brake",
|
||||
"perfect-moose-drum",
|
||||
"plenty-kids-fetch",
|
||||
"plenty-laws-end",
|
||||
"poor-clouds-ring",
|
||||
"pretty-buttons-develop",
|
||||
"purple-masks-travel",
|
||||
"quick-meals-talk",
|
||||
"quiet-dancers-jog",
|
||||
"quiet-hats-kick",
|
||||
"quiet-ligers-draw",
|
||||
"rare-cougars-cross",
|
||||
"rare-hotels-cough",
|
||||
"red-dots-sleep",
|
||||
"red-pants-rush",
|
||||
@@ -225,6 +246,7 @@
|
||||
"renovate-a02d90b",
|
||||
"rich-carrots-reflect",
|
||||
"rude-bulldogs-sleep",
|
||||
"rude-tomatoes-behave",
|
||||
"search-bobcats-love",
|
||||
"search-cars-hide",
|
||||
"search-clouds-begin",
|
||||
@@ -232,10 +254,13 @@
|
||||
"search-dull-planes-prove",
|
||||
"search-rats-grin",
|
||||
"selfish-turkeys-exist",
|
||||
"seven-panthers-chew",
|
||||
"shaggy-books-smell",
|
||||
"short-plants-return",
|
||||
"silent-bees-repeat",
|
||||
"silly-rules-join",
|
||||
"sixty-items-nail",
|
||||
"slimy-suns-learn",
|
||||
"slow-mirrors-eat",
|
||||
"smooth-tables-pull",
|
||||
"soft-falcons-love",
|
||||
@@ -243,16 +268,20 @@
|
||||
"sweet-insects-camp",
|
||||
"swift-phones-cheat",
|
||||
"tall-baboons-deliver",
|
||||
"techdocs-olive-worms-yell",
|
||||
"tender-drinks-drive",
|
||||
"tender-parrots-peel",
|
||||
"thick-kings-destroy",
|
||||
"tiny-mails-bathe",
|
||||
"tough-hairs-sparkle",
|
||||
"tough-seahorses-learn",
|
||||
"twelve-melons-notice",
|
||||
"unlucky-seas-sip",
|
||||
"warm-days-watch",
|
||||
"wild-weeks-live",
|
||||
"wise-ligers-scream",
|
||||
"yellow-lemons-march",
|
||||
"young-bugs-remember"
|
||||
"young-bugs-remember",
|
||||
"young-olives-cheer"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Fixed layout for core-components docs where table was broken by splitting with code sample
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
'@backstage/plugin-playlist-backend': minor
|
||||
---
|
||||
|
||||
**BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type.
|
||||
|
||||
For example, the `playlistConditions.isOwner` API has changed from:
|
||||
|
||||
```ts
|
||||
playlistConditions.isOwner(['user:default/me', 'group:default/owner']);
|
||||
```
|
||||
|
||||
to:
|
||||
|
||||
```ts
|
||||
playlistConditions.isOwner({
|
||||
owners: ['user:default/me', 'group:default/owner'],
|
||||
});
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-bazaar-backend': patch
|
||||
---
|
||||
|
||||
Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop.
|
||||
@@ -0,0 +1,99 @@
|
||||
---
|
||||
'@backstage/plugin-search-react': minor
|
||||
---
|
||||
|
||||
A `<SearchPagination />` component was created for limiting the number of results shown per search page. Use this new component to give users options to select how many search results they want to display per page. The default options are 10, 25, 50, 100.
|
||||
|
||||
See examples below:
|
||||
|
||||
_Basic_
|
||||
|
||||
```jsx
|
||||
import React, { useState } from 'react';
|
||||
import { Grid } from '@material-ui/core';
|
||||
import { Page, Header, Content, Lifecycle } from '@backstage/core-components';
|
||||
import {
|
||||
SearchBarBase,
|
||||
SearchPaginationBase,
|
||||
SearchResultList,
|
||||
} from '@backstage/plugin-search-react';
|
||||
|
||||
const SearchPage = () => {
|
||||
const [term, setTerm] = useState('');
|
||||
const [pageLimit, setPageLimit] = useState(25);
|
||||
const [pageCursor, setPageCursor] = useState<string>();
|
||||
|
||||
return (
|
||||
<Page themeId="home">
|
||||
<Header title="Search" subtitle={<Lifecycle alpha />} />
|
||||
<Content>
|
||||
<Grid container direction="row">
|
||||
<Grid item xs={12}>
|
||||
<SearchBarBase value={term} onChange={setTerm} />
|
||||
</Grid>
|
||||
<Grid item xs={12}>
|
||||
<SearchPaginationBase
|
||||
limit={pageLimit}
|
||||
onLimitChange={setPageLimit}
|
||||
cursor={pageCursor}
|
||||
onCursorChange={setPageCursor}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid item xs={12}>
|
||||
<SearchResultList query={{ term, pageLimit }} />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Content>
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
```
|
||||
|
||||
_With context_
|
||||
|
||||
```jsx
|
||||
import React from 'react';
|
||||
import { Grid } from '@material-ui/core';
|
||||
import { Page, Header, Content, Lifecycle } from '@backstage/core-components';
|
||||
import {
|
||||
SearchBar,
|
||||
SearchResult,
|
||||
SearchPagination,
|
||||
SearchResultListLayout,
|
||||
SearchContextProvider,
|
||||
DefaultResultListItem,
|
||||
} from '@backstage/plugin-search-react';
|
||||
|
||||
const SearchPage = () => (
|
||||
<SearchContextProvider>
|
||||
<Page themeId="home">
|
||||
<Header title="Search" subtitle={<Lifecycle alpha />} />
|
||||
<Content>
|
||||
<Grid container direction="row">
|
||||
<Grid item xs={12}>
|
||||
<SearchBar />
|
||||
</Grid>
|
||||
<Grid item xs={12}>
|
||||
<SearchPagination />
|
||||
</Grid>
|
||||
<Grid item xs={12}>
|
||||
<SearchResult>
|
||||
{({ results }) => (
|
||||
<SearchResultListLayout
|
||||
resultItems={results}
|
||||
renderResultItem={({ document }) => (
|
||||
<DefaultResultListItem
|
||||
key={document.location}
|
||||
result={document}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
</SearchResult>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Content>
|
||||
</Page>
|
||||
</SearchContextProvider>
|
||||
);
|
||||
```
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
'@backstage/plugin-adr-backend': patch
|
||||
'@backstage/plugin-search-backend-module-elasticsearch': patch
|
||||
'@backstage/plugin-search-backend-node': patch
|
||||
'@backstage/plugin-stack-overflow-backend': patch
|
||||
'@backstage/plugin-techdocs-backend': patch
|
||||
---
|
||||
|
||||
In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
---
|
||||
|
||||
The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the `PermissionRule` type. Note that all involved types are exported from `@backstage/plugin-catalog-backend/alpha`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Leverage cache mounts in Dockerfile during `yarn install ...` and `apt-get ...` commands to speed up repeated builds.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Add the new search pagination component to the search page template.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs-backend': minor
|
||||
---
|
||||
|
||||
Add optional `catalogClient` argument to `createRoute` parameters
|
||||
@@ -2,6 +2,7 @@ abc
|
||||
accessors
|
||||
addon
|
||||
addons
|
||||
ADRs
|
||||
Airbrake
|
||||
Airbrakes
|
||||
airbrake
|
||||
@@ -28,6 +29,7 @@ bool
|
||||
boolean
|
||||
builtins
|
||||
callout
|
||||
CDNs
|
||||
Chai
|
||||
changeset
|
||||
changesets
|
||||
@@ -68,6 +70,7 @@ dataflow
|
||||
dayjs
|
||||
debounce
|
||||
Debounce
|
||||
debuggability
|
||||
declaratively
|
||||
deduplicated
|
||||
deps
|
||||
@@ -129,6 +132,7 @@ hotspots
|
||||
http
|
||||
https
|
||||
Iain
|
||||
iLert
|
||||
img
|
||||
incentivised
|
||||
Indal
|
||||
@@ -139,6 +143,7 @@ JaCoCo
|
||||
JavaScript
|
||||
jenkins
|
||||
Jira
|
||||
JWTs
|
||||
jq
|
||||
js
|
||||
json
|
||||
@@ -147,6 +152,7 @@ jsx
|
||||
Kaewkasi
|
||||
Keyv
|
||||
Knex
|
||||
KPIs
|
||||
kubectl
|
||||
kubernetes
|
||||
kubernetes
|
||||
@@ -308,6 +314,7 @@ Superfences
|
||||
superset
|
||||
supertype
|
||||
storable
|
||||
SVGs
|
||||
talkdesk
|
||||
Talkdesk
|
||||
tasklist
|
||||
@@ -352,12 +359,15 @@ utils
|
||||
validator
|
||||
validators
|
||||
varchar
|
||||
VPCs
|
||||
VSCode
|
||||
Wayfair
|
||||
Weaveworks
|
||||
Webpack
|
||||
winston
|
||||
www
|
||||
WWW
|
||||
XCMetrics
|
||||
XML
|
||||
xyz
|
||||
yaml
|
||||
|
||||
@@ -13,6 +13,9 @@ jobs:
|
||||
matrix:
|
||||
node-version: [14.x]
|
||||
|
||||
env:
|
||||
NODE_OPTIONS: --max-old-space-size=4096
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
|
||||
| [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. |
|
||||
| [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. |
|
||||
| [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. |
|
||||
| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com), [@ajbw](https://github.com/ajbw) | EG Common Developer Toolkit |
|
||||
| [Expedia Group](https://www.expediagroup.com) | [@gman0922](https://github.com/gman0922), [Sheena Sharma](mailto:shesharma@expediagroup.com), [Alekhya Karuturi](mailto:akaruturi@expediagroup.com) | EG Developer Front Door |
|
||||
| [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go |
|
||||
| [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling |
|
||||
| [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. |
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 132 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 40 KiB |
@@ -23,6 +23,17 @@ Each package is searched for a schema at a single point of entry, a top-level
|
||||
inlined JSON schema, or a relative path to a schema file. Supported schema file
|
||||
formats are `.json` or `.d.ts`.
|
||||
|
||||
```jsonc title="package.json"
|
||||
{
|
||||
// ...
|
||||
"files": [
|
||||
// ...
|
||||
"config.d.ts"
|
||||
],
|
||||
"configSchema": "config.d.ts"
|
||||
}
|
||||
```
|
||||
|
||||
> When defining a schema file, be sure to include the file in your
|
||||
> `package.json` > `"files"` field as well!
|
||||
|
||||
|
||||
+33
-19
@@ -61,9 +61,10 @@ FROM node:16-bullseye-slim
|
||||
|
||||
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
|
||||
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
|
||||
RUN apt-get update && \
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
yarn config set python /usr/bin/python3
|
||||
|
||||
# From here on we use the least-privileged `node` user to run the backend.
|
||||
@@ -79,7 +80,8 @@ ENV NODE_ENV production
|
||||
COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
|
||||
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
|
||||
|
||||
RUN yarn install --frozen-lockfile --production --network-timeout 300000 && rm -rf "$(yarn cache dir)"
|
||||
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
|
||||
yarn install --frozen-lockfile --production --network-timeout 300000
|
||||
|
||||
# Then copy the rest of the backend bundle, along with any other files we might want.
|
||||
COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./
|
||||
@@ -163,53 +165,64 @@ RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf {
|
||||
# Stage 2 - Install dependencies and build packages
|
||||
FROM node:16-bullseye-slim AS build
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=packages /app .
|
||||
|
||||
# install sqlite3 dependencies
|
||||
RUN apt-get update && \
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
|
||||
yarn config set python /usr/bin/python3
|
||||
|
||||
RUN yarn install --frozen-lockfile --network-timeout 600000 && rm -rf "$(yarn cache dir)"
|
||||
USER node
|
||||
WORKDIR /app
|
||||
|
||||
COPY . .
|
||||
COPY --from=packages --chown=node:node /app .
|
||||
|
||||
# Stop cypress from downloading it's massive binary.
|
||||
ENV CYPRESS_INSTALL_BINARY=0
|
||||
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
|
||||
yarn install --frozen-lockfile --network-timeout 600000
|
||||
|
||||
COPY --chown=node:node . .
|
||||
|
||||
RUN yarn tsc
|
||||
RUN yarn --cwd packages/backend build
|
||||
# If you have not yet migrated to package roles, use the following command instead:
|
||||
# RUN yarn --cwd packages/backend backstage-cli backend:bundle --build-dependencies
|
||||
|
||||
RUN mkdir packages/backend/dist/skeleton packages/backend/dist/bundle \
|
||||
&& tar xzf packages/backend/dist/skeleton.tar.gz -C packages/backend/dist/skeleton \
|
||||
&& tar xzf packages/backend/dist/bundle.tar.gz -C packages/backend/dist/bundle
|
||||
|
||||
# Stage 3 - Build the actual backend image and install production dependencies
|
||||
FROM node:16-bullseye-slim
|
||||
|
||||
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
|
||||
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
|
||||
RUN apt-get update && \
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
yarn config set python /usr/bin/python3
|
||||
|
||||
# From here on we use the least-privileged `node` user to run the backend.
|
||||
USER node
|
||||
WORKDIR /app
|
||||
|
||||
# This switches many Node.js dependencies to production mode.
|
||||
ENV NODE_ENV production
|
||||
|
||||
# Copy the install dependencies from the build stage and context
|
||||
COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton.tar.gz ./
|
||||
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
|
||||
COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton/ ./
|
||||
|
||||
RUN yarn install --frozen-lockfile --production --network-timeout 600000 && rm -rf "$(yarn cache dir)"
|
||||
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
|
||||
yarn install --frozen-lockfile --production --network-timeout 600000
|
||||
|
||||
# Copy the built packages from the build stage
|
||||
COPY --from=build --chown=node:node /app/packages/backend/dist/bundle.tar.gz .
|
||||
RUN tar xzf bundle.tar.gz && rm bundle.tar.gz
|
||||
COPY --from=build --chown=node:node /app/packages/backend/dist/bundle/ ./
|
||||
|
||||
# Copy any other files that we need at runtime
|
||||
COPY --chown=node:node app-config.yaml ./
|
||||
|
||||
# This switches many Node.js dependencies to production mode.
|
||||
ENV NODE_ENV production
|
||||
|
||||
CMD ["node", "packages/backend", "--config", "app-config.yaml"]
|
||||
```
|
||||
|
||||
@@ -225,6 +238,7 @@ however ignore any existing build output or dependencies on the host. For our
|
||||
new `.dockerignore`, replace the contents of your existing one with this:
|
||||
|
||||
```text
|
||||
dist-types
|
||||
node_modules
|
||||
packages/*/dist
|
||||
packages/*/node_modules
|
||||
|
||||
@@ -62,7 +62,7 @@ This is an array used to determine where to retrieve cluster configuration from.
|
||||
Valid cluster locator methods are:
|
||||
|
||||
- [`catalog`](#catalog)
|
||||
- [`localKubectlProxy`](#localKubectlProxy)
|
||||
- [`localKubectlProxy`](#localkubectlproxy)
|
||||
- [`config`](#config)
|
||||
- [`gke`](#gke)
|
||||
- [custom `KubernetesClustersSupplier`](#custom-kubernetesclusterssupplier)
|
||||
|
||||
@@ -123,7 +123,7 @@ will set the available actions that the scaffolder has access to.
|
||||
```ts
|
||||
import { createBuiltinActions } from '@backstage/plugin-scaffolder-backend';
|
||||
import { ScmIntegrations } from '@backstage/integration';
|
||||
import { createNewFileAction } from './actions/custom';
|
||||
import { createNewFileAction } from './scaffolder/actions/custom';
|
||||
|
||||
export default async function createPlugin(
|
||||
env: PluginEnvironment,
|
||||
|
||||
@@ -51,14 +51,10 @@ create a subdirectory inside your current working directory.
|
||||
npx @backstage/create-app
|
||||
```
|
||||
|
||||
The wizard will ask you
|
||||
|
||||
- The name of the app, which will also be the name of the directory
|
||||
- The database type to use for the backend. For this guide, you'll be using the
|
||||
SQLite option.
|
||||
The wizard will ask you for the name of the app, which will also be the name of the directory
|
||||
|
||||
<p align='center'>
|
||||
<img src='../assets/getting-started/wizard.png' alt='Screenshot of the wizard asking for a name for the app, and a selection menu for the database.' />
|
||||
<img src='../assets/getting-started/wizard.png' alt='Screenshot of the wizard asking for a name for the app.' />
|
||||
</p>
|
||||
|
||||
### Run the Backstage app
|
||||
|
||||
@@ -39,10 +39,13 @@ And then add the entity provider to your catalog builder:
|
||||
+ builder.addEntityProvider(
|
||||
+ GitHubEntityProvider.fromConfig(env.config, {
|
||||
+ logger: env.logger,
|
||||
+ // optional: alternatively, use scheduler with schedule defined in app-config.yaml
|
||||
+ schedule: env.scheduler.createScheduledTaskRunner({
|
||||
+ frequency: { minutes: 30 },
|
||||
+ timeout: { minutes: 3 },
|
||||
+ }),
|
||||
+ // optional: alternatively, use schedule
|
||||
+ scheduler: env.scheduler,
|
||||
+ }),
|
||||
+ );
|
||||
|
||||
@@ -68,6 +71,11 @@ catalog:
|
||||
filters:
|
||||
branch: 'main' # string
|
||||
repository: '.*' # Regex
|
||||
schedule: # optional; same options as in TaskScheduleDefinition
|
||||
# supports cron, ISO duration, "human duration" as used in code
|
||||
frequency: { minutes: 30 }
|
||||
# supports ISO duration, "human duration" as used in code
|
||||
timeout: { minutes: 3 }
|
||||
customProviderId:
|
||||
organization: 'new-org' # string
|
||||
catalogPath: '/custom/path/catalog-info.yaml' # string
|
||||
@@ -111,26 +119,35 @@ This provider supports multiple organizations via unique provider IDs.
|
||||
Default: `/catalog-info.yaml`.
|
||||
Path where to look for `catalog-info.yaml` files.
|
||||
You can use wildcards - `*` or `**` - to search the path and/or the filename
|
||||
- **filters** _(optional)_:
|
||||
- **branch** _(optional)_:
|
||||
- **`filters`** _(optional)_:
|
||||
- **`branch`** _(optional)_:
|
||||
String used to filter results based on the branch name.
|
||||
- **repository** _(optional)_:
|
||||
- **`repository`** _(optional)_:
|
||||
Regular expression used to filter results based on the repository name.
|
||||
- **topic** _(optional)_:
|
||||
- **`topic`** _(optional)_:
|
||||
Both of the filters below may be used at the same time but the exclusion filter has the highest priority.
|
||||
In the example above, a repository with the `backstage-include` topic would still be excluded
|
||||
if it were also carrying the `experiments` topic.
|
||||
- **include** _(optional)_:
|
||||
- **`include`** _(optional)_:
|
||||
An array of strings used to filter in results based on their associated GitHub topics.
|
||||
If configured, only repositories with one (or more) topic(s) present in the inclusion filter will be ingested
|
||||
- **exclude** _(optional)_:
|
||||
- **`exclude`** _(optional)_:
|
||||
An array of strings used to filter out results based on their associated GitHub topics.
|
||||
If configured, all repositories _except_ those with one (or more) topics(s) present in the exclusion filter will be ingested.
|
||||
- **organization**:
|
||||
- **`host`** _(optional)_:
|
||||
The hostname of your GitHub Enterprise instance. It must match a host defined in [integrations.github](locations.md).
|
||||
- **`organization`**:
|
||||
Name of your organization account/workspace.
|
||||
If you want to add multiple organizations, you need to add one provider config each.
|
||||
- **host** _(optional)_:
|
||||
The hostname of your GitHub Enterprise instance. It must match a host defined in [integrations.github](locations.md).
|
||||
- **`schedule`** _(optional)_:
|
||||
- **`frequency`**:
|
||||
How often you want the task to run. The system does its best to avoid overlapping invocations.
|
||||
- **`timeout`**:
|
||||
The maximum amount of time that a single task invocation can take.
|
||||
- **`initialDelay`** _(optional)_:
|
||||
The amount of time that should pass before the first invocation happens.
|
||||
- **`scope`** _(optional)_:
|
||||
`'global'` or `'local'`. Sets the scope of concurrency control.
|
||||
|
||||
## GitHub API Rate Limits
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ export const isInSystemRule = createCatalogPermissionRule({
|
||||
},
|
||||
toQuery: (systemRef: string) => ({
|
||||
key: 'relations.partOf',
|
||||
value: systemRef,
|
||||
values: [systemRef],
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -72,6 +72,12 @@ backend:
|
||||
+ port: ${POSTGRES_PORT}
|
||||
+ user: ${POSTGRES_USER}
|
||||
+ password: ${POSTGRES_PASSWORD}
|
||||
+ # https://node-postgres.com/features/ssl
|
||||
+ # you can set the sslmode configuration option via the `PGSSLMODE` environment variable
|
||||
+ # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require)
|
||||
+ # ssl:
|
||||
+ # ca: # if you have a CA file and want to verify it you can uncomment this section
|
||||
+ # $file: <file-path>/ca/server.crt
|
||||
+ # Refer to Tarn docs for default values on PostgreSQL pool configuration - https://github.com/Vincit/tarn.js
|
||||
+ knexConfig:
|
||||
+ pool:
|
||||
@@ -79,12 +85,6 @@ backend:
|
||||
+ max: 12
|
||||
+ acquireTimeoutMillis: 60000
|
||||
+ idleTimeoutMillis: 60000
|
||||
+ # https://node-postgres.com/features/ssl
|
||||
+ # you can set the sslmode configuration option via the `PGSSLMODE` environment variable
|
||||
+ # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require)
|
||||
+ # ssl:
|
||||
+ # ca: # if you have a CA file and want to verify it you can uncomment this section
|
||||
+ # $file: <file-path>/ca/server.crt
|
||||
```
|
||||
|
||||
### Using a single database
|
||||
|
||||
@@ -67,6 +67,13 @@ COPY .yarn ./.yarn
|
||||
COPY .yarnrc.yml ./
|
||||
```
|
||||
|
||||
In a multi-stage `Dockerfile`, each stage that runs a `yarn` command will also need the Yarn 3 installation. For example, in the final stage you may need to add the following:
|
||||
|
||||
```Dockerfile
|
||||
COPY --from=build --chown=node:node /app/.yarn ./.yarn
|
||||
COPY --from=build --chown=node:node /app/.yarnrc.yml ./
|
||||
```
|
||||
|
||||
The `--production` flag to `yarn install` has been removed in Yarn 3, instead you need to use `yarn workspaces focus --all --production` to avoid installing development dependencies in your production deployment. A tradeoff of this is that `yarn workspaces focus` does not support the `--immutable` flag.
|
||||
|
||||
```Dockerfile
|
||||
|
||||
@@ -226,6 +226,7 @@
|
||||
"plugins/composability",
|
||||
"plugins/customization",
|
||||
"plugins/analytics",
|
||||
"plugins/feature-flags",
|
||||
{
|
||||
"type": "subcategory",
|
||||
"label": "Backends and APIs",
|
||||
|
||||
+3
-2
@@ -11,7 +11,7 @@
|
||||
"build": "backstage-cli repo build --all",
|
||||
"build:api-reports": "yarn build:api-reports:only --tsc",
|
||||
"build:api-reports:only": "ts-node -T -P scripts/tsconfig.json scripts/api-extractor.ts",
|
||||
"build:api-docs": "yarn build:api-reports --docs",
|
||||
"build:api-docs": "LANG=en_EN yarn build:api-reports --docs",
|
||||
"tsc": "tsc",
|
||||
"tsc:full": "backstage-cli repo clean && tsc --skipLibCheck false --incremental false",
|
||||
"clean": "backstage-cli repo clean",
|
||||
@@ -44,8 +44,9 @@
|
||||
"@types/react": "^17",
|
||||
"@types/react-dom": "^17"
|
||||
},
|
||||
"version": "1.7.0-next.1",
|
||||
"version": "1.7.0-next.2",
|
||||
"dependencies": {
|
||||
"@backstage/errors": "workspace:^",
|
||||
"@manypkg/get-packages": "^1.1.3",
|
||||
"@microsoft/api-documenter": "^7.17.11",
|
||||
"@microsoft/api-extractor": "^7.23.0",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/app-defaults
|
||||
|
||||
## 1.0.7-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-permission-react@0.4.6-next.2
|
||||
- @backstage/core-app-api@1.1.1-next.2
|
||||
- @backstage/core-components@0.11.2-next.2
|
||||
- @backstage/core-plugin-api@1.0.7-next.2
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 1.0.7-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/app-defaults",
|
||||
"description": "Provides the default wiring of a Backstage App",
|
||||
"version": "1.0.7-next.1",
|
||||
"version": "1.0.7-next.2",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.esm.js",
|
||||
|
||||
@@ -1,5 +1,67 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.76-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder@1.7.0-next.2
|
||||
- @backstage/plugin-catalog-common@1.0.7-next.2
|
||||
- @backstage/plugin-catalog-import@0.9.0-next.2
|
||||
- @backstage/cli@0.20.0-next.2
|
||||
- @backstage/plugin-catalog-react@1.2.0-next.2
|
||||
- @backstage/plugin-playlist@0.1.1-next.2
|
||||
- @backstage/plugin-permission-react@0.4.6-next.2
|
||||
- @backstage/plugin-search-common@1.1.0-next.2
|
||||
- @backstage/app-defaults@1.0.7-next.2
|
||||
- @backstage/catalog-model@1.1.2-next.2
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/core-app-api@1.1.1-next.2
|
||||
- @backstage/core-components@0.11.2-next.2
|
||||
- @backstage/core-plugin-api@1.0.7-next.2
|
||||
- @backstage/integration-react@1.1.5-next.2
|
||||
- @backstage/theme@0.2.16
|
||||
- @backstage/plugin-airbrake@0.3.10-next.2
|
||||
- @backstage/plugin-apache-airflow@0.2.3-next.2
|
||||
- @backstage/plugin-api-docs@0.8.10-next.2
|
||||
- @backstage/plugin-azure-devops@0.2.1-next.2
|
||||
- @backstage/plugin-badges@0.2.34-next.2
|
||||
- @backstage/plugin-catalog-graph@0.2.22-next.2
|
||||
- @backstage/plugin-circleci@0.3.10-next.2
|
||||
- @backstage/plugin-cloudbuild@0.3.10-next.2
|
||||
- @backstage/plugin-code-coverage@0.2.3-next.2
|
||||
- @backstage/plugin-cost-insights@0.11.32-next.2
|
||||
- @backstage/plugin-dynatrace@1.0.0-next.2
|
||||
- @backstage/plugin-explore@0.3.41-next.2
|
||||
- @backstage/plugin-gcalendar@0.3.6-next.2
|
||||
- @backstage/plugin-gcp-projects@0.3.29-next.2
|
||||
- @backstage/plugin-github-actions@0.5.10-next.2
|
||||
- @backstage/plugin-gocd@0.1.16-next.2
|
||||
- @backstage/plugin-graphiql@0.2.42-next.2
|
||||
- @backstage/plugin-home@0.4.26-next.2
|
||||
- @backstage/plugin-jenkins@0.7.9-next.2
|
||||
- @backstage/plugin-kafka@0.3.10-next.2
|
||||
- @backstage/plugin-kubernetes@0.7.3-next.2
|
||||
- @backstage/plugin-lighthouse@0.3.10-next.2
|
||||
- @backstage/plugin-newrelic@0.3.28-next.2
|
||||
- @backstage/plugin-newrelic-dashboard@0.2.3-next.2
|
||||
- @backstage/plugin-org@0.5.10-next.2
|
||||
- @backstage/plugin-pagerduty@0.5.3-next.2
|
||||
- @backstage/plugin-rollbar@0.4.10-next.2
|
||||
- @backstage/plugin-search@1.0.3-next.2
|
||||
- @backstage/plugin-search-react@1.2.0-next.2
|
||||
- @backstage/plugin-sentry@0.4.3-next.2
|
||||
- @backstage/plugin-shortcuts@0.3.2-next.2
|
||||
- @backstage/plugin-stack-overflow@0.1.6-next.2
|
||||
- @backstage/plugin-tech-insights@0.3.1-next.2
|
||||
- @backstage/plugin-tech-radar@0.5.17-next.2
|
||||
- @backstage/plugin-techdocs@1.3.3-next.2
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.0.5-next.2
|
||||
- @backstage/plugin-techdocs-react@1.0.5-next.2
|
||||
- @backstage/plugin-todo@0.2.12-next.2
|
||||
- @backstage/plugin-user-settings@0.5.0-next.2
|
||||
- @internal/plugin-catalog-customized@0.0.3-next.2
|
||||
|
||||
## 0.2.76-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.76-next.1",
|
||||
"version": "0.2.76-next.2",
|
||||
"private": true,
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
@@ -84,7 +84,6 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/test-utils": "workspace:^",
|
||||
"@rjsf/core": "^3.2.1",
|
||||
"@testing-library/cypress": "^8.0.2",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^12.1.3",
|
||||
|
||||
@@ -35,6 +35,7 @@ import {
|
||||
SearchBar,
|
||||
SearchFilter,
|
||||
SearchResult,
|
||||
SearchPagination,
|
||||
SearchResultPager,
|
||||
useSearch,
|
||||
} from '@backstage/plugin-search-react';
|
||||
@@ -129,6 +130,7 @@ const SearchPage = () => {
|
||||
</Grid>
|
||||
)}
|
||||
<Grid item xs>
|
||||
<SearchPagination />
|
||||
<SearchResult>
|
||||
{({ results }) => (
|
||||
<List>
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/backend-app-api
|
||||
|
||||
## 0.2.2-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-tasks@0.3.6-next.2
|
||||
- @backstage/backend-common@0.15.2-next.2
|
||||
- @backstage/plugin-permission-node@0.7.0-next.2
|
||||
- @backstage/backend-plugin-api@0.1.3-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
|
||||
## 0.2.2-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-app-api",
|
||||
"description": "Core API used by Backstage backend apps",
|
||||
"version": "0.2.2-next.1",
|
||||
"version": "0.2.2-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/backend-common
|
||||
|
||||
## 0.15.2-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- c44cf412de: Fix BitBucket server integration
|
||||
- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md`
|
||||
- Updated dependencies
|
||||
- @backstage/cli-common@0.1.10
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/config-loader@1.1.5-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
- @backstage/integration@1.3.2-next.2
|
||||
- @backstage/types@1.0.0
|
||||
|
||||
## 0.15.2-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-common",
|
||||
"description": "Common functionality library for Backstage backends",
|
||||
"version": "0.15.2-next.1",
|
||||
"version": "0.15.2-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -83,11 +83,23 @@ describe('BitbucketServerUrlReader', () => {
|
||||
),
|
||||
),
|
||||
rest.get(
|
||||
'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/commits/*',
|
||||
'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/branches',
|
||||
(_, res, ctx) =>
|
||||
res(
|
||||
ctx.status(200),
|
||||
ctx.json({ id: '12ab34cd56ef78gh90ij12kl34mn56op78qr90st' }),
|
||||
ctx.json({
|
||||
size: 2,
|
||||
values: [
|
||||
{
|
||||
displayId: 'some-branch-that-should-be-ignored',
|
||||
latestCommit: 'bogus hash',
|
||||
},
|
||||
{
|
||||
displayId: 'some-branch',
|
||||
latestCommit: '12ab34cd56ef78gh90ij12kl34mn56op78qr90st',
|
||||
},
|
||||
],
|
||||
}),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -130,12 +142,22 @@ describe('BitbucketServerUrlReader', () => {
|
||||
),
|
||||
),
|
||||
rest.get(
|
||||
'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/commits/*',
|
||||
'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/branches',
|
||||
(_, res, ctx) =>
|
||||
res(
|
||||
ctx.status(200),
|
||||
ctx.json({
|
||||
values: [{ id: '12ab34cd56ef78gh90ij12kl34mn56op78qr90st' }],
|
||||
size: 2,
|
||||
values: [
|
||||
{
|
||||
displayId: 'some-branch-that-should-be-ignored',
|
||||
latestCommit: 'bogus hash',
|
||||
},
|
||||
{
|
||||
displayId: 'some-branch',
|
||||
latestCommit: '12ab34cd56ef78gh90ij12kl34mn56op78qr90st',
|
||||
},
|
||||
],
|
||||
}),
|
||||
),
|
||||
),
|
||||
@@ -179,11 +201,23 @@ describe('BitbucketServerUrlReader', () => {
|
||||
),
|
||||
),
|
||||
rest.get(
|
||||
'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/commits/*',
|
||||
'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/branches',
|
||||
(_, res, ctx) =>
|
||||
res(
|
||||
ctx.status(200),
|
||||
ctx.json({ id: '12ab34cd56ef78gh90ij12kl34mn56op78qr90st' }),
|
||||
ctx.json({
|
||||
size: 2,
|
||||
values: [
|
||||
{
|
||||
displayId: 'master-of-none',
|
||||
latestCommit: 'bogus hash',
|
||||
},
|
||||
{
|
||||
displayId: 'master',
|
||||
latestCommit: '12ab34cd56ef78gh90ij12kl34mn56op78qr90st',
|
||||
},
|
||||
],
|
||||
}),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -188,38 +188,36 @@ export class BitbucketServerUrlReader implements UrlReader {
|
||||
private async getLastCommitShortHash(url: string): Promise<string> {
|
||||
const { name: repoName, owner: project, ref: branch } = parseGitUrl(url);
|
||||
|
||||
// Bitbucket Server https://docs.atlassian.com/bitbucket-server/rest/7.9.0/bitbucket-rest.html#idp224
|
||||
const commitApiUrl = `${this.integration.config.apiBaseUrl}/projects/${project}/repos/${repoName}/commits/${branch}`;
|
||||
const branchListUrl = `${
|
||||
this.integration.config.apiBaseUrl
|
||||
}/projects/${project}/repos/${repoName}/branches?filterText=${encodeURIComponent(
|
||||
branch,
|
||||
)}`;
|
||||
|
||||
const commitResponse = await fetch(
|
||||
commitApiUrl,
|
||||
const branchListResponse = await fetch(
|
||||
branchListUrl,
|
||||
getBitbucketServerRequestOptions(this.integration.config),
|
||||
);
|
||||
if (!commitResponse.ok) {
|
||||
const message = `Failed to retrieve commits from ${commitApiUrl}, ${commitResponse.status} ${commitResponse.statusText}`;
|
||||
if (commitResponse.status === 404) {
|
||||
if (!branchListResponse.ok) {
|
||||
const message = `Failed to retrieve branch list from ${branchListUrl}, ${branchListResponse.status} ${branchListResponse.statusText}`;
|
||||
if (branchListResponse.status === 404) {
|
||||
throw new NotFoundError(message);
|
||||
}
|
||||
throw new Error(message);
|
||||
}
|
||||
|
||||
const commits = await commitResponse.json();
|
||||
const branchMatches = await branchListResponse.json();
|
||||
|
||||
// Handles case when a branch is provided in the URL
|
||||
if (commits && commits.id) {
|
||||
return commits.id.substring(0, 12);
|
||||
if (branchMatches && branchMatches.size > 0) {
|
||||
const exactBranchMatch = branchMatches.values.filter(
|
||||
(branchDetails: { displayId: string }) =>
|
||||
branchDetails.displayId === branch,
|
||||
)[0];
|
||||
return exactBranchMatch.latestCommit.substring(0, 12);
|
||||
}
|
||||
|
||||
// Handles case when no branch is provided in the URL
|
||||
if (
|
||||
commits &&
|
||||
commits.values &&
|
||||
commits.values.length > 0 &&
|
||||
commits.values[0].id
|
||||
) {
|
||||
return commits.values[0].id.substring(0, 12);
|
||||
}
|
||||
|
||||
throw new Error(`Failed to read response from ${commitApiUrl}`);
|
||||
throw new Error(
|
||||
`Failed to find branch "${branch}" in property "displayId" of response to ${branchListUrl}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/backend-defaults
|
||||
|
||||
## 0.1.2-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-app-api@0.2.2-next.2
|
||||
- @backstage/backend-plugin-api@0.1.3-next.2
|
||||
|
||||
## 0.1.2-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-defaults",
|
||||
"description": "Backend defaults used by Backstage backend apps",
|
||||
"version": "0.1.2-next.1",
|
||||
"version": "0.1.2-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# example-backend-next
|
||||
|
||||
## 0.0.4-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.5.0-next.2
|
||||
- @backstage/plugin-scaffolder-backend@1.7.0-next.2
|
||||
- @backstage/plugin-app-backend@0.3.37-next.2
|
||||
- @backstage/backend-defaults@0.1.2-next.2
|
||||
|
||||
## 0.0.4-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend-next",
|
||||
"version": "0.0.4-next.1",
|
||||
"version": "0.0.4-next.2",
|
||||
"main": "dist/index.cjs.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/backend-plugin-api
|
||||
|
||||
## 0.1.3-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-tasks@0.3.6-next.2
|
||||
- @backstage/backend-common@0.15.2-next.2
|
||||
- @backstage/plugin-permission-common@0.7.0-next.2
|
||||
- @backstage/config@1.0.3-next.2
|
||||
|
||||
## 0.1.3-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-plugin-api",
|
||||
"description": "Core API used by Backstage backend plugins",
|
||||
"version": "0.1.3-next.1",
|
||||
"version": "0.1.3-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/backend-tasks
|
||||
|
||||
## 0.3.6-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d4fea86ea3: Added new function `readTaskScheduleDefinitionFromConfig` to read `TaskScheduleDefinition` (aka. schedule) from the `Config`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.15.2-next.2
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
- @backstage/types@1.0.0
|
||||
|
||||
## 0.3.6-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-tasks",
|
||||
"description": "Common distributed task management library for Backstage backends",
|
||||
"version": "0.3.6-next.1",
|
||||
"version": "0.3.6-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/backend-test-utils
|
||||
|
||||
## 0.1.29-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.15.2-next.2
|
||||
- @backstage/cli@0.20.0-next.2
|
||||
- @backstage/backend-app-api@0.2.2-next.2
|
||||
- @backstage/backend-plugin-api@0.1.3-next.2
|
||||
- @backstage/config@1.0.3-next.2
|
||||
|
||||
## 0.1.29-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-test-utils",
|
||||
"description": "Test helpers library for Backstage backends",
|
||||
"version": "0.1.29-next.1",
|
||||
"version": "0.1.29-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,47 @@
|
||||
# example-backend
|
||||
|
||||
## 0.2.76-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.5.0-next.2
|
||||
- @backstage/backend-tasks@0.3.6-next.2
|
||||
- @backstage/backend-common@0.15.2-next.2
|
||||
- @backstage/plugin-permission-common@0.7.0-next.2
|
||||
- @backstage/plugin-permission-node@0.7.0-next.2
|
||||
- @backstage/plugin-scaffolder-backend@1.7.0-next.2
|
||||
- @backstage/plugin-playlist-backend@0.2.0-next.2
|
||||
- @backstage/plugin-badges-backend@0.1.31-next.2
|
||||
- @backstage/plugin-graphql-backend@0.1.27-next.2
|
||||
- @backstage/plugin-permission-backend@0.5.12-next.2
|
||||
- @backstage/plugin-rollbar-backend@0.1.34-next.2
|
||||
- @backstage/plugin-search-backend@1.1.0-next.2
|
||||
- @backstage/plugin-tech-insights-backend@0.5.3-next.2
|
||||
- @backstage/plugin-techdocs-backend@1.4.0-next.2
|
||||
- example-app@0.2.76-next.2
|
||||
- @backstage/plugin-search-backend-node@1.0.3-next.2
|
||||
- @backstage/plugin-tech-insights-node@0.3.5-next.2
|
||||
- @backstage/plugin-app-backend@0.3.37-next.2
|
||||
- @backstage/plugin-auth-backend@0.17.0-next.2
|
||||
- @backstage/plugin-auth-node@0.2.6-next.2
|
||||
- @backstage/plugin-azure-devops-backend@0.3.16-next.2
|
||||
- @backstage/plugin-code-coverage-backend@0.2.3-next.2
|
||||
- @backstage/plugin-jenkins-backend@0.1.27-next.2
|
||||
- @backstage/plugin-kafka-backend@0.2.30-next.2
|
||||
- @backstage/plugin-kubernetes-backend@0.7.3-next.2
|
||||
- @backstage/plugin-proxy-backend@0.2.31-next.2
|
||||
- @backstage/plugin-scaffolder-backend-module-rails@0.4.5-next.2
|
||||
- @backstage/plugin-search-backend-module-elasticsearch@1.0.3-next.2
|
||||
- @backstage/plugin-search-backend-module-pg@0.4.1-next.2
|
||||
- @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21-next.2
|
||||
- @backstage/plugin-todo-backend@0.1.34-next.2
|
||||
- @backstage/plugin-search-common@1.1.0-next.2
|
||||
- @backstage/catalog-client@1.1.1-next.2
|
||||
- @backstage/catalog-model@1.1.2-next.2
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/integration@1.3.2-next.2
|
||||
|
||||
## 0.2.76-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -13,9 +13,10 @@ FROM node:16-bullseye-slim
|
||||
|
||||
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
|
||||
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
|
||||
RUN apt-get update && \
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
yarn config set python /usr/bin/python3
|
||||
|
||||
# From here on we use the least-privileged `node` user to run the backend.
|
||||
@@ -38,7 +39,8 @@ COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar
|
||||
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
|
||||
|
||||
# Note that this install is not immutable, which is one of the reasons we don't recommend Yarn 3 yet
|
||||
RUN yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"
|
||||
RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,sharing=locked,uid=1000,gid=1000 \
|
||||
yarn workspaces focus --all --production
|
||||
|
||||
# Then copy the rest of the backend bundle, along with any other files we might want.
|
||||
COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend",
|
||||
"version": "0.2.76-next.1",
|
||||
"version": "0.2.76-next.2",
|
||||
"main": "dist/index.cjs.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/catalog-client
|
||||
|
||||
## 1.1.1-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-model@1.1.2-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
|
||||
## 1.1.1-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/catalog-client",
|
||||
"description": "An isomorphic client for the catalog backend",
|
||||
"version": "1.1.1-next.1",
|
||||
"version": "1.1.1-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/catalog-model
|
||||
|
||||
## 1.1.2-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
- @backstage/types@1.0.0
|
||||
|
||||
## 1.1.2-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/catalog-model",
|
||||
"description": "Types and validators that help describe the model of a Backstage Catalog",
|
||||
"version": "1.1.2-next.1",
|
||||
"version": "1.1.2-next.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/cli
|
||||
|
||||
## 0.20.0-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md`
|
||||
- Updated dependencies
|
||||
- @backstage/cli-common@0.1.10
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/config-loader@1.1.5-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
- @backstage/release-manifests@0.0.6
|
||||
- @backstage/types@1.0.0
|
||||
|
||||
## 0.20.0-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/cli",
|
||||
"description": "CLI for developing Backstage plugins and apps",
|
||||
"version": "0.20.0-next.1",
|
||||
"version": "0.20.0-next.2",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @backstage/codemods
|
||||
|
||||
## 0.1.40-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/cli-common@0.1.10
|
||||
|
||||
## 0.1.40-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/codemods",
|
||||
"description": "A collection of codemods for Backstage projects",
|
||||
"version": "0.1.40-next.1",
|
||||
"version": "0.1.40-next.2",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.cjs.js"
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/config-loader
|
||||
|
||||
## 1.1.5-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/cli-common@0.1.10
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
- @backstage/types@1.0.0
|
||||
|
||||
## 1.1.5-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/config-loader",
|
||||
"description": "Config loading functionality used by Backstage backend, and CLI",
|
||||
"version": "1.1.5-next.1",
|
||||
"version": "1.1.5-next.2",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.cjs.js",
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @backstage/config
|
||||
|
||||
## 1.0.3-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/types@1.0.0
|
||||
|
||||
## 1.0.3-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/config",
|
||||
"description": "Config API used by Backstage core, backend, and CLI",
|
||||
"version": "1.0.3-next.1",
|
||||
"version": "1.0.3-next.2",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.cjs.js",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/core-app-api
|
||||
|
||||
## 1.1.1-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/core-plugin-api@1.0.7-next.2
|
||||
- @backstage/types@1.0.0
|
||||
- @backstage/version-bridge@1.0.1
|
||||
|
||||
## 1.1.1-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/core-app-api",
|
||||
"description": "Core app API used by Backstage apps",
|
||||
"version": "1.1.1-next.1",
|
||||
"version": "1.1.1-next.2",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.esm.js",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/core-components
|
||||
|
||||
## 0.11.2-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/config@1.0.3-next.2
|
||||
- @backstage/core-plugin-api@1.0.7-next.2
|
||||
- @backstage/errors@1.1.2-next.2
|
||||
- @backstage/theme@0.2.16
|
||||
- @backstage/version-bridge@1.0.1
|
||||
|
||||
## 0.11.2-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -242,6 +242,7 @@ export interface DependencyGraphProps<NodeData, EdgeData>
|
||||
acyclicer?: 'greedy';
|
||||
// Warning: (ae-unresolved-link) The @link reference could not be resolved: This type of declaration is not supported yet by the resolver
|
||||
align?: Alignment;
|
||||
curve?: 'curveStepBefore' | 'curveMonotoneX';
|
||||
defs?: SVGDefsElement | SVGDefsElement[];
|
||||
// Warning: (ae-unresolved-link) The @link reference could not be resolved: This type of declaration is not supported yet by the resolver
|
||||
direction?: Direction;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/core-components",
|
||||
"description": "Core components used by Backstage plugins and apps",
|
||||
"version": "0.11.2-next.1",
|
||||
"version": "0.11.2-next.2",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.esm.js",
|
||||
|
||||
@@ -162,6 +162,14 @@ export interface DependencyGraphProps<NodeData, EdgeData>
|
||||
* Default: `enabled`
|
||||
*/
|
||||
zoom?: 'enabled' | 'disabled' | 'enable-on-click';
|
||||
/**
|
||||
* A factory for curve generators addressing both lines and areas.
|
||||
*
|
||||
* @remarks
|
||||
*
|
||||
* Default: 'curveMonotoneX'
|
||||
*/
|
||||
curve?: 'curveStepBefore' | 'curveMonotoneX';
|
||||
}
|
||||
|
||||
const WORKSPACE_ID = 'workspace';
|
||||
@@ -194,6 +202,7 @@ export function DependencyGraph<NodeData, EdgeData>(
|
||||
renderLabel,
|
||||
defs,
|
||||
zoom = 'enabled',
|
||||
curve = 'curveMonotoneX',
|
||||
...svgProps
|
||||
} = props;
|
||||
const theme: BackstageTheme = useTheme();
|
||||
@@ -424,6 +433,7 @@ export function DependencyGraph<NodeData, EdgeData>(
|
||||
setEdge={setEdge}
|
||||
render={renderLabel}
|
||||
edge={edge}
|
||||
curve={curve}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
|
||||
@@ -21,6 +21,7 @@ import { RenderLabelProps } from './types';
|
||||
|
||||
const fromNode = 'node';
|
||||
const toNode = 'other-node';
|
||||
const curve: 'curveStepBefore' | 'curveMonotoneX' = 'curveMonotoneX';
|
||||
|
||||
const edge = {
|
||||
points: [
|
||||
@@ -46,6 +47,7 @@ const minProps = {
|
||||
setEdge,
|
||||
renderElement,
|
||||
edge,
|
||||
curve,
|
||||
};
|
||||
|
||||
const label = 'label';
|
||||
|
||||
@@ -25,7 +25,7 @@ import {
|
||||
DependencyEdge,
|
||||
LabelPosition,
|
||||
} from './types';
|
||||
import { ARROW_MARKER_ID, EDGE_TEST_ID, LABEL_TEST_ID } from './constants';
|
||||
import { EDGE_TEST_ID, LABEL_TEST_ID } from './constants';
|
||||
import { DefaultLabel } from './DefaultLabel';
|
||||
import dagre from 'dagre';
|
||||
|
||||
@@ -47,7 +47,7 @@ export type DependencyGraphEdgeClassKey = 'path' | 'label';
|
||||
const useStyles = makeStyles(
|
||||
(theme: BackstageTheme) => ({
|
||||
path: {
|
||||
strokeWidth: 2,
|
||||
strokeWidth: 1,
|
||||
stroke: theme.palette.textSubtle,
|
||||
fill: 'none',
|
||||
transition: `${theme.transitions.duration.shortest}ms`,
|
||||
@@ -70,23 +70,19 @@ export type EdgeComponentProps<T = unknown> = {
|
||||
id: dagre.Edge,
|
||||
edge: DependencyEdge<T>,
|
||||
) => dagre.graphlib.Graph<{}>;
|
||||
curve: 'curveStepBefore' | 'curveMonotoneX';
|
||||
};
|
||||
|
||||
const renderDefault = (props: RenderLabelProps<unknown>) => (
|
||||
<DefaultLabel {...props} />
|
||||
);
|
||||
|
||||
const createPath = d3Shape
|
||||
.line<EdgePoint>()
|
||||
.x(d => d.x)
|
||||
.y(d => d.y)
|
||||
.curve(d3Shape.curveMonotoneX);
|
||||
|
||||
export function Edge<EdgeData>({
|
||||
render = renderDefault,
|
||||
setEdge,
|
||||
id,
|
||||
edge,
|
||||
curve,
|
||||
}: EdgeComponentProps<EdgeData>) {
|
||||
const { x = 0, y = 0, width, height, points } = edge;
|
||||
const labelProps: DependencyEdge<EdgeData> = edge;
|
||||
@@ -114,6 +110,16 @@ export function Edge<EdgeData>({
|
||||
|
||||
let path: string = '';
|
||||
|
||||
const createPath = React.useMemo(
|
||||
() =>
|
||||
d3Shape
|
||||
.line<EdgePoint>()
|
||||
.x(d => d.x)
|
||||
.y(d => d.y)
|
||||
.curve(d3Shape[curve]),
|
||||
[curve],
|
||||
);
|
||||
|
||||
if (points) {
|
||||
const finitePoints = points.filter(
|
||||
(point: EdgePoint) => isFinite(point.x) && isFinite(point.y),
|
||||
@@ -124,12 +130,7 @@ export function Edge<EdgeData>({
|
||||
return (
|
||||
<>
|
||||
{path && (
|
||||
<path
|
||||
data-testid={EDGE_TEST_ID}
|
||||
className={classes.path}
|
||||
markerEnd={`url(#${ARROW_MARKER_ID})`}
|
||||
d={path}
|
||||
/>
|
||||
<path data-testid={EDGE_TEST_ID} className={classes.path} d={path} />
|
||||
)}
|
||||
{labelProps.label ? (
|
||||
<g
|
||||
|
||||
@@ -44,6 +44,7 @@ export interface LogViewerProps {
|
||||
/**
|
||||
* A component that displays logs in a scrollable text area.
|
||||
*
|
||||
* @remarks
|
||||
* The LogViewer has support for search and filtering, as well as displaying
|
||||
* text content with ANSI color escape codes.
|
||||
*
|
||||
|
||||
@@ -110,10 +110,10 @@ const components: Options['components'] = {
|
||||
};
|
||||
|
||||
/**
|
||||
* MarkdownContent
|
||||
* --
|
||||
* Renders markdown with the default dialect [gfm - GitHub flavored Markdown](https://github.github.com/gfm/) to backstage theme styled HTML.
|
||||
* If you just want to render to plain [CommonMark](https://commonmark.org/), set the dialect to `'common-mark'`
|
||||
* Renders markdown with the default dialect {@link https://github.github.com/gfm/ | gfm - GitHub flavored Markdown} to backstage theme styled HTML.
|
||||
*
|
||||
* @remarks
|
||||
* If you just want to render to plain {@link https://commonmark.org/ | CommonMark}, set the dialect to `'common-mark'`
|
||||
*/
|
||||
export function MarkdownContent(props: Props) {
|
||||
const {
|
||||
|
||||
@@ -44,6 +44,7 @@ const useStyles = makeStyles(
|
||||
/**
|
||||
* Renders a warning panel as the effect of a failed server request.
|
||||
*
|
||||
* @remarks
|
||||
* Has special treatment for ResponseError errors, to display rich
|
||||
* server-provided information about what happened.
|
||||
*/
|
||||
|
||||
@@ -71,6 +71,7 @@ export function createSubRoutesFromChildren(
|
||||
* TabbedLayout is a compound component, which allows you to define a layout for
|
||||
* pages using a sub-navigation mechanism.
|
||||
*
|
||||
* @remarks
|
||||
* Consists of two parts: TabbedLayout and TabbedLayout.Route
|
||||
*
|
||||
* @example
|
||||
|
||||
@@ -134,7 +134,7 @@ const capitalize = (s: string) => {
|
||||
};
|
||||
|
||||
/**
|
||||
* WarningPanel. Show a user friendly error message to a user similar to
|
||||
* Show a user friendly error message to a user similar to
|
||||
* ErrorPanel except that the warning panel only shows the warning message to
|
||||
* the user.
|
||||
*
|
||||
|
||||
@@ -40,6 +40,7 @@ type ItemCardProps = {
|
||||
* This card type has been deprecated. Instead use plain MUI Card and helpers
|
||||
* where appropriate.
|
||||
*
|
||||
* @example
|
||||
* ```
|
||||
* <Card>
|
||||
* <CardMedia>
|
||||
|
||||
@@ -49,6 +49,7 @@ export type ItemCardGridProps = Partial<WithStyles<typeof styles>> & {
|
||||
* A default grid to use when arranging "item cards" - cards that let users
|
||||
* select among several options.
|
||||
*
|
||||
* @remarks
|
||||
* The immediate children are expected to be MUI Card components.
|
||||
*
|
||||
* Styles for the grid can be overridden using the `classes` prop, e.g.:
|
||||
|
||||
@@ -64,6 +64,7 @@ export type ItemCardHeaderProps = Partial<WithStyles<typeof styles>> & {
|
||||
* A simple card header, rendering a default look for "item cards" - cards that
|
||||
* are arranged in a grid for users to select among several options.
|
||||
*
|
||||
* @remarks
|
||||
* This component expects to be placed within a MUI `<CardMedia>`.
|
||||
*
|
||||
* Styles for the header can be overridden using the `classes` prop, e.g.:
|
||||
|
||||
@@ -510,6 +510,7 @@ const SidebarItemWithSubmenu = ({
|
||||
/**
|
||||
* Creates a `SidebarItem`
|
||||
*
|
||||
* @remarks
|
||||
* If children contain a `SidebarSubmenu` component the `SidebarItem` will have a expandable submenu
|
||||
*/
|
||||
export const SidebarItem = forwardRef<any, SidebarItemProps>((props, ref) => {
|
||||
@@ -663,6 +664,8 @@ export const SidebarScrollWrapper = styled('div')(({ theme }) => {
|
||||
|
||||
/**
|
||||
* A button which allows you to expand the sidebar when clicked.
|
||||
*
|
||||
* @remarks
|
||||
* Use optionally to replace sidebar's expand-on-hover feature with expand-on-click.
|
||||
*
|
||||
* If you are using this you might want to set the `disableExpandOnHover` of the `Sidebar` to `true`.
|
||||
|
||||
@@ -159,6 +159,7 @@ export const MobileSidebarContext = createContext<MobileSidebarContextType>({
|
||||
/**
|
||||
* A navigation component for mobile screens, which sticks to the bottom.
|
||||
*
|
||||
* @remarks
|
||||
* It alternates the normal sidebar by grouping the `SidebarItems` based on provided `SidebarGroup`s
|
||||
* either rendering them as a link or an overlay menu.
|
||||
* If no `SidebarGroup`s are provided the sidebar content is wrapped in an default overlay menu.
|
||||
|
||||
@@ -115,6 +115,7 @@ const MobileSidebarGroup = (props: SidebarGroupProps) => {
|
||||
/**
|
||||
* Groups items of the `Sidebar` together.
|
||||
*
|
||||
* @remarks
|
||||
* On bigger screens, this won't have any effect at the moment.
|
||||
* On small screens, it will add an action to the bottom navigation - either triggering an overlay menu or acting as a link
|
||||
*
|
||||
|
||||
@@ -111,6 +111,7 @@ export type SidebarSubmenuItemDropdownItem = {
|
||||
/**
|
||||
* Holds submenu item content.
|
||||
*
|
||||
* @remarks
|
||||
* title: Text content of submenu item
|
||||
* subtitle: A subtitle displayed under the main title
|
||||
* to: Path to navigate to when item is clicked
|
||||
|
||||
@@ -20,13 +20,13 @@ const drawerWidthClosed = 72;
|
||||
const iconPadding = 24;
|
||||
const userBadgePadding = 18;
|
||||
|
||||
/** @public **/
|
||||
/** @public */
|
||||
export type SidebarOptions = {
|
||||
drawerWidthClosed?: number;
|
||||
drawerWidthOpen?: number;
|
||||
};
|
||||
|
||||
/** @public **/
|
||||
/** @public */
|
||||
export type SubmenuOptions = {
|
||||
drawerWidthClosed?: number;
|
||||
drawerWidthOpen?: number;
|
||||
|
||||
@@ -32,7 +32,7 @@ export type SignInProviderConfig = {
|
||||
apiRef: ApiRef<ProfileInfoApi & BackstageIdentityApi & SessionApi>;
|
||||
};
|
||||
|
||||
/** @public **/
|
||||
/** @public */
|
||||
export type IdentityProviders = ('guest' | 'custom' | SignInProviderConfig)[];
|
||||
|
||||
export type ProviderComponent = ComponentType<
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user