diff --git a/.evergreen/functions.yml b/.evergreen/functions.yml index 369de8fa0dd..2de3e3c5e7a 100644 --- a/.evergreen/functions.yml +++ b/.evergreen/functions.yml @@ -687,7 +687,7 @@ functions: if [[ "$IS_OSX" == "true" ]]; then echo "Disabling clipboard usage in e2e tests (TODO: https://jira.mongodb.org/browse/BUILD-14780)" export COMPASS_E2E_DISABLE_CLIPBOARD_USAGE="true" - npm run --unsafe-perm --workspace compass-e2e-tests smoketest -- --package=osx_dmg + npm run --unsafe-perm --workspace @mongodb-js/compass-smoke-tests start -- --package=osx_dmg # TODO: osx_zip fi diff --git a/package-lock.json b/package-lock.json index ea382991520..b1a8b799593 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7727,6 +7727,10 @@ "resolved": "packages/compass-sidebar", "link": true }, + "node_modules/@mongodb-js/compass-smoke-tests": { + "resolved": "packages/compass-smoke-tests", + "link": true + }, "node_modules/@mongodb-js/compass-telemetry": { "resolved": "packages/compass-telemetry", "link": true @@ -43214,7 +43218,6 @@ "semver": "^7.6.2", "tree-kill": "^1.2.2", "ts-node": "^10.9.1", - "undici-types": "^6", "webdriverio": "^9.4.1", "why-is-node-running": "^2.3.0", "xvfb-maybe": "^0.2.1", @@ -46033,6 +46036,91 @@ "node": ">=0.3.1" } }, + "packages/compass-smoke-tests": { + "name": "@mongodb-js/compass-smoke-tests", + "version": "1.0.0", + "license": "SSPL", + "devDependencies": { + "@mongodb-js/eslint-config-compass": "^1.2.1", + "@mongodb-js/prettier-config-compass": "^1.1.1", + "@mongodb-js/tsconfig-compass": "^1.1.1", + "@types/node": "^20", + "depcheck": "^1.4.1", + "eslint": "^7.25.0", + "hadron-build": "^25.6.1", + "lodash": "^4.17.21", + "prettier": "^2.7.1", + "typescript": "^5.0.4", + "yargs": "^17.7.2" + } + }, + "packages/compass-smoke-tests/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/compass-smoke-tests/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/compass-smoke-tests/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/compass-smoke-tests/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/compass-smoke-tests/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "packages/compass-telemetry": { "name": "@mongodb-js/compass-telemetry", "version": "1.3.1", @@ -57023,6 +57111,71 @@ } } }, + "@mongodb-js/compass-smoke-tests": { + "version": "file:packages/compass-smoke-tests", + "requires": { + "@mongodb-js/eslint-config-compass": "^1.2.1", + "@mongodb-js/prettier-config-compass": "^1.1.1", + "@mongodb-js/tsconfig-compass": "^1.1.1", + "@types/node": "^20", + "depcheck": "^1.4.1", + "eslint": "^7.25.0", + "hadron-build": "^25.6.1", + "lodash": "^4.17.21", + "prettier": "^2.7.1", + "typescript": "^5.0.4", + "yargs": "^17.7.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, "@mongodb-js/compass-telemetry": { "version": "file:packages/compass-telemetry", "requires": { @@ -66335,7 +66488,6 @@ "semver": "^7.6.2", "tree-kill": "^1.2.2", "ts-node": "^10.9.1", - "undici-types": "^6", "webdriverio": "^9.4.1", "why-is-node-running": "^2.3.0", "xvfb-maybe": "^0.2.1", diff --git a/packages/compass-e2e-tests/.gitignore b/packages/compass-e2e-tests/.gitignore index d271f2c31b1..ab0bf937814 100644 --- a/packages/compass-e2e-tests/.gitignore +++ b/packages/compass-e2e-tests/.gitignore @@ -4,7 +4,3 @@ fixtures/*.csv fixtures/*.json hadron-build-info.json -# Ignoring sandboxes (created per test run) -.smoke-sandboxes/ -# Cache of downloaded binaries -.smoke-downloads/ diff --git a/packages/compass-e2e-tests/.prettierignore b/packages/compass-e2e-tests/.prettierignore index 8a1336e37eb..42c9c0cb109 100644 --- a/packages/compass-e2e-tests/.prettierignore +++ b/packages/compass-e2e-tests/.prettierignore @@ -4,8 +4,3 @@ fixtures .nyc_output coverage hadron-build-info.json - -# Ignoring sandboxes (created per test run) -.smoke-sandboxes/ -# Cache of downloaded binaries -.smoke-downloads/ diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index 52a2a42680d..f5dd8e289a5 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -73,7 +73,6 @@ "semver": "^7.6.2", "tree-kill": "^1.2.2", "ts-node": "^10.9.1", - "undici-types": "^6", "webdriverio": "^9.4.1", "why-is-node-running": "^2.3.0", "xvfb-maybe": "^0.2.1", diff --git a/packages/compass-smoke-tests/.depcheckrc b/packages/compass-smoke-tests/.depcheckrc new file mode 100644 index 00000000000..1cd5ad0cb1c --- /dev/null +++ b/packages/compass-smoke-tests/.depcheckrc @@ -0,0 +1,3 @@ +ignores: + - '@mongodb-js/prettier-config-compass' + - '@mongodb-js/tsconfig-compass' diff --git a/packages/compass-smoke-tests/.eslintignore b/packages/compass-smoke-tests/.eslintignore new file mode 100644 index 00000000000..f2ea66e271a --- /dev/null +++ b/packages/compass-smoke-tests/.eslintignore @@ -0,0 +1,7 @@ +.nyc-output +dist + +# Sandboxes (created per test run) +.sandboxes/ +# Cache of downloaded files +.downloads/ diff --git a/packages/compass-smoke-tests/.eslintrc.js b/packages/compass-smoke-tests/.eslintrc.js new file mode 100644 index 00000000000..7043d0d3b2e --- /dev/null +++ b/packages/compass-smoke-tests/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + root: true, + extends: ['@mongodb-js/eslint-config-compass'], + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + { + files: ['**/*.ts'], + rules: { + 'no-console': 0, + }, + }, + ], +}; diff --git a/packages/compass-smoke-tests/.gitignore b/packages/compass-smoke-tests/.gitignore new file mode 100644 index 00000000000..018fd4a90a1 --- /dev/null +++ b/packages/compass-smoke-tests/.gitignore @@ -0,0 +1,4 @@ +# Sandboxes (created per test run) +.sandboxes/ +# Cache of downloaded files +.downloads/ diff --git a/packages/compass-smoke-tests/.prettierignore b/packages/compass-smoke-tests/.prettierignore new file mode 100644 index 00000000000..8d7a2d7053e --- /dev/null +++ b/packages/compass-smoke-tests/.prettierignore @@ -0,0 +1,8 @@ +.nyc_output +dist +coverage + +# Sandboxes (created per test run) +.sandboxes/ +# Cache of downloaded files +.downloads/ diff --git a/packages/compass-smoke-tests/.prettierrc.json b/packages/compass-smoke-tests/.prettierrc.json new file mode 100644 index 00000000000..18853d1532e --- /dev/null +++ b/packages/compass-smoke-tests/.prettierrc.json @@ -0,0 +1 @@ +"@mongodb-js/prettier-config-compass" diff --git a/packages/compass-smoke-tests/package.json b/packages/compass-smoke-tests/package.json new file mode 100644 index 00000000000..8f7cd089608 --- /dev/null +++ b/packages/compass-smoke-tests/package.json @@ -0,0 +1,45 @@ +{ + "name": "@mongodb-js/compass-smoke-tests", + "description": "Smoke test suite for Compass app installers", + "author": { + "name": "MongoDB Inc", + "email": "compass@mongodb.com" + }, + "private": true, + "bugs": { + "url": "https://jira.mongodb.org/projects/COMPASS/issues", + "email": "compass@mongodb.com" + }, + "homepage": "https://github.com/mongodb-js/compass", + "version": "1.0.0", + "repository": { + "type": "git", + "url": "https://github.com/mongodb-js/compass.git" + }, + "compass:exports": {}, + "license": "SSPL", + "scripts": { + "start": "ts-node src/cli.ts", + "typecheck": "tsc -p tsconfig.json", + "eslint": "eslint", + "prettier": "prettier", + "lint": "npm run eslint . && npm run prettier -- --check .", + "depcheck": "compass-scripts check-peer-deps && depcheck", + "check": "npm run typecheck && npm run lint && npm run depcheck", + "check-ci": "npm run check", + "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." + }, + "devDependencies": { + "@types/node": "^20", + "@mongodb-js/eslint-config-compass": "^1.2.1", + "@mongodb-js/prettier-config-compass": "^1.1.1", + "@mongodb-js/tsconfig-compass": "^1.1.1", + "depcheck": "^1.4.1", + "eslint": "^7.25.0", + "hadron-build": "^25.6.1", + "lodash": "^4.17.21", + "prettier": "^2.7.1", + "typescript": "^5.0.4", + "yargs": "^17.7.2" + } +} diff --git a/packages/compass-e2e-tests/helpers/smoke-test/build-info.ts b/packages/compass-smoke-tests/src/build-info.ts similarity index 98% rename from packages/compass-e2e-tests/helpers/smoke-test/build-info.ts rename to packages/compass-smoke-tests/src/build-info.ts index 9e858b5aba2..44b8846925a 100644 --- a/packages/compass-e2e-tests/helpers/smoke-test/build-info.ts +++ b/packages/compass-smoke-tests/src/build-info.ts @@ -180,7 +180,7 @@ export function readPackageDetails( export function writeAndReadPackageDetails( context: SmokeTestsContext ): PackageDetails { - const compassDir = path.resolve(__dirname, '../../../compass'); + const compassDir = path.resolve(__dirname, '../../compass'); const infoArgs = { format: 'json', dir: compassDir, diff --git a/packages/compass-e2e-tests/smoke-test.ts b/packages/compass-smoke-tests/src/cli.ts similarity index 93% rename from packages/compass-e2e-tests/smoke-test.ts rename to packages/compass-smoke-tests/src/cli.ts index 9ee64ce7cde..bba6710ec44 100755 --- a/packages/compass-e2e-tests/smoke-test.ts +++ b/packages/compass-smoke-tests/src/cli.ts @@ -7,19 +7,16 @@ import yargs from 'yargs'; import { hideBin } from 'yargs/helpers'; import { pick } from 'lodash'; import { installMacDMG } from './installers/mac-dmg'; -import { execute } from './installers/helpers'; +import { execute } from './execute'; import { type PackageDetails, readPackageDetails, writeAndReadPackageDetails, -} from './helpers/smoke-test/build-info'; -import { createSandbox } from './helpers/smoke-test/directories'; -import { downloadFile } from './helpers/smoke-test/downloads'; -import { - type PackageKind, - SUPPORTED_PACKAGES, -} from './helpers/smoke-test/packages'; -import { type SmokeTestsContext } from './helpers/smoke-test/context'; +} from './build-info'; +import { createSandbox } from './directories'; +import { downloadFile } from './downloads'; +import { type PackageKind, SUPPORTED_PACKAGES } from './packages'; +import { type SmokeTestsContext } from './context'; import { installMacZIP } from './installers/mac-zip'; const SUPPORTED_PLATFORMS = ['win32', 'darwin', 'linux'] as const; diff --git a/packages/compass-e2e-tests/helpers/smoke-test/context.ts b/packages/compass-smoke-tests/src/context.ts similarity index 100% rename from packages/compass-e2e-tests/helpers/smoke-test/context.ts rename to packages/compass-smoke-tests/src/context.ts diff --git a/packages/compass-e2e-tests/helpers/smoke-test/directories.ts b/packages/compass-smoke-tests/src/directories.ts similarity index 84% rename from packages/compass-e2e-tests/helpers/smoke-test/directories.ts rename to packages/compass-smoke-tests/src/directories.ts index 2eb8b00f728..26e9bffbbbc 100644 --- a/packages/compass-e2e-tests/helpers/smoke-test/directories.ts +++ b/packages/compass-smoke-tests/src/directories.ts @@ -4,7 +4,7 @@ import fs from 'node:fs'; import path from 'node:path'; function ensureSandboxesDirectory() { - const sandboxesPath = path.resolve(__dirname, '../../.smoke-sandboxes'); + const sandboxesPath = path.resolve(__dirname, '../.sandboxes'); if (!fs.existsSync(sandboxesPath)) { fs.mkdirSync(sandboxesPath, { recursive: true }); } @@ -24,7 +24,7 @@ export function createSandbox() { } export function ensureDownloadsDirectory() { - const downloadsPath = path.resolve(__dirname, '../../.smoke-downloads'); + const downloadsPath = path.resolve(__dirname, '../.downloads'); if (!fs.existsSync(downloadsPath)) { fs.mkdirSync(downloadsPath, { recursive: true }); } diff --git a/packages/compass-e2e-tests/helpers/smoke-test/downloads.ts b/packages/compass-smoke-tests/src/downloads.ts similarity index 86% rename from packages/compass-e2e-tests/helpers/smoke-test/downloads.ts rename to packages/compass-smoke-tests/src/downloads.ts index 4a0a48c33db..49ed7815cf8 100644 --- a/packages/compass-e2e-tests/helpers/smoke-test/downloads.ts +++ b/packages/compass-smoke-tests/src/downloads.ts @@ -2,10 +2,6 @@ import assert from 'node:assert'; import fs from 'node:fs'; import path from 'node:path'; import stream from 'node:stream'; -import { type fetch as undiciFetch } from 'undici-types'; - -// Hacking types here because the DOM types doesn't match the fetch implemented by Node.js -const fetch = globalThis.fetch as unknown as typeof undiciFetch; import { ensureDownloadsDirectory } from './directories'; diff --git a/packages/compass-e2e-tests/installers/helpers.ts b/packages/compass-smoke-tests/src/execute.ts similarity index 100% rename from packages/compass-e2e-tests/installers/helpers.ts rename to packages/compass-smoke-tests/src/execute.ts diff --git a/packages/compass-e2e-tests/installers/mac-dmg.ts b/packages/compass-smoke-tests/src/installers/mac-dmg.ts similarity index 97% rename from packages/compass-e2e-tests/installers/mac-dmg.ts rename to packages/compass-smoke-tests/src/installers/mac-dmg.ts index 0d56045d813..4cccabd71cf 100644 --- a/packages/compass-e2e-tests/installers/mac-dmg.ts +++ b/packages/compass-smoke-tests/src/installers/mac-dmg.ts @@ -2,7 +2,7 @@ import path from 'node:path'; import fs from 'node:fs'; import type { InstalledAppInfo, InstallablePackage } from './types'; -import { execute } from './helpers'; +import { execute } from '../execute'; export function installMacDMG({ appName, diff --git a/packages/compass-e2e-tests/installers/mac-zip.ts b/packages/compass-smoke-tests/src/installers/mac-zip.ts similarity index 96% rename from packages/compass-e2e-tests/installers/mac-zip.ts rename to packages/compass-smoke-tests/src/installers/mac-zip.ts index b7e3790e5cc..083ba5869c4 100644 --- a/packages/compass-e2e-tests/installers/mac-zip.ts +++ b/packages/compass-smoke-tests/src/installers/mac-zip.ts @@ -2,7 +2,7 @@ import path from 'node:path'; import fs from 'node:fs'; import type { InstalledAppInfo, InstallablePackage } from './types'; -import { execute } from './helpers'; +import { execute } from '../execute'; export function installMacZIP({ appName, diff --git a/packages/compass-e2e-tests/installers/types.ts b/packages/compass-smoke-tests/src/installers/types.ts similarity index 100% rename from packages/compass-e2e-tests/installers/types.ts rename to packages/compass-smoke-tests/src/installers/types.ts diff --git a/packages/compass-e2e-tests/helpers/smoke-test/packages.ts b/packages/compass-smoke-tests/src/packages.ts similarity index 100% rename from packages/compass-e2e-tests/helpers/smoke-test/packages.ts rename to packages/compass-smoke-tests/src/packages.ts diff --git a/packages/compass-smoke-tests/tsconfig.json b/packages/compass-smoke-tests/tsconfig.json new file mode 100644 index 00000000000..7d16ff38a49 --- /dev/null +++ b/packages/compass-smoke-tests/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@mongodb-js/tsconfig-compass/tsconfig.common.json", + "compilerOptions": { + "noEmit": true, + "types": ["node"], + "lib": ["ES2021"] + }, + "include": ["src/**/*"] +}