Merge branch 'master' into firehydrant-plugin
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
bump node-tar version to the latest
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
fix typo in the comments of EntityPage component
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
Add configuration option to the kubernetes object types. Config option is under `kubernetes.resources`. Defaults to ['pods', 'services', 'configmaps', 'deployments', 'replicasets', 'horizontalpodautoscalers', 'ingresses']
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Add the `scaffolder.defaultCommitMessage`, which defaults to `Initial commit`, so it can be customized.
|
||||
@@ -256,6 +256,8 @@ scaffolder:
|
||||
# defaultAuthor:
|
||||
# name: Scaffolder
|
||||
# email: scaffolder@backstage.io
|
||||
# Use to customize the default commit message when new components are created
|
||||
# defaultCommitMessage: 'Initial commit'
|
||||
github:
|
||||
token: ${GITHUB_TOKEN}
|
||||
visibility: public # or 'internal' or 'private'
|
||||
|
||||
@@ -288,6 +288,16 @@ td {
|
||||
.tocToggler {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.docsSliderActive .toc section .navGroups {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.docsSliderActive.docsNavContainer {
|
||||
background-color: #121212;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* content */
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
]
|
||||
},
|
||||
"resolutions": {
|
||||
"**/@graphql-codegen/cli/**/ws": "^7.4.6",
|
||||
"**/@roadiehq/**/@backstage/core": "*",
|
||||
"**/@roadiehq/**/@backstage/plugin-catalog": "*",
|
||||
"**/@roadiehq/**/@backstage/catalog-model": "*",
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
"raw-body": "^2.4.1",
|
||||
"selfsigned": "^1.10.7",
|
||||
"stoppable": "^1.1.0",
|
||||
"tar": "^6.0.5",
|
||||
"tar": "^6.1.2",
|
||||
"unzipper": "^0.10.11",
|
||||
"winston": "^3.2.1",
|
||||
"yn": "^4.0.0"
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
"start-server-webpack-plugin": "^2.2.5",
|
||||
"style-loader": "^1.2.1",
|
||||
"sucrase": "^3.18.2",
|
||||
"tar": "^6.0.1",
|
||||
"tar": "^6.1.2",
|
||||
"terser-webpack-plugin": "^1.4.3",
|
||||
"ts-loader": "^8.0.17",
|
||||
"typescript": "^4.0.3",
|
||||
|
||||
+1
-1
@@ -180,7 +180,7 @@ const websiteEntityPage = (
|
||||
/**
|
||||
* NOTE: This page is designed to work on small screens such as mobile devices.
|
||||
* This is based on Material UI Grid. If breakpoints are used, each grid item must set the `xs` prop to a column size or to `true`,
|
||||
* since this does not default. If no breakpoints are used, the items will equitably share the asvailable space.
|
||||
* since this does not default. If no breakpoints are used, the items will equitably share the available space.
|
||||
* https://material-ui.com/components/grid/#basic-grid.
|
||||
*/
|
||||
|
||||
|
||||
@@ -51,6 +51,11 @@ export interface CustomResource {
|
||||
plural: string;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DEFAULT_OBJECTS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const DEFAULT_OBJECTS: KubernetesObjectTypes[];
|
||||
|
||||
// Warning: (ae-missing-release-tag) "FetchResponseWrapper" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
|
||||
+9
@@ -16,6 +16,15 @@
|
||||
|
||||
export interface Config {
|
||||
kubernetes?: {
|
||||
objectTypes?: Array<
|
||||
| 'pods'
|
||||
| 'services'
|
||||
| 'configmaps'
|
||||
| 'deployments'
|
||||
| 'replicasets'
|
||||
| 'horizontalpodautoscalers'
|
||||
| 'ingresses'
|
||||
>;
|
||||
serviceLocatorMethod: {
|
||||
type: 'multiTenant';
|
||||
};
|
||||
|
||||
@@ -16,3 +16,5 @@
|
||||
|
||||
export * from './service/router';
|
||||
export * from './types/types';
|
||||
|
||||
export { DEFAULT_OBJECTS } from './service/KubernetesFanOutHandler';
|
||||
|
||||
@@ -129,16 +129,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
entity: {
|
||||
@@ -221,16 +221,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
auth: {
|
||||
@@ -357,16 +357,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
auth: {
|
||||
@@ -497,16 +497,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
auth: {
|
||||
|
||||
@@ -26,7 +26,7 @@ import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
|
||||
import { KubernetesAuthTranslator } from '../kubernetes-auth-translator/types';
|
||||
import { KubernetesAuthTranslatorGenerator } from '../kubernetes-auth-translator/KubernetesAuthTranslatorGenerator';
|
||||
|
||||
const DEFAULT_OBJECTS = new Set<KubernetesObjectTypes>([
|
||||
export const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [
|
||||
'pods',
|
||||
'services',
|
||||
'configmaps',
|
||||
@@ -34,30 +34,38 @@ const DEFAULT_OBJECTS = new Set<KubernetesObjectTypes>([
|
||||
'replicasets',
|
||||
'horizontalpodautoscalers',
|
||||
'ingresses',
|
||||
]);
|
||||
];
|
||||
|
||||
export interface KubernetesFanOutHandlerOptions {
|
||||
logger: Logger;
|
||||
fetcher: KubernetesFetcher;
|
||||
serviceLocator: KubernetesServiceLocator;
|
||||
customResources: CustomResource[];
|
||||
objectTypesToFetch?: KubernetesObjectTypes[];
|
||||
}
|
||||
|
||||
export class KubernetesFanOutHandler {
|
||||
private readonly logger: Logger;
|
||||
private readonly fetcher: KubernetesFetcher;
|
||||
private readonly serviceLocator: KubernetesServiceLocator;
|
||||
private readonly customResources: CustomResource[];
|
||||
private readonly objectTypesToFetch: KubernetesObjectTypes[];
|
||||
|
||||
constructor(
|
||||
logger: Logger,
|
||||
fetcher: KubernetesFetcher,
|
||||
serviceLocator: KubernetesServiceLocator,
|
||||
customResources: CustomResource[],
|
||||
) {
|
||||
constructor({
|
||||
logger,
|
||||
fetcher,
|
||||
serviceLocator,
|
||||
customResources,
|
||||
objectTypesToFetch = DEFAULT_OBJECTS,
|
||||
}: KubernetesFanOutHandlerOptions) {
|
||||
this.logger = logger;
|
||||
this.fetcher = fetcher;
|
||||
this.serviceLocator = serviceLocator;
|
||||
this.customResources = customResources;
|
||||
this.objectTypesToFetch = objectTypesToFetch;
|
||||
}
|
||||
|
||||
async getKubernetesObjectsByEntity(
|
||||
requestBody: KubernetesRequestBody,
|
||||
objectTypesToFetch: Set<KubernetesObjectTypes> = DEFAULT_OBJECTS,
|
||||
) {
|
||||
async getKubernetesObjectsByEntity(requestBody: KubernetesRequestBody) {
|
||||
const entityName =
|
||||
requestBody.entity?.metadata?.annotations?.[
|
||||
'backstage.io/kubernetes-id'
|
||||
@@ -98,7 +106,7 @@ export class KubernetesFanOutHandler {
|
||||
.fetchObjectsForService({
|
||||
serviceId: entityName,
|
||||
clusterDetails: clusterDetailsItem,
|
||||
objectTypesToFetch,
|
||||
objectTypesToFetch: new Set(this.objectTypesToFetch),
|
||||
labelSelector,
|
||||
customResources: this.customResources,
|
||||
})
|
||||
|
||||
@@ -23,6 +23,7 @@ import { MultiTenantServiceLocator } from '../service-locator/MultiTenantService
|
||||
import {
|
||||
ClusterDetails,
|
||||
KubernetesClustersSupplier,
|
||||
KubernetesObjectTypes,
|
||||
KubernetesServiceLocator,
|
||||
ServiceLocatorMethod,
|
||||
CustomResource,
|
||||
@@ -133,13 +134,17 @@ export async function createRouter(
|
||||
);
|
||||
|
||||
const serviceLocator = getServiceLocator(options.config, clusterDetails);
|
||||
const objectTypesToFetch = options.config.getOptionalStringArray(
|
||||
'kubernetes.objectTypes',
|
||||
) as KubernetesObjectTypes[];
|
||||
|
||||
const kubernetesFanOutHandler = new KubernetesFanOutHandler(
|
||||
const kubernetesFanOutHandler = new KubernetesFanOutHandler({
|
||||
logger,
|
||||
fetcher,
|
||||
serviceLocator,
|
||||
customResources,
|
||||
);
|
||||
objectTypesToFetch,
|
||||
});
|
||||
|
||||
return makeRouter(logger, kubernetesFanOutHandler, clusterDetails);
|
||||
}
|
||||
|
||||
+4
@@ -24,6 +24,10 @@ export interface Config {
|
||||
name?: string;
|
||||
email?: string;
|
||||
};
|
||||
/**
|
||||
* The commit message used when new components are created.
|
||||
*/
|
||||
defaultCommitMessage?: string;
|
||||
github?: {
|
||||
[key: string]: string;
|
||||
/**
|
||||
|
||||
@@ -62,6 +62,7 @@ export async function initRepoAndPush({
|
||||
auth,
|
||||
logger,
|
||||
defaultBranch = 'master',
|
||||
commitMessage = 'Initial commit',
|
||||
gitAuthorInfo,
|
||||
}: {
|
||||
dir: string;
|
||||
@@ -69,6 +70,7 @@ export async function initRepoAndPush({
|
||||
auth: { username: string; password: string };
|
||||
logger: Logger;
|
||||
defaultBranch?: string;
|
||||
commitMessage?: string;
|
||||
gitAuthorInfo?: { name?: string; email?: string };
|
||||
}): Promise<void> {
|
||||
const git = Git.fromAuth({
|
||||
@@ -100,7 +102,7 @@ export async function initRepoAndPush({
|
||||
|
||||
await git.commit({
|
||||
dir,
|
||||
message: 'Initial commit',
|
||||
message: commitMessage,
|
||||
author: authorInfo,
|
||||
committer: authorInfo,
|
||||
});
|
||||
|
||||
@@ -233,6 +233,44 @@ describe('publish:azure', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should call initRepoAndPush with the configured defaultCommitMessage', async () => {
|
||||
const customAuthorConfig = new ConfigReader({
|
||||
integrations: {
|
||||
azure: [
|
||||
{ host: 'dev.azure.com', token: 'tokenlols' },
|
||||
{ host: 'myazurehostnotoken.com' },
|
||||
],
|
||||
},
|
||||
scaffolder: {
|
||||
defaultCommitMessage: 'Test commit message',
|
||||
},
|
||||
});
|
||||
|
||||
const customAuthorIntegrations = ScmIntegrations.fromConfig(
|
||||
customAuthorConfig,
|
||||
);
|
||||
const customAuthorAction = createPublishAzureAction({
|
||||
integrations: customAuthorIntegrations,
|
||||
config: customAuthorConfig,
|
||||
});
|
||||
|
||||
mockGitClient.createRepository.mockImplementation(() => ({
|
||||
remoteUrl: 'https://dev.azure.com/organization/project/_git/repo',
|
||||
}));
|
||||
|
||||
await customAuthorAction.handler(mockContext);
|
||||
|
||||
expect(initRepoAndPush).toHaveBeenCalledWith({
|
||||
dir: mockContext.workspacePath,
|
||||
remoteUrl: 'https://dev.azure.com/organization/project/_git/repo',
|
||||
auth: { username: 'notempty', password: 'tokenlols' },
|
||||
logger: mockContext.logger,
|
||||
defaultBranch: 'master',
|
||||
commitMessage: 'Test commit message',
|
||||
gitAuthorInfo: { email: undefined, name: undefined },
|
||||
});
|
||||
});
|
||||
|
||||
it('should call output with the remoteUrl and the repoContentsUrl', async () => {
|
||||
mockGitClient.createRepository.mockImplementation(() => ({
|
||||
remoteUrl: 'https://dev.azure.com/organization/project/_git/repo',
|
||||
|
||||
@@ -139,6 +139,9 @@ export function createPublishAzureAction(options: {
|
||||
password: integrationConfig.config.token,
|
||||
},
|
||||
logger: ctx.logger,
|
||||
commitMessage: config.getOptionalString(
|
||||
'scaffolder.defaultCommitMessage',
|
||||
),
|
||||
gitAuthorInfo,
|
||||
});
|
||||
|
||||
|
||||
@@ -407,6 +407,74 @@ describe('publish:bitbucket', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should call initAndPush with the configured defaultCommitMessage', async () => {
|
||||
const customAuthorConfig = new ConfigReader({
|
||||
integrations: {
|
||||
bitbucket: [
|
||||
{
|
||||
host: 'bitbucket.org',
|
||||
token: 'tokenlols',
|
||||
},
|
||||
{
|
||||
host: 'hosted.bitbucket.com',
|
||||
token: 'thing',
|
||||
apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0',
|
||||
},
|
||||
{
|
||||
host: 'notoken.bitbucket.com',
|
||||
},
|
||||
],
|
||||
},
|
||||
scaffolder: {
|
||||
defaultCommitMessage: 'Test commit message',
|
||||
},
|
||||
});
|
||||
|
||||
const customAuthorIntegrations = ScmIntegrations.fromConfig(
|
||||
customAuthorConfig,
|
||||
);
|
||||
const customAuthorAction = createPublishBitbucketAction({
|
||||
integrations: customAuthorIntegrations,
|
||||
config: customAuthorConfig,
|
||||
});
|
||||
|
||||
server.use(
|
||||
rest.post(
|
||||
'https://api.bitbucket.org/2.0/repositories/owner/repo',
|
||||
(_, res, ctx) =>
|
||||
res(
|
||||
ctx.status(200),
|
||||
ctx.set('Content-Type', 'application/json'),
|
||||
ctx.json({
|
||||
links: {
|
||||
html: {
|
||||
href: 'https://bitbucket.org/owner/repo',
|
||||
},
|
||||
clone: [
|
||||
{
|
||||
name: 'https',
|
||||
href: 'https://bitbucket.org/owner/cloneurl',
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
await customAuthorAction.handler(mockContext);
|
||||
|
||||
expect(initRepoAndPush).toHaveBeenCalledWith({
|
||||
dir: mockContext.workspacePath,
|
||||
remoteUrl: 'https://bitbucket.org/owner/cloneurl',
|
||||
auth: { username: 'x-token-auth', password: 'tokenlols' },
|
||||
logger: mockContext.logger,
|
||||
defaultBranch: 'master',
|
||||
commitMessage: 'Test commit message',
|
||||
gitAuthorInfo: { email: undefined, name: undefined },
|
||||
});
|
||||
});
|
||||
|
||||
it('should call outputs with the correct urls', async () => {
|
||||
server.use(
|
||||
rest.post(
|
||||
|
||||
@@ -304,6 +304,9 @@ export function createPublishBitbucketAction(options: {
|
||||
},
|
||||
defaultBranch,
|
||||
logger: ctx.logger,
|
||||
commitMessage: config.getOptionalString(
|
||||
'scaffolder.defaultCommitMessage',
|
||||
),
|
||||
gitAuthorInfo,
|
||||
});
|
||||
|
||||
|
||||
@@ -260,6 +260,51 @@ describe('publish:github', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should call initRepoAndPush with the configured defaultCommitMessage', async () => {
|
||||
const customAuthorConfig = new ConfigReader({
|
||||
integrations: {
|
||||
github: [
|
||||
{ host: 'github.com', token: 'tokenlols' },
|
||||
{ host: 'ghe.github.com' },
|
||||
],
|
||||
},
|
||||
scaffolder: {
|
||||
defaultCommitMessage: 'Test commit message',
|
||||
},
|
||||
});
|
||||
|
||||
const customAuthorIntegrations = ScmIntegrations.fromConfig(
|
||||
customAuthorConfig,
|
||||
);
|
||||
const customAuthorAction = createPublishGithubAction({
|
||||
integrations: customAuthorIntegrations,
|
||||
config: customAuthorConfig,
|
||||
});
|
||||
|
||||
mockGithubClient.users.getByUsername.mockResolvedValue({
|
||||
data: { type: 'User' },
|
||||
});
|
||||
|
||||
mockGithubClient.repos.createForAuthenticatedUser.mockResolvedValue({
|
||||
data: {
|
||||
clone_url: 'https://github.com/clone/url.git',
|
||||
html_url: 'https://github.com/html/url',
|
||||
},
|
||||
});
|
||||
|
||||
await customAuthorAction.handler(mockContext);
|
||||
|
||||
expect(initRepoAndPush).toHaveBeenCalledWith({
|
||||
dir: mockContext.workspacePath,
|
||||
remoteUrl: 'https://github.com/clone/url.git',
|
||||
defaultBranch: 'master',
|
||||
auth: { username: 'x-access-token', password: 'tokenlols' },
|
||||
logger: mockContext.logger,
|
||||
commitMessage: 'Test commit message',
|
||||
gitAuthorInfo: { email: undefined, name: undefined },
|
||||
});
|
||||
});
|
||||
|
||||
it('should add access for the team when it starts with the owner', async () => {
|
||||
mockGithubClient.users.getByUsername.mockResolvedValue({
|
||||
data: { type: 'User' },
|
||||
|
||||
@@ -264,6 +264,9 @@ export function createPublishGithubAction(options: {
|
||||
password: token,
|
||||
},
|
||||
logger: ctx.logger,
|
||||
commitMessage: config.getOptionalString(
|
||||
'scaffolder.defaultCommitMessage',
|
||||
),
|
||||
gitAuthorInfo,
|
||||
});
|
||||
|
||||
|
||||
@@ -219,6 +219,52 @@ describe('publish:gitlab', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should call initRepoAndPush with the configured defaultCommitMessage', async () => {
|
||||
const customAuthorConfig = new ConfigReader({
|
||||
integrations: {
|
||||
gitlab: [
|
||||
{
|
||||
host: 'gitlab.com',
|
||||
token: 'tokenlols',
|
||||
apiBaseUrl: 'https://api.gitlab.com',
|
||||
},
|
||||
{
|
||||
host: 'hosted.gitlab.com',
|
||||
apiBaseUrl: 'https://api.hosted.gitlab.com',
|
||||
},
|
||||
],
|
||||
},
|
||||
scaffolder: {
|
||||
defaultCommitMessage: 'Test commit message',
|
||||
},
|
||||
});
|
||||
|
||||
const customAuthorIntegrations = ScmIntegrations.fromConfig(
|
||||
customAuthorConfig,
|
||||
);
|
||||
const customAuthorAction = createPublishGitlabAction({
|
||||
integrations: customAuthorIntegrations,
|
||||
config: customAuthorConfig,
|
||||
});
|
||||
|
||||
mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 });
|
||||
mockGitlabClient.Projects.create.mockResolvedValue({
|
||||
http_url_to_repo: 'http://mockurl.git',
|
||||
});
|
||||
|
||||
await customAuthorAction.handler(mockContext);
|
||||
|
||||
expect(initRepoAndPush).toHaveBeenCalledWith({
|
||||
dir: mockContext.workspacePath,
|
||||
remoteUrl: 'http://mockurl.git',
|
||||
auth: { username: 'oauth2', password: 'tokenlols' },
|
||||
logger: mockContext.logger,
|
||||
defaultBranch: 'master',
|
||||
commitMessage: 'Test commit message',
|
||||
gitAuthorInfo: { email: undefined, name: undefined },
|
||||
});
|
||||
});
|
||||
|
||||
it('should call output with the remoteUrl and repoContentsUrl', async () => {
|
||||
mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 });
|
||||
mockGitlabClient.Projects.create.mockResolvedValue({
|
||||
|
||||
@@ -137,6 +137,9 @@ export function createPublishGitlabAction(options: {
|
||||
password: integrationConfig.config.token,
|
||||
},
|
||||
logger: ctx.logger,
|
||||
commitMessage: config.getOptionalString(
|
||||
'scaffolder.defaultCommitMessage',
|
||||
),
|
||||
gitAuthorInfo,
|
||||
});
|
||||
|
||||
|
||||
@@ -1993,10 +1993,10 @@
|
||||
retry-request "^4.0.0"
|
||||
teeny-request "^3.11.3"
|
||||
|
||||
"@google-cloud/common@^3.6.0":
|
||||
version "3.6.0"
|
||||
resolved "https://registry.npmjs.org/@google-cloud/common/-/common-3.6.0.tgz#c2f6da5f79279a4a9ac7c71fc02d582beab98e8b"
|
||||
integrity sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q==
|
||||
"@google-cloud/common@^3.7.0":
|
||||
version "3.7.0"
|
||||
resolved "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.0.tgz#ee3fba75aeaa614978aebf8740380670026592aa"
|
||||
integrity sha512-oFgpKLjH9JTOAyQd3kB36iSuH8wNSpDKb1TywlB6zcsG0xmJFxLutmfPhz03KUxRMNQOZ1K1Gc9BYvJifVnGVA==
|
||||
dependencies:
|
||||
"@google-cloud/projectify" "^2.0.0"
|
||||
"@google-cloud/promisify" "^2.0.0"
|
||||
@@ -2005,7 +2005,7 @@
|
||||
ent "^2.2.0"
|
||||
extend "^3.0.2"
|
||||
google-auth-library "^7.0.2"
|
||||
retry-request "^4.1.1"
|
||||
retry-request "^4.2.2"
|
||||
teeny-request "^7.0.0"
|
||||
|
||||
"@google-cloud/container@^2.2.0":
|
||||
@@ -2081,11 +2081,11 @@
|
||||
xdg-basedir "^3.0.0"
|
||||
|
||||
"@google-cloud/storage@^5.6.0", "@google-cloud/storage@^5.8.0":
|
||||
version "5.8.5"
|
||||
resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.8.5.tgz#2cf1e2e0ef8ca552abc4450301fef3fea4900ef6"
|
||||
integrity sha512-i0gB9CRwQeOBYP7xuvn14M40LhHCwMjceBjxE4CTvsqL519sVY5yVKxLiAedHWGwUZHJNRa7Q2CmNfkdRwVNPg==
|
||||
version "5.11.0"
|
||||
resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.11.0.tgz#f2414358f093034410bb03410176a5dcabc7bdf8"
|
||||
integrity sha512-UgdAwBelXpQhubYOHw0U/hDxCXIXFT2TqDc0JWUxtg+BeePZC0ohoFM/b/tJffE28AZW0urTQax5xbRNoDA1Sw==
|
||||
dependencies:
|
||||
"@google-cloud/common" "^3.6.0"
|
||||
"@google-cloud/common" "^3.7.0"
|
||||
"@google-cloud/paginator" "^3.0.0"
|
||||
"@google-cloud/promisify" "^2.0.0"
|
||||
arrify "^2.0.0"
|
||||
@@ -2094,8 +2094,7 @@
|
||||
date-and-time "^1.0.0"
|
||||
duplexify "^4.0.0"
|
||||
extend "^3.0.2"
|
||||
gaxios "^4.0.0"
|
||||
gcs-resumable-upload "^3.1.4"
|
||||
gcs-resumable-upload "^3.3.0"
|
||||
get-stream "^6.0.0"
|
||||
hash-stream-validation "^0.2.2"
|
||||
mime "^2.2.0"
|
||||
@@ -2172,16 +2171,16 @@
|
||||
"@graphql-tools/utils" "^7.9.1"
|
||||
tslib "~2.2.0"
|
||||
|
||||
"@graphql-codegen/plugin-helpers@^1.18.7":
|
||||
version "1.18.7"
|
||||
resolved "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.7.tgz#465af3e5b02de89e49ddc76ad2546b880fe240f2"
|
||||
integrity sha512-8ICOrXlsvyL1dpVz8C9b7H31d4DJpDd75WfjMn6Xjqz81Ah8xDn1Bi+7YXRCCILCBmvI94k6fi8qpsIVhFBBjQ==
|
||||
"@graphql-codegen/plugin-helpers@^1.18.7", "@graphql-codegen/plugin-helpers@^1.18.8":
|
||||
version "1.18.8"
|
||||
resolved "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.8.tgz#39aac745b9e22e28c781cc07cf74836896a3a905"
|
||||
integrity sha512-mb4I9j9lMGqvGggYuZ0CV+Hme08nar68xkpPbAVotg/ZBmlhZIok/HqW2BcMQi7Rj+Il5HQMeQ1wQ1M7sv/TlQ==
|
||||
dependencies:
|
||||
"@graphql-tools/utils" "^7.9.1"
|
||||
common-tags "1.8.0"
|
||||
import-from "3.0.0"
|
||||
import-from "4.0.0"
|
||||
lodash "~4.17.0"
|
||||
tslib "~2.2.0"
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-codegen/typescript-resolvers@^1.17.7":
|
||||
version "1.19.3"
|
||||
@@ -2196,12 +2195,12 @@
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-codegen/typescript@^1.17.7", "@graphql-codegen/typescript@^1.22.2":
|
||||
version "1.22.2"
|
||||
resolved "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-1.22.2.tgz#e0a1926ed8f81d10fcf64911d08d19d57dea94b1"
|
||||
integrity sha512-M+gJVHnpWanCTrSqzh+jNyJ6HhDICFzWV3SVcns5LX1X4NC/7N+TvYLk9ZzRSpBYCkWWGmTPrZNd0zjwhroRTg==
|
||||
version "1.23.0"
|
||||
resolved "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-1.23.0.tgz#48a5372bcbe81a442c71c1bb032c312c6586a59a"
|
||||
integrity sha512-ZfFgk5mGfuOy4kEpy+dcuvJMphigMfJ4AkiP1qWmWFufDW3Sg2yayTSNmzeFdcXMrWGgfNW2dKtuuTmbmQhS5g==
|
||||
dependencies:
|
||||
"@graphql-codegen/plugin-helpers" "^1.18.7"
|
||||
"@graphql-codegen/visitor-plugin-common" "1.21.1"
|
||||
"@graphql-codegen/plugin-helpers" "^1.18.8"
|
||||
"@graphql-codegen/visitor-plugin-common" "1.22.0"
|
||||
auto-bind "~4.0.0"
|
||||
tslib "~2.3.0"
|
||||
|
||||
@@ -2221,6 +2220,22 @@
|
||||
parse-filepath "^1.0.2"
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-codegen/visitor-plugin-common@1.22.0":
|
||||
version "1.22.0"
|
||||
resolved "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.22.0.tgz#75fc8b580143bccbec411eb92d5fef715ed22e42"
|
||||
integrity sha512-2afJGb6d8iuZl9KizYsexPwraEKO1lAvt5eVHNM5Xew4vwz/AUHeqDR2uOeQgVV+27EzjjzSDd47IEdH0dLC2w==
|
||||
dependencies:
|
||||
"@graphql-codegen/plugin-helpers" "^1.18.8"
|
||||
"@graphql-tools/optimize" "^1.0.1"
|
||||
"@graphql-tools/relay-operation-optimizer" "^6.3.0"
|
||||
array.prototype.flatmap "^1.2.4"
|
||||
auto-bind "~4.0.0"
|
||||
change-case-all "1.0.14"
|
||||
dependency-graph "^0.11.0"
|
||||
graphql-tag "^2.11.0"
|
||||
parse-filepath "^1.0.2"
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-modules/core@^0.7.17":
|
||||
version "0.7.17"
|
||||
resolved "https://registry.npmjs.org/@graphql-modules/core/-/core-0.7.17.tgz#ae9bbf44894509664bc0b6fcdd9b6cf3d99bcd00"
|
||||
@@ -8150,13 +8165,6 @@ axe-core@^4.2.0:
|
||||
resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.3.1.tgz#0c6a076e4a1c3e0544ba6a9479158f9be7a7928e"
|
||||
integrity sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g==
|
||||
|
||||
axios@^0.20.0:
|
||||
version "0.20.0"
|
||||
resolved "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd"
|
||||
integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==
|
||||
dependencies:
|
||||
follow-redirects "^1.10.0"
|
||||
|
||||
axios@^0.21.1:
|
||||
version "0.21.1"
|
||||
resolved "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
|
||||
@@ -9568,11 +9576,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
circleci-api@^4.0.0:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.1.3.tgz#cafd80bc1905c6064724636741b4b5b231ed34d0"
|
||||
integrity sha512-Km6H8LB3nNbFUjErhI+sNQrcHcU7dCBnQEi4ckBtQMkCXh+2gDvaYchfkeuIaA1hkakQT5sLmdPbYzhKbvsOMg==
|
||||
version "4.1.4"
|
||||
resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.1.4.tgz#6880a28eb021879d81789b50996640dc6373c5ad"
|
||||
integrity sha512-49F0P2mhmfqYzJR/V4+oM+1SfI/VjKPcurvkzuuawNqgW5Eo00ZufgpHgdT+qRrvRymk6yt45bWOIP/f0FKhJA==
|
||||
dependencies:
|
||||
axios "^0.20.0"
|
||||
axios "^0.21.1"
|
||||
|
||||
cjs-module-lexer@^0.6.0:
|
||||
version "0.6.0"
|
||||
@@ -13677,10 +13685,10 @@ gcs-resumable-upload@^1.0.0:
|
||||
pumpify "^1.5.1"
|
||||
stream-events "^1.0.4"
|
||||
|
||||
gcs-resumable-upload@^3.1.4:
|
||||
version "3.1.4"
|
||||
resolved "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.1.4.tgz#2e591889efb02247af26868de300b398346b17b5"
|
||||
integrity sha512-5dyDfHrrVcIskiw/cPssVD4HRiwoHjhk1Nd6h5W3pQ/qffDvhfy4oNCr1f3ZXFPwTnxkCbibsB+73oOM+NvmJQ==
|
||||
gcs-resumable-upload@^3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.3.0.tgz#d1a866173f9b47e045d4406cafaa658dbb01e624"
|
||||
integrity sha512-MQKWi+9hOSTyg5/SI1NBW4gAjL1wlkoevHefvr1PCBBXH4uKYLsug5qRrcotWKolDPLfWS51cWaHRN0CTtQNZw==
|
||||
dependencies:
|
||||
abort-controller "^3.0.0"
|
||||
configstore "^5.0.0"
|
||||
@@ -15098,6 +15106,11 @@ import-from@3.0.0, import-from@^3.0.0:
|
||||
dependencies:
|
||||
resolve-from "^5.0.0"
|
||||
|
||||
import-from@4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2"
|
||||
integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==
|
||||
|
||||
import-from@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
|
||||
@@ -22903,13 +22916,21 @@ ret@~0.1.10:
|
||||
resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
|
||||
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
|
||||
|
||||
retry-request@^4.0.0, retry-request@^4.1.1:
|
||||
retry-request@^4.0.0:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.npmjs.org/retry-request/-/retry-request-4.1.3.tgz#d5f74daf261372cff58d08b0a1979b4d7cab0fde"
|
||||
integrity sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
|
||||
retry-request@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz#b7d82210b6d2651ed249ba3497f07ea602f1a903"
|
||||
integrity sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
extend "^3.0.2"
|
||||
|
||||
retry@0.12.0, retry@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
|
||||
@@ -24737,10 +24758,10 @@ tar@^4, tar@^4.4.12, tar@^4.4.2:
|
||||
safe-buffer "^5.1.2"
|
||||
yallist "^3.0.3"
|
||||
|
||||
tar@^6.0.1, tar@^6.0.2, tar@^6.0.5, tar@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
|
||||
integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==
|
||||
tar@^6.0.2, tar@^6.1.0, tar@^6.1.2:
|
||||
version "6.1.2"
|
||||
resolved "https://registry.npmjs.org/tar/-/tar-6.1.2.tgz#1f045a90a6eb23557a603595f41a16c57d47adc6"
|
||||
integrity sha512-EwKEgqJ7nJoS+s8QfLYVGMDmAsj+StbI2AM/RTHeUSsOw6Z8bwNBRv5z3CY0m7laC5qUAqruLX5AhMuc5deY3Q==
|
||||
dependencies:
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.0.0"
|
||||
@@ -26633,15 +26654,15 @@ write-pkg@^4.0.0:
|
||||
type-fest "^0.4.1"
|
||||
write-json-file "^3.2.0"
|
||||
|
||||
ws@7.4.5:
|
||||
version "7.4.5"
|
||||
resolved "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1"
|
||||
integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==
|
||||
ws@7.4.5, ws@^7.4.6:
|
||||
version "7.5.3"
|
||||
resolved "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
|
||||
integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==
|
||||
|
||||
ws@^5.2.0:
|
||||
version "5.2.2"
|
||||
resolved "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
|
||||
integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
|
||||
version "5.2.3"
|
||||
resolved "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d"
|
||||
integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==
|
||||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
@@ -26651,9 +26672,9 @@ ws@^5.2.0:
|
||||
integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==
|
||||
|
||||
ws@^6.1.2, ws@^6.2.1:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
|
||||
integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
|
||||
version "6.2.2"
|
||||
resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
|
||||
integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
|
||||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user