Skip to content

chore: upgrade biome to v2 #19362

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

Merged
merged 3 commits into from
Aug 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .github/workflows/typos.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ HELO = "HELO"
LKE = "LKE"
byt = "byt"
typ = "typ"
Inferrable = "Inferrable"

[files]
extend-exclude = [
Expand All @@ -47,5 +48,5 @@ extend-exclude = [
"provisioner/terraform/testdata/**",
# notifications' golden files confuse the detector because of quoted-printable encoding
"coderd/notifications/testdata/**",
"agent/agentcontainers/testdata/devcontainercli/**"
"agent/agentcontainers/testdata/devcontainercli/**",
]
6 changes: 4 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
"[javascript][javascriptreact][json][jsonc][typescript][typescriptreact]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit"
"source.fixAll.biome": "explicit"
// "source.organizeImports.biome": "explicit"
}
},
Expand All @@ -60,5 +60,7 @@
"typos.config": ".github/workflows/typos.toml",
"[markdown]": {
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
}
},
"biome.configurationPath": "./site/biome.jsonc",
"biome.lsp.bin": "./site/node_modules/.bin/biome"
}
2 changes: 1 addition & 1 deletion site/.storybook/preview.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import CssBaseline from "@mui/material/CssBaseline";
import {
ThemeProvider as MuiThemeProvider,
StyledEngineProvider,
// biome-ignore lint/nursery/noRestrictedImports: we extend the MUI theme
// biome-ignore lint/style/noRestrictedImports: we extend the MUI theme
} from "@mui/material/styles";
import { DecoratorHelpers } from "@storybook/addon-themes";
import isChromatic from "chromatic/isChromatic";
Expand Down
58 changes: 40 additions & 18 deletions site/biome.jsonc
Original file line number Diff line number Diff line change
@@ -1,36 +1,44 @@
{
"vcs": {
"enabled": true,
"useIgnoreFile": true,
"clientKind": "git",
"root": ".."
},
"files": {
"ignore": ["e2e/**/*Generated.ts", "pnpm-lock.yaml"],
"includes": ["**", "!**/e2e/**/*Generated.ts", "!**/pnpm-lock.yaml"],
"ignoreUnknown": true
},
"linter": {
"rules": {
"a11y": {
"noSvgWithoutTitle": { "level": "off" },
"useButtonType": { "level": "off" },
"useSemanticElements": { "level": "off" }
"noSvgWithoutTitle": "off",
"useButtonType": "off",
"useSemanticElements": "off",
"noStaticElementInteractions": "off"
},
"correctness": {
"noUnusedImports": "warn"
"noUnusedImports": "warn",
"useUniqueElementIds": "off", // TODO: This is new but we want to fix it
"noNestedComponentDefinitions": "off", // TODO: Investigate, since it is used by shadcn components
"noUnusedVariables": {
"level": "warn",
"options": {
"ignoreRestSiblings": true
}
}
},
"style": {
"noNonNullAssertion": { "level": "off" },
"noParameterAssign": { "level": "off" },
"useDefaultParameterLast": { "level": "off" },
"useSelfClosingElements": { "level": "off" }
},
"suspicious": {
"noArrayIndexKey": { "level": "off" },
"noConsoleLog": { "level": "error" },
"noThenProperty": { "level": "off" }
},
"nursery": {
"noNonNullAssertion": "off",
"noParameterAssign": "off",
"useDefaultParameterLast": "off",
"useSelfClosingElements": "off",
"useAsConstAssertion": "error",
"useEnumInitializers": "error",
"useSingleVarDeclarator": "error",
"noUnusedTemplateLiteral": "error",
"useNumberNamespace": "error",
"noInferrableTypes": "error",
"noUselessElse": "error",
"noRestrictedImports": {
"level": "error",
"options": {
Expand All @@ -47,8 +55,22 @@
}
}
}
},
"suspicious": {
"noArrayIndexKey": "off",
"noThenProperty": "off",
"noTemplateCurlyInString": "off",
"useIterableCallbackReturn": "off",
"noUnknownAtRules": "off", // Allow Tailwind directives
"noConsole": {
"level": "error",
"options": { "allow": ["error", "info", "warn"] }
}
},
"complexity": {
"noImportantStyles": "off" // TODO: check and fix !important styles
}
}
},
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json"
"$schema": "https://biomejs.dev/schemas/2.2.0/schema.json"
}
5 changes: 3 additions & 2 deletions site/e2e/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ import relativeTime from "dayjs/plugin/relativeTime";

dayjs.extend(duration);
dayjs.extend(relativeTime);

import { humanDuration } from "utils/time";
import { coderPort, defaultPassword } from "./constants";
import { type LoginOptions, findSessionToken, randomName } from "./helpers";
import { findSessionToken, type LoginOptions, randomName } from "./helpers";

let currentOrgId: string;

Expand Down Expand Up @@ -57,7 +58,7 @@ export const createOrganizationMember = async ({
password = defaultPassword,
orgRoles,
}: CreateOrganizationMemberOptions): Promise<LoginOptions> => {
const name = randomName();
const _name = randomName();
const user = await API.createUser({
email,
username,
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/expectUrl.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type Page, expect } from "@playwright/test";
import { expect, type Page } from "@playwright/test";

type PollingOptions = { timeout?: number; intervals?: number[] };

Expand Down
4 changes: 2 additions & 2 deletions site/e2e/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { randomUUID } from "node:crypto";
import net from "node:net";
import path from "node:path";
import { Duplex } from "node:stream";
import { type BrowserContext, type Page, expect, test } from "@playwright/test";
import { type BrowserContext, expect, type Page, test } from "@playwright/test";
import { API } from "api/api";
import type {
UpdateTemplateMeta,
Expand All @@ -29,8 +29,8 @@ import { expectUrl } from "./expectUrl";
import {
Agent,
type App,
AppSharingLevel,
type ApplyComplete,
AppSharingLevel,
type ExternalAuthProviderResource,
type ParseComplete,
type PlanComplete,
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/playwright.config.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as path from "node:path";
import { defineConfig } from "@playwright/test";
import {
coderPort,
coderdPProfPort,
coderPort,
e2eFakeExperiment1,
e2eFakeExperiment2,
gitAuth,
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/app.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ test("app", async ({ context, page }) => {
const appContent = "Hello World";
const token = randomUUID();
const srv = http
.createServer((req, res) => {
.createServer((_req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end(appContent);
})
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/auditLogs.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type Page, expect, test } from "@playwright/test";
import { expect, type Page, test } from "@playwright/test";
import { defaultPassword, users } from "../constants";
import {
createTemplate,
Expand Down
5 changes: 2 additions & 3 deletions site/e2e/tests/deployment/workspaceProxies.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { type Page, expect, test } from "@playwright/test";
import { expect, type Page, test } from "@playwright/test";
import { API } from "api/api";
import { setupApiCalls } from "../../api";
import { coderPort, workspaceProxyPort } from "../../constants";
import { randomName, requiresLicense } from "../../helpers";
import { login } from "../../helpers";
import { login, randomName, requiresLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks";
import { startWorkspaceProxy, stopWorkspaceProxy } from "../../proxy";

Expand Down
12 changes: 6 additions & 6 deletions site/e2e/tests/externalAuth.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ test.describe.skip("externalAuth", () => {
const srv = await createServer(gitAuth.webPort);

// The GitHub validate endpoint returns the currently authenticated user!
srv.use(gitAuth.validatePath, (req, res) => {
srv.use(gitAuth.validatePath, (_req, res) => {
res.write(JSON.stringify(ghUser));
res.end();
});
srv.use(gitAuth.tokenPath, (req, res) => {
srv.use(gitAuth.tokenPath, (_req, res) => {
const r = (Math.random() + 1).toString(36).substring(7);
res.write(JSON.stringify({ access_token: r }));
res.end();
Expand Down Expand Up @@ -51,15 +51,15 @@ test.describe.skip("externalAuth", () => {

// Start a server to mock the GitHub API.
const srv = await createServer(gitAuth.devicePort);
srv.use(gitAuth.validatePath, (req, res) => {
srv.use(gitAuth.validatePath, (_req, res) => {
res.write(JSON.stringify(ghUser));
res.end();
});
srv.use(gitAuth.codePath, (req, res) => {
srv.use(gitAuth.codePath, (_req, res) => {
res.write(JSON.stringify(device));
res.end();
});
srv.use(gitAuth.installationsPath, (req, res) => {
srv.use(gitAuth.installationsPath, (_req, res) => {
res.write(JSON.stringify(ghInstall));
res.end();
});
Expand All @@ -72,7 +72,7 @@ test.describe.skip("externalAuth", () => {
// First we send a result from the API that the token hasn't been
// authorized yet to ensure the UI reacts properly.
const sentPending = new Awaiter();
srv.use(gitAuth.tokenPath, (req, res) => {
srv.use(gitAuth.tokenPath, (_req, res) => {
res.write(JSON.stringify(token));
res.end();
sentPending.done();
Expand Down
3 changes: 1 addition & 2 deletions site/e2e/tests/organizations/idpGroupSync.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ import {
deleteOrganization,
setupApiCalls,
} from "../../api";
import { randomName, requiresLicense } from "../../helpers";
import { login } from "../../helpers";
import { login, randomName, requiresLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks";

test.beforeEach(async ({ page }) => {
Expand Down
3 changes: 1 addition & 2 deletions site/e2e/tests/organizations/idpRoleSync.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ import {
deleteOrganization,
setupApiCalls,
} from "../../api";
import { randomName, requiresLicense } from "../../helpers";
import { login } from "../../helpers";
import { login, randomName, requiresLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks";

test.beforeEach(async ({ page }) => {
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/roles.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type Page, expect, test } from "@playwright/test";
import { expect, type Page, test } from "@playwright/test";
import {
createOrganization,
createOrganizationMember,
Expand Down
3 changes: 1 addition & 2 deletions site/e2e/tests/users/createUserWithPassword.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { test } from "@playwright/test";
import { createUser } from "../../helpers";
import { login } from "../../helpers";
import { createUser, login } from "../../helpers";
import { beforeCoderTest } from "../../hooks";

test.beforeEach(async ({ page }) => {
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/webTerminal.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import { test } from "@playwright/test";
import {
createTemplate,
createWorkspace,
login,
openTerminalWindow,
startAgent,
stopAgent,
} from "../helpers";
import { login } from "../helpers";
import { beforeCoderTest } from "../hooks";

test.beforeEach(async ({ page }) => {
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/workspaces/autoCreateWorkspace.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import {
createTemplate,
createWorkspace,
echoResponsesWithParameters,
login,
} from "../../helpers";
import { login } from "../../helpers";
import { beforeCoderTest } from "../../hooks";
import { emptyParameter } from "../../parameters";
import type { RichParameter } from "../../provisionerGenerated";
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/workspaces/createWorkspace.spec.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { expect, test } from "@playwright/test";
import { users } from "../../constants";
import {
StarterTemplates,
createTemplate,
createWorkspace,
disableDynamicParameters,
echoResponsesWithParameters,
login,
openTerminalWindow,
requireTerraformProvisioner,
StarterTemplates,
verifyParameters,
} from "../../helpers";
import { beforeCoderTest } from "../../hooks";
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/workspaces/restartWorkspace.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import {
createWorkspace,
disableDynamicParameters,
echoResponsesWithParameters,
login,
verifyParameters,
} from "../../helpers";
import { login } from "../../helpers";
import { beforeCoderTest } from "../../hooks";
import { firstBuildOption, secondBuildOption } from "../../parameters";
import type { RichParameter } from "../../provisionerGenerated";
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/workspaces/startWorkspace.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import {
createWorkspace,
disableDynamicParameters,
echoResponsesWithParameters,
login,
stopWorkspace,
verifyParameters,
} from "../../helpers";
import { login } from "../../helpers";
import { beforeCoderTest } from "../../hooks";
import { firstBuildOption, secondBuildOption } from "../../parameters";
import type { RichParameter } from "../../provisionerGenerated";
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/tests/workspaces/updateWorkspace.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import {
createWorkspace,
disableDynamicParameters,
echoResponsesWithParameters,
login,
updateTemplate,
updateWorkspace,
updateWorkspaceParameters,
verifyParameters,
} from "../../helpers";
import { login } from "../../helpers";
import { beforeCoderTest } from "../../hooks";
import {
fifthParameter,
Expand Down
2 changes: 1 addition & 1 deletion site/jest.setup.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import "@testing-library/jest-dom";
import "jest-location-mock";
import { server } from "testHelpers/server";
import crypto from "node:crypto";
import { cleanup } from "@testing-library/react";
import type { Region } from "api/typesGenerated";
import type { ProxyLatencyReport } from "contexts/useProxyLatency";
import { useMemo } from "react";
import { server } from "testHelpers/server";

// useProxyLatency does some http requests to determine latency.
// This would fail unit testing, or at least make it very slow with
Expand Down
Loading
Loading