Rebase from master (#19)
* Fix client reference * Fix CatalogClient reference in create-app too * Move catalog-client dep to create-app * Add catalog-client dep again.. * Use RequestOptions * tsc * Backwards compatible scaffolder * Fix test * Avoid importing core * Use request options * Increase code coverage * Type those variables * use the second mock * Trying to make tests work on Github too * Get clean yarn from master * Only add authorization header if token exists * Use request options * Forward authorization header token * Refactor to use context argument * Allow the registration of optional locations via the catalog-client * Make EntityRefLink a React.forwardRef in order to use it as root component in other components like ListItem * Rework the user flow of the catalog-import plugin * Update the create-app template * Add luxon and remove moment * Port moment to luxon * Add change set * Split the step label and content to be able to refactor the stepper from vertical to horizontal in the future * Fix tsc, prettier and import issues * Update .changeset/strange-olives-unite.md Co-authored-by: Himanshu Mishra <himanshu@orkohunter.net> * Update plugins/auth-backend/src/identity/TokenFactory.ts Co-authored-by: Himanshu Mishra <himanshu@orkohunter.net> * Change from minor to patch * Update DatabaseKeyStore.ts * feat: added a test for running a simple cypress server * Add luxon and remove moment * Port from moment to Luxon * Add changeset * Fixes following CR * Rebased and reinstalled yarn.lock * Changed to fromSQL * Fix prettier formatting * chore: reworking the lock file for the cypress deps * chore: adding cypress.config * chore: reworking some more examples * chore: added some more simple stuff for e2e tests with cypress * chore: reworking again * chore: making cypress nice * chore: added a sample test that works * chore: reworking tests to use he cypress github-action instead * chore: reconfigure Cypress run * chore: don't install - we have deps * chore: dump video recordings too * chore: slimming down install script a little * chore: make pretty * chore: fixing syntax * chore: fixing syntax again * Align card elements with list * Align card elements with List * Add changeset * Removed unused import * chore: archive video footage with the correct path * chore: fix lint warnings * chore: fix prettier again * chore: move files around for ease * Added pattern for component name * Add changeset * stash: push to stash * Return AboutCard title to group name * Refactor children to use shared function * TechDocs: Add visbility to migrate away from basic setup * bugfix: [3310] Favoriting a component resets interface to your owned components update changeset remove unused import fix changeset message fix vale errors? * Create utc DateTime object directly * integration: update the gitlab config mandatory fields to match reality * Resolve review comments * Remove shadowed variables * generateEntityDefinitions should return a PartialEntity * Update roadmap with Backstage Community Sessions * Make sure that SidebarItems are also active when on sub route * Add whitespace around variable * Add changeset * Add word to dictionary * Smater duration display * Add changeset * chore(deps-dev): bump @graphql-codegen/typescript from 1.18.1 to 1.20.2 Bumps [@graphql-codegen/typescript](https://github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/plugins/typescript/typescript) from 1.18.1 to 1.20.2. - [Release notes](https://github.com/dotansimha/graphql-code-generator/releases) - [Changelog](https://github.com/dotansimha/graphql-code-generator/blob/master/packages/plugins/typescript/typescript/CHANGELOG.md) - [Commits](https://github.com/dotansimha/graphql-code-generator/commits/@graphql-codegen/typescript@1.20.2/packages/plugins/typescript/typescript) Signed-off-by: dependabot[bot] <support@github.com> * chore: reworking folder structure to move cypress outside of the project * chore: updating workflow to point at the right folder now * chore: fixing cypress build * microsite: Fix color contrast for pre tags * Add package name to lockfile.ts error * Create new-mangos-tap.md * Changed changeset bump to be patch * Pass registered Logger in ServiceBuilderImpl to requestLoggingHandler `requestLoggingHandler` takes an optional `logger` parameter that it can use to log incoming requests. The `ServiceBuilderImpl` was not passing on this logger, if set, to `requestLoggingHandler` middleware * Add indices on columns referring location(id) * Add changeset * Catch catalog errors * Add changeset * Fixed parseUrl to output catalogPaths beginning with '/' * Add configurable OAuth 2.0 scopes - Add oauth2 config for optional scopes - Document oauth2 config keys - Add OAuth2 to demo app list of identity providers * incorrectly added callbackUrl * chore: added a simple readme to run some simple tests against a backstage instance * chore(deps): bump @svgr/plugin-jsx from 5.4.0 to 5.5.0 Bumps [@svgr/plugin-jsx](https://github.com/gregberge/svgr) from 5.4.0 to 5.5.0. - [Release notes](https://github.com/gregberge/svgr/releases) - [Changelog](https://github.com/gregberge/svgr/blob/main/CHANGELOG.md) - [Commits](https://github.com/gregberge/svgr/compare/v5.4.0...v5.5.0) Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump @types/cors from 2.8.6 to 2.8.9 Bumps [@types/cors](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/cors) from 2.8.6 to 2.8.9. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/cors) Signed-off-by: dependabot[bot] <support@github.com> * fix: removing test e2e-test tsconfig.json file * TechDocs: Preparers will take and return an etag for cache invalidation * TechDocs: Implement etag based caching for url preparer Signed-off-by: Himanshu Mishra <himanshu@orkohunter.net> * TechDocs: Implement etag based caching for git preparer Signed-off-by: Himanshu Mishra <himanshu@orkohunter.net> * TechDocs: Warn when using legacy git preparer and dir preparer in backstage.io/techdocs-ref Context: https://github.com/backstage/backstage/issues/4409 * TechDocs: Update tests for proper url preparer caching * TechDocs: Deduplicate git clone for cache check Signed-off-by: Himanshu Mishra <himanshu@orkohunter.net> * TechDocs: Add changesets for deprecation and proper caching * TechDocs: Implement caching for dir preparer * Update the changesets * scaffolder-backend: remove auth-backend dependency * catalog-client: rename ApiContext to CatalogRequestOptions + avoid export * refactor existing usage of ApiContext * techdocs: don't swallow errors other than NotModifiedError * catalog-import: removed bonus code * techdocs: meaningful logs when readTree starts * Flatten the options of the CatalogImportPage * inline optional id token auth headers * Define relationship to software catalog and loose coupling by convention. * Clarify intentions around bulk vs. incremental index management. * Break apart backend plugins & clarify indexer/plugin relationship. * update changeset bump levels * [Search] documentation update (#4459) * delete link to issue as it is closed * replace usage of easy as its very subjective * Update docs/features/search/architecture.md Co-authored-by: Adam Harvey <adam.harvey@dxc.com> * prettier....: Co-authored-by: Adam Harvey <adam.harvey@dxc.com> * Own it. * scaffolder: include backstage identity token in requests * review feedback tweaks * docs/apis: update to use named plugin var * sentry: update plugin instance export name * clear other field when toggling reason * changeset * fix(pagerduty): use the luxon date library * Don't pass default as a scope to OIDC providers * docs(TechDocs): Add GitHub Actions CI example with AWS S3 * tech-radar: migrated to new composability API * cost-insights: migrate to new composability API * Changeset * Fix line endings * Prettier * Remove unnecessary scopes from OIDC defaultApi * Bump plugin-auth-backend to a minor change, add documentation for fixing it * Fix md syntax error * Fix Vale spelling error * Remove defaultScopes from OIDC api * [ImgBot] Optimize images /plugins/catalog-import/docs/catalog-import-screenshot.png -- 613.39kb -> 356.48kb (41.88%) Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com> * github/workflows: use lax config checks * Use commented-out example value for scope * feat(pagerduty): add changeset * Apply suggestions from code review Co-authored-by: Rémi Doreau <32459935+ayshiff@users.noreply.github.com> * feat(catalog): add entity links card component * update entity links changeset * Fix prettier * chore(deps-dev): bump @types/http-proxy from 1.17.4 to 1.17.5 Bumps [@types/http-proxy](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/http-proxy) from 1.17.4 to 1.17.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/http-proxy) Signed-off-by: dependabot[bot] <support@github.com> * Revert "Merge pull request #3953 from ayshiff/feature/techdocs-aws-sdkv3" This reverts commit1c7771871e, reversing changes made to65d5c8e6fe. * Revert "Merge pull request #4035 from ayshiff/feature/catalog-backend-aws-sdk-v3" This reverts commit1df9134648, reversing changes made tod45a510069. * Add changeset * feat: support custom app icons * backend-common: implement UrlReader.search for the other providers too * Remove changeset * docs(TechDocs): Improvements to the CI example Signed-off-by: Himanshu Mishra <himanshu@orkohunter.net> * fix(catalog): entity links incorrect wrapping * Remove unused functions and luxon * Removed old imports * Fix broken links in documentation (#4418) * Update IdentityApi.md * Update docs/reference/utility-apis/IdentityApi.md * Update docs/reference/utility-apis/IdentityApi.md * ran yarn docgen * Use JS Date instead of Datetime * Add line * Prettier fix * Move parseDate function * Version Packages * chore: fix the create-app version * Limit the props that are forwarded to the Link component in the EntityRefLink * Use routed tabs to link to every settings page * fix up yarn after release * chore: add lockfile to words * catalog-info: add links * Export Select component from core I saw the Select component on storybook and went to use it but it seems it's not exported. Any chance it could be exported? * bug: filepath can be returned as undefined from `git-url-parse` let's default to empty * chore: might as well do this for all parsing * chore: changeset * Add changeset for fixing requestLoggingHandler * chore(deps-dev): bump @storybook/addon-actions from 6.1.11 to 6.1.17 Bumps [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/addons/actions) from 6.1.11 to 6.1.17. - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v6.1.17/addons/actions) Signed-off-by: dependabot[bot] <support@github.com> * Port AboutCard * Fix tests * Revert EntityPage changes * docs: Merge auth glossary with main glossary * Remove the "Move repository" menu entry from the catalog page, as it's just a placeholder It will be easy to bring it back later, but for now it just confuses users that it's not doing anything. It's also hard to remove for integrators. * make the template cards conform to mui standard Co-authored-by: Erik Larsson <erik.larsson@schibsted.com> Co-authored-by: Dominik Henneke <dominik.henneke@sda-se.com> Co-authored-by: Nils Streijffert <nstreijffert@spotify.com> Co-authored-by: Nils Streijffert <nils.streijffert@gmail.com> Co-authored-by: Himanshu Mishra <himanshu@orkohunter.net> Co-authored-by: blam <ben@blam.sh> Co-authored-by: Nir Gazit <nir.gzt@gmail.com> Co-authored-by: Adam Harvey <adam.harvey@dxc.com> Co-authored-by: NHI TRAN <nhid@ntran.io> Co-authored-by: Fredrik Adelöw <freben@gmail.com> Co-authored-by: Oliver Sand <oliver.sand@sda-se.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Debajyoti Halder <rondebajyoti@gmail.com> Co-authored-by: Patrik Oldsberg <poldsberg@gmail.com> Co-authored-by: Gowind <petrovgovind@gmail.com> Co-authored-by: Alan Crosswell <alan@columbia.edu> Co-authored-by: Eric Peterson <ericpeterson@spotify.com> Co-authored-by: Emma Indal <emma.indahl@gmail.com> Co-authored-by: Ryan Vazquez <ryanv@spotify.com> Co-authored-by: Ryan Vazquez <ryanmvazquez@gmail.com> Co-authored-by: Remi <remi.d45@gmail.com> Co-authored-by: Ryan Manny <rmanny@apptio.com> Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com> Co-authored-by: Rémi Doreau <32459935+ayshiff@users.noreply.github.com> Co-authored-by: Andrew Thauer <6507159+andrewthauer@users.noreply.github.com> Co-authored-by: Joel Low <joel@joelsplace.sg> Co-authored-by: Eric Peterson <iamEAP@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Iain Billett <iain@roadie.io>
This commit is contained in:
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-scaffolder
|
||||
|
||||
## 0.5.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 6ed2b47d6: Include Backstage identity token in requests to backend plugins.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [19d354c78]
|
||||
- Updated dependencies [b51ee6ece]
|
||||
- @backstage/plugin-catalog-react@0.0.3
|
||||
- @backstage/core@0.6.1
|
||||
|
||||
## 0.4.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
import React from 'react';
|
||||
import { createDevApp } from '@backstage/dev-utils';
|
||||
import { discoveryApiRef } from '@backstage/core';
|
||||
import { discoveryApiRef, identityApiRef } from '@backstage/core';
|
||||
import { CatalogClient } from '@backstage/catalog-client';
|
||||
import { catalogApiRef } from '@backstage/plugin-catalog-react';
|
||||
import { TemplateIndexPage, TemplatePage } from '../src/plugin';
|
||||
@@ -30,8 +30,9 @@ createDevApp()
|
||||
})
|
||||
.registerApi({
|
||||
api: scaffolderApiRef,
|
||||
deps: { discoveryApi: discoveryApiRef },
|
||||
factory: ({ discoveryApi }) => new ScaffolderApi({ discoveryApi }),
|
||||
deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },
|
||||
factory: ({ discoveryApi, identityApi }) =>
|
||||
new ScaffolderApi({ discoveryApi, identityApi }),
|
||||
})
|
||||
.addPage({
|
||||
path: '/create',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-scaffolder",
|
||||
"version": "0.4.2",
|
||||
"version": "0.5.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -31,8 +31,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.1",
|
||||
"@backstage/core": "^0.6.0",
|
||||
"@backstage/plugin-catalog-react": "^0.0.2",
|
||||
"@backstage/core": "^0.6.1",
|
||||
"@backstage/plugin-catalog-react": "^0.0.3",
|
||||
"@backstage/theme": "^0.2.3",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -52,9 +52,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.0",
|
||||
"@backstage/dev-utils": "^0.1.9",
|
||||
"@backstage/test-utils": "^0.1.6",
|
||||
"@backstage/catalog-client": "^0.3.5",
|
||||
"@backstage/dev-utils": "^0.1.10",
|
||||
"@backstage/test-utils": "^0.1.7",
|
||||
"@backstage/catalog-client": "^0.3.6",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^10.4.1",
|
||||
"@testing-library/user-event": "^12.0.7",
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { createApiRef, DiscoveryApi } from '@backstage/core';
|
||||
import { createApiRef, DiscoveryApi, IdentityApi } from '@backstage/core';
|
||||
|
||||
export const scaffolderApiRef = createApiRef<ScaffolderApi>({
|
||||
id: 'plugin.scaffolder.service',
|
||||
@@ -23,9 +23,14 @@ export const scaffolderApiRef = createApiRef<ScaffolderApi>({
|
||||
|
||||
export class ScaffolderApi {
|
||||
private readonly discoveryApi: DiscoveryApi;
|
||||
private readonly identityApi: IdentityApi;
|
||||
|
||||
constructor(options: { discoveryApi: DiscoveryApi }) {
|
||||
constructor(options: {
|
||||
discoveryApi: DiscoveryApi;
|
||||
identityApi: IdentityApi;
|
||||
}) {
|
||||
this.discoveryApi = options.discoveryApi;
|
||||
this.identityApi = options.identityApi;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,11 +41,13 @@ export class ScaffolderApi {
|
||||
* @param values Parameters for the template, e.g. name, description
|
||||
*/
|
||||
async scaffold(templateName: string, values: Record<string, any>) {
|
||||
const token = await this.identityApi.getIdToken();
|
||||
const url = `${await this.discoveryApi.getBaseUrl('scaffolder')}/v1/jobs`;
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...(token && { Authorization: `Bearer ${token}` }),
|
||||
},
|
||||
body: JSON.stringify({ templateName, values: { ...values } }),
|
||||
});
|
||||
@@ -56,8 +63,11 @@ export class ScaffolderApi {
|
||||
}
|
||||
|
||||
async getJob(jobId: string) {
|
||||
const token = await this.identityApi.getIdToken();
|
||||
const baseUrl = await this.discoveryApi.getBaseUrl('scaffolder');
|
||||
const url = `${baseUrl}/v1/job/${encodeURIComponent(jobId)}`;
|
||||
return fetch(url).then(x => x.json());
|
||||
return fetch(url, {
|
||||
headers: token ? { Authorization: `Bearer ${token}` } : {},
|
||||
}).then(x => x.json());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ import { Button } from '@backstage/core';
|
||||
import { BackstageTheme, pageTheme } from '@backstage/theme';
|
||||
import {
|
||||
Card,
|
||||
CardActions,
|
||||
CardContent,
|
||||
Chip,
|
||||
makeStyles,
|
||||
Typography,
|
||||
@@ -34,18 +36,11 @@ const useStyles = makeStyles(theme => ({
|
||||
props.backgroundImage,
|
||||
backgroundPosition: 0,
|
||||
},
|
||||
content: {
|
||||
padding: theme.spacing(2),
|
||||
},
|
||||
description: {
|
||||
height: 175,
|
||||
overflow: 'hidden',
|
||||
textOverflow: 'ellipsis',
|
||||
},
|
||||
footer: {
|
||||
display: 'flex',
|
||||
flexDirection: 'row-reverse',
|
||||
},
|
||||
}));
|
||||
|
||||
export type TemplateCardProps = {
|
||||
@@ -76,19 +71,19 @@ export const TemplateCard = ({
|
||||
<Typography variant="subtitle2">{type}</Typography>
|
||||
<Typography variant="h6">{title}</Typography>
|
||||
</div>
|
||||
<div className={classes.content}>
|
||||
<CardContent>
|
||||
{tags?.map(tag => (
|
||||
<Chip label={tag} key={tag} />
|
||||
))}
|
||||
<Typography variant="body2" paragraph className={classes.description}>
|
||||
{description}
|
||||
</Typography>
|
||||
<div className={classes.footer}>
|
||||
<Button color="primary" to={href}>
|
||||
Choose
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</CardContent>
|
||||
<CardActions>
|
||||
<Button color="primary" to={href}>
|
||||
Choose
|
||||
</Button>
|
||||
</CardActions>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -99,7 +99,7 @@ describe('TemplatePage', () => {
|
||||
</ApiProvider>,
|
||||
);
|
||||
|
||||
expect(rendered.queryByText('Create a new component')).toBeInTheDocument();
|
||||
expect(rendered.queryByText('Create a New Component')).toBeInTheDocument();
|
||||
expect(rendered.queryByText('React SSR Template')).toBeInTheDocument();
|
||||
// await act(async () => await mutate('templates/test'));
|
||||
});
|
||||
@@ -116,7 +116,7 @@ describe('TemplatePage', () => {
|
||||
</ApiProvider>,
|
||||
);
|
||||
|
||||
expect(rendered.queryByText('Create a new component')).toBeInTheDocument();
|
||||
expect(rendered.queryByText('Create a New Component')).toBeInTheDocument();
|
||||
expect(rendered.queryByTestId('loading-progress')).toBeInTheDocument();
|
||||
// Need to cleanup the promise or will timeout
|
||||
act(() => {
|
||||
@@ -141,7 +141,7 @@ describe('TemplatePage', () => {
|
||||
);
|
||||
|
||||
expect(
|
||||
rendered.queryByText('Create a new component'),
|
||||
rendered.queryByText('Create a New Component'),
|
||||
).not.toBeInTheDocument();
|
||||
expect(rendered.queryByText('This is root')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
@@ -149,10 +149,10 @@ export const TemplatePage = () => {
|
||||
return (
|
||||
<Page themeId="home">
|
||||
<Header
|
||||
pageTitleOverride="Create a new component"
|
||||
pageTitleOverride="Create a New Component"
|
||||
title={
|
||||
<>
|
||||
Create a new component <Lifecycle alpha shorthand />
|
||||
Create a New Component <Lifecycle alpha shorthand />
|
||||
</>
|
||||
}
|
||||
subtitle="Create new software components using standard templates"
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
createPlugin,
|
||||
createApiFactory,
|
||||
discoveryApiRef,
|
||||
identityApiRef,
|
||||
createRoutableExtension,
|
||||
} from '@backstage/core';
|
||||
import { ScaffolderPage as ScaffolderPageComponent } from './components/ScaffolderPage';
|
||||
@@ -30,8 +31,9 @@ export const scaffolderPlugin = createPlugin({
|
||||
apis: [
|
||||
createApiFactory({
|
||||
api: scaffolderApiRef,
|
||||
deps: { discoveryApi: discoveryApiRef },
|
||||
factory: ({ discoveryApi }) => new ScaffolderApi({ discoveryApi }),
|
||||
deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },
|
||||
factory: ({ discoveryApi, identityApi }) =>
|
||||
new ScaffolderApi({ discoveryApi, identityApi }),
|
||||
}),
|
||||
],
|
||||
register({ router }) {
|
||||
|
||||
Reference in New Issue
Block a user