Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add ability to use GitHub OIDC #161

Merged
merged 40 commits into from
Sep 9, 2024
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
f857b96
remove NoUploadTokenError
nicholas-codecov Aug 8, 2024
fce4c39
update getPreSignedURL to remove requirement for uploadToken
nicholas-codecov Aug 8, 2024
2dcffd2
add back no upload token error and new undefined git service error
nicholas-codecov Aug 9, 2024
e41ab7a
update getPreSignedURL to support tokenless uploads
nicholas-codecov Aug 9, 2024
72fa17b
add tokenless examples to readme's
nicholas-codecov Aug 19, 2024
5852a14
update readme examples
nicholas-codecov Aug 21, 2024
15e62a1
update readme copy
nicholas-codecov Aug 26, 2024
d6b01ea
remove tokenless example, as it only works with forks
nicholas-codecov Aug 27, 2024
6144474
update readme with new examples
nicholas-codecov Aug 27, 2024
0e201d3
add in tokenless example
nicholas-codecov Aug 27, 2024
925d17b
add in OIDC config object
nicholas-codecov Aug 27, 2024
c99080f
add in @actions/core package
nicholas-codecov Aug 27, 2024
2f05934
add in new errors for OIDC related errors
nicholas-codecov Aug 27, 2024
9b4e777
fix msw mock in index.test.ts
nicholas-codecov Aug 27, 2024
cee9ade
update getPreSignedURL to support OIDC uploads
nicholas-codecov Aug 27, 2024
56ac030
update Output to store oidc values and pass this to getPreSignedURL
nicholas-codecov Aug 27, 2024
0bb170f
add in example oidc app
nicholas-codecov Aug 28, 2024
369a83c
update lock file with new example
nicholas-codecov Aug 28, 2024
b5236a4
add in quotes to make url more apparent
nicholas-codecov Aug 28, 2024
513a739
testing with id-token permission
nicholas-codecov Aug 28, 2024
63ac370
add in example for GH OIDC
nicholas-codecov Sep 3, 2024
9579a4a
add in changeset
nicholas-codecov Sep 3, 2024
bb4e1e9
remove redundent tokens from ci
nicholas-codecov Sep 5, 2024
dc26415
remove reassignment of url
nicholas-codecov Sep 5, 2024
9230d80
rename ODICEndpoint to be github audience
nicholas-codecov Sep 5, 2024
576935e
swap from positive to nonegative to allow >= 0
nicholas-codecov Sep 5, 2024
42e41c7
add Error to failed oidc fetch error
nicholas-codecov Sep 5, 2024
0decbe8
remove redundent assignment
nicholas-codecov Sep 5, 2024
afba80c
remove url requirement for GH OIDC auidence
nicholas-codecov Sep 5, 2024
15b9993
tidy up some types descriptions
nicholas-codecov Sep 5, 2024
4c1c0ae
revert back to providing various args to getPreSignedURL
nicholas-codecov Sep 5, 2024
bea9450
some more tidying up of docstrings
nicholas-codecov Sep 5, 2024
6240c34
fixing some small typos in the readme's
nicholas-codecov Sep 5, 2024
13dc764
move default retry count to fetch with retry implementation
nicholas-codecov Sep 5, 2024
2fd70cd
small typo suggestion
nicholas-codecov Sep 5, 2024
b53eb74
yea retry count does need to be more than 0
nicholas-codecov Sep 5, 2024
15c92a4
Merge branch 'main' into gh-eng-2209-add-ability-to-use-github-oidc
nicholas-codecov Sep 6, 2024
c181de6
bump from ES2021 to ES2022
nicholas-codecov Sep 9, 2024
f945dad
update custom errors to accept error options
nicholas-codecov Sep 9, 2024
d3aa674
add cause to thrown errors
nicholas-codecov Sep 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .changeset/lucky-seals-admire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
"@codecov/nextjs-webpack-plugin": minor
"@codecov/bundler-plugin-core": minor
"@codecov/remix-vite-plugin": minor
"@codecov/solidstart-plugin": minor
"@codecov/sveltekit-plugin": minor
"@codecov/webpack-plugin": minor
"@codecov/rollup-plugin": minor
"@codecov/nuxt-plugin": minor
"@codecov/vite-plugin": minor
---

Add the ability for users to use GH OIDC instead of explicit upload tokens
9 changes: 9 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

permissions:
id-token: write

jobs:
install:
name: Install deps
Expand Down Expand Up @@ -284,6 +287,7 @@ jobs:
"next-js",
"next-js-15",
"nuxt",
"oidc",
"remix",
"rollup",
"sveltekit",
Expand Down Expand Up @@ -343,6 +347,8 @@ jobs:
NEXT_API_URL: ${{ secrets.CODECOV_API_URL }}
NUXT_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
NUXT_API_URL: ${{ secrets.CODECOV_API_URL }}
OIDC_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
nicholas-codecov marked this conversation as resolved.
Show resolved Hide resolved
OIDC_API_URL: ${{ secrets.CODECOV_API_URL }}
REMIX_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
REMIX_API_URL: ${{ secrets.CODECOV_API_URL }}
ROLLUP_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
Expand Down Expand Up @@ -371,6 +377,7 @@ jobs:
"next-js",
"next-js-15",
"nuxt",
"oidc",
"remix",
"rollup",
"sveltekit",
Expand Down Expand Up @@ -430,6 +437,8 @@ jobs:
NEXT_API_URL: ${{ secrets.CODECOV_STAGING_API_URL }}
NUXT_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
NUXT_API_URL: ${{ secrets.CODECOV_API_URL }}
OIDC_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
nicholas-codecov marked this conversation as resolved.
Show resolved Hide resolved
OIDC_API_URL: ${{ secrets.CODECOV_API_URL }}
REMIX_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
REMIX_API_URL: ${{ secrets.CODECOV_API_URL }}
ROLLUP_UPLOAD_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN_STAGING }}
Expand Down
18 changes: 18 additions & 0 deletions examples/oidc/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module.exports = {
root: true,
env: { browser: true, es2020: true },
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react-hooks/recommended',
],
ignorePatterns: ['dist', '.eslintrc.cjs'],
parser: '@typescript-eslint/parser',
plugins: ['react-refresh'],
rules: {
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
}
24 changes: 24 additions & 0 deletions examples/oidc/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
27 changes: 27 additions & 0 deletions examples/oidc/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh

## Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:

- Configure the top-level `parserOptions` property like this:

```js
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: ['./tsconfig.json', './tsconfig.node.json'],
tsconfigRootDir: __dirname,
},
```

- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
13 changes: 13 additions & 0 deletions examples/oidc/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React + TS</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
36 changes: 36 additions & 0 deletions examples/oidc/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"name": "@codecov/example-oidc-app",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@codecov/vite-plugin": "workspace:^",
"@types/react": "^18.2.51",
"@types/react-dom": "^18.2.18",
"@typescript-eslint/eslint-plugin": "^6.20.0",
"@typescript-eslint/parser": "^6.20.0",
"@vitejs/plugin-react": "^4.2.1",
"eslint": "^8.56.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.5",
"rollup": "^4.9.6",
"typescript": "^5.3.3",
"vite": "^5.2.10"
},
"volta": {
"extends": "../../package.json"
},
"engines": {
"node": ">=18.0.0"
}
}
1 change: 1 addition & 0 deletions examples/oidc/public/vite.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions examples/oidc/src/App.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#root {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}

.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.react:hover {
filter: drop-shadow(0 0 2em #61dafbaa);
}

@keyframes logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

@media (prefers-reduced-motion: no-preference) {
a:nth-of-type(2) .logo {
animation: logo-spin infinite 20s linear;
}
}

.card {
padding: 2em;
}

.read-the-docs {
color: #888;
}
44 changes: 44 additions & 0 deletions examples/oidc/src/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { useState, lazy, Suspense } from "react";
import reactLogo from "./assets/react.svg";
import viteLogo from "/vite.svg";
import "./App.css";

const IndexedLazyComponent = lazy(() => import("./IndexedLazyComponent"));
const LazyComponent = lazy(() => import("./LazyComponent/LazyComponent"));

function App() {
const [count, setCount] = useState(0);

return (
<>
<div>
<a href="https://vitejs.dev" target="_blank">
<img src={viteLogo} className="logo" alt="Vite logo" />
</a>
<a href="https://react.dev" target="_blank">
<img src={reactLogo} className="logo react" alt="React logo" />
</a>
</div>
<h1>Vite + React</h1>
<div className="card">
<button onClick={() => setCount((count) => count + 1)}>
count is {count}
</button>
<p>
Edit <code>src/App.tsx</code> and save to test HMR
</p>
</div>
<p className="read-the-docs">
Click on the Vite and React logos to learn more
</p>
<Suspense fallback={null}>
<IndexedLazyComponent />
</Suspense>
<Suspense fallback={null}>
<LazyComponent />
</Suspense>
</>
);
}

export default App;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default function IndexedLazyComponent() {
return (
<div>
<h1>Indexed Lazy Component</h1>
</div>
);
}
1 change: 1 addition & 0 deletions examples/oidc/src/IndexedLazyComponent/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from "./IndexedLazyComponent";
14 changes: 14 additions & 0 deletions examples/oidc/src/LazyComponent/LazyComponent.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { lazy, Suspense } from "react";

const IndexedLazyComponent = lazy(() => import("../IndexedLazyComponent"));

export default function LazyComponent() {
return (
<div>
<h1>Lazy Component</h1>
<Suspense fallback={null}>
<IndexedLazyComponent />
</Suspense>
</div>
);
}
1 change: 1 addition & 0 deletions examples/oidc/src/assets/react.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
69 changes: 69 additions & 0 deletions examples/oidc/src/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;

color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;

font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-text-size-adjust: 100%;
}

a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}

body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}

h1 {
font-size: 3.2em;
line-height: 1.1;
}

button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}

@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}
10 changes: 10 additions & 0 deletions examples/oidc/src/main.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App.tsx";
import "./index.css";

ReactDOM.createRoot(document.getElementById("root")!).render(
<React.StrictMode>
<App />
</React.StrictMode>,
);
1 change: 1 addition & 0 deletions examples/oidc/src/vite-env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/// <reference types="vite/client" />
Loading
Loading