From 919976d33c962d0db730a1d36cc4534e12ebad40 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Feb 2023 05:37:46 +0000 Subject: [PATCH 01/43] fix(deps): update jest monorepo Signed-off-by: Renovate Bot --- yarn.lock | 756 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 386 insertions(+), 370 deletions(-) diff --git a/yarn.lock b/yarn.lock index ee6415ebba..084164a6d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10800,50 +10800,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/console@npm:29.3.1" +"@jest/console@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/console@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 - checksum: 9eecbfb6df4f5b810374849b7566d321255e6fd6e804546236650384966be532ff75a3e445a3277eadefe67ddf4dc56cd38332abd72d6a450f1bea9866efc6d7 + checksum: 8d9b163febe735153b523db527742309f4d598eda22f17f04e030060329bd3da4de7420fc1f7812f7a16f08273654a7de094c4b4e8b81a99dbfc17cfb1629008 languageName: node linkType: hard -"@jest/core@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/core@npm:29.3.1" +"@jest/core@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/core@npm:29.4.3" dependencies: - "@jest/console": ^29.3.1 - "@jest/reporters": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/reporters": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.2.0 - jest-config: ^29.3.1 - jest-haste-map: ^29.3.1 - jest-message-util: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-resolve-dependencies: ^29.3.1 - jest-runner: ^29.3.1 - jest-runtime: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 - jest-watcher: ^29.3.1 + jest-changed-files: ^29.4.3 + jest-config: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-resolve-dependencies: ^29.4.3 + jest-runner: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + jest-watcher: ^29.4.3 micromatch: ^4.0.4 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -10851,7 +10851,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f + checksum: 4aa10644d66f44f051d5dd9cdcedce27acc71216dbcc5e7adebdea458e27aefe27c78f457d7efd49f58b968c35f42de5a521590876e2013593e675120b9e6ab1 languageName: node linkType: hard @@ -10864,15 +10864,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/environment@npm:29.3.1" +"@jest/environment@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/environment@npm:29.4.3" dependencies: - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.3.1 - checksum: 974102aba7cc80508f787bb5504dcc96e5392e0a7776a63dffbf54ddc2c77d52ef4a3c08ed2eedec91965befff873f70cd7c9ed56f62bb132dcdb821730e6076 + jest-mock: ^29.4.3 + checksum: 7c1b0cc4e84b90f8a3bbeca9bbf088882c88aee70a81b3b8e24265dcb1cbc302cd1eee3319089cf65bfd39adbaea344903c712afea106cb8da6c86088d99c5fb languageName: node linkType: hard @@ -10885,60 +10885,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/expect-utils@npm:29.3.1" +"@jest/expect-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect-utils@npm:29.4.3" dependencies: - jest-get-type: ^29.2.0 - checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb + jest-get-type: ^29.4.3 + checksum: 2bbed39ff2fb59f5acac465a1ce7303e3b4b62b479e4f386261986c9827f7f799ea912761e22629c5daf10addf8513f16733c14a29c2647bb66d4ee625e9ff92 languageName: node linkType: hard -"@jest/expect@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/expect@npm:29.3.1" +"@jest/expect@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect@npm:29.4.3" dependencies: - expect: ^29.3.1 - jest-snapshot: ^29.3.1 - checksum: 1d7b5cc735c8a99bfbed884d80fdb43b23b3456f4ec88c50fd86404b097bb77fba84f44e707fc9b49f106ca1154ae03f7c54dc34754b03f8a54eeb420196e5bf + expect: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 08d0d40077ec99a7491fe59d05821dbd31126cfba70875855d8a063698b7126b5f6c309c50811caacc6ae2f727c6e44f51bdcf1d6c1ea832b4f020045ef22d45 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/fake-timers@npm:29.3.1" +"@jest/fake-timers@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/fake-timers@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 - "@sinonjs/fake-timers": ^9.1.2 + "@jest/types": ^29.4.3 + "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.3.1 - jest-mock: ^29.3.1 - jest-util: ^29.3.1 - checksum: b1dafa8cdc439ef428cd772c775f0b22703677f52615513eda11a104bbfc352d7ec69b1225db95d4ef2e1b4ef0f23e1a7d96de5313aeb0950f672e6548ae069d + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: adaceb9143c395cccf3d7baa0e49b7042c3092a554e8283146df19926247e34c21b5bde5688bb90e9e87b4a02e4587926c5d858ee0a38d397a63175d0a127874 languageName: node linkType: hard -"@jest/globals@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/globals@npm:29.3.1" +"@jest/globals@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/globals@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/expect": ^29.3.1 - "@jest/types": ^29.3.1 - jest-mock: ^29.3.1 - checksum: 4d2b9458aabf7c28fd167e53984477498c897b64eec67a7f84b8fff465235cae1456ee0721cb0e7943f0cda443c7656adb9801f9f34e27495b8ebbd9f3033100 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/types": ^29.4.3 + jest-mock: ^29.4.3 + checksum: ea76b546ceb4aa5ce2bb3726df12f989b23150b51c9f7664790caa81b943012a657cf3a8525498af1c3518cdb387f54b816cfba1b0ddd22c7b20f03b1d7290b4 languageName: node linkType: hard -"@jest/reporters@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/reporters@npm:29.3.1" +"@jest/reporters@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/reporters@npm:29.4.3" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -10951,9 +10951,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 - jest-worker: ^29.3.1 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -10963,7 +10963,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 + checksum: 7aa2e429c915bd96c3334962addd69d2bbf52065725757ddde26b293f8c4420a1e8c65363cc3e1e5ec89100a5273ccd3771bec58325a2cc0d97afdc81995073a languageName: node linkType: hard @@ -10976,70 +10976,70 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.0.0": - version: 29.0.0 - resolution: "@jest/schemas@npm:29.0.0" +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd languageName: node linkType: hard -"@jest/source-map@npm:^29.2.0": - version: 29.2.0 - resolution: "@jest/source-map@npm:29.2.0" +"@jest/source-map@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/source-map@npm:29.4.3" dependencies: "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 graceful-fs: ^4.2.9 - checksum: 09f76ab63d15dcf44b3035a79412164f43be34ec189575930f1a00c87e36ea0211ebd6a4fbe2253c2516e19b49b131f348ddbb86223ca7b6bbac9a6bc76ec96e + checksum: 2301d225145f8123540c0be073f35a80fd26a2f5e59550fd68525d8cea580fb896d12bf65106591ffb7366a8a19790076dbebc70e0f5e6ceb51f81827ed1f89c languageName: node linkType: hard -"@jest/test-result@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/test-result@npm:29.3.1" +"@jest/test-result@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-result@npm:29.4.3" dependencies: - "@jest/console": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/types": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: b24ac283321189b624c372a6369c0674b0ee6d9e3902c213452c6334d037113718156b315364bee8cee0f03419c2bdff5e2c63967193fb422830e79cbb26866a + checksum: 164f102b96619ec283c2c39e208b8048e4674f75bf3c3a4f2e95048ae0f9226105add684b25f10d286d91c221625f877e2c1cfc3da46c42d7e1804da239318cb languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/test-sequencer@npm:29.3.1" +"@jest/test-sequencer@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-sequencer@npm:29.4.3" dependencies: - "@jest/test-result": ^29.3.1 + "@jest/test-result": ^29.4.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 + jest-haste-map: ^29.4.3 slash: ^3.0.0 - checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 + checksum: 145e1fa9379e5be3587bde6d585b8aee5cf4442b06926928a87e9aec7de5be91b581711d627c6ca13144d244fe05e5d248c13b366b51bedc404f9dcfbfd79e9e languageName: node linkType: hard -"@jest/transform@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/transform@npm:29.3.1" +"@jest/transform@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/transform@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-util: ^29.3.1 + jest-haste-map: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-util: ^29.4.3 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: 673df5900ffc95bc811084e09d6e47948034dea6ab6cc4f81f80977e3a52468a6c2284d0ba9796daf25a62ae50d12f7e97fc9a3a0c587f11f2a479ff5493ca53 + write-file-atomic: ^4.0.2 + checksum: 082d74e04044213aa7baa8de29f8383e5010034f867969c8602a2447a4ef2f484cfaf2491eba3179ce42f369f7a0af419cbd087910f7e5caf7aa5d1fe03f2ff9 languageName: node linkType: hard @@ -11070,17 +11070,17 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/types@npm:29.3.1" +"@jest/types@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/types@npm:29.4.3" dependencies: - "@jest/schemas": ^29.0.0 + "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 + checksum: 1756f4149d360f98567f56f434144f7af23ed49a2c42889261a314df6b6654c2de70af618fb2ee0ee39cadaf10835b885845557184509503646c9cb9dcc02bac languageName: node linkType: hard @@ -13191,6 +13191,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.23 + resolution: "@sinclair/typebox@npm:0.25.23" + checksum: 5720daec6e604be9ac849e6361cfa30d19f4d01934c9b79a3a5f5290dfcefaa300192ea0d384bb5dd0104432d88447bbad27adfacdf0b0f042b510bf15fbd5db + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.0.0": version: 4.0.0 resolution: "@sindresorhus/is@npm:4.0.0" @@ -13216,6 +13223,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.0.2 + resolution: "@sinonjs/fake-timers@npm:10.0.2" + dependencies: + "@sinonjs/commons": ^2.0.0 + checksum: c62aa98e7cefda8dedc101ce227abc888dc46b8ff9706c5f0a8dfd9c3ada97d0a5611384738d9ba0b26b59f99c2ba24efece8e779bb08329e9e87358fa309824 + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:^7.0.4": version: 7.1.2 resolution: "@sinonjs/fake-timers@npm:7.1.2" @@ -14657,12 +14673,12 @@ __metadata: linkType: hard "@types/jest@npm:*, @types/jest@npm:^29.0.0": - version: 29.2.6 - resolution: "@types/jest@npm:29.2.6" + version: 29.4.0 + resolution: "@types/jest@npm:29.4.0" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 90190ac830334af1470d255853f9621fe657e5030b4d96773fc1f884833cd303c76580b00c1b86dc38a8db94f1c7141d462190437a10af31852b8845a57c48ba + checksum: 23760282362a252e6690314584d83a47512d4cd61663e957ed3398ecf98195fe931c45606ee2f9def12f8ed7d8aa102d492ec42d26facdaf8b78094a31e6568e languageName: node linkType: hard @@ -17332,20 +17348,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.3.1": - version: 29.3.1 - resolution: "babel-jest@npm:29.3.1" +"babel-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-jest@npm:29.4.3" dependencies: - "@jest/transform": ^29.3.1 + "@jest/transform": ^29.4.3 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.2.0 + babel-preset-jest: ^29.4.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 + checksum: a1a95937adb5e717dbffc2eb9e583fa6d26c7e5d5b07bb492a2d7f68631510a363e9ff097eafb642ad642dfac9dc2b13872b584f680e166a4f0922c98ea95853 languageName: node linkType: hard @@ -17371,15 +17387,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.2.0": - version: 29.2.0 - resolution: "babel-plugin-jest-hoist@npm:29.2.0" +"babel-plugin-jest-hoist@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-plugin-jest-hoist@npm:29.4.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 368d271ceae491ae6b96cd691434859ea589fbe5fd5aead7660df75d02394077273c6442f61f390e9347adffab57a32b564d0fabcf1c53c4b83cd426cb644072 + checksum: c8702a6db6b30ec39dfb9f8e72b501c13895231ed80b15ed2648448f9f0c7b7cc4b1529beac31802ae655f63479a05110ca612815aa25fb1b0e6c874e1589137 languageName: node linkType: hard @@ -17518,15 +17534,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.2.0": - version: 29.2.0 - resolution: "babel-preset-jest@npm:29.2.0" +"babel-preset-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-preset-jest@npm:29.4.3" dependencies: - babel-plugin-jest-hoist: ^29.2.0 + babel-plugin-jest-hoist: ^29.4.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 1b09a2db968c36e064daf98082cfffa39c849b63055112ddc56fc2551fd0d4783897265775b1d2f8a257960a3339745de92e74feb01bad86d41c4cecbfa854fc + checksum: a091721861ea2f8d969ace8fe06570cff8f2e847dbc6e4800abacbe63f72131abde615ce0a3b6648472c97e55a5be7f8bf7ae381e2b194ad2fa1737096febcf5 languageName: node linkType: hard @@ -20760,10 +20776,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.3.1": - version: 29.3.1 - resolution: "diff-sequences@npm:29.3.1" - checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 languageName: node linkType: hard @@ -22672,16 +22688,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.3.1": - version: 29.3.1 - resolution: "expect@npm:29.3.1" +"expect@npm:^29.0.0, expect@npm:^29.4.3": + version: 29.4.3 + resolution: "expect@npm:29.4.3" dependencies: - "@jest/expect-utils": ^29.3.1 - jest-get-type: ^29.2.0 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 - checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 + "@jest/expect-utils": ^29.4.3 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + checksum: ff9dd8c50c0c6fd4b2b00f6dbd7ab0e2063fe1953be81a8c10ae1c005c7f5667ba452918e2efb055504b72b701a4f82575a081a0a7158efb16d87991b0366feb languageName: node linkType: hard @@ -26234,57 +26250,57 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-changed-files@npm:29.2.0" +"jest-changed-files@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-changed-files@npm:29.4.3" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: 8ad8290324db1de2ee3c9443d3e3fbfdcb6d72ec7054c5796be2854b2bc239dea38a7c797c8c9c2bd959f539d44305790f2f75b18f3046b04317ed77c7480cb1 + checksum: 9a70bd8e92b37e18ad26d8bea97c516f41119fb7046b4255a13c76d557b0e54fa0629726de5a093fadfd6a0a08ce45da65a57086664d505b8db4b3133133e141 languageName: node linkType: hard -"jest-circus@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-circus@npm:29.3.1" +"jest-circus@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-circus@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/expect": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.3.1 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-runtime: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 + jest-each: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 p-limit: ^3.1.0 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 + checksum: 2739bef9c888743b49ff3fe303131381618e5d2f250f613a91240d9c86e19e6874fc904cbd8bcb02ec9ec59a84e5dae4ffec929f0c6171e87ddbc05508a137f4 languageName: node linkType: hard -"jest-cli@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-cli@npm:29.3.1" +"jest-cli@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-cli@npm:29.4.3" dependencies: - "@jest/core": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/core": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-config: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -26294,34 +26310,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d + checksum: f4c9f6d76cde2c60a4169acbebb3f862728be03bcf3fe0077d2e55da7f9f3c3e9483cfa6e936832d35eabf96ee5ebf0300c4b0bd43cffff099801793466bfdd8 languageName: node linkType: hard -"jest-config@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-config@npm:29.3.1" +"jest-config@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-config@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.3.1 - "@jest/types": ^29.3.1 - babel-jest: ^29.3.1 + "@jest/test-sequencer": ^29.4.3 + "@jest/types": ^29.4.3 + babel-jest: ^29.4.3 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.3.1 - jest-environment-node: ^29.3.1 - jest-get-type: ^29.2.0 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-runner: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-circus: ^29.4.3 + jest-environment-node: ^29.4.3 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runner: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -26332,7 +26348,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe + checksum: 92f9a9c6850b18682cb01892774a33967472af23a5844438d8c68077d5f2a29b15b665e4e4db7de3d74002a6dca158cd5b2cb9f5debfd2cce5e1aee6c74e3873 languageName: node linkType: hard @@ -26357,72 +26373,72 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-diff@npm:29.3.1" +"jest-diff@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-diff@npm:29.4.3" dependencies: chalk: ^4.0.0 - diff-sequences: ^29.3.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 877fd1edffef6b319688c27b152e5b28e2bc4bcda5ce0ca90d7e137f9fafda4280bae25403d4c0bfd9806c2c0b15d966aa2dfaf5f9928ec8f1ccea7fa1d08ed6 languageName: node linkType: hard -"jest-docblock@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-docblock@npm:29.2.0" +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" dependencies: detect-newline: ^3.0.0 - checksum: b3f1227b7d73fc9e4952180303475cf337b36fa65c7f730ac92f0580f1c08439983262fee21cf3dba11429aa251b4eee1e3bc74796c5777116b400d78f9d2bbe + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df languageName: node linkType: hard -"jest-each@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-each@npm:29.3.1" +"jest-each@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-each@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 chalk: ^4.0.0 - jest-get-type: ^29.2.0 - jest-util: ^29.3.1 - pretty-format: ^29.3.1 - checksum: 16d51ef8f96fba44a3479f1c6f7672027e3b39236dc4e41217c38fe60a3b66b022ffcee72f8835a442f7a8a0a65980a93fb8e73a9782d192452526e442ad049a + jest-get-type: ^29.4.3 + jest-util: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 1f72738338399efab0139eaea18bc198be0c6ed889770c8cbfa70bf9c724e8171fe1d3a29a94f9f39b8493ee6b2529bb350fb7c7c75e0d7eddfd28c253c79f9d languageName: node linkType: hard "jest-environment-jsdom@npm:^29.0.2": - version: 29.3.1 - resolution: "jest-environment-jsdom@npm:29.3.1" + version: 29.4.3 + resolution: "jest-environment-jsdom@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.3.1 - jest-util: ^29.3.1 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 91b04ed02b2275c3a47740e20c2691f67c4295e17174c8ccd3a71fe77707239e487506bd157279b4257ce1be0a8c2be377817ee85689966a9e604bb6ef1199f0 + checksum: 3fb29bb4b472e05a38fdb235aa936ad469dfa2f6c1cab97fe3d1a7c585351976d05c7bbbd715b9747f070a225dcf10a9166df1461e0fb838ea7a377a8e64bed4 languageName: node linkType: hard -"jest-environment-node@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-environment-node@npm:29.3.1" +"jest-environment-node@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-environment-node@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.3.1 - jest-util: ^29.3.1 - checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: 3c7362edfdbd516e83af7367c95dde35761a482b174de9735c07633405486ec73e19624e9bea4333fca33c24e8d65eaa1aa6594e0cb6bfeeeb564ccc431ee61d languageName: node linkType: hard @@ -26433,43 +26449,43 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-get-type@npm:29.2.0" - checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce languageName: node linkType: hard -"jest-haste-map@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-haste-map@npm:29.3.1" +"jest-haste-map@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-haste-map@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^29.2.0 - jest-util: ^29.3.1 - jest-worker: ^29.3.1 + jest-regex-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 97ea26af0c28a2ba568c9c65d06211487bbcd501cb4944f9d55e07fd2b00ad96653ea2cc9033f3d5b7dc1feda33e47ae9cc56b400191ea4533be213c9f82e67c + checksum: c7a83ebe6008b3fe96a96235e8153092e54b14df68e0f4205faedec57450df26b658578495a71c6d82494c01fbb44bca98c1506a6b2b9c920696dcc5d2e2bc59 languageName: node linkType: hard -"jest-leak-detector@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-leak-detector@npm:29.3.1" +"jest-leak-detector@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-leak-detector@npm:29.4.3" dependencies: - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: ec2b45e6f0abce81bd0dd0f6fd06b433c24d1ec865267af7640fae540ec868b93752598e407a9184d9c7419cbf32e8789007cc8c1be1a84f8f7321a0f8ad01f1 languageName: node linkType: hard @@ -26485,15 +26501,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-matcher-utils@npm:29.3.1" +"jest-matcher-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-matcher-utils@npm:29.4.3" dependencies: chalk: ^4.0.0 - jest-diff: ^29.3.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 + jest-diff: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 9e13cbe42d2113bab2691110c7c3ba5cec3b94abad2727e1de90929d0f67da444e9b2066da3b476b5bf788df53a8ede0e0a950cfb06a04e4d6d566d115ee4f1d languageName: node linkType: hard @@ -26514,31 +26530,31 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-message-util@npm:29.3.1" +"jest-message-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-message-util@npm:29.4.3" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b + checksum: 64f06b9550021e68da0059020bea8691283cf818918810bb67192d7b7fb9b691c7eadf55c2ca3cd04df5394918f2327245077095cdc0d6b04be3532d2c7d0ced languageName: node linkType: hard -"jest-mock@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-mock@npm:29.3.1" +"jest-mock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-mock@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-util: ^29.3.1 - checksum: 9098852cb2866db4a1a59f9f7581741dfc572f648e9e574a1b187fd69f5f2f6190ad387ede21e139a8b80a6a1343ecc3d6751cd2ae1ae11d7ea9fa1950390fb2 + jest-util: ^29.4.3 + checksum: 8eb4a29b02d2cd03faac0290b6df6d23b4ffa43f72b21c7fff3c7dd04a2797355b1e85862b70b15341dd33ee3a693b17db5520a6f6e6b81ee75601987de6a1a2 languageName: node linkType: hard @@ -26554,102 +26570,102 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-regex-util@npm:29.2.0" - checksum: 7c533e51c51230dac20c0d7395b19b8366cb022f7c6e08e6bcf2921626840ff90424af4c9b4689f02f0addfc9b071c4cd5f8f7a989298a4c8e0f9c94418ca1c3 +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-resolve-dependencies@npm:29.3.1" +"jest-resolve-dependencies@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve-dependencies@npm:29.4.3" dependencies: - jest-regex-util: ^29.2.0 - jest-snapshot: ^29.3.1 - checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 3ad934cd2170c9658d8800f84a975dafc866ec85b7ce391c640c09c3744ced337787620d8667dc8d1fa5e0b1493f973caa1a1bb980e4e6a50b46a1720baf0bd1 languageName: node linkType: hard -"jest-resolve@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-resolve@npm:29.3.1" +"jest-resolve@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve@npm:29.4.3" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 + jest-haste-map: ^29.4.3 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 resolve: ^1.20.0 - resolve.exports: ^1.1.0 + resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 0dea22ed625e07b8bfee52dea1391d3a4b453c1a0c627a0fa7c22e44bb48e1c289afe6f3c316def70753773f099c4e8f436c7a2cc12fcc6c7dd6da38cba2cd5f + checksum: 056a66beccf833f3c7e5a8fc9bfec218886e87b0b103decdbdf11893669539df489d1490cd6d5f0eea35731e8be0d2e955a6710498f970d2eae734da4df029dc languageName: node linkType: hard -"jest-runner@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-runner@npm:29.3.1" +"jest-runner@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runner@npm:29.4.3" dependencies: - "@jest/console": ^29.3.1 - "@jest/environment": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/environment": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^29.2.0 - jest-environment-node: ^29.3.1 - jest-haste-map: ^29.3.1 - jest-leak-detector: ^29.3.1 - jest-message-util: ^29.3.1 - jest-resolve: ^29.3.1 - jest-runtime: ^29.3.1 - jest-util: ^29.3.1 - jest-watcher: ^29.3.1 - jest-worker: ^29.3.1 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-leak-detector: ^29.4.3 + jest-message-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runtime: ^29.4.3 + jest-util: ^29.4.3 + jest-watcher: ^29.4.3 + jest-worker: ^29.4.3 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 + checksum: c41108e5da01e0b8fdc2a06c5042eb49bb1d8db0e0d4651769fd1b9fe84ab45188617c11a3a8e1c83748b29bfe57dd77001ec57e86e3e3c30f3534e0314f8882 languageName: node linkType: hard -"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-runtime@npm:29.3.1" +"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runtime@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/globals": ^29.3.1 - "@jest/source-map": ^29.2.0 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/globals": ^29.4.3 + "@jest/source-map": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 - jest-message-util: ^29.3.1 - jest-mock: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 82f27b48f000be074064a854e16e768f9453e9b791d8c5f9316606c37f871b5b10f70544c1b218ab9784f00bd972bb77f868c5ab6752c275be2cd219c351f5a7 + checksum: b99f8a910d1a38e7476058ba04ad44dfd3d93e837bb7c301d691e646a1085412fde87f06fbe271c9145f0e72d89400bfa7f6994bc30d456c7742269f37d0f570 languageName: node linkType: hard -"jest-snapshot@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-snapshot@npm:29.3.1" +"jest-snapshot@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-snapshot@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -26657,25 +26673,25 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/expect-utils": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.3.1 + expect: ^29.4.3 graceful-fs: ^4.2.9 - jest-diff: ^29.3.1 - jest-get-type: ^29.2.0 - jest-haste-map: ^29.3.1 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 + jest-diff: ^29.4.3 + jest-get-type: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 natural-compare: ^1.4.0 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 semver: ^7.3.5 - checksum: d7d0077935e78c353c828be78ccb092e12ba7622cb0577f21641fadd728ae63a7c1f4a0d8113bfb38db3453a64bfa232fb1cdeefe0e2b48c52ef4065b0ab75ae + checksum: 79ba52f2435e23ce72b1309be4b17fdbcb299d1c2ce97ebb61df9a62711e9463035f63b4c849181b2fe5aa17b3e09d30ee4668cc25fb3c6f59511c010b4d9494 languageName: node linkType: hard @@ -26693,47 +26709,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-util@npm:29.3.1" +"jest-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-util@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 + checksum: 606b3e6077895baf8fb4ad4d08c134f37a6b81d5ba77ae654c942b1ae4b7294ab3b5a0eb93db34f129407b367970cf3b76bf5c80897b30f215f2bc8bf20a5f3f languageName: node linkType: hard -"jest-validate@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-validate@npm:29.3.1" +"jest-validate@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-validate@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^29.2.0 + jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^29.3.1 - checksum: 92584f0b8ac284235f12b3b812ccbc43ef6dea080a3b98b1aa81adbe009e962d0aa6131f21c8157b30ac3d58f335961694238a93d553d1d1e02ab264c923778c + pretty-format: ^29.4.3 + checksum: 983e56430d86bed238448cae031535c1d908f760aa312cd4a4ec0e92f3bc1b6675415ddf57cdeceedb8ad9c698e5bcd10f0a856dfc93a8923bdecc7733f4ba80 languageName: node linkType: hard -"jest-watcher@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-watcher@npm:29.3.1" +"jest-watcher@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-watcher@npm:29.4.3" dependencies: - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.3.1 + jest-util: ^29.4.3 string-length: ^4.0.1 - checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 + checksum: 44b64991b3414db853c3756f14690028f4edef7aebfb204a4291cc1901c2239fa27a8687c5c5abbecc74bf613e0bb9b1378bf766430c9febcc71e9c0cb5ad8fc languageName: node linkType: hard @@ -26768,26 +26784,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-worker@npm:29.3.1" +"jest-worker@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-worker@npm:29.4.3" dependencies: "@types/node": "*" - jest-util: ^29.3.1 + jest-util: ^29.4.3 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 + checksum: c99ae66f257564613e72c5797c3a68f21a22e1c1fb5f30d14695ff5b508a0d2405f22748f13a3df8d1015b5e16abb130170f81f047ff68f58b6b1d2ff6ebc51b languageName: node linkType: hard "jest@npm:^29.0.2": - version: 29.3.1 - resolution: "jest@npm:29.3.1" + version: 29.4.3 + resolution: "jest@npm:29.4.3" dependencies: - "@jest/core": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/core": ^29.4.3 + "@jest/types": ^29.4.3 import-local: ^3.0.2 - jest-cli: ^29.3.1 + jest-cli: ^29.4.3 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -26795,7 +26811,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a + checksum: 084d10d1ceaade3c40e6d3bbd71b9b71b8919ba6fbd6f1f6699bdc259a6ba2f7350c7ccbfa10c11f7e3e01662853650a6244210179542fe4ba87e77dc3f3109f languageName: node linkType: hard @@ -32441,14 +32457,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.3.1": - version: 29.3.1 - resolution: "pretty-format@npm:29.3.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.4.3": + version: 29.4.3 + resolution: "pretty-format@npm:29.4.3" dependencies: - "@jest/schemas": ^29.0.0 + "@jest/schemas": ^29.4.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e + checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 languageName: node linkType: hard @@ -34209,10 +34225,10 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve.exports@npm:1.1.0" - checksum: 52865af8edb088f6c7759a328584a5de6b226754f004b742523adcfe398cfbc4559515104bc2ae87b8e78b1e4de46c9baec400b3fb1f7d517b86d2d48a098a2d +"resolve.exports@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve.exports@npm:2.0.0" + checksum: d8bee3b0cc0a0ae6c8323710983505bc6a3a2574f718e96f01e048a0f0af035941434b386cc9efc7eededc5e1199726185c306ec6f6a1aa55d5fbad926fd0634 languageName: node linkType: hard @@ -38738,7 +38754,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.1": +"write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.2": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" dependencies: From 9133a425f943d1cd0879e17adb9f0b27e46e0126 Mon Sep 17 00:00:00 2001 From: Taras Date: Mon, 27 Feb 2023 19:04:10 -0500 Subject: [PATCH 02/43] Add .eslintignore with **/public/** to create-app template Signed-off-by: Taras --- packages/create-app/templates/default-app/.eslintignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/create-app/templates/default-app/.eslintignore diff --git a/packages/create-app/templates/default-app/.eslintignore b/packages/create-app/templates/default-app/.eslintignore new file mode 100644 index 0000000000..ab944bd199 --- /dev/null +++ b/packages/create-app/templates/default-app/.eslintignore @@ -0,0 +1 @@ +**/public/** From 6ace2dd2c58d810c994358cfacfdd9338cfeb21f Mon Sep 17 00:00:00 2001 From: Taras Date: Mon, 27 Feb 2023 19:06:20 -0500 Subject: [PATCH 03/43] Added changeset Signed-off-by: Taras --- .changeset/witty-squids-fetch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/witty-squids-fetch.md diff --git a/.changeset/witty-squids-fetch.md b/.changeset/witty-squids-fetch.md new file mode 100644 index 0000000000..d48944f336 --- /dev/null +++ b/.changeset/witty-squids-fetch.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Add .eslintignore with **/public/** to prevent checking JS files From 4acd93dae1dd1cad4770f6334681648a060d83cd Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Wed, 1 Mar 2023 12:32:06 -0500 Subject: [PATCH 04/43] Pass `logLevel` to `http-proxy-middleware` Under the hood, `http-proxy-middleware` checks its log level to see if it should log requests. Passing in the log level ensures that we see those messages when we run with `LOG_LEVEL=debug`. Signed-off-by: Boris Bera --- .changeset/twenty-insects-live.md | 5 +++++ plugins/proxy-backend/src/service/router.ts | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 .changeset/twenty-insects-live.md diff --git a/.changeset/twenty-insects-live.md b/.changeset/twenty-insects-live.md new file mode 100644 index 0000000000..c20d3ee08d --- /dev/null +++ b/.changeset/twenty-insects-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-proxy-backend': patch +--- + +Pass the current log level to `http-proxy-middleware` to ensure that proxies requests are shown when log level is set to `debug`. diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index b669e82f3f..3a646f2724 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -63,6 +63,12 @@ export interface ProxyConfig extends Options { reviveRequestBody?: boolean; } +function isValidHttpProxyMiddlewareLogLevel( + level: string, +): level is Exclude { + return ['debug', 'info', 'warn', 'error', 'silent'].includes(level); +} + // Creates a proxy middleware, possibly with defaults added on top of the // given config. export function buildMiddleware( @@ -121,6 +127,9 @@ export function buildMiddleware( // Attach the logger to the proxy config fullConfig.logProvider = () => logger; + if (isValidHttpProxyMiddlewareLogLevel(logger.level)) { + fullConfig.logLevel = logger.level; + } // Only return the allowed HTTP headers to not forward unwanted secret headers const requestHeaderAllowList = new Set( From 9c95f91c0a6bceed68814c2af99712a496151e25 Mon Sep 17 00:00:00 2001 From: Paul Schultz Date: Wed, 1 Mar 2023 13:30:38 -0600 Subject: [PATCH 05/43] Add titles to codeblocks and switch from diff codeblock to language codeblock Signed-off-by: Paul Schultz --- docs/auth/cloudflare/access.md | 18 +- docs/auth/google/gcp-iap-auth.md | 18 +- docs/auth/index.md | 118 +++-- docs/auth/microsoft/azure-easyauth.md | 16 +- docs/auth/oauth2-proxy/provider.md | 18 +- docs/auth/oidc.md | 110 ++-- docs/auth/service-to-service-auth.md | 8 +- .../building-backends/08-migrating.md | 292 ++++++----- docs/features/kubernetes/installation.md | 120 +++-- docs/features/search/how-to-guides.md | 126 +++-- .../software-catalog/catalog-customization.md | 26 +- .../software-catalog/extending-the-model.md | 19 +- .../software-catalog/external-integrations.md | 61 ++- .../software-templates/builtin-actions.md | 23 +- .../migrating-from-v1beta2-to-v1beta3.md | 202 +++---- .../testing-scaffolder-alpha.md | 122 +++-- docs/features/techdocs/getting-started.md | 26 +- docs/getting-started/app-custom-theme.md | 180 +++---- docs/getting-started/configuration.md | 42 +- .../configure-app-with-plugins.md | 45 +- docs/getting-started/homepage.md | 53 +- docs/integrations/azure/discovery.md | 55 +- docs/integrations/azure/org.md | 63 ++- docs/integrations/bitbucketCloud/discovery.md | 106 ++-- .../integrations/bitbucketServer/discovery.md | 48 +- docs/integrations/github/discovery.md | 168 +++--- docs/integrations/github/org.md | 115 ++-- docs/integrations/gitlab/discovery.md | 29 +- docs/integrations/ldap/org.md | 48 +- docs/permissions/custom-rules.md | 41 +- docs/permissions/frontend-integration.md | 42 +- docs/permissions/getting-started.md | 163 +++--- docs/permissions/plugin-authors/01-setup.md | 45 +- .../02-adding-a-basic-permission-check.md | 492 ++++++++++-------- .../03-adding-a-resource-permission-check.md | 248 +++++---- ...04-authorizing-access-to-paginated-data.md | 203 ++++---- .../05-frontend-authorization.md | 291 ++++++----- docs/permissions/writing-a-policy.md | 123 +++-- docs/tutorials/migrating-away-from-core.md | 11 +- .../react-router-stable-migration.md | 46 +- docs/tutorials/switching-sqlite-postgres.md | 86 +-- docs/tutorials/yarn-migration.md | 17 +- microsite-next/docusaurus.config.js | 23 + microsite-next/src/css/customTheme.css | 20 + 44 files changed, 2257 insertions(+), 1869 deletions(-) diff --git a/docs/auth/cloudflare/access.md b/docs/auth/cloudflare/access.md index d47495180a..05663aca30 100644 --- a/docs/auth/cloudflare/access.md +++ b/docs/auth/cloudflare/access.md @@ -38,7 +38,7 @@ add the provider itself. Add a `providerFactories` entry to the router in `packages/backend/plugin/auth.ts`. -```ts +```ts title="packages/backend/plugin/auth.ts" import { providers } from '@backstage/plugin-auth-backend'; export default async function createPlugin( @@ -89,12 +89,18 @@ the user's behalf. It is recommended to use the `ProxiedSignInPage` for this provider, which is installed in `packages/app/src/App.tsx` like this: -```diff -+import { ProxiedSignInPage } from '@backstage/core-components'; +```tsx title="packages/app/src/App.tsx" +/* highlight-add-next-line */ +import { ProxiedSignInPage } from '@backstage/core-components'; - const app = createApp({ - components: { -+ SignInPage: props => , +const app = createApp({ + /* highlight-add-start */ + components: { + SignInPage: props => , + }, + /* highlight-add-end */ + // .. +}) ``` See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page to also work smoothly for local development. diff --git a/docs/auth/google/gcp-iap-auth.md b/docs/auth/google/gcp-iap-auth.md index 36eece85c5..138d795f0f 100644 --- a/docs/auth/google/gcp-iap-auth.md +++ b/docs/auth/google/gcp-iap-auth.md @@ -45,7 +45,7 @@ callbacks in actual code as well as described below. Add a `providerFactories` entry to the router in `packages/backend/src/plugins/auth.ts`. -```ts +```ts title="packages/backend/src/plugins/auth.ts" import { providers } from '@backstage/plugin-auth-backend'; import { stringifyEntityRef } from '@backstage/catalog-model'; @@ -99,12 +99,18 @@ sign-in mechanism to poll that endpoint through the IAP, on the user's behalf. It is recommended to use the `ProxiedSignInPage` for this provider, which is installed in `packages/app/src/App.tsx` like this: -```diff -+import { ProxiedSignInPage } from '@backstage/core-components'; +```tsx title="packages/app/src/App.tsx" +/* highlight-add-next-line */ +import { ProxiedSignInPage } from '@backstage/core-components'; - const app = createApp({ - components: { -+ SignInPage: props => , +const app = createApp({ + /* highlight-add-start */ + components: { + SignInPage: props => , + }, + /* highlight-add-end */ + // .. +}) ``` See the [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) section for more information. diff --git a/docs/auth/index.md b/docs/auth/index.md index 8e15830aa8..7f4511af24 100644 --- a/docs/auth/index.md +++ b/docs/auth/index.md @@ -84,49 +84,55 @@ which takes either a `provider` or `providers` (array) prop of `SignInProviderCo The following example for GitHub shows the additions needed to `packages/app/src/App.tsx`, and can be adapted to any of the built-in providers: -```diff -+ import { githubAuthApiRef } from '@backstage/core-plugin-api'; -+ import { SignInPage } from '@backstage/core-components'; +```tsx title="packages/app/src/App.tsx" +/* highlight-add-start */ +import { githubAuthApiRef } from '@backstage/core-plugin-api'; +import { SignInPage } from '@backstage/core-components'; +/* highlight-add-end */ - const app = createApp({ - apis, -+ components: { -+ SignInPage: props => ( -+ -+ ), -+ }, - bindRoutes({ bind }) { +const app = createApp({ + /* highlight-add-start */ + components: { + SignInPage: props => ( + + ), + }, + /* highlight-add-end */ + // .. +}); ``` You can also use the `providers` prop to enable multiple sign-in methods, for example allows allowing guest access: -```diff - const app = createApp({ - apis, -+ components: { -+ SignInPage: props => ( -+ -+ ), -+ }, - bindRoutes({ bind }) { +```tsx title="packages/app/src/App.tsx" +const app = createApp({ + /* highlight-add-start */ + components: { + SignInPage: props => ( + + ), + }, + /* highlight-add-end */ + // .. +}); ``` ## Sign-In with Proxy Providers @@ -142,12 +148,12 @@ All the sign-in page needs to do is to call the `/refresh` endpoint of the auth to get the existing session, which is exactly what the `ProxiedSignInPage` does. The only thing you need to do to configure the `ProxiedSignInPage` is to pass the ID of the provider like this: -```tsx +```tsx title="packages/app/src/App.tsx" const app = createApp({ - ..., components: { SignInPage: props => , }, + // .. }); ``` @@ -159,6 +165,7 @@ Example: ``` @@ -169,10 +176,12 @@ Headers can also be returned in an async manner: { const someValue = await someFn(); return { 'x-some-key': someValue }; }} + /* highlight-end */ /> ``` @@ -184,9 +193,8 @@ select the sign-in method based on the `process.env.NODE_ENV` environment variab by checking the `hostname` of the current location, or by accessing the configuration API to read a configuration value. For example: -```tsx +```tsx title="packages/app/src/App.tsx" const app = createApp({ - ..., components: { SignInPage: props => { const configApi = useApi(configApiRef); @@ -206,6 +214,7 @@ const app = createApp({ return ; }, }, + // .. }); ``` @@ -218,7 +227,7 @@ If you want to use the authentication capabilities of the [Repository Picker](.. To set it up, you'll need to add an API factory entry to `packages/app/src/apis.ts`. The example below sets up the `ScmAuthApi` for an already configured GitLab authentication provider: -```ts +```ts title="packages/app/src/apis.ts" createApiFactory({ api: scmAuthApiRef, deps: { @@ -294,23 +303,24 @@ If you require only a subset of these integrations, then you will need a custom The first step is to remove the code that creates the default providers. -```diff - import { - ScmIntegrationsApi, - scmIntegrationsApiRef, -+ ScmAuth, - } from '@backstage/integration-react'; +```ts title="packages/app/src/apis.ts" +import { + ScmIntegrationsApi, + scmIntegrationsApiRef, + /* highlight-add-next-line */ + ScmAuth, +} from '@backstage/integration-react'; - export const apis: AnyApiFactory[] = [ -... -+ ScmAuth.createDefaultApiFactory(), -... - ]; +export const apis: AnyApiFactory[] = [ + /* highlight-add-next-line */ + ScmAuth.createDefaultApiFactory(), + // ... +]; ``` Then replace it with something like this, which will create an `ApiFactory` with only a github provider. -```ts +```ts title="packages/app/src/apis.ts" export const apis: AnyApiFactory[] = [ createApiFactory({ api: scmAuthApiRef, diff --git a/docs/auth/microsoft/azure-easyauth.md b/docs/auth/microsoft/azure-easyauth.md index 3571a3e5c5..fb0b897760 100644 --- a/docs/auth/microsoft/azure-easyauth.md +++ b/docs/auth/microsoft/azure-easyauth.md @@ -60,12 +60,18 @@ sign-in mechanism to poll that endpoint through the IAP, on the user's behalf. It is recommended to use the `ProxiedSignInPage` for this provider, which is installed in `packages/app/src/App.tsx` like this: -```diff -+import { ProxiedSignInPage } from '@backstage/core-components'; +```tsx title="packages/app/src/App.tsx" +/* highlight-add-next-line */ +import { ProxiedSignInPage } from '@backstage/core-components'; - const app = createApp({ - components: { -+ SignInPage: props => , +const app = createApp({ + /* highlight-add-start */ + components: { + SignInPage: props => , + }, + /* highlight-add-end */ + // .. +}) ``` See the [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) section for more information. diff --git a/docs/auth/oauth2-proxy/provider.md b/docs/auth/oauth2-proxy/provider.md index ca3c40f5db..e3b5e89633 100644 --- a/docs/auth/oauth2-proxy/provider.md +++ b/docs/auth/oauth2-proxy/provider.md @@ -18,7 +18,7 @@ for more details check this The provider configuration can be added to your `app-config.yaml` under the root `auth` configuration: -```yaml +```yaml title="app-config.yaml" auth: providers: oauth2Proxy: {} @@ -63,12 +63,18 @@ providerFactories: { It is recommended to use the `ProxiedSignInPage` for this provider, which is installed in `packages/app/src/App.tsx` like this: -```diff -+import { ProxiedSignInPage } from '@backstage/core-components'; +```tsx title="packages/app/src/App.tsx" +/* highlight-add-next-line */ +import { ProxiedSignInPage } from '@backstage/core-components'; - const app = createApp({ - components: { -+ SignInPage: props => , +const app = createApp({ + /* highlight-add-start */ + components: { + SignInPage: props => , + }, + /* highlight-add-end */ + // .. +}) ``` See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page to also work smoothly for local development. diff --git a/docs/auth/oidc.md b/docs/auth/oidc.md index d915262eb7..0a9e4417ed 100644 --- a/docs/auth/oidc.md +++ b/docs/auth/oidc.md @@ -77,34 +77,39 @@ the instance is cached by the DI library, a singleton. Let's add our OIDC API factory to the APIs array in the `packages/app/src/apis.ts` file: -```diff -+ import { OAuth2 } from '@backstage/core-app-api'; +```ts title="packages/app/src/apis.ts" +/* highlight-add-next-line */ +import { OAuth2 } from '@backstage/core-app-api'; export const apis: AnyApiFactory[] = [ -+ createApiFactory({ -+ api: azureOIDCAuthApiRef, -+ deps: { -+ discoveryApi: discoveryApiRef, -+ oauthRequestApi: oauthRequestApiRef, -+ configApi: configApiRef, -+ }, -+ factory: ({ discoveryApi, oauthRequestApi, configApi }) => -+ OAuth2.create({ -+ discoveryApi, -+ oauthRequestApi, -+ provider: { -+ id: 'my-auth-provider', -+ title: 'My custom auth provider', -+ icon: () => null, -+ }, -+ environment: configApi.getOptionalString('auth.environment'), -+ defaultScopes: [ -+ 'openid', -+ 'profile', -+ 'email', -+ ], -+ }), -+ }), + /* highlight-add-start */ + createApiFactory({ + api: azureOIDCAuthApiRef, + deps: { + discoveryApi: discoveryApiRef, + oauthRequestApi: oauthRequestApiRef, + configApi: configApiRef, + }, + factory: ({ discoveryApi, oauthRequestApi, configApi }) => + OAuth2.create({ + discoveryApi, + oauthRequestApi, + provider: { + id: 'my-auth-provider', + title: 'My custom auth provider', + icon: () => null, + }, + environment: configApi.getOptionalString('auth.environment'), + defaultScopes: [ + 'openid', + 'profile', + 'email', + ], + }), + }), + /* highlight-add-end */ + // .. +] ``` @@ -125,7 +130,7 @@ the ID you picked to represent the Auth provider, this ID has to match with the callback URI provider segment (you'll have to configure your IDP to handle the callback URI properly). -```diff +```ts export default async function createPlugin( env: PluginEnvironment, ): Promise { @@ -137,9 +142,11 @@ export default async function createPlugin( tokenManager: env.tokenManager, providerFactories: { ...defaultAuthProviderFactories, -+ 'my-auth-provider': providers.oidc.create({ -+ }), - } + /* highlight-add-next-line */ + 'my-auth-provider': providers.oidc.create({}), + }, + // .. +}) ``` ### The Resolver @@ -154,10 +161,11 @@ adding a resolver for a SignIn request. The OIDC provider doesn't provide any build-in resolvers, so we'll need to define our own: -```diff +```ts import { DEFAULT_NAMESPACE, -+ stringifyEntityRef, + /* highlight-add-next-line */ + stringifyEntityRef, } from '@backstage/catalog-model'; export default async function createPlugin( @@ -172,23 +180,27 @@ export default async function createPlugin( providerFactories: { ...defaultAuthProviderFactories, 'my-auth-provider': providers.oidc.create({ -+ signIn: { -+ resolver(info, ctx) { -+ const userRef = stringifyEntityRef({ -+ kind: 'User', -+ name: info.result.userinfo.sub, -+ namespace: DEFAULT_NAMESPACE, -+ }); -+ return ctx.issueToken({ -+ claims: { -+ sub: userRef, // The user's own identity -+ ent: [userRef], // A list of identities that the user claims ownership through -+ }, -+ }); -+ }, -+ }, + /* highlight-add-start */ + signIn: { + resolver(info, ctx) { + const userRef = stringifyEntityRef({ + kind: 'User', + name: info.result.userinfo.sub, + namespace: DEFAULT_NAMESPACE, + }); + return ctx.issueToken({ + claims: { + sub: userRef, // The user's own identity + ent: [userRef], // A list of identities that the user claims ownership through + }, + }); + }, + }, + /* highlight-add-end */ }), - } + }, + // .. + }) ``` ### The configuration @@ -206,7 +218,7 @@ Then we need to configure the env variables for the provider, based on the provi in `plugins/auth-backend/src/providers/oidc/provider.ts` we need the following variables in the `app-config.yaml`: -```yaml +```yaml title="app-config.yaml" auth: environment: development ### Providing an auth.session.secret will enable session support in the auth-backend diff --git a/docs/auth/service-to-service-auth.md b/docs/auth/service-to-service-auth.md index 8d10fd7cc6..a667f391f5 100644 --- a/docs/auth/service-to-service-auth.md +++ b/docs/auth/service-to-service-auth.md @@ -23,9 +23,11 @@ that incoming requests are not validated. If you want to enable service-to-service auth, the first step is to switch out the following line in your backend setup at `packages/backend/src/index.ts`: -```diff -- const tokenManager = ServerTokenManager.noop(); -+ const tokenManager = ServerTokenManager.fromConfig(config, { logger: root }); +```ts title="packages/backend/src/index.ts" +/* highlight-remove-next-line */ +const tokenManager = ServerTokenManager.noop(); +/* highlight-add-next-line */ +const tokenManager = ServerTokenManager.fromConfig(config, { logger: root }); ``` By switching from the no-op `ServiceTokenManager` to one created from config, diff --git a/docs/backend-system/building-backends/08-migrating.md b/docs/backend-system/building-backends/08-migrating.md index 567476532f..358b6ae764 100644 --- a/docs/backend-system/building-backends/08-migrating.md +++ b/docs/backend-system/building-backends/08-migrating.md @@ -72,8 +72,7 @@ comment out its old contents, or renaming the old file to `index.backup.ts` for reference and making a new blank one to work on - whichever works best for you. These are our new blank contents in the index file: -```ts -// packages/backend/src/index.ts +```ts title="packages/backend/src/index.ts" import { createBackend } from '@backstage/backend-defaults'; const backend = createBackend(); @@ -95,13 +94,15 @@ backend start` command locally and seeing some logs scroll by. But it'll just be a blank service with no real features added. So let's stop it with `Ctrl+C` and reintroduce some plugins into the mix. -```diff - import { createBackend } from '@backstage/backend-defaults'; -+import { legacyPlugin } from '@backstage/backend-common'; +```ts title="packages/backend/src/index.ts" +import { createBackend } from '@backstage/backend-defaults'; +/* highlight-add-next-line */ +import { legacyPlugin } from '@backstage/backend-common'; - const backend = createBackend(); -+backend.add(legacyPlugin('todo', import('./plugins/todo'))); - backend.start(); +const backend = createBackend(); +/* highlight-add-next-line */ +backend.add(legacyPlugin('todo', import('./plugins/todo'))); +backend.start(); ``` The `todo` plugin used above is just an example and you may not have it enabled @@ -128,34 +129,39 @@ environment was changed from the defaults, perhaps with your own custom additions. If this is the case in your installation, you still aren't out of luck - you can build a customized `legacyPlugin` function. -```diff - import { createBackend } from '@backstage/backend-defaults'; --import { legacyPlugin } from '@backstage/backend-common'; -+import { makeLegacyPlugin, loggerToWinstonLogger } from '@backstage/backend-common'; -+import { coreServices } from '@backstage/backend-plugin-api'; +```ts title="packages/backend/src/index.ts" +import { createBackend } from '@backstage/backend-defaults'; +/* highlight-remove-next-line */ +import { legacyPlugin } from '@backstage/backend-common'; +/* highlight-add-start */ +import { makeLegacyPlugin, loggerToWinstonLogger } from '@backstage/backend-common'; +import { coreServices } from '@backstage/backend-plugin-api'; +/* highlight-add-end */ -+const legacyPlugin = makeLegacyPlugin( -+ { -+ cache: coreServices.cache, -+ config: coreServices.config, -+ database: coreServices.database, -+ discovery: coreServices.discovery, -+ logger: coreServices.logger, -+ permissions: coreServices.permissions, -+ scheduler: coreServices.scheduler, -+ tokenManager: coreServices.tokenManager, -+ reader: coreServices.urlReader, -+ identity: coreServices.identity, -+ // ... and your own additions -+ }, -+ { -+ logger: log => loggerToWinstonLogger(log), -+ }, -+); +/* highlight-add-start */ +const legacyPlugin = makeLegacyPlugin( + { + cache: coreServices.cache, + config: coreServices.config, + database: coreServices.database, + discovery: coreServices.discovery, + logger: coreServices.logger, + permissions: coreServices.permissions, + scheduler: coreServices.scheduler, + tokenManager: coreServices.tokenManager, + reader: coreServices.urlReader, + identity: coreServices.identity, + // ... and your own additions + }, + { + logger: log => loggerToWinstonLogger(log), + }, +); +/* highlight-add-end */ - const backend = createBackend(); - backend.add(legacyPlugin('todo', import('./plugins/todo'))); - backend.start(); +const backend = createBackend(); +backend.add(legacyPlugin('todo', import('./plugins/todo'))); +backend.start(); ``` The first argument to `makeLegacyPlugin` is the mapping from environment keys to @@ -177,13 +183,15 @@ in question. In this example, we'll assume that your added environment field is named `example`, and the created ref is named `exampleServiceRef`. -```diff -+import { exampleServiceRef } from ''; // if the definition is elsewhere +```ts title="packages/backend/src/index.ts" +/* highlight-add-next-line */ +import { exampleServiceRef } from ''; // if the definition is elsewhere const legacyPlugin = makeLegacyPlugin( { // ... the above core services still go here -+ example: exampleServiceRef + /* highlight-add-next-line */ + example: exampleServiceRef }, { logger: log => loggerToWinstonLogger(log), @@ -220,12 +228,13 @@ such migrations you can make. The app backend plugin that serves the frontend from the backend can trivially be used in its new form. -```diff - // packages/backend/src/index.ts -+import { appPlugin } from '@backstage/plugin-app-backend'; +```ts title="packages/backend/src/index.ts" +/* highlight-add-next-line */ +import { appPlugin } from '@backstage/plugin-app-backend'; - const backend = createBackend(); -+backend.add(appPlugin({ appPackageName: 'app' })); +const backend = createBackend(); +/* highlight-add-next-line */ +backend.add(appPlugin({ appPackageName: 'app' })); ``` This is an example of how options can be passed into some backend plugins. The @@ -239,14 +248,17 @@ You should be able to delete the `plugins/app.ts` file at this point. A basic installation of the catalog plugin looks as follows. -```diff - // packages/backend/src/index.ts -+import { catalogPlugin } from '@backstage/plugin-catalog-backend'; -+import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend'; +```ts title="packages/backend/src/index.ts" +/* highlight-add-start */ +import { catalogPlugin } from '@backstage/plugin-catalog-backend'; +import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend'; +/* highlight-add-end */ - const backend = createBackend(); -+backend.add(catalogPlugin()); -+backend.add(catalogModuleTemplateKind()); +const backend = createBackend(); +/* highlight-add-start */ +backend.add(catalogPlugin()); +backend.add(catalogModuleTemplateKind()); +/* highlight-add-end */ ``` Note that this also installs a module from the scaffolder, namely the one which @@ -262,34 +274,38 @@ mechanism to extend or tweak the functionality of the plugin. To do that, you'll make your own bespoke [module](../architecture/06-modules.md) which depends on the appropriate extension point and interacts with it. -```diff - // packages/backend/src/index.ts -+import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; -+import { createBackendModule } from '@backstage/backend-plugin-api'; +```ts title="packages/backend/src/index.ts" +/* highlight-add-start */ +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { createBackendModule } from '@backstage/backend-plugin-api'; +/* highlight-add-end */ -+const catalogModuleCustomExtensions = createBackendModule({ -+ pluginId: 'catalog', // name of the plugin that the module is targeting -+ moduleId: 'customExtensions', -+ register(env) { -+ env.registerInit({ -+ deps: { -+ catalog: catalogProcessingExtensionPoint, -+ // ... and other dependencies as needed -+ }, -+ init({ catalog /* ..., other dependencies */ }) { -+ // Here you have the opportunity to interact with the extension -+ // point before the plugin itself gets instantiated -+ catalog.addEntityProvider(new MyEntityProvider()); // just an example -+ catalog.addProcessor(new MyProcessor()); // just an example -+ }, -+ }); -+ }, -+}); +/* highlight-add-start */ +const catalogModuleCustomExtensions = createBackendModule({ + pluginId: 'catalog', // name of the plugin that the module is targeting + moduleId: 'customExtensions', + register(env) { + env.registerInit({ + deps: { + catalog: catalogProcessingExtensionPoint, + // ... and other dependencies as needed + }, + init({ catalog /* ..., other dependencies */ }) { + // Here you have the opportunity to interact with the extension + // point before the plugin itself gets instantiated + catalog.addEntityProvider(new MyEntityProvider()); // just an example + catalog.addProcessor(new MyProcessor()); // just an example + }, + }); + }, +}); +/* highlight-add-end */ - const backend = createBackend(); - backend.add(catalogPlugin()); - backend.add(catalogModuleTemplateKind()); -+backend.add(catalogModuleCustomExtensions()); +const backend = createBackend(); +backend.add(catalogPlugin()); +backend.add(catalogModuleTemplateKind()); +/* highlight-add-next-line */ +backend.add(catalogModuleCustomExtensions()); ``` This also requires that you have a dependency on the corresponding node package, @@ -310,12 +326,13 @@ implementations that they represent, and being exported from there. A basic installation of the events plugin looks as follows. -```diff - // packages/backend/src/index.ts -+import { eventsPlugin } from '@backstage/plugin-events-backend'; +```ts title="packages/backend/src/index.ts" +/* highlight-add-next-line */ +import { eventsPlugin } from '@backstage/plugin-events-backend'; - const backend = createBackend(); -+backend.add(eventsPlugin()); +const backend = createBackend(); +/* highlight-add-next-line */ +backend.add(eventsPlugin()); ``` If you have other customizations made to `plugins/events.ts`, such as adding @@ -327,32 +344,36 @@ mechanism to extend or tweak the functionality of the plugin. To do that, you'll make your own bespoke [module](../architecture/06-modules.md) which depends on the appropriate extension point and interacts with it. -```diff - // packages/backend/src/index.ts -+import { eventsExtensionPoint } from '@backstage/plugin-events-node'; -+import { createBackendModule } from '@backstage/backend-plugin-api'; +```ts title="packages/backend/src/index.ts" +/* highlight-add-start */ +import { eventsExtensionPoint } from '@backstage/plugin-events-node'; +import { createBackendModule } from '@backstage/backend-plugin-api'; +/* highlight-add-end */ -+const eventsModuleCustomExtensions = createBackendModule({ -+ pluginId: 'events', // name of the plugin that the module is targeting -+ moduleId: 'customExtensions', -+ register(env) { -+ env.registerInit({ -+ deps: { -+ events: eventsExtensionPoint, -+ // ... and other dependencies as needed -+ }, -+ init({ events /* ..., other dependencies */ }) { -+ // Here you have the opportunity to interact with the extension -+ // point before the plugin itself gets instantiated -+ events.addSubscribers(new MySubscriber()); // just an example -+ }, -+ }); -+ }, -+}); +/* highlight-add-start */ +const eventsModuleCustomExtensions = createBackendModule({ + pluginId: 'events', // name of the plugin that the module is targeting + moduleId: 'customExtensions', + register(env) { + env.registerInit({ + deps: { + events: eventsExtensionPoint, + // ... and other dependencies as needed + }, + init({ events /* ..., other dependencies */ }) { + // Here you have the opportunity to interact with the extension + // point before the plugin itself gets instantiated + events.addSubscribers(new MySubscriber()); // just an example + }, + }); + }, +}); +/* highlight-add-end */ - const backend = createBackend(); - backend.add(eventsPlugin()); -+backend.add(eventsModuleCustomExtensions()); +const backend = createBackend(); +backend.add(eventsPlugin()); +/* highlight-add-next-line */ +backend.add(eventsModuleCustomExtensions()); ``` This also requires that you have a dependency on the corresponding node package, @@ -373,12 +394,13 @@ implementations that they represent, and being exported from there. A basic installation of the scaffolder plugin looks as follows. -```diff - // packages/backend/src/index.ts -+import { scaffolderPlugin } from '@backstage/plugin-scaffolder-backend'; +```ts title="packages/backend/src/index.ts" +/* highlight-add-next-line */ +import { scaffolderPlugin } from '@backstage/plugin-scaffolder-backend'; - const backend = createBackend(); -+backend.add(scaffolderPlugin()); +const backend = createBackend(); +/* highlight-add-next-line */ +backend.add(scaffolderPlugin()); ``` If you have other customizations made to `plugins/scaffolder.ts`, such as adding @@ -390,32 +412,36 @@ mechanism to extend or tweak the functionality of the plugin. To do that, you'll make your own bespoke [module](../architecture/06-modules.md) which depends on the appropriate extension point and interacts with it. -```diff - // packages/backend/src/index.ts -+import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node'; -+import { createBackendModule } from '@backstage/backend-plugin-api'; +```ts title="packages/backend/src/index.ts" +/* highlight-add-start */ +import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node'; +import { createBackendModule } from '@backstage/backend-plugin-api'; +/* highlight-add-end */ -+const scaffolderModuleCustomExtensions = createBackendModule({ -+ pluginId: 'scaffolder', // name of the plugin that the module is targeting -+ moduleId: 'customExtensions', -+ register(env) { -+ env.registerInit({ -+ deps: { -+ scaffolder: scaffolderActionsExtensionPoint, -+ // ... and other dependencies as needed -+ }, -+ init({ scaffolder /* ..., other dependencies */ }) { -+ // Here you have the opportunity to interact with the extension -+ // point before the plugin itself gets instantiated -+ scaffolder.addActions(new MyAction()); // just an example -+ }, -+ }); -+ }, -+}); +/* highlight-add-start */ +const scaffolderModuleCustomExtensions = createBackendModule({ + pluginId: 'scaffolder', // name of the plugin that the module is targeting + moduleId: 'customExtensions', + register(env) { + env.registerInit({ + deps: { + scaffolder: scaffolderActionsExtensionPoint, + // ... and other dependencies as needed + }, + init({ scaffolder /* ..., other dependencies */ }) { + // Here you have the opportunity to interact with the extension + // point before the plugin itself gets instantiated + scaffolder.addActions(new MyAction()); // just an example + }, + }); + }, +}); +/* highlight-add-end */ - const backend = createBackend(); - backend.add(scaffolderPlugin()); -+backend.add(scaffolderModuleCustomExtensions()); +const backend = createBackend(); +backend.add(scaffolderPlugin()); +/* highlight-add-next-line */ +backend.add(scaffolderModuleCustomExtensions()); ``` This also requires that you have a dependency on the corresponding node package, diff --git a/docs/features/kubernetes/installation.md b/docs/features/kubernetes/installation.md index 616991123d..abc42ddbe0 100644 --- a/docs/features/kubernetes/installation.md +++ b/docs/features/kubernetes/installation.md @@ -23,8 +23,8 @@ yarn add --cwd packages/app @backstage/plugin-kubernetes Once the package has been installed, you need to import the plugin in your app by adding the "Kubernetes" tab to the respective catalog pages. -```tsx -// In packages/app/src/components/catalog/EntityPage.tsx +```tsx title="packages/app/src/components/catalog/EntityPage.tsx" +/* highlight-add-next-line */ import { EntityKubernetesContent } from '@backstage/plugin-kubernetes'; // You can add the tab to any number of pages, the service page is shown as an @@ -32,9 +32,13 @@ import { EntityKubernetesContent } from '@backstage/plugin-kubernetes'; const serviceEntityPage = ( {/* other tabs... */} + {/* highlight-add-start */} + {/* highlight-add-end */} + +) ``` **Notes:** @@ -57,8 +61,7 @@ yarn add --cwd packages/backend @backstage/plugin-kubernetes-backend Create a file called `kubernetes.ts` inside `packages/backend/src/plugins/` and add the following: -```typescript -// In packages/backend/src/plugins/kubernetes.ts +```ts title="packages/backend/src/plugins/kubernetes.ts" import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; @@ -81,14 +84,17 @@ And import the plugin to `packages/backend/src/index.ts`. There are three lines of code you'll need to add, and they should be added near similar code in your existing Backstage backend. -```typescript -// In packages/backend/src/index.ts +```typescript title="packages/backend/src/index.ts" +// .. +/* highlight-add-next-line */ import kubernetes from './plugins/kubernetes'; -// ... + async function main() { // ... + /* highlight-add-next-line */ const kubernetesEnv = useHotMemoize(module, () => createEnv('kubernetes')); // ... + /* highlight-add-next-line */ apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv)); ``` @@ -104,52 +110,66 @@ don't work for your use-case, it is possible to implement a custom Change the following in `packages/backend/src/plugins/kubernetes.ts`: -```diff --import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; -+import { -+ ClusterDetails, -+ KubernetesBuilder, -+ KubernetesClustersSupplier, -+} from '@backstage/plugin-kubernetes-backend'; - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; -+import { Duration } from 'luxon'; -+ -+export class CustomClustersSupplier implements KubernetesClustersSupplier { -+ constructor(private clusterDetails: ClusterDetails[] = []) {} -+ -+ static create(refreshInterval: Duration) { -+ const clusterSupplier = new CustomClustersSupplier(); -+ // setup refresh, e.g. using a copy of https://github.com/backstage/backstage/blob/master/plugins/search-backend-node/src/runPeriodically.ts -+ runPeriodically( -+ () => clusterSupplier.refreshClusters(), -+ refreshInterval.toMillis(), -+ ); -+ return clusterSupplier; -+ } -+ -+ async refreshClusters(): Promise { -+ this.clusterDetails = []; // fetch from somewhere -+ } -+ -+ async getClusters(): Promise { -+ return this.clusterDetails; -+ } -+} +```ts title="packages/backend/src/plugins/kubernetes.ts" +import { + /* highlight-add-next-line */ + ClusterDetails, + KubernetesBuilder, + /* highlight-add-next-line */ + KubernetesClustersSupplier, +} from '@backstage/plugin-kubernetes-backend'; +import { Router } from 'express'; +import { PluginEnvironment } from '../types'; +/* highlight-add-next-line */ +import { Duration } from 'luxon'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { -- const { router } = await KubernetesBuilder.createBuilder({ -+ const builder = await KubernetesBuilder.createBuilder({ +/* highlight-add-start */ +export class CustomClustersSupplier implements KubernetesClustersSupplier { + constructor(private clusterDetails: ClusterDetails[] = []) {} + + static create(refreshInterval: Duration) { + const clusterSupplier = new CustomClustersSupplier(); + // setup refresh, e.g. using a copy of https://github.com/backstage/backstage/blob/master/plugins/search-backend-node/src/runPeriodically.ts + runPeriodically( + () => clusterSupplier.refreshClusters(), + refreshInterval.toMillis(), + ); + return clusterSupplier; + } + + async refreshClusters(): Promise { + this.clusterDetails = []; // fetch from somewhere + } + + async getClusters(): Promise { + return this.clusterDetails; + } +} +/* highlight-add-end */ + +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + + /* highlight-remove-next-line */ + const { router } = await KubernetesBuilder.createBuilder({ + /* highlight-add-next-line */ + const builder = await KubernetesBuilder.createBuilder({ logger: env.logger, config: env.config, -- }).build(); -+ }); -+ builder.setClusterSupplier( -+ CustomClustersSupplier.create(Duration.fromObject({ minutes: 60 })), -+ ); -+ const { router } = await builder.build(); + /* highlight-remove-next-line */ + }).build(); + /* highlight-add-start */ + }); + builder.setClusterSupplier( + CustomClustersSupplier.create(Duration.fromObject({ minutes: 60 })), + ); + const { router } = await builder.build(); + /* highlight-add-end */ + + // .. + return router; +} ``` ## Running Backstage locally diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index b464168724..7a00d10ede 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -20,30 +20,30 @@ to do that in two steps. [interface](https://github.com/backstage/backstage/blob/db2666b980853c281b8fe77905d7639c5d255f13/plugins/search/src/apis.ts#L31) according to your needs. -```typescript -export class SearchClient implements SearchApi { - // your implementation -} -``` + ```typescript + export class SearchClient implements SearchApi { + // your implementation + } + ``` 2. Override the API ref `searchApiRef` with your new implemented API in the `App.tsx` using `ApiFactories`. [Read more about App APIs](https://backstage.io/docs/api/utility-apis#app-apis). -```typescript -const app = createApp({ - apis: [ - // SearchApi - createApiFactory({ - api: searchApiRef, - deps: { discovery: discoveryApiRef }, - factory({ discovery }) { - return new SearchClient({ discoveryApi: discovery }); - }, - }), - ], -}); -``` + ```typescript + const app = createApp({ + apis: [ + // SearchApi + createApiFactory({ + api: searchApiRef, + deps: { discovery: discoveryApiRef }, + factory({ discovery }) { + return new SearchClient({ discoveryApi: discovery }); + }, + }), + ], + }); + ``` ## How to index TechDocs documents @@ -63,35 +63,35 @@ getting started guide. 1. Import the `DefaultTechDocsCollatorFactory` from `@backstage/plugin-techdocs-backend`. -```typescript -import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; -``` + ```typescript + import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; + ``` 2. If there isn't an existing schedule you'd like to run the collator on, be sure to create it first. Something like... -```typescript -import { Duration } from 'luxon'; + ```typescript + import { Duration } from 'luxon'; -const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({ - frequency: Duration.fromObject({ seconds: 600 }), - timeout: Duration.fromObject({ seconds: 900 }), - initialDelay: Duration.fromObject({ seconds: 3 }), -}); -``` + const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({ + frequency: Duration.fromObject({ seconds: 600 }), + timeout: Duration.fromObject({ seconds: 900 }), + initialDelay: Duration.fromObject({ seconds: 3 }), + }); + ``` 3. Register the `DefaultTechDocsCollatorFactory` with the IndexBuilder. -```typescript -indexBuilder.addCollator({ - schedule: every10MinutesSchedule, - factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { - discovery: env.discovery, - logger: env.logger, - tokenManager: env.tokenManager, - }), -}); -``` + ```typescript + indexBuilder.addCollator({ + schedule: every10MinutesSchedule, + factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + tokenManager: env.tokenManager, + }), + }); + ``` You should now have your TechDocs documents indexed to your search engine of choice! @@ -101,14 +101,14 @@ searching, you can update your `SearchPage.tsx` file in `packages/app/src/components/search` by adding `techdocs` to the list of values of the `SearchType` component. -```tsx +```tsx title="packages/app/src/components/search/SearchPage.tsx" - ... + {/* ... */} ``` @@ -124,9 +124,7 @@ You can either just simply amend default behaviour, or even to write completely > `authorization` and `location` cannot be modified via a `entityTransformer`, `location` can be modified only through `locationTemplate`. -```diff -// packages/backend/src/plugins/search.ts - +```ts title="packages/backend/src/plugins/search.ts" const entityTransformer: CatalogCollatorEntityTransformer = (entity: Entity) => { if (entity.kind === 'SomeKind') { return { @@ -145,7 +143,8 @@ indexBuilder.addCollator({ collator: DefaultCatalogCollatorFactory.fromConfig(env.config, { discovery: env.discovery, tokenManager: env.tokenManager, -+ entityTransformer, + /* highlight-add-next-line */ + entityTransformer, }), }); ``` @@ -166,17 +165,17 @@ exactly what's available to search, (or a [Decorator](./concepts.md#decorators) to filter things out here and there), but the `DefaultCatalogCollator` that's provided by `@backstage/plugin-catalog-backend` offers some configuration too! -```diff -// packages/backend/src/plugins/search.ts - +```ts title="packages/backend/src/plugins/search.ts" indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, collator: DefaultCatalogCollator.fromConfig(env.config, { discovery: env.discovery, tokenManager: env.tokenManager, -+ filter: { -+ kind: ['API', 'Component', 'Domain', 'Group', 'System', 'User'], -+ }, + /* highlight-add-start */ + filter: { + kind: ['API', 'Component', 'Domain', 'Group', 'System', 'User'], + }, + /* highlight-add-end */ }), }); ``` @@ -194,7 +193,7 @@ to create an override with your preferred styling. For example, the following will result in highlighted terms to be bold & underlined: -```jsx +```tsx const highlightOverride = { BackstageHighlightedSearchResultText: { highlight: { @@ -207,10 +206,6 @@ const highlightOverride = { }; ``` -[obj-mode]: https://nodejs.org/dist/latest-v16.x/docs/api/stream.html#stream_object_mode -[read-stream]: https://nodejs.org/dist/latest-v16.x/docs/api/stream.html#readable-streams -[async-gen]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of#iterating_over_async_generators - ## How to render search results using extensions Extensions for search results let you customize components used to render search result items, It is possible to provide your own search result item extensions or use the ones provided by plugin packages: @@ -219,8 +214,7 @@ Extensions for search results let you customize components used to render search Using the example below, you can provide an extension to be used as a default result item: -```tsx -// plugins/your-plugin/src/plugin.ts +```tsx title="plugins/your-plugin/src/plugin.ts" import { createPlugin } from '@backstage/core-plugin-api'; import { createSearchResultListItemExtension } from '@backstage/plugin-search-react'; @@ -251,8 +245,7 @@ export const YourSearchResultListItemExtension: ( Additionally, you can define a predicate function that receives a result and returns whether your extension should be used to render it or not: -```tsx -// plugins/your-plugin/src/plugin.ts +```tsx title="plugins/your-plugin/src/plugin.ts" import { createPlugin } from '@backstage/core-plugin-api'; import { createSearchResultListItemExtension } from '@backstage/plugin-search-react'; @@ -271,8 +264,7 @@ export const YourSearchResultListItemExtension = plugin.provide( Remember to export your new extension: -```tsx -// plugins/your-plugin/src/index.ts +```tsx title="plugins/your-plugin/src/index.ts" export { YourSearchResultListItem } from './plugin.ts'; ``` @@ -282,8 +274,7 @@ For more details, see the [createSearchResultListItemExtension](https://backstag Now that you know how a search result item is provided, let's finally see how they can be used, for example, to compose a page in your application: -```tsx -// packages/app/src/components/searchPage.tsx +```tsx title="packages/app/src/components/searchPage.tsx" import React from 'react'; import { Grid, Paper } from '@material-ui/core'; @@ -337,8 +328,7 @@ export const searchPage = ; As another example, here's a search modal that renders results with extensions: -```tsx -// packages/app/src/components/searchModal.tsx +```tsx title="packages/app/src/components/searchModal.tsx" import React from 'react'; import { DialogContent, DialogTitle, Paper } from '@material-ui/core'; @@ -367,7 +357,7 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => ( } /> } /> } /> - {/* As a "default" extension, it does not define a predicate function, + {/* As a "default" extension, it does not define a predicate function, so it must be the last child to render results that do not match the above extensions */} diff --git a/docs/features/software-catalog/catalog-customization.md b/docs/features/software-catalog/catalog-customization.md index 1b5535a464..c2ffa0c22a 100644 --- a/docs/features/software-catalog/catalog-customization.md +++ b/docs/features/software-catalog/catalog-customization.md @@ -142,21 +142,22 @@ export const EntitySecurityTierPicker = () => { Now we can add the component to `CustomCatalogPage`: -```diff +```tsx export const CustomCatalogPage = ({ columns, actions, initiallySelectedFilter = 'owned', }: CatalogPageProps) => { return ( - ... + {/* ... */} - ... + {/* ... */} }; ``` Finally, we can apply our new `CustomCatalogPage`. -```diff -# packages/app/src/App.tsx +```tsx title="packages/app/src/App.tsx" const routes = ( -- } /> -+ }> -+ -+ + {/* highlight-remove-next-line */} + } /> + {/* highlight-add-start */} + }> + + + {/* highlight-add-end */} + {/* ... */} + +); ``` The same method can be used to customize the _default_ filters with a different diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md index 31c0ed90db..bdd043b8a8 100644 --- a/docs/features/software-catalog/extending-the-model.md +++ b/docs/features/software-catalog/extending-the-model.md @@ -530,12 +530,17 @@ export class FoobarEntitiesProcessor implements CatalogProcessor { Once the processor is created it can be wired up to the catalog via the `CatalogBuilder` in `packages/backend/src/plugins/catalog.ts`: -```diff -+ import { FoobarEntitiesProcessor } from '@internal/plugin-foobar-backend'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { FoobarEntitiesProcessor } from '@internal/plugin-foobar-backend'; - // ... - - const builder = await CatalogBuilder.create(env); -+ builder.addProcessor(new FoobarEntitiesProcessor()); - const { processingEngine, router } = await builder.build(); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-next-line */ + builder.addProcessor(new FoobarEntitiesProcessor()); + const { processingEngine, router } = await builder.build(); + // .. +} ``` diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md index 5fc2537712..d8e4c2099a 100644 --- a/docs/features/software-catalog/external-integrations.md +++ b/docs/features/software-catalog/external-integrations.md @@ -235,26 +235,33 @@ others. You should now be able to add this class to your backend in `packages/backend/src/plugins/catalog.ts`: -```diff -+import { FrobsProvider } from '../path/to/class'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { FrobsProvider } from '../path/to/class'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = CatalogBuilder.create(env); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = CatalogBuilder.create(env); + /* highlight-add-start */ + const frobs = new FrobsProvider('production', env.reader); + builder.addEntityProvider(frobs); + /* highlight-add-end */ -+ const frobs = new FrobsProvider('production', env.reader); -+ builder.addEntityProvider(frobs); + const { processingEngine, router } = await builder.build(); + await processingEngine.start(); - const { processingEngine, router } = await builder.build(); - await processingEngine.start(); + /* highlight-add-start */ + await env.scheduler.scheduleTask({ + id: 'run_frobs_refresh', + fn: async () => { await frobs.run(); }, + frequency: { minutes: 30 }, + timeout: { minutes: 10 }, + }); + /* highlight-add-end */ -+ await env.scheduler.scheduleTask({ -+ id: 'run_frobs_refresh', -+ fn: async () => { await frobs.run(); }, -+ frequency: { minutes: 30 }, -+ timeout: { minutes: 10 }, -+ }); + // .. +} ``` Note that we used the builtin scheduler facility to regularly call the `run` @@ -464,8 +471,7 @@ feeding it into the ingestion loop. For this kind of an integration, you'd typically want to add it to the list of statically always-available locations in the config. -```yaml -# In app-config.yaml +```yaml title="app-config.yaml" catalog: locations: - type: system-x @@ -551,14 +557,19 @@ The key points to note are: You should now be able to add this class to your backend in `packages/backend/src/plugins/catalog.ts`: -```diff -+import { SystemXReaderProcessor } from '../path/to/class'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { SystemXReaderProcessor } from '../path/to/class'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = CatalogBuilder.create(env); -+ builder.addProcessor(new SystemXReaderProcessor(env.reader)); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = CatalogBuilder.create(env); + /* highlight-add-next-line */ + builder.addProcessor(new SystemXReaderProcessor(env.reader)); + + // .. +} ``` Start up the backend - it should now start reading from the previously diff --git a/docs/features/software-templates/builtin-actions.md b/docs/features/software-templates/builtin-actions.md index c8f830f3ee..1b3a53b5d9 100644 --- a/docs/features/software-templates/builtin-actions.md +++ b/docs/features/software-templates/builtin-actions.md @@ -31,16 +31,19 @@ allow most templates built for `fetch:cookiecutter` to work without any changes. 2. Set `cookiecutterCompat` to `true` in the `fetch:template` step input in `template.yaml`. -```diff - steps: - - id: fetch-base - name: Fetch Base -- action: fetch:cookiecutter -+ action: fetch:template - input: - url: ./skeleton -+ cookiecutterCompat: true - values: +```yaml title="template.yaml" +steps: + - id: fetch-base + name: Fetch Base + # highlight-remove-next-line + action: fetch:cookiecutter + # highlight-add-next-line + action: fetch:template + input: + url: ./skeleton + # highlight-add-next-line + cookiecutterCompat: true + values: ``` ### Manual migration diff --git a/docs/features/software-templates/migrating-from-v1beta2-to-v1beta3.md b/docs/features/software-templates/migrating-from-v1beta2-to-v1beta3.md index f9d2c4eb0c..bd8d4bdb72 100644 --- a/docs/features/software-templates/migrating-from-v1beta2-to-v1beta3.md +++ b/docs/features/software-templates/migrating-from-v1beta2-to-v1beta3.md @@ -38,14 +38,20 @@ to upgrade. An important change is to add the required processor to your `packages/backend/src/plugins/catalog.ts` -```diff -+import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; -... +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-next-line */ + builder.addProcessor(new ScaffolderEntitiesProcessor()); + const { processingEngine, router } = await builder.build(); - const builder = await CatalogBuilder.create(env); -+ builder.addProcessor(new ScaffolderEntitiesProcessor()); - const { processingEngine, router } = await builder.build(); + // .. +} ``` ## `backstage.io/v1beta2` -> `scaffolder.backstage.io/v1beta3` @@ -53,10 +59,12 @@ An important change is to add the required processor to your `packages/backend/s The most important change is that you'll need to switch over the `apiVersion` in your templates to the new one. -```diff +```yaml kind: Template -- apiVersion: backstage.io/v1beta2 -+ apiVersion: scaffolder.backstage.io/v1beta3 + # highlight-remove-next-line + apiVersion: backstage.io/v1beta2 + # highlight-add-next-line + apiVersion: scaffolder.backstage.io/v1beta3 ``` ## `${{ }}` instead of `"{{ }}"` @@ -68,15 +76,19 @@ was pretty annoying, as it also meant that all things look like strings. Now that's no longer the case, you can now remove the `""` and take advantage of writing nice `yaml` files that just work. -```diff - spec: - steps: - input: - allowedHosts: ['github.com'] -- description: 'This is {{ parameters.name }}' -+ description: This is ${{ parameters.name }} -- repoUrl: '{{ parameters.repoUrl }}' -+ repoUrl: ${{ parameters.repoUrl }} +```yaml +spec: + steps: + input: + allowedHosts: ['github.com'] + # highlight-remove-next-line + description: 'This is {{ parameters.name }}' + # highlight-add-next-line + description: This is ${{ parameters.name }} + # highlight-remove-next-line + repoUrl: '{{ parameters.repoUrl }}' + # highlight-add-next-line + repoUrl: ${{ parameters.repoUrl }} ``` ## No more `eq` or `not` helpers @@ -85,24 +97,26 @@ These helpers are no longer needed with the more expressive `api` that `nunjucks` provides. You can simply use the built-in `nunjucks` and `jinja2` style operators. -```diff - spec: - steps: - input: -- if: '{{ eq parameters.value "backstage" }}' -+ if: ${{ parameters.value === "backstage" }} - ... +```yaml +spec: + steps: + input: + # highlight-remove-next-line + if: '{{ eq parameters.value "backstage" }}' + # highlight-add-next-line + if: ${{ parameters.value === "backstage" }} ``` And then for the `not` -```diff - spec: - steps: - input: -- if: '{{ not parameters.value "backstage" }}' -+ if: ${{ parameters.value !== "backstage" }} - ... +```yaml +spec: + steps: + input: + # highlight-remove-next-line + if: '{{ not parameters.value "backstage" }}' + # highlight-add-next-line + if: ${{ parameters.value !== "backstage" }} ``` Much better right? ✨ @@ -115,32 +129,36 @@ supporting the additional primitive values now rather than everything being a should all work as expected and keep the type that has been declared in the input schema. -```diff - spec: - parameters: - test: - type: number - name: Test Number - address: - type: object - required: - - line1 - properties: - line1:🙏 - type: string - name: Line 1 - line2: - type: string - name: Line 2 +```yaml +spec: + parameters: + test: + type: number + name: Test Number + address: + type: object + required: + - line1 + properties: + line1: + type: string + name: Line 1 + line2: + type: string + name: Line 2 - steps: - - id: test step - action: run:something - input: -- address: '{{ json parameters.address }}' -+ address: ${{ parameters.address }} -- test: '{{ parameters.test }}' -+ test: ${{ parameters.test }} # this will now make sure that the type of test is a number 🙏 + steps: + - id: test step + action: run:something + input: + # highlight-remove-next-line + address: '{{ json parameters.address }}' + # highlight-add-next-line + address: ${{ parameters.address }} + # highlight-remove-next-line + test: '{{ parameters.test }}' + # highlight-add-next-line + test: ${{ parameters.test }} # this will now make sure that the type of test is a number 🙏 ``` ## `parseRepoUrl` is now a `filter` @@ -148,13 +166,14 @@ input schema. All calls to `parseRepoUrl` are now a `jinja2` `filter`, which means you'll need to update the syntax. -```diff - spec: - steps: - input: -- repoUrl: '{{ parseRepoUrl parameters.repoUrl }}' -+ repoUrl: ${{ parameters.repoUrl | parseRepoUrl }} - ... +```yaml +spec: + steps: + input: + # highlight-remove-next-line + repoUrl: '{{ parseRepoUrl parameters.repoUrl }}' + # highlight-add-next-line + repoUrl: ${{ parameters.repoUrl | parseRepoUrl }} ``` Now we have complex value support here too, expect that this `filter` will go @@ -167,39 +186,46 @@ away in future versions and the `RepoUrlPicker` will return an object so Previously, it was possible to provide links to the frontend using the named output `entityRef` and `remoteUrl`. These should be moved to `links` under the `output` object instead. -```diff - output: -- remoteUrl: {{ steps['publish'].output.remoteUrl }} -- entityRef: {{ steps['register'].output.entityRef }} -+ links: -+ - title: Repository -+ url: ${{ steps['publish'].output.remoteUrl }} -+ - title: Open in catalog -+ icon: catalog -+ entityRef: ${{ steps['register'].output.entityRef }} - +```yaml +output: + # highlight-remove-start + remoteUrl: {{ steps['publish'].output.remoteUrl }} + entityRef: {{ steps['register'].output.entityRef }} + # highlight-remove-end + # highlight-add-start + links: + - title: Repository + url: ${{ steps['publish'].output.remoteUrl }} + - title: Open in catalog + icon: catalog + entityRef: ${{ steps['register'].output.entityRef }} + # highlight-add-end ``` ## Watch out for `dash-case` The nunjucks compiler can run into issues if the `id` fields in your template steps use dash characters, since these IDs translate directly to JavaScript object properties when accessed as output. One possible migration path is to use `camelCase` for your action IDs. -```diff +```yaml steps: -- id: my-custom-action -- ... -- -- id: publish-pull-request -- input: -- repoUrl: {{ steps.my-custom-action.output.repoUrl }} # Will not recognize 'my-custom-action' as a JS property since it contains dashes! + # highlight-remove-start + id: my-custom-action + ... + + id: publish-pull-request + input: + repoUrl: {{ steps.my-custom-action.output.repoUrl }} # Will not recognize 'my-custom-action' as a JS property since it contains dashes! + # highlight-remove-end steps: -+ id: myCustomAction -+ ... -+ -+ id: publishPullRequest -+ input: -+ repoUrl: ${{ steps.myCustomAction.output.repoUrl }} + # highlight-add-start + id: myCustomAction + ... + + id: publishPullRequest + input: + repoUrl: ${{ steps.myCustomAction.output.repoUrl }} + # highlight-add-end ``` Alternatively, it's possible to keep the `dash-case` syntax and use brackets for property access as you would in JavaScript: diff --git a/docs/features/software-templates/testing-scaffolder-alpha.md b/docs/features/software-templates/testing-scaffolder-alpha.md index 76479b137e..df89e0f1b1 100644 --- a/docs/features/software-templates/testing-scaffolder-alpha.md +++ b/docs/features/software-templates/testing-scaffolder-alpha.md @@ -41,39 +41,43 @@ It's also worth calling out that if you do test this out, and find some issues o The `ScaffolderPage` router has a completely different export for the `scaffolder/next` work, so you will want to change any import from the old `ScaffolderPage` to the new `NextScaffolderPage` -```diff -- import { ScaffolderPage } from '@backstage/plugin-scaffolder'; -+ import { NextScaffolderPage } from '@backstage/plugin-scaffolder/alpha'; +```tsx +/* highlight-remove-next-line */ +import { ScaffolderPage } from '@backstage/plugin-scaffolder'; +/* highlight-add-next-line */ +import { NextScaffolderPage } from '@backstage/plugin-scaffolder/alpha'; ``` And this API should be the exact same as the previous Router, so you should be able to make a change like the following further down in this file: -```diff - - entity?.metadata?.tags?.includes('recommended') ?? false, - }, - ]} - /> - } - > - - - ... other extensions - - - - ... other layouts - - +```tsx + + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ]} + /> + } + > + + + {/* ... other extensions */} + + + + {/* ... other layouts */} + + ``` ### Make the required changes to your `CustomFieldExtensions` @@ -95,13 +99,17 @@ export const EntityNamePickerFieldExtension = scaffolderPlugin.provide( References for `createScaffolderFieldExtension` have an `/alpha` version of `createNextScaffolderFieldExtension`, which should be used instead. -```diff --import { createScaffolderFieldExtension } from '@backstage/plugin-scaffolder'; -+import { createNextScaffolderFieldExtension } from '@backstage/plugin-scaffolder/alpha'; +```ts +/* highlight-remove-next-line */ +import { createScaffolderFieldExtension } from '@backstage/plugin-scaffolder'; +/* highlight-add-next-line */ +import { createNextScaffolderFieldExtension } from '@backstage/plugin-scaffolder/alpha'; export const EntityNamePickerFieldExtension = scaffolderPlugin.provide( -- createScaffolderFieldExtension({ -+ createNextScaffolderFieldExtension({ + /* highlight-remove-next-line */ + createScaffolderFieldExtension({ + /* highlight-add-next-line */ + createNextScaffolderFieldExtension({ component: EntityNamePicker, name: 'EntityNamePicker', validation: entityNamePickerValidation, @@ -113,7 +121,7 @@ Once you've done this you will find that you will have two squiggly lines under Let's take the following code for the `EntityNamePicker` component: -```ts +```tsx export const EntityNamePicker = ( props: FieldExtensionComponentProps, ) => { @@ -127,19 +135,23 @@ export const EntityNamePicker = ( idSchema, placeholder, } = props; - ... + // .. } ``` There's another `/alpha` export that you need to replace `FieldExtensionComponentProps` with which is the `NextFieldExtensionComponentProps`. -```diff -- import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; -+ import { NextFieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react/alpha'; +```tsx +/* highlight-remove-next-line */ +import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; +/* highlight-add-next-line */ +import { NextFieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react/alpha'; export const EntityNamePicker = ( -- props: FieldExtensionComponentProps, -+ props: NextFieldExtensionComponentProps, + /* highlight-remove-next-line */ + props: FieldExtensionComponentProps, + /* highlight-add-next-line */ + props: NextFieldExtensionComponentProps, ) => { const { onChange, @@ -147,12 +159,14 @@ export const EntityNamePicker = ( schema: { title = 'Name', description = 'Unique name of the component' }, rawErrors, formData, -- uiSchema: { 'ui:autofocus': autoFocus }, -+ uiSchema: { 'ui:autofocus': autoFocus } = {}, + /* highlight-remove-next-line */ + uiSchema: { 'ui:autofocus': autoFocus }, + /* highlight-add-next-line */ + uiSchema: { 'ui:autofocus': autoFocus } = {}, idSchema, placeholder, } = props; - ... + // .. } ``` @@ -182,8 +196,10 @@ You will need to change the import for `FieldValidation` to point at the new `re > Note: you will probably need to install this dependency too, by using `yarn add @rjsf/utils` in the package where you define these validation functions, this could also be in the `packages/app` folder, so you can install it there if needed. -```diff +```ts +/* highlight-remove-next-line */ - import { FieldValidation } from '@rjsf/core'; +/* highlight-add-next-line */ + import { FieldValidation } from '@rjsf/utils; import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; @@ -201,34 +217,40 @@ Once we fully release the code that is in the `/alpha` exports right now onto th Later releases of `react-jsonschema-form` have made the `uiSchema` optional, and if you don't provide it, it will be `undefined` instead of an empty object. This means that you will need to make sure that you're defaulting the `uiSchema` to an empty object if you're using it in your code. -```diff +```tsx const { onChange, required, schema: { title = 'Name', description = 'Unique name of the component' }, rawErrors, formData, -- uiSchema: { 'ui:autofocus': autoFocus }, -+ uiSchema: { 'ui:autofocus': autoFocus } = {}, + /* highlight-remove-next-line */ + uiSchema: { 'ui:autofocus': autoFocus }, + /* highlight-add-next-line */ + uiSchema: { 'ui:autofocus': autoFocus } = {}, idSchema, placeholder, } = props; + // .. ``` ### `formData` can also be `undefined` If you were using the `formData` and assuming that it was set to an empty object when building `Field Extensions` that return objects, then this will be `undefined` now due to a change in the `react-jsonschema-form` library. -```diff +```tsx const { onChange, required, schema: { title = 'Name', description = 'Unique name of the component' }, rawErrors, -- formData, -+ formData = {}, // or maybe some other default value that you would prefer + /* highlight-remove-next-line */ + formData, + /* highlight-add-next-line */ + formData = {}, // or maybe some other default value that you would prefer uiSchema: { 'ui:autofocus': autoFocus } = {}, idSchema, placeholder, } = props; + // .. ``` diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md index 3f7edd23a0..090539a6b1 100644 --- a/docs/features/techdocs/getting-started.md +++ b/docs/features/techdocs/getting-started.md @@ -31,18 +31,16 @@ Once the package has been installed, you need to import the plugin in your app. In `packages/app/src/App.tsx`, import `TechDocsPage` and add the following to `FlatRoutes`: -```tsx +```tsx title="packages/app/src/App.tsx" import { DefaultTechDocsHome, TechDocsIndexPage, TechDocsReaderPage, } from '@backstage/plugin-techdocs'; -// ... - const AppRoutes = () => { - // ... other plugin routes + {/* ... other plugin routes */} }> @@ -58,20 +56,20 @@ It would be nice to decorate your pages with something else... Having a link tha With the [TechDocs Addon framework](https://backstage.io/docs/features/techdocs/addons#installing-and-using-addons), you can render React components in documentation pages and these Addons can be provided by any Backstage plugin. The framework is exported by the [@backstage/plugin-techdocs-react](https://www.npmjs.com/package/@backstage/plugin-techdocs-react) package and there is a `` Addon in the [@backstage/plugin-techdocs-module-addons-contrib](https://www.npmjs.com/package/@backstage/plugin-techdocs-module-addons-contrib) package for you to use once you have these two dependencies installed: -```diff +```tsx import { DefaultTechDocsHome, TechDocsIndexPage, TechDocsReaderPage, } from '@backstage/plugin-techdocs'; -+ import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; -+ import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; - -// ... +/* highlight-add-start */ +import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; +import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; +/* highlight-add-end */ const AppRoutes = () => { - // ... other plugin routes + {/* ... other plugin routes */} }> @@ -79,9 +77,11 @@ const AppRoutes = () => { path="/docs/:namespace/:kind/:name/*" element={} > -+ -+ -+ + {/* highlight-add-start */} + + + + {/* highlight-add-end */} ; }; diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index 5ec0d6eeab..fcb27c220d 100644 --- a/docs/getting-started/app-custom-theme.md +++ b/docs/getting-started/app-custom-theme.md @@ -172,7 +172,7 @@ When creating a custom theme you would be applying different values to component's css rules that use the theme object. For example, a Backstage component's styles might look like this: -```ts +```tsx const useStyles = makeStyles( theme => ({ header: { @@ -263,11 +263,9 @@ You can also use another web image format such as PNG by importing it. To do this, place your new image into a new subdirectory such as `src/components/Root/logo/my-company-logo.png`, and then add this code: -```jsx +```tsx import MyCustomLogoFull from './logo/my-company-logo.png'; -//... - const LogoFull = () => { return ; }; @@ -294,8 +292,7 @@ In your front-end application, locate the `src` folder. We suggest creating the > Another example [here](https://github.com/backstage/backstage/blob/master/plugins/azure-devops/src/components/AzurePipelinesIcon/AzurePipelinesIcon.tsx), if you want to ensure proper behavior in light and dark themes. -```tsx -// customIcons.tsx +```tsx title="customIcons.tsx" import { SvgIcon, SvgIconProps } from '@material-ui/core'; import React from 'react'; @@ -317,29 +314,28 @@ export const ExampleIcon = (props: SvgIconProps) => ( Supply your custom icon in `packages/app/src/App.tsx` -```diff +```tsx title="packages/app/src/App.tsx" +/* highlight-add-next-line */ +import { ExampleIcon } from './assets/customIcons' -+ import { ExampleIcon } from './assets/customIcons' - -[...] const app = createApp({ apis, components: { - [...] + {/* ... */} }, themes: [ - [...] + {/* ... */} ], -+ icons: { -+ github: ExampleIcon, -+ }, + /* highlight-add-start */ + icons: { + github: ExampleIcon, + }, + /* highlight-add-end */ bindRoutes({ bind }) { - [...] + {/* ... */} } }) - -[...] ``` ### Adding Icons @@ -350,17 +346,19 @@ You can add more icons, if the [default icons](https://github.com/backstage/back 2. Then you want to import your icon, add this to the rest of your imports: `import AlarmIcon from '@material-ui/icons/Alarm';` 3. Next you want to add the icon like this to your `createApp`: - ```diff - const app = createApp({ - apis: ..., - plugins: ..., - + icons: { - + alert: AlarmIcon, - + }, - themes: ..., - components: ..., - }); - ``` + ```tsx title="packages/app/src/App.tsx" + const app = createApp({ + apis: ..., + plugins: ..., + /* highlight-add-start */ + icons: { + alert: AlarmIcon, + }, + /* highlight-add-end */ + themes: ..., + components: ..., + }); + ``` 4. Now we can reference `alert` for our icon in our entity links like this: @@ -404,7 +402,7 @@ For this example we'll show you how you can expand the sidebar with a sub-menu: 1. Open the `Root.tsx` file located in `packages/app/src/components/Root` as this is where the sidebar code lives 2. Then we want to add the following imports for the icons: - ```ts + ```tsx title="packages/app/src/components/Root/Root.tsx" import ApiIcon from '@material-ui/icons/Extension'; import ComponentIcon from '@material-ui/icons/Memory'; import DomainIcon from '@material-ui/icons/Apartment'; @@ -415,69 +413,71 @@ For this example we'll show you how you can expand the sidebar with a sub-menu: 3. Then update the `@backstage/core-components` import like this: - ```diff - import { - Sidebar, - sidebarConfig, - SidebarDivider, - SidebarGroup, - SidebarItem, - SidebarPage, - SidebarScrollWrapper, - SidebarSpace, - useSidebarOpenState, - Link, - + GroupIcon, - + SidebarSubmenu, - + SidebarSubmenuItem, - } from '@backstage/core-components'; - ``` + ```tsx + import { + Sidebar, + sidebarConfig, + SidebarDivider, + SidebarGroup, + SidebarItem, + SidebarPage, + SidebarScrollWrapper, + SidebarSpace, + useSidebarOpenState, + Link, + /* highlight-add-start */ + GroupIcon, + SidebarSubmenu, + SidebarSubmenuItem, + /* highlight-add-end */ + } from '@backstage/core-components'; + ``` 4. Finally replace `` with this: - ```ts - - - - - - - - - - - - - - ``` + ```tsx + + + + + + + + + + + + + + ``` When you startup your Backstage app and hover over the Home option on the sidebar you'll now see a nice sub-menu appear with links to the various Kinds in your Catalog. It would look like this: diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index a436321fe2..2196a1a36d 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -74,22 +74,26 @@ Use your favorite editor to open `app-config.yaml` and add your PostgreSQL configuration. in the root directory of your Backstage app using the credentials from the previous steps. -```diff +```yaml title="app-config.yaml" backend: database: -- client: better-sqlite3 -- connection: ':memory:' -+ # config options: https://node-postgres.com/apis/client -+ client: pg -+ connection: -+ host: ${POSTGRES_HOST} -+ port: ${POSTGRES_PORT} -+ user: ${POSTGRES_USER} -+ password: ${POSTGRES_PASSWORD} -+ # https://node-postgres.com/features/ssl -+ #ssl: require # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require) -+ #ca: # if you have a CA file and want to verify it you can uncomment this section -+ #$file: /ca/server.crt + # highlight-remove-start + client: better-sqlite3 + connection: ':memory:' + # highlight-remove-end + # highlight-add-start + # config options: https://node-postgres.com/apis/client + client: pg + connection: + host: ${POSTGRES_HOST} + port: ${POSTGRES_PORT} + user: ${POSTGRES_USER} + password: ${POSTGRES_PASSWORD} + # https://node-postgres.com/features/ssl + # ssl: require # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require) + #ca: # if you have a CA file and want to verify it you can uncomment this section + #$file: /ca/server.crt + # highlight-add-end ``` You'll use the connection details from the previous step. You can either set the @@ -142,7 +146,7 @@ Take note of the `Client ID` and the `Client Secret`. Open `app-config.yaml`, and add your `clientId` and `clientSecret` to this file. It should end up looking like this: -```yaml +```yaml title="app-config.yaml" auth: # see https://backstage.io/docs/auth/ to learn about auth providers environment: development @@ -161,14 +165,14 @@ change the sign-in page, this you actually need to add in the source code. Open `packages/app/src/App.tsx` and below the last `import` line, add: -```typescript +```typescript title="packages/app/src/App.tsx" import { githubAuthApiRef } from '@backstage/core-plugin-api'; import { SignInPage } from '@backstage/core-components'; ``` Search for `const app = createApp({` in this file, and below `apis,` add: -```typescript +```tsx title="packages/app/src/App.tsx" components: { SignInPage: props => ( - ... - + - + - + ; - - ); - ``` + const cicdContent = ( + + {/* ... */} + {/* highlight-add-next-line */} + + + ; + {/* highlight-add-end */} + + ); + ``` This is just one example, but each Backstage instance may integrate content or cards to suit their needs on different pages, tabs, etc. In addition, while some @@ -62,8 +64,7 @@ to an entity in the software catalog. Plugins that collect data off of external services may require the use of a proxy service. This plugin accesses the CircleCI REST API, and thus requires a proxy definition. - ```yaml - // app-config.yaml + ```yaml title="app-config.yaml" proxy: '/circleci/api': target: https://circleci.com/api/v1.1 @@ -82,7 +83,7 @@ adding new `SidebarItem` elements. For example, if you install the `api-docs` plugin, a matching `SidebarItem` could be something like this: -```tsx +```tsx title="packages/app/src/components/Root/Root.tsx" // Import icon from MUI import ExtensionIcon from '@material-ui/icons/Extension'; @@ -95,7 +96,7 @@ are sized according to the Material UI's [SvgIcon](https://material-ui.com/api/svg-icon/) default of 24x24px, and set the extension to `.icon.svg`. For example: -```ts +```tsx import InternalToolIcon from './internal-tool.icon.svg'; ``` @@ -104,7 +105,7 @@ customizing the experience you can group `SidebarItems` in a `SidebarGroup` (Example 1) or create a `SidebarGroup` with a link (Example 2). All `SidebarGroup`s are displayed in the bottom navigation with an icon. -```ts +```tsx // Example 1 } label="Menu"> ... @@ -113,7 +114,7 @@ customizing the experience you can group `SidebarItems` in a `SidebarGroup` ``` -```ts +```tsx // Example 2 } to="/search"> ... diff --git a/docs/getting-started/homepage.md b/docs/getting-started/homepage.md index 9fa91e694f..29b427bad8 100644 --- a/docs/getting-started/homepage.md +++ b/docs/getting-started/homepage.md @@ -52,29 +52,34 @@ If you don't have a homepage already, most likely you have a redirect setup to u Inside your `packages/app/src/App.tsx`, look for -```tsx +```tsx title="packages/app/src/App.tsx" const routes = ( + {/* ... */} + +) ``` Let's replace the `` line and use the new component we created in the previous step as the new homepage. -```diff -// File: packages/app/src/App.tsx +```tsx title="packages/app/src/App.tsx" +/* highlight-add-start */ +import { HomepageCompositionRoot } from '@backstage/plugin-home'; +import { HomePage } from './components/home/HomePage'; +/* highlight-add-end */ -+ import { HomepageCompositionRoot } from '@backstage/plugin-home'; -+ import { HomePage } from './components/home/HomePage'; - -// ... const routes = ( -- -+ }> -+ -+ -// ... - + {/* highlight-remove-next-line */} + + {/* highlight-add-start */} + }> + + + {/* highlight-add-end */} + {/* ... */} + ) ``` @@ -90,26 +95,34 @@ The code for the Backstage sidebar is most likely inside your [`packages/app/src Let's make the following changes -```diff -// Other imports -+ import CategoryIcon from '@material-ui/icons/Category'; +```tsx title="packages/app/src/components/Root/Root.tsx" +/* highlight-add-next-line */ +import CategoryIcon from '@material-ui/icons/Category'; export const Root = ({ children }: PropsWithChildren<{}>) => ( - # ... + {/* ... */} }> {/* Global nav, not org-specific */} -- -+ -+ + {/* highlight-remove-next-line */} + + {/* highlight-add-start */} + + + {/* highlight-add-end */} {/* End global nav */} + {/* ... */} + + + +) ``` That's it! You should now have _(although slightly boring)_ a homepage! diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index 6cb135900e..d4ded290c3 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -32,8 +32,7 @@ Setup [Azure integration](locations.md) with `host` and `token`. Host must be `d At your configuration, you add one or more provider configs: -```yaml -# app-config.yaml +```yaml title="app-config.yaml" catalog: providers: azureDevOps: @@ -94,39 +93,45 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-azure Once you've done that, you'll also need to add the segment below to `packages/backend/src/plugins/catalog.ts`: -```diff -/* packages/backend/src/plugins/catalog.ts */ -+import { AzureDevOpsEntityProvider } from '@backstage/plugin-catalog-backend-module-azure'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { AzureDevOpsEntityProvider } from '@backstage/plugin-catalog-backend-module-azure'; const builder = await CatalogBuilder.create(env); /** ... other processors and/or providers ... */ -+builder.addEntityProvider( -+ AzureDevOpsEntityProvider.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, -+ }), -+); +/* highlight-add-start */ +builder.addEntityProvider( + AzureDevOpsEntityProvider.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, + }), +); +/* highlight-add-end */ ``` ## Alternative Processor As an alternative to the entity provider `AzureDevOpsEntityProvider`, you can still use the `AzureDevopsDiscoveryProcessor`. -```diff -// In packages/backend/src/plugins/catalog.ts -+import { AzureDevOpsDiscoveryProcessor } from '@backstage/plugin-catalog-backend-module-azure'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { AzureDevOpsDiscoveryProcessor } from '@backstage/plugin-catalog-backend-module-azure'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); -+ builder.addProcessor(AzureDevOpsDiscoveryProcessor.fromConfig(env.config, { logger: env.logger })); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-next-line */ + builder.addProcessor(AzureDevOpsDiscoveryProcessor.fromConfig(env.config, { logger: env.logger })); + + // .. +} ``` ```yaml diff --git a/docs/integrations/azure/org.md b/docs/integrations/azure/org.md index acb43db182..403f0042a9 100644 --- a/docs/integrations/azure/org.md +++ b/docs/integrations/azure/org.md @@ -21,7 +21,7 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-msgraph Next add the basic configuration to `app-config.yaml` -```yaml +```yaml title="app-config.yaml" catalog: providers: microsoftGraphOrg: @@ -39,25 +39,30 @@ catalog: Finally, register the plugin in `catalog.ts`. For large organizations, this plugin can take a long time, so be careful setting low frequency / timeouts. -```diff - // packages/backend/src/plugins/catalog.ts -+import { MicrosoftGraphOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-msgraph'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { MicrosoftGraphOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-msgraph'; - export default async function createPlugin( +export default async function createPlugin( env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); +): Promise { + const builder = await CatalogBuilder.create(env); -+ builder.addEntityProvider( -+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { -+ logger: env.logger, -+ schedule: env.scheduler.createScheduledTaskRunner({ -+ frequency: { hours: 1 }, -+ timeout: { minutes: 50 }, -+ initialDelay: { seconds: 15} -+ }), -+ }), -+ ); + /* highlight-add-start */ + builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { hours: 1 }, + timeout: { minutes: 50 }, + initialDelay: { seconds: 15} + }), + }), + ); + /* highlight-add-end */ + + // .. +} ``` ## Authenticating with Microsoft Graph @@ -71,7 +76,7 @@ If you can't do this, you'll have to create an App Registration. ### App Registration -If none of the other authentication methods work, you can create an app registration in the azure portal. +If none of the other authentication methods work, you can create an app registration in the azure portal. By default the graph plugin requires the following Application permissions (not Delegated) for Microsoft Graph: - `GroupMember.Read.All` @@ -150,15 +155,17 @@ Entities can also be excluded from backstage by returning `undefined`. These Transformers are be registered when configuring `MicrosoftGraphOrgEntityProvider` -```diff - builder.addEntityProvider( - MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { - // ... -+ groupTransformer: myGroupTransformer, -+ userTransformer: myUserTransformer, -+ organizationTransformer: myOrganizationTransformer, - }), - ); +```ts +builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + // ... + /* highlight-add-start */ + groupTransformer: myGroupTransformer, + userTransformer: myUserTransformer, + organizationTransformer: myOrganizationTransformer, + /* highlight-add-end */ + }), +); ``` When using custom transformers, you may want to customize the data returned. @@ -243,7 +250,7 @@ Try importing a smaller set of data (e.g. `filter: displayName eq 'John Smith'`) See [Troubleshooting Azure Identity Authentication Issues](https://aka.ms/azsdk/js/identity/troubleshoot) -### Error while reading users from Microsoft Graph: Authorization_RequestDenied - Insufficient privileges to complete the operation. +### Error while reading users from Microsoft Graph: Authorization_RequestDenied - Insufficient privileges to complete the operation - Make sure you've granted all the required permissions to your application registration or managed identity - Make sure the permissions are `Application` permissions rather than `Delegated` diff --git a/docs/integrations/bitbucketCloud/discovery.md b/docs/integrations/bitbucketCloud/discovery.md index f6ceab9ff7..7074fcac1b 100644 --- a/docs/integrations/bitbucketCloud/discovery.md +++ b/docs/integrations/bitbucketCloud/discovery.md @@ -28,41 +28,46 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-bitbuck And then add the entity provider to your catalog builder: -```diff -// packages/backend/src/plugins/catalog.ts -+ import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); -+ builder.addEntityProvider( -+ BitbucketCloudEntityProvider.fromConfig(env.config, { -+ logger: env.logger, -+ scheduler: env.scheduler, -+ }), -+ ); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-start */ + builder.addEntityProvider( + BitbucketCloudEntityProvider.fromConfig(env.config, { + logger: env.logger, + scheduler: env.scheduler, + }), + ); + /* highlight-add-end */ - // [...] - } + // .. +} ``` Alternatively to the config-based schedule, you can use -```diff -- scheduler: env.scheduler, -+ schedule: env.scheduler.createScheduledTaskRunner({ -+ frequency: { minutes: 30 }, -+ timeout: { minutes: 3 }, -+ }), +```ts +/* highlight-remove-next-line */ +scheduler: env.scheduler, +/* highlight-add-start */ +schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, +}), +/* highlight-add-end */ ``` ### Installation with Events Support Please follow the installation instructions at -- https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md -- https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-bitbucket-cloud/README.md +- +- Additionally, you need to decide how you want to receive events from external sources like @@ -71,30 +76,35 @@ Additionally, you need to decide how you want to receive events from external so Set up your provider -```diff -// packages/backend/src/plugins/catalogEventBasedProviders.ts -+import { CatalogClient } from '@backstage/catalog-client'; -+import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud'; - import { EntityProvider } from '@backstage/plugin-catalog-node'; - import { EventSubscriber } from '@backstage/plugin-events-node'; - import { PluginEnvironment } from '../types'; +```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts" +/* highlight-add-start */ +import { CatalogClient } from '@backstage/catalog-client'; +import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud'; +/* highlight-add-end */ +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EventSubscriber } from '@backstage/plugin-events-node'; +import { PluginEnvironment } from '../types'; - export default async function createCatalogEventBasedProviders( -- _: PluginEnvironment, -+ env: PluginEnvironment, - ): Promise> { - const providers: Array< - (EntityProvider & EventSubscriber) | Array - > = []; -- // add your event-based entity providers here -+ providers.push( -+ BitbucketCloudEntityProvider.fromConfig(env.config, { -+ catalogApi: new CatalogClient({ discoveryApi: env.discovery }), -+ logger: env.logger, -+ scheduler: env.scheduler, -+ tokenManager: env.tokenManager, -+ }), -+ ); +export default async function createCatalogEventBasedProviders( + /* highlight-remove-next-line */ + _: PluginEnvironment, + /* highlight-add-next-line */ + env: PluginEnvironment, +): Promise> { + const providers: Array< + (EntityProvider & EventSubscriber) | Array + > = []; + // add your event-based entity providers here + /* highlight-add-start */ + providers.push( + BitbucketCloudEntityProvider.fromConfig(env.config, { + catalogApi: new CatalogClient({ discoveryApi: env.discovery }), + logger: env.logger, + scheduler: env.scheduler, + tokenManager: env.tokenManager, + }), + ); + /* highlight-add-end */ return providers.flat(); } ``` @@ -111,9 +121,7 @@ Very likely a `username` and `appPassword` will be required Additionally, you need to configure your entity provider instance(s): -```yaml -# app-config.yaml - +```yaml title="app-config.yaml" catalog: providers: bitbucketCloud: diff --git a/docs/integrations/bitbucketServer/discovery.md b/docs/integrations/bitbucketServer/discovery.md index db1cc43ea4..05d0510553 100644 --- a/docs/integrations/bitbucketServer/discovery.md +++ b/docs/integrations/bitbucketServer/discovery.md @@ -26,29 +26,31 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-bitbuck And then add the entity provider to your catalog builder: -```diff - // In packages/backend/src/plugins/catalog.ts -+ import { BitbucketServerEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-server'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { BitbucketServerEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-server'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); -+ builder.addEntityProvider( -+ BitbucketServerEntityProvider.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, -+ }), -+ ); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-start */ + builder.addEntityProvider( + BitbucketServerEntityProvider.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, + }), + ); + /* highlight-add-end */ - // [...] - } + // .. +} ``` ## Configuration @@ -57,9 +59,7 @@ To use the entity provider, you'll need a [Bitbucket Server integration set up]( Additionally, you need to configure your entity provider instance(s): -```yaml -# app-config.yaml - +```yaml title="app-config.yaml" catalog: providers: bitbucketServer: diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index bbbe86a834..499cb32812 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -28,37 +28,39 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-github And then add the entity provider to your catalog builder: -```diff - // In packages/backend/src/plugins/catalog.ts -+ import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); -+ 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, -+ }), -+ ); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-start */ + 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, + }), + ); + /* highlight-add-end */ - // [...] - } + // .. +} ``` ## Installation with Events Support Please follow the installation instructions at -- https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md -- https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-github/README.md +- +- Additionally, you need to decide how you want to receive events from external sources like @@ -67,34 +69,38 @@ Additionally, you need to decide how you want to receive events from external so Set up your provider -```diff -// packages/backend/src/plugins/catalogEventBasedProviders.ts -+import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; - import { EntityProvider } from '@backstage/plugin-catalog-node'; - import { EventSubscriber } from '@backstage/plugin-events-node'; - import { PluginEnvironment } from '../types'; - export default async function createCatalogEventBasedProviders( -- _: PluginEnvironment, -+ env: PluginEnvironment, - ): Promise> { - const providers: Array< - (EntityProvider & EventSubscriber) | Array - > = []; -- // add your event-based entity providers here -+ providers.push( -+ 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, -+ }), -+ ); - return providers.flat(); - } +```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts" +/* highlight-add-next-line */ +import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EventSubscriber } from '@backstage/plugin-events-node'; +import { PluginEnvironment } from '../types'; +export default async function createCatalogEventBasedProviders( + /* highlight-remove-next-line */ + _: PluginEnvironment, + /* highlight-add-next-line */ + env: PluginEnvironment, +): Promise> { + const providers: Array< + (EntityProvider & EventSubscriber) | Array + > = []; + // add your event-based entity providers here + /* highlight-add-start */ + providers.push( + 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, + }), + ); + /* highlight-add-end */ + return providers.flat(); +} ``` You can check the official docs to [configure your webhook](https://docs.github.com/en/developers/webhooks-and-events/webhooks/creating-webhooks) and to [secure your request](https://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks). The webhook will need to be configured to forward `push` events. @@ -255,34 +261,40 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-github And then add the processors to your catalog builder: -```diff -// In packages/backend/src/plugins/catalog.ts -+import { -+ GithubDiscoveryProcessor, -+ GithubOrgReaderProcessor, -+} from '@backstage/plugin-catalog-backend-module-github'; -+import { -+ ScmIntegrations, -+ DefaultGithubCredentialsProvider -+} from '@backstage/integration'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-start */ +import { + GithubDiscoveryProcessor, + GithubOrgReaderProcessor, +} from '@backstage/plugin-catalog-backend-module-github'; +import { + ScmIntegrations, + DefaultGithubCredentialsProvider +} from '@backstage/integration'; +/* highlight-add-end */ - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); -+ const integrations = ScmIntegrations.fromConfig(env.config); -+ const githubCredentialsProvider = -+ DefaultGithubCredentialsProvider.fromIntegrations(integrations); -+ builder.addProcessor( -+ GithubDiscoveryProcessor.fromConfig(env.config, { -+ logger: env.logger, -+ githubCredentialsProvider, -+ }), -+ GithubOrgReaderProcessor.fromConfig(env.config, { -+ logger: env.logger, -+ githubCredentialsProvider, -+ }), -+ ); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-start */ + const integrations = ScmIntegrations.fromConfig(env.config); + const githubCredentialsProvider = + DefaultGithubCredentialsProvider.fromIntegrations(integrations); + builder.addProcessor( + GithubDiscoveryProcessor.fromConfig(env.config, { + logger: env.logger, + githubCredentialsProvider, + }), + GithubOrgReaderProcessor.fromConfig(env.config, { + logger: env.logger, + githubCredentialsProvider, + }), + ); + /* highlight-add-end */ + + // .. +} ``` ## Configuration diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md index 0aa9997bae..4600d65466 100644 --- a/docs/integrations/github/org.md +++ b/docs/integrations/github/org.md @@ -36,36 +36,41 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-github Update the catalog plugin initialization in your backend to add the provider and schedule it: -```diff - // packages/backend/src/plugins/catalog.ts -+import { GithubOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { GithubOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); -+ // The org URL below needs to match a configured integrations.github entry -+ // specified in your app-config. -+ builder.addEntityProvider( -+ GithubOrgEntityProvider.fromConfig(env.config, { -+ id: 'production', -+ orgUrl: 'https://github.com/backstage', -+ logger: env.logger, -+ schedule: env.scheduler.createScheduledTaskRunner({ -+ frequency: { minutes: 60 }, -+ timeout: { minutes: 15 }, -+ }), -+ }), -+ ); + /* highlight-add-start */ + // The org URL below needs to match a configured integrations.github entry + // specified in your app-config. + builder.addEntityProvider( + GithubOrgEntityProvider.fromConfig(env.config, { + id: 'production', + orgUrl: 'https://github.com/backstage', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 60 }, + timeout: { minutes: 15 }, + }), + }), + ); + /* highlight-add-end */ + + // .. +} ``` ## Installation with Events Support Please follow the installation instructions at -- https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md -- https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-github/README.md +- +- Additionally, you need to decide how you want to receive events from external sources like @@ -74,33 +79,37 @@ Additionally, you need to decide how you want to receive events from external so Set up your provider -```diff -// packages/backend/src/plugins/catalogEventBasedProviders.ts -+import { GithubOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; - import { EntityProvider } from '@backstage/plugin-catalog-node'; - import { EventSubscriber } from '@backstage/plugin-events-node'; - import { PluginEnvironment } from '../types'; - export default async function createCatalogEventBasedProviders( -- _: PluginEnvironment, -+ env: PluginEnvironment, - ): Promise> { - const providers: Array< - (EntityProvider & EventSubscriber) | Array - > = []; -- // add your event-based entity providers here -+ providers.push( -+ GithubOrgEntityProvider.fromConfig(env.config, { -+ id: 'production', -+ orgUrl: 'https://github.com/backstage', -+ logger: env.logger, -+ schedule: env.scheduler.createScheduledTaskRunner({ -+ frequency: { minutes: 60 }, -+ timeout: { minutes: 15 }, -+ }), -+ }), -+ ); - return providers.flat(); - } +```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts" +/* highlight-add-next-line */ +import { GithubOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EventSubscriber } from '@backstage/plugin-events-node'; +import { PluginEnvironment } from '../types'; +export default async function createCatalogEventBasedProviders( + /* highlight-remove-next-line */ + _: PluginEnvironment, + /* highlight-add-next-line */ + env: PluginEnvironment, +): Promise> { + const providers: Array< + (EntityProvider & EventSubscriber) | Array + > = []; + // add your event-based entity providers here + /* highlight-add-start */ + providers.push( + GithubOrgEntityProvider.fromConfig(env.config, { + id: 'production', + orgUrl: 'https://github.com/backstage', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 60 }, + timeout: { minutes: 15 }, + }), + }), + ); + /* highlight-add-end */ + return providers.flat(); +} ``` You can check the official docs to [configure your webhook](https://docs.github.com/en/developers/webhooks-and-events/webhooks/creating-webhooks) and to [secure your request](https://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks). @@ -193,8 +202,7 @@ async (user, ctx): Promise => { Once you have imported the emails you can resolve users in your sign-in in resolver using the catalog entity search via email -```typescript -// packages/backend/src/plugins/auth.ts +```typescript title="packages/backend/src/plugins/auth.ts" ctx.signInWithCatalogUser({ filter: { kind: ['User'], @@ -223,10 +231,9 @@ install and register it in the catalog plugin: yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-github ``` -```typescript -// packages/backend/src/plugins/catalog.ts +```typescript title="packages/backend/src/plugins/catalog.ts" import { GithubOrgReaderProcessor } from '@backstage/plugin-catalog-backend-module-github'; -// ... + builder.addProcessor( GithubOrgReaderProcessor.fromConfig(env.config, { logger: env.logger }), ); diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index 4c448d3892..8c95243b04 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -42,9 +42,7 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-gitlab Once you've done that, you'll also need to add the segment below to `packages/backend/src/plugins/catalog.ts`: -```ts -/* packages/backend/src/plugins/catalog.ts */ - +```ts title="packages/backend/src/plugins/catalog.ts" import { GitlabDiscoveryEntityProvider } from '@backstage/plugin-catalog-backend-module-gitlab'; const builder = await CatalogBuilder.create(env); @@ -91,17 +89,22 @@ The target is composed of three parts: Finally, you will have to add the processor in the catalog initialization code of your backend. -```diff -// In packages/backend/src/plugins/catalog.ts -+import { GitLabDiscoveryProcessor } from '@backstage/plugin-catalog-backend-module-gitlab'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { GitLabDiscoveryProcessor } from '@backstage/plugin-catalog-backend-module-gitlab'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); -+ builder.addProcessor( -+ GitLabDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }) -+ ); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); + /* highlight-add-start */ + builder.addProcessor( + GitLabDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }) + ); + /* highlight-add-end */ + + // .. +} ``` If you don't want create location object if file with component definition do not exists in project, you can set the `skipReposWithoutExactFileMatch` option. That can reduce count of request to gitlab with 404 status code. diff --git a/docs/integrations/ldap/org.md b/docs/integrations/ldap/org.md index f8b9a18c55..7306ab4105 100644 --- a/docs/integrations/ldap/org.md +++ b/docs/integrations/ldap/org.md @@ -35,28 +35,33 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-ldap Update the catalog plugin initialization in your backend to add the provider and schedule it: -```diff - // packages/backend/src/plugins/catalog.ts -+import { LdapOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-ldap'; +```ts title="packages/backend/src/plugins/catalog.ts" +/* highlight-add-next-line */ +import { LdapOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-ldap'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const builder = await CatalogBuilder.create(env); -+ // The target parameter below needs to match the ldap.providers.target -+ // value specified in your app-config. -+ builder.addEntityProvider( -+ LdapOrgEntityProvider.fromConfig(env.config, { -+ id: 'our-ldap-master', -+ target: 'ldaps://ds.example.net', -+ logger: env.logger, -+ schedule: env.scheduler.createScheduledTaskRunner({ -+ frequency: { minutes: 60 }, -+ timeout: { minutes: 15 }, -+ }), -+ }), -+ ); + /* highlight-add-start */ + // The target parameter below needs to match the ldap.providers.target + // value specified in your app-config. + builder.addEntityProvider( + LdapOrgEntityProvider.fromConfig(env.config, { + id: 'our-ldap-master', + target: 'ldaps://ds.example.net', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 60 }, + timeout: { minutes: 15 }, + }), + }), + ); + /* highlight-add-end */ + + // .. +} ``` After this, you also have to add some configuration in your app-config that @@ -345,8 +350,7 @@ frequency with which they are refreshed, separately from other processors. The `LdapOrgReaderProcessor` is not registered by default, so you have to register it in the catalog plugin: -```typescript -// packages/backend/src/plugins/catalog.ts +```typescript title="packages/backend/src/plugins/catalog.ts" builder.addProcessor( LdapOrgReaderProcessor.fromConfig(env.config, { logger: env.logger, diff --git a/docs/permissions/custom-rules.md b/docs/permissions/custom-rules.md index d82836b9ae..cab138ed9e 100644 --- a/docs/permissions/custom-rules.md +++ b/docs/permissions/custom-rules.md @@ -10,7 +10,7 @@ For some use cases, you may want to define custom [rules](./concepts.md#resource Plugins should export a rule factory that provides type-safety that ensures compatibility with the plugin's backend. The catalog plugin exports `createCatalogPermissionRule` from `@backstage/plugin-catalog-backend/alpha` for this purpose. Note: the `/alpha` path segment is temporary until this API is marked as stable. For this example, we'll define the rule in `packages/backend/src/plugins/permission.ts`, but you can put it anywhere that's accessible by your `backend` package. -```typescript +```typescript title="packages/backend/src/plugins/permission.ts" import type { Entity } from '@backstage/catalog-model'; import { createCatalogPermissionRule } from '@backstage/plugin-catalog-backend/alpha'; import { createConditionFactory } from '@backstage/plugin-permission-node'; @@ -51,9 +51,7 @@ Now that we have a custom rule defined, we need provide it to the catalog plugin The api for providing custom rules may differ between plugins, but there should typically be some integration point during the creation of the backend router. For the catalog, this integration point is exposed via `CatalogBuilder.addPermissionRules`. -```typescript -// packages/backend/src/plugins/catalog.ts - +```typescript title="packages/backend/src/plugins/catalog.ts" import { isInSystemRule } from './permission'; // The CatalogBuilder with the addPermissionRules function is in the alpha path import { CatalogBuilder } from '@backstage/plugin-catalog-backend/alpha'; @@ -76,12 +74,9 @@ The new rule is now ready for use in a permission policy! Let's bring this all together by extending the example policy from the previous section. -```diff -// packages/backend/src/plugins/permission.ts - -+ import { isInSystem } from './catalog'; - -... +```ts title="packages/backend/src/plugins/permission.ts" +/* highlight-add-next-line */ +import { isInSystem } from './catalog'; class TestPermissionPolicy implements PermissionPolicy { async handle( @@ -91,17 +86,21 @@ class TestPermissionPolicy implements PermissionPolicy { if (isResourcePermission(request.permission, 'catalog-entity')) { return createCatalogConditionalDecision( request.permission, -- catalogConditions.isEntityOwner({ -- claims: user?.identity.ownershipEntityRefs ?? [], -- }), -+ { -+ anyOf: [ -+ catalogConditions.isEntityOwner({ -+ claims: user?.identity.ownershipEntityRefs ?? [] -+ }), -+ isInSystem('interviewing') -+ ] -+ } + /* highlight-remove-start */ + catalogConditions.isEntityOwner({ + claims: user?.identity.ownershipEntityRefs ?? [], + }), + /* highlight-remove-end */ + /* highlight-add-start */ + { + anyOf: [ + catalogConditions.isEntityOwner({ + claims: user?.identity.ownershipEntityRefs ?? [] + }), + isInSystem('interviewing') + ] + } + /* highlight-add-end */ ); } diff --git a/docs/permissions/frontend-integration.md b/docs/permissions/frontend-integration.md index d7302f9083..1e83f8ad7d 100644 --- a/docs/permissions/frontend-integration.md +++ b/docs/permissions/frontend-integration.md @@ -12,27 +12,29 @@ However, there are some cases where the integrator needs to supplement the polic If your Backstage permission policy may return a `DENY` for users requesting the `catalogEntityCreatePermission`, it may make sense, for example, to remove access to the `/catalog-import` page entirely: -```diff -// packages/app/src/App.tsx - -... - -+ import { RequirePermission } from '@backstage/plugin-permission-react'; -+ import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common'; - -... - -- } /> -+ -+ -+ -+ } -+ /> -... +```tsx title="packages/app/src/App.tsx" +/* highlight-add-start */ +import { RequirePermission } from '@backstage/plugin-permission-react'; +import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common'; +/* highlight-add-end */ +const routes = ( + + {/* highlight-remove-next-line */} + } /> + {/* highlight-add-start */} + + + + } + /> + {/* highlight-add-end */} + {/* ... */} + +); ``` With this change, users who are denied the `catalogEntityCreatePermission` should now be unable to access the `/catalog-import` page. diff --git a/docs/permissions/getting-started.md b/docs/permissions/getting-started.md index e71601b703..76cccbdf38 100644 --- a/docs/permissions/getting-started.md +++ b/docs/permissions/getting-started.md @@ -46,64 +46,67 @@ The permissions framework uses a new `permission-backend` plugin to accept autho 1. Add `@backstage/plugin-permission-backend` as a dependency of your Backstage backend: -```bash -# From your Backstage root directory -$ yarn add --cwd packages/backend @backstage/plugin-permission-backend -``` + ```bash + # From your Backstage root directory + $ yarn add --cwd packages/backend @backstage/plugin-permission-backend + ``` 2. Add the following to a new file, `packages/backend/src/plugins/permission.ts`. This adds the permission-backend router, and configures it with a policy which allows everything. -```typescript -import { createRouter } from '@backstage/plugin-permission-backend'; -import { - AuthorizeResult, - PolicyDecision, -} from '@backstage/plugin-permission-common'; -import { PermissionPolicy } from '@backstage/plugin-permission-node'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; + ```typescript title="packages/backend/src/plugins/permission.ts" + import { createRouter } from '@backstage/plugin-permission-backend'; + import { + AuthorizeResult, + PolicyDecision, + } from '@backstage/plugin-permission-common'; + import { PermissionPolicy } from '@backstage/plugin-permission-node'; + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; -class TestPermissionPolicy implements PermissionPolicy { - async handle(): Promise { - return { result: AuthorizeResult.ALLOW }; - } -} + class TestPermissionPolicy implements PermissionPolicy { + async handle(): Promise { + return { result: AuthorizeResult.ALLOW }; + } + } -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - config: env.config, - logger: env.logger, - discovery: env.discovery, - policy: new TestPermissionPolicy(), - identity: env.identity, - }); -} -``` + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + config: env.config, + logger: env.logger, + discovery: env.discovery, + policy: new TestPermissionPolicy(), + identity: env.identity, + }); + } + ``` 3. Wire up the permission policy in `packages/backend/src/index.ts`. [The index in the example backend](https://github.com/backstage/backstage/blob/master/packages/backend/src/index.ts) shows how to do this. You’ll need to import the module from the previous step, create a plugin environment, and add the router to the express app: -```diff - import proxy from './plugins/proxy'; - import techdocs from './plugins/techdocs'; - import search from './plugins/search'; -+ import permission from './plugins/permission'; + ```ts title="packages/backend/src/index.ts" + import proxy from './plugins/proxy'; + import techdocs from './plugins/techdocs'; + import search from './plugins/search'; + /* highlight-add-next-line */ + import permission from './plugins/permission'; - ... + async function main() { + const techdocsEnv = useHotMemoize(module, () => createEnv('techdocs')); + const searchEnv = useHotMemoize(module, () => createEnv('search')); + const appEnv = useHotMemoize(module, () => createEnv('app')); + /* highlight-add-next-line */ + const permissionEnv = useHotMemoize(module, () => createEnv('permission')); + // .. - const techdocsEnv = useHotMemoize(module, () => createEnv('techdocs')); - const searchEnv = useHotMemoize(module, () => createEnv('search')); - const appEnv = useHotMemoize(module, () => createEnv('app')); -+ const permissionEnv = useHotMemoize(module, () => createEnv('permission')); - - ... - - apiRouter.use('/techdocs', await techdocs(techdocsEnv)); - apiRouter.use('/proxy', await proxy(proxyEnv)); - apiRouter.use('/search', await search(searchEnv)); -+ apiRouter.use('/permission', await permission(permissionEnv)); -``` + apiRouter.use('/techdocs', await techdocs(techdocsEnv)); + apiRouter.use('/proxy', await proxy(proxyEnv)); + apiRouter.use('/search', await search(searchEnv)); + /* highlight-add-next-line */ + apiRouter.use('/permission', await permission(permissionEnv)); + // .. + } + ``` ### 2. Enable and test the permissions system @@ -111,40 +114,46 @@ Now that the permission backend is running, it’s time to enable the permission 1. Set the property `permission.enabled` to `true` in `app-config.yaml`. -```yaml -permission: - enabled: true -``` + ```yaml title="app-config.yaml" + permission: + enabled: true + ``` 2. Update the PermissionPolicy in `packages/backend/src/plugins/permission.ts` to disable a permission that’s easy for us to test. This policy rejects any attempt to delete a catalog entity: -```diff - import { createRouter } from '@backstage/plugin-permission-backend'; - import { - AuthorizeResult, - PolicyDecision, - } from '@backstage/plugin-permission-common'; -- import { PermissionPolicy } from '@backstage/plugin-permission-node'; -+ import { -+ PermissionPolicy, -+ PolicyQuery, -+ } from '@backstage/plugin-permission-node'; - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; + ```ts title="packages/backend/src/plugins/permission.ts" + import { createRouter } from '@backstage/plugin-permission-backend'; + import { + AuthorizeResult, + PolicyDecision, + } from '@backstage/plugin-permission-common'; + /* highlight-remove-next-line */ + import { PermissionPolicy } from '@backstage/plugin-permission-node'; + /* highlight-add-start */ + import { + PermissionPolicy, + PolicyQuery, + } from '@backstage/plugin-permission-node'; + /* highlight-add-end */ + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; - class TestPermissionPolicy implements PermissionPolicy { -- async handle(): Promise { -+ async handle(request: PolicyQuery): Promise { -+ if (request.permission.name === 'catalog.entity.delete') { -+ return { -+ result: AuthorizeResult.DENY, -+ }; -+ } -+ - return { result: AuthorizeResult.ALLOW }; + class TestPermissionPolicy implements PermissionPolicy { + /* highlight-remove-next-line */ + async handle(): Promise { + /* highlight-add-start */ + async handle(request: PolicyQuery): Promise { + if (request.permission.name === 'catalog.entity.delete') { + return { + result: AuthorizeResult.DENY, + }; + } + /* highlight-add-end */ + + return { result: AuthorizeResult.ALLOW }; + } } - } -``` + ``` 3. Now that you’ve made this change, you should find that the unregister entity menu option on the catalog entity page is disabled. diff --git a/docs/permissions/plugin-authors/01-setup.md b/docs/permissions/plugin-authors/01-setup.md index c368505849..46673ed307 100644 --- a/docs/permissions/plugin-authors/01-setup.md +++ b/docs/permissions/plugin-authors/01-setup.md @@ -18,7 +18,7 @@ The source code is available here: - [todo-list-backend](https://github.com/backstage/backstage/blob/master/plugins/example-todo-list-backend) - [todo-list-common](https://github.com/backstage/backstage/blob/master/plugins/example-todo-list-common) -1. Copy-paste the three folders into the plugins folder of your backstage application repository (removing the `example-` prefix from each folder) or run the following script from the root of your backstage application: +1. Copy-paste the three folders into the plugins folder of your backstage application repository (removing the `example-` prefix from each folder) or run the following script from the root of your backstage application: ```bash $ cd $(mktemp -d) @@ -37,7 +37,7 @@ The source code is available here: **Important**: if you are on **Windows**, make sure you have WSL and git installed on your machine before executing the script above. -2. Add these packages as dependencies for your Backstage app: +2. Add these packages as dependencies for your Backstage app: ```sh # From your Backstage root directory @@ -45,11 +45,11 @@ The source code is available here: $ yarn add --cwd packages/app @internal/plugin-todo-list ``` -3. Include the backend and frontend plugin in your application: +3. Include the backend and frontend plugin in your application: Create a new `packages/backend/src/plugins/todolist.ts` with the following content: - ```typescript + ```typescript title="packages/backend/src/plugins/todolist.ts" import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; import { createRouter } from '@internal/plugin-todo-list-backend'; import { Router } from 'express'; @@ -71,40 +71,47 @@ The source code is available here: Apply the following changes to `packages/backend/src/index.ts`: - ```diff - import techdocs from './plugins/techdocs'; - + import todoList from './plugins/todolist'; - import search from './plugins/search'; - - ... + ```ts title="packages/backend/src/index.ts" + import techdocs from './plugins/techdocs'; + /* highlight-add-next-line */ + import todoList from './plugins/todolist'; + import search from './plugins/search'; + async function main() { const searchEnv = useHotMemoize(module, () => createEnv('search')); const appEnv = useHotMemoize(module, () => createEnv('app')); - + const todoListEnv = useHotMemoize(module, () => createEnv('todolist')); - - ... + /* highlight-add-next-line */ + const todoListEnv = useHotMemoize(module, () => createEnv('todolist')); + // .. apiRouter.use('/proxy', await proxy(proxyEnv)); apiRouter.use('/search', await search(searchEnv)); apiRouter.use('/permission', await permission(permissionEnv)); - + apiRouter.use('/todolist', await todoList(todoListEnv)); + /* highlight-add-next-line */ + apiRouter.use('/todolist', await todoList(todoListEnv)); // Add backends ABOVE this line; this 404 handler is the catch-all fallback apiRouter.use(notFoundHandler()); + // .. + } ``` Apply the following changes to `packages/app/src/App.tsx`: - ```diff - + import { TodoListPage } from '@internal/plugin-todo-list'; - - ... + ```tsx title="packages/app/src/App.tsx" + /* highlight-add-next-line */ + import { TodoListPage } from '@internal/plugin-todo-list'; + const routes = ( + }> {searchPage} } /> - + } /> + {/* highlight-add-next-line */} + } /> + {/* ... */} + ); ``` Now if you start your application you should be able to reach the `/todo-list` page: 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 44a3e43718..837be197cf 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 @@ -14,19 +14,25 @@ We'll start by creating a new permission, and then we'll use the permission api Let's navigate to the file `plugins/todo-list-common/src/permissions.ts` and add our first permission: -```diff - import { createPermission } from '@backstage/plugin-permission-common'; +```ts title="plugins/todo-list-common/src/permissions.ts" +import { createPermission } from '@backstage/plugin-permission-common'; -- export const tempExamplePermission = createPermission({ -- name: 'temp.example.noop', -- attributes: {}, -+ export const todoListCreatePermission = createPermission({ -+ name: 'todo.list.create', -+ attributes: { action: 'create' }, - }); +/* highlight-remove-start */ +export const tempExamplePermission = createPermission({ + name: 'temp.example.noop', + attributes: {}, +/* highlight-remove-end */ +/* highlight-add-start */ +export const todoListCreatePermission = createPermission({ + name: 'todo.list.create', + attributes: { action: 'create' }, +/* highlight-add-end */ +}); -- export const todoListPermissions = [tempExamplePermission]; -+ export const todoListPermissions = [todoListCreatePermission]; +/* highlight-remove-next-line */ +export const todoListPermissions = [tempExamplePermission]; +/* highlight-add-next-line */ +export const todoListPermissions = [todoListCreatePermission]; ``` For this tutorial, we've automatically exported all permissions from this file (see `plugins/todo-list-common/src/index.ts`). @@ -44,81 +50,86 @@ $ yarn workspace @internal/plugin-todo-list-backend \ Edit `plugins/todo-list-backend/src/service/router.ts`: -```diff -... +```ts title="plugins/todo-list-backend/src/service/router.ts" +/* highlight-remove-start */ +import { InputError } from '@backstage/errors'; +import { IdentityApi } from '@backstage/plugin-auth-node'; +/* highlight-remove-end */ +/* highlight-add-start */ +import { InputError, NotAllowedError } from '@backstage/errors'; +import { getBearerTokenFromAuthorizationHeader, IdentityApi } from '@backstage/plugin-auth-node'; +import { PermissionEvaluator, AuthorizeResult } from '@backstage/plugin-permission-common'; +import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +/* highlight-add-end */ -- import { InputError } from '@backstage/errors'; -- import { IdentityApi } from '@backstage/plugin-auth-node'; -+ import { InputError, NotAllowedError } from '@backstage/errors'; -+ import { getBearerTokenFromAuthorizationHeader, IdentityApi } from '@backstage/plugin-auth-node'; -+ import { PermissionEvaluator, AuthorizeResult } from '@backstage/plugin-permission-common'; -+ import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +export interface RouterOptions { + logger: Logger; + identity: IdentityApi; + /* highlight-add-next-line */ + permissions: PermissionEvaluator; +} -... +export async function createRouter( + options: RouterOptions, +): Promise { + /* highlight-remove-next-line */ + const { logger, identity } = options; + /* highlight-add-next-line */ + const { logger, identity, permissions } = options; - export interface RouterOptions { - logger: Logger; - identity: IdentityApi; -+ permissions: PermissionEvaluator; - } + router.post('/todos', async (req, res) => { + let author: string | undefined = undefined; - export async function createRouter( - options: RouterOptions, - ): Promise { -- const { logger, identity } = options; -+ const { logger, identity, permissions } = options; + const user = await identity.getIdentity({ request: req }); + author = user?.identity.userEntityRef; + /* highlight-add-start */ + const token = getBearerTokenFromAuthorizationHeader( + req.header('authorization'), + ); + const decision = ( + await permissions.authorize([{ permission: todoListCreatePermission }], { + token, + }) + )[0]; - ... + if (decision.result === AuthorizeResult.DENY) { + throw new NotAllowedError('Unauthorized'); + } + /* highlight-add-end */ - router.post('/todos', async (req, res) => { - let author: string | undefined = undefined; + if (!isTodoCreateRequest(req.body)) { + throw new InputError('Invalid payload'); + } - const user = await identity.getIdentity({ request: req }); - author = user?.identity.userEntityRef; -+ const token = getBearerTokenFromAuthorizationHeader( -+ req.header('authorization'), -+ ); -+ const decision = ( -+ await permissions.authorize([{ permission: todoListCreatePermission }], { -+ token, -+ }) -+ )[0]; - -+ if (decision.result === AuthorizeResult.DENY) { -+ throw new NotAllowedError('Unauthorized'); -+ } - - if (!isTodoCreateRequest(req.body)) { - throw new InputError('Invalid payload'); - } - - const todo = add({ title: req.body.title, author }); - res.json(todo); - }); + const todo = add({ title: req.body.title, author }); + res.json(todo); +}); ``` Pass the `permissions` object to the plugin in `packages/backend/src/plugins/todolist.ts`: -```diff - import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; - import { createRouter } from '@internal/plugin-todo-list-backend'; - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; +```ts title="packages/backend/src/plugins/todolist.ts" +import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; +import { createRouter } from '@internal/plugin-todo-list-backend'; +import { Router } from 'express'; +import { PluginEnvironment } from '../types'; - export default async function createPlugin({ +export default async function createPlugin({ + logger, + discovery, + /* highlight-add-next-line */ + permissions, +}: PluginEnvironment): Promise { + return await createRouter({ logger, - discovery, -+ permissions, - }: PluginEnvironment): Promise { - return await createRouter({ - logger, - identity: DefaultIdentityClient.create({ - discovery, - issuer: await discovery.getExternalBaseUrl('auth'), - }), -+ permissions, - }); - } + identity: DefaultIdentityClient.create({ + discovery, + issuer: await discovery.getExternalBaseUrl('auth'), + }), + /* highlight-add-next-line */ + permissions, + }); +} ``` That's it! Now your plugin is fully configured. Let's try to test the logic by denying the permission. @@ -129,200 +140,219 @@ Before running this step, please make sure you followed the steps described in [ In order to test the logic above, the integrators of your backstage instance need to change their permission policy to return `DENY` for our newly-created permission: -```diff -// packages/backend/src/plugins/permission.ts +```ts title="packages/backend/src/plugins/permission.ts" +/* highlight-add-start */ +import { + BackstageIdentityResponse, +} from '@backstage/plugin-auth-node'; +/* highlight-add-end */ +import { + PermissionPolicy, + /* highlight-add-next-line */ + PolicyQuery, +} from '@backstage/plugin-permission-node'; +/* highlight-add-start */ +import { isPermission } from '@backstage/plugin-permission-common'; +import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +/* highlight-add-end */ -+ import { -+ BackstageIdentityResponse, -+ } from '@backstage/plugin-auth-node'; - import { - PermissionPolicy, -+ PolicyQuery, - } from '@backstage/plugin-permission-node'; -+ import { isPermission } from '@backstage/plugin-permission-common'; -+ import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; - - class TestPermissionPolicy implements PermissionPolicy { -- async handle(): Promise { -+ async handle( -+ request: PolicyQuery, -+ _user?: BackstageIdentityResponse, -+ ): Promise { -+ if (isPermission(request.permission, todoListCreatePermission)) { -+ return { -+ result: AuthorizeResult.DENY, -+ }; -+ } -+ +class TestPermissionPolicy implements PermissionPolicy { + /* highlight-remove-next-line */ + async handle(): Promise { + /* highlight-add-start */ + async handle( + request: PolicyQuery, + _user?: BackstageIdentityResponse, + ): Promise { + if (isPermission(request.permission, todoListCreatePermission)) { return { - result: AuthorizeResult.ALLOW, + result: AuthorizeResult.DENY, }; - } + } + /* highlight-add-end */ + + return { + result: AuthorizeResult.ALLOW, + }; +} ``` Now the frontend should show an error whenever you try to create a new Todo item. Let's flip the result back to `ALLOW` before moving on. -```diff - if (isPermission(request.permission, todoListCreatePermission)) { - return { -- result: AuthorizeResult.DENY, -+ result: AuthorizeResult.ALLOW, - }; - } +```ts +if (isPermission(request.permission, todoListCreatePermission)) { + return { + /* highlight-remove-next-line */ + result: AuthorizeResult.DENY, + /* highlight-add-next-line */ + result: AuthorizeResult.ALLOW, + }; +} ``` At this point everything is working but if you run `yarn tsc` you'll get some errors, let's fix those up. First we'll clean up the `plugins/todo-list-backend/src/service/router.test.ts`: -```diff - import { getVoidLogger } from '@backstage/backend-common'; - import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; -+ import { PermissionEvaluator } from '@backstage/plugin-permission-common'; - import express from 'express'; - import request from 'supertest'; +```ts title="plugins/todo-list-backend/src/service/router.test.ts" +import { getVoidLogger } from '@backstage/backend-common'; +import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; +/* highlight-add-next-line */ +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import express from 'express'; +import request from 'supertest'; - import { createRouter } from './router'; +import { createRouter } from './router'; -+ const mockedAuthorize: jest.MockedFunction = -+ jest.fn(); -+ const mockedPermissionQuery: jest.MockedFunction< -+ PermissionEvaluator['authorizeConditional'] -+ > = jest.fn(); +/* highlight-add-start */ +const mockedAuthorize: jest.MockedFunction = + jest.fn(); +const mockedPermissionQuery: jest.MockedFunction< + PermissionEvaluator['authorizeConditional'] +> = jest.fn(); -+ const permissionEvaluator: PermissionEvaluator = { -+ authorize: mockedAuthorize, -+ authorizeConditional: mockedPermissionQuery, -+ }; +const permissionEvaluator: PermissionEvaluator = { + authorize: mockedAuthorize, + authorizeConditional: mockedPermissionQuery, +}; +/* highlight-add-end */ - describe('createRouter', () => { - let app: express.Express; +describe('createRouter', () => { + let app: express.Express; - beforeAll(async () => { - const router = await createRouter({ - logger: getVoidLogger(), - identity: {} as DefaultIdentityClient, -+ permissions: permissionEvaluator, - }); - app = express().use(router); - }); - - beforeEach(() => { - jest.resetAllMocks(); - }); - - describe('GET /health', () => { - it('returns ok', async () => { - const response = await request(app).get('/health'); - - expect(response.status).toEqual(200); - expect(response.body).toEqual({ status: 'ok' }); - }); + beforeAll(async () => { + const router = await createRouter({ + logger: getVoidLogger(), + identity: {} as DefaultIdentityClient, + /* highlight-add-next-line */ + permissions: permissionEvaluator, }); + app = express().use(router); }); + beforeEach(() => { + jest.resetAllMocks(); + }); + + describe('GET /health', () => { + it('returns ok', async () => { + const response = await request(app).get('/health'); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ status: 'ok' }); + }); + }); +}); ``` Then we want to update the `plugins/todo-list-backend/src/service/standaloneServer.ts`, first we need to add the `@backstage/plugin-permission-node` package to `plugins/todo-list-backend/package.json` and then we can make the following edits: -```diff - import { - createServiceBuilder, - loadBackendConfig, - SingleHostDiscovery, -+ ServerTokenManager, - } from '@backstage/backend-common'; - import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; -+ import { ServerPermissionClient } from '@backstage/plugin-permission-node'; - import { Server } from 'http'; - import { Logger } from 'winston'; - import { createRouter } from './router'; +```ts title="plugins/todo-list-backend/src/service/standaloneServer.ts" +import { + createServiceBuilder, + loadBackendConfig, + SingleHostDiscovery, + /* highlight-add-next-line */ + ServerTokenManager, +} from '@backstage/backend-common'; +import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; +/* highlight-add-next-line */ +import { ServerPermissionClient } from '@backstage/plugin-permission-node'; +import { Server } from 'http'; +import { Logger } from 'winston'; +import { createRouter } from './router'; - export interface ServerOptions { - port: number; - enableCors: boolean; - logger: Logger; +export interface ServerOptions { + port: number; + enableCors: boolean; + logger: Logger; +} + +export async function startStandaloneServer( + options: ServerOptions, +): Promise { + const logger = options.logger.child({ service: 'todo-list-backend' }); + logger.debug('Starting application server...'); + const config = await loadBackendConfig({ logger, argv: process.argv }); + const discovery = SingleHostDiscovery.fromConfig(config); + /* highlight-add-start */ + const tokenManager = ServerTokenManager.fromConfig(config, { + logger, + }); + const permissions = ServerPermissionClient.fromConfig(config, { + discovery, + tokenManager, + }); + /* highlight-add-end */ + const router = await createRouter({ + logger, + identity: DefaultIdentityClient.create({ + discovery, + issuer: await discovery.getExternalBaseUrl('auth'), + }), + /* highlight-add-next-line */ + permissions, + }); + + let service = createServiceBuilder(module) + .setPort(options.port) + .addRouter('/todo-list', router); + if (options.enableCors) { + service = service.enableCors({ origin: 'http://localhost:3000' }); } - export async function startStandaloneServer( - options: ServerOptions, - ): Promise { - const logger = options.logger.child({ service: 'todo-list-backend' }); - logger.debug('Starting application server...'); - const config = await loadBackendConfig({ logger, argv: process.argv }); - const discovery = SingleHostDiscovery.fromConfig(config); -+ const tokenManager = ServerTokenManager.fromConfig(config, { -+ logger, -+ }); -+ const permissions = ServerPermissionClient.fromConfig(config, { -+ discovery, -+ tokenManager, -+ }); - const router = await createRouter({ - logger, - identity: DefaultIdentityClient.create({ - discovery, - issuer: await discovery.getExternalBaseUrl('auth'), - }), -+ permissions, - }); + return await service.start().catch(err => { + logger.error(err); + process.exit(1); + }); +} - let service = createServiceBuilder(module) - .setPort(options.port) - .addRouter('/todo-list', router); - if (options.enableCors) { - service = service.enableCors({ origin: 'http://localhost:3000' }); - } - - return await service.start().catch(err => { - logger.error(err); - process.exit(1); - }); - } - - module.hot?.accept(); +module.hot?.accept(); ``` Finally, we need to update `plugins/todo-list-backend/src/plugin.ts`: -```diff - import { loggerToWinstonLogger } from '@backstage/backend-common'; - import { - coreServices, - createBackendPlugin, - } from '@backstage/backend-plugin-api'; - import { createRouter } from './service/router'; +```ts title="plugins/todo-list-backend/src/plugin.ts" +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { createRouter } from './service/router'; - /** - * The example TODO list backend plugin. - * - * @alpha - */ - export const exampleTodoListPlugin = createBackendPlugin({ - pluginId: 'exampleTodoList', - register(env) { - env.registerInit({ - deps: { - identity: coreServices.identity, - logger: coreServices.logger, - httpRouter: coreServices.httpRouter, -+ permissions: coreServices.permissions, - }, -- async init({ identity, logger, httpRouter }) { -+ async init({ identity, logger, httpRouter, permissions }) { - httpRouter.use( - await createRouter({ - identity, - logger: loggerToWinstonLogger(logger), - permissions, - }), - ); - }, - }); - }, - }); +/** +* The example TODO list backend plugin. +* +* @alpha +*/ +export const exampleTodoListPlugin = createBackendPlugin({ + pluginId: 'exampleTodoList', + register(env) { + env.registerInit({ + deps: { + identity: coreServices.identity, + logger: coreServices.logger, + httpRouter: coreServices.httpRouter, + /* highlight-add-next-line */ + permissions: coreServices.permissions, + }, + /* highlight-remove-next-line */ + async init({ identity, logger, httpRouter }) { + /* highlight-add-next-line */ + async init({ identity, logger, httpRouter, permissions }) { + httpRouter.use( + await createRouter({ + identity, + logger: loggerToWinstonLogger(logger), + permissions, + }), + ); + }, + }); + }, +}); ``` Now when you run `yarn tsc` you should have no more errors. diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index b063727c71..ed4fb74573 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -10,24 +10,29 @@ When performing updates (or other operations) on specific [resources](../concept Let's add a new permission to the file `plugins/todo-list-common/src/permissions.ts` from [the previous section](./02-adding-a-basic-permission-check.md). -```diff - import { createPermission } from '@backstage/plugin-permission-common'; +```ts title="plugins/todo-list-common/src/permissions.ts" +import { createPermission } from '@backstage/plugin-permission-common'; -+ export const TODO_LIST_RESOURCE_TYPE = 'todo-item'; -+ - export const todoListCreatePermission = createPermission({ - name: 'todo.list.create', - attributes: { action: 'create' }, - }); -+ -+ export const todoListUpdatePermission = createPermission({ -+ name: 'todo.list.update', -+ attributes: { action: 'update' }, -+ resourceType: TODO_LIST_RESOURCE_TYPE, -+ }); +/* highlight-add-next-line */ +export const TODO_LIST_RESOURCE_TYPE = 'todo-item'; -- export const todoListPermissions = [todoListCreatePermission]; -+ export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission]; +export const todoListCreatePermission = createPermission({ + name: 'todo.list.create', + attributes: { action: 'create' }, +}); + +/* highlight-add-start */ +export const todoListUpdatePermission = createPermission({ + name: 'todo.list.update', + attributes: { action: 'update' }, + resourceType: TODO_LIST_RESOURCE_TYPE, +}); +/* highlight-add-end */ + +/* highlight-remove-next-line */ +export const todoListPermissions = [todoListCreatePermission]; +/* highlight-add-next-line */ +export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission]; ``` Notice that unlike `todoListCreatePermission`, the `todoListUpdatePermission` permission contains a `resourceType` field. This field indicates to the permission framework that this permission is intended to be authorized in the context of a resource with type `'todo-item'`. You can use whatever string you like as the resource type, as long as you use the same value consistently for each type of resource. @@ -36,35 +41,39 @@ Notice that unlike `todoListCreatePermission`, the `todoListUpdatePermission` pe To start, let's edit `plugins/todo-list-backend/src/service/router.ts` in the same manner as we did in the previous section: -```diff -- import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; -+ import { todoListCreatePermission, todoListUpdatePermission } from '@internal/plugin-todo-list-common'; +```ts title="plugins/todo-list-backend/src/service/router.ts" +/* highlight-remove-next-line */ +import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +/* highlight-add-next-line */ +import { todoListCreatePermission, todoListUpdatePermission } from '@internal/plugin-todo-list-common'; - ... +router.put('/todos', async (req, res) => { + /* highlight-add-start */ + const token = getBearerTokenFromAuthorizationHeader( + req.header('authorization'), + ); + /* highlight-add-end */ - router.put('/todos', async (req, res) => { -+ const token = getBearerTokenFromAuthorizationHeader( -+ req.header('authorization'), -+ ); + if (!isTodoUpdateRequest(req.body)) { + throw new InputError('Invalid payload'); + } + /* highlight-add-start */ + const decision = ( + await permissions.authorize( + [{ permission: todoListUpdatePermission, resourceRef: req.body.id }], + { + token, + }, + ) + )[0]; - if (!isTodoUpdateRequest(req.body)) { - throw new InputError('Invalid payload'); - } -+ const decision = ( -+ await permissions.authorize( -+ [{ permission: todoListUpdatePermission, resourceRef: req.body.id }], -+ { -+ token, -+ }, -+ ) -+ )[0]; -+ -+ if (decision.result !== AuthorizeResult.ALLOW) { -+ throw new NotAllowedError('Unauthorized'); -+ } + if (decision.result !== AuthorizeResult.ALLOW) { + throw new NotAllowedError('Unauthorized'); + } + /* highlight-add-end */ - res.json(update(req.body)); - }); + res.json(update(req.body)); +}); ``` **Important:** Notice that we are passing an extra `resourceRef` field, with the `id` of the todo item as the value. @@ -75,13 +84,13 @@ This enables decisions based on characteristics of the resource, but it's import Install the missing module: -``` +```bash $ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod ``` Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append the following code: -```typescript +```typescript title="plugins/todo-list-backend/src/service/rules.ts" import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common'; import { z } from 'zod'; @@ -130,35 +139,43 @@ Now, let's create the new endpoint by editing `plugins/todo-list-backend/src/ser - `permissions`: the list of permissions that your plugin accepts. - `rules`: an array of all the permission rules you want to support in conditional decisions. -```diff -... +```ts title="plugins/todo-list-backend/src/service/router.ts" +/* highlight-remove-next-line */ +import { add, getAll, update } from './todos'; +/* highlight-add-start */ +import { add, getAll, getTodo, update } from './todos'; +import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; +import { TODO_LIST_RESOURCE_TYPE, todoListPermissions } from '@internal/plugin-todo-list-common'; +import { rules } from './rules'; +/* highlight-add-end */ -- import { add, getAll, update } from './todos'; -+ import { add, getAll, getTodo, update } from './todos'; -+ import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; -+ import { TODO_LIST_RESOURCE_TYPE, todoListPermissions } from '@internal/plugin-todo-list-common'; -+ import { rules } from './rules'; +export async function createRouter( + options: RouterOptions, +): Promise { + const { logger, identity, permissions } = options; - export async function createRouter( - options: RouterOptions, - ): Promise { - const { logger, identity, permissions } = options; + /* highlight-add-start */ + const permissionIntegrationRouter = createPermissionIntegrationRouter({ + getResources: async resourceRefs => { + return resourceRefs.map(getTodo); + }, + resourceType: TODO_LIST_RESOURCE_TYPE, + permissions: todoListPermissions, + rules: Object.values(rules), + }); + /* highlight-add-end */ -+ const permissionIntegrationRouter = createPermissionIntegrationRouter({ -+ getResources: async resourceRefs => { -+ return resourceRefs.map(getTodo); -+ }, -+ resourceType: TODO_LIST_RESOURCE_TYPE, -+ permissions: todoListPermissions, -+ rules: Object.values(rules), -+ }); + const router = Router(); + router.use(express.json()); - const router = Router(); - router.use(express.json()); + /* highlight-add-next-line */ + router.use(permissionIntegrationRouter); -+ router.use(permissionIntegrationRouter); - - router.post('/todos', async (req, res) => { + router.post('/todos', async (req, res) => { + // .. + } + // .. +} ``` ## Provide utilities for policy authors @@ -167,7 +184,7 @@ Now that we have a new resource type and a corresponding rule, we need to export Create a new `plugins/todo-list-backend/src/conditionExports.ts` file and add the following code: -```typescript +```typescript title="plugins/todo-list-backend/src/conditionExports.ts" import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common'; import { createConditionExports } from '@backstage/plugin-permission-node'; import { rules } from './service/rules'; @@ -185,63 +202,68 @@ export const createTodoListConditionalDecision = createConditionalDecision; Make sure `todoListConditions` and `createTodoListConditionalDecision` are exported from the `todo-list-backend` package by editing `plugins/todo-list-backend/src/index.ts`: -```diff - export * from './service/router'; -+ export * from './conditionExports'; - export { exampleTodoListPlugin } from './plugin'; +```ts title="plugins/todo-list-backend/src/index.ts" +export * from './service/router'; +/* highlight-add-next-line */ +export * from './conditionExports'; +export { exampleTodoListPlugin } from './plugin'; ``` ## Test the authorized update endpoint Let's go back to the permission policy's handle function and try to authorize our new permission with an `isOwner` condition. -```diff - // packages/backend/src/plugins/permission.ts +```ts title="packages/backend/src/plugins/permission.ts" +import { + BackstageIdentityResponse, + IdentityClient +} from '@backstage/plugin-auth-node'; +import { + PermissionPolicy, + PolicyQuery, +} from '@backstage/plugin-permission-node'; +import { isPermission } from '@backstage/plugin-permission-common'; +/* highlight-remove-next-line */ +import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +/* highlight-add-start */ +import { + todoListCreatePermission, + todoListUpdatePermission, +} from '@internal/plugin-todo-list-common'; +import { + todoListConditions, + createTodoListConditionalDecision, +} from '@internal/plugin-todo-list-backend'; +/* highlight-add-end */ - import { - BackstageIdentityResponse, - IdentityClient - } from '@backstage/plugin-auth-node'; - import { - PermissionPolicy, - PolicyQuery, - } from '@backstage/plugin-permission-node'; - import { isPermission } from '@backstage/plugin-permission-common'; -- import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; -+ import { -+ todoListCreatePermission, -+ todoListUpdatePermission, -+ } from '@internal/plugin-todo-list-common'; -+ import { -+ todoListConditions, -+ createTodoListConditionalDecision, -+ } from '@internal/plugin-todo-list-backend'; -... - async handle( - request: PolicyQuery, -- _user?: BackstageIdentityResponse, -+ user?: BackstageIdentityResponse, - ): Promise { - if (isPermission(request.permission, todoListCreatePermission)) { - return { - result: AuthorizeResult.ALLOW, - }; - } - -+ if (isPermission(request.permission, todoListUpdatePermission)) { -+ return createTodoListConditionalDecision( -+ request.permission, -+ todoListConditions.isOwner({ -+ userId: user?.identity.userEntityRef ?? '', -+ }), -+ ); -+ } -+ +async handle( + request: PolicyQuery, + /* highlight-remove-next-line */ + _user?: BackstageIdentityResponse, + /* highlight-add-next-line */ + user?: BackstageIdentityResponse, +): Promise { + if (isPermission(request.permission, todoListCreatePermission)) { return { result: AuthorizeResult.ALLOW, }; } + /* highlight-add-start */ + if (isPermission(request.permission, todoListUpdatePermission)) { + return createTodoListConditionalDecision( + request.permission, + todoListConditions.isOwner({ + userId: user?.identity.userEntityRef ?? '', + }), + ); + } + /* highlight-add-end */ + + return { + result: AuthorizeResult.ALLOW, + }; +} ``` For any incoming update requests, we now return a _Conditional Decision_. We are saying: diff --git a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md index e84f53f176..4b12e9e407 100644 --- a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md +++ b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md @@ -8,21 +8,25 @@ Authorizing `GET /todos` is similar to the update endpoint, in that it should be One possible solution may leverage the batching functionality to authorize all of the todos, and then returning only the ones for which the decision was `ALLOW`: -```diff - router.get('/todos', async (req, res) => { -+ const token = IdentityClient.getBearerToken(req.header('authorization')); +```ts +router.get('/todos', async (req, res) => { + /* highlight-add-next-line */ + const token = IdentityClient.getBearerToken(req.header('authorization')); -- res.json(getAll()) -+ const items = getAll(); -+ const decisions = await permissions.authorize( -+ items.map(({ id }) => ({ permission: todoListReadPermission, resourceRef: id })), -+ ); + /* highlight-remove-next-line */ + res.json(getAll()) + /* highlight-add-start */ + const items = getAll(); + const decisions = await permissions.authorize( + items.map(({ id }) => ({ permission: todoListReadPermission, resourceRef: id })), + ); -+ const filteredItems = decisions.filter( -+ decision => decision.result === AuthorizeResult.ALLOW, -+ ); -+ res.json(filteredItems); - }); + const filteredItems = decisions.filter( + decision => decision.result === AuthorizeResult.ALLOW, + ); + res.json(filteredItems); + /* highlight-add-end */ +}); ``` This approach will work for simple cases, but it has a downside: it forces us to retrieve all the elements upfront and authorize them one by one. This forces the plugin implementation to handle concerns like pagination, which is currently handled by the data source. @@ -35,82 +39,93 @@ To avoid this situation, the permissions framework has support for filtering ite Let's add another permission to the plugin. -```diff - // plugins/todo-list-backend/src/service/permissions.ts +```ts title="plugins/todo-list-backend/src/service/permissions.ts" +import { createPermission } from '@backstage/plugin-permission-common'; - import { createPermission } from '@backstage/plugin-permission-common'; +export const TODO_LIST_RESOURCE_TYPE = 'todo-item'; - export const TODO_LIST_RESOURCE_TYPE = 'todo-item'; +export const todoListCreatePermission = createPermission({ + name: 'todo.list.create', + attributes: { action: 'create' }, +}); - export const todoListCreatePermission = createPermission({ - name: 'todo.list.create', - attributes: { action: 'create' }, - }); +export const todoListUpdatePermission = createPermission({ + name: 'todo.list.update', + attributes: { action: 'update' }, + resourceType: TODO_LIST_RESOURCE_TYPE, +}); - export const todoListUpdatePermission = createPermission({ - name: 'todo.list.update', - attributes: { action: 'update' }, - resourceType: TODO_LIST_RESOURCE_TYPE, - }); -+ -+ export const todoListReadPermission = createPermission({ -+ name: 'todos.list.read', -+ attributes: { action: 'read' }, -+ resourceType: TODO_LIST_RESOURCE_TYPE, -+ }); +/* highlight-add-start */ +export const todoListReadPermission = createPermission({ + name: 'todos.list.read', + attributes: { action: 'read' }, + resourceType: TODO_LIST_RESOURCE_TYPE, +}); +/* highlight-add-end */ -- export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission]; -+ export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission, todoListReadPermission]; +/* highlight-add-next-line */ +export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission]; +/* highlight-add-next-line */ +export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission, todoListReadPermission]; ``` ## Using conditional policy decisions So far we've only used the `PermissionEvaluator.authorize` method, which will evaluate conditional decisions before returning a result. In this step, we want to evaluate conditional decisions within our plugin, so we'll use `PermissionEvaluator.authorizeConditional` instead. -```diff -// plugins/todo-list-backend/src/service/router.ts +```ts title="plugins/todo-list-backend/src/service/router.ts" +/* highlight-remove-next-line */ +import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; +/* highlight-add-start */ +import { + createPermissionIntegrationRouter, + createConditionTransformer, + ConditionTransformer, +} from '@backstage/plugin-permission-node'; +/* highlight-add-end */ +/* highlight-remove-next-line */ +import { add, getAll, getTodo, update } from './todos'; +/* highlight-add-next-line */ +import { add, getAll, getTodo, TodoFilter, update } from './todos'; +import { + todosListCreate, + todosListUpdate, + /* highlight-add-next-line */ + todoListReadPermission, + TODO_LIST_RESOURCE_TYPE, +} from './permissions'; -- import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; -+ import { -+ createPermissionIntegrationRouter, -+ createConditionTransformer, -+ ConditionTransformer, -+ } from '@backstage/plugin-permission-node'; -- import { add, getAll, getTodo, update } from './todos'; -+ import { add, getAll, getTodo, TodoFilter, update } from './todos'; - import { - todosListCreate, - todosListUpdate, -+ todoListReadPermission, - TODO_LIST_RESOURCE_TYPE, - } from './permissions'; +/* highlight-add-next-line */ +const transformConditions: ConditionTransformer = createConditionTransformer(Object.values(rules)); -+ const transformConditions: ConditionTransformer = createConditionTransformer(Object.values(rules)); +/* highlight-remove-next-line */ +router.get('/todos', async (_req, res) => { +/* highlight-add-start */ +router.get('/todos', async (req, res) => { + const token = getBearerTokenFromAuthorizationHeader( + req.header('authorization'), + ); -- router.get('/todos', async (_req, res) => { -+ router.get('/todos', async (req, res) => { -+ const token = getBearerTokenFromAuthorizationHeader( -+ req.header('authorization'), -+ ); -+ -+ const decision = ( -+ await permissions.authorizeConditional([{ permission: todoListReadPermission }], { -+ token, -+ }) -+ )[0]; -+ -+ if (decision.result === AuthorizeResult.DENY) { -+ throw new NotAllowedError('Unauthorized'); -+ } -+ -+ if (decision.result === AuthorizeResult.CONDITIONAL) { -+ const filter = transformConditions(decision.conditions); -+ res.json(getAll(filter)); -+ } else { -+ res.json(getAll()); -+ } -- res.json(getAll()); - }); + const decision = ( + await permissions.authorizeConditional([{ permission: todoListReadPermission }], { + token, + }) + )[0]; + + if (decision.result === AuthorizeResult.DENY) { + throw new NotAllowedError('Unauthorized'); + } + + if (decision.result === AuthorizeResult.CONDITIONAL) { + const filter = transformConditions(decision.conditions); + res.json(getAll(filter)); + } else { + res.json(getAll()); + } +/* highlight-add-end */ + /* highlight-remove-next-line */ + res.json(getAll()); +}); ``` To make the process of handling conditional decisions easier, the permission framework provides a `createConditionTransformer` helper. This function accepts an array of permission rules, and returns a transformer function which converts the conditions to the format needed by the plugin using the `toQuery` method defined on each rule. @@ -121,31 +136,29 @@ Since `TodoFilter` used in our plugin matches the structure of the conditions ob Let's update our permission policy to return a conditional result whenever a `todoListReadPermission` permission is received. In this case, we can reuse the decision returned for the `todosListCreate` permission. -```diff -// packages/backend/src/plugins/permission.ts - -... - +```ts title="packages/backend/src/plugins/permission.ts" import { todoListCreatePermission, todoListUpdatePermission, -+ todoListReadPermission, + /* highlight-add-next-line */ + todoListReadPermission, } from '@internal/plugin-todo-list-common'; -... - -- if (isPermission(request.permission, todoListUpdatePermission)) { -+ if ( -+ isPermission(request.permission, todoListUpdatePermission) || -+ isPermission(request.permission, todoListReadPermission) -+ ) { - return createTodoListConditionalDecision( - request.permission, - todoListConditions.isOwner({ - userId: user?.identity.userEntityRef - }), - ); - } +/* highlight-remove-next-line */ +if (isPermission(request.permission, todoListUpdatePermission)) { +/* highlight-add-start */ +if ( + isPermission(request.permission, todoListUpdatePermission) || + isPermission(request.permission, todoListReadPermission) +) { +/* highlight-add-end */ + return createTodoListConditionalDecision( + request.permission, + todoListConditions.isOwner({ + userId: user?.identity.userEntityRef + }), + ); +} ``` Once the changes to the permission policy are saved, the UI should show only the todo items you've created. diff --git a/docs/permissions/plugin-authors/05-frontend-authorization.md b/docs/permissions/plugin-authors/05-frontend-authorization.md index 753ce56461..235495e13f 100644 --- a/docs/permissions/plugin-authors/05-frontend-authorization.md +++ b/docs/permissions/plugin-authors/05-frontend-authorization.md @@ -14,81 +14,79 @@ Take, for example, the "Add" button in our todo list application. When a user cl Let's start by adding the packages we will need: -``` +```bash $ yarn workspace @internal/plugin-todo-list \ add @backstage/plugin-permission-react @internal/plugin-todo-list-common ``` Let's make the following changes in `plugins/todo-list/src/components/TodoListPage/TodoListPage.tsx`: -```diff -... +```tsx title="plugins/todo-list/src/components/TodoListPage/TodoListPage.tsx" +import { + alertApiRef, + discoveryApiRef, + fetchApiRef, + useApi, +} from '@backstage/core-plugin-api'; +/* highlight-add-start */ +import { usePermission } from '@backstage/plugin-permission-react'; +import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +/* highlight-add-end */ - import { - alertApiRef, - discoveryApiRef, - fetchApiRef, - useApi, - } from '@backstage/core-plugin-api'; -+ import { usePermission } from '@backstage/plugin-permission-react'; -+ import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +function AddTodo({ onAdd }: { onAdd: (title: string) => any }) { + const title = useRef(''); + /* highlight-add-next-line */ + const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ permission: todoListCreatePermission }); -... - - function AddTodo({ onAdd }: { onAdd: (title: string) => any }) { - const title = useRef(''); -+ const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ permission: todoListCreatePermission }); - - return ( - <> - Add todo - - (title.current = e.target.value)} - /> -- -+ {!loadingPermission && ( -+ -+ )} - - - ); - } - -... + return ( + <> + Add todo + + (title.current = e.target.value)} + /> + {/* highlight-remove-start */} + + {/* highlight-remove-end */} + {/* highlight-add-start */} + {!loadingPermission && ( + + )} + {/* highlight-add-end */} + + + ); +} ``` Here we are using the [`usePermission` hook](https://backstage.io/docs/reference/plugin-permission-react.usepermission) to communicate with the permission policy and receive a decision on whether this user is authorized to create a todo list item. It's really that simple! Let's change our policy to test the disabled button: -```diff -// packages/backend/src/plugins/permission.ts +```ts title="packages/backend/src/plugins/permission.ts" -... - - if (isPermission(request.permission, todoListCreatePermission)) { - return { -- result: AuthorizeResult.ALLOW, -+ result: AuthorizeResult.DENY, - }; - } - -... +if (isPermission(request.permission, todoListCreatePermission)) { + return { + /* highlight-remove-next-line */ + result: AuthorizeResult.ALLOW, + /* highlight-add-next-line */ + result: AuthorizeResult.DENY, + }; +} ``` And now you should see that you are not able to create a todo item from the frontend! @@ -97,104 +95,111 @@ And now you should see that you are not able to create a todo item from the fron Providing a disabled state can be a helpful signal to users, but there may be cases where hiding the element is preferred. For such cases, you can use the provided [`RequirePermission` component](https://backstage.io/docs/reference/plugin-permission-react.requirepermission): -```diff -// plugins/todo-list/src/components/TodoListPage/TodoListPage.tsx +```tsx title="plugins/todo-list/src/components/TodoListPage/TodoListPage.tsx" +import { + alertApiRef, + discoveryApiRef, + fetchApiRef, + useApi, +} from '@backstage/core-plugin-api'; +/* highlight-remove-next-line */ +import { usePermission } from '@backstage/plugin-permission-react'; +/* highlight-add-next-line */ +import { RequirePermission } from '@backstage/plugin-permission-react'; +import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; -... +export const TodoListPage = () => { + // .. + + {/* highlight-remove-start */} + + + + {/* highlight-remove-end */} + {/* highlight-add-start */} + } + > + + + + + {/* highlight-add-end */} + + + + +} - import { - alertApiRef, - discoveryApiRef, - fetchApiRef, - useApi, - } from '@backstage/core-plugin-api'; -- import { usePermission } from '@backstage/plugin-permission-react'; -+ import { RequirePermission } from '@backstage/plugin-permission-react'; - import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +function AddTodo({ onAdd }: { onAdd: (title: string) => any }) { + const title = useRef(''); + /* highlight-remove-next-line */ + const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ permission: todoListCreatePermission }); -... - - export const TodoListPage = () => { - -... - - -- -- -- -+ } -+ > -+ -+ -+ -+ - - - - - -... - - - function AddTodo({ onAdd }: { onAdd: (title: string) => any }) { - const title = useRef(''); -- const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ permission: todoListCreatePermission }); - - return ( - <> - Add todo - - (title.current = e.target.value)} - /> -- {!loadingPermission && ( -- -- )} -+ - - - ); - } - -... + return ( + <> + Add todo + + (title.current = e.target.value)} + /> + {/* highlight-remove-start */} + {!loadingPermission && ( + + )} + {/* highlight-remove-end */} + {/* highlight-add-start */} + + {/* highlight-add-end */} + + + ); +} ``` Now you should find that the component for adding a todo list item does not render at all. Success! You can also use `RequirePermission` to prevent access to routes as well. Here's how that would look in your `packages/app/src/App.tsx`: -```diff -+ import { RequirePermission } from '@backstage/plugin-permission-react'; -+ import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; - -... +```tsx title="packages/app/src/App.tsx" +/* highlight-add-start */ +import { RequirePermission } from '@backstage/plugin-permission-react'; +import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; +/* highlight-add-end */ +const routes = ( + }> {searchPage} } /> -+ -+ -+ + {/* highlight-add-next-line */} + + + + {/* highlight-add-end */}} + {/* ... */} + +); ``` Now if you try to navigate to `https://localhost:3000/todo-list` you'll get and error page if you do not have permission. diff --git a/docs/permissions/writing-a-policy.md b/docs/permissions/writing-a-policy.md index 7e741ae48f..3d4371f038 100644 --- a/docs/permissions/writing-a-policy.md +++ b/docs/permissions/writing-a-policy.md @@ -8,9 +8,7 @@ In the [previous section](./getting-started.md), we were able to set up the perm That policy looked like this: -```typescript -// packages/backend/src/plugins/permission.ts - +```typescript title="packages/backend/src/plugins/permission.ts" class TestPermissionPolicy implements PermissionPolicy { async handle(request: PolicyQuery): Promise { if (request.permission.name === 'catalog.entity.delete') { @@ -36,49 +34,61 @@ As we confirmed in the previous section, we know that this now prevents us from Let's change the policy to the following: -```diff -- import { IdentityClient } from '@backstage/plugin-auth-node'; -+ import { -+ BackstageIdentityResponse, -+ IdentityClient -+ } from '@backstage/plugin-auth-node'; - import { +```ts +/* highlight-remove-next-line */ +import { IdentityClient } from '@backstage/plugin-auth-node'; +/* highlight-add-start */ +import { + BackstageIdentityResponse, + IdentityClient +} from '@backstage/plugin-auth-node'; + /* highlight-add-end */ +import { AuthorizeResult, PolicyDecision, -+ isPermission, + /* highlight-add-next-line */ + isPermission, } from '@backstage/plugin-permission-common'; -+ import { -+ catalogConditions, -+ createCatalogConditionalDecision, -+ } from '@backstage/plugin-catalog-backend/alpha'; -+ import { -+ catalogEntityDeletePermission, -+ } from '@backstage/plugin-catalog-common/alpha'; +/* highlight-add-start */ +import { + catalogConditions, + createCatalogConditionalDecision, +} from '@backstage/plugin-catalog-backend/alpha'; +import { + catalogEntityDeletePermission, +} from '@backstage/plugin-catalog-common/alpha'; +/* highlight-add-end */ - ... - - class TestPermissionPolicy implements PermissionPolicy { -- async handle(request: PolicyQuery): Promise { -+ async handle( -+ request: PolicyQuery, -+ user?: BackstageIdentityResponse, -+ ): Promise { -- if (request.permission.name === 'catalog.entity.delete') { -+ if (isPermission(request.permission, catalogEntityDeletePermission)) { -- return { -- result: AuthorizeResult.DENY, -- }; -+ return createCatalogConditionalDecision( -+ request.permission, -+ catalogConditions.isEntityOwner({ -+ claims: user?.identity.ownershipEntityRefs ?? [], -+ }), -+ ); - } - - return { result: AuthorizeResult.ALLOW }; +class TestPermissionPolicy implements PermissionPolicy { + /* highlight-remove-next-line */ + async handle(request: PolicyQuery): Promise { + /* highlight-add-start */ + async handle( + request: PolicyQuery, + user?: BackstageIdentityResponse, + ): Promise { + /* highlight-add-end */ + /* highlight-remove-next-line */ + if (request.permission.name === 'catalog.entity.delete') { + /* highlight-add-next-line */ + if (isPermission(request.permission, catalogEntityDeletePermission)) { + /* highlight-remove-start */ + return { + result: AuthorizeResult.DENY, + }; + /* highlight-remove-end */ + /* highlight-add-start */ + return createCatalogConditionalDecision( + request.permission, + catalogConditions.isEntityOwner({ + claims: user?.identity.ownershipEntityRefs ?? [], + }), + ); + /* highlight-add-end */ } + return { result: AuthorizeResult.ALLOW }; } +} ``` Let's walk through the new code that we just added. @@ -93,30 +103,34 @@ You should now be able to see in your Backstage app that the unregister entity b Now let's say we want to prevent all actions on catalog entities unless performed by the owner. One way to achieve this may be to simply update the `if` statement and check for each permission. If you choose to write your policy this way, it will certainly work! However, it may be difficult to maintain as the policy grows, and it may not be obvious if certain permissions are left out. We can author this same policy in a more scalable way by checking the resource type of the requested permission. -```diff +```ts import { AuthorizeResult, PolicyDecision, -- isPermission, -+ isResourcePermission, + /* highlight-remove-next-line */ + isPermission, + isResourcePermission, + /* highlight-add-next-line */ } from '@backstage/plugin-permission-common'; - import { - catalogConditions, - createCatalogConditionalDecision, - } from '@backstage/plugin-catalog-backend/alpha'; -- import { -- catalogEntityDeletePermission, -- } from '@backstage/plugin-catalog-common/alpha'; - -... +import { + catalogConditions, + createCatalogConditionalDecision, +} from '@backstage/plugin-catalog-backend/alpha'; +/* highlight-remove-start */ +import { + catalogEntityDeletePermission, +} from '@backstage/plugin-catalog-common/alpha'; +/* highlight-remove-end */ class TestPermissionPolicy implements PermissionPolicy { async handle( request: PolicyQuery, user?: BackstageIdentityResponse, ): Promise { -- if (isPermission(request.permission, catalogEntityDeletePermission)) { -+ if (isResourcePermission(request.permission, 'catalog-entity')) { + /* highlight-remove-next-line */ + if (isPermission(request.permission, catalogEntityDeletePermission)) { + /* highlight-add-next-line */ + if (isResourcePermission(request.permission, 'catalog-entity')) { return createCatalogConditionalDecision( request.permission, catalogConditions.isEntityOwner({ @@ -127,6 +141,7 @@ class TestPermissionPolicy implements PermissionPolicy { return { result: AuthorizeResult.ALLOW }; } +} ``` In this example, we use [`isResourcePermission`](https://backstage.io/docs/reference/plugin-permission-common.isresourcepermission) to match all permissions with a resource type of `catalog-entity`. Just like `isPermission`, this helper will "narrow" the type of `request.permission` and enable the use of `createCatalogConditionalDecision`. In addition to the behavior you observed before, you should also see that catalog entities are no longer visible unless you are the owner - success! diff --git a/docs/tutorials/migrating-away-from-core.md b/docs/tutorials/migrating-away-from-core.md index da9d177ccb..32f9dc5ad0 100644 --- a/docs/tutorials/migrating-away-from-core.md +++ b/docs/tutorials/migrating-away-from-core.md @@ -38,10 +38,13 @@ across your project. This will automatically convert all module imports in your source code to use one of the three new core packages instead. For example, the following change might occur: -```diff --import { useApi, configApiRef, InfoCard } from '@backstage/core'; -+import { useApi, configApiRef } from '@backstage/core-plugin-api'; -+import { InfoCard } from '@backstage/core-components'; +```ts +/* highlight-remove-next-line */ +import { useApi, configApiRef, InfoCard } from '@backstage/core'; +/* highlight-add-start */ +import { useApi, configApiRef } from '@backstage/core-plugin-api'; +import { InfoCard } from '@backstage/core-components'; +/* highlight-add-end */ ``` In a typical app created with `@backstage/create-app`, you would run the diff --git a/docs/tutorials/react-router-stable-migration.md b/docs/tutorials/react-router-stable-migration.md index bb01157bdb..24dba3c244 100644 --- a/docs/tutorials/react-router-stable-migration.md +++ b/docs/tutorials/react-router-stable-migration.md @@ -45,7 +45,7 @@ yarn backstage-cli migrate react-router-deps For those interested in doing this manually, apply the below change to all `package.json` files except the one at `packages/app/package.json` or any other app packages. Skip moving any dependencies that don't already exist, and move both `dependencies` and `devDependencies`. -```diff +```diff title="package.json" dependencies { ... - "react-router-dom": "^6.0.0-beta.0", @@ -64,13 +64,13 @@ It's important that you also update your external plugins to their latest versio During this migration there may be external plugins that need updating. If you encounter any plugins outside of the `@backstage` scope that are incompatible with your installation, make sure to check for an existing issue or raise a new one at the plugin's GitHub repository. -### Step 4 - Bump the React Router dependencies in your app. +### Step 4 - Bump the React Router dependencies in your app Now it's time to do the actual migration to the latest version of React Router. At this time of writing that is `6.3.0`, but that is of course a moving target. The first step is to modify `packages/app/package.json`: -```diff +```diff title="package.json" - "react-router": "6.0.0-beta.0", - "react-router-dom": "6.0.0-beta.0", + "react-router": "^6.3.0", @@ -81,7 +81,7 @@ In case you happen to have multiple app packages in your project, apply the same Once the change has been made, run `yarn install`, and then `yarn why react-router` to validate the installation. You should see the following line in the log as the only resulting entry: -``` +```bash => Found "react-router@6.3.0" ``` @@ -157,28 +157,34 @@ Because of the above change, the `PermissionedRoute` component no longer works i It's crucial that you update to `RequirePermission` at the same time as you update to React Router v6 stable as the `PermissionedRoute` component will no longer function. -```diff -- } -+ -+ -+ -+ } - /> +```tsx +{/* highlight-remove-start */} +} +{/* highlight-remove-end */} +{/* highlight-add-start */} + + + + } +{/* highlight-add-end */} +/> ``` ### `` component When migrating over to React Router v6 stable, you might also see browser console warnings for the `Navigate` component. This will need to be wrapped up in a `Route` component with the `Navigate` component in the `element` prop. -```diff -- -+ } /> +```tsx +{/* highlight-remove-next-line */} + +{/* highlight-add-next-line */} +} /> ``` ### `NavLink` diff --git a/docs/tutorials/switching-sqlite-postgres.md b/docs/tutorials/switching-sqlite-postgres.md index bd067ee388..b87a77f4ed 100644 --- a/docs/tutorials/switching-sqlite-postgres.md +++ b/docs/tutorials/switching-sqlite-postgres.md @@ -29,24 +29,28 @@ yarn add --cwd packages/backend pg Next, modify `app-config.yaml` in the root folder to add PostgreSQL configuration for the backend: -```diff +```yaml title="app-config.yaml" backend: database: -- client: better-sqlite3 -- connection: ':memory:' -+ # config options: https://node-postgres.com/api/client -+ client: pg -+ connection: -+ host: ${POSTGRES_HOST} -+ 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: /ca/server.crt + # highlight-remove-start + client: better-sqlite3 + connection: ':memory:' + # highlight-remove-end + # highlight-add-start + # config options: https://node-postgres.com/api/client + client: pg + connection: + host: ${POSTGRES_HOST} + 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: /ca/server.crt + # highlight-add-end ``` If you have an `app-config.local.yaml` for local development, a similar update @@ -60,31 +64,35 @@ The Backstage App is now ready to start up with a PostgreSQL backing database. If you want to override the default connection pool settings then use the below configuration: -```diff +```yaml title="app-config.local.yaml" backend: database: -- client: better-sqlite3 -- connection: ':memory:' -+ # config options: https://node-postgres.com/api/client -+ client: pg -+ connection: -+ host: ${POSTGRES_HOST} -+ 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: /ca/server.crt -+ # Refer to Tarn docs for default values on PostgreSQL pool configuration - https://github.com/Vincit/tarn.js -+ knexConfig: -+ pool: -+ min: 3 -+ max: 12 -+ acquireTimeoutMillis: 60000 -+ idleTimeoutMillis: 60000 + # highlight-remove-start + client: better-sqlite3 + connection: ':memory:' + # highlight-remove-end + # highlight-add-start + # config options: https://node-postgres.com/api/client + client: pg + connection: + host: ${POSTGRES_HOST} + 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: /ca/server.crt + # Refer to Tarn docs for default values on PostgreSQL pool configuration - https://github.com/Vincit/tarn.js + knexConfig: + pool: + min: 3 + max: 12 + acquireTimeoutMillis: 60000 + idleTimeoutMillis: 60000 + # highlight-add-end ``` ### Using a single database diff --git a/docs/tutorials/yarn-migration.md b/docs/tutorials/yarn-migration.md index 6dee343e78..9e041a5969 100644 --- a/docs/tutorials/yarn-migration.md +++ b/docs/tutorials/yarn-migration.md @@ -82,19 +82,24 @@ RUN yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)" Additionally, `yarn config` has been reworked from being able to store any arbitrary key-value pairs to only supporting a handful of predefined pairs. Previously, we would set our preferred `python3` interpreter to work around [any issues related to node-gyp](https://github.com/backstage/backstage/issues/11583) so we need to provide an appropriate substitute. -```diff +```Dockerfile FROM node:16-bullseye-slim -+# Set Python interpreter for `node-gyp` to use -+ENV PYTHON /usr/bin/python3 +# highlight-add-start +# Set Python interpreter for `node-gyp` to use +ENV PYTHON /usr/bin/python3 +# highlight-add-end # 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 && \ 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 -+ rm -rf /var/lib/apt/lists/* + # highlight-remove-start + rm -rf /var/lib/apt/lists/* && \ + yarn config set python /usr/bin/python3 + # highlight-remove-end + # highlight-add-next-line + rm -rf /var/lib/apt/lists/* ``` You'll want to make sure that the `PYTHON` environment variable is declared relatively early, before any instances of `Yarn` are invoked as `node-gyp` is indirectly triggered by some modules during installation. diff --git a/microsite-next/docusaurus.config.js b/microsite-next/docusaurus.config.js index b3d1d16af1..b07700fb0e 100644 --- a/microsite-next/docusaurus.config.js +++ b/microsite-next/docusaurus.config.js @@ -249,5 +249,28 @@ module.exports = { appId: 'JCMFNHCHI8', searchParameters: {}, }, + prism: { + magicComments: [ + // Extend the default highlight class name + { + className: 'theme-code-block-highlighted-line', + line: 'highlight-next-line', + block: { start: 'highlight-start', end: 'highlight-end' }, + }, + { + className: 'code-block-add-line', + line: 'highlight-add-next-line', + block: { start: 'highlight-add-start', end: 'highlight-add-end' }, + }, + { + className: 'code-block-remove-line', + line: 'highlight-remove-next-line', + block: { + start: 'highlight-remove-start', + end: 'highlight-remove-end', + }, + }, + ], + }, }, }; diff --git a/microsite-next/src/css/customTheme.css b/microsite-next/src/css/customTheme.css index 1a39467516..4ba7f1df86 100644 --- a/microsite-next/src/css/customTheme.css +++ b/microsite-next/src/css/customTheme.css @@ -56,3 +56,23 @@ ); } /* #endregion */ + +/* prism magic comments https://docusaurus.io/docs/markdown-features/code-blocks#custom-magic-comments */ + +.code-block-add-line { + background-color: rgba(0, 255, 0, 0.125); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); + border-left: 3px solid rgba(0, 255, 0, 0.5); +} + +.code-block-remove-line { + background-color: rgba(255, 0, 0, 0.125); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); + border-left: 3px solid rgba(255, 0, 0, 0.5); +} + +/* #endregion */ From a4dcd007e4ffa21cf88db01241930fb3ee79532a Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Tue, 7 Mar 2023 12:04:57 -0500 Subject: [PATCH 06/43] Pass `debug` log level to http-proxy-middleware Signed-off-by: Boris Bera --- .changeset/twenty-insects-live.md | 2 +- plugins/proxy-backend/src/service/router.ts | 14 +++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.changeset/twenty-insects-live.md b/.changeset/twenty-insects-live.md index c20d3ee08d..d3f8cdfc25 100644 --- a/.changeset/twenty-insects-live.md +++ b/.changeset/twenty-insects-live.md @@ -2,4 +2,4 @@ '@backstage/plugin-proxy-backend': patch --- -Pass the current log level to `http-proxy-middleware` to ensure that proxies requests are shown when log level is set to `debug`. +Ensure that `@backstage/plugin-proxy-backend` logs the requests that it proxies when log level is set to `debug`. diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index 3a646f2724..6912965659 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -63,12 +63,6 @@ export interface ProxyConfig extends Options { reviveRequestBody?: boolean; } -function isValidHttpProxyMiddlewareLogLevel( - level: string, -): level is Exclude { - return ['debug', 'info', 'warn', 'error', 'silent'].includes(level); -} - // Creates a proxy middleware, possibly with defaults added on top of the // given config. export function buildMiddleware( @@ -127,9 +121,11 @@ export function buildMiddleware( // Attach the logger to the proxy config fullConfig.logProvider = () => logger; - if (isValidHttpProxyMiddlewareLogLevel(logger.level)) { - fullConfig.logLevel = logger.level; - } + // http-proxy-middleware uses this log level to check if it should log the + // requests that it proxies. Setting this to the most verbose log level + // ensures that it always logs these requests. Our logger ends up deciding + // if the logs are displayed or not. + fullConfig.logLevel = 'debug'; // Only return the allowed HTTP headers to not forward unwanted secret headers const requestHeaderAllowList = new Set( From 7c94f10407a9773e1ce682163dc3cc8400b01559 Mon Sep 17 00:00:00 2001 From: Leo Date: Wed, 8 Mar 2023 01:05:59 +0800 Subject: [PATCH 07/43] docs: the edit button is at the bottom of the page Signed-off-by: Leo --- docs/overview/adopting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/adopting.md b/docs/overview/adopting.md index 0765d4a452..15450c995b 100644 --- a/docs/overview/adopting.md +++ b/docs/overview/adopting.md @@ -153,7 +153,7 @@ Backstage as _the_ platform: percentage of engineers is below 50%. Most engineers actually use Backstage on a daily basis. -Again, any feedback is appreciated. Please use the Edit button at the top of the +Again, any feedback is appreciated. Please use the Edit button at the bottom of the page to make a suggestion. _**Note!** It might be tempting to try to optimize Backstage usage and From c17fa10182574f52491ecdf1295a526f9d62e781 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Tue, 7 Mar 2023 16:11:02 -0300 Subject: [PATCH 08/43] feat(@backstage/plugin-catalog-backend-module-azure): Add branch filter support Signed-off-by: Yuri Titi --- .changeset/modern-colts-exercise.md | 5 +++ docs/integrations/azure/discovery.md | 9 +++-- .../src/lib/azure.ts | 1 + .../AzureDevOpsEntityProvider.test.ts | 40 +++++++++++++++++-- .../providers/AzureDevOpsEntityProvider.ts | 10 +++-- .../src/providers/config.test.ts | 24 ++++++++++- .../src/providers/config.ts | 2 + .../src/providers/types.ts | 1 + 8 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 .changeset/modern-colts-exercise.md diff --git a/.changeset/modern-colts-exercise.md b/.changeset/modern-colts-exercise.md new file mode 100644 index 0000000000..d869945870 --- /dev/null +++ b/.changeset/modern-colts-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': minor +--- + +Add branch filter support diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index 6cb135900e..d96b7d84ab 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -61,6 +61,7 @@ catalog: host: selfhostedazure.yourcompany.com organization: myorg project: myproject + branch: development ``` The parameters available are: @@ -70,6 +71,7 @@ The parameters available are: - **`project:`** _(optional)_ Your project slug. Wildcards are supported as show on the examples above. If not set, all projects will be searched. For a project name containing spaces, use both single and double quotes as in `project: '"My Project Name"'`. - **`repository:`** _(optional)_ The repository name. Wildcards are supported as show on the examples above. If not set, all repositories will be searched. - **`path:`** _(optional)_ Where to find catalog-info.yaml files. Defaults to /catalog-info.yaml. +- **`branch:`** _(optional)_ The branch name to use. - **`schedule`** _(optional)_: - **`frequency`**: How often you want the task to run. The system does its best to avoid overlapping invocations. @@ -80,9 +82,10 @@ The parameters available are: - **`scope`** _(optional)_: `'global'` or `'local'`. Sets the scope of concurrency control. -_Note:_ the path parameter follows the same rules as the search on Azure DevOps -web interface. For more details visit the -[official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). +_Note:_ + +- The path parameter follows the same rules as the search on Azure DevOps web interface. For more details visit the [official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). +- The branch parameters need that the branch desired it`s added on 'Searchable branches' on Azure DevOps Repositories As this provider is not one of the default providers, you will first need to install the Azure catalog plugin: diff --git a/plugins/catalog-backend-module-azure/src/lib/azure.ts b/plugins/catalog-backend-module-azure/src/lib/azure.ts index 0c96d133d3..714090d5bc 100644 --- a/plugins/catalog-backend-module-azure/src/lib/azure.ts +++ b/plugins/catalog-backend-module-azure/src/lib/azure.ts @@ -34,6 +34,7 @@ export interface CodeSearchResultItem { project: { name: string; }; + branch?: string; } const isCloud = (host: string) => host === 'dev.azure.com'; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index dff1164899..53919b9bb4 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -105,9 +105,13 @@ describe('AzureDevOpsEntityProvider', () => { await (taskDef.fn as () => Promise)(); const expectedEntities = codeSearchResults.map(item => { - const url = encodeURI( - `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}`, - ); + const url = item.branch + ? encodeURI( + `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}&version=GBmybranch`, + ) + : encodeURI( + `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}`, + ); return { entity: { apiVersion: 'backstage.io/v1alpha1', @@ -177,6 +181,36 @@ describe('AzureDevOpsEntityProvider', () => { ); }); + // eslint-disable-next-line jest/expect-expect + it('single mutation when repos use branch filter', async () => { + return expectMutation( + 'allReposSingleFile', + { + organization: 'myorganization', + project: 'myproject', + branch: 'mybranch', + }, + [ + { + fileName: 'catalog-info.yaml', + path: '/catalog-info.yaml', + repository: { + name: 'myrepo', + }, + project: { + name: 'myproject', + }, + branch: 'mybranch', + }, + ], + 'https://dev.azure.com/myorganization/myproject', + { + 'myrepo?path=/catalog-info.yaml': + 'generated-589e8cc47341987c7a34f5291791151fa64f7754', + }, + ); + }); + // eslint-disable-next-line jest/expect-expect it('single mutation when multiple repos have multiple files', async () => { return expectMutation( diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts index 788b9c2f05..457a9e74f2 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts @@ -177,8 +177,12 @@ export class AzureDevOpsEntityProvider implements EntityProvider { private createObjectUrl(file: CodeSearchResultItem): string { const baseUrl = `https://${this.config.host}/${this.config.organization}/${file.project.name}`; - return encodeURI( - `${baseUrl}/_git/${file.repository.name}?path=${file.path}`, - ); + + let fullUrl = `${baseUrl}/_git/${file.repository.name}?path=${file.path}`; + if (this.config.branch) { + fullUrl += `&version=GB${this.config.branch}`; + } + + return encodeURI(fullUrl); } } diff --git a/plugins/catalog-backend-module-azure/src/providers/config.test.ts b/plugins/catalog-backend-module-azure/src/providers/config.test.ts index a09079f1c3..02dbaab90e 100644 --- a/plugins/catalog-backend-module-azure/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/config.test.ts @@ -44,17 +44,30 @@ describe('readAzureDevOpsConfigs', () => { }, }, }; + const provider5 = { + host: 'azure.mycompany.com', + organization: 'mycompany', + project: 'myproject', + branch: 'mybranch', + }; + const config = { catalog: { providers: { - azureDevOps: { provider1, provider2, provider3, provider4 }, + azureDevOps: { + provider1, + provider2, + provider3, + provider4, + provider5, + }, }, }, }; const actual = readAzureDevOpsConfigs(new ConfigReader(config)); - expect(actual).toHaveLength(4); + expect(actual).toHaveLength(5); expect(actual[0]).toEqual({ ...provider1, path: '/catalog-info.yaml', @@ -85,5 +98,12 @@ describe('readAzureDevOpsConfigs', () => { frequency: Duration.fromISO(provider4.schedule.frequency), }, }); + expect(actual[4]).toEqual({ + ...provider5, + branch: 'mybranch', + path: '/catalog-info.yaml', + repository: '*', + id: 'provider5', + }); }); }); diff --git a/plugins/catalog-backend-module-azure/src/providers/config.ts b/plugins/catalog-backend-module-azure/src/providers/config.ts index c84c242488..3c10a50863 100644 --- a/plugins/catalog-backend-module-azure/src/providers/config.ts +++ b/plugins/catalog-backend-module-azure/src/providers/config.ts @@ -41,6 +41,7 @@ function readAzureDevOpsConfig(id: string, config: Config): AzureDevOpsConfig { const project = config.getString('project'); const host = config.getOptionalString('host') || 'dev.azure.com'; const repository = config.getOptionalString('repository') || '*'; + const branch = config.getOptionalString('branch'); const path = config.getOptionalString('path') || '/catalog-info.yaml'; const schedule = config.has('schedule') @@ -53,6 +54,7 @@ function readAzureDevOpsConfig(id: string, config: Config): AzureDevOpsConfig { organization, project, repository, + branch, path, schedule, }; diff --git a/plugins/catalog-backend-module-azure/src/providers/types.ts b/plugins/catalog-backend-module-azure/src/providers/types.ts index b22a8551a5..3cd827b380 100644 --- a/plugins/catalog-backend-module-azure/src/providers/types.ts +++ b/plugins/catalog-backend-module-azure/src/providers/types.ts @@ -22,6 +22,7 @@ export type AzureDevOpsConfig = { organization: string; project: string; repository: string; + branch?: string; path: string; schedule?: TaskScheduleDefinition; }; From 0949fbd135f9134d2512984e32e36ebe063acbe5 Mon Sep 17 00:00:00 2001 From: Taras Date: Tue, 7 Mar 2023 16:28:38 -0500 Subject: [PATCH 09/43] Move .eslintignore to packages/app Signed-off-by: Taras --- packages/create-app/templates/default-app/.eslintignore | 1 - .../create-app/templates/default-app/packages/app/.eslintignore | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 packages/create-app/templates/default-app/.eslintignore create mode 100644 packages/create-app/templates/default-app/packages/app/.eslintignore diff --git a/packages/create-app/templates/default-app/.eslintignore b/packages/create-app/templates/default-app/.eslintignore deleted file mode 100644 index ab944bd199..0000000000 --- a/packages/create-app/templates/default-app/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -**/public/** diff --git a/packages/create-app/templates/default-app/packages/app/.eslintignore b/packages/create-app/templates/default-app/packages/app/.eslintignore new file mode 100644 index 0000000000..a48cf0de7a --- /dev/null +++ b/packages/create-app/templates/default-app/packages/app/.eslintignore @@ -0,0 +1 @@ +public From 00980ee7c7ffba83201e86083a7aa18d90e6f150 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:09:08 +0000 Subject: [PATCH 10/43] fix(deps): update apollo graphql packages to v3.12.0 Signed-off-by: Renovate Bot --- yarn.lock | 64 +++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4f09b56620..fd768c6b20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17424,18 +17424,18 @@ __metadata: languageName: node linkType: hard -"apollo-reporting-protobuf@npm:^3.3.1, apollo-reporting-protobuf@npm:^3.3.3": - version: 3.3.3 - resolution: "apollo-reporting-protobuf@npm:3.3.3" +"apollo-reporting-protobuf@npm:^3.3.1, apollo-reporting-protobuf@npm:^3.4.0": + version: 3.4.0 + resolution: "apollo-reporting-protobuf@npm:3.4.0" dependencies: "@apollo/protobufjs": 1.2.6 - checksum: 6900db30476ef2e888ecef4c291e26579eba9695dc874ca8b3d1f93064bea307689172790b9d574849e5bdb371953ea38f2caddc5abb51e1ca197197f3d56d28 + checksum: 5bf50e9cecd3c2334cd12e0ebe59be6c4d7b1b9ee443c7d913011ea1b84513f57561fb6c3ceb66083321acb6d1c56f72e2ab0edf378cf742693409eb8dcdc46b languageName: node linkType: hard -"apollo-server-core@npm:^3.11.1": - version: 3.11.1 - resolution: "apollo-server-core@npm:3.11.1" +"apollo-server-core@npm:^3.12.0": + version: 3.12.0 + resolution: "apollo-server-core@npm:3.12.0" dependencies: "@apollo/utils.keyvaluecache": ^1.0.1 "@apollo/utils.logger": ^1.0.0 @@ -17446,11 +17446,11 @@ __metadata: "@graphql-tools/schema": ^8.0.0 "@josephg/resolvable": ^1.0.0 apollo-datasource: ^3.3.2 - apollo-reporting-protobuf: ^3.3.3 + apollo-reporting-protobuf: ^3.4.0 apollo-server-env: ^4.2.1 apollo-server-errors: ^3.3.1 - apollo-server-plugin-base: ^3.7.1 - apollo-server-types: ^3.7.1 + apollo-server-plugin-base: ^3.7.2 + apollo-server-types: ^3.8.0 async-retry: ^1.2.1 fast-json-stable-stringify: ^2.1.0 graphql-tag: ^2.11.0 @@ -17462,7 +17462,7 @@ __metadata: whatwg-mimetype: ^3.0.0 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: a5cb7cff331680c2a926c64e88f744425b724bcfae46aeb02ae636d0b6f57a605e561eb284e765618bd0b2b5f8c556c92183f69852f2e4f5889368fee6aa38dc + checksum: b7a37a78901d38a330c9df8fe870da3dcf512f43ab60fdf9ab0ba37be03977db5d4b72eabf51a830d2a9dcfb2974d7bfbc5aa8719e3afac113c8bd7222740b8f languageName: node linkType: hard @@ -17484,9 +17484,9 @@ __metadata: languageName: node linkType: hard -"apollo-server-express@npm:^3.0.0, apollo-server-express@npm:^3.11.1": - version: 3.11.1 - resolution: "apollo-server-express@npm:3.11.1" +"apollo-server-express@npm:^3.0.0, apollo-server-express@npm:^3.12.0": + version: 3.12.0 + resolution: "apollo-server-express@npm:3.12.0" dependencies: "@types/accepts": ^1.3.5 "@types/body-parser": 1.19.2 @@ -17494,54 +17494,54 @@ __metadata: "@types/express": 4.17.14 "@types/express-serve-static-core": 4.17.31 accepts: ^1.3.5 - apollo-server-core: ^3.11.1 - apollo-server-types: ^3.7.1 + apollo-server-core: ^3.12.0 + apollo-server-types: ^3.8.0 body-parser: ^1.19.0 cors: ^2.8.5 parseurl: ^1.3.3 peerDependencies: express: ^4.17.1 graphql: ^15.3.0 || ^16.0.0 - checksum: 1db1a77aaa2f760c885233ded249b632e467bb4895d1c3f797df6e197a9ca7021c5b65dd8829e88fd6dbf32d925c7dcf62b48b949a518e2e31072c490302fa60 + checksum: bd4bc213f506e2aeb2be961961de51e431f8774344b349e9b02f475714a623703eb62423ad968a8f8b6859919ae0d1912c40cf15a4df24e6f81b4f4c5653e70b languageName: node linkType: hard -"apollo-server-plugin-base@npm:^3.7.1": - version: 3.7.1 - resolution: "apollo-server-plugin-base@npm:3.7.1" +"apollo-server-plugin-base@npm:^3.7.2": + version: 3.7.2 + resolution: "apollo-server-plugin-base@npm:3.7.2" dependencies: - apollo-server-types: ^3.7.1 + apollo-server-types: ^3.8.0 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: db8c5f658da8c51c067bd6659b31ec2436d4961437b6f6f6b1b2a109d26764bc52a4dbe1bdafcb3c712b0e2f13ca10ed787e90423505685d2043a77363bdfc0b + checksum: d6ea6dbfad8bb82959286eae89878ccccbd09743c3df2b76bf790f470cbf5441ba06dcb6835a25f0bf32f4df05722cce157ae983ce32db4b69de8a72c9949e2e languageName: node linkType: hard -"apollo-server-types@npm:^3.7.1": - version: 3.7.1 - resolution: "apollo-server-types@npm:3.7.1" +"apollo-server-types@npm:^3.8.0": + version: 3.8.0 + resolution: "apollo-server-types@npm:3.8.0" dependencies: "@apollo/utils.keyvaluecache": ^1.0.1 "@apollo/utils.logger": ^1.0.0 - apollo-reporting-protobuf: ^3.3.3 + apollo-reporting-protobuf: ^3.4.0 apollo-server-env: ^4.2.1 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: fe9a0847d0b8ab70dbe407b4ba1f5e506d351ff1f728193f4b308806e73b958f50537478a71edeefdd66fcf3dbf32ec732b6ffe6542860d5b683b1d657a019a2 + checksum: 20accd42b65ceb95819a1610c410488fbe548ee309227d7fa22fd17dd1205e557091ba9c9a20efa532192098a4193e34eb58fc91d762b55fdf31229ac9fc7133 languageName: node linkType: hard "apollo-server@npm:^3.0.0": - version: 3.11.1 - resolution: "apollo-server@npm:3.11.1" + version: 3.12.0 + resolution: "apollo-server@npm:3.12.0" dependencies: "@types/express": 4.17.14 - apollo-server-core: ^3.11.1 - apollo-server-express: ^3.11.1 + apollo-server-core: ^3.12.0 + apollo-server-express: ^3.12.0 express: ^4.17.1 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: 6d4e981682e3b60313dddfe999c408c683f7e4cdeed5c14b6d6245b708808b94cb14df67ebe1b9df38df6b5193a9291089c41e287d014f2a9f94b2f3ecc9b376 + checksum: 6f3dade76f202f04a890b2385923a0319a859a0ab48121b1636e22d5eae83afe042d7a0a501aff3d8816e67de4f29f8efa598e350814a40f41d079610dee346e languageName: node linkType: hard From adcc5e4e73f806f1067de8701464db84595b48ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:57:37 +0000 Subject: [PATCH 11/43] fix(deps): update aws-sdk-js-v3 monorepo to v3.282.0 Signed-off-by: Renovate Bot --- yarn.lock | 469 +++--------------------------------------------------- 1 file changed, 26 insertions(+), 443 deletions(-) diff --git a/yarn.lock b/yarn.lock index fd768c6b20..2bb0ca0492 100644 --- a/yarn.lock +++ b/yarn.lock @@ -508,88 +508,48 @@ __metadata: linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.276.0 - resolution: "@aws-sdk/client-sqs@npm:3.276.0" + version: 3.282.0 + resolution: "@aws-sdk/client-sqs@npm:3.282.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.276.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/credential-provider-node": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 + "@aws-sdk/client-sts": 3.282.0 + "@aws-sdk/config-resolver": 3.282.0 + "@aws-sdk/credential-provider-node": 3.282.0 + "@aws-sdk/fetch-http-handler": 3.282.0 "@aws-sdk/hash-node": 3.272.0 "@aws-sdk/invalid-dependency": 3.272.0 "@aws-sdk/md5-js": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 + "@aws-sdk/middleware-content-length": 3.282.0 + "@aws-sdk/middleware-endpoint": 3.282.0 + "@aws-sdk/middleware-host-header": 3.282.0 "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 + "@aws-sdk/middleware-recursion-detection": 3.282.0 + "@aws-sdk/middleware-retry": 3.282.0 "@aws-sdk/middleware-sdk-sqs": 3.272.0 "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.272.0 + "@aws-sdk/middleware-signing": 3.282.0 "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 + "@aws-sdk/middleware-user-agent": 3.282.0 "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 + "@aws-sdk/node-http-handler": 3.282.0 + "@aws-sdk/protocol-http": 3.282.0 + "@aws-sdk/smithy-client": 3.279.0 "@aws-sdk/types": 3.272.0 "@aws-sdk/url-parser": 3.272.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 + "@aws-sdk/util-defaults-mode-browser": 3.279.0 + "@aws-sdk/util-defaults-mode-node": 3.282.0 "@aws-sdk/util-endpoints": 3.272.0 "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 + "@aws-sdk/util-user-agent-browser": 3.282.0 + "@aws-sdk/util-user-agent-node": 3.282.0 "@aws-sdk/util-utf8": 3.254.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: 88139fde34fa6348e841de13fce5e68b2dfb735c5358c959f9956a8c918048bde8b1ff701e8e701807af5f67f6df129056986b62a7e07096cc7097f3491d36b8 - languageName: node - linkType: hard - -"@aws-sdk/client-sso-oidc@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.272.0" - dependencies: - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.0 - "@aws-sdk/util-base64": 3.208.0 - "@aws-sdk/util-body-length-browser": 3.188.0 - "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 - tslib: ^2.3.1 - checksum: a1ee61c2fc86a74439e06c98aa10c8246e31579eb480b625321f7dfe8fd26af49bd6ead803da2443700c5943eab5ba90dfc33fc4d9f23b1a680850d73526da4d + checksum: d3a2a2abb27313666aa8c9842c91a098b2570878a9853d59bf07d480669723d77b74ad2ca8e5297dc593d8e76578c78c2634f81e4eed84b84b020b06af04c423 languageName: node linkType: hard @@ -633,46 +593,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/client-sso@npm:3.272.0" - dependencies: - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.0 - "@aws-sdk/util-base64": 3.208.0 - "@aws-sdk/util-body-length-browser": 3.188.0 - "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 - tslib: ^2.3.1 - checksum: 7549e813ef8088d22a0a1f9c8a42532d2d2050c932fd6e7d4f717aea2cd554938283f3af0f1fe9597b24724c6b2438947b3089452ed9c0dfafb1efad15f3ac60 - languageName: node - linkType: hard - "@aws-sdk/client-sso@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/client-sso@npm:3.282.0" @@ -713,50 +633,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.276.0": - version: 3.276.0 - resolution: "@aws-sdk/client-sts@npm:3.276.0" - dependencies: - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/credential-provider-node": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 - "@aws-sdk/middleware-sdk-sts": 3.272.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.0 - "@aws-sdk/util-base64": 3.208.0 - "@aws-sdk/util-body-length-browser": 3.188.0 - "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 - fast-xml-parser: 4.1.2 - tslib: ^2.3.1 - checksum: 3250322448500789588d24b6fac295b551ab4c1661ab9aa93f173e63b4673260bb2e551c079d811da752115e583b76f5c7ffb16d94b3c66275e75e52a93f35f3 - languageName: node - linkType: hard - "@aws-sdk/client-sts@npm:3.282.0, @aws-sdk/client-sts@npm:^3.208.0": version: 3.282.0 resolution: "@aws-sdk/client-sts@npm:3.282.0" @@ -801,19 +677,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/config-resolver@npm:3.272.0" - dependencies: - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.272.0 - tslib: ^2.3.1 - checksum: d2a2fa4f013ad04f50522aec1001efd34c62ababbc809b176d2e31e41828d867de616ff01bfcaa12603b344ca6838ea5946c72d21e5f2573b90828e29bad6e35 - languageName: node - linkType: hard - "@aws-sdk/config-resolver@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/config-resolver@npm:3.282.0" @@ -863,23 +726,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.272.0" - dependencies: - "@aws-sdk/credential-provider-env": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/credential-provider-process": 3.272.0 - "@aws-sdk/credential-provider-sso": 3.272.0 - "@aws-sdk/credential-provider-web-identity": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 06c1dfc6bff09472e11dd7e2c295cfdf71c36af11cb6ba33ce0328aaf9d0baee3f99de8ceec32ff473925b55ad190c9f85f125cf43874c25e22c37e8e3c648d3 - languageName: node - linkType: hard - "@aws-sdk/credential-provider-ini@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/credential-provider-ini@npm:3.282.0" @@ -897,24 +743,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.272.0" - dependencies: - "@aws-sdk/credential-provider-env": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/credential-provider-ini": 3.272.0 - "@aws-sdk/credential-provider-process": 3.272.0 - "@aws-sdk/credential-provider-sso": 3.272.0 - "@aws-sdk/credential-provider-web-identity": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 25c5ab8583821f63c7eb1a5257869dd21159d0b7643ff9a9c094e9b5c78c887bc441f1a2f974eaace62c1879d13e7d590bb3ea2623f5a5de822bf773b1aab100 - languageName: node - linkType: hard - "@aws-sdk/credential-provider-node@npm:3.282.0, @aws-sdk/credential-provider-node@npm:^3.208.0": version: 3.282.0 resolution: "@aws-sdk/credential-provider-node@npm:3.282.0" @@ -945,20 +773,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.272.0" - dependencies: - "@aws-sdk/client-sso": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/token-providers": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: ac1ada61e67f6f0a82ed8507c0218a03fe40e2d1e4ee064578e63573f868195800088dc3e33d58d7d04877e464342987005aceb300e4db9a141080cdc695e46e - languageName: node - linkType: hard - "@aws-sdk/credential-provider-sso@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/credential-provider-sso@npm:3.282.0" @@ -1075,19 +889,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/querystring-builder": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-base64": 3.208.0 - tslib: ^2.3.1 - checksum: 63d047db7b7ebfee49af8bf42f3a7aa1bea37cc687e7046bc77913c23ed99056e91b5ab77739157428be73b2a2f29783a7a659ccf29a440dd63b750d313d46cc - languageName: node - linkType: hard - "@aws-sdk/fetch-http-handler@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/fetch-http-handler@npm:3.282.0" @@ -1156,11 +957,11 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.276.0 - resolution: "@aws-sdk/lib-storage@npm:3.276.0" + version: 3.282.0 + resolution: "@aws-sdk/lib-storage@npm:3.282.0" dependencies: - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 + "@aws-sdk/middleware-endpoint": 3.282.0 + "@aws-sdk/smithy-client": 3.279.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 @@ -1168,7 +969,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 1e34d3569c8cf2f7c42efdd7966a9faea64bf49f4fe1fcb0ff30ed86670a5ba2361bb14279e7dc1bc110a1ff9e5cec3551bc8a56b3c9c4d19f98ff4842a8de19 + checksum: 14f1f21a653d239721ca488b6d7951511576a2e2652d240f3561ac0255cd4af321bc41531c15c3c6fae4095da062f5e841c6c9b58afd80be9bf105b63a256f72 languageName: node linkType: hard @@ -1196,17 +997,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: e1a9c3e6fec8dcfed90bb44b25a8f4786b4ed0cbd79c6f69e3d8e91d394402ad4f2667231aafdcc05caf136a331434d54fac286a72ab5870dd90705a2e56243b - languageName: node - linkType: hard - "@aws-sdk/middleware-content-length@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-content-length@npm:3.282.0" @@ -1218,22 +1008,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.272.0" - dependencies: - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.0 - "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.272.0 - tslib: ^2.3.1 - checksum: c3acd1a35d33cff87a43df371ae138faf6c9569497c36b009cafc2fdb1f21e352671df6eb56730634d7f135bef2a47ac588ac7cdd2905676292a418b79a0eab1 - languageName: node - linkType: hard - "@aws-sdk/middleware-endpoint@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-endpoint@npm:3.282.0" @@ -1276,17 +1050,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 3e191fe72de35b517a20fe47f647527579458091d4d66d55ef7e6b08107a4f4d7abe77afdcdd061776db906309d414525ff63e472c2c05d6e2447f41582f64fb - languageName: node - linkType: hard - "@aws-sdk/middleware-host-header@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-host-header@npm:3.282.0" @@ -1318,17 +1081,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: cdc150a4f3cbd5d7c6926befcf7eb49daea1d0ca054dbe7b82e013eb74f3850056b78603f61989c2bb3cdc748798674b6811c3011c6a8c1773e13dfa11ea3ae7 - languageName: node - linkType: hard - "@aws-sdk/middleware-recursion-detection@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-recursion-detection@npm:3.282.0" @@ -1340,21 +1092,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-retry@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/service-error-classification": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-middleware": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - tslib: ^2.3.1 - uuid: ^8.3.2 - checksum: 208e8f1b96f5ee47d28d76d0f7738f0ae7e355cb9aa24dcb88a8c4d9aa35bf833bf333c1ad4a6d11d18ec27b1713cac0ee04e0fdac17462059416a214f366944 - languageName: node - linkType: hard - "@aws-sdk/middleware-retry@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-retry@npm:3.282.0" @@ -1394,20 +1131,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.272.0" - dependencies: - "@aws-sdk/middleware-signing": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: d808f945ae7354ef7102737418794565f26af3ca3241c3873235284400a13faf118242e92eba1831c25fc249d9c6a15f3c16e4ae3101cd6d5ab175a669b70fcb - languageName: node - linkType: hard - "@aws-sdk/middleware-sdk-sts@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-sdk-sts@npm:3.282.0" @@ -1432,20 +1155,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-signing@npm:3.272.0" - dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-middleware": 3.272.0 - tslib: ^2.3.1 - checksum: 0b711de21b0f2b28178b211ae2de962676038ed49ff9247810c2213018b77ca399285278a0b448a0242f92796e1360b83c09aa268fe64a7f153428b9ed919edc - languageName: node - linkType: hard - "@aws-sdk/middleware-signing@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-signing@npm:3.282.0" @@ -1479,17 +1188,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: a392a8c68509f118f008002e4ef6ba7fea9f93ade97963449e6eec951c0319a7cc8fd40cf77bda1540ff25ebbbe75785a6fc5ed4be63676144e5242892940732 - languageName: node - linkType: hard - "@aws-sdk/middleware-user-agent@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-user-agent@npm:3.282.0" @@ -1513,19 +1211,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/node-http-handler@npm:3.272.0" - dependencies: - "@aws-sdk/abort-controller": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/querystring-builder": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: cbcdab82a7611d1d776197e921563ac6248173aa6e5a6f6e6486a735c71763ae69d1d6ae6de8acebcb8020cdfa089a776d9180929397291623db8f11a1f7b8a9 - languageName: node - linkType: hard - "@aws-sdk/node-http-handler@npm:3.282.0, @aws-sdk/node-http-handler@npm:^3.208.0": version: 3.282.0 resolution: "@aws-sdk/node-http-handler@npm:3.282.0" @@ -1559,16 +1244,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/protocol-http@npm:3.272.0" - dependencies: - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 59d7c97b1a46bc3c072f56caec365472c9d94638923799ad2418cee52bb0eab945ab080cd63f5351ff45ad943dde9d88b294e096af36524e184c0764b2ea6cc5 - languageName: node - linkType: hard - "@aws-sdk/protocol-http@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/protocol-http@npm:3.282.0" @@ -1646,21 +1321,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/signature-v4@npm:3.272.0" - dependencies: - "@aws-sdk/is-array-buffer": 3.201.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-middleware": 3.272.0 - "@aws-sdk/util-uri-escape": 3.201.0 - "@aws-sdk/util-utf8": 3.254.0 - tslib: ^2.3.1 - checksum: bdf997ed7779e173797bd31a9ae39bc9860e12cb7d0a734b4a47c76bde435c5c1d5f56dbb3c5f1a2b26a828367fd88f34a4527b8a12d4c1a60b3b0049aacf706 - languageName: node - linkType: hard - "@aws-sdk/signature-v4@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/signature-v4@npm:3.282.0" @@ -1676,17 +1336,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/smithy-client@npm:3.272.0" - dependencies: - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 8ba3c4733a32c7c28ec06735b0fc3dbc33a1657bfc54dc28f6770b021fda74680c693812d8c6db2291197a275f32fd80be909dddda4eb726328bf34e8d18bccc - languageName: node - linkType: hard - "@aws-sdk/smithy-client@npm:3.279.0": version: 3.279.0 resolution: "@aws-sdk/smithy-client@npm:3.279.0" @@ -1698,19 +1347,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/token-providers@npm:3.272.0" - dependencies: - "@aws-sdk/client-sso-oidc": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 8d49846f4ad124707879a9b8adaea089c4d02dfd1c15dcceb083fecd538ecce1db65f1104e6178b13941acb2a4ae275c5cf9eb586d5d25757eb9fb454bdbb70c - languageName: node - linkType: hard - "@aws-sdk/token-providers@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/token-providers@npm:3.282.0" @@ -1807,18 +1443,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.272.0" - dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 - bowser: ^2.11.0 - tslib: ^2.3.1 - checksum: 56594cc954c6431ced3646668fd92d8229eb1c20a37d6c66b0ebf3ce88a7f9803c63d432c78412768ebf0d141fdacef01644ea0f3507e6fb295a22c80f728c1a - languageName: node - linkType: hard - "@aws-sdk/util-defaults-mode-browser@npm:3.279.0": version: 3.279.0 resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.279.0" @@ -1831,20 +1455,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.272.0" - dependencies: - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: ee0e44d78d70b6eab73d6e8455972218cb1a15950f47d81d72d094420b2719add34bf46218016f85242a2a155216d2a0542ed5f4e68e171efc09691125fcb6fd - languageName: node - linkType: hard - "@aws-sdk/util-defaults-mode-node@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/util-defaults-mode-node@npm:3.282.0" @@ -1946,17 +1556,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.272.0" - dependencies: - "@aws-sdk/types": 3.272.0 - bowser: ^2.11.0 - tslib: ^2.3.1 - checksum: e5ac1b88f9af45c2e0dbec40d2aa9c616634df252ac437f2dfd3aeb316fe561a5c09d481c075945843b3a7f5edafbc10ef26741c6ccacc4d435d8be7eeab179c - languageName: node - linkType: hard - "@aws-sdk/util-user-agent-browser@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/util-user-agent-browser@npm:3.282.0" @@ -1968,22 +1567,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.272.0" - dependencies: - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - peerDependencies: - aws-crt: ">=1.0.0" - peerDependenciesMeta: - aws-crt: - optional: true - checksum: 25d5f39349190e6323f893de4f0e7a931751bf1521808210515ef8d951c1a6a3e5f1dc1773cbd5ca9f999c5d00f3a421ad570b5f79b20dc2692012a9f833ff24 - languageName: node - linkType: hard - "@aws-sdk/util-user-agent-node@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/util-user-agent-node@npm:3.282.0" From 753cd30d90fa96532e697a4a108c71ded54268ea Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 8 Mar 2023 11:17:58 +0100 Subject: [PATCH 12/43] Fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Johan Haals --- .../src/api/CatalogImportClient.test.ts | 1 - .../src/actions/fetch/rails/index.test.ts | 2 +- .../scaffolder/actions/builtin/publish/azure.test.ts | 11 ++++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/plugins/catalog-import/src/api/CatalogImportClient.test.ts b/plugins/catalog-import/src/api/CatalogImportClient.test.ts index e77abc8a85..646a3b7bf9 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.test.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.test.ts @@ -121,7 +121,6 @@ describe('CatalogImportClient', () => { }); afterEach(() => { - jest.restoreAllMocks(); jest.clearAllMocks(); }); diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts index 56f85d002e..37d0bcac4a 100644 --- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts +++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts @@ -91,7 +91,7 @@ describe('fetch:rails', () => { beforeEach(() => { mockFs({ [`${mockContext.workspacePath}/result`]: {} }); - jest.restoreAllMocks(); + jest.clearAllMocks(); }); afterEach(() => { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts index 2d2775572f..a2262c1f9f 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts @@ -62,7 +62,7 @@ describe('publish:azure', () => { (WebApi as unknown as jest.Mock).mockImplementation(() => mockGitApi); beforeEach(() => { - jest.restoreAllMocks(); + jest.clearAllMocks(); }); it('should throw an error when the repoUrl is not well formed', async () => { @@ -183,7 +183,12 @@ describe('publish:azure', () => { id: '709e891c-dee7-4f91-b963-534713c0737f', })); - await action.handler(mockContext); + await action.handler({ + ...mockContext, + input: { + repoUrl: 'dev.azure.com?repo=bob&owner=owner&organization=org', + }, + }); expect(WebApi).toHaveBeenCalledWith( 'https://dev.azure.com/org', @@ -234,7 +239,7 @@ describe('publish:azure', () => { expect(initRepoAndPush).toHaveBeenCalledWith({ dir: mockContext.workspacePath, remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', - defaultBranch: 'master', + defaultBranch: 'main', auth: { username: 'notempty', password: 'tokenlols' }, logger: mockContext.logger, commitMessage: 'initial commit', From 7b6cfdd8806c901ed405a9544ee399bab84c0838 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 10:44:02 +0000 Subject: [PATCH 13/43] fix(deps): update dependency @azure/storage-blob to v12.13.0 Signed-off-by: Renovate Bot --- yarn.lock | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2bb0ca0492..31923b65bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1658,13 +1658,6 @@ __metadata: languageName: node linkType: hard -"@azure/core-asynciterator-polyfill@npm:^1.0.0": - version: 1.0.0 - resolution: "@azure/core-asynciterator-polyfill@npm:1.0.0" - checksum: b6d3ab3f0ffc0a9f426a1d2cc90b81778730b14d81af7dcab9760c9e241f7c0f6843d45fad572dcd1379232b3fb2cacd76d110a0d54a999ceb1bf0fd9ed39e99 - languageName: node - linkType: hard - "@azure/core-auth@npm:^1.1.4, @azure/core-auth@npm:^1.3.0, @azure/core-auth@npm:^1.4.0": version: 1.4.0 resolution: "@azure/core-auth@npm:1.4.0" @@ -1690,26 +1683,25 @@ __metadata: languageName: node linkType: hard -"@azure/core-http@npm:^2.0.0": - version: 2.2.4 - resolution: "@azure/core-http@npm:2.2.4" +"@azure/core-http@npm:^3.0.0": + version: 3.0.0 + resolution: "@azure/core-http@npm:3.0.0" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-asynciterator-polyfill": ^1.0.0 "@azure/core-auth": ^1.3.0 "@azure/core-tracing": 1.0.0-preview.13 + "@azure/core-util": ^1.1.1 "@azure/logger": ^1.0.0 "@types/node-fetch": ^2.5.0 "@types/tunnel": ^0.0.3 form-data: ^4.0.0 node-fetch: ^2.6.7 process: ^0.11.10 - tough-cookie: ^4.0.0 tslib: ^2.2.0 tunnel: ^0.0.6 uuid: ^8.3.0 xml2js: ^0.4.19 - checksum: abda8c34c6d54f61b77080b1d4c01b3828cf9a344eb100346ebcc5ef9903d8f57651fbc73c0230afad5fe497c5c6da576a77cf43827f87417cecac7d7e612967 + checksum: 9b6885a60a8fdac924cc9544e09d66757ff4ed51ed20ce3c279321e684e21c295c091ad9d45477e02baae5255e3a92c5fbb2ac46687d261d66488c294b32846f languageName: node linkType: hard @@ -1771,12 +1763,13 @@ __metadata: languageName: node linkType: hard -"@azure/core-util@npm:^1.0.0": - version: 1.0.0 - resolution: "@azure/core-util@npm:1.0.0" +"@azure/core-util@npm:^1.0.0, @azure/core-util@npm:^1.1.1": + version: 1.2.0 + resolution: "@azure/core-util@npm:1.2.0" dependencies: + "@azure/abort-controller": ^1.0.0 tslib: ^2.2.0 - checksum: a0a9cce9452f78babb224fa2ea5566811bd946c55e5c867ca75e6ecd7fcf796b2ec2aa7424e141f03d8e14141e80f048897d0d3c227a7ff0bbaa9ba3d2fc14c9 + checksum: 58c7e3c9e9fda27242c1ab1dbfcf11eab52cc3e6459a2509fa5572a3faebf3f24c6bf9d92883cd80974119fc1e2c16c7bd2c71f20cfbe670405515c73fdb4093 languageName: node linkType: hard @@ -1876,18 +1869,18 @@ __metadata: linkType: hard "@azure/storage-blob@npm:^12.5.0": - version: 12.12.0 - resolution: "@azure/storage-blob@npm:12.12.0" + version: 12.13.0 + resolution: "@azure/storage-blob@npm:12.13.0" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-http": ^2.0.0 + "@azure/core-http": ^3.0.0 "@azure/core-lro": ^2.2.0 "@azure/core-paging": ^1.1.1 "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 events: ^3.0.0 tslib: ^2.2.0 - checksum: bb7f6514a251f8ec337718088b8c9ba80e27b34c786b7fb380fdca19eb3735a0da917dcfcdacef27d0eb256d007a37f89f3d6b08c55405cbcc04685f2a51da3b + checksum: 1509b8904eb46937b76f9acc04e9e0c39e8e9219a3bc3f5c006df7eb4d29ff2ed0ebbecc875f9372b5a349639e79123b30bbfb407864cfe91633dd6871a9bd99 languageName: node linkType: hard From a5de745ac17e63598de47c0f736205875670822d Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 8 Mar 2023 11:50:36 +0100 Subject: [PATCH 14/43] Rename event modules to comply with naming pattern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Johan Haals --- .changeset/big-gorillas-fail1.md | 5 +++++ .changeset/big-gorillas-fail2.md | 5 +++++ .changeset/big-gorillas-fail3.md | 5 +++++ .changeset/big-gorillas-fail4.md | 5 +++++ .changeset/big-gorillas-fail5.md | 5 +++++ .changeset/big-gorillas-fail6.md | 5 +++++ .changeset/stupid-games-brake.md | 5 +++++ plugins/events-backend-module-aws-sqs/alpha-api-report.md | 2 +- plugins/events-backend-module-aws-sqs/src/alpha.ts | 2 +- ...ts => eventsModuleAwsSqsConsumingEventPublisher.test.ts} | 6 +++--- ...dule.ts => eventsModuleAwsSqsConsumingEventPublisher.ts} | 4 ++-- plugins/events-backend-module-azure/alpha-api-report.md | 2 +- plugins/events-backend-module-azure/src/alpha.ts | 2 +- ...e.test.ts => eventsModuleAzureDevOpsEventRouter.test.ts} | 6 +++--- ...ventsModule.ts => eventsModuleAzureDevOpsEventRouter.ts} | 2 +- .../alpha-api-report.md | 2 +- plugins/events-backend-module-bitbucket-cloud/src/alpha.ts | 2 +- ...est.ts => eventsModuleBitbucketCloudEventRouter.test.ts} | 6 +++--- ...tsModule.ts => eventsModuleBitbucketCloudEventRouter.ts} | 2 +- plugins/events-backend-module-gerrit/alpha-api-report.md | 2 +- plugins/events-backend-module-gerrit/src/alpha.ts | 2 +- ...Module.test.ts => eventsModuleGerritEventRouter.test.ts} | 6 +++--- ...uterEventsModule.ts => eventsModuleGerritEventRouter.ts} | 2 +- plugins/events-backend-module-github/alpha-api-report.md | 4 ++-- plugins/events-backend-module-github/src/alpha.ts | 4 ++-- ...Module.test.ts => eventsModuleGithubEventRouter.test.ts} | 6 +++--- ...uterEventsModule.ts => eventsModuleGithubEventRouter.ts} | 2 +- ...entsModule.test.ts => eventsModuleGithubWebhook.test.ts} | 6 +++--- ...bWebhookEventsModule.ts => eventsModuleGithubWebhook.ts} | 2 +- plugins/events-backend-module-gitlab/alpha-api-report.md | 4 ++-- plugins/events-backend-module-gitlab/src/alpha.ts | 4 ++-- ...Module.test.ts => eventsModuleGitlabEventRouter.test.ts} | 6 +++--- ...uterEventsModule.ts => eventsModuleGitlabEventRouter.ts} | 2 +- ...entsModule.test.ts => eventsModuleGitlabWebhook.test.ts} | 4 ++-- ...bWebhookEventsModule.ts => eventsModuleGitlabWebhook.ts} | 2 +- plugins/events-backend/README.md | 4 ++-- 36 files changed, 85 insertions(+), 50 deletions(-) create mode 100644 .changeset/big-gorillas-fail1.md create mode 100644 .changeset/big-gorillas-fail2.md create mode 100644 .changeset/big-gorillas-fail3.md create mode 100644 .changeset/big-gorillas-fail4.md create mode 100644 .changeset/big-gorillas-fail5.md create mode 100644 .changeset/big-gorillas-fail6.md create mode 100644 .changeset/stupid-games-brake.md rename plugins/events-backend-module-aws-sqs/src/service/{AwsSqsConsumingEventPublisherEventsModule.test.ts => eventsModuleAwsSqsConsumingEventPublisher.test.ts} (92%) rename plugins/events-backend-module-aws-sqs/src/service/{AwsSqsConsumingEventPublisherEventsModule.ts => eventsModuleAwsSqsConsumingEventPublisher.ts} (92%) rename plugins/events-backend-module-azure/src/service/{AzureDevOpsEventRouterEventsModule.test.ts => eventsModuleAzureDevOpsEventRouter.test.ts} (88%) rename plugins/events-backend-module-azure/src/service/{AzureDevOpsEventRouterEventsModule.ts => eventsModuleAzureDevOpsEventRouter.ts} (95%) rename plugins/events-backend-module-bitbucket-cloud/src/service/{BitbucketCloudEventRouterEventsModule.test.ts => eventsModuleBitbucketCloudEventRouter.test.ts} (88%) rename plugins/events-backend-module-bitbucket-cloud/src/service/{BitbucketCloudEventRouterEventsModule.ts => eventsModuleBitbucketCloudEventRouter.ts} (95%) rename plugins/events-backend-module-gerrit/src/service/{GerritEventRouterEventsModule.test.ts => eventsModuleGerritEventRouter.test.ts} (89%) rename plugins/events-backend-module-gerrit/src/service/{GerritEventRouterEventsModule.ts => eventsModuleGerritEventRouter.ts} (95%) rename plugins/events-backend-module-github/src/service/{GithubEventRouterEventsModule.test.ts => eventsModuleGithubEventRouter.test.ts} (89%) rename plugins/events-backend-module-github/src/service/{GithubEventRouterEventsModule.ts => eventsModuleGithubEventRouter.ts} (95%) rename plugins/events-backend-module-github/src/service/{GithubWebhookEventsModule.test.ts => eventsModuleGithubWebhook.test.ts} (94%) rename plugins/events-backend-module-github/src/service/{GithubWebhookEventsModule.ts => eventsModuleGithubWebhook.ts} (95%) rename plugins/events-backend-module-gitlab/src/service/{GitlabEventRouterEventsModule.test.ts => eventsModuleGitlabEventRouter.test.ts} (89%) rename plugins/events-backend-module-gitlab/src/service/{GitlabEventRouterEventsModule.ts => eventsModuleGitlabEventRouter.ts} (95%) rename plugins/events-backend-module-gitlab/src/service/{GitlabWebhookEventsModule.test.ts => eventsModuleGitlabWebhook.test.ts} (95%) rename plugins/events-backend-module-gitlab/src/service/{GitlabWebhookEventsModule.ts => eventsModuleGitlabWebhook.ts} (95%) diff --git a/.changeset/big-gorillas-fail1.md b/.changeset/big-gorillas-fail1.md new file mode 100644 index 0000000000..18c2d621d7 --- /dev/null +++ b/.changeset/big-gorillas-fail1.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-bitbucket-cloud': patch +--- + +Renamed `bitbucketCloudEventRouterEventsModule` to `eventsModuleBitbucketCloudEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail2.md b/.changeset/big-gorillas-fail2.md new file mode 100644 index 0000000000..bc34bf9aaa --- /dev/null +++ b/.changeset/big-gorillas-fail2.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-aws-sqs': patch +--- + +Renamed `awsSqsConsumingEventPublisherEventsModule` to `eventsModuleAwsSqsConsumingEventPublisher` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail3.md b/.changeset/big-gorillas-fail3.md new file mode 100644 index 0000000000..352c1a2cff --- /dev/null +++ b/.changeset/big-gorillas-fail3.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-gerrit': patch +--- + +Renamed `gerritEventRouterEventsModule` to `eventsModuleGerritEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail4.md b/.changeset/big-gorillas-fail4.md new file mode 100644 index 0000000000..add8699f8b --- /dev/null +++ b/.changeset/big-gorillas-fail4.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-github': patch +--- + +Renamed `githubEventRouterEventsModule` to `eventsModuleGithubEventRouter` and `githubWebhookEventsModule` to `eventsModuleGithubWebhook`, to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail5.md b/.changeset/big-gorillas-fail5.md new file mode 100644 index 0000000000..549eb61f24 --- /dev/null +++ b/.changeset/big-gorillas-fail5.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-gitlab': patch +--- + +Renamed `gitlabEventRouterEventsModule` to `eventsModuleGitlabEventRouter` and `gitlabWebhookEventsModule` to `eventsModuleGitlabWebhook` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail6.md b/.changeset/big-gorillas-fail6.md new file mode 100644 index 0000000000..6622b5222e --- /dev/null +++ b/.changeset/big-gorillas-fail6.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-azure': patch +--- + +Renamed `azureDevOpsEventRouterEventsModule` to `eventsModuleAzureDevOpsEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/stupid-games-brake.md b/.changeset/stupid-games-brake.md new file mode 100644 index 0000000000..0a50a32ffa --- /dev/null +++ b/.changeset/stupid-games-brake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend': patch +--- + +Updated README instructions diff --git a/plugins/events-backend-module-aws-sqs/alpha-api-report.md b/plugins/events-backend-module-aws-sqs/alpha-api-report.md index b9f60c4437..e48515a414 100644 --- a/plugins/events-backend-module-aws-sqs/alpha-api-report.md +++ b/plugins/events-backend-module-aws-sqs/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const awsSqsConsumingEventPublisherEventsModule: () => BackendFeature; +export const eventsModuleAwsSqsConsumingEventPublisher: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-aws-sqs/src/alpha.ts b/plugins/events-backend-module-aws-sqs/src/alpha.ts index 00f08e4417..4f3ae09c42 100644 --- a/plugins/events-backend-module-aws-sqs/src/alpha.ts +++ b/plugins/events-backend-module-aws-sqs/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { awsSqsConsumingEventPublisherEventsModule } from './service/AwsSqsConsumingEventPublisherEventsModule'; +export { eventsModuleAwsSqsConsumingEventPublisher } from './service/eventsModuleAwsSqsConsumingEventPublisher'; diff --git a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.test.ts b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts similarity index 92% rename from plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.test.ts rename to plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts index 3963b9a8b6..921dc38552 100644 --- a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.test.ts +++ b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts @@ -20,10 +20,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; import { TestEventBroker } from '@backstage/plugin-events-backend-test-utils'; -import { awsSqsConsumingEventPublisherEventsModule } from './AwsSqsConsumingEventPublisherEventsModule'; +import { eventsModuleAwsSqsConsumingEventPublisher } from './eventsModuleAwsSqsConsumingEventPublisher'; import { AwsSqsConsumingEventPublisher } from '../publisher/AwsSqsConsumingEventPublisher'; -describe('awsSqsEventsModule', () => { +describe('eventsModuleAwsSqsConsumingEventPublisher', () => { it('should be correctly wired and set up', async () => { const config = new ConfigReader({ events: { @@ -68,7 +68,7 @@ describe('awsSqsEventsModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [awsSqsConsumingEventPublisherEventsModule()], + features: [eventsModuleAwsSqsConsumingEventPublisher()], }); expect(addedPublishers).not.toBeUndefined(); diff --git a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.ts b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts similarity index 92% rename from plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.ts rename to plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts index 4205bd231b..41ae2d80d7 100644 --- a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.ts +++ b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts @@ -27,9 +27,9 @@ import { AwsSqsConsumingEventPublisher } from '../publisher/AwsSqsConsumingEvent * * @alpha */ -export const awsSqsConsumingEventPublisherEventsModule = createBackendModule({ +export const eventsModuleAwsSqsConsumingEventPublisher = createBackendModule({ pluginId: 'events', - moduleId: 'awsSqsConsumingEventPublisherEventsModule', + moduleId: 'awsSqsConsumingEventPublisher', register(env) { env.registerInit({ deps: { diff --git a/plugins/events-backend-module-azure/alpha-api-report.md b/plugins/events-backend-module-azure/alpha-api-report.md index e3fed2cab0..1bd568d1df 100644 --- a/plugins/events-backend-module-azure/alpha-api-report.md +++ b/plugins/events-backend-module-azure/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const azureDevOpsEventRouterEventsModule: () => BackendFeature; +export const eventsModuleAzureDevOpsEventRouter: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-azure/src/alpha.ts b/plugins/events-backend-module-azure/src/alpha.ts index 8eacbd8270..07334fcbda 100644 --- a/plugins/events-backend-module-azure/src/alpha.ts +++ b/plugins/events-backend-module-azure/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { azureDevOpsEventRouterEventsModule } from './service/AzureDevOpsEventRouterEventsModule'; +export { eventsModuleAzureDevOpsEventRouter } from './service/eventsModuleAzureDevOpsEventRouter'; diff --git a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.test.ts b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.test.ts similarity index 88% rename from plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.test.ts rename to plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.test.ts index dbd61782ae..1ff756a2d2 100644 --- a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { azureDevOpsEventRouterEventsModule } from './AzureDevOpsEventRouterEventsModule'; +import { eventsModuleAzureDevOpsEventRouter } from './eventsModuleAzureDevOpsEventRouter'; import { AzureDevOpsEventRouter } from '../router/AzureDevOpsEventRouter'; -describe('azureDevOpsEventRouterEventsModule', () => { +describe('eventsModuleAzureDevOpsEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: AzureDevOpsEventRouter | undefined; let addedSubscriber: AzureDevOpsEventRouter | undefined; @@ -35,7 +35,7 @@ describe('azureDevOpsEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [azureDevOpsEventRouterEventsModule()], + features: [eventsModuleAzureDevOpsEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.ts b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.ts similarity index 95% rename from plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.ts rename to plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.ts index 18851befa4..36f3acada0 100644 --- a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.ts +++ b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.ts @@ -25,7 +25,7 @@ import { AzureDevOpsEventRouter } from '../router/AzureDevOpsEventRouter'; * * @alpha */ -export const azureDevOpsEventRouterEventsModule = createBackendModule({ +export const eventsModuleAzureDevOpsEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'azureDevOpsEventRouter', register(env) { diff --git a/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md b/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md index f8e550bf98..5e63ae36c8 100644 --- a/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md +++ b/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const bitbucketCloudEventRouterEventsModule: () => BackendFeature; +export const eventsModuleBitbucketCloudEventRouter: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts b/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts index e19ff9c9b5..75cda4327d 100644 --- a/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts +++ b/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { bitbucketCloudEventRouterEventsModule } from './service/BitbucketCloudEventRouterEventsModule'; +export { eventsModuleBitbucketCloudEventRouter } from './service/eventsModuleBitbucketCloudEventRouter'; diff --git a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.test.ts b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.test.ts similarity index 88% rename from plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.test.ts rename to plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.test.ts index 60ce5b713e..17d2252c7b 100644 --- a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { bitbucketCloudEventRouterEventsModule } from './BitbucketCloudEventRouterEventsModule'; +import { eventsModuleBitbucketCloudEventRouter } from './eventsModuleBitbucketCloudEventRouter'; import { BitbucketCloudEventRouter } from '../router/BitbucketCloudEventRouter'; -describe('bitbucketCloudEventRouterEventsModule', () => { +describe('eventsModuleBitbucketCloudEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: BitbucketCloudEventRouter | undefined; let addedSubscriber: BitbucketCloudEventRouter | undefined; @@ -35,7 +35,7 @@ describe('bitbucketCloudEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [bitbucketCloudEventRouterEventsModule()], + features: [eventsModuleBitbucketCloudEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.ts b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.ts similarity index 95% rename from plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.ts rename to plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.ts index 9516651aa3..60a8cc31c8 100644 --- a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.ts +++ b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.ts @@ -25,7 +25,7 @@ import { BitbucketCloudEventRouter } from '../router/BitbucketCloudEventRouter'; * * @alpha */ -export const bitbucketCloudEventRouterEventsModule = createBackendModule({ +export const eventsModuleBitbucketCloudEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'bitbucketCloudEventRouter', register(env) { diff --git a/plugins/events-backend-module-gerrit/alpha-api-report.md b/plugins/events-backend-module-gerrit/alpha-api-report.md index f610d518e7..d1be54730f 100644 --- a/plugins/events-backend-module-gerrit/alpha-api-report.md +++ b/plugins/events-backend-module-gerrit/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const gerritEventRouterEventsModule: () => BackendFeature; +export const eventsModuleGerritEventRouter: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-gerrit/src/alpha.ts b/plugins/events-backend-module-gerrit/src/alpha.ts index 26fd89b14d..788331b998 100644 --- a/plugins/events-backend-module-gerrit/src/alpha.ts +++ b/plugins/events-backend-module-gerrit/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { gerritEventRouterEventsModule } from './service/GerritEventRouterEventsModule'; +export { eventsModuleGerritEventRouter } from './service/eventsModuleGerritEventRouter'; diff --git a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.test.ts b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.test.ts similarity index 89% rename from plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.test.ts rename to plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.test.ts index 6a8f4f46ff..88ef995966 100644 --- a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { gerritEventRouterEventsModule } from './GerritEventRouterEventsModule'; +import { eventsModuleGerritEventRouter } from './eventsModuleGerritEventRouter'; import { GerritEventRouter } from '../router/GerritEventRouter'; -describe('gerritEventRouterEventsModule', () => { +describe('eventsModuleGerritEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: GerritEventRouter | undefined; let addedSubscriber: GerritEventRouter | undefined; @@ -35,7 +35,7 @@ describe('gerritEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [gerritEventRouterEventsModule()], + features: [eventsModuleGerritEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.ts b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.ts similarity index 95% rename from plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.ts rename to plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.ts index 31f5c9b384..8d490ea0b2 100644 --- a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.ts +++ b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.ts @@ -25,7 +25,7 @@ import { GerritEventRouter } from '../router/GerritEventRouter'; * * @alpha */ -export const gerritEventRouterEventsModule = createBackendModule({ +export const eventsModuleGerritEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'gerritEventRouter', register(env) { diff --git a/plugins/events-backend-module-github/alpha-api-report.md b/plugins/events-backend-module-github/alpha-api-report.md index cb95928b17..c233df8634 100644 --- a/plugins/events-backend-module-github/alpha-api-report.md +++ b/plugins/events-backend-module-github/alpha-api-report.md @@ -6,10 +6,10 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const githubEventRouterEventsModule: () => BackendFeature; +export const eventsModuleGithubEventRouter: () => BackendFeature; // @alpha -export const githubWebhookEventsModule: () => BackendFeature; +export const eventsModuleGithubWebhook: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-github/src/alpha.ts b/plugins/events-backend-module-github/src/alpha.ts index 8a712cacb1..2db8e9d9aa 100644 --- a/plugins/events-backend-module-github/src/alpha.ts +++ b/plugins/events-backend-module-github/src/alpha.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { githubEventRouterEventsModule } from './service/GithubEventRouterEventsModule'; -export { githubWebhookEventsModule } from './service/GithubWebhookEventsModule'; +export { eventsModuleGithubEventRouter } from './service/eventsModuleGithubEventRouter'; +export { eventsModuleGithubWebhook } from './service/eventsModuleGithubWebhook'; diff --git a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.test.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.test.ts similarity index 89% rename from plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.test.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.test.ts index 0e2ca69366..bfa186c7bc 100644 --- a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { githubEventRouterEventsModule } from './GithubEventRouterEventsModule'; +import { eventsModuleGithubEventRouter } from './eventsModuleGithubEventRouter'; import { GithubEventRouter } from '../router/GithubEventRouter'; -describe('githubEventRouterEventsModule', () => { +describe('eventsModuleGithubEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: GithubEventRouter | undefined; let addedSubscriber: GithubEventRouter | undefined; @@ -35,7 +35,7 @@ describe('githubEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [githubEventRouterEventsModule()], + features: [eventsModuleGithubEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.ts similarity index 95% rename from plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.ts index 56cc571763..17485098c2 100644 --- a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.ts @@ -25,7 +25,7 @@ import { GithubEventRouter } from '../router/GithubEventRouter'; * * @alpha */ -export const githubEventRouterEventsModule = createBackendModule({ +export const eventsModuleGithubEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'githubEventRouter', register(env) { diff --git a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.test.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts similarity index 94% rename from plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.test.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts index 9e33cac6a0..b8a252aaba 100644 --- a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.test.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts @@ -23,9 +23,9 @@ import { RequestDetails, } from '@backstage/plugin-events-node'; import { sign } from '@octokit/webhooks-methods'; -import { githubWebhookEventsModule } from './GithubWebhookEventsModule'; +import { eventsModuleGithubWebhook } from './eventsModuleGithubWebhook'; -describe('githubWebhookEventsModule', () => { +describe('eventsModuleGithubWebhook', () => { const secret = 'valid-secret'; const payload = { test: 'payload' }; const payloadString = JSON.stringify(payload); @@ -60,7 +60,7 @@ describe('githubWebhookEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [[coreServices.config, config]], - features: [githubWebhookEventsModule()], + features: [eventsModuleGithubWebhook()], }); expect(addedIngress).not.toBeUndefined(); diff --git a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts similarity index 95% rename from plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts index 10cb12e431..7e89ceead7 100644 --- a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts @@ -28,7 +28,7 @@ import { createGithubSignatureValidator } from '../http/createGithubSignatureVal * * @alpha */ -export const githubWebhookEventsModule = createBackendModule({ +export const eventsModuleGithubWebhook = createBackendModule({ pluginId: 'events', moduleId: 'githubWebhook', register(env) { diff --git a/plugins/events-backend-module-gitlab/alpha-api-report.md b/plugins/events-backend-module-gitlab/alpha-api-report.md index 64727cc844..bf61f66a4b 100644 --- a/plugins/events-backend-module-gitlab/alpha-api-report.md +++ b/plugins/events-backend-module-gitlab/alpha-api-report.md @@ -6,10 +6,10 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const gitlabEventRouterEventsModule: () => BackendFeature; +export const eventsModuleGitlabEventRouter: () => BackendFeature; // @alpha -export const gitlabWebhookEventsModule: () => BackendFeature; +export const eventsModuleGitlabWebhook: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-gitlab/src/alpha.ts b/plugins/events-backend-module-gitlab/src/alpha.ts index 357c9f81ce..65610af96c 100644 --- a/plugins/events-backend-module-gitlab/src/alpha.ts +++ b/plugins/events-backend-module-gitlab/src/alpha.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { gitlabEventRouterEventsModule } from './service/GitlabEventRouterEventsModule'; -export { gitlabWebhookEventsModule } from './service/GitlabWebhookEventsModule'; +export { eventsModuleGitlabEventRouter } from './service/eventsModuleGitlabEventRouter'; +export { eventsModuleGitlabWebhook } from './service/eventsModuleGitlabWebhook'; diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.test.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.test.ts similarity index 89% rename from plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.test.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.test.ts index f8b03bc0f3..86a0df6e68 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { gitlabEventRouterEventsModule } from './GitlabEventRouterEventsModule'; +import { eventsModuleGitlabEventRouter } from './eventsModuleGitlabEventRouter'; import { GitlabEventRouter } from '../router/GitlabEventRouter'; -describe('gitlabEventRouterEventsModule', () => { +describe('eventsModuleGitlabEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: GitlabEventRouter | undefined; let addedSubscriber: GitlabEventRouter | undefined; @@ -35,7 +35,7 @@ describe('gitlabEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [gitlabEventRouterEventsModule()], + features: [eventsModuleGitlabEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.ts similarity index 95% rename from plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.ts index 39ccd5cd60..3425601529 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.ts @@ -25,7 +25,7 @@ import { GitlabEventRouter } from '../router/GitlabEventRouter'; * * @alpha */ -export const gitlabEventRouterEventsModule = createBackendModule({ +export const eventsModuleGitlabEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'gitlabEventRouter', register(env) { diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.test.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts similarity index 95% rename from plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.test.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts index b42f2c474e..c38233ecfd 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.test.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts @@ -22,7 +22,7 @@ import { HttpPostIngressOptions, RequestDetails, } from '@backstage/plugin-events-node'; -import { gitlabWebhookEventsModule } from './GitlabWebhookEventsModule'; +import { eventsModuleGitlabWebhook } from './eventsModuleGitlabWebhook'; describe('gitlabWebhookEventsModule', () => { const requestWithToken = (token?: string) => { @@ -55,7 +55,7 @@ describe('gitlabWebhookEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [[coreServices.config, config]], - features: [gitlabWebhookEventsModule()], + features: [eventsModuleGitlabWebhook()], }); expect(addedIngress).not.toBeUndefined(); diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts similarity index 95% rename from plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts index c20e55caa9..0933ef342a 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts @@ -30,7 +30,7 @@ import { createGitlabTokenValidator } from '../http/createGitlabTokenValidator'; * * @alpha */ -export const gitlabWebhookEventsModule = createBackendModule({ +export const eventsModuleGitlabWebhook = createBackendModule({ pluginId: 'events', moduleId: 'gitlabWebhook', register(env) { diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index cef8ac7330..cf89f389b2 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -186,9 +186,9 @@ import { eventsExtensionPoint } from '@backstage/plugin-events-node'; // [...] -export const yourModuleEventsModule = createBackendModule({ +export const eventsModuleYourFeature = createBackendModule({ pluginId: 'events', - moduleId: 'yourModule', + moduleId: 'yourFeature', register(env) { // [...] env.registerInit({ From 0f0e5274df8cb221b6591b5b3fece9a4637ae8d6 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 8 Mar 2023 12:02:28 +0100 Subject: [PATCH 15/43] Fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Johan Haals --- .../src/reading/AwsS3UrlReader.test.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts index dd4cd23de4..80df44f0d4 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts @@ -258,10 +258,8 @@ describe('AwsS3UrlReader', () => { reader.readUrl( 'https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml', ), - ).rejects.toThrow( - Error( - `Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml`, - ), + ).rejects.toMatchInlineSnapshot( + `[Error: Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml]`, ); }); }); @@ -316,10 +314,8 @@ describe('AwsS3UrlReader', () => { reader.readUrl!( 'https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml', ), - ).rejects.toThrow( - Error( - `Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml`, - ), + ).rejects.toMatchInlineSnapshot( + `[Error: Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml]`, ); }); }); From 172afbb4f0e83bcc149899f9c05e4f52d2b9682b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 11:30:43 +0000 Subject: [PATCH 16/43] fix(deps): update dependency @google-cloud/firestore to v6.5.0 Signed-off-by: Renovate Bot --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index 31923b65bd..a013eb5113 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10086,14 +10086,14 @@ __metadata: linkType: hard "@google-cloud/firestore@npm:^6.0.0": - version: 6.4.3 - resolution: "@google-cloud/firestore@npm:6.4.3" + version: 6.5.0 + resolution: "@google-cloud/firestore@npm:6.5.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 - google-gax: ^3.5.3 + google-gax: ^3.5.7 protobufjs: ^7.0.0 - checksum: 8bbde2c9bad94459c231d41855e65866b2383f20e2741aa93d86204370172dd62af94e1eb66d977e000e0c7292c986eb25fe967db7ee847593fd9a68c9fb91e3 + checksum: dd9cf4eee263a976239232143d5caf213c34850a352c6b6cb15b7b17cfddc2c6bee5e72eed0d188f4317eb5cb6a898372d02c54be8a30bbdc7ffbd360e138cb7 languageName: node linkType: hard @@ -24434,7 +24434,7 @@ __metadata: languageName: node linkType: hard -"google-gax@npm:^3.5.2, google-gax@npm:^3.5.3": +"google-gax@npm:^3.5.2, google-gax@npm:^3.5.7": version: 3.5.7 resolution: "google-gax@npm:3.5.7" dependencies: From 616c278b898cb0021d3c9303ba1347e11710e608 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Wed, 8 Mar 2023 08:58:49 -0300 Subject: [PATCH 17/43] Update .changeset/modern-colts-exercise.md Co-authored-by: Johan Haals Signed-off-by: Yuri Titi --- .changeset/modern-colts-exercise.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/modern-colts-exercise.md b/.changeset/modern-colts-exercise.md index d869945870..1dfe2f441a 100644 --- a/.changeset/modern-colts-exercise.md +++ b/.changeset/modern-colts-exercise.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend-module-azure': minor +'@backstage/plugin-catalog-backend-module-azure': patch --- Add branch filter support From 7de756703dbd15c0356a3f6ac1049dd2b3511092 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Wed, 8 Mar 2023 08:59:36 -0300 Subject: [PATCH 18/43] Update plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts Co-authored-by: Johan Haals Signed-off-by: Yuri Titi --- .../src/providers/AzureDevOpsEntityProvider.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index 53919b9bb4..dba29cbb88 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -107,7 +107,7 @@ describe('AzureDevOpsEntityProvider', () => { const expectedEntities = codeSearchResults.map(item => { const url = item.branch ? encodeURI( - `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}&version=GBmybranch`, + `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}&version=GB${item.branch}`, ) : encodeURI( `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}`, From 90469c02c8c3a03aef6a7bc117fd169d5e2b7a10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 8 Mar 2023 14:30:16 +0100 Subject: [PATCH 19/43] rename catalog modules to fit naming pattern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/healthy-buses-live-1.md | 5 +++++ .changeset/healthy-buses-live-2.md | 5 +++++ .changeset/healthy-buses-live-3.md | 5 +++++ .changeset/healthy-buses-live-4.md | 5 +++++ .changeset/healthy-buses-live-5.md | 5 +++++ .changeset/healthy-buses-live-6.md | 5 +++++ .changeset/healthy-buses-live-7.md | 5 +++++ .changeset/healthy-buses-live-8.md | 5 +++++ .changeset/healthy-buses-live-9.md | 5 +++++ .../alpha-api-report.md | 2 +- .../catalog-backend-module-aws/src/alpha.ts | 2 +- .../catalogModuleAwsS3EntityProvider.test.ts} | 6 +++--- .../catalogModuleAwsS3EntityProvider.ts} | 2 +- .../src/module/index.ts | 17 +++++++++++++++++ .../alpha-api-report.md | 2 +- .../catalog-backend-module-azure/src/alpha.ts | 2 +- ...logModuleAzureDevOpsEntityProvider.test.ts} | 6 +++--- .../catalogModuleAzureDevOpsEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 +++++++++++++++++ .../alpha-api-report.md | 2 +- .../src/alpha.ts | 2 +- .../src/index.ts | 2 +- ...ModuleBitbucketCloudEntityProvider.test.ts} | 8 ++++---- ...talogModuleBitbucketCloudEntityProvider.ts} | 4 ++-- .../src/module/index.ts | 17 +++++++++++++++++ .../BitbucketCloudEntityProvider.test.ts | 0 .../BitbucketCloudEntityProvider.ts | 0 .../BitbucketCloudEntityProviderConfig.test.ts | 0 .../BitbucketCloudEntityProviderConfig.ts | 0 .../alpha-api-report.md | 2 +- .../src/alpha.ts | 2 +- ...oduleBitbucketServerEntityProvider.test.ts} | 6 +++--- ...alogModuleBitbucketServerEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 +++++++++++++++++ .../alpha-api-report.md | 2 +- .../catalog-backend-module-gerrit/src/alpha.ts | 2 +- .../catalogModuleGerritEntityProvider.test.ts} | 6 +++--- .../catalogModuleGerritEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 +++++++++++++++++ .../alpha-api-report.md | 2 +- .../catalog-backend-module-github/src/alpha.ts | 2 +- .../catalogModuleGithubEntityProvider.test.ts} | 6 +++--- .../catalogModuleGithubEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 +++++++++++++++++ .../alpha-api-report.md | 2 +- .../catalog-backend-module-gitlab/src/alpha.ts | 2 +- ...oduleGitlabDiscoveryEntityProvider.test.ts} | 6 +++--- ...alogModuleGitlabDiscoveryEntityProvider.ts} | 2 +- .../alpha-api-report.md | 2 +- ...IncrementalIngestionEntityProvider.test.ts} | 6 +++--- ...oduleIncrementalIngestionEntityProvider.ts} | 2 +- .../src/module/index.ts | 2 +- .../src/run.ts | 4 ++-- .../alpha-api-report.md | 4 ++-- .../src/alpha.ts | 3 +-- ...uleMicrosoftGraphOrgEntityProvider.test.ts} | 6 +++--- ...ogModuleMicrosoftGraphOrgEntityProvider.ts} | 8 ++++---- .../src/module/index.ts | 18 ++++++++++++++++++ 58 files changed, 228 insertions(+), 64 deletions(-) create mode 100644 .changeset/healthy-buses-live-1.md create mode 100644 .changeset/healthy-buses-live-2.md create mode 100644 .changeset/healthy-buses-live-3.md create mode 100644 .changeset/healthy-buses-live-4.md create mode 100644 .changeset/healthy-buses-live-5.md create mode 100644 .changeset/healthy-buses-live-6.md create mode 100644 .changeset/healthy-buses-live-7.md create mode 100644 .changeset/healthy-buses-live-8.md create mode 100644 .changeset/healthy-buses-live-9.md rename plugins/catalog-backend-module-aws/src/{service/AwsS3EntityProviderCatalogModule.test.ts => module/catalogModuleAwsS3EntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-aws/src/{service/AwsS3EntityProviderCatalogModule.ts => module/catalogModuleAwsS3EntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-aws/src/module/index.ts rename plugins/catalog-backend-module-azure/src/{service/AzureDevOpsEntityProviderCatalogModule.test.ts => module/catalogModuleAzureDevOpsEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-azure/src/{service/AzureDevOpsEntityProviderCatalogModule.ts => module/catalogModuleAzureDevOpsEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-azure/src/module/index.ts rename plugins/catalog-backend-module-bitbucket-cloud/src/{service/BitbucketCloudEntityProviderCatalogModule.test.ts => module/catalogModuleBitbucketCloudEntityProvider.test.ts} (90%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{service/BitbucketCloudEntityProviderCatalogModule.ts => module/catalogModuleBitbucketCloudEntityProvider.ts} (93%) create mode 100644 plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProvider.test.ts (100%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProvider.ts (100%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProviderConfig.test.ts (100%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProviderConfig.ts (100%) rename plugins/catalog-backend-module-bitbucket-server/src/{service/BitbucketServerEntityProviderCatalogModule.test.ts => module/catalogModuleBitbucketServerEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-bitbucket-server/src/{service/BitbucketServerEntityProviderCatalogModule.ts => module/catalogModuleBitbucketServerEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-bitbucket-server/src/module/index.ts rename plugins/catalog-backend-module-gerrit/src/{service/GerritEntityProviderCatalogModule.test.ts => module/catalogModuleGerritEntityProvider.test.ts} (93%) rename plugins/catalog-backend-module-gerrit/src/{service/GerritEntityProviderCatalogModule.ts => module/catalogModuleGerritEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-gerrit/src/module/index.ts rename plugins/catalog-backend-module-github/src/{service/GithubEntityProviderCatalogModule.test.ts => module/catalogModuleGithubEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-github/src/{service/GithubEntityProviderCatalogModule.ts => module/catalogModuleGithubEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-github/src/module/index.ts rename plugins/catalog-backend-module-gitlab/src/{service/GitlabDiscoveryEntityProviderCatalogModule.test.ts => module/catalogModuleGitlabDiscoveryEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-gitlab/src/{service/GitlabDiscoveryEntityProviderCatalogModule.ts => module/catalogModuleGitlabDiscoveryEntityProvider.ts} (96%) rename plugins/catalog-backend-module-incremental-ingestion/src/module/{incrementalIngestionEntityProviderCatalogModule.test.ts => catalogModuleIncrementalIngestionEntityProvider.test.ts} (91%) rename plugins/catalog-backend-module-incremental-ingestion/src/module/{incrementalIngestionEntityProviderCatalogModule.ts => catalogModuleIncrementalIngestionEntityProvider.ts} (97%) rename plugins/catalog-backend-module-msgraph/src/{service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts => module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-msgraph/src/{service/MicrosoftGraphOrgEntityProviderCatalogModule.ts => module/catalogModuleMicrosoftGraphOrgEntityProvider.ts} (91%) create mode 100644 plugins/catalog-backend-module-msgraph/src/module/index.ts diff --git a/.changeset/healthy-buses-live-1.md b/.changeset/healthy-buses-live-1.md new file mode 100644 index 0000000000..7e433372df --- /dev/null +++ b/.changeset/healthy-buses-live-1.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Renamed `incrementalIngestionEntityProviderCatalogModule` to `catalogModuleIncrementalIngestionEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-2.md b/.changeset/healthy-buses-live-2.md new file mode 100644 index 0000000000..ab577276d8 --- /dev/null +++ b/.changeset/healthy-buses-live-2.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +--- + +Renamed `bitbucketServerEntityProviderCatalogModule` to `catalogModuleBitbucketServerEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-3.md b/.changeset/healthy-buses-live-3.md new file mode 100644 index 0000000000..493236ea73 --- /dev/null +++ b/.changeset/healthy-buses-live-3.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +--- + +Renamed `bitbucketCloudEntityProviderCatalogModule` to `catalogModuleBitbucketCloudEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-4.md b/.changeset/healthy-buses-live-4.md new file mode 100644 index 0000000000..fdc223a7f4 --- /dev/null +++ b/.changeset/healthy-buses-live-4.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': patch +--- + +Renamed `microsoftGraphOrgEntityProviderCatalogModule` to `catalogModuleMicrosoftGraphOrgEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-5.md b/.changeset/healthy-buses-live-5.md new file mode 100644 index 0000000000..f540751696 --- /dev/null +++ b/.changeset/healthy-buses-live-5.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gerrit': patch +--- + +Renamed `gerritEntityProviderCatalogModule` to `catalogModuleGerritEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-6.md b/.changeset/healthy-buses-live-6.md new file mode 100644 index 0000000000..f293e56eae --- /dev/null +++ b/.changeset/healthy-buses-live-6.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Renamed `githubEntityProviderCatalogModule` to `catalogModuleGithubEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-7.md b/.changeset/healthy-buses-live-7.md new file mode 100644 index 0000000000..7e7219bf01 --- /dev/null +++ b/.changeset/healthy-buses-live-7.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +Renamed `gitlabDiscoveryEntityProviderCatalogModule` to `catalogModuleGitlabDiscoveryEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-8.md b/.changeset/healthy-buses-live-8.md new file mode 100644 index 0000000000..9137a3b31a --- /dev/null +++ b/.changeset/healthy-buses-live-8.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': patch +--- + +Renamed `azureDevOpsEntityProviderCatalogModule` to `catalogModuleAzureDevOpsEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-9.md b/.changeset/healthy-buses-live-9.md new file mode 100644 index 0000000000..dbcba51470 --- /dev/null +++ b/.changeset/healthy-buses-live-9.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +Renamed `awsS3EntityProviderCatalogModule` to `catalogModuleAwsS3EntityProviders` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/plugins/catalog-backend-module-aws/alpha-api-report.md b/plugins/catalog-backend-module-aws/alpha-api-report.md index 8781975085..f78f6a802d 100644 --- a/plugins/catalog-backend-module-aws/alpha-api-report.md +++ b/plugins/catalog-backend-module-aws/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const awsS3EntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleAwsS3EntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-aws/src/alpha.ts b/plugins/catalog-backend-module-aws/src/alpha.ts index 3ae30df0cb..c277a0a680 100644 --- a/plugins/catalog-backend-module-aws/src/alpha.ts +++ b/plugins/catalog-backend-module-aws/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { awsS3EntityProviderCatalogModule } from './service/AwsS3EntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.test.ts index 868a9535b4..1475da9e79 100644 --- a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { awsS3EntityProviderCatalogModule } from './AwsS3EntityProviderCatalogModule'; +import { catalogModuleAwsS3EntityProvider } from './catalogModuleAwsS3EntityProvider'; import { AwsS3EntityProvider } from '../providers'; -describe('awsS3EntityProviderCatalogModule', () => { +describe('catalogModuleAwsS3EntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -66,7 +66,7 @@ describe('awsS3EntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [awsS3EntityProviderCatalogModule()], + features: [catalogModuleAwsS3EntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts index 5d4170ec1c..452284e526 100644 --- a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts @@ -27,7 +27,7 @@ import { AwsS3EntityProvider } from '../providers'; * * @alpha */ -export const awsS3EntityProviderCatalogModule = createBackendModule({ +export const catalogModuleAwsS3EntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'awsS3EntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-aws/src/module/index.ts b/plugins/catalog-backend-module-aws/src/module/index.ts new file mode 100644 index 0000000000..5644c034ea --- /dev/null +++ b/plugins/catalog-backend-module-aws/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleAwsS3EntityProvider } from './catalogModuleAwsS3EntityProvider'; diff --git a/plugins/catalog-backend-module-azure/alpha-api-report.md b/plugins/catalog-backend-module-azure/alpha-api-report.md index 486aac7775..66551a2856 100644 --- a/plugins/catalog-backend-module-azure/alpha-api-report.md +++ b/plugins/catalog-backend-module-azure/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const azureDevOpsEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleAzureDevOpsEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-azure/src/alpha.ts b/plugins/catalog-backend-module-azure/src/alpha.ts index cc3c4a83af..c277a0a680 100644 --- a/plugins/catalog-backend-module-azure/src/alpha.ts +++ b/plugins/catalog-backend-module-azure/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { azureDevOpsEntityProviderCatalogModule } from './service/AzureDevOpsEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.test.ts index a8e526e871..fa3b3d865e 100644 --- a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { azureDevOpsEntityProviderCatalogModule } from './AzureDevOpsEntityProviderCatalogModule'; +import { catalogModuleAzureDevOpsEntityProvider } from './catalogModuleAzureDevOpsEntityProvider'; import { AzureDevOpsEntityProvider } from '../providers'; -describe('azureDevOpsEntityProviderCatalogModule', () => { +describe('catalogModuleAzureDevOpsEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -69,7 +69,7 @@ describe('azureDevOpsEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [azureDevOpsEntityProviderCatalogModule()], + features: [catalogModuleAzureDevOpsEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts index 3fc1ddf3a4..ec8b6441ba 100644 --- a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts @@ -27,7 +27,7 @@ import { AzureDevOpsEntityProvider } from '../providers'; * * @alpha */ -export const azureDevOpsEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleAzureDevOpsEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'azureDevOpsEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-azure/src/module/index.ts b/plugins/catalog-backend-module-azure/src/module/index.ts new file mode 100644 index 0000000000..cfa8c78548 --- /dev/null +++ b/plugins/catalog-backend-module-azure/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleAzureDevOpsEntityProvider } from './catalogModuleAzureDevOpsEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md b/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md index 77b4b77410..a5d0ffc665 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha (undocumented) -export const bitbucketCloudEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleBitbucketCloudEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts index e949dcb894..c277a0a680 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { bitbucketCloudEntityProviderCatalogModule } from './service/BitbucketCloudEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts index 1c15ad4e8f..d730d8618d 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts @@ -20,4 +20,4 @@ * @packageDocumentation */ -export { BitbucketCloudEntityProvider } from './BitbucketCloudEntityProvider'; +export { BitbucketCloudEntityProvider } from './providers/BitbucketCloudEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.test.ts similarity index 90% rename from plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.test.ts index 630c18b134..a34eae3750 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.test.ts @@ -23,10 +23,10 @@ import { startTestBackend, mockServices } from '@backstage/backend-test-utils'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; import { Duration } from 'luxon'; -import { bitbucketCloudEntityProviderCatalogModule } from './BitbucketCloudEntityProviderCatalogModule'; -import { BitbucketCloudEntityProvider } from '../BitbucketCloudEntityProvider'; +import { catalogModuleBitbucketCloudEntityProvider } from './catalogModuleBitbucketCloudEntityProvider'; +import { BitbucketCloudEntityProvider } from '../providers/BitbucketCloudEntityProvider'; -describe('bitbucketCloudEntityProviderCatalogModule', () => { +describe('catalogModuleBitbucketCloudEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let addedSubscribers: Array | undefined; @@ -73,7 +73,7 @@ describe('bitbucketCloudEntityProviderCatalogModule', () => { }), [coreServices.scheduler, scheduler], ], - features: [bitbucketCloudEntityProviderCatalogModule()], + features: [catalogModuleBitbucketCloudEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.ts similarity index 93% rename from plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.ts index a95d99ceef..7c4f4a30b2 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.ts @@ -24,12 +24,12 @@ import { catalogServiceRef, } from '@backstage/plugin-catalog-node/alpha'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { BitbucketCloudEntityProvider } from '../BitbucketCloudEntityProvider'; +import { BitbucketCloudEntityProvider } from '../providers/BitbucketCloudEntityProvider'; /** * @alpha */ -export const bitbucketCloudEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleBitbucketCloudEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'bitbucketCloudEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts new file mode 100644 index 0000000000..f9654971be --- /dev/null +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleBitbucketCloudEntityProvider } from './catalogModuleBitbucketCloudEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.test.ts similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.test.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.test.ts diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.ts similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.ts diff --git a/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md b/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md index 3177828f51..2cc53a3c16 100644 --- a/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha (undocumented) -export const bitbucketServerEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleBitbucketServerEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts b/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts index d6227c29f1..c277a0a680 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { bitbucketServerEntityProviderCatalogModule } from './service/BitbucketServerEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.test.ts index bdd7209364..d17b4a4c96 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.test.ts @@ -23,11 +23,11 @@ import { } from '@backstage/backend-tasks'; import { startTestBackend } from '@backstage/backend-test-utils'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; -import { bitbucketServerEntityProviderCatalogModule } from './BitbucketServerEntityProviderCatalogModule'; +import { catalogModuleBitbucketServerEntityProvider } from './catalogModuleBitbucketServerEntityProvider'; import { Duration } from 'luxon'; import { BitbucketServerEntityProvider } from '../providers'; -describe('bitbucketServerEntityProviderCatalogModule', () => { +describe('catalogModuleBitbucketServerEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -73,7 +73,7 @@ describe('bitbucketServerEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [bitbucketServerEntityProviderCatalogModule()], + features: [catalogModuleBitbucketServerEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts index deab47c9e9..354bce7d6d 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts @@ -25,7 +25,7 @@ import { BitbucketServerEntityProvider } from '../providers'; /** * @alpha */ -export const bitbucketServerEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleBitbucketServerEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'bitbucketServerEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-bitbucket-server/src/module/index.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/index.ts new file mode 100644 index 0000000000..160f099ae0 --- /dev/null +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleBitbucketServerEntityProvider } from './catalogModuleBitbucketServerEntityProvider'; diff --git a/plugins/catalog-backend-module-gerrit/alpha-api-report.md b/plugins/catalog-backend-module-gerrit/alpha-api-report.md index 03f5d099b9..5aee61f28a 100644 --- a/plugins/catalog-backend-module-gerrit/alpha-api-report.md +++ b/plugins/catalog-backend-module-gerrit/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha (undocumented) -export const gerritEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleGerritEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-gerrit/src/alpha.ts b/plugins/catalog-backend-module-gerrit/src/alpha.ts index 8b03d9312a..c277a0a680 100644 --- a/plugins/catalog-backend-module-gerrit/src/alpha.ts +++ b/plugins/catalog-backend-module-gerrit/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { gerritEntityProviderCatalogModule } from './service/GerritEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.test.ts similarity index 93% rename from plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.test.ts index 51c1749c66..0511aa7b4c 100644 --- a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { gerritEntityProviderCatalogModule } from './GerritEntityProviderCatalogModule'; +import { catalogModuleGerritEntityProvider } from './catalogModuleGerritEntityProvider'; import { GerritEntityProvider } from '../providers/GerritEntityProvider'; -describe('gerritEntityProviderCatalogModule', () => { +describe('catalogModuleGerritEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -79,7 +79,7 @@ describe('gerritEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [gerritEntityProviderCatalogModule()], + features: [catalogModuleGerritEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts index 782c724094..814259fb40 100644 --- a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts @@ -25,7 +25,7 @@ import { GerritEntityProvider } from '../providers/GerritEntityProvider'; /** * @alpha */ -export const gerritEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleGerritEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'gerritEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-gerrit/src/module/index.ts b/plugins/catalog-backend-module-gerrit/src/module/index.ts new file mode 100644 index 0000000000..95760538e7 --- /dev/null +++ b/plugins/catalog-backend-module-gerrit/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleGerritEntityProvider } from './catalogModuleGerritEntityProvider'; diff --git a/plugins/catalog-backend-module-github/alpha-api-report.md b/plugins/catalog-backend-module-github/alpha-api-report.md index eb13ec4558..0d4e16b4ea 100644 --- a/plugins/catalog-backend-module-github/alpha-api-report.md +++ b/plugins/catalog-backend-module-github/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const githubEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleGithubEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-github/src/alpha.ts b/plugins/catalog-backend-module-github/src/alpha.ts index 1b83eead82..c277a0a680 100644 --- a/plugins/catalog-backend-module-github/src/alpha.ts +++ b/plugins/catalog-backend-module-github/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { githubEntityProviderCatalogModule } from './service/GithubEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts index 7c08e8947d..82a5552dba 100644 --- a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { githubEntityProviderCatalogModule } from './GithubEntityProviderCatalogModule'; +import { catalogModuleGithubEntityProvider } from './catalogModuleGithubEntityProvider'; import { GithubEntityProvider } from '../providers/GithubEntityProvider'; -describe('githubEntityProviderCatalogModule', () => { +describe('catalogModuleGithubEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -66,7 +66,7 @@ describe('githubEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [githubEntityProviderCatalogModule()], + features: [catalogModuleGithubEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts index 246f700248..997da3023b 100644 --- a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts @@ -27,7 +27,7 @@ import { GithubEntityProvider } from '../providers/GithubEntityProvider'; * * @alpha */ -export const githubEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleGithubEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'githubEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-github/src/module/index.ts b/plugins/catalog-backend-module-github/src/module/index.ts new file mode 100644 index 0000000000..640a633093 --- /dev/null +++ b/plugins/catalog-backend-module-github/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleGithubEntityProvider } from './catalogModuleGithubEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/alpha-api-report.md b/plugins/catalog-backend-module-gitlab/alpha-api-report.md index 8912b4a7b2..f14b41d6c5 100644 --- a/plugins/catalog-backend-module-gitlab/alpha-api-report.md +++ b/plugins/catalog-backend-module-gitlab/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const gitlabDiscoveryEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleGitlabDiscoveryEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-gitlab/src/alpha.ts b/plugins/catalog-backend-module-gitlab/src/alpha.ts index 883ffc13c4..ace970e3aa 100644 --- a/plugins/catalog-backend-module-gitlab/src/alpha.ts +++ b/plugins/catalog-backend-module-gitlab/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { gitlabDiscoveryEntityProviderCatalogModule } from './service/GitlabDiscoveryEntityProviderCatalogModule'; +export { catalogModuleGitlabDiscoveryEntityProvider } from './module/catalogModuleGitlabDiscoveryEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.test.ts index efb86e4223..7a3d0a0e0d 100644 --- a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { gitlabDiscoveryEntityProviderCatalogModule } from './GitlabDiscoveryEntityProviderCatalogModule'; +import { catalogModuleGitlabDiscoveryEntityProvider } from './catalogModuleGitlabDiscoveryEntityProvider'; import { GitlabDiscoveryEntityProvider } from '../providers'; -describe('gitlabDiscoveryEntityProviderCatalogModule', () => { +describe('catalogModuleGitlabDiscoveryEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -78,7 +78,7 @@ describe('gitlabDiscoveryEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [gitlabDiscoveryEntityProviderCatalogModule()], + features: [catalogModuleGitlabDiscoveryEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts index 0adf5b18f2..ffae233319 100644 --- a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts @@ -27,7 +27,7 @@ import { GitlabDiscoveryEntityProvider } from '../providers'; * * @alpha */ -export const gitlabDiscoveryEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleGitlabDiscoveryEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'gitlabDiscoveryEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md b/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md index ec9c59a4c4..b11ec43cf5 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md +++ b/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md @@ -8,7 +8,7 @@ import { IncrementalEntityProvider } from '@backstage/plugin-catalog-backend-mod import { IncrementalEntityProviderOptions } from '@backstage/plugin-catalog-backend-module-incremental-ingestion'; // @alpha -export const incrementalIngestionEntityProviderCatalogModule: (options: { +export const catalogModuleIncrementalIngestionEntityProvider: (options: { providers: { provider: IncrementalEntityProvider; options: IncrementalEntityProviderOptions; diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.test.ts similarity index 91% rename from plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.test.ts index dbadf573a4..ef07b4cb10 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.test.ts @@ -20,9 +20,9 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { IncrementalEntityProvider } from '../types'; -import { incrementalIngestionEntityProviderCatalogModule } from './incrementalIngestionEntityProviderCatalogModule'; +import { catalogModuleIncrementalIngestionEntityProvider } from './catalogModuleIncrementalIngestionEntityProvider'; -describe('bitbucketServerEntityProviderCatalogModule', () => { +describe('catalogModuleIncrementalIngestionEntityProvider', () => { it('should register provider at the catalog extension point', async () => { const provider1: IncrementalEntityProvider = { getProviderName: () => 'provider1', @@ -57,7 +57,7 @@ describe('bitbucketServerEntityProviderCatalogModule', () => { [coreServices.scheduler, scheduler], ], features: [ - incrementalIngestionEntityProviderCatalogModule({ + catalogModuleIncrementalIngestionEntityProvider({ providers: [ { provider: provider1, diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.ts similarity index 97% rename from plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.ts index 261768c142..19d5742b46 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.ts @@ -30,7 +30,7 @@ import { WrapperProviders } from './WrapperProviders'; * * @alpha */ -export const incrementalIngestionEntityProviderCatalogModule = +export const catalogModuleIncrementalIngestionEntityProvider = createBackendModule( (options: { providers: Array<{ diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts b/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts index 577cf193e2..9fcee99e01 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { incrementalIngestionEntityProviderCatalogModule } from './incrementalIngestionEntityProviderCatalogModule'; +export { catalogModuleIncrementalIngestionEntityProvider } from './catalogModuleIncrementalIngestionEntityProvider'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/run.ts b/plugins/catalog-backend-module-incremental-ingestion/src/run.ts index f1b6bd1529..f94c988237 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/run.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/run.ts @@ -25,7 +25,7 @@ import { import { ConfigReader } from '@backstage/config'; import { catalogPlugin } from '@backstage/plugin-catalog-backend/alpha'; import { IncrementalEntityProvider } from '.'; -import { incrementalIngestionEntityProviderCatalogModule } from './alpha'; +import { catalogModuleIncrementalIngestionEntityProvider } from './alpha'; const provider: IncrementalEntityProvider = { getProviderName: () => 'test-provider', @@ -63,7 +63,7 @@ async function main() { backend.add(catalogPlugin()); backend.add( - incrementalIngestionEntityProviderCatalogModule({ + catalogModuleIncrementalIngestionEntityProvider({ providers: [ { provider: provider, diff --git a/plugins/catalog-backend-module-msgraph/alpha-api-report.md b/plugins/catalog-backend-module-msgraph/alpha-api-report.md index ed30b83bc8..0fa093a1bc 100644 --- a/plugins/catalog-backend-module-msgraph/alpha-api-report.md +++ b/plugins/catalog-backend-module-msgraph/alpha-api-report.md @@ -9,10 +9,10 @@ import { OrganizationTransformer } from '@backstage/plugin-catalog-backend-modul import { UserTransformer } from '@backstage/plugin-catalog-backend-module-msgraph'; // @alpha -export const microsoftGraphOrgEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleMicrosoftGraphOrgEntityProvider: () => BackendFeature; // @alpha -export interface MicrosoftGraphOrgEntityProviderCatalogModuleOptions { +export interface CatalogModuleMicrosoftGraphOrgEntityProviderOptions { groupTransformer?: GroupTransformer | Record; organizationTransformer?: | OrganizationTransformer diff --git a/plugins/catalog-backend-module-msgraph/src/alpha.ts b/plugins/catalog-backend-module-msgraph/src/alpha.ts index 137808d881..c277a0a680 100644 --- a/plugins/catalog-backend-module-msgraph/src/alpha.ts +++ b/plugins/catalog-backend-module-msgraph/src/alpha.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { microsoftGraphOrgEntityProviderCatalogModule } from './service/MicrosoftGraphOrgEntityProviderCatalogModule'; -export type { MicrosoftGraphOrgEntityProviderCatalogModuleOptions } from './service/MicrosoftGraphOrgEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts index 3763553162..3362c75c95 100644 --- a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { microsoftGraphOrgEntityProviderCatalogModule } from './MicrosoftGraphOrgEntityProviderCatalogModule'; +import { catalogModuleMicrosoftGraphOrgEntityProvider } from './catalogModuleMicrosoftGraphOrgEntityProvider'; import { MicrosoftGraphOrgEntityProvider } from '../processors'; -describe('awsS3EntityProviderCatalogModule', () => { +describe('catalogModuleMicrosoftGraphOrgEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -71,7 +71,7 @@ describe('awsS3EntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [microsoftGraphOrgEntityProviderCatalogModule()], + features: [catalogModuleMicrosoftGraphOrgEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('PT30M')); diff --git a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts similarity index 91% rename from plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts index 11be567045..7cd8b65f0b 100644 --- a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts @@ -28,11 +28,11 @@ import { import { MicrosoftGraphOrgEntityProvider } from '../processors'; /** - * Options for {@link microsoftGraphOrgEntityProviderCatalogModule}. + * Options for {@link catalogModuleMicrosoftGraphOrgEntityProvider}. * * @alpha */ -export interface MicrosoftGraphOrgEntityProviderCatalogModuleOptions { +export interface CatalogModuleMicrosoftGraphOrgEntityProviderOptions { /** * The function that transforms a user entry in msgraph to an entity. * Optionally, you can pass separate transformers per provider ID. @@ -59,13 +59,13 @@ export interface MicrosoftGraphOrgEntityProviderCatalogModuleOptions { * * @alpha */ -export const microsoftGraphOrgEntityProviderCatalogModule = createBackendModule( +export const catalogModuleMicrosoftGraphOrgEntityProvider = createBackendModule( { pluginId: 'catalog', moduleId: 'microsoftGraphOrgEntityProvider', register( env, - options?: MicrosoftGraphOrgEntityProviderCatalogModuleOptions, + options?: CatalogModuleMicrosoftGraphOrgEntityProviderOptions, ) { env.registerInit({ deps: { diff --git a/plugins/catalog-backend-module-msgraph/src/module/index.ts b/plugins/catalog-backend-module-msgraph/src/module/index.ts new file mode 100644 index 0000000000..f53f41141c --- /dev/null +++ b/plugins/catalog-backend-module-msgraph/src/module/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleMicrosoftGraphOrgEntityProvider } from './catalogModuleMicrosoftGraphOrgEntityProvider'; +export type { CatalogModuleMicrosoftGraphOrgEntityProviderOptions } from './catalogModuleMicrosoftGraphOrgEntityProvider'; From 6bfbab4f74843ae1fcf082fa3829bd43fd294436 Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 8 Mar 2023 09:09:00 -0500 Subject: [PATCH 20/43] Updated changelog Signed-off-by: Taras --- .changeset/witty-squids-fetch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/witty-squids-fetch.md b/.changeset/witty-squids-fetch.md index d48944f336..3e13421038 100644 --- a/.changeset/witty-squids-fetch.md +++ b/.changeset/witty-squids-fetch.md @@ -2,4 +2,4 @@ '@backstage/create-app': patch --- -Add .eslintignore with **/public/** to prevent checking JS files +Added to the template `packages/app/.eslintignore` file to packages to ignore the contents of `packages/app/public`. From 561ce41191db8a9f5e87e8546af27efdd10fe1c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 8 Mar 2023 15:20:46 +0100 Subject: [PATCH 21/43] Added a catalogModulePuppetDbEntityProvider alpha export for the new backend system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/cold-dogs-watch.md | 5 ++ .../alpha-api-report.md | 12 +++ .../api-report.md | 4 +- .../package.json | 22 +++++- .../src/alpha.ts | 17 ++++ ...atalogModulePuppetDbEntityProvider.test.ts | 79 +++++++++++++++++++ .../catalogModulePuppetDbEntityProvider.ts | 51 ++++++++++++ .../src/module/index.ts | 17 ++++ .../providers/PuppetDbEntityProvider.test.ts | 2 +- .../src/providers/PuppetDbEntityProvider.ts | 6 +- yarn.lock | 3 +- 11 files changed, 207 insertions(+), 11 deletions(-) create mode 100644 .changeset/cold-dogs-watch.md create mode 100644 plugins/catalog-backend-module-puppetdb/alpha-api-report.md create mode 100644 plugins/catalog-backend-module-puppetdb/src/alpha.ts create mode 100644 plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts create mode 100644 plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts create mode 100644 plugins/catalog-backend-module-puppetdb/src/module/index.ts diff --git a/.changeset/cold-dogs-watch.md b/.changeset/cold-dogs-watch.md new file mode 100644 index 0000000000..99b25a833e --- /dev/null +++ b/.changeset/cold-dogs-watch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-puppetdb': patch +--- + +Added a `catalogModulePuppetDbEntityProvider` alpha export for the new backend system diff --git a/plugins/catalog-backend-module-puppetdb/alpha-api-report.md b/plugins/catalog-backend-module-puppetdb/alpha-api-report.md new file mode 100644 index 0000000000..0856fdb836 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/alpha-api-report.md @@ -0,0 +1,12 @@ +## API Report File for "@backstage/plugin-catalog-backend-module-puppetdb" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; + +// @alpha +export const catalogModulePuppetDbEntityProvider: () => BackendFeature; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/catalog-backend-module-puppetdb/api-report.md b/plugins/catalog-backend-module-puppetdb/api-report.md index 8764ac1e7c..a4954ce6bd 100644 --- a/plugins/catalog-backend-module-puppetdb/api-report.md +++ b/plugins/catalog-backend-module-puppetdb/api-report.md @@ -4,8 +4,8 @@ ```ts import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { JsonValue } from '@backstage/types'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 861b535f4d..252fe21969 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -6,9 +6,22 @@ "types": "src/index.ts", "license": "Apache-2.0", "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } }, "backstage": { "role": "backend-plugin-module" @@ -35,11 +48,12 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", "luxon": "^3.0.0", diff --git a/plugins/catalog-backend-module-puppetdb/src/alpha.ts b/plugins/catalog-backend-module-puppetdb/src/alpha.ts new file mode 100644 index 0000000000..c277a0a680 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/src/alpha.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export * from './module'; diff --git a/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts new file mode 100644 index 0000000000..e2745e9268 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts @@ -0,0 +1,79 @@ +/* + * 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. + */ + +import { getVoidLogger } from '@backstage/backend-common'; +import { coreServices } from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; +import { catalogModulePuppetDbEntityProvider } from './catalogModulePuppetDbEntityProvider'; +import { PuppetDbEntityProvider } from '../providers/PuppetDbEntityProvider'; + +describe('catalogModulePuppetDbEntityProvider', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + catalog: { + providers: { + puppetdb: { + baseUrl: 'http://puppetdb:8080', + schedule: { + frequency: { minutes: 10 }, + timeout: { minutes: 10 }, + }, + }, + }, + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [coreServices.config, config], + [coreServices.logger, getVoidLogger()], + [coreServices.scheduler, scheduler], + ], + features: [catalogModulePuppetDbEntityProvider()], + }); + + expect(usedSchedule?.frequency).toEqual({ minutes: 10 }); + expect(usedSchedule?.timeout).toEqual({ minutes: 10 }); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'puppetdb-provider:default', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts new file mode 100644 index 0000000000..9a7d279cd3 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts @@ -0,0 +1,51 @@ +/* + * 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. + */ + +import { + createBackendModule, + coreServices, +} from '@backstage/backend-plugin-api'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; +import { PuppetDbEntityProvider } from '../providers/PuppetDbEntityProvider'; + +/** + * Registers the `PuppetDbEntityProvider` with the catalog processing extension point. + * + * @alpha + */ +export const catalogModulePuppetDbEntityProvider = createBackendModule({ + pluginId: 'catalog', + moduleId: 'puppetDbEntityProvider', + register(env) { + env.registerInit({ + deps: { + catalog: catalogProcessingExtensionPoint, + config: coreServices.config, + logger: coreServices.logger, + scheduler: coreServices.scheduler, + }, + async init({ catalog, config, logger, scheduler }) { + catalog.addEntityProvider( + PuppetDbEntityProvider.fromConfig(config, { + logger: loggerToWinstonLogger(logger), + scheduler, + }), + ); + }, + }); + }, +}); diff --git a/plugins/catalog-backend-module-puppetdb/src/module/index.ts b/plugins/catalog-backend-module-puppetdb/src/module/index.ts new file mode 100644 index 0000000000..f30f236df4 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModulePuppetDbEntityProvider } from './catalogModulePuppetDbEntityProvider'; diff --git a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts index 0ab6fb35b7..ad89e1fd9a 100644 --- a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts +++ b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts @@ -21,7 +21,7 @@ import { PuppetDbEntityProvider } from './PuppetDbEntityProvider'; import { DeferredEntity, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import * as puppetFunctions from '../puppet/read'; import { ANNOTATION_PUPPET_CERTNAME } from '../puppet'; import { diff --git a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts index b2d2738fd3..8c63baf467 100644 --- a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts +++ b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts @@ -17,7 +17,7 @@ import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PuppetDbEntityProviderConfig, @@ -116,13 +116,13 @@ export class PuppetDbEntityProvider implements EntityProvider { this.transformer = transformer; } - /** {@inheritdoc @backstage/plugin-catalog-backend#EntityProvider.connect} */ + /** {@inheritdoc @backstage/plugin-catalog-node#EntityProvider.connect} */ async connect(connection: EntityProviderConnection): Promise { this.connection = connection; await this.scheduleFn(); } - /** {@inheritdoc @backstage/plugin-catalog-backend#EntityProvider.getProviderName} */ + /** {@inheritdoc @backstage/plugin-catalog-node#EntityProvider.getProviderName} */ getProviderName(): string { return `puppetdb-provider:${this.config.id}`; } diff --git a/yarn.lock b/yarn.lock index f0c5235907..ebfbdf2b5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5252,13 +5252,14 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-puppetdb@workspace:plugins/catalog-backend-module-puppetdb" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 lodash: ^4.17.21 From dbbde6ed353d0ade4bf08ed8687296b00ff11830 Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Wed, 8 Mar 2023 16:32:43 +0200 Subject: [PATCH 22/43] fix: entity switch result when there is no default case this happens when there is only cases with `if` defined but no default case Signed-off-by: Heikki Hellgren --- .changeset/gorgeous-pumas-speak.md | 5 +++ .changeset/silver-bikes-breathe.md | 21 ++++++++++- .../EntitySwitch/EntitySwitch.test.tsx | 36 +++++++++++++++++++ .../components/EntitySwitch/EntitySwitch.tsx | 2 +- 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 .changeset/gorgeous-pumas-speak.md diff --git a/.changeset/gorgeous-pumas-speak.md b/.changeset/gorgeous-pumas-speak.md new file mode 100644 index 0000000000..60f40c6748 --- /dev/null +++ b/.changeset/gorgeous-pumas-speak.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +fix entity switch rendering when there is no default case diff --git a/.changeset/silver-bikes-breathe.md b/.changeset/silver-bikes-breathe.md index 63dabf7b2e..0288580bba 100644 --- a/.changeset/silver-bikes-breathe.md +++ b/.changeset/silver-bikes-breathe.md @@ -2,4 +2,23 @@ '@backstage/plugin-catalog': minor --- -allow entity switch to render all cases that match the condition +Allow `EntitySwitch` to render all cases that match the condition. + +This change introduces a new parameter for the `EntitySwitch` component +`renderMultipleMatches`. In case the parameter value is `all`, the `EntitySwitch` +will render all `EntitySwitch.Case` that contain `if` parameter, and it +evaluates to true. In case none of the cases match, the default case will be +rendered, if any. + +This means for example in the CI/CD page you can now do the following: + +```tsx + + Jenkins + CodeBuild + No CI/CD + +``` + +This allows the component to have multiple CI/CD systems and all of those are +rendered on the same page. diff --git a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx index 8ee44041c8..13e214d823 100644 --- a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx +++ b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx @@ -173,6 +173,42 @@ describe('EntitySwitch', () => { expect(screen.getByText('C')).toBeInTheDocument(); }); + it('should render nothing if no default case is set for multiple matches', () => { + const entity = { metadata: { name: 'mock' }, kind: 'component' } as Entity; + + render( + + + + A

} /> + B

} /> +
+
+
, + ); + + expect(screen.queryByText('A')).not.toBeInTheDocument(); + expect(screen.queryByText('B')).not.toBeInTheDocument(); + }); + + it('should render nothing if no default case is set for default', () => { + const entity = { metadata: { name: 'mock' }, kind: 'component' } as Entity; + + render( + + + + A

} /> + B

} /> +
+
+
, + ); + + expect(screen.queryByText('A')).not.toBeInTheDocument(); + expect(screen.queryByText('B')).not.toBeInTheDocument(); + }); + it('should switch with async condition that is true', async () => { const entity = { metadata: { name: 'mock' }, kind: 'component' } as Entity; diff --git a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx index 6ad3c66ab3..3cd806faa5 100644 --- a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx +++ b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx @@ -169,7 +169,7 @@ function AsyncEntitySwitch({ } function getDefaultChildren(results: SwitchCaseResult[]) { - return results.filter(r => r.if === undefined)[0].children ?? null; + return results.filter(r => r.if === undefined)[0]?.children ?? null; } EntitySwitch.Case = EntitySwitchCaseComponent; From 0095c7326b3be56f672e633ae75785c39fda989a Mon Sep 17 00:00:00 2001 From: Dominik Date: Wed, 8 Mar 2023 16:34:55 +0100 Subject: [PATCH 23/43] Add CORS.gmbh to Adopters Signed-off-by: Dominik --- ADOPTERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 70b2992cf9..26f4331b70 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -233,4 +233,5 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Gumtree](https://www.gumtree.com.au) | [Kumar Gaurav](https://www.linkedin.com/in/kumargaurav517) | We are starting to use it as a single place to find all component information in a distributed architecture. | | [N26](https://n26.com) | [Alexei Timofti](https://www.linkedin.com/in/alexeitimofti) | We use Backstage for our service catalog and are actively looking into adopting other plugins like TechDocs, TechInsights and Software Templates. | | [The LEGO Group](https://www.lego.com) | [Waqas Ali](https://www.linkedin.com/in/waqasali47) | We are building our internal develper portal on top of Backstage. | +| [CORS.gmbh](https://www.cors.gmbh) | [@dpfaffenbauer](https://github.com/dpfaffenbauer) | Developer Portal for our Projects we develop for our Customers and Hosting them On Kubernetes. | From 040b54f7e58f4d9dce4ea55fce461c7ff5b6c7d5 Mon Sep 17 00:00:00 2001 From: Paul Schultz Date: Wed, 8 Mar 2023 10:13:38 -0600 Subject: [PATCH 24/43] clean up formatting Signed-off-by: Paul Schultz --- docs/auth/cloudflare/access.md | 2 +- docs/auth/google/gcp-iap-auth.md | 4 +- docs/auth/index.md | 17 +- docs/auth/microsoft/azure-easyauth.md | 6 +- docs/auth/oauth2-proxy/provider.md | 6 +- docs/auth/oidc.md | 33 ++-- .../building-backends/08-migrating.md | 33 ++-- docs/features/kubernetes/installation.md | 2 +- docs/features/search/how-to-guides.md | 86 ++++----- .../software-catalog/external-integrations.md | 4 +- .../testing-scaffolder-alpha.md | 61 +++---- docs/getting-started/app-custom-theme.md | 150 +++++++-------- .../configure-app-with-plugins.md | 36 ++-- docs/getting-started/homepage.md | 6 +- docs/integrations/azure/discovery.md | 6 +- docs/integrations/azure/org.md | 4 +- docs/integrations/bitbucketCloud/discovery.md | 4 +- docs/integrations/github/discovery.md | 20 +- docs/integrations/github/org.md | 2 +- docs/integrations/gitlab/discovery.md | 2 +- docs/permissions/getting-started.md | 172 +++++++++--------- docs/permissions/plugin-authors/01-setup.md | 152 ++++++++-------- .../03-adding-a-resource-permission-check.md | 10 +- ...04-authorizing-access-to-paginated-data.md | 18 +- .../05-frontend-authorization.md | 18 +- .../react-router-stable-migration.md | 12 +- 26 files changed, 449 insertions(+), 417 deletions(-) diff --git a/docs/auth/cloudflare/access.md b/docs/auth/cloudflare/access.md index 05663aca30..51567e9a0f 100644 --- a/docs/auth/cloudflare/access.md +++ b/docs/auth/cloudflare/access.md @@ -100,7 +100,7 @@ const app = createApp({ }, /* highlight-add-end */ // .. -}) +}); ``` See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page to also work smoothly for local development. diff --git a/docs/auth/google/gcp-iap-auth.md b/docs/auth/google/gcp-iap-auth.md index 138d795f0f..410008b22e 100644 --- a/docs/auth/google/gcp-iap-auth.md +++ b/docs/auth/google/gcp-iap-auth.md @@ -104,13 +104,13 @@ installed in `packages/app/src/App.tsx` like this: import { ProxiedSignInPage } from '@backstage/core-components'; const app = createApp({ - /* highlight-add-start */ + /* highlight-add-start */ components: { SignInPage: props => , }, /* highlight-add-end */ // .. -}) +}); ``` See the [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) section for more information. diff --git a/docs/auth/index.md b/docs/auth/index.md index 7f4511af24..abe7fb8db6 100644 --- a/docs/auth/index.md +++ b/docs/auth/index.md @@ -121,12 +121,15 @@ const app = createApp({ SignInPage: props => ( ), }, @@ -314,7 +317,7 @@ import { export const apis: AnyApiFactory[] = [ /* highlight-add-next-line */ ScmAuth.createDefaultApiFactory(), - // ... + // ... ]; ``` diff --git a/docs/auth/microsoft/azure-easyauth.md b/docs/auth/microsoft/azure-easyauth.md index fb0b897760..4daf0851f0 100644 --- a/docs/auth/microsoft/azure-easyauth.md +++ b/docs/auth/microsoft/azure-easyauth.md @@ -67,11 +67,13 @@ import { ProxiedSignInPage } from '@backstage/core-components'; const app = createApp({ /* highlight-add-start */ components: { - SignInPage: props => , + SignInPage: props => ( + + ), }, /* highlight-add-end */ // .. -}) +}); ``` See the [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) section for more information. diff --git a/docs/auth/oauth2-proxy/provider.md b/docs/auth/oauth2-proxy/provider.md index e3b5e89633..9c8f681138 100644 --- a/docs/auth/oauth2-proxy/provider.md +++ b/docs/auth/oauth2-proxy/provider.md @@ -70,11 +70,13 @@ import { ProxiedSignInPage } from '@backstage/core-components'; const app = createApp({ /* highlight-add-start */ components: { - SignInPage: props => , + SignInPage: props => ( + + ), }, /* highlight-add-end */ // .. -}) +}); ``` See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page to also work smoothly for local development. diff --git a/docs/auth/oidc.md b/docs/auth/oidc.md index 0a9e4417ed..9c681b7360 100644 --- a/docs/auth/oidc.md +++ b/docs/auth/oidc.md @@ -89,28 +89,23 @@ export const apis: AnyApiFactory[] = [ discoveryApi: discoveryApiRef, oauthRequestApi: oauthRequestApiRef, configApi: configApiRef, - }, - factory: ({ discoveryApi, oauthRequestApi, configApi }) => - OAuth2.create({ - discoveryApi, - oauthRequestApi, - provider: { - id: 'my-auth-provider', - title: 'My custom auth provider', - icon: () => null, - }, - environment: configApi.getOptionalString('auth.environment'), - defaultScopes: [ - 'openid', - 'profile', - 'email', - ], - }), + }, + factory: ({ discoveryApi, oauthRequestApi, configApi }) => + OAuth2.create({ + discoveryApi, + oauthRequestApi, + provider: { + id: 'my-auth-provider', + title: 'My custom auth provider', + icon: () => null, + }, + environment: configApi.getOptionalString('auth.environment'), + defaultScopes: ['openid', 'profile', 'email'], + }), }), /* highlight-add-end */ // .. -] - +]; ``` Please note we're importing the `OAuth2` class from `@backstage/core-app-api` effectively diff --git a/docs/backend-system/building-backends/08-migrating.md b/docs/backend-system/building-backends/08-migrating.md index 358b6ae764..b4005b41b4 100644 --- a/docs/backend-system/building-backends/08-migrating.md +++ b/docs/backend-system/building-backends/08-migrating.md @@ -134,7 +134,10 @@ import { createBackend } from '@backstage/backend-defaults'; /* highlight-remove-next-line */ import { legacyPlugin } from '@backstage/backend-common'; /* highlight-add-start */ -import { makeLegacyPlugin, loggerToWinstonLogger } from '@backstage/backend-common'; +import { + makeLegacyPlugin, + loggerToWinstonLogger, +} from '@backstage/backend-common'; import { coreServices } from '@backstage/backend-plugin-api'; /* highlight-add-end */ @@ -187,16 +190,16 @@ In this example, we'll assume that your added environment field is named /* highlight-add-next-line */ import { exampleServiceRef } from ''; // if the definition is elsewhere - const legacyPlugin = makeLegacyPlugin( - { - // ... the above core services still go here - /* highlight-add-next-line */ - example: exampleServiceRef - }, - { - logger: log => loggerToWinstonLogger(log), - }, - ); +const legacyPlugin = makeLegacyPlugin( + { + // ... the above core services still go here + /* highlight-add-next-line */ + example: exampleServiceRef, + }, + { + logger: log => loggerToWinstonLogger(log), + }, +); ``` After this, your backend will know how to instantiate your thing on demand and @@ -282,7 +285,7 @@ import { createBackendModule } from '@backstage/backend-plugin-api'; /* highlight-add-start */ const catalogModuleCustomExtensions = createBackendModule({ - pluginId: 'catalog', // name of the plugin that the module is targeting + pluginId: 'catalog', // name of the plugin that the module is targeting moduleId: 'customExtensions', register(env) { env.registerInit({ @@ -294,7 +297,7 @@ const catalogModuleCustomExtensions = createBackendModule({ // Here you have the opportunity to interact with the extension // point before the plugin itself gets instantiated catalog.addEntityProvider(new MyEntityProvider()); // just an example - catalog.addProcessor(new MyProcessor()); // just an example + catalog.addProcessor(new MyProcessor()); // just an example }, }); }, @@ -352,7 +355,7 @@ import { createBackendModule } from '@backstage/backend-plugin-api'; /* highlight-add-start */ const eventsModuleCustomExtensions = createBackendModule({ - pluginId: 'events', // name of the plugin that the module is targeting + pluginId: 'events', // name of the plugin that the module is targeting moduleId: 'customExtensions', register(env) { env.registerInit({ @@ -420,7 +423,7 @@ import { createBackendModule } from '@backstage/backend-plugin-api'; /* highlight-add-start */ const scaffolderModuleCustomExtensions = createBackendModule({ - pluginId: 'scaffolder', // name of the plugin that the module is targeting + pluginId: 'scaffolder', // name of the plugin that the module is targeting moduleId: 'customExtensions', register(env) { env.registerInit({ diff --git a/docs/features/kubernetes/installation.md b/docs/features/kubernetes/installation.md index abc42ddbe0..ae7826a804 100644 --- a/docs/features/kubernetes/installation.md +++ b/docs/features/kubernetes/installation.md @@ -38,7 +38,7 @@ const serviceEntityPage = ( {/* highlight-add-end */} -) +); ``` **Notes:** diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index 7a00d10ede..5b28e259b5 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -20,30 +20,30 @@ to do that in two steps. [interface](https://github.com/backstage/backstage/blob/db2666b980853c281b8fe77905d7639c5d255f13/plugins/search/src/apis.ts#L31) according to your needs. - ```typescript - export class SearchClient implements SearchApi { - // your implementation - } - ``` + ```typescript + export class SearchClient implements SearchApi { + // your implementation + } + ``` 2. Override the API ref `searchApiRef` with your new implemented API in the `App.tsx` using `ApiFactories`. [Read more about App APIs](https://backstage.io/docs/api/utility-apis#app-apis). - ```typescript - const app = createApp({ - apis: [ - // SearchApi - createApiFactory({ - api: searchApiRef, - deps: { discovery: discoveryApiRef }, - factory({ discovery }) { - return new SearchClient({ discoveryApi: discovery }); - }, - }), - ], - }); - ``` + ```typescript + const app = createApp({ + apis: [ + // SearchApi + createApiFactory({ + api: searchApiRef, + deps: { discovery: discoveryApiRef }, + factory({ discovery }) { + return new SearchClient({ discoveryApi: discovery }); + }, + }), + ], + }); + ``` ## How to index TechDocs documents @@ -63,35 +63,35 @@ getting started guide. 1. Import the `DefaultTechDocsCollatorFactory` from `@backstage/plugin-techdocs-backend`. - ```typescript - import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; - ``` + ```typescript + import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; + ``` 2. If there isn't an existing schedule you'd like to run the collator on, be sure to create it first. Something like... - ```typescript - import { Duration } from 'luxon'; + ```typescript + import { Duration } from 'luxon'; - const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({ - frequency: Duration.fromObject({ seconds: 600 }), - timeout: Duration.fromObject({ seconds: 900 }), - initialDelay: Duration.fromObject({ seconds: 3 }), - }); - ``` + const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({ + frequency: Duration.fromObject({ seconds: 600 }), + timeout: Duration.fromObject({ seconds: 900 }), + initialDelay: Duration.fromObject({ seconds: 3 }), + }); + ``` 3. Register the `DefaultTechDocsCollatorFactory` with the IndexBuilder. - ```typescript - indexBuilder.addCollator({ - schedule: every10MinutesSchedule, - factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { - discovery: env.discovery, - logger: env.logger, - tokenManager: env.tokenManager, - }), - }); - ``` + ```typescript + indexBuilder.addCollator({ + schedule: every10MinutesSchedule, + factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + tokenManager: env.tokenManager, + }), + }); + ``` You should now have your TechDocs documents indexed to your search engine of choice! @@ -125,7 +125,9 @@ You can either just simply amend default behaviour, or even to write completely > `authorization` and `location` cannot be modified via a `entityTransformer`, `location` can be modified only through `locationTemplate`. ```ts title="packages/backend/src/plugins/search.ts" -const entityTransformer: CatalogCollatorEntityTransformer = (entity: Entity) => { +const entityTransformer: CatalogCollatorEntityTransformer = ( + entity: Entity, +) => { if (entity.kind === 'SomeKind') { return { // customize here output for 'SomeKind' kind @@ -173,7 +175,7 @@ indexBuilder.addCollator({ tokenManager: env.tokenManager, /* highlight-add-start */ filter: { - kind: ['API', 'Component', 'Domain', 'Group', 'System', 'User'], + kind: ['API', 'Component', 'Domain', 'Group', 'System', 'User'], }, /* highlight-add-end */ }), diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md index d8e4c2099a..6f957625bd 100644 --- a/docs/features/software-catalog/external-integrations.md +++ b/docs/features/software-catalog/external-integrations.md @@ -254,7 +254,9 @@ export default async function createPlugin( /* highlight-add-start */ await env.scheduler.scheduleTask({ id: 'run_frobs_refresh', - fn: async () => { await frobs.run(); }, + fn: async () => { + await frobs.run(); + }, frequency: { minutes: 30 }, timeout: { minutes: 10 }, }); diff --git a/docs/features/software-templates/testing-scaffolder-alpha.md b/docs/features/software-templates/testing-scaffolder-alpha.md index 1791ab0822..c0b97e897c 100644 --- a/docs/features/software-templates/testing-scaffolder-alpha.md +++ b/docs/features/software-templates/testing-scaffolder-alpha.md @@ -46,7 +46,6 @@ The `ScaffolderPage` router has a completely different export for the `scaffolde import { ScaffolderPage } from '@backstage/plugin-scaffolder'; /* highlight-add-next-line */ import { NextScaffolderPage } from '@backstage/plugin-scaffolder/alpha'; - ``` And this API should be the exact same as the previous Router, so you should be able to make a change like the following further down in this file: @@ -136,7 +135,7 @@ export const EntityNamePicker = ( placeholder, } = props; // .. -} +}; ``` There's another `/alpha` export that you need to replace `FieldExtensionComponentProps` with which is the `NextFieldExtensionComponentProps`. @@ -167,7 +166,7 @@ export const EntityNamePicker = ( placeholder, } = props; // .. -} +}; ``` You'll notice that there's an additional change here, which is that we're now defaulting the `uiSchema` to an empty object. This is because the `uiSchema` is now optional, and if you don't provide it, it will be `undefined` instead of an empty object. There's more around this in the [breaking changes](#breaking-changes) section. @@ -218,20 +217,20 @@ Once we fully release the code that is in the `/alpha` exports right now onto th Later releases of `react-jsonschema-form` have made the `uiSchema` optional, and if you don't provide it, it will be `undefined` instead of an empty object. This means that you will need to make sure that you're defaulting the `uiSchema` to an empty object if you're using it in your code. ```tsx - const { - onChange, - required, - schema: { title = 'Name', description = 'Unique name of the component' }, - rawErrors, - formData, - /* highlight-remove-next-line */ - uiSchema: { 'ui:autofocus': autoFocus }, - /* highlight-add-next-line */ - uiSchema: { 'ui:autofocus': autoFocus } = {}, - idSchema, - placeholder, - } = props; - // .. +const { + onChange, + required, + schema: { title = 'Name', description = 'Unique name of the component' }, + rawErrors, + formData, + /* highlight-remove-next-line */ + uiSchema: { 'ui:autofocus': autoFocus }, + /* highlight-add-next-line */ + uiSchema: { 'ui:autofocus': autoFocus } = {}, + idSchema, + placeholder, +} = props; +// .. ``` ### `formData` can also be `undefined` @@ -239,18 +238,18 @@ Later releases of `react-jsonschema-form` have made the `uiSchema` optional, and If you were using the `formData` and assuming that it was set to an empty object when building `Field Extensions` that return objects, then this will be `undefined` now due to a change in the `react-jsonschema-form` library. ```tsx - const { - onChange, - required, - schema: { title = 'Name', description = 'Unique name of the component' }, - rawErrors, - /* highlight-remove-next-line */ - formData, - /* highlight-add-next-line */ - formData = {}, // or maybe some other default value that you would prefer - uiSchema: { 'ui:autofocus': autoFocus } = {}, - idSchema, - placeholder, - } = props; - // .. +const { + onChange, + required, + schema: { title = 'Name', description = 'Unique name of the component' }, + rawErrors, + /* highlight-remove-next-line */ + formData, + /* highlight-add-next-line */ + formData = {}, // or maybe some other default value that you would prefer + uiSchema: { 'ui:autofocus': autoFocus } = {}, + idSchema, + placeholder, +} = props; +// .. ``` diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index fcb27c220d..697c58ac8f 100644 --- a/docs/getting-started/app-custom-theme.md +++ b/docs/getting-started/app-custom-theme.md @@ -346,19 +346,19 @@ You can add more icons, if the [default icons](https://github.com/backstage/back 2. Then you want to import your icon, add this to the rest of your imports: `import AlarmIcon from '@material-ui/icons/Alarm';` 3. Next you want to add the icon like this to your `createApp`: - ```tsx title="packages/app/src/App.tsx" - const app = createApp({ - apis: ..., - plugins: ..., - /* highlight-add-start */ - icons: { - alert: AlarmIcon, - }, - /* highlight-add-end */ - themes: ..., - components: ..., - }); - ``` + ```tsx title="packages/app/src/App.tsx" + const app = createApp({ + apis: ..., + plugins: ..., + /* highlight-add-start */ + icons: { + alert: AlarmIcon, + }, + /* highlight-add-end */ + themes: ..., + components: ..., + }); + ``` 4. Now we can reference `alert` for our icon in our entity links like this: @@ -413,71 +413,71 @@ For this example we'll show you how you can expand the sidebar with a sub-menu: 3. Then update the `@backstage/core-components` import like this: - ```tsx - import { - Sidebar, - sidebarConfig, - SidebarDivider, - SidebarGroup, - SidebarItem, - SidebarPage, - SidebarScrollWrapper, - SidebarSpace, - useSidebarOpenState, - Link, - /* highlight-add-start */ - GroupIcon, - SidebarSubmenu, - SidebarSubmenuItem, - /* highlight-add-end */ - } from '@backstage/core-components'; - ``` + ```tsx + import { + Sidebar, + sidebarConfig, + SidebarDivider, + SidebarGroup, + SidebarItem, + SidebarPage, + SidebarScrollWrapper, + SidebarSpace, + useSidebarOpenState, + Link, + /* highlight-add-start */ + GroupIcon, + SidebarSubmenu, + SidebarSubmenuItem, + /* highlight-add-end */ + } from '@backstage/core-components'; + ``` 4. Finally replace `` with this: - ```tsx - - - - - - - - - - - - - - ``` + ```tsx + + + + + + + + + + + + + + ``` When you startup your Backstage app and hover over the Home option on the sidebar you'll now see a nice sub-menu appear with links to the various Kinds in your Catalog. It would look like this: diff --git a/docs/getting-started/configure-app-with-plugins.md b/docs/getting-started/configure-app-with-plugins.md index 54654366d8..e0c698d3a1 100644 --- a/docs/getting-started/configure-app-with-plugins.md +++ b/docs/getting-started/configure-app-with-plugins.md @@ -33,25 +33,25 @@ to an entity in the software catalog. 2. Add the `EntityCircleCIContent` extension to the entity pages in the app: - ```tsx title="packages/app/src/components/catalog/EntityPage.tsx" - /* highlight-add-start */ - import { - EntityCircleCIContent, - isCircleCIAvailable, - } from '@backstage/plugin-circleci'; - /* highlight-add-end */ + ```tsx title="packages/app/src/components/catalog/EntityPage.tsx" + /* highlight-add-start */ + import { + EntityCircleCIContent, + isCircleCIAvailable, + } from '@backstage/plugin-circleci'; + /* highlight-add-end */ - const cicdContent = ( - - {/* ... */} - {/* highlight-add-next-line */} - - - ; - {/* highlight-add-end */} - - ); - ``` + const cicdContent = ( + + {/* ... */} + {/* highlight-add-next-line */} + + + + ;{/* highlight-add-end */} + + ); + ``` This is just one example, but each Backstage instance may integrate content or cards to suit their needs on different pages, tabs, etc. In addition, while some diff --git a/docs/getting-started/homepage.md b/docs/getting-started/homepage.md index 29b427bad8..63a97ec54f 100644 --- a/docs/getting-started/homepage.md +++ b/docs/getting-started/homepage.md @@ -58,7 +58,7 @@ const routes = ( {/* ... */}
-) +); ``` Let's replace the `` line and use the new component we created in the previous step as the new homepage. @@ -80,7 +80,7 @@ const routes = ( {/* highlight-add-end */} {/* ... */} -) +); ``` #### 4. Update sidebar items @@ -122,7 +122,7 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( -) +); ``` That's it! You should now have _(although slightly boring)_ a homepage! diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index d4ded290c3..d1309a80eb 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -128,7 +128,11 @@ export default async function createPlugin( ): Promise { const builder = await CatalogBuilder.create(env); /* highlight-add-next-line */ - builder.addProcessor(AzureDevOpsDiscoveryProcessor.fromConfig(env.config, { logger: env.logger })); + builder.addProcessor( + AzureDevOpsDiscoveryProcessor.fromConfig(env.config, { + logger: env.logger, + }), + ); // .. } diff --git a/docs/integrations/azure/org.md b/docs/integrations/azure/org.md index 403f0042a9..f855b29bb9 100644 --- a/docs/integrations/azure/org.md +++ b/docs/integrations/azure/org.md @@ -44,7 +44,7 @@ For large organizations, this plugin can take a long time, so be careful setting import { MicrosoftGraphOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-msgraph'; export default async function createPlugin( - env: PluginEnvironment, + env: PluginEnvironment, ): Promise { const builder = await CatalogBuilder.create(env); @@ -55,7 +55,7 @@ export default async function createPlugin( schedule: env.scheduler.createScheduledTaskRunner({ frequency: { hours: 1 }, timeout: { minutes: 50 }, - initialDelay: { seconds: 15} + initialDelay: { seconds: 15 }, }), }), ); diff --git a/docs/integrations/bitbucketCloud/discovery.md b/docs/integrations/bitbucketCloud/discovery.md index 7074fcac1b..c5a7eee4a0 100644 --- a/docs/integrations/bitbucketCloud/discovery.md +++ b/docs/integrations/bitbucketCloud/discovery.md @@ -105,8 +105,8 @@ export default async function createCatalogEventBasedProviders( }), ); /* highlight-add-end */ - return providers.flat(); - } + return providers.flat(); +} ``` **Attention:** diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index 499cb32812..fb65173b28 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -44,7 +44,7 @@ export default async function createPlugin( schedule: env.scheduler.createScheduledTaskRunner({ frequency: { minutes: 30 }, timeout: { minutes: 3 }, - }), + }), // optional: alternatively, use schedule scheduler: env.scheduler, }), @@ -88,14 +88,14 @@ export default async function createCatalogEventBasedProviders( /* highlight-add-start */ providers.push( 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, + 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, }), ); /* highlight-add-end */ @@ -269,7 +269,7 @@ import { } from '@backstage/plugin-catalog-backend-module-github'; import { ScmIntegrations, - DefaultGithubCredentialsProvider + DefaultGithubCredentialsProvider, } from '@backstage/integration'; /* highlight-add-end */ diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md index 4600d65466..8f67e2a43f 100644 --- a/docs/integrations/github/org.md +++ b/docs/integrations/github/org.md @@ -88,7 +88,7 @@ import { PluginEnvironment } from '../types'; export default async function createCatalogEventBasedProviders( /* highlight-remove-next-line */ _: PluginEnvironment, - /* highlight-add-next-line */ + /* highlight-add-next-line */ env: PluginEnvironment, ): Promise> { const providers: Array< diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index 8c95243b04..6d0bb7e2e2 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -99,7 +99,7 @@ export default async function createPlugin( const builder = await CatalogBuilder.create(env); /* highlight-add-start */ builder.addProcessor( - GitLabDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }) + GitLabDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }), ); /* highlight-add-end */ diff --git a/docs/permissions/getting-started.md b/docs/permissions/getting-started.md index bb6c9a558e..8cb6dd953e 100644 --- a/docs/permissions/getting-started.md +++ b/docs/permissions/getting-started.md @@ -46,67 +46,67 @@ The permissions framework uses a new `permission-backend` plugin to accept autho 1. Add `@backstage/plugin-permission-backend` as a dependency of your Backstage backend: - ```bash - # From your Backstage root directory - $ yarn add --cwd packages/backend @backstage/plugin-permission-backend - ``` + ```bash + # From your Backstage root directory + $ yarn add --cwd packages/backend @backstage/plugin-permission-backend + ``` 2. Add the following to a new file, `packages/backend/src/plugins/permission.ts`. This adds the permission-backend router, and configures it with a policy which allows everything. - ```typescript title="packages/backend/src/plugins/permission.ts" - import { createRouter } from '@backstage/plugin-permission-backend'; - import { - AuthorizeResult, - PolicyDecision, - } from '@backstage/plugin-permission-common'; - import { PermissionPolicy } from '@backstage/plugin-permission-node'; - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; + ```typescript title="packages/backend/src/plugins/permission.ts" + import { createRouter } from '@backstage/plugin-permission-backend'; + import { + AuthorizeResult, + PolicyDecision, + } from '@backstage/plugin-permission-common'; + import { PermissionPolicy } from '@backstage/plugin-permission-node'; + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; - class TestPermissionPolicy implements PermissionPolicy { - async handle(): Promise { - return { result: AuthorizeResult.ALLOW }; - } - } + class TestPermissionPolicy implements PermissionPolicy { + async handle(): Promise { + return { result: AuthorizeResult.ALLOW }; + } + } - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - return await createRouter({ - config: env.config, - logger: env.logger, - discovery: env.discovery, - policy: new TestPermissionPolicy(), - identity: env.identity, - }); - } - ``` + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + config: env.config, + logger: env.logger, + discovery: env.discovery, + policy: new TestPermissionPolicy(), + identity: env.identity, + }); + } + ``` 3. Wire up the permission policy in `packages/backend/src/index.ts`. [The index in the example backend](https://github.com/backstage/backstage/blob/master/packages/backend/src/index.ts) shows how to do this. You’ll need to import the module from the previous step, create a plugin environment, and add the router to the express app: - ```ts title="packages/backend/src/index.ts" - import proxy from './plugins/proxy'; - import techdocs from './plugins/techdocs'; - import search from './plugins/search'; - /* highlight-add-next-line */ - import permission from './plugins/permission'; + ```ts title="packages/backend/src/index.ts" + import proxy from './plugins/proxy'; + import techdocs from './plugins/techdocs'; + import search from './plugins/search'; + /* highlight-add-next-line */ + import permission from './plugins/permission'; - async function main() { - const techdocsEnv = useHotMemoize(module, () => createEnv('techdocs')); - const searchEnv = useHotMemoize(module, () => createEnv('search')); - const appEnv = useHotMemoize(module, () => createEnv('app')); - /* highlight-add-next-line */ - const permissionEnv = useHotMemoize(module, () => createEnv('permission')); - // .. + async function main() { + const techdocsEnv = useHotMemoize(module, () => createEnv('techdocs')); + const searchEnv = useHotMemoize(module, () => createEnv('search')); + const appEnv = useHotMemoize(module, () => createEnv('app')); + /* highlight-add-next-line */ + const permissionEnv = useHotMemoize(module, () => createEnv('permission')); + // .. - apiRouter.use('/techdocs', await techdocs(techdocsEnv)); - apiRouter.use('/proxy', await proxy(proxyEnv)); - apiRouter.use('/search', await search(searchEnv)); - /* highlight-add-next-line */ - apiRouter.use('/permission', await permission(permissionEnv)); - // .. - } - ``` + apiRouter.use('/techdocs', await techdocs(techdocsEnv)); + apiRouter.use('/proxy', await proxy(proxyEnv)); + apiRouter.use('/search', await search(searchEnv)); + /* highlight-add-next-line */ + apiRouter.use('/permission', await permission(permissionEnv)); + // .. + } + ``` ### 2. Enable and test the permissions system @@ -114,46 +114,46 @@ Now that the permission backend is running, it’s time to enable the permission 1. Set the property `permission.enabled` to `true` in `app-config.yaml`. - ```yaml title="app-config.yaml" - permission: - enabled: true - ``` + ```yaml title="app-config.yaml" + permission: + enabled: true + ``` 2. Update the PermissionPolicy in `packages/backend/src/plugins/permission.ts` to disable a permission that’s easy for us to test. This policy rejects any attempt to delete a catalog entity: - ```ts title="packages/backend/src/plugins/permission.ts" - import { createRouter } from '@backstage/plugin-permission-backend'; - import { - AuthorizeResult, - PolicyDecision, - } from '@backstage/plugin-permission-common'; - /* highlight-remove-next-line */ - import { PermissionPolicy } from '@backstage/plugin-permission-node'; - /* highlight-add-start */ - import { - PermissionPolicy, - PolicyQuery, - } from '@backstage/plugin-permission-node'; - /* highlight-add-end */ - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; + ```ts title="packages/backend/src/plugins/permission.ts" + import { createRouter } from '@backstage/plugin-permission-backend'; + import { + AuthorizeResult, + PolicyDecision, + } from '@backstage/plugin-permission-common'; + /* highlight-remove-next-line */ + import { PermissionPolicy } from '@backstage/plugin-permission-node'; + /* highlight-add-start */ + import { + PermissionPolicy, + PolicyQuery, + } from '@backstage/plugin-permission-node'; + /* highlight-add-end */ + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; - class TestPermissionPolicy implements PermissionPolicy { - /* highlight-remove-next-line */ - async handle(): Promise { - /* highlight-add-start */ - async handle(request: PolicyQuery): Promise { - if (request.permission.name === 'catalog.entity.delete') { - return { - result: AuthorizeResult.DENY, - }; - } - /* highlight-add-end */ + class TestPermissionPolicy implements PermissionPolicy { + /* highlight-remove-next-line */ + async handle(): Promise { + /* highlight-add-start */ + async handle(request: PolicyQuery): Promise { + if (request.permission.name === 'catalog.entity.delete') { + return { + result: AuthorizeResult.DENY, + }; + } + /* highlight-add-end */ - return { result: AuthorizeResult.ALLOW }; - } - } - ``` + return { result: AuthorizeResult.ALLOW }; + } + } + ``` 3. Now that you’ve made this change, you should find that the unregister entity menu option on the catalog entity page is disabled. diff --git a/docs/permissions/plugin-authors/01-setup.md b/docs/permissions/plugin-authors/01-setup.md index 46673ed307..6827096900 100644 --- a/docs/permissions/plugin-authors/01-setup.md +++ b/docs/permissions/plugin-authors/01-setup.md @@ -20,99 +20,99 @@ The source code is available here: 1. Copy-paste the three folders into the plugins folder of your backstage application repository (removing the `example-` prefix from each folder) or run the following script from the root of your backstage application: - ```bash - $ cd $(mktemp -d) - git clone --depth 1 --quiet --no-checkout --filter=blob:none https://github.com/backstage/backstage.git . - git checkout master -- plugins/example-todo-list/ - git checkout master -- plugins/example-todo-list-backend/ - git checkout master -- plugins/example-todo-list-common/ - sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list/package.json - sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list-backend/package.json - sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list-common/package.json - for file in plugins/*; do mv "$file" "$OLDPWD/${file/example-todo/todo}"; done - cd - - ``` + ```bash + $ cd $(mktemp -d) + git clone --depth 1 --quiet --no-checkout --filter=blob:none https://github.com/backstage/backstage.git . + git checkout master -- plugins/example-todo-list/ + git checkout master -- plugins/example-todo-list-backend/ + git checkout master -- plugins/example-todo-list-common/ + sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list/package.json + sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list-backend/package.json + sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list-common/package.json + for file in plugins/*; do mv "$file" "$OLDPWD/${file/example-todo/todo}"; done + cd - + ``` - The `plugins` directory of your project should now include `todo-list`, `todo-list-backend`, and `todo-list-common`. + The `plugins` directory of your project should now include `todo-list`, `todo-list-backend`, and `todo-list-common`. - **Important**: if you are on **Windows**, make sure you have WSL and git installed on your machine before executing the script above. + **Important**: if you are on **Windows**, make sure you have WSL and git installed on your machine before executing the script above. 2. Add these packages as dependencies for your Backstage app: - ```sh - # From your Backstage root directory - $ yarn add --cwd packages/backend @internal/plugin-todo-list-backend @internal/plugin-todo-list-common - $ yarn add --cwd packages/app @internal/plugin-todo-list - ``` + ```sh + # From your Backstage root directory + $ yarn add --cwd packages/backend @internal/plugin-todo-list-backend @internal/plugin-todo-list-common + $ yarn add --cwd packages/app @internal/plugin-todo-list + ``` 3. Include the backend and frontend plugin in your application: - Create a new `packages/backend/src/plugins/todolist.ts` with the following content: + Create a new `packages/backend/src/plugins/todolist.ts` with the following content: - ```typescript title="packages/backend/src/plugins/todolist.ts" - import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; - import { createRouter } from '@internal/plugin-todo-list-backend'; - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; + ```typescript title="packages/backend/src/plugins/todolist.ts" + import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; + import { createRouter } from '@internal/plugin-todo-list-backend'; + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; - export default async function createPlugin({ - logger, - discovery, - }: PluginEnvironment): Promise { - return await createRouter({ - logger, - identity: DefaultIdentityClient.create({ - discovery, - issuer: await discovery.getExternalBaseUrl('auth'), - }), - }); - } - ``` + export default async function createPlugin({ + logger, + discovery, + }: PluginEnvironment): Promise { + return await createRouter({ + logger, + identity: DefaultIdentityClient.create({ + discovery, + issuer: await discovery.getExternalBaseUrl('auth'), + }), + }); + } + ``` - Apply the following changes to `packages/backend/src/index.ts`: + Apply the following changes to `packages/backend/src/index.ts`: - ```ts title="packages/backend/src/index.ts" - import techdocs from './plugins/techdocs'; - /* highlight-add-next-line */ - import todoList from './plugins/todolist'; - import search from './plugins/search'; + ```ts title="packages/backend/src/index.ts" + import techdocs from './plugins/techdocs'; + /* highlight-add-next-line */ + import todoList from './plugins/todolist'; + import search from './plugins/search'; - async function main() { - const searchEnv = useHotMemoize(module, () => createEnv('search')); - const appEnv = useHotMemoize(module, () => createEnv('app')); - /* highlight-add-next-line */ - const todoListEnv = useHotMemoize(module, () => createEnv('todolist')); - // .. + async function main() { + const searchEnv = useHotMemoize(module, () => createEnv('search')); + const appEnv = useHotMemoize(module, () => createEnv('app')); + /* highlight-add-next-line */ + const todoListEnv = useHotMemoize(module, () => createEnv('todolist')); + // .. - apiRouter.use('/proxy', await proxy(proxyEnv)); - apiRouter.use('/search', await search(searchEnv)); - apiRouter.use('/permission', await permission(permissionEnv)); - /* highlight-add-next-line */ - apiRouter.use('/todolist', await todoList(todoListEnv)); - // Add backends ABOVE this line; this 404 handler is the catch-all fallback - apiRouter.use(notFoundHandler()); - // .. - } - ``` + apiRouter.use('/proxy', await proxy(proxyEnv)); + apiRouter.use('/search', await search(searchEnv)); + apiRouter.use('/permission', await permission(permissionEnv)); + /* highlight-add-next-line */ + apiRouter.use('/todolist', await todoList(todoListEnv)); + // Add backends ABOVE this line; this 404 handler is the catch-all fallback + apiRouter.use(notFoundHandler()); + // .. + } + ``` - Apply the following changes to `packages/app/src/App.tsx`: + Apply the following changes to `packages/app/src/App.tsx`: - ```tsx title="packages/app/src/App.tsx" - /* highlight-add-next-line */ - import { TodoListPage } from '@internal/plugin-todo-list'; + ```tsx title="packages/app/src/App.tsx" + /* highlight-add-next-line */ + import { TodoListPage } from '@internal/plugin-todo-list'; - const routes = ( - - }> - {searchPage} - - } /> - {/* highlight-add-next-line */} - } /> - {/* ... */} - - ); - ``` + const routes = ( + + }> + {searchPage} + + } /> + {/* highlight-add-next-line */} + } /> + {/* ... */} + + ); + ``` Now if you start your application you should be able to reach the `/todo-list` page: diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index ed4fb74573..e714301ded 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -32,7 +32,10 @@ export const todoListUpdatePermission = createPermission({ /* highlight-remove-next-line */ export const todoListPermissions = [todoListCreatePermission]; /* highlight-add-next-line */ -export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission]; +export const todoListPermissions = [ + todoListCreatePermission, + todoListUpdatePermission, +]; ``` Notice that unlike `todoListCreatePermission`, the `todoListUpdatePermission` permission contains a `resourceType` field. This field indicates to the permission framework that this permission is intended to be authorized in the context of a resource with type `'todo-item'`. You can use whatever string you like as the resource type, as long as you use the same value consistently for each type of resource. @@ -45,7 +48,10 @@ To start, let's edit `plugins/todo-list-backend/src/service/router.ts` in the sa /* highlight-remove-next-line */ import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; /* highlight-add-next-line */ -import { todoListCreatePermission, todoListUpdatePermission } from '@internal/plugin-todo-list-common'; +import { + todoListCreatePermission, + todoListUpdatePermission, +} from '@internal/plugin-todo-list-common'; router.put('/todos', async (req, res) => { /* highlight-add-start */ diff --git a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md index 4b12e9e407..bd56afc971 100644 --- a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md +++ b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md @@ -14,11 +14,14 @@ router.get('/todos', async (req, res) => { const token = IdentityClient.getBearerToken(req.header('authorization')); /* highlight-remove-next-line */ - res.json(getAll()) + res.json(getAll()); /* highlight-add-start */ const items = getAll(); const decisions = await permissions.authorize( - items.map(({ id }) => ({ permission: todoListReadPermission, resourceRef: id })), + items.map(({ id }) => ({ + permission: todoListReadPermission, + resourceRef: id, + })), ); const filteredItems = decisions.filter( @@ -64,9 +67,16 @@ export const todoListReadPermission = createPermission({ /* highlight-add-end */ /* highlight-add-next-line */ -export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission]; +export const todoListPermissions = [ + todoListCreatePermission, + todoListUpdatePermission, +]; /* highlight-add-next-line */ -export const todoListPermissions = [todoListCreatePermission, todoListUpdatePermission, todoListReadPermission]; +export const todoListPermissions = [ + todoListCreatePermission, + todoListUpdatePermission, + todoListReadPermission, +]; ``` ## Using conditional policy decisions diff --git a/docs/permissions/plugin-authors/05-frontend-authorization.md b/docs/permissions/plugin-authors/05-frontend-authorization.md index 235495e13f..92d855698f 100644 --- a/docs/permissions/plugin-authors/05-frontend-authorization.md +++ b/docs/permissions/plugin-authors/05-frontend-authorization.md @@ -36,7 +36,9 @@ import { todoListCreatePermission } from '@internal/plugin-todo-list-common'; function AddTodo({ onAdd }: { onAdd: (title: string) => any }) { const title = useRef(''); /* highlight-add-next-line */ - const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ permission: todoListCreatePermission }); + const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ + permission: todoListCreatePermission, + }); return ( <> @@ -78,7 +80,6 @@ Here we are using the [`usePermission` hook](https://backstage.io/docs/reference It's really that simple! Let's change our policy to test the disabled button: ```ts title="packages/backend/src/plugins/permission.ts" - if (isPermission(request.permission, todoListCreatePermission)) { return { /* highlight-remove-next-line */ @@ -117,10 +118,7 @@ export const TodoListPage = () => { {/* highlight-remove-end */} {/* highlight-add-start */} - } - > + }> @@ -129,13 +127,15 @@ export const TodoListPage = () => { - -} + ; +}; function AddTodo({ onAdd }: { onAdd: (title: string) => any }) { const title = useRef(''); /* highlight-remove-next-line */ - const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ permission: todoListCreatePermission }); + const { loading: loadingPermission, allowed: canAddTodo } = usePermission({ + permission: todoListCreatePermission, + }); return ( <> diff --git a/docs/tutorials/react-router-stable-migration.md b/docs/tutorials/react-router-stable-migration.md index 24dba3c244..017f69ba4f 100644 --- a/docs/tutorials/react-router-stable-migration.md +++ b/docs/tutorials/react-router-stable-migration.md @@ -181,10 +181,14 @@ It's crucial that you update to `RequirePermission` at the same time as you upda When migrating over to React Router v6 stable, you might also see browser console warnings for the `Navigate` component. This will need to be wrapped up in a `Route` component with the `Navigate` component in the `element` prop. ```tsx -{/* highlight-remove-next-line */} - -{/* highlight-add-next-line */} -} /> +{ + /* highlight-remove-next-line */ +} +; +{ + /* highlight-add-next-line */ +} +} />; ``` ### `NavLink` From 075761de52824a061987bb039c23ba5ee2fbd162 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Wed, 8 Mar 2023 14:47:29 -0300 Subject: [PATCH 25/43] Update discovery.md Signed-off-by: Yuri Titi --- docs/integrations/azure/discovery.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index d96b7d84ab..2308b8634b 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -85,7 +85,13 @@ The parameters available are: _Note:_ - The path parameter follows the same rules as the search on Azure DevOps web interface. For more details visit the [official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). -- The branch parameters need that the branch desired it`s added on 'Searchable branches' on Azure DevOps Repositories +- To use branch parameters, it is necessary that the desired branch be added to the "Searchable branches" list within Azure DevOps Repositories. To do this, follow the instructions below: +1. Access your Azure DevOps and open the repository in which you want to add the branch. +2. Click on "Settings" in the lower-left corner of the screen. +3. Select the "Options" option in the left navigation bar. +4. In the "Searchable branches" section, click on the "Add" button to add a new branch. +5. In the window that appears, enter the name of the branch you want to add and click "Add". +6. The added branch will now appear in the "Searchable branches" list. As this provider is not one of the default providers, you will first need to install the Azure catalog plugin: From 709479ac6ac6b61cfa82448e4f3e38b222816e76 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 8 Mar 2023 22:18:44 +0100 Subject: [PATCH 26/43] chore: exit pre-release Signed-off-by: blam --- .changeset/pre.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 8514b7fa26..fc7fbffc9a 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -1,5 +1,5 @@ { - "mode": "pre", + "mode": "exit", "tag": "next", "initialVersions": { "example-app": "0.2.80", From e91cf3796967814baa9c0ed8d986e090abb0f158 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Wed, 8 Mar 2023 21:55:09 -0300 Subject: [PATCH 27/43] docs(azure-discovery): fix prettier Signed-off-by: Yuri Titi --- docs/integrations/azure/discovery.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index 2308b8634b..bcbb00a49d 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -86,6 +86,7 @@ _Note:_ - The path parameter follows the same rules as the search on Azure DevOps web interface. For more details visit the [official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). - To use branch parameters, it is necessary that the desired branch be added to the "Searchable branches" list within Azure DevOps Repositories. To do this, follow the instructions below: + 1. Access your Azure DevOps and open the repository in which you want to add the branch. 2. Click on "Settings" in the lower-left corner of the screen. 3. Select the "Options" option in the left navigation bar. From 907eabb6ae0eb0ce4195a6fd25f076800f8695ff Mon Sep 17 00:00:00 2001 From: Carlos Esteban Lopez Date: Wed, 8 Mar 2023 21:34:30 -0500 Subject: [PATCH 28/43] feat(microsite-next): Add on demand page with basic styles Signed-off-by: Carlos Esteban Lopez --- .../src/components/simpleCard/simpleCard.tsx | 17 ++++ .../src/pages/on-demand/_onDemandCard.tsx | 66 ++++++++++++++++ microsite-next/src/pages/on-demand/index.tsx | 78 +++++++++++++++++++ .../src/pages/on-demand/onDemand.module.scss | 44 +++++++++++ .../src/pages/plugins/_pluginCard.tsx | 37 +++++---- microsite-next/src/pages/plugins/index.tsx | 13 +--- .../src/util/truncateDescription.tsx | 11 +++ 7 files changed, 236 insertions(+), 30 deletions(-) create mode 100644 microsite-next/src/components/simpleCard/simpleCard.tsx create mode 100644 microsite-next/src/pages/on-demand/_onDemandCard.tsx create mode 100644 microsite-next/src/pages/on-demand/index.tsx create mode 100644 microsite-next/src/pages/on-demand/onDemand.module.scss create mode 100644 microsite-next/src/util/truncateDescription.tsx diff --git a/microsite-next/src/components/simpleCard/simpleCard.tsx b/microsite-next/src/components/simpleCard/simpleCard.tsx new file mode 100644 index 0000000000..77be566f18 --- /dev/null +++ b/microsite-next/src/components/simpleCard/simpleCard.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +export interface ICardData { + header: React.ReactNode; + body: React.ReactNode; + footer: React.ReactNode; +} + +export const SimpleCard = ({ header, body, footer }: ICardData) => ( +
+
{header}
+ +
{body}
+ +
{footer}
+
+); diff --git a/microsite-next/src/pages/on-demand/_onDemandCard.tsx b/microsite-next/src/pages/on-demand/_onDemandCard.tsx new file mode 100644 index 0000000000..e203c80f9a --- /dev/null +++ b/microsite-next/src/pages/on-demand/_onDemandCard.tsx @@ -0,0 +1,66 @@ +import Link from '@docusaurus/Link'; +import { SimpleCard } from '@site/src/components/simpleCard/simpleCard'; +import React from 'react'; + +export interface IOnDemandData { + title: string; + category: string; + description: string; + date: string; + youtubeUrl: string; + youtubeImgUrl: string; + rsvpUrl: string; + eventUrl: string; +} + +export const OnDemandCard = ({ + title, + category, + description, + date, + youtubeUrl, + youtubeImgUrl, + rsvpUrl, + eventUrl, +}: IOnDemandData) => ( + +

{title}

+ +

on {date}

+ + {category} + + {title} + + } + body={

{description}

} + footer={ + category.toLowerCase() === 'upcoming' ? ( + <> + + Event page + + + + Remind me + + + ) : ( + + Watch on YouTube + + ) + } + /> +); diff --git a/microsite-next/src/pages/on-demand/index.tsx b/microsite-next/src/pages/on-demand/index.tsx new file mode 100644 index 0000000000..7262005f70 --- /dev/null +++ b/microsite-next/src/pages/on-demand/index.tsx @@ -0,0 +1,78 @@ +import Layout from '@theme/Layout'; +import clsx from 'clsx'; +import React from 'react'; + +import { IOnDemandData, OnDemandCard } from './_onDemandCard'; +import pluginsStyles from './onDemand.module.scss'; +import { truncateDescription } from '@site/src/util/truncateDescription'; +import Link from '@docusaurus/Link'; + +//#region Plugin data import +const onDemandContext = require.context( + '../../../../microsite/data/on-demand', + false, + /\.ya?ml/, +); + +const onDemandData = onDemandContext.keys().reduce( + (acum, id) => { + const pluginData: IOnDemandData = onDemandContext(id).default; + + acum[ + pluginData.category === 'Upcoming' ? 'upcomingEvents' : 'onDemandEvents' + ].push(truncateDescription(pluginData)); + + return acum; + }, + { + upcomingEvents: [] as IOnDemandData[], + onDemandEvents: [] as IOnDemandData[], + }, +); +//#endregion + +const Plugins = () => ( + +
+
+
+

Community sessions

+ +

+ Upcoming events and recorded sessions about updates, demos and + discussions. +

+
+ + + Add an event or recording + +
+ +
+ +

Upcoming live events

+ +
+ {onDemandData.upcomingEvents.map(eventData => ( + + ))} +
+ +

Community on demand

+ +
+ {onDemandData.onDemandEvents.map(eventData => ( + + ))} +
+
+
+); + +export default Plugins; diff --git a/microsite-next/src/pages/on-demand/onDemand.module.scss b/microsite-next/src/pages/on-demand/onDemand.module.scss new file mode 100644 index 0000000000..fba051ec97 --- /dev/null +++ b/microsite-next/src/pages/on-demand/onDemand.module.scss @@ -0,0 +1,44 @@ +.onDemandPage { + :global(.marketplaceBanner) { + display: flex; + align-items: center; + } + + :global(.marketplaceContent) { + flex: 1; + } + + :global(.card) { + max-width: 100%; + } + + :global(.card .card__header) { + display: grid; + row-gap: 0.25rem; + column-gap: 1rem; + justify-items: start; + + > * { + margin: 0; + } + + :global(img) { + width: 250px; + max-width: 100%; + justify-self: center; + } + } + + :global(.card .card__footer) { + gap: 1rem; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); + } + + :global(.cardsContainer) { + gap: 1rem; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + justify-items: start; + } +} diff --git a/microsite-next/src/pages/plugins/_pluginCard.tsx b/microsite-next/src/pages/plugins/_pluginCard.tsx index dec62af06f..99f27b865d 100644 --- a/microsite-next/src/pages/plugins/_pluginCard.tsx +++ b/microsite-next/src/pages/plugins/_pluginCard.tsx @@ -1,4 +1,5 @@ import Link from '@docusaurus/Link'; +import { SimpleCard } from '@site/src/components/simpleCard/simpleCard'; import React from 'react'; export interface IPluginData { @@ -23,32 +24,30 @@ export const PluginCard = ({ iconUrl, title, }: IPluginData) => ( -
-
- {title} + + {title} -

{title}

+

{title}

-

- by {author} -

+

+ by {author} +

- - {category} - -
- -
-

{description}

-
- -
+ + {category} + + + } + body={

{description}

} + footer={ Explore -
-
+ } + /> ); diff --git a/microsite-next/src/pages/plugins/index.tsx b/microsite-next/src/pages/plugins/index.tsx index f8c6f78819..0e57e01994 100644 --- a/microsite-next/src/pages/plugins/index.tsx +++ b/microsite-next/src/pages/plugins/index.tsx @@ -5,18 +5,9 @@ import React from 'react'; import { IPluginData, PluginCard } from './_pluginCard'; import pluginsStyles from './plugins.module.scss'; +import { truncateDescription } from '@site/src/util/truncateDescription'; //#region Plugin data import -const maxDescLength = 160; - -const truncatePluginDescription = (pluginData: IPluginData) => - pluginData.description.length > maxDescLength - ? { - ...pluginData, - description: pluginData.description.slice(0, maxDescLength) + '...', - } - : pluginData; - const pluginsContext = require.context( '../../../../microsite/data/plugins', false, @@ -29,7 +20,7 @@ const plugins = pluginsContext.keys().reduce( acum[ pluginData.category === 'Core Feature' ? 'corePlugins' : 'otherPlugins' - ].push(truncatePluginDescription(pluginData)); + ].push(truncateDescription(pluginData)); return acum; }, diff --git a/microsite-next/src/util/truncateDescription.tsx b/microsite-next/src/util/truncateDescription.tsx new file mode 100644 index 0000000000..dc661cbd49 --- /dev/null +++ b/microsite-next/src/util/truncateDescription.tsx @@ -0,0 +1,11 @@ +export const maxDescLength = 160; + +export const truncateDescription = ( + itemData: T, +) => + itemData.description.length > maxDescLength + ? { + ...itemData, + description: itemData.description.slice(0, maxDescLength) + '...', + } + : itemData; From e675f902980a099fe07016d4c15bdfeadaf0fa40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 8 Mar 2023 16:04:13 +0100 Subject: [PATCH 29/43] catalog: properly deprecate symbols that were moved over to the node package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/beige-hats-cheer.md | 27 +++ .changeset/moody-apes-know.md | 16 ++ .changeset/proud-jokes-pull.md | 5 + .../catalog-backend-module-aws/api-report.md | 10 +- .../catalog-backend-module-aws/package.json | 1 - .../src/processors/AwsEKSClusterProcessor.ts | 2 +- .../AwsOrganizationCloudAccountProcessor.ts | 2 +- .../AwsS3DiscoveryProcessor.test.ts | 2 +- .../src/processors/AwsS3DiscoveryProcessor.ts | 2 +- .../src/providers/AwsS3EntityProvider.test.ts | 2 +- .../src/providers/AwsS3EntityProvider.ts | 2 +- .../api-report.md | 10 +- .../catalog-backend-module-azure/package.json | 1 - .../AzureDevOpsDiscoveryProcessor.test.ts | 2 +- .../AzureDevOpsDiscoveryProcessor.ts | 2 +- .../AzureDevOpsEntityProvider.test.ts | 2 +- .../providers/AzureDevOpsEntityProvider.ts | 2 +- .../api-report.md | 4 +- .../package.json | 1 - .../BitbucketCloudEntityProvider.test.ts | 2 +- .../providers/BitbucketCloudEntityProvider.ts | 2 +- .../api-report.md | 6 +- .../package.json | 1 - .../BitbucketServerEntityProvider.test.ts | 2 +- .../BitbucketServerEntityProvider.ts | 2 +- .../BitbucketServerLocationParser.ts | 2 +- .../api-report.md | 8 +- .../package.json | 2 +- .../src/BitbucketDiscoveryProcessor.test.ts | 5 +- .../src/BitbucketDiscoveryProcessor.ts | 2 +- .../src/lib/BitbucketRepositoryParser.test.ts | 2 +- .../src/lib/BitbucketRepositoryParser.ts | 2 +- .../api-report.md | 4 +- .../package.json | 1 - .../providers/GerritEntityProvider.test.ts | 2 +- .../src/providers/GerritEntityProvider.ts | 2 +- .../api-report.md | 10 +- .../src/deprecated.ts | 2 +- .../src/lib/github.ts | 4 +- .../GithubDiscoveryProcessor.test.ts | 2 +- .../processors/GithubDiscoveryProcessor.ts | 2 +- .../GithubMultiOrgReaderProcessor.ts | 2 +- .../GithubOrgReaderProcessor.test.ts | 2 +- .../processors/GithubOrgReaderProcessor.ts | 2 +- .../providers/GithubEntityProvider.test.ts | 2 +- .../src/providers/GithubEntityProvider.ts | 2 +- .../providers/GithubOrgEntityProvider.test.ts | 2 +- .../src/providers/GithubOrgEntityProvider.ts | 2 +- .../api-report.md | 10 +- .../package.json | 1 - .../src/GitLabDiscoveryProcessor.test.ts | 2 +- .../src/GitLabDiscoveryProcessor.ts | 2 +- .../GitlabDiscoveryEntityProvider.test.ts | 2 +- .../GitlabDiscoveryEntityProvider.ts | 2 +- .../GitlabOrgDiscoveryEntityProvider.test.ts | 2 +- .../GitlabOrgDiscoveryEntityProvider.ts | 2 +- .../api-report.md | 2 +- .../package.json | 3 +- .../IncrementalIngestionDatabaseManager.ts | 2 +- .../src/engine/IncrementalIngestionEngine.ts | 2 +- .../src/service/IncrementalCatalogBuilder.ts | 1 + .../src/types.ts | 2 +- .../catalog-backend-module-ldap/api-report.md | 10 +- .../catalog-backend-module-ldap/package.json | 2 +- .../src/processors/LdapOrgEntityProvider.ts | 2 +- .../src/processors/LdapOrgReaderProcessor.ts | 2 +- .../api-report.md | 10 +- .../package.json | 1 - .../MicrosoftGraphOrgEntityProvider.test.ts | 2 +- .../MicrosoftGraphOrgEntityProvider.ts | 2 +- .../MicrosoftGraphOrgReaderProcessor.ts | 2 +- .../api-report.md | 4 +- .../package.json | 2 +- .../providers/PuppetDbEntityProvider.test.ts | 2 +- .../src/providers/PuppetDbEntityProvider.ts | 2 +- plugins/catalog-backend/api-report.md | 165 +++++++++++------- plugins/catalog-backend/src/deprecated.ts | 143 +++++++++++++++ plugins/catalog-backend/src/index.ts | 37 +--- plugins/catalog-backend/src/util/index.ts | 17 -- plugins/catalog-node/api-report.md | 10 ++ plugins/catalog-node/src/conversion.ts | 103 +++++++++++ plugins/catalog-node/src/index.ts | 1 + yarn.lock | 13 +- 83 files changed, 510 insertions(+), 233 deletions(-) create mode 100644 .changeset/beige-hats-cheer.md create mode 100644 .changeset/moody-apes-know.md create mode 100644 .changeset/proud-jokes-pull.md create mode 100644 plugins/catalog-backend/src/deprecated.ts delete mode 100644 plugins/catalog-backend/src/util/index.ts create mode 100644 plugins/catalog-node/src/conversion.ts diff --git a/.changeset/beige-hats-cheer.md b/.changeset/beige-hats-cheer.md new file mode 100644 index 0000000000..83b70d137e --- /dev/null +++ b/.changeset/beige-hats-cheer.md @@ -0,0 +1,27 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Add deprecations for symbols that were moved to `@backstage/plugin-catalog-node` a long time ago: + +- `CatalogProcessor` +- `CatalogProcessorCache` +- `CatalogProcessorEmit` +- `CatalogProcessorEntityResult` +- `CatalogProcessorErrorResult` +- `CatalogProcessorLocationResult` +- `CatalogProcessorParser` +- `CatalogProcessorRefreshKeysResult` +- `CatalogProcessorRelationResult` +- `CatalogProcessorResult` +- `DeferredEntity` +- `EntityProvider` +- `EntityProviderConnection` +- `EntityProviderMutation` +- `EntityRelationSpec` +- `processingResult` + +Also moved over and deprecated the following symbols: + +- `locationSpecToLocationEntity` +- `locationSpecToMetadataName` diff --git a/.changeset/moody-apes-know.md b/.changeset/moody-apes-know.md new file mode 100644 index 0000000000..bd48cb108e --- /dev/null +++ b/.changeset/moody-apes-know.md @@ -0,0 +1,16 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +'@backstage/plugin-catalog-backend-module-bitbucket': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-catalog-backend-module-ldap': patch +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` diff --git a/.changeset/proud-jokes-pull.md b/.changeset/proud-jokes-pull.md new file mode 100644 index 0000000000..7d7790889a --- /dev/null +++ b/.changeset/proud-jokes-pull.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': patch +--- + +Added `locationSpecToMetadataName` and `locationSpecToLocationEntity` as their new home, moved over from the backend package where they now are marked as deprecated. diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/api-report.md index 5086ec1ea7..491dbf497e 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/api-report.md @@ -3,13 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorParser } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { Credentials } from 'aws-sdk'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index a61f21c8cf..79271cf4de 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -53,7 +53,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-kubernetes-common": "workspace:^", diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts index b6418ade03..05c85c7426 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts @@ -17,7 +17,7 @@ import { CatalogProcessor, CatalogProcessorEmit, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { ANNOTATION_KUBERNETES_API_SERVER, diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts index ecc42e69ea..c0ba1e3e98 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts @@ -20,7 +20,7 @@ import { CatalogProcessor, CatalogProcessorEmit, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import AWS, { Credentials, Organizations } from 'aws-sdk'; import { Account, ListAccountsResponse } from 'aws-sdk/clients/organizations'; diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts index ef540da7f5..7818b21bd1 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts @@ -21,7 +21,7 @@ import { CatalogProcessorEntityResult, CatalogProcessorResult, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { S3Client, ListObjectsV2Command, diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts index 072c3d8384..d6722d046e 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts @@ -21,7 +21,7 @@ import { CatalogProcessorEmit, CatalogProcessorParser, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import limiterFactory from 'p-limit'; diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts index 134a3c6338..821fb6d4f4 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts @@ -21,7 +21,7 @@ import { TaskRunner, } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { AwsS3EntityProvider } from './AwsS3EntityProvider'; import aws from 'aws-sdk'; import AWSMock from 'aws-sdk-mock'; diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts index 5e24d4dc13..8212f9279a 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts @@ -21,7 +21,7 @@ import { EntityProvider, EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { AwsCredentials } from '../credentials/AwsCredentials'; import { readAwsS3Configs } from './config'; diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/api-report.md index 8fb7edeb53..a1b9d706a9 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/api-report.md @@ -3,12 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index ab68d31c0e..afe85243db 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -52,7 +52,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", diff --git a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts index 38df737179..0a1ec1e3cf 100644 --- a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts @@ -16,7 +16,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { AzureDevOpsDiscoveryProcessor, parseUrl, diff --git a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts index 8893d5d42d..fde59046ef 100644 --- a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts @@ -24,7 +24,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { codeSearch } from '../lib'; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index dff1164899..23a668d60b 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -21,7 +21,7 @@ import { TaskRunner, } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { CodeSearchResultItem } from '../lib'; import { AzureDevOpsEntityProvider } from './AzureDevOpsEntityProvider'; import { codeSearch } from '../lib'; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts index 788b9c2f05..89572286a1 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts @@ -22,7 +22,7 @@ import { EntityProviderConnection, LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { readAzureDevOpsConfigs } from './config'; import { Logger } from 'winston'; import { AzureDevOpsConfig } from './types'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md b/plugins/catalog-backend-module-bitbucket-cloud/api-report.md index 456ea62dd3..22eeddea3a 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/api-report.md @@ -5,8 +5,8 @@ ```ts import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { EventParams } from '@backstage/plugin-events-node'; import { Events } from '@backstage/plugin-bitbucket-cloud-common'; import { EventSubscriber } from '@backstage/plugin-events-node'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index dcee7f5811..8ed58f0333 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -53,7 +53,6 @@ "@backstage/config": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-bitbucket-cloud-common": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-events-node": "workspace:^", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts index 367e95b99b..727b7fd40c 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts @@ -27,7 +27,7 @@ import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Events } from '@backstage/plugin-bitbucket-cloud-common'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts index a139bd7d8d..11c872cf7b 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts @@ -33,7 +33,7 @@ import { EntityProvider, EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { EventParams, EventSubscriber } from '@backstage/plugin-events-node'; import { diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.md b/plugins/catalog-backend-module-bitbucket-server/api-report.md index 6c840883af..467294f3b0 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/api-report.md @@ -6,9 +6,9 @@ import { BitbucketServerIntegrationConfig } from '@backstage/integration'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { Response as Response_2 } from 'node-fetch'; diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 057153a9c3..433d4bc907 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -51,7 +51,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@types/node-fetch": "^2.5.12", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts index 20299e3452..bc3fa2ae23 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { BitbucketServerEntityProvider } from './BitbucketServerEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts index 2ecdd79019..fd2b3e3959 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts @@ -25,7 +25,7 @@ import { import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import * as uuid from 'uuid'; import { BitbucketServerClient, paginated } from '../lib'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts index 7f6dae8872..e5d48f92b8 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts @@ -17,7 +17,7 @@ import { LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Entity } from '@backstage/catalog-model'; import { Logger } from 'winston'; import { BitbucketServerClient } from '../lib'; diff --git a/plugins/catalog-backend-module-bitbucket/api-report.md b/plugins/catalog-backend-module-bitbucket/api-report.md index 053c6040a4..30b2a89826 100644 --- a/plugins/catalog-backend-module-bitbucket/api-report.md +++ b/plugins/catalog-backend-module-bitbucket/api-report.md @@ -4,11 +4,11 @@ ```ts import { BitbucketIntegration } from '@backstage/integration'; -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorResult } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { ScmIntegrationRegistry } from '@backstage/integration'; diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index b77d74c59d..79fbbe08c4 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -39,7 +39,7 @@ "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-bitbucket-cloud-common": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts index f7a56ebc8f..262fb4e6c4 100644 --- a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts @@ -18,10 +18,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { Models } from '@backstage/plugin-bitbucket-cloud-common'; -import { - LocationSpec, - processingResult, -} from '@backstage/plugin-catalog-backend'; +import { LocationSpec, processingResult } from '@backstage/plugin-catalog-node'; import { RequestHandler, rest } from 'msw'; import { setupServer } from 'msw/node'; import { BitbucketDiscoveryProcessor } from './BitbucketDiscoveryProcessor'; diff --git a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts index 78aa3eacfd..3f25d6ed7b 100644 --- a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts @@ -28,7 +28,7 @@ import { CatalogProcessor, CatalogProcessorEmit, LocationSpec, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { BitbucketRepository, diff --git a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts index 41f467ebaa..478ccd7c52 100644 --- a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts +++ b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { processingResult } from '@backstage/plugin-catalog-backend'; +import { processingResult } from '@backstage/plugin-catalog-node'; import { defaultRepositoryParser } from './BitbucketRepositoryParser'; describe('BitbucketRepositoryParser', () => { diff --git a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts index 97225e2579..aa973f87c2 100644 --- a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts +++ b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts @@ -18,7 +18,7 @@ import { BitbucketIntegration } from '@backstage/integration'; import { CatalogProcessorResult, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; /** diff --git a/plugins/catalog-backend-module-gerrit/api-report.md b/plugins/catalog-backend-module-gerrit/api-report.md index 1dee786da1..f64e697555 100644 --- a/plugins/catalog-backend-module-gerrit/api-report.md +++ b/plugins/catalog-backend-module-gerrit/api-report.md @@ -4,8 +4,8 @@ ```ts import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 3cf873aecd..af9727cbf9 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -48,7 +48,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "fs-extra": "10.1.0", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts index 5d258ee94f..9892b60a21 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import fs from 'fs-extra'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts index 986f8ae60c..76cccaf37b 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts @@ -22,7 +22,7 @@ import { EntityProviderConnection, LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import fetch, { Response } from 'node-fetch'; import { GerritIntegration, diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index c732740997..23faa31495 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -4,19 +4,19 @@ ```ts import { AnalyzeOptions } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { EventParams } from '@backstage/plugin-events-node'; import { EventSubscriber } from '@backstage/plugin-events-node'; import { GithubCredentialsProvider } from '@backstage/integration'; import { GithubIntegrationConfig } from '@backstage/integration'; import { graphql } from '@octokit/graphql'; import { GroupEntity } from '@backstage/catalog-model'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-github/src/deprecated.ts b/plugins/catalog-backend-module-github/src/deprecated.ts index d094bb4031..e27a856358 100644 --- a/plugins/catalog-backend-module-github/src/deprecated.ts +++ b/plugins/catalog-backend-module-github/src/deprecated.ts @@ -19,7 +19,7 @@ import { Config } from '@backstage/config'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { GithubEntityProvider } from './providers/GithubEntityProvider'; import { diff --git a/plugins/catalog-backend-module-github/src/lib/github.ts b/plugins/catalog-backend-module-github/src/lib/github.ts index ae6e14fc23..30e7bd83d4 100644 --- a/plugins/catalog-backend-module-github/src/lib/github.ts +++ b/plugins/catalog-backend-module-github/src/lib/github.ts @@ -26,7 +26,7 @@ import { } from './defaultTransformers'; import { withLocations } from '../providers/GithubOrgEntityProvider'; -import { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import { DeferredEntity } from '@backstage/plugin-catalog-node'; // Graphql types @@ -195,7 +195,7 @@ export async function getOrganizationTeams( parentTeam { slug } members(first: 100, membership: IMMEDIATE) { pageInfo { hasNextPage } - nodes { + nodes { avatarUrl, bio, email, diff --git a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts index f30007c677..f008c88dbe 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts @@ -20,7 +20,7 @@ import { DefaultGithubCredentialsProvider, ScmIntegrations, } from '@backstage/integration'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { GithubDiscoveryProcessor, parseUrl } from './GithubDiscoveryProcessor'; import { getOrganizationRepositories } from '../lib'; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts index c6733df13b..0907b8ac8d 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts @@ -26,7 +26,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { Logger } from 'winston'; import { getOrganizationRepositories } from '../lib'; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts index 7777da6b1b..9709977010 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts @@ -34,7 +34,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { Logger } from 'winston'; import { diff --git a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts index ce81e2cf42..195214d561 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts @@ -20,7 +20,7 @@ import { GithubCredentialsProvider, ScmIntegrations, } from '@backstage/integration'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { GithubOrgReaderProcessor } from './GithubOrgReaderProcessor'; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts index 90c168ccf4..654deb3079 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts @@ -27,7 +27,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { Logger } from 'winston'; import { diff --git a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts index 2be5df09fe..21e6a46fbf 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts @@ -21,7 +21,7 @@ import { TaskRunner, } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GithubEntityProvider } from './GithubEntityProvider'; import * as helpers from '../lib/github'; import { EventParams } from '@backstage/plugin-events-node'; diff --git a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts index 3c6fd43bd0..839f40e91a 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts @@ -28,7 +28,7 @@ import { EntityProvider, EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; diff --git a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts index 2711425998..ff42e42718 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts @@ -20,7 +20,7 @@ import { GithubCredentialsProvider, GithubIntegrationConfig, } from '@backstage/integration'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { EventParams } from '@backstage/plugin-events-node'; import { diff --git a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts index 2a888e6f91..02e225c938 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts @@ -33,7 +33,7 @@ import { EventSubscriber } from '@backstage/plugin-events-node'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { OrganizationEvent, diff --git a/plugins/catalog-backend-module-gitlab/api-report.md b/plugins/catalog-backend-module-gitlab/api-report.md index 68ea45169f..2596b5c99a 100644 --- a/plugins/catalog-backend-module-gitlab/api-report.md +++ b/plugins/catalog-backend-module-gitlab/api-report.md @@ -3,12 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 2535be8fea..ed07ea842c 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -52,7 +52,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", diff --git a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts index 385ce59bfb..6333184ea8 100644 --- a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts @@ -17,7 +17,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { rest, RestRequest } from 'msw'; import { setupServer } from 'msw/node'; import { GitLabDiscoveryProcessor, parseUrl } from './GitLabDiscoveryProcessor'; diff --git a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts index 756093bc56..9f2cd9b17a 100644 --- a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts @@ -29,7 +29,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { GitLabClient, GitLabProject, paginated } from './lib'; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts index ae19edc48c..42fa1b471c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { GitlabDiscoveryEntityProvider } from './GitlabDiscoveryEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts index f0d88c34f5..ece10ee8c6 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts @@ -22,7 +22,7 @@ import { EntityProviderConnection, LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import * as uuid from 'uuid'; import { Logger } from 'winston'; import { diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts index cff215acd3..5a323a8dec 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { GitlabOrgDiscoveryEntityProvider } from './GitlabOrgDiscoveryEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts index db1efac86d..acfa784c2e 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts @@ -20,7 +20,7 @@ import { GitLabIntegration, ScmIntegrations } from '@backstage/integration'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import * as uuid from 'uuid'; import { Logger } from 'winston'; import { diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report.md b/plugins/catalog-backend-module-incremental-ingestion/api-report.md index 167c07f70f..c2fad4576c 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/api-report.md +++ b/plugins/catalog-backend-module-incremental-ingestion/api-report.md @@ -7,7 +7,7 @@ import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; import type { Config } from '@backstage/config'; -import type { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import type { DeferredEntity } from '@backstage/plugin-catalog-node'; import type { DurationObjectUnits } from 'luxon'; import { EventParams } from '@backstage/plugin-events-node'; import { EventSubscriber } from '@backstage/plugin-events-node'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 0d0b84cd88..5b2a534fcb 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -69,8 +69,7 @@ "@backstage/backend-app-api": "workspace:^", "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", - "@backstage/cli": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/cli": "workspace:^" }, "files": [ "dist", diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts b/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts index cf47942754..527d345706 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts @@ -15,7 +15,7 @@ */ import { Knex } from 'knex'; -import type { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import type { DeferredEntity } from '@backstage/plugin-catalog-node'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { Duration } from 'luxon'; import { v4 } from 'uuid'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts b/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts index 228c7a2505..13d5bfff71 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import type { DeferredEntity } from '@backstage/plugin-catalog-node'; import { IterationEngine, IterationEngineOptions } from '../types'; import { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager'; import { performance } from 'perf_hooks'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts b/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts index c8458be09b..59cdf32391 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { IncrementalEntityProvider, IncrementalEntityProviderOptions, diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/types.ts b/plugins/catalog-backend-module-incremental-ingestion/src/types.ts index cd1e63b044..5f9d0489e6 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/types.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/types.ts @@ -26,7 +26,7 @@ import type { Config } from '@backstage/config'; import type { DeferredEntity, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { EventParams } from '@backstage/plugin-events-node'; import type { PermissionEvaluator } from '@backstage/plugin-permission-common'; import type { DurationObjectUnits } from 'luxon'; diff --git a/plugins/catalog-backend-module-ldap/api-report.md b/plugins/catalog-backend-module-ldap/api-report.md index 9876c163e8..088e34fc34 100644 --- a/plugins/catalog-backend-module-ldap/api-report.md +++ b/plugins/catalog-backend-module-ldap/api-report.md @@ -3,15 +3,15 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Client } from 'ldapjs'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GroupEntity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { SearchEntry } from 'ldapjs'; import { SearchOptions } from 'ldapjs'; diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 2cf1135693..06b33f1db2 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -36,7 +36,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "@types/ldapjs": "^2.2.0", "ldapjs": "^2.2.0", diff --git a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts index 64d56cc8bc..811f451b26 100644 --- a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts @@ -24,7 +24,7 @@ import { Config } from '@backstage/config'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { merge } from 'lodash'; import * as uuid from 'uuid'; import { Logger } from 'winston'; diff --git a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts index fcfdb43eb1..9c5442ca0c 100644 --- a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts @@ -29,7 +29,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; /** * Extracts teams and users out of an LDAP server. diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 10a4f405c0..bde8c06fbb 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -3,13 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GroupEntity } from '@backstage/catalog-model'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import * as MicrosoftGraph from '@microsoft/microsoft-graph-types'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 22c2a422d2..f66151bbc4 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -51,7 +51,6 @@ "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@microsoft/microsoft-graph-types": "^2.6.0", "@types/node-fetch": "^2.5.12", diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts index 8af327cf27..dccf7ed53d 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts @@ -26,7 +26,7 @@ import { GroupEntity, UserEntity, } from '@backstage/catalog-model'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { MicrosoftGraphClient, MICROSOFT_GRAPH_USER_ID_ANNOTATION, diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts index 071fa7f266..3ef02344eb 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts @@ -24,7 +24,7 @@ import { Config } from '@backstage/config'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { merge } from 'lodash'; import * as uuid from 'uuid'; import { Logger } from 'winston'; diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index 1267648481..2beef51c31 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -20,7 +20,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { GroupTransformer, diff --git a/plugins/catalog-backend-module-puppetdb/api-report.md b/plugins/catalog-backend-module-puppetdb/api-report.md index 8764ac1e7c..a4954ce6bd 100644 --- a/plugins/catalog-backend-module-puppetdb/api-report.md +++ b/plugins/catalog-backend-module-puppetdb/api-report.md @@ -4,8 +4,8 @@ ```ts import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { JsonValue } from '@backstage/types'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 861b535f4d..3bb2e1435f 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -39,7 +39,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", "luxon": "^3.0.0", diff --git a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts index 0ab6fb35b7..ad89e1fd9a 100644 --- a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts +++ b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts @@ -21,7 +21,7 @@ import { PuppetDbEntityProvider } from './PuppetDbEntityProvider'; import { DeferredEntity, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import * as puppetFunctions from '../puppet/read'; import { ANNOTATION_PUPPET_CERTNAME } from '../puppet'; import { diff --git a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts index b2d2738fd3..5d337969eb 100644 --- a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts +++ b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts @@ -17,7 +17,7 @@ import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PuppetDbEntityProviderConfig, diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 00c13a31ea..b2e87af53c 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -12,29 +12,30 @@ import { AnalyzeLocationRequest as AnalyzeLocationRequest_2 } from '@backstage/p import { AnalyzeLocationResponse as AnalyzeLocationResponse_2 } from '@backstage/plugin-catalog-common'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; -import { CatalogProcessor } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorCache } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorEntityResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorErrorResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorLocationResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorRefreshKeysResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorRelationResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; +import { CatalogProcessor as CatalogProcessor_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorCache as CatalogProcessorCache_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit as CatalogProcessorEmit_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEntityResult as CatalogProcessorEntityResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorErrorResult as CatalogProcessorErrorResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorLocationResult as CatalogProcessorLocationResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorParser as CatalogProcessorParser_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorRefreshKeysResult as CatalogProcessorRefreshKeysResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorRelationResult as CatalogProcessorRelationResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorResult as CatalogProcessorResult_2 } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { DeferredEntity } from '@backstage/plugin-catalog-node'; +import { DeferredEntity as DeferredEntity_2 } from '@backstage/plugin-catalog-node'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { Entity } from '@backstage/catalog-model'; import { EntityPolicy } from '@backstage/catalog-model'; -import { EntityProvider } from '@backstage/plugin-catalog-node'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { EntityProviderMutation } from '@backstage/plugin-catalog-node'; -import { EntityRelationSpec } from '@backstage/plugin-catalog-node'; +import { EntityProvider as EntityProvider_2 } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection as EntityProviderConnection_2 } from '@backstage/plugin-catalog-node'; +import { EntityProviderMutation as EntityProviderMutation_2 } from '@backstage/plugin-catalog-node'; +import { EntityRelationSpec as EntityRelationSpec_2 } from '@backstage/plugin-catalog-node'; import { GetEntitiesRequest } from '@backstage/catalog-client'; import { JsonValue } from '@backstage/types'; -import { LocationEntityV1alpha1 } from '@backstage/catalog-model'; import { LocationSpec as LocationSpec_2 } from '@backstage/plugin-catalog-common'; +import { locationSpecToLocationEntity as locationSpecToLocationEntity_2 } from '@backstage/plugin-catalog-node'; +import { locationSpecToMetadataName as locationSpecToMetadataName_2 } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; @@ -43,7 +44,6 @@ import { PermissionRule } from '@backstage/plugin-permission-node'; import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { processingResult } from '@backstage/plugin-catalog-node'; import { Readable } from 'stream'; import { Router } from 'express'; import { ScmIntegrationRegistry } from '@backstage/integration'; @@ -73,7 +73,7 @@ export type AnalyzeOptions = { }; // @public (undocumented) -export class AnnotateLocationEntityProcessor implements CatalogProcessor { +export class AnnotateLocationEntityProcessor implements CatalogProcessor_2 { constructor(options: { integrations: ScmIntegrationRegistry }); // (undocumented) getProcessorName(): string; @@ -81,13 +81,13 @@ export class AnnotateLocationEntityProcessor implements CatalogProcessor { preProcessEntity( entity: Entity, location: LocationSpec_2, - _: CatalogProcessorEmit, + _: CatalogProcessorEmit_2, originLocation: LocationSpec_2, ): Promise; } // @public (undocumented) -export class AnnotateScmSlugEntityProcessor implements CatalogProcessor { +export class AnnotateScmSlugEntityProcessor implements CatalogProcessor_2 { constructor(opts: { scmIntegrationRegistry: ScmIntegrationRegistry }); // (undocumented) static fromConfig(config: Config): AnnotateScmSlugEntityProcessor; @@ -98,14 +98,14 @@ export class AnnotateScmSlugEntityProcessor implements CatalogProcessor { } // @public (undocumented) -export class BuiltinKindsEntityProcessor implements CatalogProcessor { +export class BuiltinKindsEntityProcessor implements CatalogProcessor_2 { // (undocumented) getProcessorName(): string; // (undocumented) postProcessEntity( entity: Entity, _location: LocationSpec_2, - emit: CatalogProcessorEmit, + emit: CatalogProcessorEmit_2, ): Promise; // (undocumented) validateEntityKind(entity: Entity): Promise; @@ -117,7 +117,7 @@ export class CatalogBuilder { ...policies: Array> ): CatalogBuilder; addEntityProvider( - ...providers: Array> + ...providers: Array> ): CatalogBuilder; addLocationAnalyzers( ...analyzers: Array> @@ -128,18 +128,18 @@ export class CatalogBuilder { > ): this; addProcessor( - ...processors: Array> + ...processors: Array> ): CatalogBuilder; build(): Promise<{ processingEngine: CatalogProcessingEngine; router: Router; }>; static create(env: CatalogEnvironment): CatalogBuilder; - getDefaultProcessors(): CatalogProcessor[]; + getDefaultProcessors(): CatalogProcessor_2[]; replaceEntityPolicies(policies: EntityPolicy[]): CatalogBuilder; - replaceProcessors(processors: CatalogProcessor[]): CatalogBuilder; + replaceProcessors(processors: CatalogProcessor_2[]): CatalogBuilder; setAllowedLocationTypes(allowedLocationTypes: string[]): CatalogBuilder; - setEntityDataParser(parser: CatalogProcessorParser): CatalogBuilder; + setEntityDataParser(parser: CatalogProcessorParser_2): CatalogBuilder; setFieldFormatValidators(validators: Partial): CatalogBuilder; setLocationAnalyzer(locationAnalyzer: LocationAnalyzer): CatalogBuilder; setPlaceholderResolver( @@ -187,28 +187,39 @@ export interface CatalogProcessingEngine { stop(): Promise; } -export { CatalogProcessor }; +// @public @deprecated (undocumented) +export type CatalogProcessor = CatalogProcessor_2; -export { CatalogProcessorCache }; +// @public @deprecated (undocumented) +export type CatalogProcessorCache = CatalogProcessorCache_2; -export { CatalogProcessorEmit }; +// @public @deprecated (undocumented) +export type CatalogProcessorEmit = CatalogProcessorEmit_2; -export { CatalogProcessorEntityResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorEntityResult = CatalogProcessorEntityResult_2; -export { CatalogProcessorErrorResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorErrorResult = CatalogProcessorErrorResult_2; -export { CatalogProcessorLocationResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorLocationResult = CatalogProcessorLocationResult_2; -export { CatalogProcessorParser }; +// @public @deprecated (undocumented) +export type CatalogProcessorParser = CatalogProcessorParser_2; -export { CatalogProcessorRefreshKeysResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorRefreshKeysResult = + CatalogProcessorRefreshKeysResult_2; -export { CatalogProcessorRelationResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorRelationResult = CatalogProcessorRelationResult_2; -export { CatalogProcessorResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorResult = CatalogProcessorResult_2; // @public (undocumented) -export class CodeOwnersProcessor implements CatalogProcessor { +export class CodeOwnersProcessor implements CatalogProcessor_2 { constructor(options: { integrations: ScmIntegrationRegistry; logger: Logger; @@ -304,7 +315,8 @@ export type DefaultCatalogCollatorFactoryOptions = { entityTransformer?: CatalogCollatorEntityTransformer; }; -export { DeferredEntity }; +// @public @deprecated (undocumented) +export type DeferredEntity = DeferredEntity_2; // @public export type EntitiesSearchFilter = { @@ -325,24 +337,28 @@ export type EntityFilter = } | EntitiesSearchFilter; -export { EntityProvider }; +// @public @deprecated (undocumented) +export type EntityProvider = EntityProvider_2; -export { EntityProviderConnection }; +// @public @deprecated (undocumented) +export type EntityProviderConnection = EntityProviderConnection_2; -export { EntityProviderMutation }; +// @public @deprecated (undocumented) +export type EntityProviderMutation = EntityProviderMutation_2; -export { EntityRelationSpec }; +// @public @deprecated (undocumented) +export type EntityRelationSpec = EntityRelationSpec_2; // @public (undocumented) -export class FileReaderProcessor implements CatalogProcessor { +export class FileReaderProcessor implements CatalogProcessor_2 { // (undocumented) getProcessorName(): string; // (undocumented) readLocation( location: LocationSpec_2, optional: boolean, - emit: CatalogProcessorEmit, - parser: CatalogProcessorParser, + emit: CatalogProcessorEmit_2, + parser: CatalogProcessorParser_2, ): Promise; } @@ -354,7 +370,7 @@ export type LocationAnalyzer = { }; // @public (undocumented) -export class LocationEntityProcessor implements CatalogProcessor { +export class LocationEntityProcessor implements CatalogProcessor_2 { constructor(options: LocationEntityProcessorOptions); // (undocumented) getProcessorName(): string; @@ -362,7 +378,7 @@ export class LocationEntityProcessor implements CatalogProcessor { postProcessEntity( entity: Entity, location: LocationSpec_2, - emit: CatalogProcessorEmit, + emit: CatalogProcessorEmit_2, ): Promise; } @@ -374,20 +390,20 @@ export type LocationEntityProcessorOptions = { // @public @deprecated export type LocationSpec = LocationSpec_2; -// @public (undocumented) -export function locationSpecToLocationEntity(opts: { - location: LocationSpec_2; - parentEntity?: Entity; -}): LocationEntityV1alpha1; +// @public @deprecated (undocumented) +export const locationSpecToLocationEntity: typeof locationSpecToLocationEntity_2; + +// @public @deprecated (undocumented) +export const locationSpecToMetadataName: typeof locationSpecToMetadataName_2; // @public (undocumented) export function parseEntityYaml( data: Buffer, location: LocationSpec_2, -): Iterable; +): Iterable; // @public -export class PlaceholderProcessor implements CatalogProcessor { +export class PlaceholderProcessor implements CatalogProcessor_2 { constructor(options: PlaceholderProcessorOptions); // (undocumented) getProcessorName(): string; @@ -395,7 +411,7 @@ export class PlaceholderProcessor implements CatalogProcessor { preProcessEntity( entity: Entity, location: LocationSpec_2, - emit: CatalogProcessorEmit, + emit: CatalogProcessorEmit_2, ): Promise; } @@ -418,7 +434,7 @@ export type PlaceholderResolverParams = { baseUrl: string; read: PlaceholderResolverRead; resolveUrl: PlaceholderResolverResolveUrl; - emit: CatalogProcessorEmit; + emit: CatalogProcessorEmit_2; }; // @public (undocumented) @@ -433,7 +449,32 @@ export type PlaceholderResolverResolveUrl = ( // @public export type ProcessingIntervalFunction = () => number; -export { processingResult }; +// @public @deprecated (undocumented) +export const processingResult: Readonly<{ + readonly notFoundError: ( + atLocation: LocationSpec_2, + message: string, + ) => CatalogProcessorResult_2; + readonly inputError: ( + atLocation: LocationSpec_2, + message: string, + ) => CatalogProcessorResult_2; + readonly generalError: ( + atLocation: LocationSpec_2, + message: string, + ) => CatalogProcessorResult_2; + readonly location: (newLocation: LocationSpec_2) => CatalogProcessorResult_2; + readonly entity: ( + atLocation: LocationSpec_2, + newEntity: Entity, + ) => CatalogProcessorResult_2; + readonly relation: (spec: EntityRelationSpec_2) => CatalogProcessorResult_2 + /** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */; + readonly refresh: (key: string) => CatalogProcessorResult_2; +}>; // @public (undocumented) export type ScmLocationAnalyzer = { @@ -444,7 +485,7 @@ export type ScmLocationAnalyzer = { }; // @public (undocumented) -export class UrlReaderProcessor implements CatalogProcessor { +export class UrlReaderProcessor implements CatalogProcessor_2 { constructor(options: { reader: UrlReader; logger: Logger }); // (undocumented) getProcessorName(): string; @@ -452,9 +493,9 @@ export class UrlReaderProcessor implements CatalogProcessor { readLocation( location: LocationSpec_2, optional: boolean, - emit: CatalogProcessorEmit, - parser: CatalogProcessorParser, - cache: CatalogProcessorCache, + emit: CatalogProcessorEmit_2, + parser: CatalogProcessorParser_2, + cache: CatalogProcessorCache_2, ): Promise; } ``` diff --git a/plugins/catalog-backend/src/deprecated.ts b/plugins/catalog-backend/src/deprecated.ts new file mode 100644 index 0000000000..ddc6c5a277 --- /dev/null +++ b/plugins/catalog-backend/src/deprecated.ts @@ -0,0 +1,143 @@ +/* + * Copyright 2023 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 { + locationSpecToMetadataName as nodeLocationSpecToMetadataName, + locationSpecToLocationEntity as nodeLocationSpecToLocationEntity, + processingResult as nodeProcessingResult, + type DeferredEntity as NodeDeferredEntity, + type EntityRelationSpec as NodeEntityRelationSpec, + type CatalogProcessor as NodeCatalogProcessor, + type CatalogProcessorParser as NodeCatalogProcessorParser, + type CatalogProcessorCache as NodeCatalogProcessorCache, + type CatalogProcessorEmit as NodeCatalogProcessorEmit, + type CatalogProcessorLocationResult as NodeCatalogProcessorLocationResult, + type CatalogProcessorEntityResult as NodeCatalogProcessorEntityResult, + type CatalogProcessorRelationResult as NodeCatalogProcessorRelationResult, + type CatalogProcessorErrorResult as NodeCatalogProcessorErrorResult, + type CatalogProcessorRefreshKeysResult as NodeCatalogProcessorRefreshKeysResult, + type CatalogProcessorResult as NodeCatalogProcessorResult, + type EntityProvider as NodeEntityProvider, + type EntityProviderConnection as NodeEntityProviderConnection, + type EntityProviderMutation as NodeEntityProviderMutation, +} from '@backstage/plugin-catalog-node'; +import { type LocationSpec as CommonLocationSpec } from '@backstage/plugin-catalog-common'; + +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export const locationSpecToMetadataName = nodeLocationSpecToMetadataName; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export const locationSpecToLocationEntity = nodeLocationSpecToLocationEntity; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export const processingResult = nodeProcessingResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type DeferredEntity = NodeDeferredEntity; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityRelationSpec = NodeEntityRelationSpec; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessor = NodeCatalogProcessor; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorParser = NodeCatalogProcessorParser; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorCache = NodeCatalogProcessorCache; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorEmit = NodeCatalogProcessorEmit; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorLocationResult = NodeCatalogProcessorLocationResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorEntityResult = NodeCatalogProcessorEntityResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorRelationResult = NodeCatalogProcessorRelationResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorErrorResult = NodeCatalogProcessorErrorResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorRefreshKeysResult = + NodeCatalogProcessorRefreshKeysResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorResult = NodeCatalogProcessorResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityProvider = NodeEntityProvider; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityProviderConnection = NodeEntityProviderConnection; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityProviderMutation = NodeEntityProviderMutation; + +/** + * Holds the entity location information. + * + * @remarks + * + * `presence` flag: when using repo importer plugin, location is being created before the component yaml file is merged to the main branch. + * This flag is then set to indicate that the file can be not present. + * default value: 'required'. + * + * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead + */ +export type LocationSpec = CommonLocationSpec; diff --git a/plugins/catalog-backend/src/index.ts b/plugins/catalog-backend/src/index.ts index e52336f036..b3d2bc95c7 100644 --- a/plugins/catalog-backend/src/index.ts +++ b/plugins/catalog-backend/src/index.ts @@ -20,45 +20,10 @@ * @packageDocumentation */ -export type { - DeferredEntity, - EntityRelationSpec, - CatalogProcessor, - CatalogProcessorParser, - CatalogProcessorCache, - CatalogProcessorEmit, - CatalogProcessorLocationResult, - CatalogProcessorEntityResult, - CatalogProcessorRelationResult, - CatalogProcessorErrorResult, - CatalogProcessorRefreshKeysResult, - CatalogProcessorResult, - EntityProvider, - EntityProviderConnection, - EntityProviderMutation, -} from '@backstage/plugin-catalog-node'; -export { processingResult } from '@backstage/plugin-catalog-node'; - export * from './catalog'; export * from './ingestion'; export * from './modules'; export * from './processing'; export * from './search'; export * from './service'; -export * from './util'; - -import { LocationSpec as NonDeprecatedLocationSpec } from '@backstage/plugin-catalog-common'; - -/** - * Holds the entity location information. - * - * @remarks - * - * `presence` flag: when using repo importer plugin, location is being created before the component yaml file is merged to the main branch. - * This flag is then set to indicate that the file can be not present. - * default value: 'required'. - * - * @public - * @deprecated use the same type from `@backstage/plugin-catalog-common` instead - */ -export type LocationSpec = NonDeprecatedLocationSpec; +export * from './deprecated'; diff --git a/plugins/catalog-backend/src/util/index.ts b/plugins/catalog-backend/src/util/index.ts deleted file mode 100644 index b3bd4d5316..0000000000 --- a/plugins/catalog-backend/src/util/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { locationSpecToLocationEntity } from './conversion'; diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 87da0b6944..47a8e66ca9 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -8,6 +8,7 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; +import { LocationEntityV1alpha1 } from '@backstage/catalog-model'; import { LocationSpec as LocationSpec_2 } from '@backstage/plugin-catalog-common'; // @public (undocumented) @@ -142,6 +143,15 @@ export type EntityRelationSpec = { // @public @deprecated export type LocationSpec = LocationSpec_2; +// @public +export function locationSpecToLocationEntity(opts: { + location: LocationSpec_2; + parentEntity?: Entity; +}): LocationEntityV1alpha1; + +// @public +export function locationSpecToMetadataName(location: LocationSpec_2): string; + // @public export const processingResult: Readonly<{ readonly notFoundError: ( diff --git a/plugins/catalog-node/src/conversion.ts b/plugins/catalog-node/src/conversion.ts new file mode 100644 index 0000000000..bbaebc7e35 --- /dev/null +++ b/plugins/catalog-node/src/conversion.ts @@ -0,0 +1,103 @@ +/* + * Copyright 2021 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 { + Entity, + LocationEntityV1alpha1, + ANNOTATION_LOCATION, + ANNOTATION_ORIGIN_LOCATION, + stringifyEntityRef, + stringifyLocationRef, +} from '@backstage/catalog-model'; +import { createHash } from 'crypto'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; + +/** + * A standard way of producing a machine generated name for a location. + * + * @public + */ +export function locationSpecToMetadataName(location: LocationSpec) { + const hash = createHash('sha1') + .update(`${location.type}:${location.target}`) + .digest('hex'); + return `generated-${hash}`; +} + +/** + * A standard way of producing a machine generated Location kind entity for a + * location. + * + * @public + */ +export function locationSpecToLocationEntity(opts: { + location: LocationSpec; + parentEntity?: Entity; +}): LocationEntityV1alpha1 { + const location = opts.location; + const parentEntity = opts.parentEntity; + + let ownLocation: string; + let originLocation: string; + if (parentEntity) { + const maybeOwnLocation = + parentEntity.metadata.annotations?.[ANNOTATION_LOCATION]; + if (!maybeOwnLocation) { + throw new Error( + `Parent entity '${stringifyEntityRef( + parentEntity, + )}' of location '${stringifyLocationRef( + location, + )}' does not have a location annotation`, + ); + } + ownLocation = maybeOwnLocation; + const maybeOriginLocation = + parentEntity.metadata.annotations?.[ANNOTATION_ORIGIN_LOCATION]; + if (!maybeOriginLocation) { + throw new Error( + `Parent entity '${stringifyEntityRef( + parentEntity, + )}' of location '${stringifyLocationRef( + location, + )}' does not have an origin location annotation`, + ); + } + originLocation = maybeOriginLocation; + } else { + ownLocation = stringifyLocationRef(location); + originLocation = ownLocation; + } + + const result: LocationEntityV1alpha1 = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Location', + metadata: { + name: locationSpecToMetadataName(location), + annotations: { + [ANNOTATION_LOCATION]: ownLocation, + [ANNOTATION_ORIGIN_LOCATION]: originLocation, + }, + }, + spec: { + type: location.type, + target: location.target, + presence: location.presence, + }, + }; + + return result; +} diff --git a/plugins/catalog-node/src/index.ts b/plugins/catalog-node/src/index.ts index 6a1accfcbd..2dd8b5fd5a 100644 --- a/plugins/catalog-node/src/index.ts +++ b/plugins/catalog-node/src/index.ts @@ -21,4 +21,5 @@ */ export * from './api'; +export * from './conversion'; export * from './processing'; diff --git a/yarn.lock b/yarn.lock index f0c5235907..5bb47b9df7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4949,7 +4949,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-kubernetes-common": "workspace:^" @@ -4980,7 +4979,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 @@ -5007,7 +5005,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-bitbucket-cloud-common": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-events-node": "workspace:^" @@ -5031,7 +5028,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@types/node-fetch": ^2.5.12 luxon: ^3.0.0 @@ -5054,7 +5050,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-bitbucket-cloud-common": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 lodash: ^4.17.21 @@ -5077,7 +5073,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@types/fs-extra": ^9.0.1 fs-extra: 10.1.0 @@ -5135,7 +5130,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 @@ -5188,7 +5182,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/ldapjs": ^2.2.0 "@types/lodash": ^4.14.151 @@ -5211,7 +5205,6 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@microsoft/microsoft-graph-types": ^2.6.0 "@types/lodash": ^4.14.151 @@ -5258,7 +5251,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 lodash: ^4.17.21 From 25d9f4a35442fe5e9bf27c5b2cecf800a3b9ba76 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 9 Mar 2023 11:48:31 +0100 Subject: [PATCH 30/43] todo-backend: fix backend plugin ID Signed-off-by: Patrik Oldsberg --- plugins/todo-backend/src/plugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/todo-backend/src/plugin.ts b/plugins/todo-backend/src/plugin.ts index b9a73a84ee..640ea1a0ce 100644 --- a/plugins/todo-backend/src/plugin.ts +++ b/plugins/todo-backend/src/plugin.ts @@ -27,7 +27,7 @@ import { createRouter } from './service/router'; * @public */ export const todoPlugin = createBackendPlugin({ - pluginId: 'todo-backend', + pluginId: 'todo', register(env) { env.registerInit({ deps: { From cad86281a24db3643f3a2f3965a8be0cf91d2d23 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Thu, 9 Mar 2023 09:43:30 -0300 Subject: [PATCH 31/43] Add link to discovery information Signed-off-by: Yuri Titi --- .changeset/modern-colts-exercise.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/modern-colts-exercise.md b/.changeset/modern-colts-exercise.md index 1dfe2f441a..651f10bc98 100644 --- a/.changeset/modern-colts-exercise.md +++ b/.changeset/modern-colts-exercise.md @@ -3,3 +3,4 @@ --- Add branch filter support +https://backstage.io/docs/integrations/azure/discovery From 85c4665526847e3cfb883ea3d28d8fbc015878ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 9 Mar 2023 14:13:59 +0100 Subject: [PATCH 32/43] shorten names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/catalog-backend/api-report.md | 6 +- plugins/catalog-backend/src/deprecated.ts | 76 +++++++++++------------ 2 files changed, 39 insertions(+), 43 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index b2e87af53c..5e7b2dee02 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -468,11 +468,7 @@ export const processingResult: Readonly<{ atLocation: LocationSpec_2, newEntity: Entity, ) => CatalogProcessorResult_2; - readonly relation: (spec: EntityRelationSpec_2) => CatalogProcessorResult_2 - /** - * @public - * @deprecated import from `@backstage/plugin-catalog-node` instead - */; + readonly relation: (spec: EntityRelationSpec_2) => CatalogProcessorResult_2; readonly refresh: (key: string) => CatalogProcessorResult_2; }>; diff --git a/plugins/catalog-backend/src/deprecated.ts b/plugins/catalog-backend/src/deprecated.ts index ddc6c5a277..c92ec719b7 100644 --- a/plugins/catalog-backend/src/deprecated.ts +++ b/plugins/catalog-backend/src/deprecated.ts @@ -15,118 +15,118 @@ */ import { - locationSpecToMetadataName as nodeLocationSpecToMetadataName, - locationSpecToLocationEntity as nodeLocationSpecToLocationEntity, - processingResult as nodeProcessingResult, - type DeferredEntity as NodeDeferredEntity, - type EntityRelationSpec as NodeEntityRelationSpec, - type CatalogProcessor as NodeCatalogProcessor, - type CatalogProcessorParser as NodeCatalogProcessorParser, - type CatalogProcessorCache as NodeCatalogProcessorCache, - type CatalogProcessorEmit as NodeCatalogProcessorEmit, - type CatalogProcessorLocationResult as NodeCatalogProcessorLocationResult, - type CatalogProcessorEntityResult as NodeCatalogProcessorEntityResult, - type CatalogProcessorRelationResult as NodeCatalogProcessorRelationResult, - type CatalogProcessorErrorResult as NodeCatalogProcessorErrorResult, - type CatalogProcessorRefreshKeysResult as NodeCatalogProcessorRefreshKeysResult, - type CatalogProcessorResult as NodeCatalogProcessorResult, - type EntityProvider as NodeEntityProvider, - type EntityProviderConnection as NodeEntityProviderConnection, - type EntityProviderMutation as NodeEntityProviderMutation, + locationSpecToMetadataName as _locationSpecToMetadataName, + locationSpecToLocationEntity as _locationSpecToLocationEntity, + processingResult as _processingResult, + type DeferredEntity as _DeferredEntity, + type EntityRelationSpec as _EntityRelationSpec, + type CatalogProcessor as _CatalogProcessor, + type CatalogProcessorParser as _CatalogProcessorParser, + type CatalogProcessorCache as _CatalogProcessorCache, + type CatalogProcessorEmit as _CatalogProcessorEmit, + type CatalogProcessorLocationResult as _CatalogProcessorLocationResult, + type CatalogProcessorEntityResult as _CatalogProcessorEntityResult, + type CatalogProcessorRelationResult as _CatalogProcessorRelationResult, + type CatalogProcessorErrorResult as _CatalogProcessorErrorResult, + type CatalogProcessorRefreshKeysResult as _CatalogProcessorRefreshKeysResult, + type CatalogProcessorResult as _CatalogProcessorResult, + type EntityProvider as _EntityProvider, + type EntityProviderConnection as _EntityProviderConnection, + type EntityProviderMutation as _EntityProviderMutation, } from '@backstage/plugin-catalog-node'; -import { type LocationSpec as CommonLocationSpec } from '@backstage/plugin-catalog-common'; +import { type LocationSpec as _LocationSpec } from '@backstage/plugin-catalog-common'; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export const locationSpecToMetadataName = nodeLocationSpecToMetadataName; +export const locationSpecToMetadataName = _locationSpecToMetadataName; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export const locationSpecToLocationEntity = nodeLocationSpecToLocationEntity; +export const locationSpecToLocationEntity = _locationSpecToLocationEntity; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export const processingResult = nodeProcessingResult; +export const processingResult = _processingResult; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type DeferredEntity = NodeDeferredEntity; +export type DeferredEntity = _DeferredEntity; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type EntityRelationSpec = NodeEntityRelationSpec; +export type EntityRelationSpec = _EntityRelationSpec; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessor = NodeCatalogProcessor; +export type CatalogProcessor = _CatalogProcessor; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorParser = NodeCatalogProcessorParser; +export type CatalogProcessorParser = _CatalogProcessorParser; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorCache = NodeCatalogProcessorCache; +export type CatalogProcessorCache = _CatalogProcessorCache; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorEmit = NodeCatalogProcessorEmit; +export type CatalogProcessorEmit = _CatalogProcessorEmit; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorLocationResult = NodeCatalogProcessorLocationResult; +export type CatalogProcessorLocationResult = _CatalogProcessorLocationResult; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorEntityResult = NodeCatalogProcessorEntityResult; +export type CatalogProcessorEntityResult = _CatalogProcessorEntityResult; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorRelationResult = NodeCatalogProcessorRelationResult; +export type CatalogProcessorRelationResult = _CatalogProcessorRelationResult; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorErrorResult = NodeCatalogProcessorErrorResult; +export type CatalogProcessorErrorResult = _CatalogProcessorErrorResult; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ export type CatalogProcessorRefreshKeysResult = - NodeCatalogProcessorRefreshKeysResult; + _CatalogProcessorRefreshKeysResult; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type CatalogProcessorResult = NodeCatalogProcessorResult; +export type CatalogProcessorResult = _CatalogProcessorResult; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type EntityProvider = NodeEntityProvider; +export type EntityProvider = _EntityProvider; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type EntityProviderConnection = NodeEntityProviderConnection; +export type EntityProviderConnection = _EntityProviderConnection; /** * @public * @deprecated import from `@backstage/plugin-catalog-node` instead */ -export type EntityProviderMutation = NodeEntityProviderMutation; +export type EntityProviderMutation = _EntityProviderMutation; /** * Holds the entity location information. @@ -140,4 +140,4 @@ export type EntityProviderMutation = NodeEntityProviderMutation; * @public * @deprecated use the same type from `@backstage/plugin-catalog-common` instead */ -export type LocationSpec = CommonLocationSpec; +export type LocationSpec = _LocationSpec; From d293f4aaf8353b63ddff16f5a75f29e752a6bc45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 9 Mar 2023 14:39:27 +0100 Subject: [PATCH 33/43] helped a lost changeset to find its way home MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- {plugins/.changeset => .changeset}/dull-adults-drum.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {plugins/.changeset => .changeset}/dull-adults-drum.md (100%) diff --git a/plugins/.changeset/dull-adults-drum.md b/.changeset/dull-adults-drum.md similarity index 100% rename from plugins/.changeset/dull-adults-drum.md rename to .changeset/dull-adults-drum.md From e5a714f1f9b25de49c566f349896d843ffcf495a Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 9 Mar 2023 14:51:34 +0100 Subject: [PATCH 34/43] microsite: move files from old microsite Signed-off-by: Johan Haals --- .../blog/2020-03-16-announcing-backstage.md | 0 .../blog/2020-03-18-what-is-backstage.md | 0 .../blog/2020-04-06-lighthouse-plugin.md | 0 ...0-04-30-how-to-quickly-set-up-backstage.md | 0 .../blog/2020-05-14-tech-radar-plugin.md | 0 ...aveworks-covid-19-app-uses-backstage-ui.md | 0 .../2020-05-22-phase-2-service-catalog.md | 0 ...0-06-22-backstage-service-catalog-alpha.md | 0 ...hentication-in-backstage-using-passport.md | 0 ...announcing-backstage-software-templates.md | 0 .../blog/2020-09-08-announcing-tech-docs.md | 0 .../blog/2020-09-23-backstage-cncf-sandbox.md | 0 .../2020-09-30-backstage-design-system.md | 0 .../blog/2020-09-30-plugin-marketplace.md | 0 .../blog/2020-10-22-cost-insights-plugin.md | 0 .../blog/2020-12-22-stability-index.md | 0 ...e-feature-kubernetes-for-service-owners.md | 0 .../blog/2021-05-20-adopting-backstage.md | 0 ...2021-06-22-spotify-backstage-is-growing.md | 0 ...24-announcing-backstage-search-platform.md | 0 ...7-26-software-templates-are-now-in-beta.md | 0 ...2021-09-16-the-techdocs-beta-has-landed.md | 0 .../blog/2021-09-30-50-public-adopters.md | 0 .../blog/2021-12-20-backstage-wrapped-2021.md | 0 ...2022-01-25-backstage-homepage-templates.md | 0 .../2022-03-04-backstage-upgrade-helper.md | 0 .../blog/2022-03-16-backstage-turns-two.md | 0 .../blog/2022-03-17-backstage-1.0.md | 0 .../2022-05-13-techdocs-addon-framework.md | 0 ...22-07-19-releasing-backstage-search-1.0.md | 0 .../2022-08-23-backstage-security-audit.md | 0 .../2022-09-08-fyi-plugin-analytics-api.md | 0 .../2022-10-28-backstagecon-kubecon-2022.md | 0 ...dation-introduction-to-backstage-course.md | 0 .../blog/2022-12-19-backstage-wrapped-2022.md | 0 .../2023-01-31-incremental-entity-provider.md | 0 .../blog/2023-02-06-whats-ahead-in-2023.md | 0 .../blog/2023-02-15-backend-system-alpha.md | 0 .../blog/assets/2/1.png | Bin .../blog/assets/2/2.png | Bin .../blog/assets/2/3.png | Bin .../blog/assets/2/4.png | Bin .../blog/assets/2/5.png | Bin .../blog/assets/2/screen.gif | Bin .../blog/assets/2/spotify-labs-header.png | Bin ...ks-firekube-covid-19-spotify-backstage.png | Bin .../assets/20-05-20/Service_Catalog_MVP.png | Bin .../20-05-20/Service_Catalog_MVP_service.png | Bin .../blog/assets/20-05-20/tabs.png | Bin .../blog/assets/20-07-01/auth-landing.png | Bin .../blog/assets/20-07-01/auth-sidebar.png | Bin .../assets/20-10-22/cost-insights-1-dau.gif | Bin .../20-10-22/cost-insights-2-engineer.png | Bin .../assets/20-10-22/cost-insights-3-data.png | Bin .../blog/assets/2020-08-05/cards.png | Bin .../blog/assets/2020-08-05/catalog.png | Bin .../assets/2020-08-05/create-component.png | Bin .../blog/assets/2020-08-05/feature.mp4 | Bin .../blog/assets/2020-08-05/template-form.png | Bin .../blog/assets/2020-08-05/templates.png | Bin .../2020-12-22/stability-index-hero.gif | Bin .../blog/assets/2020-12-22/versions-bump.png | Bin .../blog/assets/2022-10-28/groupimage.jpg | Bin .../blog/assets/2022-10-28/preview.png | Bin .../assets/2022-10-28/project_meeting.jpg | Bin .../2022-10-28/real_project_meeting.jpeg | Bin .../assets/2022-12-19/bowie-the-beaver.png | Bin .../github-metrics-for-backstage-io.png | Bin .../public-backstage-adopters-2022.png | Bin .../blog/assets/2022-12-19/wrapped.png | Bin .../assets/2023-01-31/catalog-pipeline.png | Bin .../blog/assets/2023-01-31/damon.jpg | Bin .../blog/assets/2023-02-06/whats-ahead.png | Bin .../2023-02-15/backend-system-alpha.gif | Bin .../backend-system-architecture.png | Bin .../assets/21-01-12/backstage-k8s-1-hero.gif | Bin .../21-01-12/backstage-k8s-2-deployments.png | Bin .../backstage-k8s-3-error-reporting.png | Bin .../backstage-k8s-4-autoscaling-limits.png | Bin .../backstage-k8s-5-autoscaling-limits.png | Bin .../blog/assets/21-05-20/1000-engineers.png | Bin .../assets/21-05-20/1000-engineers_v.2.png | Bin .../assets/21-05-20/1000-plus-engineers.png | Bin .../21-05-20/1000-plus-engineers_v.2.png | Bin .../blog/assets/21-05-20/200-engineers.png | Bin .../assets/21-05-20/200-engineers_v.2.png | Bin .../assets/21-05-20/create-manage-explore.gif | Bin .../blog/assets/21-05-20/create.gif | Bin .../blog/assets/21-05-20/explore.gif | Bin .../blog/assets/21-05-20/manage.gif | Bin .../21-06-22/backstage-community-sessions.png | Bin .../blog/assets/21-06-22/gh-reviewers.png | Bin .../21-06-22/spotify-backstage-adopters.png | Bin .../21-06-22/spotify-backstage-header.gif | Bin .../21-06-24/backstage-search-platform.png | Bin .../blog/assets/21-06-24/jobs-to-be-done.png | Bin .../blog/assets/21-06-24/search-results.png | Bin .../backstage-software-templates-beta.gif | Bin .../assets/21-07-26/custom-components.gif | Bin .../assets/21-07-26/example-template-code.png | Bin .../blog/assets/21-07-26/steps-running.gif | Bin .../21-09-16/backstage-techdocs-beta.gif | Bin .../blog/assets/21-09-16/refresh-button.gif | Bin .../21-09-16/techdocs-custom-homepage.png | Bin .../blog/assets/21-09-16/techdocs-ref.png | Bin .../assets/21-09-30/50-public-adopters.png | Bin .../blog/assets/21-09-30/backstage-stats.png | Bin .../21-09-30/public-backstage-adopters.png | Bin .../21-12-20/Backstage-background-02-2021.png | Bin .../21-12-20/backstage-wrapped-2021.png | Bin .../public-backstage-adopters-2021.png | Bin .../22-01-25/composed-backstage-homepage.png | Bin .../22-01-25/default-homepage-template.png | Bin .../22-01-25/homepage-components-figma.png | Bin .../homepage-template-blog-post-header.png | Bin .../22-01-25/spotify-backstage-homepage.png | Bin .../backstage-upgrade-helper-post-header.png | Bin .../22-03-04/backstage-upgrade-helper.gif | Bin .../22-03-16/backstage-2nd-birthday.gif | Bin .../blog/assets/22-03-16/release.1.0.gif | Bin .../assets/22-05-13/techdocs-addon-header.gif | Bin .../blog/assets/22-05-13/techdocs-addon1.png | Bin .../blog/assets/22-05-13/techdocs-addon2.png | Bin .../blog/assets/22-05-13/techdocs-addon3.png | Bin .../blog/assets/22-05-13/techdocs-addon4.png | Bin .../blog/assets/22-05-13/techdocs-addon5.png | Bin .../releasing-backstage-search-v1.png | Bin .../22-08-23/X41-Backstage-Audit-2022.pdf | Bin .../22-08-23/backstage-security-audit.png | Bin .../assets/22-09-08/analytics-api-fyi.png | Bin ...-Developer-Portals-Made-Easy-2-768x432.png | Bin .../blog/assets/3/audit-list.png | Bin .../blog/assets/3/audit-view.png | Bin .../blog/assets/3/create-audit.png | Bin .../blog/assets/3/lead-copy.png | Bin .../blog/assets/3/lead.png | Bin .../blog/assets/4/create-app.png | Bin .../blog/assets/4/welcome.png | Bin .../blog/assets/5/lead.png | Bin .../blog/assets/6/header.png | Bin .../blog/assets/Backstage-mural-DS.png | Bin .../assets/announcing-techdocs/discover1.png | Bin .../assets/announcing-techdocs/discover2.png | Bin .../announcing-techdocs/docs-in-backstage.png | Bin .../announcing-techdocs/feedback-loop1.png | Bin .../announcing-techdocs/feedback-loop2.png | Bin .../announcing-techdocs/github-issues.png | Bin .../assets/announcing-techdocs/metrics.png | Bin .../blog/assets/backstage-DS-header.png | Bin .../blog/assets/backstage-discord-DS.png | Bin .../blog/assets/backstage-figma1-DS.png | Bin .../blog/assets/backstage-figma2-ds.png | Bin .../blog/assets/backstage-github-ds.png | Bin .../blog/assets/backstage-guide-DS.png | Bin .../blog/assets/backstage-guidelines-ds.png | Bin .../blog/assets/backstage-storybook-ds.png | Bin .../blog/assets/backstage-world-DS.png | Bin .../blog/assets/blog_1.png | Bin .../blog/assets/cncf-sandbox/cncf.png | Bin .../blog/assets/illustration.svg | 0 .../blog/assets/marketplace.png | Bin .../data/on-demand/20211117-1.yaml | 0 .../data/on-demand/20211118-1.yaml | 0 .../data/on-demand/20211215-1.yaml | 0 .../data/on-demand/20211216-1.yaml | 0 .../data/on-demand/20220216-1.yaml | 0 .../data/on-demand/20220223-1.yaml | 0 .../data/on-demand/20220316-1.yaml | 0 .../data/on-demand/20220323-1.yaml | 0 .../data/on-demand/20220420-1.yaml | 0 .../data/on-demand/20220427-1.yaml | 0 .../data/on-demand/20220518-1.yaml | 0 .../data/on-demand/20220525-1.yaml | 0 .../data/on-demand/20220615-1.yaml | 0 .../data/on-demand/20220622-1.yaml | 0 .../data/on-demand/20220720-1.yaml | 0 .../data/on-demand/20220727-1.yaml | 0 .../data/on-demand/20220817-1.yaml | 0 .../data/on-demand/20220824-1.yaml | 0 .../data/on-demand/20220921-1.yaml | 0 .../data/on-demand/20220928-1.yaml | 0 .../data/plugins/adr.yaml | 0 .../data/plugins/airbrake.yaml | 0 .../data/plugins/allure.yaml | 0 .../data/plugins/announcements.yaml | 0 .../data/plugins/api-docs.yaml | 0 .../data/plugins/apollo-explorer.yaml | 0 .../data/plugins/argo-cd.yaml | 0 .../data/plugins/aws-cloudformation.yaml | 0 .../data/plugins/aws-codesuite.yaml | 0 .../data/plugins/aws-lambda.yaml | 0 .../data/plugins/aws-proton.yaml | 0 .../data/plugins/azure-pipelines.yaml | 0 .../data/plugins/azure-resources.yaml | 0 .../data/plugins/azure-sites.yaml | 0 .../data/plugins/azure-spring-apps.yml | 0 .../backstage-analytics-module-ga.yaml | 0 .../data/plugins/backstage-kubernetes.yaml | 0 .../plugins/backstage-plugin-api-linter.yaml | 0 .../plugins/backstage-plugin-ldap-auth.yml | 0 .../plugins/backstage-search-platform.yaml | 0 .../plugins/backstage-software-catalog.yaml | 0 .../plugins/backstage-software-templates.yaml | 0 .../data/plugins/backstage-techdocs.yaml | 0 .../data/plugins/badges.yaml | 0 .../data/plugins/bazaar.yaml | 0 .../data/plugins/betterscan.yaml | 0 .../data/plugins/bitrise.yaml | 0 .../data/plugins/blackduck.yaml | 0 .../data/plugins/bugsnag.yaml | 0 .../data/plugins/buildkite.yaml | 0 .../catalog-backend-module-puppetdb.yaml | 0 .../data/plugins/catalog-graph.yaml | 0 .../data/plugins/cicd-statistics.yaml | 0 .../data/plugins/circleci.yaml | 0 .../data/plugins/cloud-build.yaml | 0 .../data/plugins/cloud-carbon-footprint.yaml | 0 .../data/plugins/cloudify.yaml | 0 .../data/plugins/cloudsmith.yaml | 0 .../data/plugins/codescene.yaml | 0 .../data/plugins/cortex.yaml | 0 .../data/plugins/cost-insights.yaml | 0 .../data/plugins/datadog.yaml | 0 .../data/plugins/dependencytrack | 0 .../data/plugins/dora-metrics.yaml | 0 .../data/plugins/dynatrace.yaml | 0 .../data/plugins/entity-feedback.yaml | 0 .../data/plugins/firebase-functions.yaml | 0 .../data/plugins/firehydrant.yaml | 0 .../data/plugins/fossa.yaml | 0 .../data/plugins/gcp-projects.yaml | 0 .../data/plugins/git-release-manager.yaml | 0 .../data/plugins/github-actions.yaml | 0 .../data/plugins/github-insights.yaml | 0 .../plugins/github-pull-requests-board.yaml | 0 .../data/plugins/github-pull-requests.yaml | 0 .../data/plugins/gitlab.yaml | 0 .../data/plugins/gitops-cluster.yaml | 0 .../data/plugins/gocd.yaml | 0 .../data/plugins/grafana.yaml | 0 .../data/plugins/graphiql.yaml | 0 .../data/plugins/graphql-voyager.yaml | 0 .../data/plugins/grpc-playground.yaml | 0 .../data/plugins/harbor.yaml | 0 .../data/plugins/harness-ci-cd.yaml | 0 .../data/plugins/harness-feature-flags.yaml | 0 .../data/plugins/home.yaml | 0 .../data/plugins/hoop.yaml | 0 .../data/plugins/humanitec.yaml | 0 .../data/plugins/ilert.yaml | 0 .../data/plugins/jenkins.yaml | 0 .../data/plugins/jira.yaml | 0 .../data/plugins/kafka.yaml | 0 .../data/plugins/kpt-config-as-data.yaml | 0 .../data/plugins/kubevela.yaml | 0 .../data/plugins/lighthouse.yaml | 0 .../data/plugins/new-relic.yaml | 0 .../data/plugins/newrelic-dashboard.yaml | 0 .../data/plugins/octopus-deploy.yaml | 0 .../data/plugins/okta-entity-providers.yaml | 0 .../data/plugins/opsgenie.yaml | 0 .../data/plugins/opslevel-maturity.yaml | 0 .../data/plugins/pager-duty.yaml | 0 .../data/plugins/periskop.yaml | 0 .../data/plugins/playlist.yaml | 0 .../data/plugins/prometheus.yaml | 0 .../data/plugins/qeta.yaml | 0 .../data/plugins/rollbar.yaml | 0 .../data/plugins/rootly.yaml | 0 .../data/plugins/s3-viewer.yaml | 0 .../plugins/scaffolder-backend-dotnet.yaml | 0 .../data/plugins/scaffolder-backend-git.yaml | 0 .../scaffolder-backend-module-rails.yaml | 0 .../scaffolder-backend-roadie-aws.yaml | 0 ...caffolder-backend-roadie-http-request.yaml | 0 .../scaffolder-backend-roadie-utils.yaml | 0 .../data/plugins/score-card.yaml | 0 .../data/plugins/security-insights.yaml | 0 .../data/plugins/sentry.yaml | 0 .../data/plugins/shortcuts.yaml | 0 .../data/plugins/snyk-security.yaml | 0 .../data/plugins/sonarqube.yaml | 0 .../data/plugins/splunk-on-call.yaml | 0 .../data/plugins/stack-overflow.yaml | 0 .../data/plugins/stackstorm.yaml | 0 .../data/plugins/tech-insights.yaml | 0 .../data/plugins/tech-radar.yaml | 0 .../data/plugins/tekton-pipelines.yaml | 0 .../data/plugins/todo.yaml | 0 .../data/plugins/toolbox.yaml | 0 .../data/plugins/torque.yaml | 0 .../data/plugins/travis-ci.yaml | 0 .../data/plugins/vault.yaml | 0 .../data/plugins/xcmetrics.yaml | 0 microsite-next/docusaurus.config.js | 2 +- microsite-next/src/pages/on-demand/index.tsx | 2 +- microsite-next/src/pages/plugins/index.tsx | 2 +- microsite-next/static | 1 - .../static/.nojekyll | 0 {microsite => microsite-next}/static/CNAME | 0 .../backstage-kubernetes-icon-1.gif | Bin .../animations/backstage-logos-hero-8.gif | Bin .../animations/backstage-plugin-icon-2.gif | Bin .../backstage-search-platform-icon-1.gif | Bin .../backstage-software-catalog-icon-1.gif | Bin .../backstage-software-templates-icon-5.gif | Bin .../animations/backstage-speed-paradox-7.gif | Bin .../backstage-standards-paradox-4.gif | Bin .../animations/backstage-techdocs-icon-1.gif | Bin .../static/css/custom.css | 0 .../static/css/on-demand.css | 0 .../static/css/plugins.css | 0 .../static/img/adr-logo.png | Bin .../static/img/android-chrome-192x192.png | Bin .../static/img/android-chrome-512x512.png | Bin .../static/img/apollo-explorer.png | Bin .../static/img/apple-touch-icon.png | Bin .../static/img/azure-pipelines.svg | 0 .../static/img/b-sessions.png | Bin .../static/img/backstage-k8s.svg | 0 .../static/img/backstage-logo-cncf.svg | 0 .../static/img/backstage-search-platform.svg | 0 .../static/img/backstage-software-catalog.svg | 0 .../img/backstage-software-templates.svg | 0 .../static/img/backstage-techdocs.svg | 0 .../static/img/badges.svg | 0 .../static/img/bazaar.svg | 0 .../static/img/cards-mobile.png | Bin .../static/img/cards-plugins.png | Bin .../static/img/cards-wide.png | Bin .../static/img/cards.png | Bin .../static/img/catalog-graph.svg | 0 .../static/img/cicd-statistics.svg | 0 .../static/img/circleci.png | Bin .../static/img/cncf-color.svg | 0 .../static/img/cncf-white.svg | 0 .../static/img/code.gif | Bin .../static/img/code.png | Bin .../static/img/codescene_logo.svg | 0 .../static/img/compliance.svg | 0 .../img/components-with-filter-small.png | Bin .../static/img/components-with-filter.png | Bin .../static/img/cortex.png | Bin .../static/img/cost-insights.png | Bin .../static/img/demo-illustration.svg | 0 .../static/img/demo-screen.png | Bin .../static/img/developers.svg | 0 .../static/img/docs-like-code.png | Bin .../static/img/dot.svg | 0 .../static/img/dynatrace.svg | 0 .../static/img/embraced.svg | 0 .../static/img/enfuse.png | Bin .../static/img/entity-feedback-logo.png | Bin .../static/img/favicon-16x16.png | Bin .../static/img/favicon-32x32.png | Bin .../static/img/favicon.ico | Bin .../static/img/favicon.svg | 0 .../static/img/ga-icon.png | Bin .../static/img/git-release-manager-logo.svg | 0 .../img/github-pull-requests-board-logo.svg | 0 .../static/img/gke-logo.png | Bin .../static/img/home.png | Bin .../static/img/humanitec-logo.png | Bin .../static/img/laptop-screen.svg | 0 .../static/img/laptop.svg | 0 .../static/img/lighthouse.png | Bin .../static/img/logo-black-248x250.png | Bin .../static/img/logo-gradient-on-dark.svg | 0 .../static/img/logo.svg | 0 .../static/img/logos-background.svg | 0 .../static/img/logos-signature.svg | 0 .../static/img/logos.svg | 0 .../static/img/mstile-150x150.png | Bin .../static/img/news-fpo.png | Bin .../static/img/octopus-deploy.svg | 0 .../static/img/okay.png | Bin .../static/img/open-platform.svg | 0 .../static/img/openmic.jpeg | Bin .../static/img/partner-logo-frontside.png | Bin .../static/img/partner-logo-roadie.png | Bin .../static/img/partner-logo-thoughtworks.png | Bin .../static/img/partner-logo-vmware.png | Bin .../static/img/photo-montage.svg | 0 .../static/img/playlist-logo.png | Bin .../static/img/plugin-announcements-logo.png | Bin .../static/img/plugin-mobile.svg | 0 .../static/img/plugin.svg | 0 .../static/img/plugins.png | Bin .../static/img/qeta-logo.png | Bin .../static/img/rails-icon.png | Bin .../static/img/roadie-newsletter.png | Bin .../static/img/s3-bucket.svg | 0 .../img/scaffolder-backend-dotnet-icon.png | Bin .../img/scaffolder-http-request-logo.svg | 0 .../static/img/scaffolder-utils-logo.png | Bin .../static/img/score-card-plugin-logo.png | Bin .../static/img/screen.gif | Bin .../img/search-platform-overview-small.png | Bin .../static/img/search-platform-overview.png | Bin .../static/img/service-cards.png | Bin .../static/img/sharing-opengraph.png | Bin .../static/img/shortcuts.svg | 0 .../static/img/sonarqube-icon.svg | 0 .../static/img/splunk-black-white-bg.png | Bin .../static/img/spotlight.png | Bin .../static/img/spring-boot-service.png | Bin .../static/img/stack-overflow-logo.svg | 0 .../static/img/stackstorm.png | Bin .../static/img/techdocs-static-mobile.png | Bin .../static/img/techdocs-web.png | Bin .../static/img/techdocs.gif | Bin .../static/img/techdocs.png | Bin .../static/img/techdocs2.gif | Bin .../static/img/techs.png | Bin .../static/img/todo-logo.png | Bin .../static/img/toolbox-logo.png | Bin .../static/img/twitter-summary.png | Bin .../static/img/vault.png | Bin .../static/img/xcmetrics-icon.png | Bin .../static/js/dismissable-banner.js | 0 .../static/js/medium-zoom.js | 0 .../static/js/scroll-nav-to-view-in-docs.js | 0 .../Backstage_Identity_Assets_Overview.pdf | Bin .../Backstage_Identity_Assets_Artwork_RGB.ai | 0 ...ntity_Assets_Artwork_RGB_05 Logo_Black.jpg | Bin ...ntity_Assets_Artwork_RGB_06_Icon_Black.jpg | Bin .../Backstage_Identity_Assets_Artwork_RGB.pdf | 0 .../pdf/Individual/01_Logo_White.pdf | Bin .../pdf/Individual/02_Icon_White.pdf | Bin .../pdf/Individual/03_Logo_Teal.pdf | Bin .../pdf/Individual/04_Icon_Teal.pdf | Bin .../pdf/Individual/05_Logo_Black.pdf | Bin .../pdf/Individual/06_Icon_Black.pdf | Bin .../pdf/Individual/07_Large Icon_Gradient.pdf | Bin ...ntity_Assets_Artwork_RGB_01_Logo_White.png | Bin ...ntity_Assets_Artwork_RGB_02_Icon_White.png | Bin ...entity_Assets_Artwork_RGB_03_Logo_Teal.png | Bin ...entity_Assets_Artwork_RGB_04_Icon_Teal.png | Bin ...ntity_Assets_Artwork_RGB_05_Logo_Black.png | Bin ...ntity_Assets_Artwork_RGB_06_Icon_Black.png | Bin ...ets_Artwork_RGB_07_Large_Icon_Gradient.png | Bin .../static/logo_assets/svg/Icon_Black.svg | 0 .../static/logo_assets/svg/Icon_Gradient.svg | 0 .../static/logo_assets/svg/Icon_Teal.svg | 0 .../static/logo_assets/svg/Icon_White.svg | 0 .../static/logo_assets/svg/Logo_Black.svg | 0 .../static/logo_assets/svg/Logo_Teal.svg | 0 .../static/logo_assets/svg/Logo_White.svg | 0 .../static/schema/config-v1 | 0 microsite/scripts/verify-sidebars.js | 54 ------------------ 450 files changed, 3 insertions(+), 58 deletions(-) rename {microsite => microsite-next}/blog/2020-03-16-announcing-backstage.md (100%) rename {microsite => microsite-next}/blog/2020-03-18-what-is-backstage.md (100%) rename {microsite => microsite-next}/blog/2020-04-06-lighthouse-plugin.md (100%) rename {microsite => microsite-next}/blog/2020-04-30-how-to-quickly-set-up-backstage.md (100%) rename {microsite => microsite-next}/blog/2020-05-14-tech-radar-plugin.md (100%) rename {microsite => microsite-next}/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md (100%) rename {microsite => microsite-next}/blog/2020-05-22-phase-2-service-catalog.md (100%) rename {microsite => microsite-next}/blog/2020-06-22-backstage-service-catalog-alpha.md (100%) rename {microsite => microsite-next}/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md (100%) rename {microsite => microsite-next}/blog/2020-08-05-announcing-backstage-software-templates.md (100%) rename {microsite => microsite-next}/blog/2020-09-08-announcing-tech-docs.md (100%) rename {microsite => microsite-next}/blog/2020-09-23-backstage-cncf-sandbox.md (100%) rename {microsite => microsite-next}/blog/2020-09-30-backstage-design-system.md (100%) rename {microsite => microsite-next}/blog/2020-09-30-plugin-marketplace.md (100%) rename {microsite => microsite-next}/blog/2020-10-22-cost-insights-plugin.md (100%) rename {microsite => microsite-next}/blog/2020-12-22-stability-index.md (100%) rename {microsite => microsite-next}/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md (100%) rename {microsite => microsite-next}/blog/2021-05-20-adopting-backstage.md (100%) rename {microsite => microsite-next}/blog/2021-06-22-spotify-backstage-is-growing.md (100%) rename {microsite => microsite-next}/blog/2021-06-24-announcing-backstage-search-platform.md (100%) rename {microsite => microsite-next}/blog/2021-07-26-software-templates-are-now-in-beta.md (100%) rename {microsite => microsite-next}/blog/2021-09-16-the-techdocs-beta-has-landed.md (100%) rename {microsite => microsite-next}/blog/2021-09-30-50-public-adopters.md (100%) rename {microsite => microsite-next}/blog/2021-12-20-backstage-wrapped-2021.md (100%) rename {microsite => microsite-next}/blog/2022-01-25-backstage-homepage-templates.md (100%) rename {microsite => microsite-next}/blog/2022-03-04-backstage-upgrade-helper.md (100%) rename {microsite => microsite-next}/blog/2022-03-16-backstage-turns-two.md (100%) rename {microsite => microsite-next}/blog/2022-03-17-backstage-1.0.md (100%) rename {microsite => microsite-next}/blog/2022-05-13-techdocs-addon-framework.md (100%) rename {microsite => microsite-next}/blog/2022-07-19-releasing-backstage-search-1.0.md (100%) rename {microsite => microsite-next}/blog/2022-08-23-backstage-security-audit.md (100%) rename {microsite => microsite-next}/blog/2022-09-08-fyi-plugin-analytics-api.md (100%) rename {microsite => microsite-next}/blog/2022-10-28-backstagecon-kubecon-2022.md (100%) rename {microsite => microsite-next}/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md (100%) rename {microsite => microsite-next}/blog/2022-12-19-backstage-wrapped-2022.md (100%) rename {microsite => microsite-next}/blog/2023-01-31-incremental-entity-provider.md (100%) rename {microsite => microsite-next}/blog/2023-02-06-whats-ahead-in-2023.md (100%) rename {microsite => microsite-next}/blog/2023-02-15-backend-system-alpha.md (100%) rename {microsite => microsite-next}/blog/assets/2/1.png (100%) rename {microsite => microsite-next}/blog/assets/2/2.png (100%) rename {microsite => microsite-next}/blog/assets/2/3.png (100%) rename {microsite => microsite-next}/blog/assets/2/4.png (100%) rename {microsite => microsite-next}/blog/assets/2/5.png (100%) rename {microsite => microsite-next}/blog/assets/2/screen.gif (100%) rename {microsite => microsite-next}/blog/assets/2/spotify-labs-header.png (100%) rename {microsite => microsite-next}/blog/assets/20-05-14/weaveworks-firekube-covid-19-spotify-backstage.png (100%) rename {microsite => microsite-next}/blog/assets/20-05-20/Service_Catalog_MVP.png (100%) rename {microsite => microsite-next}/blog/assets/20-05-20/Service_Catalog_MVP_service.png (100%) rename {microsite => microsite-next}/blog/assets/20-05-20/tabs.png (100%) rename {microsite => microsite-next}/blog/assets/20-07-01/auth-landing.png (100%) rename {microsite => microsite-next}/blog/assets/20-07-01/auth-sidebar.png (100%) rename {microsite => microsite-next}/blog/assets/20-10-22/cost-insights-1-dau.gif (100%) rename {microsite => microsite-next}/blog/assets/20-10-22/cost-insights-2-engineer.png (100%) rename {microsite => microsite-next}/blog/assets/20-10-22/cost-insights-3-data.png (100%) rename {microsite => microsite-next}/blog/assets/2020-08-05/cards.png (100%) rename {microsite => microsite-next}/blog/assets/2020-08-05/catalog.png (100%) rename {microsite => microsite-next}/blog/assets/2020-08-05/create-component.png (100%) rename {microsite => microsite-next}/blog/assets/2020-08-05/feature.mp4 (100%) rename {microsite => microsite-next}/blog/assets/2020-08-05/template-form.png (100%) rename {microsite => microsite-next}/blog/assets/2020-08-05/templates.png (100%) rename {microsite => microsite-next}/blog/assets/2020-12-22/stability-index-hero.gif (100%) rename {microsite => microsite-next}/blog/assets/2020-12-22/versions-bump.png (100%) rename {microsite => microsite-next}/blog/assets/2022-10-28/groupimage.jpg (100%) rename {microsite => microsite-next}/blog/assets/2022-10-28/preview.png (100%) rename {microsite => microsite-next}/blog/assets/2022-10-28/project_meeting.jpg (100%) rename {microsite => microsite-next}/blog/assets/2022-10-28/real_project_meeting.jpeg (100%) rename {microsite => microsite-next}/blog/assets/2022-12-19/bowie-the-beaver.png (100%) rename {microsite => microsite-next}/blog/assets/2022-12-19/github-metrics-for-backstage-io.png (100%) rename {microsite => microsite-next}/blog/assets/2022-12-19/public-backstage-adopters-2022.png (100%) rename {microsite => microsite-next}/blog/assets/2022-12-19/wrapped.png (100%) rename {microsite => microsite-next}/blog/assets/2023-01-31/catalog-pipeline.png (100%) rename {microsite => microsite-next}/blog/assets/2023-01-31/damon.jpg (100%) rename {microsite => microsite-next}/blog/assets/2023-02-06/whats-ahead.png (100%) rename {microsite => microsite-next}/blog/assets/2023-02-15/backend-system-alpha.gif (100%) rename {microsite => microsite-next}/blog/assets/2023-02-15/backend-system-architecture.png (100%) rename {microsite => microsite-next}/blog/assets/21-01-12/backstage-k8s-1-hero.gif (100%) rename {microsite => microsite-next}/blog/assets/21-01-12/backstage-k8s-2-deployments.png (100%) rename {microsite => microsite-next}/blog/assets/21-01-12/backstage-k8s-3-error-reporting.png (100%) rename {microsite => microsite-next}/blog/assets/21-01-12/backstage-k8s-4-autoscaling-limits.png (100%) rename {microsite => microsite-next}/blog/assets/21-01-12/backstage-k8s-5-autoscaling-limits.png (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/1000-engineers.png (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/1000-engineers_v.2.png (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/1000-plus-engineers.png (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/1000-plus-engineers_v.2.png (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/200-engineers.png (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/200-engineers_v.2.png (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/create-manage-explore.gif (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/create.gif (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/explore.gif (100%) rename {microsite => microsite-next}/blog/assets/21-05-20/manage.gif (100%) rename {microsite => microsite-next}/blog/assets/21-06-22/backstage-community-sessions.png (100%) rename {microsite => microsite-next}/blog/assets/21-06-22/gh-reviewers.png (100%) rename {microsite => microsite-next}/blog/assets/21-06-22/spotify-backstage-adopters.png (100%) rename {microsite => microsite-next}/blog/assets/21-06-22/spotify-backstage-header.gif (100%) rename {microsite => microsite-next}/blog/assets/21-06-24/backstage-search-platform.png (100%) rename {microsite => microsite-next}/blog/assets/21-06-24/jobs-to-be-done.png (100%) rename {microsite => microsite-next}/blog/assets/21-06-24/search-results.png (100%) rename {microsite => microsite-next}/blog/assets/21-07-26/backstage-software-templates-beta.gif (100%) rename {microsite => microsite-next}/blog/assets/21-07-26/custom-components.gif (100%) rename {microsite => microsite-next}/blog/assets/21-07-26/example-template-code.png (100%) rename {microsite => microsite-next}/blog/assets/21-07-26/steps-running.gif (100%) rename {microsite => microsite-next}/blog/assets/21-09-16/backstage-techdocs-beta.gif (100%) rename {microsite => microsite-next}/blog/assets/21-09-16/refresh-button.gif (100%) rename {microsite => microsite-next}/blog/assets/21-09-16/techdocs-custom-homepage.png (100%) rename {microsite => microsite-next}/blog/assets/21-09-16/techdocs-ref.png (100%) rename {microsite => microsite-next}/blog/assets/21-09-30/50-public-adopters.png (100%) rename {microsite => microsite-next}/blog/assets/21-09-30/backstage-stats.png (100%) rename {microsite => microsite-next}/blog/assets/21-09-30/public-backstage-adopters.png (100%) rename {microsite => microsite-next}/blog/assets/21-12-20/Backstage-background-02-2021.png (100%) rename {microsite => microsite-next}/blog/assets/21-12-20/backstage-wrapped-2021.png (100%) rename {microsite => microsite-next}/blog/assets/21-12-20/public-backstage-adopters-2021.png (100%) rename {microsite => microsite-next}/blog/assets/22-01-25/composed-backstage-homepage.png (100%) rename {microsite => microsite-next}/blog/assets/22-01-25/default-homepage-template.png (100%) rename {microsite => microsite-next}/blog/assets/22-01-25/homepage-components-figma.png (100%) rename {microsite => microsite-next}/blog/assets/22-01-25/homepage-template-blog-post-header.png (100%) rename {microsite => microsite-next}/blog/assets/22-01-25/spotify-backstage-homepage.png (100%) rename {microsite => microsite-next}/blog/assets/22-03-04/backstage-upgrade-helper-post-header.png (100%) rename {microsite => microsite-next}/blog/assets/22-03-04/backstage-upgrade-helper.gif (100%) rename {microsite => microsite-next}/blog/assets/22-03-16/backstage-2nd-birthday.gif (100%) rename {microsite => microsite-next}/blog/assets/22-03-16/release.1.0.gif (100%) rename {microsite => microsite-next}/blog/assets/22-05-13/techdocs-addon-header.gif (100%) rename {microsite => microsite-next}/blog/assets/22-05-13/techdocs-addon1.png (100%) rename {microsite => microsite-next}/blog/assets/22-05-13/techdocs-addon2.png (100%) rename {microsite => microsite-next}/blog/assets/22-05-13/techdocs-addon3.png (100%) rename {microsite => microsite-next}/blog/assets/22-05-13/techdocs-addon4.png (100%) rename {microsite => microsite-next}/blog/assets/22-05-13/techdocs-addon5.png (100%) rename {microsite => microsite-next}/blog/assets/22-07-19/releasing-backstage-search-v1.png (100%) rename {microsite => microsite-next}/blog/assets/22-08-23/X41-Backstage-Audit-2022.pdf (100%) rename {microsite => microsite-next}/blog/assets/22-08-23/backstage-security-audit.png (100%) rename {microsite => microsite-next}/blog/assets/22-09-08/analytics-api-fyi.png (100%) rename {microsite => microsite-next}/blog/assets/22-11-15/Introduction-to-Backstage-Developer-Portals-Made-Easy-2-768x432.png (100%) rename {microsite => microsite-next}/blog/assets/3/audit-list.png (100%) rename {microsite => microsite-next}/blog/assets/3/audit-view.png (100%) rename {microsite => microsite-next}/blog/assets/3/create-audit.png (100%) rename {microsite => microsite-next}/blog/assets/3/lead-copy.png (100%) rename {microsite => microsite-next}/blog/assets/3/lead.png (100%) rename {microsite => microsite-next}/blog/assets/4/create-app.png (100%) rename {microsite => microsite-next}/blog/assets/4/welcome.png (100%) rename {microsite => microsite-next}/blog/assets/5/lead.png (100%) rename {microsite => microsite-next}/blog/assets/6/header.png (100%) rename {microsite => microsite-next}/blog/assets/Backstage-mural-DS.png (100%) rename {microsite => microsite-next}/blog/assets/announcing-techdocs/discover1.png (100%) rename {microsite => microsite-next}/blog/assets/announcing-techdocs/discover2.png (100%) rename {microsite => microsite-next}/blog/assets/announcing-techdocs/docs-in-backstage.png (100%) rename {microsite => microsite-next}/blog/assets/announcing-techdocs/feedback-loop1.png (100%) rename {microsite => microsite-next}/blog/assets/announcing-techdocs/feedback-loop2.png (100%) rename {microsite => microsite-next}/blog/assets/announcing-techdocs/github-issues.png (100%) rename {microsite => microsite-next}/blog/assets/announcing-techdocs/metrics.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-DS-header.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-discord-DS.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-figma1-DS.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-figma2-ds.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-github-ds.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-guide-DS.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-guidelines-ds.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-storybook-ds.png (100%) rename {microsite => microsite-next}/blog/assets/backstage-world-DS.png (100%) rename {microsite => microsite-next}/blog/assets/blog_1.png (100%) rename {microsite => microsite-next}/blog/assets/cncf-sandbox/cncf.png (100%) rename {microsite => microsite-next}/blog/assets/illustration.svg (100%) rename {microsite => microsite-next}/blog/assets/marketplace.png (100%) rename {microsite => microsite-next}/data/on-demand/20211117-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20211118-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20211215-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20211216-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220216-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220223-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220316-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220323-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220420-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220427-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220518-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220525-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220615-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220622-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220720-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220727-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220817-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220824-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220921-1.yaml (100%) rename {microsite => microsite-next}/data/on-demand/20220928-1.yaml (100%) rename {microsite => microsite-next}/data/plugins/adr.yaml (100%) rename {microsite => microsite-next}/data/plugins/airbrake.yaml (100%) rename {microsite => microsite-next}/data/plugins/allure.yaml (100%) rename {microsite => microsite-next}/data/plugins/announcements.yaml (100%) rename {microsite => microsite-next}/data/plugins/api-docs.yaml (100%) rename {microsite => microsite-next}/data/plugins/apollo-explorer.yaml (100%) rename {microsite => microsite-next}/data/plugins/argo-cd.yaml (100%) rename {microsite => microsite-next}/data/plugins/aws-cloudformation.yaml (100%) rename {microsite => microsite-next}/data/plugins/aws-codesuite.yaml (100%) rename {microsite => microsite-next}/data/plugins/aws-lambda.yaml (100%) rename {microsite => microsite-next}/data/plugins/aws-proton.yaml (100%) rename {microsite => microsite-next}/data/plugins/azure-pipelines.yaml (100%) rename {microsite => microsite-next}/data/plugins/azure-resources.yaml (100%) rename {microsite => microsite-next}/data/plugins/azure-sites.yaml (100%) rename {microsite => microsite-next}/data/plugins/azure-spring-apps.yml (100%) rename {microsite => microsite-next}/data/plugins/backstage-analytics-module-ga.yaml (100%) rename {microsite => microsite-next}/data/plugins/backstage-kubernetes.yaml (100%) rename {microsite => microsite-next}/data/plugins/backstage-plugin-api-linter.yaml (100%) rename {microsite => microsite-next}/data/plugins/backstage-plugin-ldap-auth.yml (100%) rename {microsite => microsite-next}/data/plugins/backstage-search-platform.yaml (100%) rename {microsite => microsite-next}/data/plugins/backstage-software-catalog.yaml (100%) rename {microsite => microsite-next}/data/plugins/backstage-software-templates.yaml (100%) rename {microsite => microsite-next}/data/plugins/backstage-techdocs.yaml (100%) rename {microsite => microsite-next}/data/plugins/badges.yaml (100%) rename {microsite => microsite-next}/data/plugins/bazaar.yaml (100%) rename {microsite => microsite-next}/data/plugins/betterscan.yaml (100%) rename {microsite => microsite-next}/data/plugins/bitrise.yaml (100%) rename {microsite => microsite-next}/data/plugins/blackduck.yaml (100%) rename {microsite => microsite-next}/data/plugins/bugsnag.yaml (100%) rename {microsite => microsite-next}/data/plugins/buildkite.yaml (100%) rename {microsite => microsite-next}/data/plugins/catalog-backend-module-puppetdb.yaml (100%) rename {microsite => microsite-next}/data/plugins/catalog-graph.yaml (100%) rename {microsite => microsite-next}/data/plugins/cicd-statistics.yaml (100%) rename {microsite => microsite-next}/data/plugins/circleci.yaml (100%) rename {microsite => microsite-next}/data/plugins/cloud-build.yaml (100%) rename {microsite => microsite-next}/data/plugins/cloud-carbon-footprint.yaml (100%) rename {microsite => microsite-next}/data/plugins/cloudify.yaml (100%) rename {microsite => microsite-next}/data/plugins/cloudsmith.yaml (100%) rename {microsite => microsite-next}/data/plugins/codescene.yaml (100%) rename {microsite => microsite-next}/data/plugins/cortex.yaml (100%) rename {microsite => microsite-next}/data/plugins/cost-insights.yaml (100%) rename {microsite => microsite-next}/data/plugins/datadog.yaml (100%) rename {microsite => microsite-next}/data/plugins/dependencytrack (100%) rename {microsite => microsite-next}/data/plugins/dora-metrics.yaml (100%) rename {microsite => microsite-next}/data/plugins/dynatrace.yaml (100%) rename {microsite => microsite-next}/data/plugins/entity-feedback.yaml (100%) rename {microsite => microsite-next}/data/plugins/firebase-functions.yaml (100%) rename {microsite => microsite-next}/data/plugins/firehydrant.yaml (100%) rename {microsite => microsite-next}/data/plugins/fossa.yaml (100%) rename {microsite => microsite-next}/data/plugins/gcp-projects.yaml (100%) rename {microsite => microsite-next}/data/plugins/git-release-manager.yaml (100%) rename {microsite => microsite-next}/data/plugins/github-actions.yaml (100%) rename {microsite => microsite-next}/data/plugins/github-insights.yaml (100%) rename {microsite => microsite-next}/data/plugins/github-pull-requests-board.yaml (100%) rename {microsite => microsite-next}/data/plugins/github-pull-requests.yaml (100%) rename {microsite => microsite-next}/data/plugins/gitlab.yaml (100%) rename {microsite => microsite-next}/data/plugins/gitops-cluster.yaml (100%) rename {microsite => microsite-next}/data/plugins/gocd.yaml (100%) rename {microsite => microsite-next}/data/plugins/grafana.yaml (100%) rename {microsite => microsite-next}/data/plugins/graphiql.yaml (100%) rename {microsite => microsite-next}/data/plugins/graphql-voyager.yaml (100%) rename {microsite => microsite-next}/data/plugins/grpc-playground.yaml (100%) rename {microsite => microsite-next}/data/plugins/harbor.yaml (100%) rename {microsite => microsite-next}/data/plugins/harness-ci-cd.yaml (100%) rename {microsite => microsite-next}/data/plugins/harness-feature-flags.yaml (100%) rename {microsite => microsite-next}/data/plugins/home.yaml (100%) rename {microsite => microsite-next}/data/plugins/hoop.yaml (100%) rename {microsite => microsite-next}/data/plugins/humanitec.yaml (100%) rename {microsite => microsite-next}/data/plugins/ilert.yaml (100%) rename {microsite => microsite-next}/data/plugins/jenkins.yaml (100%) rename {microsite => microsite-next}/data/plugins/jira.yaml (100%) rename {microsite => microsite-next}/data/plugins/kafka.yaml (100%) rename {microsite => microsite-next}/data/plugins/kpt-config-as-data.yaml (100%) rename {microsite => microsite-next}/data/plugins/kubevela.yaml (100%) rename {microsite => microsite-next}/data/plugins/lighthouse.yaml (100%) rename {microsite => microsite-next}/data/plugins/new-relic.yaml (100%) rename {microsite => microsite-next}/data/plugins/newrelic-dashboard.yaml (100%) rename {microsite => microsite-next}/data/plugins/octopus-deploy.yaml (100%) rename {microsite => microsite-next}/data/plugins/okta-entity-providers.yaml (100%) rename {microsite => microsite-next}/data/plugins/opsgenie.yaml (100%) rename {microsite => microsite-next}/data/plugins/opslevel-maturity.yaml (100%) rename {microsite => microsite-next}/data/plugins/pager-duty.yaml (100%) rename {microsite => microsite-next}/data/plugins/periskop.yaml (100%) rename {microsite => microsite-next}/data/plugins/playlist.yaml (100%) rename {microsite => microsite-next}/data/plugins/prometheus.yaml (100%) rename {microsite => microsite-next}/data/plugins/qeta.yaml (100%) rename {microsite => microsite-next}/data/plugins/rollbar.yaml (100%) rename {microsite => microsite-next}/data/plugins/rootly.yaml (100%) rename {microsite => microsite-next}/data/plugins/s3-viewer.yaml (100%) rename {microsite => microsite-next}/data/plugins/scaffolder-backend-dotnet.yaml (100%) rename {microsite => microsite-next}/data/plugins/scaffolder-backend-git.yaml (100%) rename {microsite => microsite-next}/data/plugins/scaffolder-backend-module-rails.yaml (100%) rename {microsite => microsite-next}/data/plugins/scaffolder-backend-roadie-aws.yaml (100%) rename {microsite => microsite-next}/data/plugins/scaffolder-backend-roadie-http-request.yaml (100%) rename {microsite => microsite-next}/data/plugins/scaffolder-backend-roadie-utils.yaml (100%) rename {microsite => microsite-next}/data/plugins/score-card.yaml (100%) rename {microsite => microsite-next}/data/plugins/security-insights.yaml (100%) rename {microsite => microsite-next}/data/plugins/sentry.yaml (100%) rename {microsite => microsite-next}/data/plugins/shortcuts.yaml (100%) rename {microsite => microsite-next}/data/plugins/snyk-security.yaml (100%) rename {microsite => microsite-next}/data/plugins/sonarqube.yaml (100%) rename {microsite => microsite-next}/data/plugins/splunk-on-call.yaml (100%) rename {microsite => microsite-next}/data/plugins/stack-overflow.yaml (100%) rename {microsite => microsite-next}/data/plugins/stackstorm.yaml (100%) rename {microsite => microsite-next}/data/plugins/tech-insights.yaml (100%) rename {microsite => microsite-next}/data/plugins/tech-radar.yaml (100%) rename {microsite => microsite-next}/data/plugins/tekton-pipelines.yaml (100%) rename {microsite => microsite-next}/data/plugins/todo.yaml (100%) rename {microsite => microsite-next}/data/plugins/toolbox.yaml (100%) rename {microsite => microsite-next}/data/plugins/torque.yaml (100%) rename {microsite => microsite-next}/data/plugins/travis-ci.yaml (100%) rename {microsite => microsite-next}/data/plugins/vault.yaml (100%) rename {microsite => microsite-next}/data/plugins/xcmetrics.yaml (100%) delete mode 120000 microsite-next/static rename {microsite => microsite-next}/static/.nojekyll (100%) rename {microsite => microsite-next}/static/CNAME (100%) rename {microsite => microsite-next}/static/animations/backstage-kubernetes-icon-1.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-logos-hero-8.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-plugin-icon-2.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-search-platform-icon-1.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-software-catalog-icon-1.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-software-templates-icon-5.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-speed-paradox-7.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-standards-paradox-4.gif (100%) rename {microsite => microsite-next}/static/animations/backstage-techdocs-icon-1.gif (100%) rename {microsite => microsite-next}/static/css/custom.css (100%) rename {microsite => microsite-next}/static/css/on-demand.css (100%) rename {microsite => microsite-next}/static/css/plugins.css (100%) rename {microsite => microsite-next}/static/img/adr-logo.png (100%) rename {microsite => microsite-next}/static/img/android-chrome-192x192.png (100%) rename {microsite => microsite-next}/static/img/android-chrome-512x512.png (100%) rename {microsite => microsite-next}/static/img/apollo-explorer.png (100%) rename {microsite => microsite-next}/static/img/apple-touch-icon.png (100%) rename {microsite => microsite-next}/static/img/azure-pipelines.svg (100%) rename {microsite => microsite-next}/static/img/b-sessions.png (100%) rename {microsite => microsite-next}/static/img/backstage-k8s.svg (100%) rename {microsite => microsite-next}/static/img/backstage-logo-cncf.svg (100%) rename {microsite => microsite-next}/static/img/backstage-search-platform.svg (100%) rename {microsite => microsite-next}/static/img/backstage-software-catalog.svg (100%) rename {microsite => microsite-next}/static/img/backstage-software-templates.svg (100%) rename {microsite => microsite-next}/static/img/backstage-techdocs.svg (100%) rename {microsite => microsite-next}/static/img/badges.svg (100%) rename {microsite => microsite-next}/static/img/bazaar.svg (100%) rename {microsite => microsite-next}/static/img/cards-mobile.png (100%) rename {microsite => microsite-next}/static/img/cards-plugins.png (100%) rename {microsite => microsite-next}/static/img/cards-wide.png (100%) rename {microsite => microsite-next}/static/img/cards.png (100%) rename {microsite => microsite-next}/static/img/catalog-graph.svg (100%) rename {microsite => microsite-next}/static/img/cicd-statistics.svg (100%) rename {microsite => microsite-next}/static/img/circleci.png (100%) rename {microsite => microsite-next}/static/img/cncf-color.svg (100%) rename {microsite => microsite-next}/static/img/cncf-white.svg (100%) rename {microsite => microsite-next}/static/img/code.gif (100%) rename {microsite => microsite-next}/static/img/code.png (100%) rename {microsite => microsite-next}/static/img/codescene_logo.svg (100%) rename {microsite => microsite-next}/static/img/compliance.svg (100%) rename {microsite => microsite-next}/static/img/components-with-filter-small.png (100%) rename {microsite => microsite-next}/static/img/components-with-filter.png (100%) rename {microsite => microsite-next}/static/img/cortex.png (100%) rename {microsite => microsite-next}/static/img/cost-insights.png (100%) rename {microsite => microsite-next}/static/img/demo-illustration.svg (100%) rename {microsite => microsite-next}/static/img/demo-screen.png (100%) rename {microsite => microsite-next}/static/img/developers.svg (100%) rename {microsite => microsite-next}/static/img/docs-like-code.png (100%) rename {microsite => microsite-next}/static/img/dot.svg (100%) rename {microsite => microsite-next}/static/img/dynatrace.svg (100%) rename {microsite => microsite-next}/static/img/embraced.svg (100%) rename {microsite => microsite-next}/static/img/enfuse.png (100%) rename {microsite => microsite-next}/static/img/entity-feedback-logo.png (100%) rename {microsite => microsite-next}/static/img/favicon-16x16.png (100%) rename {microsite => microsite-next}/static/img/favicon-32x32.png (100%) rename {microsite => microsite-next}/static/img/favicon.ico (100%) rename {microsite => microsite-next}/static/img/favicon.svg (100%) rename {microsite => microsite-next}/static/img/ga-icon.png (100%) rename {microsite => microsite-next}/static/img/git-release-manager-logo.svg (100%) rename {microsite => microsite-next}/static/img/github-pull-requests-board-logo.svg (100%) rename {microsite => microsite-next}/static/img/gke-logo.png (100%) rename {microsite => microsite-next}/static/img/home.png (100%) rename {microsite => microsite-next}/static/img/humanitec-logo.png (100%) rename {microsite => microsite-next}/static/img/laptop-screen.svg (100%) rename {microsite => microsite-next}/static/img/laptop.svg (100%) rename {microsite => microsite-next}/static/img/lighthouse.png (100%) rename {microsite => microsite-next}/static/img/logo-black-248x250.png (100%) rename {microsite => microsite-next}/static/img/logo-gradient-on-dark.svg (100%) rename {microsite => microsite-next}/static/img/logo.svg (100%) rename {microsite => microsite-next}/static/img/logos-background.svg (100%) rename {microsite => microsite-next}/static/img/logos-signature.svg (100%) rename {microsite => microsite-next}/static/img/logos.svg (100%) rename {microsite => microsite-next}/static/img/mstile-150x150.png (100%) rename {microsite => microsite-next}/static/img/news-fpo.png (100%) rename {microsite => microsite-next}/static/img/octopus-deploy.svg (100%) rename {microsite => microsite-next}/static/img/okay.png (100%) rename {microsite => microsite-next}/static/img/open-platform.svg (100%) rename {microsite => microsite-next}/static/img/openmic.jpeg (100%) rename {microsite => microsite-next}/static/img/partner-logo-frontside.png (100%) rename {microsite => microsite-next}/static/img/partner-logo-roadie.png (100%) rename {microsite => microsite-next}/static/img/partner-logo-thoughtworks.png (100%) rename {microsite => microsite-next}/static/img/partner-logo-vmware.png (100%) rename {microsite => microsite-next}/static/img/photo-montage.svg (100%) rename {microsite => microsite-next}/static/img/playlist-logo.png (100%) rename {microsite => microsite-next}/static/img/plugin-announcements-logo.png (100%) rename {microsite => microsite-next}/static/img/plugin-mobile.svg (100%) rename {microsite => microsite-next}/static/img/plugin.svg (100%) rename {microsite => microsite-next}/static/img/plugins.png (100%) rename {microsite => microsite-next}/static/img/qeta-logo.png (100%) rename {microsite => microsite-next}/static/img/rails-icon.png (100%) rename {microsite => microsite-next}/static/img/roadie-newsletter.png (100%) rename {microsite => microsite-next}/static/img/s3-bucket.svg (100%) rename {microsite => microsite-next}/static/img/scaffolder-backend-dotnet-icon.png (100%) rename {microsite => microsite-next}/static/img/scaffolder-http-request-logo.svg (100%) rename {microsite => microsite-next}/static/img/scaffolder-utils-logo.png (100%) rename {microsite => microsite-next}/static/img/score-card-plugin-logo.png (100%) rename {microsite => microsite-next}/static/img/screen.gif (100%) rename {microsite => microsite-next}/static/img/search-platform-overview-small.png (100%) rename {microsite => microsite-next}/static/img/search-platform-overview.png (100%) rename {microsite => microsite-next}/static/img/service-cards.png (100%) rename {microsite => microsite-next}/static/img/sharing-opengraph.png (100%) rename {microsite => microsite-next}/static/img/shortcuts.svg (100%) rename {microsite => microsite-next}/static/img/sonarqube-icon.svg (100%) rename {microsite => microsite-next}/static/img/splunk-black-white-bg.png (100%) rename {microsite => microsite-next}/static/img/spotlight.png (100%) rename {microsite => microsite-next}/static/img/spring-boot-service.png (100%) rename {microsite => microsite-next}/static/img/stack-overflow-logo.svg (100%) rename {microsite => microsite-next}/static/img/stackstorm.png (100%) rename {microsite => microsite-next}/static/img/techdocs-static-mobile.png (100%) rename {microsite => microsite-next}/static/img/techdocs-web.png (100%) rename {microsite => microsite-next}/static/img/techdocs.gif (100%) rename {microsite => microsite-next}/static/img/techdocs.png (100%) rename {microsite => microsite-next}/static/img/techdocs2.gif (100%) rename {microsite => microsite-next}/static/img/techs.png (100%) rename {microsite => microsite-next}/static/img/todo-logo.png (100%) rename {microsite => microsite-next}/static/img/toolbox-logo.png (100%) rename {microsite => microsite-next}/static/img/twitter-summary.png (100%) rename {microsite => microsite-next}/static/img/vault.png (100%) rename {microsite => microsite-next}/static/img/xcmetrics-icon.png (100%) rename {microsite => microsite-next}/static/js/dismissable-banner.js (100%) rename {microsite => microsite-next}/static/js/medium-zoom.js (100%) rename {microsite => microsite-next}/static/js/scroll-nav-to-view-in-docs.js (100%) rename {microsite => microsite-next}/static/logo_assets/Backstage_Identity_Assets_Overview.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/ai/Backstage_Identity_Assets_Artwork_RGB.ai (100%) rename {microsite => microsite-next}/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg (100%) rename {microsite => microsite-next}/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Backstage_Identity_Assets_Artwork_RGB.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Individual/01_Logo_White.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Individual/02_Icon_White.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Individual/03_Logo_Teal.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Individual/04_Icon_Teal.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Individual/05_Logo_Black.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Individual/06_Icon_Black.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/pdf/Individual/07_Large Icon_Gradient.pdf (100%) rename {microsite => microsite-next}/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png (100%) rename {microsite => microsite-next}/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png (100%) rename {microsite => microsite-next}/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png (100%) rename {microsite => microsite-next}/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png (100%) rename {microsite => microsite-next}/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png (100%) rename {microsite => microsite-next}/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png (100%) rename {microsite => microsite-next}/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png (100%) rename {microsite => microsite-next}/static/logo_assets/svg/Icon_Black.svg (100%) rename {microsite => microsite-next}/static/logo_assets/svg/Icon_Gradient.svg (100%) rename {microsite => microsite-next}/static/logo_assets/svg/Icon_Teal.svg (100%) rename {microsite => microsite-next}/static/logo_assets/svg/Icon_White.svg (100%) rename {microsite => microsite-next}/static/logo_assets/svg/Logo_Black.svg (100%) rename {microsite => microsite-next}/static/logo_assets/svg/Logo_Teal.svg (100%) rename {microsite => microsite-next}/static/logo_assets/svg/Logo_White.svg (100%) rename {microsite => microsite-next}/static/schema/config-v1 (100%) delete mode 100755 microsite/scripts/verify-sidebars.js diff --git a/microsite/blog/2020-03-16-announcing-backstage.md b/microsite-next/blog/2020-03-16-announcing-backstage.md similarity index 100% rename from microsite/blog/2020-03-16-announcing-backstage.md rename to microsite-next/blog/2020-03-16-announcing-backstage.md diff --git a/microsite/blog/2020-03-18-what-is-backstage.md b/microsite-next/blog/2020-03-18-what-is-backstage.md similarity index 100% rename from microsite/blog/2020-03-18-what-is-backstage.md rename to microsite-next/blog/2020-03-18-what-is-backstage.md diff --git a/microsite/blog/2020-04-06-lighthouse-plugin.md b/microsite-next/blog/2020-04-06-lighthouse-plugin.md similarity index 100% rename from microsite/blog/2020-04-06-lighthouse-plugin.md rename to microsite-next/blog/2020-04-06-lighthouse-plugin.md diff --git a/microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.md b/microsite-next/blog/2020-04-30-how-to-quickly-set-up-backstage.md similarity index 100% rename from microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.md rename to microsite-next/blog/2020-04-30-how-to-quickly-set-up-backstage.md diff --git a/microsite/blog/2020-05-14-tech-radar-plugin.md b/microsite-next/blog/2020-05-14-tech-radar-plugin.md similarity index 100% rename from microsite/blog/2020-05-14-tech-radar-plugin.md rename to microsite-next/blog/2020-05-14-tech-radar-plugin.md diff --git a/microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md b/microsite-next/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md similarity index 100% rename from microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md rename to microsite-next/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md diff --git a/microsite/blog/2020-05-22-phase-2-service-catalog.md b/microsite-next/blog/2020-05-22-phase-2-service-catalog.md similarity index 100% rename from microsite/blog/2020-05-22-phase-2-service-catalog.md rename to microsite-next/blog/2020-05-22-phase-2-service-catalog.md diff --git a/microsite/blog/2020-06-22-backstage-service-catalog-alpha.md b/microsite-next/blog/2020-06-22-backstage-service-catalog-alpha.md similarity index 100% rename from microsite/blog/2020-06-22-backstage-service-catalog-alpha.md rename to microsite-next/blog/2020-06-22-backstage-service-catalog-alpha.md diff --git a/microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md b/microsite-next/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md similarity index 100% rename from microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md rename to microsite-next/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md diff --git a/microsite/blog/2020-08-05-announcing-backstage-software-templates.md b/microsite-next/blog/2020-08-05-announcing-backstage-software-templates.md similarity index 100% rename from microsite/blog/2020-08-05-announcing-backstage-software-templates.md rename to microsite-next/blog/2020-08-05-announcing-backstage-software-templates.md diff --git a/microsite/blog/2020-09-08-announcing-tech-docs.md b/microsite-next/blog/2020-09-08-announcing-tech-docs.md similarity index 100% rename from microsite/blog/2020-09-08-announcing-tech-docs.md rename to microsite-next/blog/2020-09-08-announcing-tech-docs.md diff --git a/microsite/blog/2020-09-23-backstage-cncf-sandbox.md b/microsite-next/blog/2020-09-23-backstage-cncf-sandbox.md similarity index 100% rename from microsite/blog/2020-09-23-backstage-cncf-sandbox.md rename to microsite-next/blog/2020-09-23-backstage-cncf-sandbox.md diff --git a/microsite/blog/2020-09-30-backstage-design-system.md b/microsite-next/blog/2020-09-30-backstage-design-system.md similarity index 100% rename from microsite/blog/2020-09-30-backstage-design-system.md rename to microsite-next/blog/2020-09-30-backstage-design-system.md diff --git a/microsite/blog/2020-09-30-plugin-marketplace.md b/microsite-next/blog/2020-09-30-plugin-marketplace.md similarity index 100% rename from microsite/blog/2020-09-30-plugin-marketplace.md rename to microsite-next/blog/2020-09-30-plugin-marketplace.md diff --git a/microsite/blog/2020-10-22-cost-insights-plugin.md b/microsite-next/blog/2020-10-22-cost-insights-plugin.md similarity index 100% rename from microsite/blog/2020-10-22-cost-insights-plugin.md rename to microsite-next/blog/2020-10-22-cost-insights-plugin.md diff --git a/microsite/blog/2020-12-22-stability-index.md b/microsite-next/blog/2020-12-22-stability-index.md similarity index 100% rename from microsite/blog/2020-12-22-stability-index.md rename to microsite-next/blog/2020-12-22-stability-index.md diff --git a/microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md b/microsite-next/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md similarity index 100% rename from microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md rename to microsite-next/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md diff --git a/microsite/blog/2021-05-20-adopting-backstage.md b/microsite-next/blog/2021-05-20-adopting-backstage.md similarity index 100% rename from microsite/blog/2021-05-20-adopting-backstage.md rename to microsite-next/blog/2021-05-20-adopting-backstage.md diff --git a/microsite/blog/2021-06-22-spotify-backstage-is-growing.md b/microsite-next/blog/2021-06-22-spotify-backstage-is-growing.md similarity index 100% rename from microsite/blog/2021-06-22-spotify-backstage-is-growing.md rename to microsite-next/blog/2021-06-22-spotify-backstage-is-growing.md diff --git a/microsite/blog/2021-06-24-announcing-backstage-search-platform.md b/microsite-next/blog/2021-06-24-announcing-backstage-search-platform.md similarity index 100% rename from microsite/blog/2021-06-24-announcing-backstage-search-platform.md rename to microsite-next/blog/2021-06-24-announcing-backstage-search-platform.md diff --git a/microsite/blog/2021-07-26-software-templates-are-now-in-beta.md b/microsite-next/blog/2021-07-26-software-templates-are-now-in-beta.md similarity index 100% rename from microsite/blog/2021-07-26-software-templates-are-now-in-beta.md rename to microsite-next/blog/2021-07-26-software-templates-are-now-in-beta.md diff --git a/microsite/blog/2021-09-16-the-techdocs-beta-has-landed.md b/microsite-next/blog/2021-09-16-the-techdocs-beta-has-landed.md similarity index 100% rename from microsite/blog/2021-09-16-the-techdocs-beta-has-landed.md rename to microsite-next/blog/2021-09-16-the-techdocs-beta-has-landed.md diff --git a/microsite/blog/2021-09-30-50-public-adopters.md b/microsite-next/blog/2021-09-30-50-public-adopters.md similarity index 100% rename from microsite/blog/2021-09-30-50-public-adopters.md rename to microsite-next/blog/2021-09-30-50-public-adopters.md diff --git a/microsite/blog/2021-12-20-backstage-wrapped-2021.md b/microsite-next/blog/2021-12-20-backstage-wrapped-2021.md similarity index 100% rename from microsite/blog/2021-12-20-backstage-wrapped-2021.md rename to microsite-next/blog/2021-12-20-backstage-wrapped-2021.md diff --git a/microsite/blog/2022-01-25-backstage-homepage-templates.md b/microsite-next/blog/2022-01-25-backstage-homepage-templates.md similarity index 100% rename from microsite/blog/2022-01-25-backstage-homepage-templates.md rename to microsite-next/blog/2022-01-25-backstage-homepage-templates.md diff --git a/microsite/blog/2022-03-04-backstage-upgrade-helper.md b/microsite-next/blog/2022-03-04-backstage-upgrade-helper.md similarity index 100% rename from microsite/blog/2022-03-04-backstage-upgrade-helper.md rename to microsite-next/blog/2022-03-04-backstage-upgrade-helper.md diff --git a/microsite/blog/2022-03-16-backstage-turns-two.md b/microsite-next/blog/2022-03-16-backstage-turns-two.md similarity index 100% rename from microsite/blog/2022-03-16-backstage-turns-two.md rename to microsite-next/blog/2022-03-16-backstage-turns-two.md diff --git a/microsite/blog/2022-03-17-backstage-1.0.md b/microsite-next/blog/2022-03-17-backstage-1.0.md similarity index 100% rename from microsite/blog/2022-03-17-backstage-1.0.md rename to microsite-next/blog/2022-03-17-backstage-1.0.md diff --git a/microsite/blog/2022-05-13-techdocs-addon-framework.md b/microsite-next/blog/2022-05-13-techdocs-addon-framework.md similarity index 100% rename from microsite/blog/2022-05-13-techdocs-addon-framework.md rename to microsite-next/blog/2022-05-13-techdocs-addon-framework.md diff --git a/microsite/blog/2022-07-19-releasing-backstage-search-1.0.md b/microsite-next/blog/2022-07-19-releasing-backstage-search-1.0.md similarity index 100% rename from microsite/blog/2022-07-19-releasing-backstage-search-1.0.md rename to microsite-next/blog/2022-07-19-releasing-backstage-search-1.0.md diff --git a/microsite/blog/2022-08-23-backstage-security-audit.md b/microsite-next/blog/2022-08-23-backstage-security-audit.md similarity index 100% rename from microsite/blog/2022-08-23-backstage-security-audit.md rename to microsite-next/blog/2022-08-23-backstage-security-audit.md diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite-next/blog/2022-09-08-fyi-plugin-analytics-api.md similarity index 100% rename from microsite/blog/2022-09-08-fyi-plugin-analytics-api.md rename to microsite-next/blog/2022-09-08-fyi-plugin-analytics-api.md diff --git a/microsite/blog/2022-10-28-backstagecon-kubecon-2022.md b/microsite-next/blog/2022-10-28-backstagecon-kubecon-2022.md similarity index 100% rename from microsite/blog/2022-10-28-backstagecon-kubecon-2022.md rename to microsite-next/blog/2022-10-28-backstagecon-kubecon-2022.md diff --git a/microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md b/microsite-next/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md similarity index 100% rename from microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md rename to microsite-next/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md diff --git a/microsite/blog/2022-12-19-backstage-wrapped-2022.md b/microsite-next/blog/2022-12-19-backstage-wrapped-2022.md similarity index 100% rename from microsite/blog/2022-12-19-backstage-wrapped-2022.md rename to microsite-next/blog/2022-12-19-backstage-wrapped-2022.md diff --git a/microsite/blog/2023-01-31-incremental-entity-provider.md b/microsite-next/blog/2023-01-31-incremental-entity-provider.md similarity index 100% rename from microsite/blog/2023-01-31-incremental-entity-provider.md rename to microsite-next/blog/2023-01-31-incremental-entity-provider.md diff --git a/microsite/blog/2023-02-06-whats-ahead-in-2023.md b/microsite-next/blog/2023-02-06-whats-ahead-in-2023.md similarity index 100% rename from microsite/blog/2023-02-06-whats-ahead-in-2023.md rename to microsite-next/blog/2023-02-06-whats-ahead-in-2023.md diff --git a/microsite/blog/2023-02-15-backend-system-alpha.md b/microsite-next/blog/2023-02-15-backend-system-alpha.md similarity index 100% rename from microsite/blog/2023-02-15-backend-system-alpha.md rename to microsite-next/blog/2023-02-15-backend-system-alpha.md diff --git a/microsite/blog/assets/2/1.png b/microsite-next/blog/assets/2/1.png similarity index 100% rename from microsite/blog/assets/2/1.png rename to microsite-next/blog/assets/2/1.png diff --git a/microsite/blog/assets/2/2.png b/microsite-next/blog/assets/2/2.png similarity index 100% rename from microsite/blog/assets/2/2.png rename to microsite-next/blog/assets/2/2.png diff --git a/microsite/blog/assets/2/3.png b/microsite-next/blog/assets/2/3.png similarity index 100% rename from microsite/blog/assets/2/3.png rename to microsite-next/blog/assets/2/3.png diff --git a/microsite/blog/assets/2/4.png b/microsite-next/blog/assets/2/4.png similarity index 100% rename from microsite/blog/assets/2/4.png rename to microsite-next/blog/assets/2/4.png diff --git a/microsite/blog/assets/2/5.png b/microsite-next/blog/assets/2/5.png similarity index 100% rename from microsite/blog/assets/2/5.png rename to microsite-next/blog/assets/2/5.png diff --git a/microsite/blog/assets/2/screen.gif b/microsite-next/blog/assets/2/screen.gif similarity index 100% rename from microsite/blog/assets/2/screen.gif rename to microsite-next/blog/assets/2/screen.gif diff --git a/microsite/blog/assets/2/spotify-labs-header.png b/microsite-next/blog/assets/2/spotify-labs-header.png similarity index 100% rename from microsite/blog/assets/2/spotify-labs-header.png rename to microsite-next/blog/assets/2/spotify-labs-header.png diff --git a/microsite/blog/assets/20-05-14/weaveworks-firekube-covid-19-spotify-backstage.png b/microsite-next/blog/assets/20-05-14/weaveworks-firekube-covid-19-spotify-backstage.png similarity index 100% rename from microsite/blog/assets/20-05-14/weaveworks-firekube-covid-19-spotify-backstage.png rename to microsite-next/blog/assets/20-05-14/weaveworks-firekube-covid-19-spotify-backstage.png diff --git a/microsite/blog/assets/20-05-20/Service_Catalog_MVP.png b/microsite-next/blog/assets/20-05-20/Service_Catalog_MVP.png similarity index 100% rename from microsite/blog/assets/20-05-20/Service_Catalog_MVP.png rename to microsite-next/blog/assets/20-05-20/Service_Catalog_MVP.png diff --git a/microsite/blog/assets/20-05-20/Service_Catalog_MVP_service.png b/microsite-next/blog/assets/20-05-20/Service_Catalog_MVP_service.png similarity index 100% rename from microsite/blog/assets/20-05-20/Service_Catalog_MVP_service.png rename to microsite-next/blog/assets/20-05-20/Service_Catalog_MVP_service.png diff --git a/microsite/blog/assets/20-05-20/tabs.png b/microsite-next/blog/assets/20-05-20/tabs.png similarity index 100% rename from microsite/blog/assets/20-05-20/tabs.png rename to microsite-next/blog/assets/20-05-20/tabs.png diff --git a/microsite/blog/assets/20-07-01/auth-landing.png b/microsite-next/blog/assets/20-07-01/auth-landing.png similarity index 100% rename from microsite/blog/assets/20-07-01/auth-landing.png rename to microsite-next/blog/assets/20-07-01/auth-landing.png diff --git a/microsite/blog/assets/20-07-01/auth-sidebar.png b/microsite-next/blog/assets/20-07-01/auth-sidebar.png similarity index 100% rename from microsite/blog/assets/20-07-01/auth-sidebar.png rename to microsite-next/blog/assets/20-07-01/auth-sidebar.png diff --git a/microsite/blog/assets/20-10-22/cost-insights-1-dau.gif b/microsite-next/blog/assets/20-10-22/cost-insights-1-dau.gif similarity index 100% rename from microsite/blog/assets/20-10-22/cost-insights-1-dau.gif rename to microsite-next/blog/assets/20-10-22/cost-insights-1-dau.gif diff --git a/microsite/blog/assets/20-10-22/cost-insights-2-engineer.png b/microsite-next/blog/assets/20-10-22/cost-insights-2-engineer.png similarity index 100% rename from microsite/blog/assets/20-10-22/cost-insights-2-engineer.png rename to microsite-next/blog/assets/20-10-22/cost-insights-2-engineer.png diff --git a/microsite/blog/assets/20-10-22/cost-insights-3-data.png b/microsite-next/blog/assets/20-10-22/cost-insights-3-data.png similarity index 100% rename from microsite/blog/assets/20-10-22/cost-insights-3-data.png rename to microsite-next/blog/assets/20-10-22/cost-insights-3-data.png diff --git a/microsite/blog/assets/2020-08-05/cards.png b/microsite-next/blog/assets/2020-08-05/cards.png similarity index 100% rename from microsite/blog/assets/2020-08-05/cards.png rename to microsite-next/blog/assets/2020-08-05/cards.png diff --git a/microsite/blog/assets/2020-08-05/catalog.png b/microsite-next/blog/assets/2020-08-05/catalog.png similarity index 100% rename from microsite/blog/assets/2020-08-05/catalog.png rename to microsite-next/blog/assets/2020-08-05/catalog.png diff --git a/microsite/blog/assets/2020-08-05/create-component.png b/microsite-next/blog/assets/2020-08-05/create-component.png similarity index 100% rename from microsite/blog/assets/2020-08-05/create-component.png rename to microsite-next/blog/assets/2020-08-05/create-component.png diff --git a/microsite/blog/assets/2020-08-05/feature.mp4 b/microsite-next/blog/assets/2020-08-05/feature.mp4 similarity index 100% rename from microsite/blog/assets/2020-08-05/feature.mp4 rename to microsite-next/blog/assets/2020-08-05/feature.mp4 diff --git a/microsite/blog/assets/2020-08-05/template-form.png b/microsite-next/blog/assets/2020-08-05/template-form.png similarity index 100% rename from microsite/blog/assets/2020-08-05/template-form.png rename to microsite-next/blog/assets/2020-08-05/template-form.png diff --git a/microsite/blog/assets/2020-08-05/templates.png b/microsite-next/blog/assets/2020-08-05/templates.png similarity index 100% rename from microsite/blog/assets/2020-08-05/templates.png rename to microsite-next/blog/assets/2020-08-05/templates.png diff --git a/microsite/blog/assets/2020-12-22/stability-index-hero.gif b/microsite-next/blog/assets/2020-12-22/stability-index-hero.gif similarity index 100% rename from microsite/blog/assets/2020-12-22/stability-index-hero.gif rename to microsite-next/blog/assets/2020-12-22/stability-index-hero.gif diff --git a/microsite/blog/assets/2020-12-22/versions-bump.png b/microsite-next/blog/assets/2020-12-22/versions-bump.png similarity index 100% rename from microsite/blog/assets/2020-12-22/versions-bump.png rename to microsite-next/blog/assets/2020-12-22/versions-bump.png diff --git a/microsite/blog/assets/2022-10-28/groupimage.jpg b/microsite-next/blog/assets/2022-10-28/groupimage.jpg similarity index 100% rename from microsite/blog/assets/2022-10-28/groupimage.jpg rename to microsite-next/blog/assets/2022-10-28/groupimage.jpg diff --git a/microsite/blog/assets/2022-10-28/preview.png b/microsite-next/blog/assets/2022-10-28/preview.png similarity index 100% rename from microsite/blog/assets/2022-10-28/preview.png rename to microsite-next/blog/assets/2022-10-28/preview.png diff --git a/microsite/blog/assets/2022-10-28/project_meeting.jpg b/microsite-next/blog/assets/2022-10-28/project_meeting.jpg similarity index 100% rename from microsite/blog/assets/2022-10-28/project_meeting.jpg rename to microsite-next/blog/assets/2022-10-28/project_meeting.jpg diff --git a/microsite/blog/assets/2022-10-28/real_project_meeting.jpeg b/microsite-next/blog/assets/2022-10-28/real_project_meeting.jpeg similarity index 100% rename from microsite/blog/assets/2022-10-28/real_project_meeting.jpeg rename to microsite-next/blog/assets/2022-10-28/real_project_meeting.jpeg diff --git a/microsite/blog/assets/2022-12-19/bowie-the-beaver.png b/microsite-next/blog/assets/2022-12-19/bowie-the-beaver.png similarity index 100% rename from microsite/blog/assets/2022-12-19/bowie-the-beaver.png rename to microsite-next/blog/assets/2022-12-19/bowie-the-beaver.png diff --git a/microsite/blog/assets/2022-12-19/github-metrics-for-backstage-io.png b/microsite-next/blog/assets/2022-12-19/github-metrics-for-backstage-io.png similarity index 100% rename from microsite/blog/assets/2022-12-19/github-metrics-for-backstage-io.png rename to microsite-next/blog/assets/2022-12-19/github-metrics-for-backstage-io.png diff --git a/microsite/blog/assets/2022-12-19/public-backstage-adopters-2022.png b/microsite-next/blog/assets/2022-12-19/public-backstage-adopters-2022.png similarity index 100% rename from microsite/blog/assets/2022-12-19/public-backstage-adopters-2022.png rename to microsite-next/blog/assets/2022-12-19/public-backstage-adopters-2022.png diff --git a/microsite/blog/assets/2022-12-19/wrapped.png b/microsite-next/blog/assets/2022-12-19/wrapped.png similarity index 100% rename from microsite/blog/assets/2022-12-19/wrapped.png rename to microsite-next/blog/assets/2022-12-19/wrapped.png diff --git a/microsite/blog/assets/2023-01-31/catalog-pipeline.png b/microsite-next/blog/assets/2023-01-31/catalog-pipeline.png similarity index 100% rename from microsite/blog/assets/2023-01-31/catalog-pipeline.png rename to microsite-next/blog/assets/2023-01-31/catalog-pipeline.png diff --git a/microsite/blog/assets/2023-01-31/damon.jpg b/microsite-next/blog/assets/2023-01-31/damon.jpg similarity index 100% rename from microsite/blog/assets/2023-01-31/damon.jpg rename to microsite-next/blog/assets/2023-01-31/damon.jpg diff --git a/microsite/blog/assets/2023-02-06/whats-ahead.png b/microsite-next/blog/assets/2023-02-06/whats-ahead.png similarity index 100% rename from microsite/blog/assets/2023-02-06/whats-ahead.png rename to microsite-next/blog/assets/2023-02-06/whats-ahead.png diff --git a/microsite/blog/assets/2023-02-15/backend-system-alpha.gif b/microsite-next/blog/assets/2023-02-15/backend-system-alpha.gif similarity index 100% rename from microsite/blog/assets/2023-02-15/backend-system-alpha.gif rename to microsite-next/blog/assets/2023-02-15/backend-system-alpha.gif diff --git a/microsite/blog/assets/2023-02-15/backend-system-architecture.png b/microsite-next/blog/assets/2023-02-15/backend-system-architecture.png similarity index 100% rename from microsite/blog/assets/2023-02-15/backend-system-architecture.png rename to microsite-next/blog/assets/2023-02-15/backend-system-architecture.png diff --git a/microsite/blog/assets/21-01-12/backstage-k8s-1-hero.gif b/microsite-next/blog/assets/21-01-12/backstage-k8s-1-hero.gif similarity index 100% rename from microsite/blog/assets/21-01-12/backstage-k8s-1-hero.gif rename to microsite-next/blog/assets/21-01-12/backstage-k8s-1-hero.gif diff --git a/microsite/blog/assets/21-01-12/backstage-k8s-2-deployments.png b/microsite-next/blog/assets/21-01-12/backstage-k8s-2-deployments.png similarity index 100% rename from microsite/blog/assets/21-01-12/backstage-k8s-2-deployments.png rename to microsite-next/blog/assets/21-01-12/backstage-k8s-2-deployments.png diff --git a/microsite/blog/assets/21-01-12/backstage-k8s-3-error-reporting.png b/microsite-next/blog/assets/21-01-12/backstage-k8s-3-error-reporting.png similarity index 100% rename from microsite/blog/assets/21-01-12/backstage-k8s-3-error-reporting.png rename to microsite-next/blog/assets/21-01-12/backstage-k8s-3-error-reporting.png diff --git a/microsite/blog/assets/21-01-12/backstage-k8s-4-autoscaling-limits.png b/microsite-next/blog/assets/21-01-12/backstage-k8s-4-autoscaling-limits.png similarity index 100% rename from microsite/blog/assets/21-01-12/backstage-k8s-4-autoscaling-limits.png rename to microsite-next/blog/assets/21-01-12/backstage-k8s-4-autoscaling-limits.png diff --git a/microsite/blog/assets/21-01-12/backstage-k8s-5-autoscaling-limits.png b/microsite-next/blog/assets/21-01-12/backstage-k8s-5-autoscaling-limits.png similarity index 100% rename from microsite/blog/assets/21-01-12/backstage-k8s-5-autoscaling-limits.png rename to microsite-next/blog/assets/21-01-12/backstage-k8s-5-autoscaling-limits.png diff --git a/microsite/blog/assets/21-05-20/1000-engineers.png b/microsite-next/blog/assets/21-05-20/1000-engineers.png similarity index 100% rename from microsite/blog/assets/21-05-20/1000-engineers.png rename to microsite-next/blog/assets/21-05-20/1000-engineers.png diff --git a/microsite/blog/assets/21-05-20/1000-engineers_v.2.png b/microsite-next/blog/assets/21-05-20/1000-engineers_v.2.png similarity index 100% rename from microsite/blog/assets/21-05-20/1000-engineers_v.2.png rename to microsite-next/blog/assets/21-05-20/1000-engineers_v.2.png diff --git a/microsite/blog/assets/21-05-20/1000-plus-engineers.png b/microsite-next/blog/assets/21-05-20/1000-plus-engineers.png similarity index 100% rename from microsite/blog/assets/21-05-20/1000-plus-engineers.png rename to microsite-next/blog/assets/21-05-20/1000-plus-engineers.png diff --git a/microsite/blog/assets/21-05-20/1000-plus-engineers_v.2.png b/microsite-next/blog/assets/21-05-20/1000-plus-engineers_v.2.png similarity index 100% rename from microsite/blog/assets/21-05-20/1000-plus-engineers_v.2.png rename to microsite-next/blog/assets/21-05-20/1000-plus-engineers_v.2.png diff --git a/microsite/blog/assets/21-05-20/200-engineers.png b/microsite-next/blog/assets/21-05-20/200-engineers.png similarity index 100% rename from microsite/blog/assets/21-05-20/200-engineers.png rename to microsite-next/blog/assets/21-05-20/200-engineers.png diff --git a/microsite/blog/assets/21-05-20/200-engineers_v.2.png b/microsite-next/blog/assets/21-05-20/200-engineers_v.2.png similarity index 100% rename from microsite/blog/assets/21-05-20/200-engineers_v.2.png rename to microsite-next/blog/assets/21-05-20/200-engineers_v.2.png diff --git a/microsite/blog/assets/21-05-20/create-manage-explore.gif b/microsite-next/blog/assets/21-05-20/create-manage-explore.gif similarity index 100% rename from microsite/blog/assets/21-05-20/create-manage-explore.gif rename to microsite-next/blog/assets/21-05-20/create-manage-explore.gif diff --git a/microsite/blog/assets/21-05-20/create.gif b/microsite-next/blog/assets/21-05-20/create.gif similarity index 100% rename from microsite/blog/assets/21-05-20/create.gif rename to microsite-next/blog/assets/21-05-20/create.gif diff --git a/microsite/blog/assets/21-05-20/explore.gif b/microsite-next/blog/assets/21-05-20/explore.gif similarity index 100% rename from microsite/blog/assets/21-05-20/explore.gif rename to microsite-next/blog/assets/21-05-20/explore.gif diff --git a/microsite/blog/assets/21-05-20/manage.gif b/microsite-next/blog/assets/21-05-20/manage.gif similarity index 100% rename from microsite/blog/assets/21-05-20/manage.gif rename to microsite-next/blog/assets/21-05-20/manage.gif diff --git a/microsite/blog/assets/21-06-22/backstage-community-sessions.png b/microsite-next/blog/assets/21-06-22/backstage-community-sessions.png similarity index 100% rename from microsite/blog/assets/21-06-22/backstage-community-sessions.png rename to microsite-next/blog/assets/21-06-22/backstage-community-sessions.png diff --git a/microsite/blog/assets/21-06-22/gh-reviewers.png b/microsite-next/blog/assets/21-06-22/gh-reviewers.png similarity index 100% rename from microsite/blog/assets/21-06-22/gh-reviewers.png rename to microsite-next/blog/assets/21-06-22/gh-reviewers.png diff --git a/microsite/blog/assets/21-06-22/spotify-backstage-adopters.png b/microsite-next/blog/assets/21-06-22/spotify-backstage-adopters.png similarity index 100% rename from microsite/blog/assets/21-06-22/spotify-backstage-adopters.png rename to microsite-next/blog/assets/21-06-22/spotify-backstage-adopters.png diff --git a/microsite/blog/assets/21-06-22/spotify-backstage-header.gif b/microsite-next/blog/assets/21-06-22/spotify-backstage-header.gif similarity index 100% rename from microsite/blog/assets/21-06-22/spotify-backstage-header.gif rename to microsite-next/blog/assets/21-06-22/spotify-backstage-header.gif diff --git a/microsite/blog/assets/21-06-24/backstage-search-platform.png b/microsite-next/blog/assets/21-06-24/backstage-search-platform.png similarity index 100% rename from microsite/blog/assets/21-06-24/backstage-search-platform.png rename to microsite-next/blog/assets/21-06-24/backstage-search-platform.png diff --git a/microsite/blog/assets/21-06-24/jobs-to-be-done.png b/microsite-next/blog/assets/21-06-24/jobs-to-be-done.png similarity index 100% rename from microsite/blog/assets/21-06-24/jobs-to-be-done.png rename to microsite-next/blog/assets/21-06-24/jobs-to-be-done.png diff --git a/microsite/blog/assets/21-06-24/search-results.png b/microsite-next/blog/assets/21-06-24/search-results.png similarity index 100% rename from microsite/blog/assets/21-06-24/search-results.png rename to microsite-next/blog/assets/21-06-24/search-results.png diff --git a/microsite/blog/assets/21-07-26/backstage-software-templates-beta.gif b/microsite-next/blog/assets/21-07-26/backstage-software-templates-beta.gif similarity index 100% rename from microsite/blog/assets/21-07-26/backstage-software-templates-beta.gif rename to microsite-next/blog/assets/21-07-26/backstage-software-templates-beta.gif diff --git a/microsite/blog/assets/21-07-26/custom-components.gif b/microsite-next/blog/assets/21-07-26/custom-components.gif similarity index 100% rename from microsite/blog/assets/21-07-26/custom-components.gif rename to microsite-next/blog/assets/21-07-26/custom-components.gif diff --git a/microsite/blog/assets/21-07-26/example-template-code.png b/microsite-next/blog/assets/21-07-26/example-template-code.png similarity index 100% rename from microsite/blog/assets/21-07-26/example-template-code.png rename to microsite-next/blog/assets/21-07-26/example-template-code.png diff --git a/microsite/blog/assets/21-07-26/steps-running.gif b/microsite-next/blog/assets/21-07-26/steps-running.gif similarity index 100% rename from microsite/blog/assets/21-07-26/steps-running.gif rename to microsite-next/blog/assets/21-07-26/steps-running.gif diff --git a/microsite/blog/assets/21-09-16/backstage-techdocs-beta.gif b/microsite-next/blog/assets/21-09-16/backstage-techdocs-beta.gif similarity index 100% rename from microsite/blog/assets/21-09-16/backstage-techdocs-beta.gif rename to microsite-next/blog/assets/21-09-16/backstage-techdocs-beta.gif diff --git a/microsite/blog/assets/21-09-16/refresh-button.gif b/microsite-next/blog/assets/21-09-16/refresh-button.gif similarity index 100% rename from microsite/blog/assets/21-09-16/refresh-button.gif rename to microsite-next/blog/assets/21-09-16/refresh-button.gif diff --git a/microsite/blog/assets/21-09-16/techdocs-custom-homepage.png b/microsite-next/blog/assets/21-09-16/techdocs-custom-homepage.png similarity index 100% rename from microsite/blog/assets/21-09-16/techdocs-custom-homepage.png rename to microsite-next/blog/assets/21-09-16/techdocs-custom-homepage.png diff --git a/microsite/blog/assets/21-09-16/techdocs-ref.png b/microsite-next/blog/assets/21-09-16/techdocs-ref.png similarity index 100% rename from microsite/blog/assets/21-09-16/techdocs-ref.png rename to microsite-next/blog/assets/21-09-16/techdocs-ref.png diff --git a/microsite/blog/assets/21-09-30/50-public-adopters.png b/microsite-next/blog/assets/21-09-30/50-public-adopters.png similarity index 100% rename from microsite/blog/assets/21-09-30/50-public-adopters.png rename to microsite-next/blog/assets/21-09-30/50-public-adopters.png diff --git a/microsite/blog/assets/21-09-30/backstage-stats.png b/microsite-next/blog/assets/21-09-30/backstage-stats.png similarity index 100% rename from microsite/blog/assets/21-09-30/backstage-stats.png rename to microsite-next/blog/assets/21-09-30/backstage-stats.png diff --git a/microsite/blog/assets/21-09-30/public-backstage-adopters.png b/microsite-next/blog/assets/21-09-30/public-backstage-adopters.png similarity index 100% rename from microsite/blog/assets/21-09-30/public-backstage-adopters.png rename to microsite-next/blog/assets/21-09-30/public-backstage-adopters.png diff --git a/microsite/blog/assets/21-12-20/Backstage-background-02-2021.png b/microsite-next/blog/assets/21-12-20/Backstage-background-02-2021.png similarity index 100% rename from microsite/blog/assets/21-12-20/Backstage-background-02-2021.png rename to microsite-next/blog/assets/21-12-20/Backstage-background-02-2021.png diff --git a/microsite/blog/assets/21-12-20/backstage-wrapped-2021.png b/microsite-next/blog/assets/21-12-20/backstage-wrapped-2021.png similarity index 100% rename from microsite/blog/assets/21-12-20/backstage-wrapped-2021.png rename to microsite-next/blog/assets/21-12-20/backstage-wrapped-2021.png diff --git a/microsite/blog/assets/21-12-20/public-backstage-adopters-2021.png b/microsite-next/blog/assets/21-12-20/public-backstage-adopters-2021.png similarity index 100% rename from microsite/blog/assets/21-12-20/public-backstage-adopters-2021.png rename to microsite-next/blog/assets/21-12-20/public-backstage-adopters-2021.png diff --git a/microsite/blog/assets/22-01-25/composed-backstage-homepage.png b/microsite-next/blog/assets/22-01-25/composed-backstage-homepage.png similarity index 100% rename from microsite/blog/assets/22-01-25/composed-backstage-homepage.png rename to microsite-next/blog/assets/22-01-25/composed-backstage-homepage.png diff --git a/microsite/blog/assets/22-01-25/default-homepage-template.png b/microsite-next/blog/assets/22-01-25/default-homepage-template.png similarity index 100% rename from microsite/blog/assets/22-01-25/default-homepage-template.png rename to microsite-next/blog/assets/22-01-25/default-homepage-template.png diff --git a/microsite/blog/assets/22-01-25/homepage-components-figma.png b/microsite-next/blog/assets/22-01-25/homepage-components-figma.png similarity index 100% rename from microsite/blog/assets/22-01-25/homepage-components-figma.png rename to microsite-next/blog/assets/22-01-25/homepage-components-figma.png diff --git a/microsite/blog/assets/22-01-25/homepage-template-blog-post-header.png b/microsite-next/blog/assets/22-01-25/homepage-template-blog-post-header.png similarity index 100% rename from microsite/blog/assets/22-01-25/homepage-template-blog-post-header.png rename to microsite-next/blog/assets/22-01-25/homepage-template-blog-post-header.png diff --git a/microsite/blog/assets/22-01-25/spotify-backstage-homepage.png b/microsite-next/blog/assets/22-01-25/spotify-backstage-homepage.png similarity index 100% rename from microsite/blog/assets/22-01-25/spotify-backstage-homepage.png rename to microsite-next/blog/assets/22-01-25/spotify-backstage-homepage.png diff --git a/microsite/blog/assets/22-03-04/backstage-upgrade-helper-post-header.png b/microsite-next/blog/assets/22-03-04/backstage-upgrade-helper-post-header.png similarity index 100% rename from microsite/blog/assets/22-03-04/backstage-upgrade-helper-post-header.png rename to microsite-next/blog/assets/22-03-04/backstage-upgrade-helper-post-header.png diff --git a/microsite/blog/assets/22-03-04/backstage-upgrade-helper.gif b/microsite-next/blog/assets/22-03-04/backstage-upgrade-helper.gif similarity index 100% rename from microsite/blog/assets/22-03-04/backstage-upgrade-helper.gif rename to microsite-next/blog/assets/22-03-04/backstage-upgrade-helper.gif diff --git a/microsite/blog/assets/22-03-16/backstage-2nd-birthday.gif b/microsite-next/blog/assets/22-03-16/backstage-2nd-birthday.gif similarity index 100% rename from microsite/blog/assets/22-03-16/backstage-2nd-birthday.gif rename to microsite-next/blog/assets/22-03-16/backstage-2nd-birthday.gif diff --git a/microsite/blog/assets/22-03-16/release.1.0.gif b/microsite-next/blog/assets/22-03-16/release.1.0.gif similarity index 100% rename from microsite/blog/assets/22-03-16/release.1.0.gif rename to microsite-next/blog/assets/22-03-16/release.1.0.gif diff --git a/microsite/blog/assets/22-05-13/techdocs-addon-header.gif b/microsite-next/blog/assets/22-05-13/techdocs-addon-header.gif similarity index 100% rename from microsite/blog/assets/22-05-13/techdocs-addon-header.gif rename to microsite-next/blog/assets/22-05-13/techdocs-addon-header.gif diff --git a/microsite/blog/assets/22-05-13/techdocs-addon1.png b/microsite-next/blog/assets/22-05-13/techdocs-addon1.png similarity index 100% rename from microsite/blog/assets/22-05-13/techdocs-addon1.png rename to microsite-next/blog/assets/22-05-13/techdocs-addon1.png diff --git a/microsite/blog/assets/22-05-13/techdocs-addon2.png b/microsite-next/blog/assets/22-05-13/techdocs-addon2.png similarity index 100% rename from microsite/blog/assets/22-05-13/techdocs-addon2.png rename to microsite-next/blog/assets/22-05-13/techdocs-addon2.png diff --git a/microsite/blog/assets/22-05-13/techdocs-addon3.png b/microsite-next/blog/assets/22-05-13/techdocs-addon3.png similarity index 100% rename from microsite/blog/assets/22-05-13/techdocs-addon3.png rename to microsite-next/blog/assets/22-05-13/techdocs-addon3.png diff --git a/microsite/blog/assets/22-05-13/techdocs-addon4.png b/microsite-next/blog/assets/22-05-13/techdocs-addon4.png similarity index 100% rename from microsite/blog/assets/22-05-13/techdocs-addon4.png rename to microsite-next/blog/assets/22-05-13/techdocs-addon4.png diff --git a/microsite/blog/assets/22-05-13/techdocs-addon5.png b/microsite-next/blog/assets/22-05-13/techdocs-addon5.png similarity index 100% rename from microsite/blog/assets/22-05-13/techdocs-addon5.png rename to microsite-next/blog/assets/22-05-13/techdocs-addon5.png diff --git a/microsite/blog/assets/22-07-19/releasing-backstage-search-v1.png b/microsite-next/blog/assets/22-07-19/releasing-backstage-search-v1.png similarity index 100% rename from microsite/blog/assets/22-07-19/releasing-backstage-search-v1.png rename to microsite-next/blog/assets/22-07-19/releasing-backstage-search-v1.png diff --git a/microsite/blog/assets/22-08-23/X41-Backstage-Audit-2022.pdf b/microsite-next/blog/assets/22-08-23/X41-Backstage-Audit-2022.pdf similarity index 100% rename from microsite/blog/assets/22-08-23/X41-Backstage-Audit-2022.pdf rename to microsite-next/blog/assets/22-08-23/X41-Backstage-Audit-2022.pdf diff --git a/microsite/blog/assets/22-08-23/backstage-security-audit.png b/microsite-next/blog/assets/22-08-23/backstage-security-audit.png similarity index 100% rename from microsite/blog/assets/22-08-23/backstage-security-audit.png rename to microsite-next/blog/assets/22-08-23/backstage-security-audit.png diff --git a/microsite/blog/assets/22-09-08/analytics-api-fyi.png b/microsite-next/blog/assets/22-09-08/analytics-api-fyi.png similarity index 100% rename from microsite/blog/assets/22-09-08/analytics-api-fyi.png rename to microsite-next/blog/assets/22-09-08/analytics-api-fyi.png diff --git a/microsite/blog/assets/22-11-15/Introduction-to-Backstage-Developer-Portals-Made-Easy-2-768x432.png b/microsite-next/blog/assets/22-11-15/Introduction-to-Backstage-Developer-Portals-Made-Easy-2-768x432.png similarity index 100% rename from microsite/blog/assets/22-11-15/Introduction-to-Backstage-Developer-Portals-Made-Easy-2-768x432.png rename to microsite-next/blog/assets/22-11-15/Introduction-to-Backstage-Developer-Portals-Made-Easy-2-768x432.png diff --git a/microsite/blog/assets/3/audit-list.png b/microsite-next/blog/assets/3/audit-list.png similarity index 100% rename from microsite/blog/assets/3/audit-list.png rename to microsite-next/blog/assets/3/audit-list.png diff --git a/microsite/blog/assets/3/audit-view.png b/microsite-next/blog/assets/3/audit-view.png similarity index 100% rename from microsite/blog/assets/3/audit-view.png rename to microsite-next/blog/assets/3/audit-view.png diff --git a/microsite/blog/assets/3/create-audit.png b/microsite-next/blog/assets/3/create-audit.png similarity index 100% rename from microsite/blog/assets/3/create-audit.png rename to microsite-next/blog/assets/3/create-audit.png diff --git a/microsite/blog/assets/3/lead-copy.png b/microsite-next/blog/assets/3/lead-copy.png similarity index 100% rename from microsite/blog/assets/3/lead-copy.png rename to microsite-next/blog/assets/3/lead-copy.png diff --git a/microsite/blog/assets/3/lead.png b/microsite-next/blog/assets/3/lead.png similarity index 100% rename from microsite/blog/assets/3/lead.png rename to microsite-next/blog/assets/3/lead.png diff --git a/microsite/blog/assets/4/create-app.png b/microsite-next/blog/assets/4/create-app.png similarity index 100% rename from microsite/blog/assets/4/create-app.png rename to microsite-next/blog/assets/4/create-app.png diff --git a/microsite/blog/assets/4/welcome.png b/microsite-next/blog/assets/4/welcome.png similarity index 100% rename from microsite/blog/assets/4/welcome.png rename to microsite-next/blog/assets/4/welcome.png diff --git a/microsite/blog/assets/5/lead.png b/microsite-next/blog/assets/5/lead.png similarity index 100% rename from microsite/blog/assets/5/lead.png rename to microsite-next/blog/assets/5/lead.png diff --git a/microsite/blog/assets/6/header.png b/microsite-next/blog/assets/6/header.png similarity index 100% rename from microsite/blog/assets/6/header.png rename to microsite-next/blog/assets/6/header.png diff --git a/microsite/blog/assets/Backstage-mural-DS.png b/microsite-next/blog/assets/Backstage-mural-DS.png similarity index 100% rename from microsite/blog/assets/Backstage-mural-DS.png rename to microsite-next/blog/assets/Backstage-mural-DS.png diff --git a/microsite/blog/assets/announcing-techdocs/discover1.png b/microsite-next/blog/assets/announcing-techdocs/discover1.png similarity index 100% rename from microsite/blog/assets/announcing-techdocs/discover1.png rename to microsite-next/blog/assets/announcing-techdocs/discover1.png diff --git a/microsite/blog/assets/announcing-techdocs/discover2.png b/microsite-next/blog/assets/announcing-techdocs/discover2.png similarity index 100% rename from microsite/blog/assets/announcing-techdocs/discover2.png rename to microsite-next/blog/assets/announcing-techdocs/discover2.png diff --git a/microsite/blog/assets/announcing-techdocs/docs-in-backstage.png b/microsite-next/blog/assets/announcing-techdocs/docs-in-backstage.png similarity index 100% rename from microsite/blog/assets/announcing-techdocs/docs-in-backstage.png rename to microsite-next/blog/assets/announcing-techdocs/docs-in-backstage.png diff --git a/microsite/blog/assets/announcing-techdocs/feedback-loop1.png b/microsite-next/blog/assets/announcing-techdocs/feedback-loop1.png similarity index 100% rename from microsite/blog/assets/announcing-techdocs/feedback-loop1.png rename to microsite-next/blog/assets/announcing-techdocs/feedback-loop1.png diff --git a/microsite/blog/assets/announcing-techdocs/feedback-loop2.png b/microsite-next/blog/assets/announcing-techdocs/feedback-loop2.png similarity index 100% rename from microsite/blog/assets/announcing-techdocs/feedback-loop2.png rename to microsite-next/blog/assets/announcing-techdocs/feedback-loop2.png diff --git a/microsite/blog/assets/announcing-techdocs/github-issues.png b/microsite-next/blog/assets/announcing-techdocs/github-issues.png similarity index 100% rename from microsite/blog/assets/announcing-techdocs/github-issues.png rename to microsite-next/blog/assets/announcing-techdocs/github-issues.png diff --git a/microsite/blog/assets/announcing-techdocs/metrics.png b/microsite-next/blog/assets/announcing-techdocs/metrics.png similarity index 100% rename from microsite/blog/assets/announcing-techdocs/metrics.png rename to microsite-next/blog/assets/announcing-techdocs/metrics.png diff --git a/microsite/blog/assets/backstage-DS-header.png b/microsite-next/blog/assets/backstage-DS-header.png similarity index 100% rename from microsite/blog/assets/backstage-DS-header.png rename to microsite-next/blog/assets/backstage-DS-header.png diff --git a/microsite/blog/assets/backstage-discord-DS.png b/microsite-next/blog/assets/backstage-discord-DS.png similarity index 100% rename from microsite/blog/assets/backstage-discord-DS.png rename to microsite-next/blog/assets/backstage-discord-DS.png diff --git a/microsite/blog/assets/backstage-figma1-DS.png b/microsite-next/blog/assets/backstage-figma1-DS.png similarity index 100% rename from microsite/blog/assets/backstage-figma1-DS.png rename to microsite-next/blog/assets/backstage-figma1-DS.png diff --git a/microsite/blog/assets/backstage-figma2-ds.png b/microsite-next/blog/assets/backstage-figma2-ds.png similarity index 100% rename from microsite/blog/assets/backstage-figma2-ds.png rename to microsite-next/blog/assets/backstage-figma2-ds.png diff --git a/microsite/blog/assets/backstage-github-ds.png b/microsite-next/blog/assets/backstage-github-ds.png similarity index 100% rename from microsite/blog/assets/backstage-github-ds.png rename to microsite-next/blog/assets/backstage-github-ds.png diff --git a/microsite/blog/assets/backstage-guide-DS.png b/microsite-next/blog/assets/backstage-guide-DS.png similarity index 100% rename from microsite/blog/assets/backstage-guide-DS.png rename to microsite-next/blog/assets/backstage-guide-DS.png diff --git a/microsite/blog/assets/backstage-guidelines-ds.png b/microsite-next/blog/assets/backstage-guidelines-ds.png similarity index 100% rename from microsite/blog/assets/backstage-guidelines-ds.png rename to microsite-next/blog/assets/backstage-guidelines-ds.png diff --git a/microsite/blog/assets/backstage-storybook-ds.png b/microsite-next/blog/assets/backstage-storybook-ds.png similarity index 100% rename from microsite/blog/assets/backstage-storybook-ds.png rename to microsite-next/blog/assets/backstage-storybook-ds.png diff --git a/microsite/blog/assets/backstage-world-DS.png b/microsite-next/blog/assets/backstage-world-DS.png similarity index 100% rename from microsite/blog/assets/backstage-world-DS.png rename to microsite-next/blog/assets/backstage-world-DS.png diff --git a/microsite/blog/assets/blog_1.png b/microsite-next/blog/assets/blog_1.png similarity index 100% rename from microsite/blog/assets/blog_1.png rename to microsite-next/blog/assets/blog_1.png diff --git a/microsite/blog/assets/cncf-sandbox/cncf.png b/microsite-next/blog/assets/cncf-sandbox/cncf.png similarity index 100% rename from microsite/blog/assets/cncf-sandbox/cncf.png rename to microsite-next/blog/assets/cncf-sandbox/cncf.png diff --git a/microsite/blog/assets/illustration.svg b/microsite-next/blog/assets/illustration.svg similarity index 100% rename from microsite/blog/assets/illustration.svg rename to microsite-next/blog/assets/illustration.svg diff --git a/microsite/blog/assets/marketplace.png b/microsite-next/blog/assets/marketplace.png similarity index 100% rename from microsite/blog/assets/marketplace.png rename to microsite-next/blog/assets/marketplace.png diff --git a/microsite/data/on-demand/20211117-1.yaml b/microsite-next/data/on-demand/20211117-1.yaml similarity index 100% rename from microsite/data/on-demand/20211117-1.yaml rename to microsite-next/data/on-demand/20211117-1.yaml diff --git a/microsite/data/on-demand/20211118-1.yaml b/microsite-next/data/on-demand/20211118-1.yaml similarity index 100% rename from microsite/data/on-demand/20211118-1.yaml rename to microsite-next/data/on-demand/20211118-1.yaml diff --git a/microsite/data/on-demand/20211215-1.yaml b/microsite-next/data/on-demand/20211215-1.yaml similarity index 100% rename from microsite/data/on-demand/20211215-1.yaml rename to microsite-next/data/on-demand/20211215-1.yaml diff --git a/microsite/data/on-demand/20211216-1.yaml b/microsite-next/data/on-demand/20211216-1.yaml similarity index 100% rename from microsite/data/on-demand/20211216-1.yaml rename to microsite-next/data/on-demand/20211216-1.yaml diff --git a/microsite/data/on-demand/20220216-1.yaml b/microsite-next/data/on-demand/20220216-1.yaml similarity index 100% rename from microsite/data/on-demand/20220216-1.yaml rename to microsite-next/data/on-demand/20220216-1.yaml diff --git a/microsite/data/on-demand/20220223-1.yaml b/microsite-next/data/on-demand/20220223-1.yaml similarity index 100% rename from microsite/data/on-demand/20220223-1.yaml rename to microsite-next/data/on-demand/20220223-1.yaml diff --git a/microsite/data/on-demand/20220316-1.yaml b/microsite-next/data/on-demand/20220316-1.yaml similarity index 100% rename from microsite/data/on-demand/20220316-1.yaml rename to microsite-next/data/on-demand/20220316-1.yaml diff --git a/microsite/data/on-demand/20220323-1.yaml b/microsite-next/data/on-demand/20220323-1.yaml similarity index 100% rename from microsite/data/on-demand/20220323-1.yaml rename to microsite-next/data/on-demand/20220323-1.yaml diff --git a/microsite/data/on-demand/20220420-1.yaml b/microsite-next/data/on-demand/20220420-1.yaml similarity index 100% rename from microsite/data/on-demand/20220420-1.yaml rename to microsite-next/data/on-demand/20220420-1.yaml diff --git a/microsite/data/on-demand/20220427-1.yaml b/microsite-next/data/on-demand/20220427-1.yaml similarity index 100% rename from microsite/data/on-demand/20220427-1.yaml rename to microsite-next/data/on-demand/20220427-1.yaml diff --git a/microsite/data/on-demand/20220518-1.yaml b/microsite-next/data/on-demand/20220518-1.yaml similarity index 100% rename from microsite/data/on-demand/20220518-1.yaml rename to microsite-next/data/on-demand/20220518-1.yaml diff --git a/microsite/data/on-demand/20220525-1.yaml b/microsite-next/data/on-demand/20220525-1.yaml similarity index 100% rename from microsite/data/on-demand/20220525-1.yaml rename to microsite-next/data/on-demand/20220525-1.yaml diff --git a/microsite/data/on-demand/20220615-1.yaml b/microsite-next/data/on-demand/20220615-1.yaml similarity index 100% rename from microsite/data/on-demand/20220615-1.yaml rename to microsite-next/data/on-demand/20220615-1.yaml diff --git a/microsite/data/on-demand/20220622-1.yaml b/microsite-next/data/on-demand/20220622-1.yaml similarity index 100% rename from microsite/data/on-demand/20220622-1.yaml rename to microsite-next/data/on-demand/20220622-1.yaml diff --git a/microsite/data/on-demand/20220720-1.yaml b/microsite-next/data/on-demand/20220720-1.yaml similarity index 100% rename from microsite/data/on-demand/20220720-1.yaml rename to microsite-next/data/on-demand/20220720-1.yaml diff --git a/microsite/data/on-demand/20220727-1.yaml b/microsite-next/data/on-demand/20220727-1.yaml similarity index 100% rename from microsite/data/on-demand/20220727-1.yaml rename to microsite-next/data/on-demand/20220727-1.yaml diff --git a/microsite/data/on-demand/20220817-1.yaml b/microsite-next/data/on-demand/20220817-1.yaml similarity index 100% rename from microsite/data/on-demand/20220817-1.yaml rename to microsite-next/data/on-demand/20220817-1.yaml diff --git a/microsite/data/on-demand/20220824-1.yaml b/microsite-next/data/on-demand/20220824-1.yaml similarity index 100% rename from microsite/data/on-demand/20220824-1.yaml rename to microsite-next/data/on-demand/20220824-1.yaml diff --git a/microsite/data/on-demand/20220921-1.yaml b/microsite-next/data/on-demand/20220921-1.yaml similarity index 100% rename from microsite/data/on-demand/20220921-1.yaml rename to microsite-next/data/on-demand/20220921-1.yaml diff --git a/microsite/data/on-demand/20220928-1.yaml b/microsite-next/data/on-demand/20220928-1.yaml similarity index 100% rename from microsite/data/on-demand/20220928-1.yaml rename to microsite-next/data/on-demand/20220928-1.yaml diff --git a/microsite/data/plugins/adr.yaml b/microsite-next/data/plugins/adr.yaml similarity index 100% rename from microsite/data/plugins/adr.yaml rename to microsite-next/data/plugins/adr.yaml diff --git a/microsite/data/plugins/airbrake.yaml b/microsite-next/data/plugins/airbrake.yaml similarity index 100% rename from microsite/data/plugins/airbrake.yaml rename to microsite-next/data/plugins/airbrake.yaml diff --git a/microsite/data/plugins/allure.yaml b/microsite-next/data/plugins/allure.yaml similarity index 100% rename from microsite/data/plugins/allure.yaml rename to microsite-next/data/plugins/allure.yaml diff --git a/microsite/data/plugins/announcements.yaml b/microsite-next/data/plugins/announcements.yaml similarity index 100% rename from microsite/data/plugins/announcements.yaml rename to microsite-next/data/plugins/announcements.yaml diff --git a/microsite/data/plugins/api-docs.yaml b/microsite-next/data/plugins/api-docs.yaml similarity index 100% rename from microsite/data/plugins/api-docs.yaml rename to microsite-next/data/plugins/api-docs.yaml diff --git a/microsite/data/plugins/apollo-explorer.yaml b/microsite-next/data/plugins/apollo-explorer.yaml similarity index 100% rename from microsite/data/plugins/apollo-explorer.yaml rename to microsite-next/data/plugins/apollo-explorer.yaml diff --git a/microsite/data/plugins/argo-cd.yaml b/microsite-next/data/plugins/argo-cd.yaml similarity index 100% rename from microsite/data/plugins/argo-cd.yaml rename to microsite-next/data/plugins/argo-cd.yaml diff --git a/microsite/data/plugins/aws-cloudformation.yaml b/microsite-next/data/plugins/aws-cloudformation.yaml similarity index 100% rename from microsite/data/plugins/aws-cloudformation.yaml rename to microsite-next/data/plugins/aws-cloudformation.yaml diff --git a/microsite/data/plugins/aws-codesuite.yaml b/microsite-next/data/plugins/aws-codesuite.yaml similarity index 100% rename from microsite/data/plugins/aws-codesuite.yaml rename to microsite-next/data/plugins/aws-codesuite.yaml diff --git a/microsite/data/plugins/aws-lambda.yaml b/microsite-next/data/plugins/aws-lambda.yaml similarity index 100% rename from microsite/data/plugins/aws-lambda.yaml rename to microsite-next/data/plugins/aws-lambda.yaml diff --git a/microsite/data/plugins/aws-proton.yaml b/microsite-next/data/plugins/aws-proton.yaml similarity index 100% rename from microsite/data/plugins/aws-proton.yaml rename to microsite-next/data/plugins/aws-proton.yaml diff --git a/microsite/data/plugins/azure-pipelines.yaml b/microsite-next/data/plugins/azure-pipelines.yaml similarity index 100% rename from microsite/data/plugins/azure-pipelines.yaml rename to microsite-next/data/plugins/azure-pipelines.yaml diff --git a/microsite/data/plugins/azure-resources.yaml b/microsite-next/data/plugins/azure-resources.yaml similarity index 100% rename from microsite/data/plugins/azure-resources.yaml rename to microsite-next/data/plugins/azure-resources.yaml diff --git a/microsite/data/plugins/azure-sites.yaml b/microsite-next/data/plugins/azure-sites.yaml similarity index 100% rename from microsite/data/plugins/azure-sites.yaml rename to microsite-next/data/plugins/azure-sites.yaml diff --git a/microsite/data/plugins/azure-spring-apps.yml b/microsite-next/data/plugins/azure-spring-apps.yml similarity index 100% rename from microsite/data/plugins/azure-spring-apps.yml rename to microsite-next/data/plugins/azure-spring-apps.yml diff --git a/microsite/data/plugins/backstage-analytics-module-ga.yaml b/microsite-next/data/plugins/backstage-analytics-module-ga.yaml similarity index 100% rename from microsite/data/plugins/backstage-analytics-module-ga.yaml rename to microsite-next/data/plugins/backstage-analytics-module-ga.yaml diff --git a/microsite/data/plugins/backstage-kubernetes.yaml b/microsite-next/data/plugins/backstage-kubernetes.yaml similarity index 100% rename from microsite/data/plugins/backstage-kubernetes.yaml rename to microsite-next/data/plugins/backstage-kubernetes.yaml diff --git a/microsite/data/plugins/backstage-plugin-api-linter.yaml b/microsite-next/data/plugins/backstage-plugin-api-linter.yaml similarity index 100% rename from microsite/data/plugins/backstage-plugin-api-linter.yaml rename to microsite-next/data/plugins/backstage-plugin-api-linter.yaml diff --git a/microsite/data/plugins/backstage-plugin-ldap-auth.yml b/microsite-next/data/plugins/backstage-plugin-ldap-auth.yml similarity index 100% rename from microsite/data/plugins/backstage-plugin-ldap-auth.yml rename to microsite-next/data/plugins/backstage-plugin-ldap-auth.yml diff --git a/microsite/data/plugins/backstage-search-platform.yaml b/microsite-next/data/plugins/backstage-search-platform.yaml similarity index 100% rename from microsite/data/plugins/backstage-search-platform.yaml rename to microsite-next/data/plugins/backstage-search-platform.yaml diff --git a/microsite/data/plugins/backstage-software-catalog.yaml b/microsite-next/data/plugins/backstage-software-catalog.yaml similarity index 100% rename from microsite/data/plugins/backstage-software-catalog.yaml rename to microsite-next/data/plugins/backstage-software-catalog.yaml diff --git a/microsite/data/plugins/backstage-software-templates.yaml b/microsite-next/data/plugins/backstage-software-templates.yaml similarity index 100% rename from microsite/data/plugins/backstage-software-templates.yaml rename to microsite-next/data/plugins/backstage-software-templates.yaml diff --git a/microsite/data/plugins/backstage-techdocs.yaml b/microsite-next/data/plugins/backstage-techdocs.yaml similarity index 100% rename from microsite/data/plugins/backstage-techdocs.yaml rename to microsite-next/data/plugins/backstage-techdocs.yaml diff --git a/microsite/data/plugins/badges.yaml b/microsite-next/data/plugins/badges.yaml similarity index 100% rename from microsite/data/plugins/badges.yaml rename to microsite-next/data/plugins/badges.yaml diff --git a/microsite/data/plugins/bazaar.yaml b/microsite-next/data/plugins/bazaar.yaml similarity index 100% rename from microsite/data/plugins/bazaar.yaml rename to microsite-next/data/plugins/bazaar.yaml diff --git a/microsite/data/plugins/betterscan.yaml b/microsite-next/data/plugins/betterscan.yaml similarity index 100% rename from microsite/data/plugins/betterscan.yaml rename to microsite-next/data/plugins/betterscan.yaml diff --git a/microsite/data/plugins/bitrise.yaml b/microsite-next/data/plugins/bitrise.yaml similarity index 100% rename from microsite/data/plugins/bitrise.yaml rename to microsite-next/data/plugins/bitrise.yaml diff --git a/microsite/data/plugins/blackduck.yaml b/microsite-next/data/plugins/blackduck.yaml similarity index 100% rename from microsite/data/plugins/blackduck.yaml rename to microsite-next/data/plugins/blackduck.yaml diff --git a/microsite/data/plugins/bugsnag.yaml b/microsite-next/data/plugins/bugsnag.yaml similarity index 100% rename from microsite/data/plugins/bugsnag.yaml rename to microsite-next/data/plugins/bugsnag.yaml diff --git a/microsite/data/plugins/buildkite.yaml b/microsite-next/data/plugins/buildkite.yaml similarity index 100% rename from microsite/data/plugins/buildkite.yaml rename to microsite-next/data/plugins/buildkite.yaml diff --git a/microsite/data/plugins/catalog-backend-module-puppetdb.yaml b/microsite-next/data/plugins/catalog-backend-module-puppetdb.yaml similarity index 100% rename from microsite/data/plugins/catalog-backend-module-puppetdb.yaml rename to microsite-next/data/plugins/catalog-backend-module-puppetdb.yaml diff --git a/microsite/data/plugins/catalog-graph.yaml b/microsite-next/data/plugins/catalog-graph.yaml similarity index 100% rename from microsite/data/plugins/catalog-graph.yaml rename to microsite-next/data/plugins/catalog-graph.yaml diff --git a/microsite/data/plugins/cicd-statistics.yaml b/microsite-next/data/plugins/cicd-statistics.yaml similarity index 100% rename from microsite/data/plugins/cicd-statistics.yaml rename to microsite-next/data/plugins/cicd-statistics.yaml diff --git a/microsite/data/plugins/circleci.yaml b/microsite-next/data/plugins/circleci.yaml similarity index 100% rename from microsite/data/plugins/circleci.yaml rename to microsite-next/data/plugins/circleci.yaml diff --git a/microsite/data/plugins/cloud-build.yaml b/microsite-next/data/plugins/cloud-build.yaml similarity index 100% rename from microsite/data/plugins/cloud-build.yaml rename to microsite-next/data/plugins/cloud-build.yaml diff --git a/microsite/data/plugins/cloud-carbon-footprint.yaml b/microsite-next/data/plugins/cloud-carbon-footprint.yaml similarity index 100% rename from microsite/data/plugins/cloud-carbon-footprint.yaml rename to microsite-next/data/plugins/cloud-carbon-footprint.yaml diff --git a/microsite/data/plugins/cloudify.yaml b/microsite-next/data/plugins/cloudify.yaml similarity index 100% rename from microsite/data/plugins/cloudify.yaml rename to microsite-next/data/plugins/cloudify.yaml diff --git a/microsite/data/plugins/cloudsmith.yaml b/microsite-next/data/plugins/cloudsmith.yaml similarity index 100% rename from microsite/data/plugins/cloudsmith.yaml rename to microsite-next/data/plugins/cloudsmith.yaml diff --git a/microsite/data/plugins/codescene.yaml b/microsite-next/data/plugins/codescene.yaml similarity index 100% rename from microsite/data/plugins/codescene.yaml rename to microsite-next/data/plugins/codescene.yaml diff --git a/microsite/data/plugins/cortex.yaml b/microsite-next/data/plugins/cortex.yaml similarity index 100% rename from microsite/data/plugins/cortex.yaml rename to microsite-next/data/plugins/cortex.yaml diff --git a/microsite/data/plugins/cost-insights.yaml b/microsite-next/data/plugins/cost-insights.yaml similarity index 100% rename from microsite/data/plugins/cost-insights.yaml rename to microsite-next/data/plugins/cost-insights.yaml diff --git a/microsite/data/plugins/datadog.yaml b/microsite-next/data/plugins/datadog.yaml similarity index 100% rename from microsite/data/plugins/datadog.yaml rename to microsite-next/data/plugins/datadog.yaml diff --git a/microsite/data/plugins/dependencytrack b/microsite-next/data/plugins/dependencytrack similarity index 100% rename from microsite/data/plugins/dependencytrack rename to microsite-next/data/plugins/dependencytrack diff --git a/microsite/data/plugins/dora-metrics.yaml b/microsite-next/data/plugins/dora-metrics.yaml similarity index 100% rename from microsite/data/plugins/dora-metrics.yaml rename to microsite-next/data/plugins/dora-metrics.yaml diff --git a/microsite/data/plugins/dynatrace.yaml b/microsite-next/data/plugins/dynatrace.yaml similarity index 100% rename from microsite/data/plugins/dynatrace.yaml rename to microsite-next/data/plugins/dynatrace.yaml diff --git a/microsite/data/plugins/entity-feedback.yaml b/microsite-next/data/plugins/entity-feedback.yaml similarity index 100% rename from microsite/data/plugins/entity-feedback.yaml rename to microsite-next/data/plugins/entity-feedback.yaml diff --git a/microsite/data/plugins/firebase-functions.yaml b/microsite-next/data/plugins/firebase-functions.yaml similarity index 100% rename from microsite/data/plugins/firebase-functions.yaml rename to microsite-next/data/plugins/firebase-functions.yaml diff --git a/microsite/data/plugins/firehydrant.yaml b/microsite-next/data/plugins/firehydrant.yaml similarity index 100% rename from microsite/data/plugins/firehydrant.yaml rename to microsite-next/data/plugins/firehydrant.yaml diff --git a/microsite/data/plugins/fossa.yaml b/microsite-next/data/plugins/fossa.yaml similarity index 100% rename from microsite/data/plugins/fossa.yaml rename to microsite-next/data/plugins/fossa.yaml diff --git a/microsite/data/plugins/gcp-projects.yaml b/microsite-next/data/plugins/gcp-projects.yaml similarity index 100% rename from microsite/data/plugins/gcp-projects.yaml rename to microsite-next/data/plugins/gcp-projects.yaml diff --git a/microsite/data/plugins/git-release-manager.yaml b/microsite-next/data/plugins/git-release-manager.yaml similarity index 100% rename from microsite/data/plugins/git-release-manager.yaml rename to microsite-next/data/plugins/git-release-manager.yaml diff --git a/microsite/data/plugins/github-actions.yaml b/microsite-next/data/plugins/github-actions.yaml similarity index 100% rename from microsite/data/plugins/github-actions.yaml rename to microsite-next/data/plugins/github-actions.yaml diff --git a/microsite/data/plugins/github-insights.yaml b/microsite-next/data/plugins/github-insights.yaml similarity index 100% rename from microsite/data/plugins/github-insights.yaml rename to microsite-next/data/plugins/github-insights.yaml diff --git a/microsite/data/plugins/github-pull-requests-board.yaml b/microsite-next/data/plugins/github-pull-requests-board.yaml similarity index 100% rename from microsite/data/plugins/github-pull-requests-board.yaml rename to microsite-next/data/plugins/github-pull-requests-board.yaml diff --git a/microsite/data/plugins/github-pull-requests.yaml b/microsite-next/data/plugins/github-pull-requests.yaml similarity index 100% rename from microsite/data/plugins/github-pull-requests.yaml rename to microsite-next/data/plugins/github-pull-requests.yaml diff --git a/microsite/data/plugins/gitlab.yaml b/microsite-next/data/plugins/gitlab.yaml similarity index 100% rename from microsite/data/plugins/gitlab.yaml rename to microsite-next/data/plugins/gitlab.yaml diff --git a/microsite/data/plugins/gitops-cluster.yaml b/microsite-next/data/plugins/gitops-cluster.yaml similarity index 100% rename from microsite/data/plugins/gitops-cluster.yaml rename to microsite-next/data/plugins/gitops-cluster.yaml diff --git a/microsite/data/plugins/gocd.yaml b/microsite-next/data/plugins/gocd.yaml similarity index 100% rename from microsite/data/plugins/gocd.yaml rename to microsite-next/data/plugins/gocd.yaml diff --git a/microsite/data/plugins/grafana.yaml b/microsite-next/data/plugins/grafana.yaml similarity index 100% rename from microsite/data/plugins/grafana.yaml rename to microsite-next/data/plugins/grafana.yaml diff --git a/microsite/data/plugins/graphiql.yaml b/microsite-next/data/plugins/graphiql.yaml similarity index 100% rename from microsite/data/plugins/graphiql.yaml rename to microsite-next/data/plugins/graphiql.yaml diff --git a/microsite/data/plugins/graphql-voyager.yaml b/microsite-next/data/plugins/graphql-voyager.yaml similarity index 100% rename from microsite/data/plugins/graphql-voyager.yaml rename to microsite-next/data/plugins/graphql-voyager.yaml diff --git a/microsite/data/plugins/grpc-playground.yaml b/microsite-next/data/plugins/grpc-playground.yaml similarity index 100% rename from microsite/data/plugins/grpc-playground.yaml rename to microsite-next/data/plugins/grpc-playground.yaml diff --git a/microsite/data/plugins/harbor.yaml b/microsite-next/data/plugins/harbor.yaml similarity index 100% rename from microsite/data/plugins/harbor.yaml rename to microsite-next/data/plugins/harbor.yaml diff --git a/microsite/data/plugins/harness-ci-cd.yaml b/microsite-next/data/plugins/harness-ci-cd.yaml similarity index 100% rename from microsite/data/plugins/harness-ci-cd.yaml rename to microsite-next/data/plugins/harness-ci-cd.yaml diff --git a/microsite/data/plugins/harness-feature-flags.yaml b/microsite-next/data/plugins/harness-feature-flags.yaml similarity index 100% rename from microsite/data/plugins/harness-feature-flags.yaml rename to microsite-next/data/plugins/harness-feature-flags.yaml diff --git a/microsite/data/plugins/home.yaml b/microsite-next/data/plugins/home.yaml similarity index 100% rename from microsite/data/plugins/home.yaml rename to microsite-next/data/plugins/home.yaml diff --git a/microsite/data/plugins/hoop.yaml b/microsite-next/data/plugins/hoop.yaml similarity index 100% rename from microsite/data/plugins/hoop.yaml rename to microsite-next/data/plugins/hoop.yaml diff --git a/microsite/data/plugins/humanitec.yaml b/microsite-next/data/plugins/humanitec.yaml similarity index 100% rename from microsite/data/plugins/humanitec.yaml rename to microsite-next/data/plugins/humanitec.yaml diff --git a/microsite/data/plugins/ilert.yaml b/microsite-next/data/plugins/ilert.yaml similarity index 100% rename from microsite/data/plugins/ilert.yaml rename to microsite-next/data/plugins/ilert.yaml diff --git a/microsite/data/plugins/jenkins.yaml b/microsite-next/data/plugins/jenkins.yaml similarity index 100% rename from microsite/data/plugins/jenkins.yaml rename to microsite-next/data/plugins/jenkins.yaml diff --git a/microsite/data/plugins/jira.yaml b/microsite-next/data/plugins/jira.yaml similarity index 100% rename from microsite/data/plugins/jira.yaml rename to microsite-next/data/plugins/jira.yaml diff --git a/microsite/data/plugins/kafka.yaml b/microsite-next/data/plugins/kafka.yaml similarity index 100% rename from microsite/data/plugins/kafka.yaml rename to microsite-next/data/plugins/kafka.yaml diff --git a/microsite/data/plugins/kpt-config-as-data.yaml b/microsite-next/data/plugins/kpt-config-as-data.yaml similarity index 100% rename from microsite/data/plugins/kpt-config-as-data.yaml rename to microsite-next/data/plugins/kpt-config-as-data.yaml diff --git a/microsite/data/plugins/kubevela.yaml b/microsite-next/data/plugins/kubevela.yaml similarity index 100% rename from microsite/data/plugins/kubevela.yaml rename to microsite-next/data/plugins/kubevela.yaml diff --git a/microsite/data/plugins/lighthouse.yaml b/microsite-next/data/plugins/lighthouse.yaml similarity index 100% rename from microsite/data/plugins/lighthouse.yaml rename to microsite-next/data/plugins/lighthouse.yaml diff --git a/microsite/data/plugins/new-relic.yaml b/microsite-next/data/plugins/new-relic.yaml similarity index 100% rename from microsite/data/plugins/new-relic.yaml rename to microsite-next/data/plugins/new-relic.yaml diff --git a/microsite/data/plugins/newrelic-dashboard.yaml b/microsite-next/data/plugins/newrelic-dashboard.yaml similarity index 100% rename from microsite/data/plugins/newrelic-dashboard.yaml rename to microsite-next/data/plugins/newrelic-dashboard.yaml diff --git a/microsite/data/plugins/octopus-deploy.yaml b/microsite-next/data/plugins/octopus-deploy.yaml similarity index 100% rename from microsite/data/plugins/octopus-deploy.yaml rename to microsite-next/data/plugins/octopus-deploy.yaml diff --git a/microsite/data/plugins/okta-entity-providers.yaml b/microsite-next/data/plugins/okta-entity-providers.yaml similarity index 100% rename from microsite/data/plugins/okta-entity-providers.yaml rename to microsite-next/data/plugins/okta-entity-providers.yaml diff --git a/microsite/data/plugins/opsgenie.yaml b/microsite-next/data/plugins/opsgenie.yaml similarity index 100% rename from microsite/data/plugins/opsgenie.yaml rename to microsite-next/data/plugins/opsgenie.yaml diff --git a/microsite/data/plugins/opslevel-maturity.yaml b/microsite-next/data/plugins/opslevel-maturity.yaml similarity index 100% rename from microsite/data/plugins/opslevel-maturity.yaml rename to microsite-next/data/plugins/opslevel-maturity.yaml diff --git a/microsite/data/plugins/pager-duty.yaml b/microsite-next/data/plugins/pager-duty.yaml similarity index 100% rename from microsite/data/plugins/pager-duty.yaml rename to microsite-next/data/plugins/pager-duty.yaml diff --git a/microsite/data/plugins/periskop.yaml b/microsite-next/data/plugins/periskop.yaml similarity index 100% rename from microsite/data/plugins/periskop.yaml rename to microsite-next/data/plugins/periskop.yaml diff --git a/microsite/data/plugins/playlist.yaml b/microsite-next/data/plugins/playlist.yaml similarity index 100% rename from microsite/data/plugins/playlist.yaml rename to microsite-next/data/plugins/playlist.yaml diff --git a/microsite/data/plugins/prometheus.yaml b/microsite-next/data/plugins/prometheus.yaml similarity index 100% rename from microsite/data/plugins/prometheus.yaml rename to microsite-next/data/plugins/prometheus.yaml diff --git a/microsite/data/plugins/qeta.yaml b/microsite-next/data/plugins/qeta.yaml similarity index 100% rename from microsite/data/plugins/qeta.yaml rename to microsite-next/data/plugins/qeta.yaml diff --git a/microsite/data/plugins/rollbar.yaml b/microsite-next/data/plugins/rollbar.yaml similarity index 100% rename from microsite/data/plugins/rollbar.yaml rename to microsite-next/data/plugins/rollbar.yaml diff --git a/microsite/data/plugins/rootly.yaml b/microsite-next/data/plugins/rootly.yaml similarity index 100% rename from microsite/data/plugins/rootly.yaml rename to microsite-next/data/plugins/rootly.yaml diff --git a/microsite/data/plugins/s3-viewer.yaml b/microsite-next/data/plugins/s3-viewer.yaml similarity index 100% rename from microsite/data/plugins/s3-viewer.yaml rename to microsite-next/data/plugins/s3-viewer.yaml diff --git a/microsite/data/plugins/scaffolder-backend-dotnet.yaml b/microsite-next/data/plugins/scaffolder-backend-dotnet.yaml similarity index 100% rename from microsite/data/plugins/scaffolder-backend-dotnet.yaml rename to microsite-next/data/plugins/scaffolder-backend-dotnet.yaml diff --git a/microsite/data/plugins/scaffolder-backend-git.yaml b/microsite-next/data/plugins/scaffolder-backend-git.yaml similarity index 100% rename from microsite/data/plugins/scaffolder-backend-git.yaml rename to microsite-next/data/plugins/scaffolder-backend-git.yaml diff --git a/microsite/data/plugins/scaffolder-backend-module-rails.yaml b/microsite-next/data/plugins/scaffolder-backend-module-rails.yaml similarity index 100% rename from microsite/data/plugins/scaffolder-backend-module-rails.yaml rename to microsite-next/data/plugins/scaffolder-backend-module-rails.yaml diff --git a/microsite/data/plugins/scaffolder-backend-roadie-aws.yaml b/microsite-next/data/plugins/scaffolder-backend-roadie-aws.yaml similarity index 100% rename from microsite/data/plugins/scaffolder-backend-roadie-aws.yaml rename to microsite-next/data/plugins/scaffolder-backend-roadie-aws.yaml diff --git a/microsite/data/plugins/scaffolder-backend-roadie-http-request.yaml b/microsite-next/data/plugins/scaffolder-backend-roadie-http-request.yaml similarity index 100% rename from microsite/data/plugins/scaffolder-backend-roadie-http-request.yaml rename to microsite-next/data/plugins/scaffolder-backend-roadie-http-request.yaml diff --git a/microsite/data/plugins/scaffolder-backend-roadie-utils.yaml b/microsite-next/data/plugins/scaffolder-backend-roadie-utils.yaml similarity index 100% rename from microsite/data/plugins/scaffolder-backend-roadie-utils.yaml rename to microsite-next/data/plugins/scaffolder-backend-roadie-utils.yaml diff --git a/microsite/data/plugins/score-card.yaml b/microsite-next/data/plugins/score-card.yaml similarity index 100% rename from microsite/data/plugins/score-card.yaml rename to microsite-next/data/plugins/score-card.yaml diff --git a/microsite/data/plugins/security-insights.yaml b/microsite-next/data/plugins/security-insights.yaml similarity index 100% rename from microsite/data/plugins/security-insights.yaml rename to microsite-next/data/plugins/security-insights.yaml diff --git a/microsite/data/plugins/sentry.yaml b/microsite-next/data/plugins/sentry.yaml similarity index 100% rename from microsite/data/plugins/sentry.yaml rename to microsite-next/data/plugins/sentry.yaml diff --git a/microsite/data/plugins/shortcuts.yaml b/microsite-next/data/plugins/shortcuts.yaml similarity index 100% rename from microsite/data/plugins/shortcuts.yaml rename to microsite-next/data/plugins/shortcuts.yaml diff --git a/microsite/data/plugins/snyk-security.yaml b/microsite-next/data/plugins/snyk-security.yaml similarity index 100% rename from microsite/data/plugins/snyk-security.yaml rename to microsite-next/data/plugins/snyk-security.yaml diff --git a/microsite/data/plugins/sonarqube.yaml b/microsite-next/data/plugins/sonarqube.yaml similarity index 100% rename from microsite/data/plugins/sonarqube.yaml rename to microsite-next/data/plugins/sonarqube.yaml diff --git a/microsite/data/plugins/splunk-on-call.yaml b/microsite-next/data/plugins/splunk-on-call.yaml similarity index 100% rename from microsite/data/plugins/splunk-on-call.yaml rename to microsite-next/data/plugins/splunk-on-call.yaml diff --git a/microsite/data/plugins/stack-overflow.yaml b/microsite-next/data/plugins/stack-overflow.yaml similarity index 100% rename from microsite/data/plugins/stack-overflow.yaml rename to microsite-next/data/plugins/stack-overflow.yaml diff --git a/microsite/data/plugins/stackstorm.yaml b/microsite-next/data/plugins/stackstorm.yaml similarity index 100% rename from microsite/data/plugins/stackstorm.yaml rename to microsite-next/data/plugins/stackstorm.yaml diff --git a/microsite/data/plugins/tech-insights.yaml b/microsite-next/data/plugins/tech-insights.yaml similarity index 100% rename from microsite/data/plugins/tech-insights.yaml rename to microsite-next/data/plugins/tech-insights.yaml diff --git a/microsite/data/plugins/tech-radar.yaml b/microsite-next/data/plugins/tech-radar.yaml similarity index 100% rename from microsite/data/plugins/tech-radar.yaml rename to microsite-next/data/plugins/tech-radar.yaml diff --git a/microsite/data/plugins/tekton-pipelines.yaml b/microsite-next/data/plugins/tekton-pipelines.yaml similarity index 100% rename from microsite/data/plugins/tekton-pipelines.yaml rename to microsite-next/data/plugins/tekton-pipelines.yaml diff --git a/microsite/data/plugins/todo.yaml b/microsite-next/data/plugins/todo.yaml similarity index 100% rename from microsite/data/plugins/todo.yaml rename to microsite-next/data/plugins/todo.yaml diff --git a/microsite/data/plugins/toolbox.yaml b/microsite-next/data/plugins/toolbox.yaml similarity index 100% rename from microsite/data/plugins/toolbox.yaml rename to microsite-next/data/plugins/toolbox.yaml diff --git a/microsite/data/plugins/torque.yaml b/microsite-next/data/plugins/torque.yaml similarity index 100% rename from microsite/data/plugins/torque.yaml rename to microsite-next/data/plugins/torque.yaml diff --git a/microsite/data/plugins/travis-ci.yaml b/microsite-next/data/plugins/travis-ci.yaml similarity index 100% rename from microsite/data/plugins/travis-ci.yaml rename to microsite-next/data/plugins/travis-ci.yaml diff --git a/microsite/data/plugins/vault.yaml b/microsite-next/data/plugins/vault.yaml similarity index 100% rename from microsite/data/plugins/vault.yaml rename to microsite-next/data/plugins/vault.yaml diff --git a/microsite/data/plugins/xcmetrics.yaml b/microsite-next/data/plugins/xcmetrics.yaml similarity index 100% rename from microsite/data/plugins/xcmetrics.yaml rename to microsite-next/data/plugins/xcmetrics.yaml diff --git a/microsite-next/docusaurus.config.js b/microsite-next/docusaurus.config.js index 4f7a46cb8d..025c773a9c 100644 --- a/microsite-next/docusaurus.config.js +++ b/microsite-next/docusaurus.config.js @@ -52,7 +52,7 @@ module.exports = { sidebarPath: 'sidebars.json', }, blog: { - path: '../microsite/blog', + path: 'blog', }, theme: { customCss: 'src/css/customTheme.css', diff --git a/microsite-next/src/pages/on-demand/index.tsx b/microsite-next/src/pages/on-demand/index.tsx index 7262005f70..19c227b550 100644 --- a/microsite-next/src/pages/on-demand/index.tsx +++ b/microsite-next/src/pages/on-demand/index.tsx @@ -9,7 +9,7 @@ import Link from '@docusaurus/Link'; //#region Plugin data import const onDemandContext = require.context( - '../../../../microsite/data/on-demand', + '../../../data/on-demand', false, /\.ya?ml/, ); diff --git a/microsite-next/src/pages/plugins/index.tsx b/microsite-next/src/pages/plugins/index.tsx index 0e57e01994..280a165daa 100644 --- a/microsite-next/src/pages/plugins/index.tsx +++ b/microsite-next/src/pages/plugins/index.tsx @@ -9,7 +9,7 @@ import { truncateDescription } from '@site/src/util/truncateDescription'; //#region Plugin data import const pluginsContext = require.context( - '../../../../microsite/data/plugins', + '../../../data/plugins', false, /\.ya?ml/, ); diff --git a/microsite-next/static b/microsite-next/static deleted file mode 120000 index d9a02b18c2..0000000000 --- a/microsite-next/static +++ /dev/null @@ -1 +0,0 @@ -../microsite/static \ No newline at end of file diff --git a/microsite/static/.nojekyll b/microsite-next/static/.nojekyll similarity index 100% rename from microsite/static/.nojekyll rename to microsite-next/static/.nojekyll diff --git a/microsite/static/CNAME b/microsite-next/static/CNAME similarity index 100% rename from microsite/static/CNAME rename to microsite-next/static/CNAME diff --git a/microsite/static/animations/backstage-kubernetes-icon-1.gif b/microsite-next/static/animations/backstage-kubernetes-icon-1.gif similarity index 100% rename from microsite/static/animations/backstage-kubernetes-icon-1.gif rename to microsite-next/static/animations/backstage-kubernetes-icon-1.gif diff --git a/microsite/static/animations/backstage-logos-hero-8.gif b/microsite-next/static/animations/backstage-logos-hero-8.gif similarity index 100% rename from microsite/static/animations/backstage-logos-hero-8.gif rename to microsite-next/static/animations/backstage-logos-hero-8.gif diff --git a/microsite/static/animations/backstage-plugin-icon-2.gif b/microsite-next/static/animations/backstage-plugin-icon-2.gif similarity index 100% rename from microsite/static/animations/backstage-plugin-icon-2.gif rename to microsite-next/static/animations/backstage-plugin-icon-2.gif diff --git a/microsite/static/animations/backstage-search-platform-icon-1.gif b/microsite-next/static/animations/backstage-search-platform-icon-1.gif similarity index 100% rename from microsite/static/animations/backstage-search-platform-icon-1.gif rename to microsite-next/static/animations/backstage-search-platform-icon-1.gif diff --git a/microsite/static/animations/backstage-software-catalog-icon-1.gif b/microsite-next/static/animations/backstage-software-catalog-icon-1.gif similarity index 100% rename from microsite/static/animations/backstage-software-catalog-icon-1.gif rename to microsite-next/static/animations/backstage-software-catalog-icon-1.gif diff --git a/microsite/static/animations/backstage-software-templates-icon-5.gif b/microsite-next/static/animations/backstage-software-templates-icon-5.gif similarity index 100% rename from microsite/static/animations/backstage-software-templates-icon-5.gif rename to microsite-next/static/animations/backstage-software-templates-icon-5.gif diff --git a/microsite/static/animations/backstage-speed-paradox-7.gif b/microsite-next/static/animations/backstage-speed-paradox-7.gif similarity index 100% rename from microsite/static/animations/backstage-speed-paradox-7.gif rename to microsite-next/static/animations/backstage-speed-paradox-7.gif diff --git a/microsite/static/animations/backstage-standards-paradox-4.gif b/microsite-next/static/animations/backstage-standards-paradox-4.gif similarity index 100% rename from microsite/static/animations/backstage-standards-paradox-4.gif rename to microsite-next/static/animations/backstage-standards-paradox-4.gif diff --git a/microsite/static/animations/backstage-techdocs-icon-1.gif b/microsite-next/static/animations/backstage-techdocs-icon-1.gif similarity index 100% rename from microsite/static/animations/backstage-techdocs-icon-1.gif rename to microsite-next/static/animations/backstage-techdocs-icon-1.gif diff --git a/microsite/static/css/custom.css b/microsite-next/static/css/custom.css similarity index 100% rename from microsite/static/css/custom.css rename to microsite-next/static/css/custom.css diff --git a/microsite/static/css/on-demand.css b/microsite-next/static/css/on-demand.css similarity index 100% rename from microsite/static/css/on-demand.css rename to microsite-next/static/css/on-demand.css diff --git a/microsite/static/css/plugins.css b/microsite-next/static/css/plugins.css similarity index 100% rename from microsite/static/css/plugins.css rename to microsite-next/static/css/plugins.css diff --git a/microsite/static/img/adr-logo.png b/microsite-next/static/img/adr-logo.png similarity index 100% rename from microsite/static/img/adr-logo.png rename to microsite-next/static/img/adr-logo.png diff --git a/microsite/static/img/android-chrome-192x192.png b/microsite-next/static/img/android-chrome-192x192.png similarity index 100% rename from microsite/static/img/android-chrome-192x192.png rename to microsite-next/static/img/android-chrome-192x192.png diff --git a/microsite/static/img/android-chrome-512x512.png b/microsite-next/static/img/android-chrome-512x512.png similarity index 100% rename from microsite/static/img/android-chrome-512x512.png rename to microsite-next/static/img/android-chrome-512x512.png diff --git a/microsite/static/img/apollo-explorer.png b/microsite-next/static/img/apollo-explorer.png similarity index 100% rename from microsite/static/img/apollo-explorer.png rename to microsite-next/static/img/apollo-explorer.png diff --git a/microsite/static/img/apple-touch-icon.png b/microsite-next/static/img/apple-touch-icon.png similarity index 100% rename from microsite/static/img/apple-touch-icon.png rename to microsite-next/static/img/apple-touch-icon.png diff --git a/microsite/static/img/azure-pipelines.svg b/microsite-next/static/img/azure-pipelines.svg similarity index 100% rename from microsite/static/img/azure-pipelines.svg rename to microsite-next/static/img/azure-pipelines.svg diff --git a/microsite/static/img/b-sessions.png b/microsite-next/static/img/b-sessions.png similarity index 100% rename from microsite/static/img/b-sessions.png rename to microsite-next/static/img/b-sessions.png diff --git a/microsite/static/img/backstage-k8s.svg b/microsite-next/static/img/backstage-k8s.svg similarity index 100% rename from microsite/static/img/backstage-k8s.svg rename to microsite-next/static/img/backstage-k8s.svg diff --git a/microsite/static/img/backstage-logo-cncf.svg b/microsite-next/static/img/backstage-logo-cncf.svg similarity index 100% rename from microsite/static/img/backstage-logo-cncf.svg rename to microsite-next/static/img/backstage-logo-cncf.svg diff --git a/microsite/static/img/backstage-search-platform.svg b/microsite-next/static/img/backstage-search-platform.svg similarity index 100% rename from microsite/static/img/backstage-search-platform.svg rename to microsite-next/static/img/backstage-search-platform.svg diff --git a/microsite/static/img/backstage-software-catalog.svg b/microsite-next/static/img/backstage-software-catalog.svg similarity index 100% rename from microsite/static/img/backstage-software-catalog.svg rename to microsite-next/static/img/backstage-software-catalog.svg diff --git a/microsite/static/img/backstage-software-templates.svg b/microsite-next/static/img/backstage-software-templates.svg similarity index 100% rename from microsite/static/img/backstage-software-templates.svg rename to microsite-next/static/img/backstage-software-templates.svg diff --git a/microsite/static/img/backstage-techdocs.svg b/microsite-next/static/img/backstage-techdocs.svg similarity index 100% rename from microsite/static/img/backstage-techdocs.svg rename to microsite-next/static/img/backstage-techdocs.svg diff --git a/microsite/static/img/badges.svg b/microsite-next/static/img/badges.svg similarity index 100% rename from microsite/static/img/badges.svg rename to microsite-next/static/img/badges.svg diff --git a/microsite/static/img/bazaar.svg b/microsite-next/static/img/bazaar.svg similarity index 100% rename from microsite/static/img/bazaar.svg rename to microsite-next/static/img/bazaar.svg diff --git a/microsite/static/img/cards-mobile.png b/microsite-next/static/img/cards-mobile.png similarity index 100% rename from microsite/static/img/cards-mobile.png rename to microsite-next/static/img/cards-mobile.png diff --git a/microsite/static/img/cards-plugins.png b/microsite-next/static/img/cards-plugins.png similarity index 100% rename from microsite/static/img/cards-plugins.png rename to microsite-next/static/img/cards-plugins.png diff --git a/microsite/static/img/cards-wide.png b/microsite-next/static/img/cards-wide.png similarity index 100% rename from microsite/static/img/cards-wide.png rename to microsite-next/static/img/cards-wide.png diff --git a/microsite/static/img/cards.png b/microsite-next/static/img/cards.png similarity index 100% rename from microsite/static/img/cards.png rename to microsite-next/static/img/cards.png diff --git a/microsite/static/img/catalog-graph.svg b/microsite-next/static/img/catalog-graph.svg similarity index 100% rename from microsite/static/img/catalog-graph.svg rename to microsite-next/static/img/catalog-graph.svg diff --git a/microsite/static/img/cicd-statistics.svg b/microsite-next/static/img/cicd-statistics.svg similarity index 100% rename from microsite/static/img/cicd-statistics.svg rename to microsite-next/static/img/cicd-statistics.svg diff --git a/microsite/static/img/circleci.png b/microsite-next/static/img/circleci.png similarity index 100% rename from microsite/static/img/circleci.png rename to microsite-next/static/img/circleci.png diff --git a/microsite/static/img/cncf-color.svg b/microsite-next/static/img/cncf-color.svg similarity index 100% rename from microsite/static/img/cncf-color.svg rename to microsite-next/static/img/cncf-color.svg diff --git a/microsite/static/img/cncf-white.svg b/microsite-next/static/img/cncf-white.svg similarity index 100% rename from microsite/static/img/cncf-white.svg rename to microsite-next/static/img/cncf-white.svg diff --git a/microsite/static/img/code.gif b/microsite-next/static/img/code.gif similarity index 100% rename from microsite/static/img/code.gif rename to microsite-next/static/img/code.gif diff --git a/microsite/static/img/code.png b/microsite-next/static/img/code.png similarity index 100% rename from microsite/static/img/code.png rename to microsite-next/static/img/code.png diff --git a/microsite/static/img/codescene_logo.svg b/microsite-next/static/img/codescene_logo.svg similarity index 100% rename from microsite/static/img/codescene_logo.svg rename to microsite-next/static/img/codescene_logo.svg diff --git a/microsite/static/img/compliance.svg b/microsite-next/static/img/compliance.svg similarity index 100% rename from microsite/static/img/compliance.svg rename to microsite-next/static/img/compliance.svg diff --git a/microsite/static/img/components-with-filter-small.png b/microsite-next/static/img/components-with-filter-small.png similarity index 100% rename from microsite/static/img/components-with-filter-small.png rename to microsite-next/static/img/components-with-filter-small.png diff --git a/microsite/static/img/components-with-filter.png b/microsite-next/static/img/components-with-filter.png similarity index 100% rename from microsite/static/img/components-with-filter.png rename to microsite-next/static/img/components-with-filter.png diff --git a/microsite/static/img/cortex.png b/microsite-next/static/img/cortex.png similarity index 100% rename from microsite/static/img/cortex.png rename to microsite-next/static/img/cortex.png diff --git a/microsite/static/img/cost-insights.png b/microsite-next/static/img/cost-insights.png similarity index 100% rename from microsite/static/img/cost-insights.png rename to microsite-next/static/img/cost-insights.png diff --git a/microsite/static/img/demo-illustration.svg b/microsite-next/static/img/demo-illustration.svg similarity index 100% rename from microsite/static/img/demo-illustration.svg rename to microsite-next/static/img/demo-illustration.svg diff --git a/microsite/static/img/demo-screen.png b/microsite-next/static/img/demo-screen.png similarity index 100% rename from microsite/static/img/demo-screen.png rename to microsite-next/static/img/demo-screen.png diff --git a/microsite/static/img/developers.svg b/microsite-next/static/img/developers.svg similarity index 100% rename from microsite/static/img/developers.svg rename to microsite-next/static/img/developers.svg diff --git a/microsite/static/img/docs-like-code.png b/microsite-next/static/img/docs-like-code.png similarity index 100% rename from microsite/static/img/docs-like-code.png rename to microsite-next/static/img/docs-like-code.png diff --git a/microsite/static/img/dot.svg b/microsite-next/static/img/dot.svg similarity index 100% rename from microsite/static/img/dot.svg rename to microsite-next/static/img/dot.svg diff --git a/microsite/static/img/dynatrace.svg b/microsite-next/static/img/dynatrace.svg similarity index 100% rename from microsite/static/img/dynatrace.svg rename to microsite-next/static/img/dynatrace.svg diff --git a/microsite/static/img/embraced.svg b/microsite-next/static/img/embraced.svg similarity index 100% rename from microsite/static/img/embraced.svg rename to microsite-next/static/img/embraced.svg diff --git a/microsite/static/img/enfuse.png b/microsite-next/static/img/enfuse.png similarity index 100% rename from microsite/static/img/enfuse.png rename to microsite-next/static/img/enfuse.png diff --git a/microsite/static/img/entity-feedback-logo.png b/microsite-next/static/img/entity-feedback-logo.png similarity index 100% rename from microsite/static/img/entity-feedback-logo.png rename to microsite-next/static/img/entity-feedback-logo.png diff --git a/microsite/static/img/favicon-16x16.png b/microsite-next/static/img/favicon-16x16.png similarity index 100% rename from microsite/static/img/favicon-16x16.png rename to microsite-next/static/img/favicon-16x16.png diff --git a/microsite/static/img/favicon-32x32.png b/microsite-next/static/img/favicon-32x32.png similarity index 100% rename from microsite/static/img/favicon-32x32.png rename to microsite-next/static/img/favicon-32x32.png diff --git a/microsite/static/img/favicon.ico b/microsite-next/static/img/favicon.ico similarity index 100% rename from microsite/static/img/favicon.ico rename to microsite-next/static/img/favicon.ico diff --git a/microsite/static/img/favicon.svg b/microsite-next/static/img/favicon.svg similarity index 100% rename from microsite/static/img/favicon.svg rename to microsite-next/static/img/favicon.svg diff --git a/microsite/static/img/ga-icon.png b/microsite-next/static/img/ga-icon.png similarity index 100% rename from microsite/static/img/ga-icon.png rename to microsite-next/static/img/ga-icon.png diff --git a/microsite/static/img/git-release-manager-logo.svg b/microsite-next/static/img/git-release-manager-logo.svg similarity index 100% rename from microsite/static/img/git-release-manager-logo.svg rename to microsite-next/static/img/git-release-manager-logo.svg diff --git a/microsite/static/img/github-pull-requests-board-logo.svg b/microsite-next/static/img/github-pull-requests-board-logo.svg similarity index 100% rename from microsite/static/img/github-pull-requests-board-logo.svg rename to microsite-next/static/img/github-pull-requests-board-logo.svg diff --git a/microsite/static/img/gke-logo.png b/microsite-next/static/img/gke-logo.png similarity index 100% rename from microsite/static/img/gke-logo.png rename to microsite-next/static/img/gke-logo.png diff --git a/microsite/static/img/home.png b/microsite-next/static/img/home.png similarity index 100% rename from microsite/static/img/home.png rename to microsite-next/static/img/home.png diff --git a/microsite/static/img/humanitec-logo.png b/microsite-next/static/img/humanitec-logo.png similarity index 100% rename from microsite/static/img/humanitec-logo.png rename to microsite-next/static/img/humanitec-logo.png diff --git a/microsite/static/img/laptop-screen.svg b/microsite-next/static/img/laptop-screen.svg similarity index 100% rename from microsite/static/img/laptop-screen.svg rename to microsite-next/static/img/laptop-screen.svg diff --git a/microsite/static/img/laptop.svg b/microsite-next/static/img/laptop.svg similarity index 100% rename from microsite/static/img/laptop.svg rename to microsite-next/static/img/laptop.svg diff --git a/microsite/static/img/lighthouse.png b/microsite-next/static/img/lighthouse.png similarity index 100% rename from microsite/static/img/lighthouse.png rename to microsite-next/static/img/lighthouse.png diff --git a/microsite/static/img/logo-black-248x250.png b/microsite-next/static/img/logo-black-248x250.png similarity index 100% rename from microsite/static/img/logo-black-248x250.png rename to microsite-next/static/img/logo-black-248x250.png diff --git a/microsite/static/img/logo-gradient-on-dark.svg b/microsite-next/static/img/logo-gradient-on-dark.svg similarity index 100% rename from microsite/static/img/logo-gradient-on-dark.svg rename to microsite-next/static/img/logo-gradient-on-dark.svg diff --git a/microsite/static/img/logo.svg b/microsite-next/static/img/logo.svg similarity index 100% rename from microsite/static/img/logo.svg rename to microsite-next/static/img/logo.svg diff --git a/microsite/static/img/logos-background.svg b/microsite-next/static/img/logos-background.svg similarity index 100% rename from microsite/static/img/logos-background.svg rename to microsite-next/static/img/logos-background.svg diff --git a/microsite/static/img/logos-signature.svg b/microsite-next/static/img/logos-signature.svg similarity index 100% rename from microsite/static/img/logos-signature.svg rename to microsite-next/static/img/logos-signature.svg diff --git a/microsite/static/img/logos.svg b/microsite-next/static/img/logos.svg similarity index 100% rename from microsite/static/img/logos.svg rename to microsite-next/static/img/logos.svg diff --git a/microsite/static/img/mstile-150x150.png b/microsite-next/static/img/mstile-150x150.png similarity index 100% rename from microsite/static/img/mstile-150x150.png rename to microsite-next/static/img/mstile-150x150.png diff --git a/microsite/static/img/news-fpo.png b/microsite-next/static/img/news-fpo.png similarity index 100% rename from microsite/static/img/news-fpo.png rename to microsite-next/static/img/news-fpo.png diff --git a/microsite/static/img/octopus-deploy.svg b/microsite-next/static/img/octopus-deploy.svg similarity index 100% rename from microsite/static/img/octopus-deploy.svg rename to microsite-next/static/img/octopus-deploy.svg diff --git a/microsite/static/img/okay.png b/microsite-next/static/img/okay.png similarity index 100% rename from microsite/static/img/okay.png rename to microsite-next/static/img/okay.png diff --git a/microsite/static/img/open-platform.svg b/microsite-next/static/img/open-platform.svg similarity index 100% rename from microsite/static/img/open-platform.svg rename to microsite-next/static/img/open-platform.svg diff --git a/microsite/static/img/openmic.jpeg b/microsite-next/static/img/openmic.jpeg similarity index 100% rename from microsite/static/img/openmic.jpeg rename to microsite-next/static/img/openmic.jpeg diff --git a/microsite/static/img/partner-logo-frontside.png b/microsite-next/static/img/partner-logo-frontside.png similarity index 100% rename from microsite/static/img/partner-logo-frontside.png rename to microsite-next/static/img/partner-logo-frontside.png diff --git a/microsite/static/img/partner-logo-roadie.png b/microsite-next/static/img/partner-logo-roadie.png similarity index 100% rename from microsite/static/img/partner-logo-roadie.png rename to microsite-next/static/img/partner-logo-roadie.png diff --git a/microsite/static/img/partner-logo-thoughtworks.png b/microsite-next/static/img/partner-logo-thoughtworks.png similarity index 100% rename from microsite/static/img/partner-logo-thoughtworks.png rename to microsite-next/static/img/partner-logo-thoughtworks.png diff --git a/microsite/static/img/partner-logo-vmware.png b/microsite-next/static/img/partner-logo-vmware.png similarity index 100% rename from microsite/static/img/partner-logo-vmware.png rename to microsite-next/static/img/partner-logo-vmware.png diff --git a/microsite/static/img/photo-montage.svg b/microsite-next/static/img/photo-montage.svg similarity index 100% rename from microsite/static/img/photo-montage.svg rename to microsite-next/static/img/photo-montage.svg diff --git a/microsite/static/img/playlist-logo.png b/microsite-next/static/img/playlist-logo.png similarity index 100% rename from microsite/static/img/playlist-logo.png rename to microsite-next/static/img/playlist-logo.png diff --git a/microsite/static/img/plugin-announcements-logo.png b/microsite-next/static/img/plugin-announcements-logo.png similarity index 100% rename from microsite/static/img/plugin-announcements-logo.png rename to microsite-next/static/img/plugin-announcements-logo.png diff --git a/microsite/static/img/plugin-mobile.svg b/microsite-next/static/img/plugin-mobile.svg similarity index 100% rename from microsite/static/img/plugin-mobile.svg rename to microsite-next/static/img/plugin-mobile.svg diff --git a/microsite/static/img/plugin.svg b/microsite-next/static/img/plugin.svg similarity index 100% rename from microsite/static/img/plugin.svg rename to microsite-next/static/img/plugin.svg diff --git a/microsite/static/img/plugins.png b/microsite-next/static/img/plugins.png similarity index 100% rename from microsite/static/img/plugins.png rename to microsite-next/static/img/plugins.png diff --git a/microsite/static/img/qeta-logo.png b/microsite-next/static/img/qeta-logo.png similarity index 100% rename from microsite/static/img/qeta-logo.png rename to microsite-next/static/img/qeta-logo.png diff --git a/microsite/static/img/rails-icon.png b/microsite-next/static/img/rails-icon.png similarity index 100% rename from microsite/static/img/rails-icon.png rename to microsite-next/static/img/rails-icon.png diff --git a/microsite/static/img/roadie-newsletter.png b/microsite-next/static/img/roadie-newsletter.png similarity index 100% rename from microsite/static/img/roadie-newsletter.png rename to microsite-next/static/img/roadie-newsletter.png diff --git a/microsite/static/img/s3-bucket.svg b/microsite-next/static/img/s3-bucket.svg similarity index 100% rename from microsite/static/img/s3-bucket.svg rename to microsite-next/static/img/s3-bucket.svg diff --git a/microsite/static/img/scaffolder-backend-dotnet-icon.png b/microsite-next/static/img/scaffolder-backend-dotnet-icon.png similarity index 100% rename from microsite/static/img/scaffolder-backend-dotnet-icon.png rename to microsite-next/static/img/scaffolder-backend-dotnet-icon.png diff --git a/microsite/static/img/scaffolder-http-request-logo.svg b/microsite-next/static/img/scaffolder-http-request-logo.svg similarity index 100% rename from microsite/static/img/scaffolder-http-request-logo.svg rename to microsite-next/static/img/scaffolder-http-request-logo.svg diff --git a/microsite/static/img/scaffolder-utils-logo.png b/microsite-next/static/img/scaffolder-utils-logo.png similarity index 100% rename from microsite/static/img/scaffolder-utils-logo.png rename to microsite-next/static/img/scaffolder-utils-logo.png diff --git a/microsite/static/img/score-card-plugin-logo.png b/microsite-next/static/img/score-card-plugin-logo.png similarity index 100% rename from microsite/static/img/score-card-plugin-logo.png rename to microsite-next/static/img/score-card-plugin-logo.png diff --git a/microsite/static/img/screen.gif b/microsite-next/static/img/screen.gif similarity index 100% rename from microsite/static/img/screen.gif rename to microsite-next/static/img/screen.gif diff --git a/microsite/static/img/search-platform-overview-small.png b/microsite-next/static/img/search-platform-overview-small.png similarity index 100% rename from microsite/static/img/search-platform-overview-small.png rename to microsite-next/static/img/search-platform-overview-small.png diff --git a/microsite/static/img/search-platform-overview.png b/microsite-next/static/img/search-platform-overview.png similarity index 100% rename from microsite/static/img/search-platform-overview.png rename to microsite-next/static/img/search-platform-overview.png diff --git a/microsite/static/img/service-cards.png b/microsite-next/static/img/service-cards.png similarity index 100% rename from microsite/static/img/service-cards.png rename to microsite-next/static/img/service-cards.png diff --git a/microsite/static/img/sharing-opengraph.png b/microsite-next/static/img/sharing-opengraph.png similarity index 100% rename from microsite/static/img/sharing-opengraph.png rename to microsite-next/static/img/sharing-opengraph.png diff --git a/microsite/static/img/shortcuts.svg b/microsite-next/static/img/shortcuts.svg similarity index 100% rename from microsite/static/img/shortcuts.svg rename to microsite-next/static/img/shortcuts.svg diff --git a/microsite/static/img/sonarqube-icon.svg b/microsite-next/static/img/sonarqube-icon.svg similarity index 100% rename from microsite/static/img/sonarqube-icon.svg rename to microsite-next/static/img/sonarqube-icon.svg diff --git a/microsite/static/img/splunk-black-white-bg.png b/microsite-next/static/img/splunk-black-white-bg.png similarity index 100% rename from microsite/static/img/splunk-black-white-bg.png rename to microsite-next/static/img/splunk-black-white-bg.png diff --git a/microsite/static/img/spotlight.png b/microsite-next/static/img/spotlight.png similarity index 100% rename from microsite/static/img/spotlight.png rename to microsite-next/static/img/spotlight.png diff --git a/microsite/static/img/spring-boot-service.png b/microsite-next/static/img/spring-boot-service.png similarity index 100% rename from microsite/static/img/spring-boot-service.png rename to microsite-next/static/img/spring-boot-service.png diff --git a/microsite/static/img/stack-overflow-logo.svg b/microsite-next/static/img/stack-overflow-logo.svg similarity index 100% rename from microsite/static/img/stack-overflow-logo.svg rename to microsite-next/static/img/stack-overflow-logo.svg diff --git a/microsite/static/img/stackstorm.png b/microsite-next/static/img/stackstorm.png similarity index 100% rename from microsite/static/img/stackstorm.png rename to microsite-next/static/img/stackstorm.png diff --git a/microsite/static/img/techdocs-static-mobile.png b/microsite-next/static/img/techdocs-static-mobile.png similarity index 100% rename from microsite/static/img/techdocs-static-mobile.png rename to microsite-next/static/img/techdocs-static-mobile.png diff --git a/microsite/static/img/techdocs-web.png b/microsite-next/static/img/techdocs-web.png similarity index 100% rename from microsite/static/img/techdocs-web.png rename to microsite-next/static/img/techdocs-web.png diff --git a/microsite/static/img/techdocs.gif b/microsite-next/static/img/techdocs.gif similarity index 100% rename from microsite/static/img/techdocs.gif rename to microsite-next/static/img/techdocs.gif diff --git a/microsite/static/img/techdocs.png b/microsite-next/static/img/techdocs.png similarity index 100% rename from microsite/static/img/techdocs.png rename to microsite-next/static/img/techdocs.png diff --git a/microsite/static/img/techdocs2.gif b/microsite-next/static/img/techdocs2.gif similarity index 100% rename from microsite/static/img/techdocs2.gif rename to microsite-next/static/img/techdocs2.gif diff --git a/microsite/static/img/techs.png b/microsite-next/static/img/techs.png similarity index 100% rename from microsite/static/img/techs.png rename to microsite-next/static/img/techs.png diff --git a/microsite/static/img/todo-logo.png b/microsite-next/static/img/todo-logo.png similarity index 100% rename from microsite/static/img/todo-logo.png rename to microsite-next/static/img/todo-logo.png diff --git a/microsite/static/img/toolbox-logo.png b/microsite-next/static/img/toolbox-logo.png similarity index 100% rename from microsite/static/img/toolbox-logo.png rename to microsite-next/static/img/toolbox-logo.png diff --git a/microsite/static/img/twitter-summary.png b/microsite-next/static/img/twitter-summary.png similarity index 100% rename from microsite/static/img/twitter-summary.png rename to microsite-next/static/img/twitter-summary.png diff --git a/microsite/static/img/vault.png b/microsite-next/static/img/vault.png similarity index 100% rename from microsite/static/img/vault.png rename to microsite-next/static/img/vault.png diff --git a/microsite/static/img/xcmetrics-icon.png b/microsite-next/static/img/xcmetrics-icon.png similarity index 100% rename from microsite/static/img/xcmetrics-icon.png rename to microsite-next/static/img/xcmetrics-icon.png diff --git a/microsite/static/js/dismissable-banner.js b/microsite-next/static/js/dismissable-banner.js similarity index 100% rename from microsite/static/js/dismissable-banner.js rename to microsite-next/static/js/dismissable-banner.js diff --git a/microsite/static/js/medium-zoom.js b/microsite-next/static/js/medium-zoom.js similarity index 100% rename from microsite/static/js/medium-zoom.js rename to microsite-next/static/js/medium-zoom.js diff --git a/microsite/static/js/scroll-nav-to-view-in-docs.js b/microsite-next/static/js/scroll-nav-to-view-in-docs.js similarity index 100% rename from microsite/static/js/scroll-nav-to-view-in-docs.js rename to microsite-next/static/js/scroll-nav-to-view-in-docs.js diff --git a/microsite/static/logo_assets/Backstage_Identity_Assets_Overview.pdf b/microsite-next/static/logo_assets/Backstage_Identity_Assets_Overview.pdf similarity index 100% rename from microsite/static/logo_assets/Backstage_Identity_Assets_Overview.pdf rename to microsite-next/static/logo_assets/Backstage_Identity_Assets_Overview.pdf diff --git a/microsite/static/logo_assets/ai/Backstage_Identity_Assets_Artwork_RGB.ai b/microsite-next/static/logo_assets/ai/Backstage_Identity_Assets_Artwork_RGB.ai similarity index 100% rename from microsite/static/logo_assets/ai/Backstage_Identity_Assets_Artwork_RGB.ai rename to microsite-next/static/logo_assets/ai/Backstage_Identity_Assets_Artwork_RGB.ai diff --git a/microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg b/microsite-next/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg similarity index 100% rename from microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg rename to microsite-next/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg diff --git a/microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg b/microsite-next/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg similarity index 100% rename from microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg rename to microsite-next/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg diff --git a/microsite/static/logo_assets/pdf/Backstage_Identity_Assets_Artwork_RGB.pdf b/microsite-next/static/logo_assets/pdf/Backstage_Identity_Assets_Artwork_RGB.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Backstage_Identity_Assets_Artwork_RGB.pdf rename to microsite-next/static/logo_assets/pdf/Backstage_Identity_Assets_Artwork_RGB.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/01_Logo_White.pdf b/microsite-next/static/logo_assets/pdf/Individual/01_Logo_White.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/01_Logo_White.pdf rename to microsite-next/static/logo_assets/pdf/Individual/01_Logo_White.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/02_Icon_White.pdf b/microsite-next/static/logo_assets/pdf/Individual/02_Icon_White.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/02_Icon_White.pdf rename to microsite-next/static/logo_assets/pdf/Individual/02_Icon_White.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/03_Logo_Teal.pdf b/microsite-next/static/logo_assets/pdf/Individual/03_Logo_Teal.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/03_Logo_Teal.pdf rename to microsite-next/static/logo_assets/pdf/Individual/03_Logo_Teal.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/04_Icon_Teal.pdf b/microsite-next/static/logo_assets/pdf/Individual/04_Icon_Teal.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/04_Icon_Teal.pdf rename to microsite-next/static/logo_assets/pdf/Individual/04_Icon_Teal.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/05_Logo_Black.pdf b/microsite-next/static/logo_assets/pdf/Individual/05_Logo_Black.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/05_Logo_Black.pdf rename to microsite-next/static/logo_assets/pdf/Individual/05_Logo_Black.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/06_Icon_Black.pdf b/microsite-next/static/logo_assets/pdf/Individual/06_Icon_Black.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/06_Icon_Black.pdf rename to microsite-next/static/logo_assets/pdf/Individual/06_Icon_Black.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/07_Large Icon_Gradient.pdf b/microsite-next/static/logo_assets/pdf/Individual/07_Large Icon_Gradient.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/07_Large Icon_Gradient.pdf rename to microsite-next/static/logo_assets/pdf/Individual/07_Large Icon_Gradient.pdf diff --git a/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png b/microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png rename to microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png diff --git a/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png b/microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png rename to microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png diff --git a/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png b/microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png rename to microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png diff --git a/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png b/microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png rename to microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png diff --git a/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png b/microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png rename to microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png diff --git a/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png b/microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png rename to microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png diff --git a/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png b/microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png rename to microsite-next/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png diff --git a/microsite/static/logo_assets/svg/Icon_Black.svg b/microsite-next/static/logo_assets/svg/Icon_Black.svg similarity index 100% rename from microsite/static/logo_assets/svg/Icon_Black.svg rename to microsite-next/static/logo_assets/svg/Icon_Black.svg diff --git a/microsite/static/logo_assets/svg/Icon_Gradient.svg b/microsite-next/static/logo_assets/svg/Icon_Gradient.svg similarity index 100% rename from microsite/static/logo_assets/svg/Icon_Gradient.svg rename to microsite-next/static/logo_assets/svg/Icon_Gradient.svg diff --git a/microsite/static/logo_assets/svg/Icon_Teal.svg b/microsite-next/static/logo_assets/svg/Icon_Teal.svg similarity index 100% rename from microsite/static/logo_assets/svg/Icon_Teal.svg rename to microsite-next/static/logo_assets/svg/Icon_Teal.svg diff --git a/microsite/static/logo_assets/svg/Icon_White.svg b/microsite-next/static/logo_assets/svg/Icon_White.svg similarity index 100% rename from microsite/static/logo_assets/svg/Icon_White.svg rename to microsite-next/static/logo_assets/svg/Icon_White.svg diff --git a/microsite/static/logo_assets/svg/Logo_Black.svg b/microsite-next/static/logo_assets/svg/Logo_Black.svg similarity index 100% rename from microsite/static/logo_assets/svg/Logo_Black.svg rename to microsite-next/static/logo_assets/svg/Logo_Black.svg diff --git a/microsite/static/logo_assets/svg/Logo_Teal.svg b/microsite-next/static/logo_assets/svg/Logo_Teal.svg similarity index 100% rename from microsite/static/logo_assets/svg/Logo_Teal.svg rename to microsite-next/static/logo_assets/svg/Logo_Teal.svg diff --git a/microsite/static/logo_assets/svg/Logo_White.svg b/microsite-next/static/logo_assets/svg/Logo_White.svg similarity index 100% rename from microsite/static/logo_assets/svg/Logo_White.svg rename to microsite-next/static/logo_assets/svg/Logo_White.svg diff --git a/microsite/static/schema/config-v1 b/microsite-next/static/schema/config-v1 similarity index 100% rename from microsite/static/schema/config-v1 rename to microsite-next/static/schema/config-v1 diff --git a/microsite/scripts/verify-sidebars.js b/microsite/scripts/verify-sidebars.js deleted file mode 100755 index 301a1cb4c0..0000000000 --- a/microsite/scripts/verify-sidebars.js +++ /dev/null @@ -1,54 +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. - */ - -/** - * This script relies on docusaurus internals. It can be replaced in case - * docusaurus adds proper validation of the sidebar items. - */ - -let metadata; -try { - metadata = require('docusaurus/lib/core/metadata.js'); -} catch (error) { - console.log('❌ Run `yarn build` before running `yarn verify:sidebars`'); - process.exit(1); -} - -const errors = []; - -// reference/index is generated, so make sure this goes through even if it's not there -const knownIds = new Set([...Object.keys(metadata), 'reference/index']); - -for (const id in metadata) { - const { next, previous } = metadata[id]; - - if (next && !knownIds.has(next)) { - errors.push(`Next ${next} does not exist in ${id}.`); - } - - if (previous && !knownIds.has(previous)) { - errors.push(`Previous ${previous} does not exist in ${id}.`); - } -} - -if (errors.length) { - for (const error of errors) { - console.log(`❌ ${error}`); - } - process.exit(1); -} - -console.log('✅ All sidebar links are correct.'); From 219182aad89661752227046ba812a75e50313ec6 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 9 Mar 2023 15:07:17 +0100 Subject: [PATCH 35/43] Remove old microsite Signed-off-by: Johan Haals --- microsite/.gitignore | 4 - microsite/.npmrc | 2 - microsite/.prettierignore | 1 - microsite/README.md | 219 - microsite/core/Components.js | 143 - microsite/core/Footer.js | 102 - microsite/core/HubSpotForm.js | 40 - microsite/package.json | 24 - microsite/pages/en/community.js | 231 - microsite/pages/en/demos.js | 296 - microsite/pages/en/docs.js | 12 - .../docs/features/software-catalog/index.js | 15 - .../docs/features/software-templates/index.js | 15 - .../pages/en/docs/features/techdocs/index.js | 15 - microsite/pages/en/index.js | 671 -- microsite/pages/en/link.js | 29 - microsite/pages/en/live.js | 85 - microsite/pages/en/nominate.js | 44 - microsite/pages/en/on-demand.js | 148 - microsite/pages/en/plugins.js | 174 - microsite/sidebars.json | 408 - microsite/siteConfig.js | 148 - microsite/yarn.lock | 9460 ----------------- 23 files changed, 12286 deletions(-) delete mode 100644 microsite/.gitignore delete mode 100644 microsite/.npmrc delete mode 100644 microsite/.prettierignore delete mode 100644 microsite/README.md delete mode 100644 microsite/core/Components.js delete mode 100644 microsite/core/Footer.js delete mode 100644 microsite/core/HubSpotForm.js delete mode 100644 microsite/package.json delete mode 100644 microsite/pages/en/community.js delete mode 100644 microsite/pages/en/demos.js delete mode 100644 microsite/pages/en/docs.js delete mode 100644 microsite/pages/en/docs/features/software-catalog/index.js delete mode 100644 microsite/pages/en/docs/features/software-templates/index.js delete mode 100644 microsite/pages/en/docs/features/techdocs/index.js delete mode 100644 microsite/pages/en/index.js delete mode 100644 microsite/pages/en/link.js delete mode 100644 microsite/pages/en/live.js delete mode 100644 microsite/pages/en/nominate.js delete mode 100644 microsite/pages/en/on-demand.js delete mode 100644 microsite/pages/en/plugins.js delete mode 100644 microsite/sidebars.json delete mode 100644 microsite/siteConfig.js delete mode 100644 microsite/yarn.lock diff --git a/microsite/.gitignore b/microsite/.gitignore deleted file mode 100644 index f5bcdb3385..0000000000 --- a/microsite/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ - -# Build output -build -i18n diff --git a/microsite/.npmrc b/microsite/.npmrc deleted file mode 100644 index c3c66347fd..0000000000 --- a/microsite/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -registry=https://registry.npmjs.org/ -engine-strict=true diff --git a/microsite/.prettierignore b/microsite/.prettierignore deleted file mode 100644 index 378eac25d3..0000000000 --- a/microsite/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -build diff --git a/microsite/README.md b/microsite/README.md deleted file mode 100644 index 723baa1a54..0000000000 --- a/microsite/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# Backstage Documentation - -This folder holds the service and configuration that runs Backstage's documentation hosted at https://backstage.io. - -It pulls content in from the [root `/docs`](../docs/) folder and builds it into the resulting HTML web site. - -This website was created with [Docusaurus](https://docusaurus.io/). - -# What's In This Document - -- [Getting Started](#getting-started) -- [Directory Structure](#directory-structure) -- [Editing Content](#editing-content) -- [Adding Content](#adding-content) -- [Full Documentation](#full-documentation) - -# Getting Started - -Testing the web site locally is a great way to see what final website will look like after publishing, and is ideal for testing more complex changes, large updates to navigation, or complex page designs that may include special alignment, which may not otherwise be validated through continuous integration. - -## Installation - -``` -$ yarn install -``` - -## Local Development - -``` -$ yarn start -``` - -This command starts a local development server and opens up a browser window. Most content changes made to the `docs/` root folder are reflected live without having to restart the server. - -## Build - -``` -$ yarn build -``` - -This command generates static content into the `build` directory, which is what will be deployed to GitHub pages from the master branch. - -## Directory Structure - -Your project file structure should look something like this - -``` -my-docusaurus/ - docs/ - doc-1.md - doc-2.md - doc-3.md - website/ - blog/ - 2016-3-11-oldest-post.md - 2017-10-24-newest-post.md - core/ - node_modules/ - pages/ - static/ - css/ - img/ - package.json - sidebars.json - siteConfig.js -``` - -## Editing Content - -### Editing an existing docs page - -Edit docs by navigating to `docs/` and editing the corresponding document: - -`docs/doc-to-be-edited.md` - -```markdown ---- -id: page-needs-edit -title: This Doc Needs To Be Edited ---- - -Edit me... -``` - -For more information about docs, click [here](https://docusaurus.io/docs/en/navigation) - -### Editing an existing blog post - -Edit blog posts by navigating to `website/blog` and editing the corresponding post: - -`website/blog/post-to-be-edited.md` - -```markdown ---- -id: post-needs-edit -title: This Blog Post Needs To Be Edited ---- - -Edit me... -``` - -For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) - -## Adding Content - -### Adding a new docs page to an existing sidebar - -1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`: - -```md ---- -id: newly-created-doc -title: This Doc Needs To Be Edited ---- - -My new content here.. -``` - -1. Refer to that doc's ID in an existing sidebar in `website/sidebars.json`: - -```javascript -// Add newly-created-doc to the Getting Started category of docs -{ - "docs": { - "Getting Started": [ - "quick-start", - "newly-created-doc" // new doc here - ], - ... - }, - ... -} -``` - -For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation) - -### Adding a new blog post - -1. Make sure there is a header link to your blog in `website/siteConfig.js`: - -`website/siteConfig.js` - -```javascript -headerLinks: [ - ... - { blog: true, label: 'Blog' }, - ... -] -``` - -2. Create the blog post with the format `YYYY-MM-DD-My-Blog-Post-Title.md` in `website/blog`: - -`website/blog/2018-05-21-New-Blog-Post.md` - -```markdown ---- -author: Frank Li -authorURL: https://twitter.com/foobarbaz -authorFBID: 503283835 -title: New Blog Post ---- - -Lorem Ipsum... -``` - -For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) - -### Adding items to your site's top navigation bar - -1. Add links to docs, custom pages or external links by editing the `headerLinks` field of `website/siteConfig.js`: - -`website/siteConfig.js` - -```javascript -{ - headerLinks: [ - ... - /* you can add docs */ - { doc: 'my-examples', label: 'Examples' }, - /* you can add custom pages */ - { page: 'help', label: 'Help' }, - /* you can add external links */ - { href: 'https://github.com/facebook/docusaurus', label: 'GitHub' }, - ... - ], - ... -} -``` - -For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation) - -### Adding custom pages - -1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`: -1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element: - -`website/siteConfig.js` - -```javascript -{ - headerLinks: [ - ... - { page: 'my-new-custom-page', label: 'My New Custom Page' }, - ... - ], - ... -} -``` - -Learn more about [Docusaurus custom pages](https://docusaurus.io/docs/en/custom-pages). - -## Full Documentation - -Full documentation can be found on the [Docusaurus website](https://docusaurus.io/). - -## Additional notes - -- If you want to make images zoomable on click, add the `data-zoomable` attribute to your `img` element. - - In a docs or blog `.md` file, convert `![This is image](/microsite/static/img/code.png)` syntax to `This is image` diff --git a/microsite/core/Components.js b/microsite/core/Components.js deleted file mode 100644 index 7453d21e3e..0000000000 --- a/microsite/core/Components.js +++ /dev/null @@ -1,143 +0,0 @@ -const React = require('react'); -const PropTypes = require('prop-types'); -const simpleComponent = (Component, baseClassName = '', mods = []) => { - const SimpleComponent = props => { - // Extra BEM modifiers, e.g. `Block__Container--reversed` - const modClasses = []; - const otherProps = {}; - for (const prop in props) { - if (mods.indexOf(prop) !== -1) { - modClasses.push(`${baseClassName}--${prop}`); - } else { - otherProps[prop] = props[prop]; - } - } - - return ( - - ); - }; - SimpleComponent.displayName = `SimpleComponent(${Component}, ${baseClassName})`; - - SimpleComponent.propTypes = {}; - for (const mod of mods) { - SimpleComponent.propTypes[mod] = PropTypes.bool; - } - - return SimpleComponent; -}; - -const Block = simpleComponent('section', 'Block', ['small', 'wrapped']); -Block.Container = simpleComponent('div', 'Block__Container', [ - 'reversed', - 'wrapped', - 'column', -]); -Block.TitleBox = simpleComponent('h1', 'Block__TitleBox', ['large', 'story']); -Block.TextBox = simpleComponent('div', 'Block__TextBox', ['wide', 'small']); - -Block.Title = simpleComponent('h1', 'Block__Title', ['half', 'main']); -Block.Subtitle = simpleComponent('h1', 'Block__Subtitle'); - -Block.SmallTitle = simpleComponent('h2', 'Block__SmallTitle'); -Block.SmallestTitle = simpleComponent('h3', 'Block__SmallestTitle'); - -const BulletLine = simpleComponent('div', 'BulletLine'); - -Block.Paragraph = simpleComponent('p', 'Block__Paragraph'); -Block.LinkButton = simpleComponent('a', 'Block__LinkButton', ['stretch']); -Block.QuoteContainer = simpleComponent('div', 'Block__QuoteContainer'); -Block.Quote = simpleComponent('p', 'Block__Quote'); -Block.Divider = simpleComponent('p', 'Block__Divider', ['quote']); -Block.MediaFrame = simpleComponent('div', 'Block__MediaFrame'); -Block.Graphics = ({ padding, children, innerPadding, width }) => { - const style = {}; - const innerStyle = {}; - if (padding) { - style.padding = `${padding}% 0`; - } - - if (width) { - style.width = width; - } - - if (innerPadding) { - innerStyle.padding = `${innerPadding}% 0`; - } - return ( -
-
-
- ); -}; -Block.Graphic = props => { - /* Coordinates and size are in % of graphics container size, e.g. width={50} is 50% of parent width */ - const { x = 0, y = 0, width = 0, src, className = '' } = props; - const style = Object.assign( - { left: `${x}%`, top: `${y}%`, width: `${width}%` }, - props.style, - ); - return ( - - ); -}; - -Block.Image = props => { - /* Coordinates and size are in % of graphics container size, e.g. width={50} is 50% of parent width */ - return ( -
- ); -}; - -const ActionBlock = simpleComponent('section', 'ActionBlock'); -ActionBlock.Title = simpleComponent('h1', 'ActionBlock__Title'); -ActionBlock.Subtitle = simpleComponent('h2', 'ActionBlock__Subtitle'); -ActionBlock.Link = simpleComponent('a', 'ActionBlock__Link'); - -const Breakpoint = ({ narrow, wide }) => ( - -
{narrow}
-
{wide}
-
-); - -const Banner = simpleComponent('div', 'Banner', ['hidden']); -Banner.Container = simpleComponent('div', 'Banner__Container'); - -const BannerDismissButton = simpleComponent( - props => ( - - - - ), - 'Banner__DismissButton', -); - -Banner.Dismissable = ({ storageKey, children }) => ( - -); - -module.exports = { - Block, - ActionBlock, - Breakpoint, - BulletLine, - Banner, -}; diff --git a/microsite/core/Footer.js b/microsite/core/Footer.js deleted file mode 100644 index c93b1779cf..0000000000 --- a/microsite/core/Footer.js +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2020 Backstage Project 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. - */ - -const React = require('react'); - -class Footer extends React.Component { - render() { - return ( - - ); - } -} - -module.exports = Footer; diff --git a/microsite/core/HubSpotForm.js b/microsite/core/HubSpotForm.js deleted file mode 100644 index 2905909ffe..0000000000 --- a/microsite/core/HubSpotForm.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; - -export class HubSpotForm extends React.Component { - render() { - return ( - <> - - - ); - } -} diff --git a/microsite/package.json b/microsite/package.json deleted file mode 100644 index 24cd589fe8..0000000000 --- a/microsite/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "version": "0.0.0", - "name": "backstage-microsite", - "license": "Apache-2.0", - "private": true, - "scripts": { - "examples": "docusaurus-examples", - "start": "docusaurus-start", - "build": "docusaurus-build", - "prettier:check": "prettier --check .", - "publish-gh-pages": "docusaurus-publish", - "write-translations": "docusaurus-write-translations", - "version": "docusaurus-version", - "rename-version": "docusaurus-rename-version", - "verify:sidebars": "node ./scripts/verify-sidebars" - }, - "devDependencies": { - "@spotify/prettier-config": "^14.0.0", - "docusaurus": "^2.0.0-alpha.70", - "js-yaml": "^4.1.0", - "prettier": "^2.6.2" - }, - "prettier": "@spotify/prettier-config" -} diff --git a/microsite/pages/en/community.js b/microsite/pages/en/community.js deleted file mode 100644 index 69330e6569..0000000000 --- a/microsite/pages/en/community.js +++ /dev/null @@ -1,231 +0,0 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const React = require('react'); -const Components = require(`${process.cwd()}/core/Components.js`); -const Block = Components.Block; -const BulletLine = Components.BulletLine; - -const PARTNERS = [ - { - name: 'Frontside Software', - url: 'https://frontside.com/backstage/', - logo: 'img/partner-logo-frontside.png', - }, - { - name: 'Roadie', - url: 'https://roadie.io/', - logo: 'img/partner-logo-roadie.png', - }, - { - name: 'ThoughtWorks', - url: 'https://www.thoughtworks.com', - logo: 'img/partner-logo-thoughtworks.png', - }, - { - name: 'VMWare', - url: 'https://www.vmware.com', - logo: 'img/partner-logo-vmware.png', - }, -]; - -const Background = props => { - const { config: siteConfig } = props; - const { baseUrl } = siteConfig; - return ( -
- - - - Backstage Community - - Join the vibrant community around Backstage through social media - and different meetups. To ensure that you have a welcoming - environment, we follow{' '} - - {' '} - CNCF Code of Conduct - {' '} - in everything we do. - - - - - - Get started in our community! - - - - - - - - - - - Offical Backstage initiatives - - Stay tuned to the latest developments - - - - - - - - Community sessions - - Maintainers and adopters meet monthly to share updates, demos, - and ideas. Yep, all sessions are recorded! - - - - Join a session - - - - - - - Newsletter - - The official monthly Backstage newsletter. Don't miss the - latest news from your favorite project! - - - - Subscribe - - - - - - - Contributor Spotlight - - A recognition for valuable community work. Nominate - contributing members for their efforts! We'll put them in the - spotlight ❤️ - - - Nominate now - - - - - - - - - Community initiatives - - - - Open Mic Meetup - - A casual get together of Backstage users sharing their - experiences and helping each other. Hosted by{' '} - Roadie.io and{' '} - Frontside Software. - - - - Learn more - - - - - Backstage Weekly Newsletter - - A weekly newsletter with news, updates and things community from - your friends at Roadie.io. - - - - Learn more - - - - - - - - - Trainings and Certifications - - - - - Introduction to Backstage: Developer Portals Made Easy (LFS142x) - - - This is a course produced and curated by the Linux Foundation. - This course introduces you to Backstage and how to get started - with the project. - - - - Learn more - - - - - - - - - Commercial Partners - - {PARTNERS.map(partner => ( - - - - {partner.name} - - - - ))} - - -
- ); -}; - -module.exports = Background; diff --git a/microsite/pages/en/demos.js b/microsite/pages/en/demos.js deleted file mode 100644 index 7d97641815..0000000000 --- a/microsite/pages/en/demos.js +++ /dev/null @@ -1,296 +0,0 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const React = require('react'); -const Components = require(`${process.cwd()}/core/Components.js`); -const Block = Components.Block; - -const Background = props => { - const { config: siteConfig } = props; - const { baseUrl } = siteConfig; - return ( -
- - - - See us in action - - Watch the videos below to get an introduction to Backstage and to - see how we use different plugins to customize{' '} - - our internal version of Backstage at Spotify - - . - - - To see how other companies have already started using Backstage, - watch these presentations from{' '} - Expedia,{' '} - Zalando, and{' '} - TELUS. For more, - join our{' '} - - Community Sessions - - . - - - To explore the UI and basic features of Backstage firsthand, go - to: demo.backstage.io. - (Tip: click “All” to view all the example components in the - software catalog.) - - - - - - - - - - - - Introduction to Backstage - - Backstage is an open source platform for building developer - portals. We’ve been using our homegrown version at Spotify for - years — so it’s already packed with features. (We have over 120 - internal plugins, built by 60 different teams.) In this live demo - recording, Stefan Ålund, product manager for Backstage, tells the - origin story of Backstage and gives you a tour of how we use it - here at Spotify. - - - Watch now - - - - - - - - - - - - Control cloud costs - - How do you control cloud costs while maintaining the speed and - independence of your development teams? With the{' '} - Cost Insights plugin{' '} - for Backstage, managing cloud costs becomes just another part of - an engineer’s daily development process. They get a clear view of - their spending — and can decide for themselves how they want to - optimize it. Learn more about the{' '} - - Cost Insights plugin - - . - - - Watch now - - - - - - - - - - - - - Make documentation easy - - - Documentation! Everyone needs it, no one wants to create it, and - no one can ever find it. Backstage follows a “docs like code” - approach: you write documentation in Markdown files right - alongside your code. This makes documentation easier to create, - maintain, find — and, you know, actually use. This demo video - showcases Spotify’s internal version of TechDocs. Learn more about{' '} - - TechDocs - - . - - - Watch now - - - - - - - - - - - - Manage your tech health - - Instead of manually updating a spreadsheet, what if you had a - beautiful dashboard that could give you an instant, interactive - picture of your entire org’s tech stack? That’s how we do it at - Spotify. With our Tech Insights plugin for Backstage, anyone at - Spotify can see which version of which software anyone else at - Spotify is using — and a whole a lot more. From managing - migrations to fighting tech entropy, Backstage makes managing our - tech health actually kind of pleasant. - - - - Watch now - - - - - - - - - - - - Create a microservice - - You’re a Spotify engineer about to build a new microservice (or - any component) using Spring Boot. Where do you start? Search for a - quick start guide online? Create an empty repo on GitHub? Copy and - paste an old project? Nope. Just go to Backstage, and you’ll be up - and running in two minutes — with a “Hello World” app, CI, and - documentation all automatically set up and configured in a - standardized way. - - - - Watch now - - - - - - - - - - - - Search all your services - - All of Spotify’s services are automatically indexed in Backstage. - So our engineers can stop playing detective — no more spamming - Slack channels asking if anyone knows who owns a particular - service and where you can find its API, only to discover that the - owner went on sabbatical three months ago and you have to hunt - them down on a mountain in Tibet where they’re on a 12-day silent - meditation retreat. At Spotify, anyone can always find anyone - else’s service, inspect its APIs, and contact its current owner — - all with one search. - - - Watch now - - - - - - - - - - - - Manage data pipelines - - We manage a lot of data pipelines (also known as workflows) here - at Spotify. So, of course, we made a great workflows plugin for - our version of Backstage. All our workflow tools — including a - scheduler, log inspector, data lineage graph, and configurable - alerts — are integrated into one simple interface. - - - Watch now - - - - - - - -
- ); -}; - -module.exports = Background; diff --git a/microsite/pages/en/docs.js b/microsite/pages/en/docs.js deleted file mode 100644 index a8bda18f88..0000000000 --- a/microsite/pages/en/docs.js +++ /dev/null @@ -1,12 +0,0 @@ -const React = require('react'); -const Redirect = require('../../core/Redirect.js'); - -const siteConfig = require(process.cwd() + '/siteConfig.js'); - -function Docs() { - return ( - - ); -} - -module.exports = Docs; diff --git a/microsite/pages/en/docs/features/software-catalog/index.js b/microsite/pages/en/docs/features/software-catalog/index.js deleted file mode 100644 index cffc91af21..0000000000 --- a/microsite/pages/en/docs/features/software-catalog/index.js +++ /dev/null @@ -1,15 +0,0 @@ -const React = require('react'); -const Redirect = require('../../../../../core/Redirect.js'); - -const siteConfig = require(process.cwd() + '/siteConfig.js'); - -function Docs() { - return ( - - ); -} - -module.exports = Docs; diff --git a/microsite/pages/en/docs/features/software-templates/index.js b/microsite/pages/en/docs/features/software-templates/index.js deleted file mode 100644 index 79d3f0659e..0000000000 --- a/microsite/pages/en/docs/features/software-templates/index.js +++ /dev/null @@ -1,15 +0,0 @@ -const React = require('react'); -const Redirect = require('../../../../../core/Redirect.js'); - -const siteConfig = require(process.cwd() + '/siteConfig.js'); - -function Docs() { - return ( - - ); -} - -module.exports = Docs; diff --git a/microsite/pages/en/docs/features/techdocs/index.js b/microsite/pages/en/docs/features/techdocs/index.js deleted file mode 100644 index c45cde24f5..0000000000 --- a/microsite/pages/en/docs/features/techdocs/index.js +++ /dev/null @@ -1,15 +0,0 @@ -const React = require('react'); -const Redirect = require('../../../../../core/Redirect.js'); - -const siteConfig = require(process.cwd() + '/siteConfig.js'); - -function Docs() { - return ( - - ); -} - -module.exports = Docs; diff --git a/microsite/pages/en/index.js b/microsite/pages/en/index.js deleted file mode 100644 index b7eb3a9cf0..0000000000 --- a/microsite/pages/en/index.js +++ /dev/null @@ -1,671 +0,0 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const React = require('react'); -const { HubSpotForm } = require(`${process.cwd()}/core/HubSpotForm.js`); -const Components = require(`${process.cwd()}/core/Components.js`); -const Block = Components.Block; -const ActionBlock = Components.ActionBlock; -const Breakpoint = Components.Breakpoint; -const BulletLine = Components.BulletLine; -const Banner = Components.Banner; - -class Index extends React.Component { - render() { - const { config: siteConfig } = this.props; - const { baseUrl } = siteConfig; - return ( - -
- - -
- 🗞️ Want to stay up to date with Backstage? Sign up for our{' '} - - Newsletter - - ! -
-
-
- - - - - - An open platform for building developer portals - - - Powered by a centralized software catalog, Backstage restores - order to your infrastructure and enables your product teams to - ship high-quality code quickly — without compromising - autonomy. - - - - GitHub - - - Office Hours - - - - - - - - - - - - - - - The Speed Paradox - - At Spotify, we've always believed in the speed and ingenuity - that comes from having autonomous development teams. But as we - learned firsthand, the faster you grow, the more fragmented - and complex your software ecosystem becomes. And then - everything slows down again. - - - - - The Standards Paradox - - By centralizing services and standardizing your tooling, - Backstage streamlines your development environment from end to - end. Instead of restricting autonomy, standardization frees - your engineers from infrastructure complexity. So you can - return to building and scaling, quickly and safely. - - - - - - - - - {' '} - - Backstage Software Catalog - - Build an ecosystem, not a wilderness - - - - - - } - /> - - - - Manage all your software, all in one place{' '} - - - Backstage makes it easy for one team to manage 10 services — - and makes it possible for your company to manage thousands of - them - - - - - A uniform overview - - Every team can see all the services they own and related - resources (deployments, data pipelines, pull request status, - etc.) - - - - - - Metadata on tap - - All that information can be shared with plugins inside - Backstage to enable other management features, like resource - monitoring and testing - - - - - - Not just services - - Libraries, websites, ML models — you name it, Backstage knows - all about it, including who owns it, dependencies, and more - - - - - - - Discoverability & accountability - - - No more orphan software hiding in the dark corners of your - tech stack - - - - - - - - - Learn more about the software catalog - - - Read - - - - - - - - Backstage Software Templates - Standards can set you free - - - - - } - /> - - - - Like automated getting started guides - - - Using templates, engineers can spin up a new microservice with - your organization's best practices built-in, right from the - start - - - - - - - Push-button deployment - - - Click a button to create a Spring Boot project with your repo - automatically configured on GitHub and your CI already running - the first build - - - - - - - Built to your standards - - - Go instead of Java? CircleCI instead of Jenkins? Serverless - instead of Kubernetes? GCP instead of AWS? Customize your - recipes with your best practices baked-in - - - - - - - Golden Paths pave the way - - - When the right way is also the easiest way, engineers get up - and running faster — and more safely - - - - - - } - /> - - - - - - Build your own software templates - - - Contribute - - - - - - - - - Backstage TechDocs - Docs like code - - - - - - - } - /> - - - Free documentation - - Whenever you use a Backstage Software Template, your project - automatically gets a TechDocs site, for free - - - - - - Easy to write - - With our docs-like-code approach, engineers write their - documentation in Markdown files right alongside their code - - - - - - Easy to maintain - - Updating code? Update your documentation while you're there — - with docs and code in the same place, it becomes a natural - part of your workstream - - - - - - Easy to find and use - - Since all your documentation is in Backstage, finding any - TechDoc is just a search query away - - - - - - - } - /> - - - - - Learn more about TechDocs - - Docs - - - - - - - {' '} - - Backstage Search Platform - - A search platform made just for you - - - - - - } - /> - - - - Way more than a text box{' '} - - - Backstage Search more than just a box you type questions into - — it's an entire platform all by itself, which you can - customize to fit your organization's needs - - - - - - Search the way you want - - - Bring your own search engine, create a customized search page - experience, or edit the look and feel of each search result - - - - - - Index everything, find anything - - - With an extensible backend, you can search beyond the Software - Catalog and index any source you'd like — whether it's - TechDocs or Confluence and Stack Overflow - - - - - - Discoverability unlocked - - - New hires and seasoned employees alike can easily search your - infrastructure instead of getting lost in it - - - - - - - } - /> - - - - - Learn more about Backstage Search - - - Read - - - - - - - - - Backstage Kubernetes - - Manage your services, not clusters - - - - - - - Kubernetes made just for service owners - - - Backstage features the first Kubernetes monitoring tool - designed around the needs of service owners, not cluster - admins - - - - - - - Your service at a glance - - - Get all your service's deployments in one, aggregated view — - no more digging through cluster logs in a CLI, no more combing - through lists of services you don't own - - - - - - - Pick a cloud, any cloud - - - Since Backstage uses the Kubernetes API, it's cloud agnostic — - so it works no matter which cloud provider or managed - Kubernetes service you use, and even works in multi-cloud orgs - - - - - - Any K8s, one UI - - Now you don't have to switch dashboards when you move from - local testing to production, or from one cloud provider to - another - - - - - - - Learn more about the K8s plugin - - - Read - - - - - - - - - - Customize Backstage with plugins - - - An app store for your infrastructure - - - - - - } - /> - - - Add functionality - - Want scalable website testing? Add the{' '} - - Lighthouse - {' '} - plugin. Wondering about recommended frameworks? Add the{' '} - - Tech Radar - {' '} - plugin.{' '} - - - - - - BYO Plugins - - If you don't see the plugin you need, it's simple to build - your own - - - - - - - Integrate your own custom tooling - - - Building internal plugins lets you tailor your version of - Backstage to be a perfect fit for your infrastructure - - - - - - - Share with the community - - - Building open source plugins{' '} - contributes to the entire Backstage ecosystem, which benefits - everyone - - - - } - /> - - - - - Build a plugin - - Contribute - - - - - - - Backstage is a{' '} - - Cloud Native Computing Foundation - {' '} - incubation project -
- - - -
- -
- ); - } -} - -module.exports = Index; diff --git a/microsite/pages/en/link.js b/microsite/pages/en/link.js deleted file mode 100644 index fadb4f50d0..0000000000 --- a/microsite/pages/en/link.js +++ /dev/null @@ -1,29 +0,0 @@ -const React = require('react'); - -// This is an index of stable short-links to different doc sites -// for example https://backstage.io/link?bind-routes -const redirects = { - 'bind-routes': - '/docs/plugins/composability#binding-external-routes-in-the-app', - 'scm-auth': '/docs/auth/#scaffolder-configuration-software-templates', - 'backend-system': '/docs/plugins/new-backend-system', -}; -const fallback = '/docs'; - -function Link() { - return ( - -