0bd6410d9f
We had a few issues with lazy race conditions failing CI. This came from scripts configured to invoke lazy again, rather than through expressing dependencies between scripts. This diff reconfigures lazy to articulate these sorts of things as dependencies instead of through self-invocation. Instead of having lots of separate `build-package`, `build-docs`, etc commands, we now just have a build command with package overrides to express more specific options ### Change Type - [x] `internal` — Any other changes that don't affect the published package (will not publish a new version) ### Release Notes [internal only]
133 lines
3.5 KiB
TypeScript
133 lines
3.5 KiB
TypeScript
import { LazyConfig } from 'lazyrepo'
|
|
|
|
export function generateSharedScripts(bublic: '<rootDir>' | '<rootDir>/bublic') {
|
|
return {
|
|
build: {
|
|
baseCommand: 'exit 0',
|
|
runsAfter: { prebuild: {}, 'refresh-assets': {} },
|
|
workspaceOverrides: {
|
|
'{bublic/,}apps/docs': { runsAfter: { 'docs-content': {} } },
|
|
'{bublic/,}apps/vscode/*': { runsAfter: { 'refresh-assets': {} } },
|
|
'{bublic/,}packages/*': {
|
|
runsAfter: { 'build-api': { in: 'self-only' }, prebuild: { in: 'self-only' } },
|
|
cache: {
|
|
inputs: ['api/**/*', 'src/**/*'],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
dev: {
|
|
execution: 'independent',
|
|
runsAfter: { 'refresh-assets': {} },
|
|
cache: 'none',
|
|
workspaceOverrides: {
|
|
'{bublic/,}apps/docs': { runsAfter: { 'docs-content': { in: 'self-only' } } },
|
|
'{bublic/,}apps/vscode/*': { runsAfter: { build: { in: 'self-only' } } },
|
|
'{bublic/,}apps/webdriver': {
|
|
runsAfter: { 'refresh-assets': {}, prebuild: {} },
|
|
cache: 'none',
|
|
},
|
|
},
|
|
},
|
|
test: {
|
|
baseCommand: 'yarn run -T jest',
|
|
runsAfter: { 'refresh-assets': {} },
|
|
},
|
|
'test-coverage': {
|
|
baseCommand: 'yarn run -T jest --coverage',
|
|
runsAfter: { 'refresh-assets': {} },
|
|
},
|
|
lint: {
|
|
execution: 'independent',
|
|
runsAfter: { 'build-types': {} },
|
|
cache: {
|
|
inputs: {
|
|
exclude: ['**/*.tsbuildinfo'],
|
|
},
|
|
},
|
|
},
|
|
'pack-tarball': {
|
|
parallel: false,
|
|
},
|
|
'refresh-assets': {
|
|
execution: 'top-level',
|
|
baseCommand: `tsx ${bublic}/scripts/refresh-assets.ts`,
|
|
cache: {
|
|
inputs: ['package.json', `${bublic}/scripts/refresh-assets.ts`, `${bublic}/assets/**/*`],
|
|
},
|
|
},
|
|
'build-types': {
|
|
execution: 'top-level',
|
|
baseCommand: `tsx ${bublic}/scripts/typecheck.ts`,
|
|
cache: {
|
|
inputs: {
|
|
include: ['<allWorkspaceDirs>/**/*.{ts,tsx}', '<allWorkspaceDirs>/tsconfig.json'],
|
|
exclude: ['<allWorkspaceDirs>/dist*/**/*', '<allWorkspaceDirs>/api/**/*'],
|
|
},
|
|
outputs: ['<allWorkspaceDirs>/*.tsbuildinfo', '<allWorkspaceDirs>/.tsbuild/**/*'],
|
|
},
|
|
runsAfter: {
|
|
'refresh-assets': {},
|
|
'maybe-clean-tsbuildinfo': {},
|
|
},
|
|
},
|
|
'build-api': {
|
|
execution: 'independent',
|
|
cache: {
|
|
inputs: ['.tsbuild/**/*.d.ts', 'tsconfig.json'],
|
|
outputs: ['api/**/*'],
|
|
},
|
|
runsAfter: {
|
|
'build-types': {
|
|
// Because build-types is top level, if usesOutput were set to true every
|
|
// build-api task would depend on all the .tsbuild files in the whole
|
|
// repo. So we set this to false and configure it to use only the
|
|
// local .tsbuild files
|
|
usesOutput: false,
|
|
},
|
|
},
|
|
},
|
|
'docs-content': {
|
|
runsAfter: { 'build-api': {} },
|
|
cache: {
|
|
inputs: [
|
|
'content/**',
|
|
'scripts/**',
|
|
`${bublic}/packages/*/api/api.json`,
|
|
`${bublic}/packages/*/package.json`,
|
|
],
|
|
},
|
|
},
|
|
'api-check': {
|
|
execution: 'top-level',
|
|
baseCommand: `tsx ${bublic}/scripts/api-check.ts`,
|
|
runsAfter: { 'build-api': {} },
|
|
cache: {
|
|
inputs: [`${bublic}/packages/*/api/public.d.ts`],
|
|
},
|
|
},
|
|
} satisfies LazyConfig['scripts']
|
|
}
|
|
|
|
const config = {
|
|
baseCacheConfig: {
|
|
include: [
|
|
'<rootDir>/{,bublic/}package.json',
|
|
'<rootDir>/{,bublic/}public-yarn.lock',
|
|
'<rootDir>/{,bublic/}lazy.config.ts',
|
|
'<rootDir>/{,bublic/}config/**/*',
|
|
'<rootDir>/{,bublic/}scripts/**/*',
|
|
],
|
|
exclude: [
|
|
'<allWorkspaceDirs>/coverage/**/*',
|
|
'<allWorkspaceDirs>/dist*/**/*',
|
|
'**/*.tsbuildinfo',
|
|
'<rootDir>/{,bublic/}apps/docs/content/gen/**/*',
|
|
],
|
|
},
|
|
scripts: {
|
|
...generateSharedScripts('<rootDir>'),
|
|
},
|
|
} satisfies LazyConfig
|
|
|
|
export default config
|