From 95ace6d51c7bf631863b06ee46bbc9b6dff6828a Mon Sep 17 00:00:00 2001 From: HiDeoo Date: Fri, 3 May 2024 11:45:29 +0200 Subject: Add type checking job to the CI workflow (#1827) Co-authored-by: Chris Swithinbank --- .github/workflows/ci.yml | 17 ++++++++++ package.json | 4 ++- .../starlight/__tests__/basics/route-data.test.ts | 1 + .../starlight-page-route-data-extend.test.ts | 2 +- .../starlight/__tests__/edit-url/edit-url.test.ts | 1 + .../i18n-non-root-single-locale/routing.test.ts | 1 + packages/starlight/utils/createPathFormatter.ts | 1 + packages/starlight/utils/user-config.ts | 2 +- packages/tailwind/vitest.config.ts | 12 ++++--- pnpm-lock.yaml | 38 ++++++++++++++-------- tsconfig.typecheck.json | 4 +++ 11 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 tsconfig.typecheck.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index beb12cf4..5b7a5b94 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,6 +44,23 @@ jobs: - name: Test packages run: pnpm -r test:e2e + type-check: + name: Run type checks + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v3 + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'pnpm' + - run: pnpm i + - name: Generate docs types + working-directory: docs + run: pnpm astro sync + - name: Type check packages + run: pnpm typecheck + pa11y: name: Check for accessibility issues runs-on: ubuntu-20.04 diff --git a/package.json b/package.json index 8e0fd9e6..b730b6c7 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build:examples": "pnpm --no-bail --workspace-concurrency 1 --filter '@example/*' build", "size": "size-limit", "version": "pnpm changeset version && pnpm i --no-frozen-lockfile", - "format": "prettier -w --cache --plugin prettier-plugin-astro ." + "format": "prettier -w --cache --plugin prettier-plugin-astro .", + "typecheck": "tsc -p tsconfig.typecheck.json" }, "license": "MIT", "devDependencies": { @@ -17,6 +18,7 @@ "astro": "^4.3.5", "prettier": "^3.0.0", "prettier-plugin-astro": "^0.13.0", + "typescript": "^5.4.5", "size-limit": "^8.2.4" }, "packageManager": "pnpm@8.7.4", diff --git a/packages/starlight/__tests__/basics/route-data.test.ts b/packages/starlight/__tests__/basics/route-data.test.ts index eacd5334..d59ce013 100644 --- a/packages/starlight/__tests__/basics/route-data.test.ts +++ b/packages/starlight/__tests__/basics/route-data.test.ts @@ -7,6 +7,7 @@ vi.mock('astro:content', async () => docs: [ ['index.mdx', { title: 'Home Page' }], ['getting-started.mdx', { title: 'Splash', template: 'splash' }], + // @ts-expect-error — Using a slug not present in Starlight docs site ['showcase.mdx', { title: 'ToC Disabled', tableOfContents: false }], ['environmental-impact.md', { title: 'Explicit update date', lastUpdated: new Date() }], ], diff --git a/packages/starlight/__tests__/basics/starlight-page-route-data-extend.test.ts b/packages/starlight/__tests__/basics/starlight-page-route-data-extend.test.ts index 3ab5b8f5..23438c7a 100644 --- a/packages/starlight/__tests__/basics/starlight-page-route-data-extend.test.ts +++ b/packages/starlight/__tests__/basics/starlight-page-route-data-extend.test.ts @@ -1,4 +1,4 @@ -import { assert, expect, test, vi } from 'vitest'; +import { expect, test, vi } from 'vitest'; import { generateStarlightPageRouteData, type StarlightPageProps, diff --git a/packages/starlight/__tests__/edit-url/edit-url.test.ts b/packages/starlight/__tests__/edit-url/edit-url.test.ts index 25ab98aa..c77aa93d 100644 --- a/packages/starlight/__tests__/edit-url/edit-url.test.ts +++ b/packages/starlight/__tests__/edit-url/edit-url.test.ts @@ -8,6 +8,7 @@ vi.mock('astro:content', async () => ['index.mdx', { title: 'Home Page' }], ['getting-started.mdx', { title: 'Getting Started' }], [ + // @ts-expect-error — Using a slug not present in Starlight docs site 'showcase.mdx', { title: 'Custom edit link', editUrl: 'https://example.com/custom-edit?link' }, ], diff --git a/packages/starlight/__tests__/i18n-non-root-single-locale/routing.test.ts b/packages/starlight/__tests__/i18n-non-root-single-locale/routing.test.ts index 2caef2f5..11058ec0 100644 --- a/packages/starlight/__tests__/i18n-non-root-single-locale/routing.test.ts +++ b/packages/starlight/__tests__/i18n-non-root-single-locale/routing.test.ts @@ -5,6 +5,7 @@ vi.mock('astro:content', async () => (await import('../test-utils')).mockedAstroContent({ docs: [ ['fr/index.mdx', { title: 'Accueil' }], + // @ts-expect-error — Using a slug not present in Starlight docs site ['en/index.mdx', { title: 'Home page' }], ], }) diff --git a/packages/starlight/utils/createPathFormatter.ts b/packages/starlight/utils/createPathFormatter.ts index af363186..f4db6f7a 100644 --- a/packages/starlight/utils/createPathFormatter.ts +++ b/packages/starlight/utils/createPathFormatter.ts @@ -34,6 +34,7 @@ function formatPath( href: string, { format = 'directory', trailingSlash = 'ignore' }: FormatPathOptions ) { + // @ts-expect-error — TODO: add support for `preserve` (https://github.com/withastro/starlight/issues/1781) const formatStrategy = formatStrategies[format]; const trailingSlashStrategy = trailingSlashStrategies[trailingSlash]; diff --git a/packages/starlight/utils/user-config.ts b/packages/starlight/utils/user-config.ts index 31f00077..efd6193e 100644 --- a/packages/starlight/utils/user-config.ts +++ b/packages/starlight/utils/user-config.ts @@ -256,7 +256,7 @@ export const StarlightConfigSchema = UserConfigSchema.strict().transform( const defaultLocaleConfig = { label: 'English', lang: 'en', - dir: 'ltr', + dir: 'ltr' as const, locale: undefined, ...locales?.root, }; diff --git a/packages/tailwind/vitest.config.ts b/packages/tailwind/vitest.config.ts index b29e52cd..f32a3d0b 100644 --- a/packages/tailwind/vitest.config.ts +++ b/packages/tailwind/vitest.config.ts @@ -4,11 +4,13 @@ export default defineConfig({ test: { coverage: { reportsDirectory: './__coverage__', - thresholdAutoUpdate: true, - lines: 100, - functions: 100, - branches: 100, - statements: 100, + thresholds: { + autoUpdate: true, + lines: 94, + functions: 100, + branches: 85, + statements: 94, + }, }, }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1094b3f4..032db9c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,7 +19,7 @@ importers: version: 8.2.4(size-limit@8.2.4) astro: specifier: ^4.3.5 - version: 4.3.5(@types/node@18.16.19) + version: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) prettier: specifier: ^3.0.0 version: 3.0.0 @@ -29,6 +29,9 @@ importers: size-limit: specifier: ^8.2.4 version: 8.2.4 + typescript: + specifier: ^5.4.5 + version: 5.4.5 docs: dependencies: @@ -46,7 +49,7 @@ importers: version: 2.0.0 astro: specifier: ^4.3.5 - version: 4.3.5(@types/node@18.16.19) + version: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) culori: specifier: ^3.2.0 version: 3.2.0 @@ -71,7 +74,7 @@ importers: version: link:../../packages/starlight astro: specifier: ^4.3.5 - version: 4.3.5(@types/node@18.16.19) + version: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) sharp: specifier: ^0.32.5 version: 0.32.6 @@ -89,7 +92,7 @@ importers: version: 5.1.0(astro@4.3.5)(tailwindcss@3.4.1) astro: specifier: ^4.3.5 - version: 4.3.5(@types/node@18.16.19) + version: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) sharp: specifier: ^0.32.5 version: 0.32.6 @@ -196,7 +199,7 @@ importers: version: 1.3.1(vitest@1.3.1) astro: specifier: ^4.3.5 - version: 4.3.5(@types/node@18.16.19) + version: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) vitest: specifier: ^1.3.1 version: 1.3.1(@types/node@18.16.19) @@ -208,7 +211,7 @@ importers: version: link:../../.. astro: specifier: ^4.3.5 - version: 4.3.5(@types/node@18.16.19) + version: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) packages/tailwind: dependencies: @@ -385,7 +388,7 @@ packages: peerDependencies: astro: ^2.0.0 || ^3.0.0-beta || ^4.0.0-beta dependencies: - astro: 4.3.5(@types/node@18.16.19) + astro: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) lite-youtube-embed: 0.2.0 dev: false @@ -428,7 +431,7 @@ packages: '@astrojs/markdown-remark': 4.2.1 '@mdx-js/mdx': 3.0.0 acorn: 8.11.3 - astro: 4.3.5(@types/node@18.16.19) + astro: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) es-module-lexer: 1.4.1 estree-util-visit: 2.0.0 github-slugger: 2.0.0 @@ -464,7 +467,7 @@ packages: astro: ^3.0.0 || ^4.0.0 tailwindcss: ^3.0.24 dependencies: - astro: 4.3.5(@types/node@18.16.19) + astro: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) autoprefixer: 10.4.15(postcss@8.4.33) postcss: 8.4.33 postcss-load-config: 4.0.2(postcss@8.4.33) @@ -1856,11 +1859,11 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^3.3.0 dependencies: - astro: 4.3.5(@types/node@18.16.19) + astro: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) rehype-expressive-code: 0.35.2 dev: false - /astro@4.3.5(@types/node@18.16.19): + /astro@4.3.5(@types/node@18.16.19)(typescript@5.4.5): resolution: {integrity: sha512-7jPffNlcmDO94NlkWe/hUWta/pIjlx1LVD/DZb/fyjT1Jv+7mGhKZBIjkDfeVpequW70mep8cAS5RM7Pxa0Gdg==} engines: {node: '>=18.14.1', npm: '>=6.14.0'} hasBin: true @@ -1921,7 +1924,7 @@ packages: shikiji: 0.9.19 string-width: 7.0.0 strip-ansi: 7.1.0 - tsconfck: 3.0.0 + tsconfck: 3.0.0(typescript@5.4.5) unist-util-visit: 5.0.0 vfile: 6.0.1 vite: 5.0.12(@types/node@18.16.19) @@ -6013,7 +6016,7 @@ packages: astro: '>=4.0.0' dependencies: '@astrojs/starlight': link:packages/starlight - astro: 4.3.5(@types/node@18.16.19) + astro: 4.3.5(@types/node@18.16.19)(typescript@5.4.5) github-slugger: 2.0.0 hast-util-from-html: 2.0.1 hast-util-has-property: 3.0.0 @@ -6394,7 +6397,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: false - /tsconfck@3.0.0: + /tsconfck@3.0.0(typescript@5.4.5): resolution: {integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==} engines: {node: ^18 || >=20} hasBin: true @@ -6403,6 +6406,8 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + typescript: 5.4.5 /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} @@ -6470,6 +6475,11 @@ packages: is-typed-array: 1.1.10 dev: true + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + /ufo@1.3.2: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true diff --git a/tsconfig.typecheck.json b/tsconfig.typecheck.json new file mode 100644 index 00000000..1327de77 --- /dev/null +++ b/tsconfig.typecheck.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["**/dist/**", "**/__coverage__/**", "packages/starlight/components.ts"] +} -- cgit