diff --git a/docs/features/software-templates/installation.md b/docs/features/software-templates/installation.md
index 50c2fd303c..eea78e3571 100644
--- a/docs/features/software-templates/installation.md
+++ b/docs/features/software-templates/installation.md
@@ -177,9 +177,6 @@ docs on creating private GitHub access tokens is available
Note that the need for private GitHub access tokens will be replaced with GitHub
Apps integration further down the line.
-> **Right now it is only possible to scaffold repositories inside GitHub
-> organizations, and not under personal accounts.**
-
The GitHub access token is passed along using the `GITHUB_ACCESS_TOKEN`
environment variable.
diff --git a/docs/features/techdocs/creating-and-publishing.md b/docs/features/techdocs/creating-and-publishing.md
index 89df2fb18e..9d93eda9bc 100644
--- a/docs/features/techdocs/creating-and-publishing.md
+++ b/docs/features/techdocs/creating-and-publishing.md
@@ -30,11 +30,6 @@ the documentation template.
Create an entity from the documentation template and you will get the needed
setup for free.
-!!! warning Currently the Backstage Software Templates are limited to create
-repositories inside GitHub organizations. You also need to generate an personal
-access token and use as an environment variable. Read more about this
-[here](../software-templates/installation.md#runtime-dependencies).
-
### Manually add documentation setup to already existing repository
Prerequisities:
diff --git a/packages/core/src/components/ProgressBars/ProgressCard.stories.tsx b/packages/core/src/components/ProgressBars/GaugeCard.stories.tsx
similarity index 69%
rename from packages/core/src/components/ProgressBars/ProgressCard.stories.tsx
rename to packages/core/src/components/ProgressBars/GaugeCard.stories.tsx
index 62c9f3be6e..922bb63b2f 100644
--- a/packages/core/src/components/ProgressBars/ProgressCard.stories.tsx
+++ b/packages/core/src/components/ProgressBars/GaugeCard.stories.tsx
@@ -15,26 +15,26 @@
*/
import React from 'react';
-import { ProgressCard } from './ProgressCard';
+import { GaugeCard } from './GaugeCard';
import { Grid } from '@material-ui/core';
const linkInfo = { title: 'Go to XYZ Location', link: '#' };
export default {
title: 'Progress Card',
- component: ProgressCard,
+ component: GaugeCard,
};
export const Default = () => (
-
+
-
+
-
+
);
@@ -42,21 +42,17 @@ export const Default = () => (
export const Subhead = () => (
-
+
-
- (
export const LinkInFooter = () => (
-
+
-
+
-
+
);
diff --git a/packages/core/src/components/ProgressBars/ProgressCard.test.jsx b/packages/core/src/components/ProgressBars/GaugeCard.test.jsx
similarity index 75%
rename from packages/core/src/components/ProgressBars/ProgressCard.test.jsx
rename to packages/core/src/components/ProgressBars/GaugeCard.test.jsx
index 8568077a92..27ef0bb188 100644
--- a/packages/core/src/components/ProgressBars/ProgressCard.test.jsx
+++ b/packages/core/src/components/ProgressBars/GaugeCard.test.jsx
@@ -18,32 +18,30 @@ import React from 'react';
import { render } from '@testing-library/react';
import { wrapInTestApp } from '@backstage/test-utils';
-import { ProgressCard } from './ProgressCard';
+import { GaugeCard } from './GaugeCard';
const minProps = { title: 'Tingle upgrade', progress: 0.12 };
-describe('', () => {
+describe('', () => {
it('renders without exploding', () => {
- const { getByText } = render(wrapInTestApp());
+ const { getByText } = render(wrapInTestApp());
expect(getByText(/Tingle.*/)).toBeInTheDocument();
});
it('renders progress and title', () => {
- const { getByText } = render(wrapInTestApp());
+ const { getByText } = render(wrapInTestApp());
expect(getByText(/Tingle.*/)).toBeInTheDocument();
expect(getByText(/12%.*/)).toBeInTheDocument();
});
it('does not render deepLink', () => {
- const { queryByText } = render(
- wrapInTestApp(),
- );
+ const { queryByText } = render(wrapInTestApp());
expect(queryByText('View more')).not.toBeInTheDocument();
});
it('handles invalid numbers', () => {
const badProps = { title: 'Tingle upgrade', progress: 'hejjo' };
- const { getByText } = render(wrapInTestApp());
+ const { getByText } = render(wrapInTestApp());
expect(getByText(/N\/A.*/)).toBeInTheDocument();
});
});
diff --git a/packages/core/src/components/ProgressBars/ProgressCard.tsx b/packages/core/src/components/ProgressBars/GaugeCard.tsx
similarity index 90%
rename from packages/core/src/components/ProgressBars/ProgressCard.tsx
rename to packages/core/src/components/ProgressBars/GaugeCard.tsx
index eef6312600..fc7055f705 100644
--- a/packages/core/src/components/ProgressBars/ProgressCard.tsx
+++ b/packages/core/src/components/ProgressBars/GaugeCard.tsx
@@ -18,7 +18,7 @@ import React, { FC } from 'react';
import { makeStyles } from '@material-ui/core';
import { InfoCard } from '../../layout/InfoCard';
import { BottomLinkProps } from '../../layout/BottomLink';
-import { CircleProgress } from './CircleProgress';
+import { GaugeProgress } from './GaugeProgress';
type Props = {
title: string;
@@ -36,7 +36,7 @@ const useStyles = makeStyles({
},
});
-export const ProgressCard: FC = props => {
+export const GaugeCard: FC = props => {
const classes = useStyles(props);
const { title, subheader, progress, deepLink, variant } = props;
@@ -48,7 +48,7 @@ export const ProgressCard: FC = props => {
deepLink={deepLink}
variant={variant}
>
-
+
);
diff --git a/packages/core/src/components/ProgressBars/CircleProgress.test.jsx b/packages/core/src/components/ProgressBars/GaugeProgress.test.jsx
similarity index 82%
rename from packages/core/src/components/ProgressBars/CircleProgress.test.jsx
rename to packages/core/src/components/ProgressBars/GaugeProgress.test.jsx
index 9b9eae1bb8..778abdf12c 100644
--- a/packages/core/src/components/ProgressBars/CircleProgress.test.jsx
+++ b/packages/core/src/components/ProgressBars/GaugeProgress.test.jsx
@@ -17,32 +17,32 @@
import React from 'react';
import { render } from '@testing-library/react';
import { wrapInTestApp } from '@backstage/test-utils';
-import { CircleProgress, getProgressColor } from './CircleProgress';
+import { GaugeProgress, getProgressColor } from './GaugeProgress';
-describe('', () => {
+describe('', () => {
it('renders without exploding', () => {
const { getByText } = render(
- wrapInTestApp(),
+ wrapInTestApp(),
);
getByText('10%');
});
it('handles fractional prop', () => {
const { getByText } = render(
- wrapInTestApp(),
+ wrapInTestApp(),
);
getByText('10%');
});
it('handles max prop', () => {
const { getByText } = render(
- wrapInTestApp(),
+ wrapInTestApp(),
);
getByText('1%');
});
it('handles unit prop', () => {
const { getByText } = render(
- wrapInTestApp(),
+ wrapInTestApp(),
);
getByText('10m');
});
diff --git a/packages/core/src/components/ProgressBars/CircleProgress.tsx b/packages/core/src/components/ProgressBars/GaugeProgress.tsx
similarity index 98%
rename from packages/core/src/components/ProgressBars/CircleProgress.tsx
rename to packages/core/src/components/ProgressBars/GaugeProgress.tsx
index 79a451b14e..14776ed431 100644
--- a/packages/core/src/components/ProgressBars/CircleProgress.tsx
+++ b/packages/core/src/components/ProgressBars/GaugeProgress.tsx
@@ -77,7 +77,7 @@ export function getProgressColor(
return palette.status.ok;
}
-export const CircleProgress: FC = props => {
+export const GaugeProgress: FC = props => {
const classes = useStyles(props);
const theme = useTheme();
const { value, fractional, inverse, unit, max } = {
diff --git a/packages/core/src/components/ProgressBars/HorizontalProgress.stories.tsx b/packages/core/src/components/ProgressBars/LinearGauge.stories.tsx
similarity index 79%
rename from packages/core/src/components/ProgressBars/HorizontalProgress.stories.tsx
rename to packages/core/src/components/ProgressBars/LinearGauge.stories.tsx
index 6e8f4ed7fd..c4492986b6 100644
--- a/packages/core/src/components/ProgressBars/HorizontalProgress.stories.tsx
+++ b/packages/core/src/components/ProgressBars/LinearGauge.stories.tsx
@@ -15,29 +15,29 @@
*/
import React from 'react';
-import { HorizontalProgress } from './HorizontalProgress';
+import { LinearGauge } from './LinearGauge';
const containerStyle = { width: 300 };
export default {
- title: 'HorizontalProgress',
- component: HorizontalProgress,
+ title: 'LinearGauge',
+ component: LinearGauge,
};
export const Default = () => (
-
+
);
export const MediumProgress = () => (
-
+
);
export const LowProgress = () => (
-
+
);
diff --git a/packages/core/src/components/ProgressBars/HorizontalProgress.tsx b/packages/core/src/components/ProgressBars/LinearGauge.tsx
similarity index 92%
rename from packages/core/src/components/ProgressBars/HorizontalProgress.tsx
rename to packages/core/src/components/ProgressBars/LinearGauge.tsx
index 72bf1f34c3..73163b345f 100644
--- a/packages/core/src/components/ProgressBars/HorizontalProgress.tsx
+++ b/packages/core/src/components/ProgressBars/LinearGauge.tsx
@@ -19,7 +19,7 @@ import { Tooltip, useTheme } from '@material-ui/core';
// @ts-ignore
import { Line } from 'rc-progress';
import { BackstageTheme } from '@backstage/theme';
-import { getProgressColor } from './CircleProgress';
+import { getProgressColor } from './GaugeProgress';
type Props = {
/**
@@ -28,7 +28,7 @@ type Props = {
value: number;
};
-export const HorizontalProgress: FC = ({ value }) => {
+export const LinearGauge: FC = ({ value }) => {
const theme = useTheme();
if (isNaN(value)) {
return null;
diff --git a/packages/core/src/components/ProgressBars/index.ts b/packages/core/src/components/ProgressBars/index.ts
index c74e283ae6..c7131c8831 100644
--- a/packages/core/src/components/ProgressBars/index.ts
+++ b/packages/core/src/components/ProgressBars/index.ts
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-export { ProgressCard } from './ProgressCard';
-export { CircleProgress } from './CircleProgress';
-export { HorizontalProgress } from './HorizontalProgress';
+export { GaugeCard } from './GaugeCard';
+export { GaugeProgress } from './GaugeProgress';
+export { LinearGauge } from './LinearGauge';
diff --git a/packages/core/src/layout/Page/Page.stories.tsx b/packages/core/src/layout/Page/Page.stories.tsx
index 0b91875546..8fd779196d 100644
--- a/packages/core/src/layout/Page/Page.stories.tsx
+++ b/packages/core/src/layout/Page/Page.stories.tsx
@@ -30,7 +30,7 @@ import {
Table,
StatusOK,
TableColumn,
- ProgressCard,
+ GaugeCard,
TrendLine,
} from '../../components';
import { Box, Typography, Link, Chip, Grid } from '@material-ui/core';
@@ -120,14 +120,14 @@ const DataGrid = () => (
direction="row"
>
-
- /opt/plantuml.jar
-RUN pip install --upgrade pip && pip install mkdocs-techdocs-core==0.0.4
+RUN pip install --upgrade pip && pip install mkdocs-techdocs-core==0.0.6
# Create script to call plantuml.jar from a location in path
diff --git a/packages/techdocs-container/techdocs-core/README.md b/packages/techdocs-container/techdocs-core/README.md
index a4afed0158..94123f52ee 100644
--- a/packages/techdocs-container/techdocs-core/README.md
+++ b/packages/techdocs-container/techdocs-core/README.md
@@ -50,6 +50,10 @@ python -m black src/
## Changelog
+### 0.0.5
+
+- Downgrade some versions of markdown extensions to versions that are more stable
+
### 0.0.4
- Added support for more mkdocs extensions
diff --git a/packages/techdocs-container/techdocs-core/requirements.txt b/packages/techdocs-container/techdocs-core/requirements.txt
index 4037a174ea..36daaab4d7 100644
--- a/packages/techdocs-container/techdocs-core/requirements.txt
+++ b/packages/techdocs-container/techdocs-core/requirements.txt
@@ -4,10 +4,10 @@
mkdocs==1.1.2
mkdocs-material==5.3.2
mkdocs-monorepo-plugin==0.4.5
-plantuml-markdown==3.4.0
+plantuml-markdown==3.1.2
markdown_inline_graphviz_extension==1.1
pygments==2.6.1
-pymdown-extensions==7.1
+pymdown-extensions==8.0.0
# The linter using for Python
# Note: This requires Python 3.6+ to run, but can format Python 2 code too.
diff --git a/packages/techdocs-container/techdocs-core/setup.py b/packages/techdocs-container/techdocs-core/setup.py
index 72593dc433..4b80fe2a6f 100644
--- a/packages/techdocs-container/techdocs-core/setup.py
+++ b/packages/techdocs-container/techdocs-core/setup.py
@@ -18,7 +18,7 @@ from setuptools import setup, find_packages
setup(
name='mkdocs-techdocs-core',
- version='0.0.4',
+ version='0.0.6',
description='A Mkdocs package that contains TechDocs defaults',
long_description='',
keywords='mkdocs',
@@ -31,10 +31,10 @@ setup(
'mkdocs>=1.1.2',
'mkdocs-material==5.3.2',
'mkdocs-monorepo-plugin==0.4.5',
- 'plantuml-markdown==3.4.0',
+ 'plantuml-markdown==3.1.2',
'markdown_inline_graphviz_extension==1.1',
'pygments==2.6.1',
- 'pymdown-extensions==7.1'
+ 'pymdown-extensions==8.0.0'
],
classifiers=[
'Development Status :: 1 - Planning',
diff --git a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts
index 85bed3a223..a302bc5931 100644
--- a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts
@@ -19,6 +19,9 @@ export const mockGithubClient = {
createInOrg: jest.fn(),
createForAuthenticatedUser: jest.fn(),
},
+ users: {
+ getByUsername: jest.fn(),
+ },
};
export class Octokit {
diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts
index 93493ab2cc..718c01438c 100644
--- a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts
@@ -19,11 +19,18 @@ jest.mock('nodegit');
import { Octokit } from '@octokit/rest';
import * as NodeGit from 'nodegit';
-import { OctokitResponse, ReposCreateInOrgResponseData } from '@octokit/types';
+import {
+ OctokitResponse,
+ ReposCreateInOrgResponseData,
+ UsersGetByUsernameResponseData,
+} from '@octokit/types';
import { GithubPublisher } from './github';
const { mockGithubClient } = require('@octokit/rest') as {
- mockGithubClient: { repos: jest.Mocked };
+ mockGithubClient: {
+ repos: jest.Mocked;
+ users: jest.Mocked;
+ };
};
const {
@@ -59,10 +66,14 @@ describe('GitHub Publisher', () => {
clone_url: 'mockclone',
},
} as OctokitResponse);
+ mockGithubClient.users.getByUsername.mockResolvedValue({
+ data: {
+ type: 'Organization',
+ },
+ } as OctokitResponse);
await publisher.publish({
values: {
- isOrg: true,
storePath: 'blam/test',
owner: 'bob',
},
@@ -81,6 +92,11 @@ describe('GitHub Publisher', () => {
clone_url: 'mockclone',
},
} as OctokitResponse);
+ mockGithubClient.users.getByUsername.mockResolvedValue({
+ data: {
+ type: 'User',
+ },
+ } as OctokitResponse);
await publisher.publish({
values: {
@@ -112,6 +128,12 @@ describe('GitHub Publisher', () => {
clone_url: 'mockclone',
},
} as OctokitResponse);
+ mockGithubClient.users.getByUsername.mockResolvedValue({
+ data: {
+ type: 'Organization',
+ },
+ } as OctokitResponse);
+
it('should call init on the repo with the directory', async () => {
await publisher.publish({
values,
diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts
index 5fd64d69fc..f3306e3662 100644
--- a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts
@@ -45,9 +45,12 @@ export class GithubPublisher implements PublisherBase {
) {
const [owner, name] = values.storePath.split('/');
- const repoCreationPromise = values.isOrg
- ? this.client.repos.createInOrg({ name, org: owner })
- : this.client.repos.createForAuthenticatedUser({ name });
+ const user = await this.client.users.getByUsername({ username: owner });
+
+ const repoCreationPromise =
+ user.data.type === 'Organization'
+ ? this.client.repos.createInOrg({ name, org: owner })
+ : this.client.repos.createForAuthenticatedUser({ name });
const { data } = await repoCreationPromise;
diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts
index cc69ed7627..f58c8e68d1 100644
--- a/plugins/scaffolder/src/api.ts
+++ b/plugins/scaffolder/src/api.ts
@@ -46,8 +46,7 @@ export class ScaffolderApi {
headers: {
'Content-Type': 'application/json',
},
- // TODO(shmidt-i): when repo picker is implemented, take isOrg from it
- body: JSON.stringify({ template, values: { ...values, isOrg: true } }),
+ body: JSON.stringify({ template, values: { ...values } }),
});
if (response.status !== 201) {
diff --git a/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx b/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx
index 102e93f91d..87b70a9553 100644
--- a/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx
+++ b/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx
@@ -72,7 +72,7 @@ export const JobStatusModal = ({
{entity && (