diff --git a/.changeset/chilly-books-sneeze.md b/.changeset/chilly-books-sneeze.md
new file mode 100644
index 0000000000..a2d3ca1e04
--- /dev/null
+++ b/.changeset/chilly-books-sneeze.md
@@ -0,0 +1,6 @@
+---
+'@backstage/cli-node': minor
+'@backstage/cli': minor
+---
+
+Removed support for the `publishConfig.alphaTypes` and `.betaTypes` fields that were used together with `--experimental-type-build` to generate `/alpha` and `/beta` entry points. Use the `exports` field to achieve this instead.
diff --git a/.changeset/fast-bears-lick.md b/.changeset/fast-bears-lick.md
new file mode 100644
index 0000000000..8e0dc8e60b
--- /dev/null
+++ b/.changeset/fast-bears-lick.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog': patch
+---
+
+Migrate catalog entity cards to new frontend system extension format.
diff --git a/.changeset/four-files-behave.md b/.changeset/four-files-behave.md
new file mode 100644
index 0000000000..0430bd98d8
--- /dev/null
+++ b/.changeset/four-files-behave.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-graphiql': minor
+---
+
+Upgrade to GraphiQL to 3.0.6
diff --git a/.changeset/fresh-schools-thank.md b/.changeset/fresh-schools-thank.md
new file mode 100644
index 0000000000..1e32f82051
--- /dev/null
+++ b/.changeset/fresh-schools-thank.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-gitlab': patch
+---
+
+Added try catch around fetching gitlab group users to prevent refresh from failing completely while only a select number of groups might not be able to load correctly.
diff --git a/.changeset/large-forks-arrive.md b/.changeset/large-forks-arrive.md
new file mode 100644
index 0000000000..3490a87128
--- /dev/null
+++ b/.changeset/large-forks-arrive.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-code-coverage-backend': patch
+---
+
+Added support for new backend system
diff --git a/.changeset/many-masks-smoke.md b/.changeset/many-masks-smoke.md
new file mode 100644
index 0000000000..6d249eeb15
--- /dev/null
+++ b/.changeset/many-masks-smoke.md
@@ -0,0 +1,6 @@
+---
+'@backstage/repo-tools': minor
+'@backstage/cli': minor
+---
+
+Remove support for the deprecated `--experimental-type-build` option for `package build`.
diff --git a/.changeset/poor-seahorses-rush.md b/.changeset/poor-seahorses-rush.md
new file mode 100644
index 0000000000..55313f706d
--- /dev/null
+++ b/.changeset/poor-seahorses-rush.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-azure-devops': patch
+---
+
+Consolidated getting the annotation values into a single function to help with future changes
diff --git a/.changeset/shaggy-buses-beg.md b/.changeset/shaggy-buses-beg.md
new file mode 100644
index 0000000000..d2c9351b5e
--- /dev/null
+++ b/.changeset/shaggy-buses-beg.md
@@ -0,0 +1,9 @@
+---
+'@backstage/plugin-catalog-react': minor
+---
+
+The `UserListPicker` component has undergone improvements to enhance its performance.
+
+The previous implementation inferred the number of owned and starred entities based on the entities available in the `EntityListContext`. The updated version no longer relies on the `EntityListContext` for inference, allowing for better decoupling.
+
+The component now loads the entities' count asynchronously, resulting in improved performance and responsiveness. For this purpose, some of the exported filters such as `EntityTagFilter`, `EntityOwnerFilter`, `EntityLifecycleFilter` and `EntityNamespaceFilter` have now the `getCatalogFilters` method implemented.
diff --git a/.changeset/sour-toes-joke.md b/.changeset/sour-toes-joke.md
new file mode 100644
index 0000000000..4e380f4ded
--- /dev/null
+++ b/.changeset/sour-toes-joke.md
@@ -0,0 +1,13 @@
+---
+'@backstage/plugin-user-settings-backend': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-periskop-backend': patch
+'@backstage/plugin-scaffolder-node': patch
+'@backstage/plugin-bazaar-backend': patch
+'@backstage/plugin-kafka-backend': patch
+'@backstage/plugin-proxy-backend': patch
+'@backstage/plugin-sonarqube': patch
+'@backstage/plugin-todo': patch
+---
+
+Switched to using `"exports"` field for `/alpha` subpath export.
diff --git a/.changeset/strange-queens-deliver.md b/.changeset/strange-queens-deliver.md
new file mode 100644
index 0000000000..ed1d4d0b5b
--- /dev/null
+++ b/.changeset/strange-queens-deliver.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-auth-backend': patch
+---
+
+Reverted the Microsoft auth provider to the previous implementation.
diff --git a/.changeset/tall-colts-roll.md b/.changeset/tall-colts-roll.md
new file mode 100644
index 0000000000..914a09cdac
--- /dev/null
+++ b/.changeset/tall-colts-roll.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend': minor
+---
+
+Allow setting `update: true` in `publish:github:pull-request` scaffolder action
diff --git a/.changeset/wicked-ties-knock.md b/.changeset/wicked-ties-knock.md
new file mode 100644
index 0000000000..582cb905d0
--- /dev/null
+++ b/.changeset/wicked-ties-knock.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend-module-gitlab': patch
+---
+
+Add examples for `gitlab:projectAccessToken:create` scaffolder action & improve related tests
diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml
index 483d59dc8c..eac020cb8e 100644
--- a/.github/workflows/automate_changeset_feedback.yml
+++ b/.github/workflows/automate_changeset_feedback.yml
@@ -34,7 +34,7 @@ jobs:
ref: 'refs/pull/${{ github.event.pull_request.number }}/merge'
- name: fetch base
run: git fetch --depth 1 origin ${{ github.base_ref }}
- - uses: backstage/actions/changeset-feedback@v0.6.4
+ - uses: backstage/actions/changeset-feedback@v0.6.5
name: Generate feedback
with:
diff-ref: 'origin/master'
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 81ea6f96d2..23e81192c0 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -40,7 +40,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -76,7 +76,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -207,7 +207,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml
index 2874be512c..79cfe9d790 100644
--- a/.github/workflows/cron.yml
+++ b/.github/workflows/cron.yml
@@ -13,7 +13,7 @@ jobs:
with:
egress-policy: audit
- - uses: backstage/actions/cron@v0.6.4
+ - uses: backstage/actions/cron@v0.6.5
with:
app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml
index 30e7badcd0..69776da2d9 100644
--- a/.github/workflows/deploy_docker-image.yml
+++ b/.github/workflows/deploy_docker-image.yml
@@ -31,7 +31,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml
index d5fe9f5a64..7184557e12 100644
--- a/.github/workflows/deploy_nightly.yml
+++ b/.github/workflows/deploy_nightly.yml
@@ -27,7 +27,7 @@ jobs:
node-version: 18.x
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@497722d45fb5a35c14c721f63ed74e6ad5f629dd # v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v18.x
diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml
index f5ebfd7ee2..32f4b139f2 100644
--- a/.github/workflows/deploy_packages.yml
+++ b/.github/workflows/deploy_packages.yml
@@ -68,7 +68,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -150,7 +150,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml
index 1c1c028f20..f5150a3a01 100644
--- a/.github/workflows/issue.yaml
+++ b/.github/workflows/issue.yaml
@@ -15,4 +15,4 @@ jobs:
egress-policy: audit
- name: Issue sync
- uses: backstage/actions/issue-sync@v0.6.4
+ uses: backstage/actions/issue-sync@v0.6.5
diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml
index e557c85d51..8d66567ff4 100644
--- a/.github/workflows/pr-review-comment.yaml
+++ b/.github/workflows/pr-review-comment.yaml
@@ -40,7 +40,7 @@ jobs:
const prNumber = artifact.name.slice('pr_number-'.length)
core.setOutput('pr-number', prNumber);
- - uses: backstage/actions/re-review@v0.6.4
+ - uses: backstage/actions/re-review@v0.6.5
with:
app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 8c99f105a9..89193c30ab 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -23,7 +23,7 @@ jobs:
egress-policy: audit
- name: PR sync
- uses: backstage/actions/pr-sync@v0.6.4
+ uses: backstage/actions/pr-sync@v0.6.5
with:
github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index c9078f0086..0f99453bba 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -66,6 +66,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: 'Upload to code-scanning'
- uses: github/codeql-action/upload-sarif@fdcae64e1484d349b3366718cdfef3d404390e85 # v2.22.1
+ uses: github/codeql-action/upload-sarif@49abf0ba24d0b7953cb586944e918a0b92074c80 # v2.22.4
with:
sarif_file: results.sarif
diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml
index fa8d91f25a..610ad323e2 100644
--- a/.github/workflows/sync_code-formatting.yml
+++ b/.github/workflows/sync_code-formatting.yml
@@ -25,7 +25,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml
index 690e2fb76e..2be954746b 100644
--- a/.github/workflows/sync_snyk-github-issues.yml
+++ b/.github/workflows/sync_snyk-github-issues.yml
@@ -24,7 +24,7 @@ jobs:
node-version: 18.x
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v18.x
diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml
index 6450b1bd51..84b2b3387b 100644
--- a/.github/workflows/sync_snyk-monitor.yml
+++ b/.github/workflows/sync_snyk-monitor.yml
@@ -58,6 +58,6 @@ jobs:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
NODE_OPTIONS: --max-old-space-size=7168
- name: Upload Snyk report
- uses: github/codeql-action/upload-sarif@v2.21.8
+ uses: github/codeql-action/upload-sarif@v2.22.4
with:
sarif_file: snyk.sarif
diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml
index 3107b87b8f..375c6bdcd2 100644
--- a/.github/workflows/uffizzi-build.yml
+++ b/.github/workflows/uffizzi-build.yml
@@ -34,7 +34,7 @@ jobs:
registry-url: https://registry.npmjs.org/
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: linux-v18
diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml
index d53f3834d2..f34f2f5506 100644
--- a/.github/workflows/verify_accessibility.yml
+++ b/.github/workflows/verify_accessibility.yml
@@ -30,7 +30,7 @@ jobs:
with:
node-version: 18.x
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v18.x
- name: run Lighthouse CI
diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml
index 666bd5f0f4..fb29fb78e1 100644
--- a/.github/workflows/verify_codeql.yml
+++ b/.github/workflows/verify_codeql.yml
@@ -55,7 +55,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v2.21.8
+ uses: github/codeql-action/init@v2.22.4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -66,7 +66,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@v2.21.8
+ uses: github/codeql-action/autobuild@v2.22.4
# âšī¸ Command-line programs to run using the OS shell.
# đ https://git.io/JvXDl
@@ -80,4 +80,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v2.21.8
+ uses: github/codeql-action/analyze@v2.22.4
diff --git a/.github/workflows/verify_e2e-kubernetes.yml b/.github/workflows/verify_e2e-kubernetes.yml
index cddd6589d7..ea77609614 100644
--- a/.github/workflows/verify_e2e-kubernetes.yml
+++ b/.github/workflows/verify_e2e-kubernetes.yml
@@ -35,7 +35,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml
index 744a5d7e74..6b61053628 100644
--- a/.github/workflows/verify_e2e-linux.yml
+++ b/.github/workflows/verify_e2e-linux.yml
@@ -57,7 +57,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml
index 1385983c24..7ee5e596c5 100644
--- a/.github/workflows/verify_e2e-windows.yml
+++ b/.github/workflows/verify_e2e-windows.yml
@@ -78,7 +78,7 @@ jobs:
uses: browser-actions/setup-chrome@803ef6dfb4fdf22089c9563225d95e4a515820a0 # latest
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml
index f0354df296..e992a2d658 100644
--- a/.github/workflows/verify_storybook.yml
+++ b/.github/workflows/verify_storybook.yml
@@ -42,7 +42,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.6.4
+ uses: backstage/actions/yarn-install@v0.6.5
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: storybook yarn install
diff --git a/REVIEWING.md b/REVIEWING.md
index 43085090a8..7ed3fcda57 100644
--- a/REVIEWING.md
+++ b/REVIEWING.md
@@ -172,13 +172,7 @@ We generate API Reports using the [API Extractor](https://api-extractor.com/) to
Each API report contains a list of all the exported types of each package. As long as the API report does not have any warnings it will contain the full publicly facing API of the package, meaning you do not need to consider any other changes to the package from the point of view of TypeScript API stability.
-Exported types can be marked with either `@public`, `@alpha` or `@beta` release tags. It is only the `@public` exports that we consider to be part of the stable API. The `@alpha` and `@beta` exports are considered unstable and can be changed at any time without needing a breaking package versions bump. However, this **ONLY** applies if the package has been configured to use experimental type builds, which looks like this in `package.json`:
-
-```json
- "build": "backstage-cli package build --experimental-type-build"
-```
-
-If a package does not have this configuration, then all exported types are considered stable, even if they are marked as `@alpha` or `@beta`.
+Exported types can be marked with either `@public`, `@alpha` or `@beta` release tags. It is only the `@public` exports that we consider to be part of the stable API. The `@alpha` and `@beta` exports are considered unstable and can be changed at any time without needing a breaking package versions bump.
#### Changes that are Not Considered Breaking
diff --git a/docs/local-dev/cli-build-system.md b/docs/local-dev/cli-build-system.md
index 61e24863fe..7bb4918d47 100644
--- a/docs/local-dev/cli-build-system.md
+++ b/docs/local-dev/cli-build-system.md
@@ -674,38 +674,3 @@ To add subpath exports to an existing package, simply add the desired `"exports"
```bash
yarn backstage-cli migrate package-exports
```
-
-## Experimental Type Build
-
-> Note: Experimental type builds are deprecated and will be removed in the future. They have been replaced by [subpath exports](#subpath-exports).
-
-The Backstage CLI has an experimental feature where multiple different type definition files can be generated for different release stages. The release stages are marked in the [TSDoc](https://tsdoc.org/) for each individual export, using either `@public`, `@alpha`, or `@beta`. Rather than just building a single `index.d.ts` file, the build process will instead output `index.d.ts`, `index.beta.d.ts`, and `index.alpha.d.ts`. Each of these files will have exports from more unstable release stages stripped, meaning that `index.d.ts` will omit all exports marked with `@alpha` or `@beta`, while `index.beta.d.ts` will omit all exports marked with `@alpha`.
-
-This feature is aimed at projects that publish to package registries and wish to maintain different levels of API stability within each package. There is no need to use this within a single monorepo, as it has no effect due to only applying to built and published packages.
-
-In order for the experimental type build to work, `@microsoft/api-extractor` must be installed in your project, as it is an optional peer dependency of the Backstage CLI. There are then three steps that need to be taken for each package where you want to enable this feature:
-
-- Add the `--experimental-type-build` flag to the `"build"` script of the package.
-- Add either one or both of `"alphaTypes"` and `"betaTypes"` to the `"publishConfig"` of the package:
- ```json
- "publishConfig": {
- ...
- "types": "dist/index.d.ts",
- "alphaTypes": "dist/index.alpha.d.ts",
- "betaTypes": "dist/index.beta.d.ts"
- },
- ```
-- Add either one or both of `"alpha"` and `"beta"` to the `"files"` of the package:
- ```json
- "files": [
- "dist",
- "alpha",
- "beta"
- ]
- ```
-
-Once this setup is complete, users of the published packages will only be able to access the stable API via the main package entry point, for example `@acme/my-plugin`. Exports marked with `@alpha` or `@beta` will only be available via the `/alpha` entry point, for example `@acme/my-plugin/alpha`, and exports marked with `@beta` will only be available via `/beta`. This does not apply within the monorepo that contains the package. There all exports still have to be imported via the main entry point.
-
-Note that these different entry points are only separated during type checking. At runtime they all share the same code which contains the exports from all releases stages.
-
-An example of this setup can be seen in the [`@backstage/catalog-model`](https://github.com/backstage/backstage/blob/da0675bf9f28ed1460f03635a22d3c26abd14707/packages/catalog-model/package.json#L14) package, which has enabled `alpha` type exports. With this setup, exports marked as `@alpha` are only available for import via `@backstage/catalog-model/alpha`. The `@backstage/catalog-model` package currently does not have any exports marked as `@beta`, or a `/beta` entry point.
diff --git a/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
index 839441e733..23bc4e84f1 100644
--- a/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
+++ b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
@@ -349,7 +349,7 @@ import { createRouter } from './service/router';
/**
* The example TODO list backend plugin.
*
-* @alpha
+* @public
*/
export const exampleTodoListPlugin = createBackendPlugin({
pluginId: 'exampleTodoList',
diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx
index 81af3b91e7..ecc1f008b5 100644
--- a/packages/app/src/components/catalog/EntityPage.tsx
+++ b/packages/app/src/components/catalog/EntityPage.tsx
@@ -41,6 +41,7 @@ import {
EntityAzurePullRequestsContent,
isAzureDevOpsAvailable,
isAzurePipelinesAvailable,
+ EntityAzureReadmeCard,
} from '@backstage/plugin-azure-devops';
import {
isOctopusDeployAvailable,
@@ -415,6 +416,14 @@ const overviewContent = (
+
+
+
+
+
+
+
+
diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts
index bdfbc2c26b..dd2c6994f9 100644
--- a/packages/backend-next/src/index.ts
+++ b/packages/backend-next/src/index.ts
@@ -39,7 +39,7 @@ backend.add(
import('@backstage/plugin-permission-backend-module-allow-all-policy'),
);
backend.add(import('@backstage/plugin-permission-backend/alpha'));
-backend.add(import('@backstage/plugin-proxy-backend'));
+backend.add(import('@backstage/plugin-proxy-backend/alpha'));
backend.add(import('@backstage/plugin-scaffolder-backend/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-explore/alpha'));
diff --git a/packages/cli-node/api-report.md b/packages/cli-node/api-report.md
index 91148596b3..71be6c4bd4 100644
--- a/packages/cli-node/api-report.md
+++ b/packages/cli-node/api-report.md
@@ -53,8 +53,6 @@ export interface BackstagePackageJson {
access?: 'public' | 'restricted';
directory?: string;
registry?: string;
- alphaTypes?: string;
- betaTypes?: string;
};
// (undocumented)
scripts?: {
diff --git a/packages/cli-node/src/monorepo/PackageGraph.ts b/packages/cli-node/src/monorepo/PackageGraph.ts
index 421c49f9b9..fb46dbde26 100644
--- a/packages/cli-node/src/monorepo/PackageGraph.ts
+++ b/packages/cli-node/src/monorepo/PackageGraph.ts
@@ -56,8 +56,6 @@ export interface BackstagePackageJson {
access?: 'public' | 'restricted';
directory?: string;
registry?: string;
- alphaTypes?: string;
- betaTypes?: string;
};
dependencies?: {
diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md
index 9d6ffd3f69..9292f2ea37 100644
--- a/packages/cli/cli-report.md
+++ b/packages/cli/cli-report.md
@@ -224,7 +224,6 @@ Usage: backstage-cli package build [options]
Options:
--role
--minify
- --experimental-type-build
--skip-build-dependencies
--stats
--config
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 689de4b20e..f397fd5865 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -174,16 +174,12 @@
"type-fest": "^2.19.0"
},
"peerDependencies": {
- "@microsoft/api-extractor": "^7.21.2",
"@vitejs/plugin-react": "^4.0.4",
"vite": "^4.4.9",
"vite-plugin-html": "^3.2.0",
"vite-plugin-node-polyfills": "^0.14.1"
},
"peerDependenciesMeta": {
- "@microsoft/api-extractor": {
- "optional": true
- },
"@vitejs/plugin-react": {
"optional": true
},
diff --git a/packages/cli/src/commands/build/command.ts b/packages/cli/src/commands/build/command.ts
index 507085e0a0..1b3aeff2f9 100644
--- a/packages/cli/src/commands/build/command.ts
+++ b/packages/cli/src/commands/build/command.ts
@@ -65,6 +65,5 @@ export async function command(opts: OptionValues): Promise {
return buildPackage({
outputs,
minify: Boolean(opts.minify),
- useApiExtractor: Boolean(opts.experimentalTypeBuild),
});
}
diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts
index ce4a4d2bae..fb0a55f37e 100644
--- a/packages/cli/src/commands/index.ts
+++ b/packages/cli/src/commands/index.ts
@@ -130,10 +130,6 @@ export function registerScriptCommand(program: Command) {
'--minify',
'Minify the generated code. Does not apply to app or backend packages.',
)
- .option(
- '--experimental-type-build',
- 'Enable experimental type build. Does not apply to app or backend packages. [DEPRECATED]',
- )
.option(
'--skip-build-dependencies',
'Skip the automatic building of local dependencies. Applies to backend packages only.',
diff --git a/packages/cli/src/commands/migrate/packageScripts.ts b/packages/cli/src/commands/migrate/packageScripts.ts
index 1552208a5f..e9ff20aed3 100644
--- a/packages/cli/src/commands/migrate/packageScripts.ts
+++ b/packages/cli/src/commands/migrate/packageScripts.ts
@@ -49,9 +49,6 @@ export async function command() {
if (scripts.build?.includes('--minify')) {
buildCmd.push('--minify');
}
- if (scripts.build?.includes('--experimental-type-build')) {
- buildCmd.push('--experimental-type-build');
- }
if (scripts.build?.includes('--config')) {
buildCmd.push(...(scripts.build.match(configArgPattern) ?? []));
}
diff --git a/packages/cli/src/commands/repo/build.ts b/packages/cli/src/commands/repo/build.ts
index 71e58c6201..32f227c208 100644
--- a/packages/cli/src/commands/repo/build.ts
+++ b/packages/cli/src/commands/repo/build.ts
@@ -137,7 +137,6 @@ export async function command(opts: OptionValues, cmd: Command): Promise {
outputs,
logPrefix: `${chalk.cyan(relativePath(paths.targetRoot, pkg.dir))}: `,
minify: buildOptions.minify,
- useApiExtractor: buildOptions.experimentalTypeBuild,
};
});
diff --git a/packages/cli/src/lib/builder/buildTypeDefinitions.ts b/packages/cli/src/lib/builder/buildTypeDefinitions.ts
deleted file mode 100644
index 3bf3a4495f..0000000000
--- a/packages/cli/src/lib/builder/buildTypeDefinitions.ts
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import fs from 'fs-extra';
-import chalk from 'chalk';
-import { relative as relativePath, resolve as resolvePath } from 'path';
-import { paths } from '../paths';
-import { buildTypeDefinitionsWorker } from './buildTypeDefinitionsWorker';
-import { runWorkerThreads } from '../parallel';
-
-// These message types are ignored since we want to avoid duplicating the logic of
-// handling them correctly, and we already have the API Reports warning about them.
-const ignoredMessages = new Set(['tsdoc-undefined-tag', 'ae-forgotten-export']);
-
-export async function buildTypeDefinitions(
- targetDirs: string[] = [paths.targetDir],
-) {
- const packageDirs = targetDirs.map(dir =>
- relativePath(paths.targetRoot, dir),
- );
- const entryPoints = await Promise.all(
- packageDirs.map(async dir => {
- const entryPoint = paths.resolveTargetRoot(
- 'dist-types',
- dir,
- 'src/index.d.ts',
- );
-
- const declarationsExist = await fs.pathExists(entryPoint);
- if (!declarationsExist) {
- throw new Error(
- `No declaration files found at ${entryPoint}, be sure to run ${chalk.bgRed.white(
- 'yarn tsc',
- )} to generate .d.ts files before packaging`,
- );
- }
- return entryPoint;
- }),
- );
-
- const workerConfigs = packageDirs.map(packageDir => {
- const targetDir = paths.resolveTargetRoot(packageDir);
- const targetTypesDir = paths.resolveTargetRoot('dist-types', packageDir);
- const extractorOptions = {
- configObject: {
- mainEntryPointFilePath: resolvePath(targetTypesDir, 'src/index.d.ts'),
- bundledPackages: [],
-
- compiler: {
- skipLibCheck: true,
- tsconfigFilePath: paths.resolveTargetRoot('tsconfig.json'),
- },
-
- dtsRollup: {
- enabled: true,
- untrimmedFilePath: resolvePath(targetDir, 'dist/index.alpha.d.ts'),
- betaTrimmedFilePath: resolvePath(targetDir, 'dist/index.beta.d.ts'),
- publicTrimmedFilePath: resolvePath(targetDir, 'dist/index.d.ts'),
- },
-
- newlineKind: 'lf',
-
- projectFolder: targetDir,
- },
- configObjectFullPath: targetDir,
- packageJsonFullPath: resolvePath(targetDir, 'package.json'),
- };
- return { extractorOptions, targetTypesDir };
- });
-
- const typescriptDir = paths.resolveTargetRoot('node_modules/typescript');
- const hasTypescript = await fs.pathExists(typescriptDir);
- const typescriptCompilerFolder = hasTypescript ? typescriptDir : undefined;
- await runWorkerThreads({
- threadCount: 1,
- workerData: {
- entryPoints,
- workerConfigs,
- typescriptCompilerFolder,
- },
- worker: buildTypeDefinitionsWorker,
- onMessage: ({
- message,
- targetTypesDir,
- }: {
- message: any;
- targetTypesDir: string;
- }) => {
- if (ignoredMessages.has(message.messageId)) {
- return;
- }
-
- let text = `${message.text} (${message.messageId})`;
- if (message.sourceFilePath) {
- text += ' at ';
- text += relativePath(targetTypesDir, message.sourceFilePath);
- if (message.sourceFileLine) {
- text += `:${message.sourceFileLine}`;
- if (message.sourceFileColumn) {
- text += `:${message.sourceFileColumn}`;
- }
- }
- }
- if (message.logLevel === 'error') {
- console.error(chalk.red(`Error: ${text}`));
- } else if (
- message.logLevel === 'warning' ||
- message.category === 'Extractor'
- ) {
- console.warn(`Warning: ${text}`);
- } else {
- console.log(text);
- }
- },
- });
-}
diff --git a/packages/cli/src/lib/builder/buildTypeDefinitionsWorker.ts b/packages/cli/src/lib/builder/buildTypeDefinitionsWorker.ts
deleted file mode 100644
index c3c37d91cf..0000000000
--- a/packages/cli/src/lib/builder/buildTypeDefinitionsWorker.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * NOTE: This is a worker thread function that is stringified and executed
- * within a `worker_threads.Worker`. Everything in this function must
- * be self-contained.
- * Using TypeScript is fine as it is transpiled before being stringified.
- */
-export async function buildTypeDefinitionsWorker(
- workerData: any,
- sendMessage: (message: any) => void,
-) {
- try {
- require('@microsoft/api-extractor');
- } catch (error) {
- throw new Error(
- 'Failed to resolve @microsoft/api-extractor, it must best installed ' +
- 'as a dependency of your project in order to use experimental type builds',
- );
- }
-
- const { dirname } = require('path');
- const { entryPoints, workerConfigs, typescriptCompilerFolder } = workerData;
-
- const apiExtractor = require('@microsoft/api-extractor');
- const { Extractor, ExtractorConfig, CompilerState } = apiExtractor;
-
- /**
- * All of this monkey patching below is because Material UI has these bare package.json file as a method
- * for making TypeScript accept imports like `@material-ui/core/Button`, and improve tree-shaking
- * by declaring them side effect free.
- *
- * The package.json lookup logic in api-extractor really doesn't like that though, as it enforces
- * that the 'name' field exists in all package.json files that it discovers. This below is just
- * making sure that we ignore those file package.json files instead of crashing.
- */
- const {
- PackageJsonLookup,
- // eslint-disable-next-line @backstage/no-undeclared-imports
- } = require('@rushstack/node-core-library/lib/PackageJsonLookup');
-
- const old = PackageJsonLookup.prototype.tryGetPackageJsonFilePathFor;
- PackageJsonLookup.prototype.tryGetPackageJsonFilePathFor =
- function tryGetPackageJsonFilePathForPatch(path: string) {
- if (
- path.includes('@material-ui') &&
- !dirname(path).endsWith('@material-ui')
- ) {
- return undefined;
- }
- return old.call(this, path);
- };
-
- let compilerState;
- for (const { extractorOptions, targetTypesDir } of workerConfigs) {
- const extractorConfig = ExtractorConfig.prepare(extractorOptions);
-
- if (!compilerState) {
- compilerState = CompilerState.create(extractorConfig, {
- additionalEntryPoints: entryPoints,
- });
- }
-
- const extractorResult = Extractor.invoke(extractorConfig, {
- compilerState,
- localBuild: false,
- typescriptCompilerFolder,
- showVerboseMessages: false,
- showDiagnostics: false,
- messageCallback: (message: any) => {
- message.handled = true;
- sendMessage({ message, targetTypesDir });
- },
- });
-
- if (!extractorResult.succeeded) {
- throw new Error(
- `Type definition build completed with ${extractorResult.errorCount} errors` +
- ` and ${extractorResult.warningCount} warnings`,
- );
- }
- }
-}
diff --git a/packages/cli/src/lib/builder/config.ts b/packages/cli/src/lib/builder/config.ts
index f614581320..41e9dd6906 100644
--- a/packages/cli/src/lib/builder/config.ts
+++ b/packages/cli/src/lib/builder/config.ts
@@ -151,7 +151,7 @@ export async function makeRollupConfigs(
});
}
- if (options.outputs.has(Output.types) && !options.useApiExtractor) {
+ if (options.outputs.has(Output.types)) {
const input = Object.fromEntries(
scriptEntryPoints.map(e => [
e.name,
diff --git a/packages/cli/src/lib/builder/packager.ts b/packages/cli/src/lib/builder/packager.ts
index 780f9c2cfe..be9bc9a6ea 100644
--- a/packages/cli/src/lib/builder/packager.ts
+++ b/packages/cli/src/lib/builder/packager.ts
@@ -21,7 +21,6 @@ import { relative as relativePath, resolve as resolvePath } from 'path';
import { paths } from '../paths';
import { makeRollupConfigs } from './config';
import { BuildOptions, Output } from './types';
-import { buildTypeDefinitions } from './buildTypeDefinitions';
import { PackageRoles } from '@backstage/cli-node';
import { runParallelWorkers } from '../parallel';
@@ -112,10 +111,6 @@ export const buildPackage = async (options: BuildOptions) => {
const buildTasks = rollupConfigs.map(rollupBuild);
- if (options.outputs.has(Output.types) && options.useApiExtractor) {
- buildTasks.push(buildTypeDefinitions());
- }
-
await Promise.all(buildTasks);
};
@@ -131,18 +126,6 @@ export const buildPackages = async (options: BuildOptions[]) => {
const buildTasks = rollupConfigs.flat().map(opts => () => rollupBuild(opts));
- const typeDefinitionTargetDirs = options
- .filter(
- ({ outputs, useApiExtractor }) =>
- outputs.has(Output.types) && useApiExtractor,
- )
- .map(_ => _.targetDir!);
-
- if (typeDefinitionTargetDirs.length > 0) {
- // Make sure this one is started first
- buildTasks.unshift(() => buildTypeDefinitions(typeDefinitionTargetDirs));
- }
-
await runParallelWorkers({
items: buildTasks,
worker: async task => task(),
diff --git a/packages/cli/src/lib/builder/types.ts b/packages/cli/src/lib/builder/types.ts
index 330419235f..7d9c34fe29 100644
--- a/packages/cli/src/lib/builder/types.ts
+++ b/packages/cli/src/lib/builder/types.ts
@@ -28,5 +28,4 @@ export type BuildOptions = {
packageJson?: BackstagePackageJson;
outputs: Set