Merge branch 'backstage:master' into plugin-azure-functions

This commit is contained in:
Wesley
2022-10-16 22:32:00 +02:00
committed by GitHub
511 changed files with 8455 additions and 1263 deletions
+5
View File
@@ -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 -1
View File
@@ -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.
+6
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Make the `/next` scaffolder work end to end with the old `TaskPage` view
+13
View File
@@ -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
+5
View File
@@ -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.
+8
View File
@@ -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
+11
View File
@@ -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
+8
View File
@@ -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.
+21
View File
@@ -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,
}),
);
...
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Fix BitBucket server integration
+30
View File
@@ -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.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports
+5
View File
@@ -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.
+9
View File
@@ -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
View File
@@ -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"
]
}
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Fixed layout for core-components docs where table was broken by splitting with code sample
+19
View File
@@ -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'],
});
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-bazaar-backend': patch
---
Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop.
+99
View File
@@ -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.
+5
View File
@@ -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`
+5
View File
@@ -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.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Add the new search pagination component to the search page template.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-backend': minor
---
Add optional `catalogClient` argument to `createRoute` parameters
+10
View File
@@ -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
View File
@@ -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

+11
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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,
+2 -6
View File
@@ -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
+26 -9
View File
@@ -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
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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
+7
View File
@@ -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
+1
View File
@@ -226,6 +226,7 @@
"plugins/composability",
"plugins/customization",
"plugins/analytics",
"plugins/feature-flags",
{
"type": "subcategory",
"label": "Backends and APIs",
+3 -2
View File
@@ -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",
+11
View File
@@ -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 -1
View File
@@ -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",
+62
View File
@@ -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 -2
View File
@@ -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>
+11
View File
@@ -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 -1
View File
@@ -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": {
+14
View File
@@ -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 -1
View File
@@ -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}`,
);
}
}
+8
View File
@@ -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 -1
View File
@@ -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": {
+10
View File
@@ -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 -1
View File
@@ -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",
+10
View File
@@ -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 -1
View File
@@ -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": {
+11
View File
@@ -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 -1
View File
@@ -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": {
+11
View File
@@ -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 -1
View File
@@ -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": {
+42
View File
@@ -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
+5 -3
View File
@@ -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 -1
View File
@@ -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",
+8
View File
@@ -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 -1
View File
@@ -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",
+9
View File
@@ -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 -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.2-next.1",
"version": "1.1.2-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
+13
View File
@@ -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 -1
View File
@@ -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"
},
+7
View File
@@ -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 -1
View File
@@ -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"
+10
View File
@@ -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 -1
View File
@@ -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",
+7
View File
@@ -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 -1
View File
@@ -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",
+10
View File
@@ -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 -1
View File
@@ -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",
+11
View File
@@ -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
+1
View File
@@ -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 -1
View File
@@ -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