621962e049
## Summary - Move 4 test fixture apps from `twenty-sdk/src/cli/__tests__/apps/` to `twenty-apps/fixtures/` with meaningful names (`rich-app` → `postcard-app`, `root-app` → `minimal-app`) - Replace all `from '@/sdk'` imports with `from 'twenty-sdk'` so fixture apps are proper, portable twenty-sdk apps - Remove the fragile `"@/*": ["../../../../../src/*"]` tsconfig hack and replace with standard `"src/*": ["./src/*"]` paths - Create a centralized `fixture-paths.ts` utility in twenty-sdk tests for clean app path resolution ## Why The fixture apps were deeply nested in twenty-sdk's test directory and tightly coupled to its internal source layout via a tsconfig path alias hack. This made them: - Impossible to reuse outside of SDK CLI tests (e.g., for server-side dev seeding with `DevSeederService`) - Fragile — moving any twenty-sdk source file could break the path alias - Poorly discoverable — buried 5 directories deep in test infrastructure Moving them to `twenty-apps/fixtures/` makes them first-class portable apps that can be imported by `twenty-server` for seeding, used in E2E testing, and serve as canonical examples alongside `hello-world`. ## Test plan - [x] All 8 twenty-sdk integration tests pass (3 suites: postcard-app, minimal-app, invalid-app) - [x] Prettier formatting verified on all changed files - [ ] CI should confirm E2E tests also pass (these require a running server) Made with [Cursor](https://cursor.com)
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { appPublish } from '@/cli/public-operations/app-publish';
|
|
import { CURRENT_EXECUTION_DIRECTORY } from '@/cli/utilities/config/current-execution-directory';
|
|
import { checkSdkVersionCompatibility } from '@/cli/utilities/version/check-sdk-version-compatibility';
|
|
import chalk from 'chalk';
|
|
|
|
export type AppPublishCommandOptions = {
|
|
appPath?: string;
|
|
server?: string;
|
|
token?: string;
|
|
tag?: string;
|
|
};
|
|
|
|
export class AppPublishCommand {
|
|
async execute(options: AppPublishCommandOptions): Promise<void> {
|
|
const appPath = options.appPath ?? CURRENT_EXECUTION_DIRECTORY;
|
|
|
|
await checkSdkVersionCompatibility(appPath);
|
|
|
|
const isServerPublish = !!options.server;
|
|
|
|
console.log(
|
|
chalk.blue(
|
|
isServerPublish
|
|
? `Publishing to server ${options.server}...`
|
|
: 'Publishing to npm...',
|
|
),
|
|
);
|
|
console.log(chalk.gray(`App path: ${appPath}`));
|
|
console.log('');
|
|
|
|
const result = await appPublish({
|
|
appPath,
|
|
server: options.server,
|
|
token: options.token,
|
|
npmTag: options.tag,
|
|
onProgress: (message) => console.log(chalk.gray(message)),
|
|
});
|
|
|
|
if (!result.success) {
|
|
console.error(chalk.red(result.error.message));
|
|
process.exit(1);
|
|
}
|
|
|
|
if (result.data.target === 'npm') {
|
|
console.log(chalk.green('✓ Published to npm successfully'));
|
|
} else {
|
|
console.log(
|
|
chalk.green('✓ Published to server and installed successfully'),
|
|
);
|
|
}
|
|
}
|
|
}
|