-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add support for GitHub Actions (#62)
* feat: add support for GitHub Actions Power by OIDC exclusively instead of using log based proof. OIDC is the Cool Thing that didn't exist when CFA was originally written, relying on it for the GHA implementation makes sense. * chore: run prettier * chore: add helpful logging * logging * Revert "logging" This reverts commit 8dd7f39. * booleans are hard * set npm_token if we have it * tada * chore: run prettier
- Loading branch information
1 parent
dbaa7fa
commit 63893af
Showing
29 changed files
with
764 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
112 changes: 112 additions & 0 deletions
112
src/client/components/configurators/GitHubActionsRequesterConfig.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
import * as React from 'react'; | ||
import { Alert, Button, Code, Heading, Pane, Paragraph, toaster } from 'evergreen-ui'; | ||
|
||
import { FullProject } from '../../../common/types'; | ||
import { useAsyncTaskFetch } from 'react-hooks-async'; | ||
import { defaultBodyReader } from '../../utils'; | ||
|
||
export interface Props { | ||
project: FullProject; | ||
setProject: (newProject: FullProject) => void; | ||
} | ||
|
||
export function GitHubActionsRequesterConfig({ project, setProject }: Props) { | ||
const [showInstallButton, setShowInstallButton] = React.useState(false); | ||
const options = React.useMemo( | ||
() => ({ | ||
method: 'POST', | ||
headers: new Headers({ | ||
'Content-Type': 'application/json', | ||
}), | ||
body: JSON.stringify({}), | ||
}), | ||
[project], | ||
); | ||
|
||
const installGitHubApp = React.useCallback(() => { | ||
window.open('https://github.com/apps/continuous-auth/installations/new', '_blank'); | ||
setShowInstallButton(false); | ||
}, []); | ||
|
||
const createRequesterTask = useAsyncTaskFetch<FullProject>( | ||
`/api/project/${project.id}/config/requesters/github`, | ||
options, | ||
defaultBodyReader, | ||
); | ||
|
||
const projectSlug = `${project.repoOwner}/${project.repoName}`; | ||
|
||
React.useEffect(() => { | ||
if (createRequesterTask.error) { | ||
if (createRequesterTask.error.message.includes('412')) { | ||
toaster.notify(`Continuous Auth not installed in ${projectSlug}`); | ||
setShowInstallButton(true); | ||
} else { | ||
toaster.danger(`Failed to create the GitHub Requester, please try again later.`); | ||
} | ||
} | ||
}, [createRequesterTask.error, projectSlug]); | ||
|
||
React.useEffect(() => { | ||
if (createRequesterTask.result) { | ||
toaster.success(`Successfully created the GitHub Requester.`); | ||
setProject(createRequesterTask.result); | ||
} | ||
}, [createRequesterTask.result]); | ||
|
||
const saving = createRequesterTask.started && createRequesterTask.pending; | ||
|
||
return ( | ||
<Pane> | ||
<Pane> | ||
<Heading size={400} marginBottom={8}> | ||
GitHub Actions Secrets | ||
</Heading> | ||
{showInstallButton ? ( | ||
<> | ||
<Alert marginBottom={4} intent="warning"> | ||
You need to install the Continuous Auth github app before we can set this project up. | ||
<br /> | ||
<Button marginTop={12} onClick={installGitHubApp}> | ||
Install | ||
</Button> | ||
</Alert> | ||
</> | ||
) : null} | ||
{project.requester_gitHub ? ( | ||
<> | ||
<Paragraph marginBottom={4}> | ||
ContinuousAuth is fully set up, if you're having issues with secrets you can use the | ||
"Fix" button below. | ||
</Paragraph> | ||
<Button | ||
appearance="default" | ||
marginLeft={8} | ||
isLoading={saving} | ||
disabled={showInstallButton} | ||
onClick={() => createRequesterTask.start()} | ||
> | ||
Fix GitHub Actions for {project.repoOwner}/{project.repoName} | ||
</Button> | ||
</> | ||
) : ( | ||
<> | ||
<Paragraph marginBottom={4}> | ||
ContinuousAuth needs to make some secrets in GitHub Actions in order to publish. | ||
</Paragraph> | ||
<Button | ||
appearance="primary" | ||
intent="success" | ||
marginLeft={8} | ||
isLoading={saving} | ||
disabled={showInstallButton} | ||
onClick={() => createRequesterTask.start()} | ||
> | ||
Use GitHub Actions for {project.repoOwner}/{project.repoName} | ||
</Button> | ||
</> | ||
)} | ||
</Pane> | ||
</Pane> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import * as React from 'react'; | ||
|
||
import { Props } from './icon-props'; | ||
|
||
export function GitHubLogo(props: Props) { | ||
return ( | ||
<svg {...props} viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"> | ||
<path | ||
fillRule="evenodd" | ||
clipRule="evenodd" | ||
d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" | ||
transform="scale(64)" | ||
fill="#1B1F23" | ||
/> | ||
</svg> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import * as React from 'react'; | ||
import { shallow } from 'enzyme'; | ||
import { GitHubLogo } from '../GitHub'; | ||
|
||
describe('GitHubLogo Icon', () => { | ||
it('Should render with a className', () => { | ||
const wrapper = shallow(<GitHubLogo className="test_class_name" />); | ||
expect(wrapper).toMatchSnapshot(); | ||
expect(wrapper.prop('className')).toBe('test_class_name'); | ||
}); | ||
}); |
18 changes: 18 additions & 0 deletions
18
src/client/components/icons/__tests__/__snapshots__/GitHub.spec.tsx.snap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`GitHubLogo Icon Should render with a className 1`] = ` | ||
<svg | ||
className="test_class_name" | ||
fill="none" | ||
viewBox="0 0 1024 1024" | ||
xmlns="http://www.w3.org/2000/svg" | ||
> | ||
<path | ||
clipRule="evenodd" | ||
d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" | ||
fill="#1B1F23" | ||
fillRule="evenodd" | ||
transform="scale(64)" | ||
/> | ||
</svg> | ||
`; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.