testdriverai 7.0.0 → 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +2 -0
- package/.github/workflows/linux-tests.yml +28 -0
- package/README.md +126 -0
- package/agent/index.js +7 -9
- package/agent/interface.js +13 -2
- package/agent/lib/commands.js +795 -136
- package/agent/lib/redraw.js +124 -39
- package/agent/lib/sandbox.js +40 -3
- package/agent/lib/sdk.js +21 -0
- package/agent/lib/valid-version.js +2 -2
- package/debugger/index.html +1 -1
- package/docs/docs.json +86 -71
- package/docs/guide/best-practices-polling.mdx +154 -0
- package/docs/v6/getting-started/self-hosting.mdx +3 -2
- package/docs/v7/_drafts/agents.mdx +852 -0
- package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
- package/docs/v7/_drafts/best-practices.mdx +486 -0
- package/docs/v7/_drafts/caching-ai.mdx +215 -0
- package/docs/v7/_drafts/caching-selectors.mdx +400 -0
- package/docs/v7/_drafts/caching.mdx +366 -0
- package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
- package/docs/v7/_drafts/core.mdx +459 -0
- package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
- package/docs/v7/_drafts/debugging.mdx +349 -0
- package/docs/v7/_drafts/error-handling.mdx +501 -0
- package/docs/v7/_drafts/faq.mdx +393 -0
- package/docs/v7/_drafts/hooks.mdx +360 -0
- package/docs/v7/_drafts/implementation-plan.mdx +994 -0
- package/docs/v7/_drafts/init-command.mdx +95 -0
- package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
- package/docs/v7/_drafts/performance.mdx +517 -0
- package/docs/v7/_drafts/presets.mdx +210 -0
- package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
- package/docs/v7/_drafts/provision.mdx +266 -0
- package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
- package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
- package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
- package/docs/v7/_drafts/troubleshooting.mdx +526 -0
- package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
- package/docs/v7/_drafts/vitest.mdx +535 -0
- package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
- package/docs/v7/api/client.mdx +1 -1
- package/docs/v7/api/dashcam.mdx +497 -0
- package/docs/v7/api/doubleClick.mdx +102 -0
- package/docs/v7/api/elements.mdx +143 -41
- package/docs/v7/api/find.mdx +258 -0
- package/docs/v7/api/mouseDown.mdx +161 -0
- package/docs/v7/api/mouseUp.mdx +164 -0
- package/docs/v7/api/rightClick.mdx +123 -0
- package/docs/v7/api/type.mdx +51 -7
- package/docs/v7/features/ai-native.mdx +427 -0
- package/docs/v7/features/easy-to-write.mdx +351 -0
- package/docs/v7/features/enterprise.mdx +540 -0
- package/docs/v7/features/fast.mdx +424 -0
- package/docs/v7/features/observable.mdx +623 -0
- package/docs/v7/features/powerful.mdx +531 -0
- package/docs/v7/features/scalable.mdx +417 -0
- package/docs/v7/features/stable.mdx +514 -0
- package/docs/v7/getting-started/configuration.mdx +380 -0
- package/docs/v7/getting-started/generating-tests.mdx +525 -0
- package/docs/v7/getting-started/installation.mdx +486 -0
- package/docs/v7/getting-started/quickstart.mdx +320 -141
- package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
- package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
- package/docs/v7/getting-started/writing-tests.mdx +535 -0
- package/docs/v7/overview/what-is-testdriver.mdx +398 -0
- package/docs/v7/platforms/linux.mdx +308 -0
- package/docs/v7/platforms/macos.mdx +433 -0
- package/docs/v7/platforms/windows.mdx +430 -0
- package/docs/v7/playwright.mdx +3 -3
- package/docs/v7/presets/chrome-extension.mdx +223 -0
- package/docs/v7/presets/chrome.mdx +303 -0
- package/docs/v7/presets/electron.mdx +453 -0
- package/docs/v7/presets/vscode.mdx +417 -0
- package/docs/v7/presets/webapp.mdx +396 -0
- package/examples/run-tests-with-recording.sh +2 -2
- package/interfaces/cli/commands/init.js +358 -0
- package/interfaces/vitest-plugin.mjs +393 -103
- package/lib/core/Dashcam.js +506 -0
- package/lib/core/index.d.ts +150 -0
- package/lib/core/index.js +12 -0
- package/lib/presets/index.mjs +331 -0
- package/lib/vitest/hooks.d.ts +119 -0
- package/lib/vitest/hooks.mjs +316 -0
- package/lib/vitest/setup.mjs +44 -0
- package/package.json +13 -3
- package/sdk.d.ts +350 -44
- package/sdk.js +818 -105
- package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
- package/test/manual/test-console-logs.test.mjs +42 -0
- package/test/manual/test-init.sh +54 -0
- package/test/manual/test-provision-auth.mjs +22 -0
- package/test/testdriver/assert.test.mjs +41 -0
- package/test/testdriver/auto-cache-key-demo.test.mjs +56 -0
- package/test/testdriver/chrome-extension.test.mjs +89 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +6 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +6 -18
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +9 -21
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +14 -26
- package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +8 -20
- package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +5 -20
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +10 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +5 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +5 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +6 -20
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +6 -18
- package/test/testdriver/scroll-until-text.test.mjs +28 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +12 -21
- package/test/testdriver/setup/lifecycleHelpers.mjs +262 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/setup/testHelpers.mjs +25 -20
- package/test/testdriver/type.test.mjs +45 -0
- package/vitest.config.mjs +11 -56
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/acceptance-linux.yml +0 -75
- package/.github/workflows/acceptance-sdk-tests.yml +0 -133
- package/.github/workflows/acceptance-tests.yml +0 -130
- package/.github/workflows/lint.yml +0 -27
- package/.github/workflows/publish-canary.yml +0 -40
- package/.github/workflows/publish-latest.yml +0 -61
- package/.github/workflows/test-install.yml +0 -29
- package/.vscode/extensions.json +0 -3
- package/.vscode/launch.json +0 -22
- package/.vscode/mcp.json +0 -9
- package/.vscode/settings.json +0 -14
- package/CODEOWNERS +0 -3
- package/MIGRATION.md +0 -389
- package/SDK_README.md +0 -1122
- package/_testdriver/acceptance/assert.yaml +0 -7
- package/_testdriver/acceptance/dashcam.yaml +0 -9
- package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
- package/_testdriver/acceptance/embed.yaml +0 -9
- package/_testdriver/acceptance/exec-js.yaml +0 -29
- package/_testdriver/acceptance/exec-output.yaml +0 -43
- package/_testdriver/acceptance/exec-shell.yaml +0 -40
- package/_testdriver/acceptance/focus-window.yaml +0 -16
- package/_testdriver/acceptance/hover-image.yaml +0 -18
- package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
- package/_testdriver/acceptance/hover-text.yaml +0 -14
- package/_testdriver/acceptance/if-else.yaml +0 -31
- package/_testdriver/acceptance/match-image.yaml +0 -15
- package/_testdriver/acceptance/press-keys.yaml +0 -35
- package/_testdriver/acceptance/prompt.yaml +0 -11
- package/_testdriver/acceptance/remember.yaml +0 -27
- package/_testdriver/acceptance/screenshots/cart.png +0 -0
- package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
- package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
- package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
- package/_testdriver/acceptance/scroll.yaml +0 -33
- package/_testdriver/acceptance/snippets/login.yaml +0 -29
- package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
- package/_testdriver/acceptance/type.yaml +0 -29
- package/_testdriver/behavior/failure.yaml +0 -7
- package/_testdriver/behavior/hover-text.yaml +0 -13
- package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
- package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
- package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
- package/_testdriver/behavior/secrets.yaml +0 -7
- package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
- package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
- package/_testdriver/edge-cases/js-exception.yaml +0 -8
- package/_testdriver/edge-cases/js-promise.yaml +0 -19
- package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
- package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
- package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
- package/_testdriver/edge-cases/success-test.yaml +0 -9
- package/_testdriver/examples/android/example.yaml +0 -12
- package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
- package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
- package/_testdriver/examples/android/readme.md +0 -7
- package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
- package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
- package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
- package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
- package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
- package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
- package/_testdriver/lifecycle/postrun.yaml +0 -8
- package/_testdriver/lifecycle/prerun.yaml +0 -15
- package/_testdriver/lifecycle/provision.yaml +0 -25
- package/debug-screenshot-1763401388589.png +0 -0
- package/mcp-server/AI_GUIDELINES.md +0 -57
- package/scripts/view-test-results.mjs +0 -96
- package/styles/.vale-config/2-MDX.ini +0 -5
- package/styles/Microsoft/AMPM.yml +0 -9
- package/styles/Microsoft/Accessibility.yml +0 -30
- package/styles/Microsoft/Acronyms.yml +0 -64
- package/styles/Microsoft/Adverbs.yml +0 -272
- package/styles/Microsoft/Auto.yml +0 -11
- package/styles/Microsoft/Avoid.yml +0 -14
- package/styles/Microsoft/Contractions.yml +0 -50
- package/styles/Microsoft/Dashes.yml +0 -13
- package/styles/Microsoft/DateFormat.yml +0 -8
- package/styles/Microsoft/DateNumbers.yml +0 -40
- package/styles/Microsoft/DateOrder.yml +0 -8
- package/styles/Microsoft/Ellipses.yml +0 -9
- package/styles/Microsoft/FirstPerson.yml +0 -16
- package/styles/Microsoft/Foreign.yml +0 -13
- package/styles/Microsoft/Gender.yml +0 -8
- package/styles/Microsoft/GenderBias.yml +0 -42
- package/styles/Microsoft/GeneralURL.yml +0 -11
- package/styles/Microsoft/HeadingAcronyms.yml +0 -7
- package/styles/Microsoft/HeadingColons.yml +0 -8
- package/styles/Microsoft/HeadingPunctuation.yml +0 -13
- package/styles/Microsoft/Headings.yml +0 -28
- package/styles/Microsoft/Hyphens.yml +0 -14
- package/styles/Microsoft/Negative.yml +0 -13
- package/styles/Microsoft/Ordinal.yml +0 -13
- package/styles/Microsoft/OxfordComma.yml +0 -8
- package/styles/Microsoft/Passive.yml +0 -183
- package/styles/Microsoft/Percentages.yml +0 -7
- package/styles/Microsoft/Plurals.yml +0 -7
- package/styles/Microsoft/Quotes.yml +0 -7
- package/styles/Microsoft/RangeTime.yml +0 -13
- package/styles/Microsoft/Semicolon.yml +0 -8
- package/styles/Microsoft/SentenceLength.yml +0 -6
- package/styles/Microsoft/Spacing.yml +0 -8
- package/styles/Microsoft/Suspended.yml +0 -7
- package/styles/Microsoft/Terms.yml +0 -42
- package/styles/Microsoft/URLFormat.yml +0 -9
- package/styles/Microsoft/Units.yml +0 -16
- package/styles/Microsoft/Vocab.yml +0 -25
- package/styles/Microsoft/We.yml +0 -11
- package/styles/Microsoft/Wordiness.yml +0 -127
- package/styles/Microsoft/meta.json +0 -4
- package/styles/alex/Ablist.yml +0 -274
- package/styles/alex/Condescending.yml +0 -16
- package/styles/alex/Gendered.yml +0 -110
- package/styles/alex/LGBTQ.yml +0 -55
- package/styles/alex/OCD.yml +0 -10
- package/styles/alex/Press.yml +0 -12
- package/styles/alex/ProfanityLikely.yml +0 -1289
- package/styles/alex/ProfanityMaybe.yml +0 -282
- package/styles/alex/ProfanityUnlikely.yml +0 -251
- package/styles/alex/README.md +0 -27
- package/styles/alex/Race.yml +0 -85
- package/styles/alex/Suicide.yml +0 -26
- package/styles/alex/meta.json +0 -4
- package/styles/config/vocabularies/Docs/accept.txt +0 -47
- package/styles/config/vocabularies/Docs/reject.txt +0 -4
- package/styles/proselint/Airlinese.yml +0 -8
- package/styles/proselint/AnimalLabels.yml +0 -48
- package/styles/proselint/Annotations.yml +0 -9
- package/styles/proselint/Apologizing.yml +0 -8
- package/styles/proselint/Archaisms.yml +0 -52
- package/styles/proselint/But.yml +0 -8
- package/styles/proselint/Cliches.yml +0 -782
- package/styles/proselint/CorporateSpeak.yml +0 -30
- package/styles/proselint/Currency.yml +0 -5
- package/styles/proselint/Cursing.yml +0 -15
- package/styles/proselint/DateCase.yml +0 -7
- package/styles/proselint/DateMidnight.yml +0 -7
- package/styles/proselint/DateRedundancy.yml +0 -10
- package/styles/proselint/DateSpacing.yml +0 -7
- package/styles/proselint/DenizenLabels.yml +0 -52
- package/styles/proselint/Diacritical.yml +0 -95
- package/styles/proselint/GenderBias.yml +0 -45
- package/styles/proselint/GroupTerms.yml +0 -39
- package/styles/proselint/Hedging.yml +0 -8
- package/styles/proselint/Hyperbole.yml +0 -6
- package/styles/proselint/Jargon.yml +0 -11
- package/styles/proselint/LGBTOffensive.yml +0 -13
- package/styles/proselint/LGBTTerms.yml +0 -15
- package/styles/proselint/Malapropisms.yml +0 -8
- package/styles/proselint/Needless.yml +0 -358
- package/styles/proselint/Nonwords.yml +0 -38
- package/styles/proselint/Oxymorons.yml +0 -22
- package/styles/proselint/P-Value.yml +0 -6
- package/styles/proselint/RASSyndrome.yml +0 -30
- package/styles/proselint/README.md +0 -12
- package/styles/proselint/Skunked.yml +0 -13
- package/styles/proselint/Spelling.yml +0 -17
- package/styles/proselint/Typography.yml +0 -11
- package/styles/proselint/Uncomparables.yml +0 -50
- package/styles/proselint/Very.yml +0 -6
- package/styles/proselint/meta.json +0 -15
- package/styles/write-good/Cliches.yml +0 -702
- package/styles/write-good/E-Prime.yml +0 -32
- package/styles/write-good/Illusions.yml +0 -11
- package/styles/write-good/Passive.yml +0 -183
- package/styles/write-good/README.md +0 -27
- package/styles/write-good/So.yml +0 -5
- package/styles/write-good/ThereIs.yml +0 -6
- package/styles/write-good/TooWordy.yml +0 -221
- package/styles/write-good/Weasel.yml +0 -29
- package/styles/write-good/meta.json +0 -4
- package/test/mcp-example-test.yaml +0 -27
- package/test/test_parser.js +0 -47
- package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
- package/testdriver/acceptance-sdk/README.md +0 -128
- package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
- package/testdriver/acceptance-sdk/assert.test.mjs +0 -44
- package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +0 -42
- package/testdriver/acceptance-sdk/setup/lifecycleHelpers.mjs +0 -239
- package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
- package/testdriver/acceptance-sdk/type.test.mjs +0 -84
- package/vale.ini +0 -18
- package/vitest.config.example.js +0 -19
- package/vitest.config.mjs.bak +0 -44
- /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
- /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
- /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
- /package/{PLUGIN_MIGRATION.md → docs/v7/_drafts/plugin-migration.mdx} +0 -0
- /package/{PROMPT_CACHE.md → docs/v7/_drafts/prompt-cache.mdx} +0 -0
- /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
- /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
- /package/{SDK_LOGGING.md → docs/v7/_drafts/sdk-logging.mdx} +0 -0
- /package/{SDK_MIGRATION.md → docs/v7/_drafts/sdk-migration.mdx} +0 -0
- /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
- /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
- /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
- /package/{test-find-api.js → test/manual/test-find-api.js} +0 -0
- /package/{test-prompt-cache.js → test/manual/test-prompt-cache.js} +0 -0
- /package/{test-sandbox-render.js → test/manual/test-sandbox-render.js} +0 -0
- /package/{test-sdk-methods.js → test/manual/test-sdk-methods.js} +0 -0
- /package/{test-sdk-refactor.js → test/manual/test-sdk-refactor.js} +0 -0
- /package/{test-stack-trace.mjs → test/manual/test-stack-trace.mjs} +0 -0
- /package/{verify-element-api.js → test/manual/verify-element-api.js} +0 -0
- /package/{verify-types.js → test/manual/verify-types.js} +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/globalTeardown.mjs +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { TestDriver } from "../../lib/vitest/hooks.mjs";
|
|
3
|
+
|
|
4
|
+
describe("Type Test", () => {
|
|
5
|
+
it("should enter standard_user in username field", async (context) => {
|
|
6
|
+
const testdriver = TestDriver(context, { headless: true });
|
|
7
|
+
await testdriver.provision.chrome({ url: 'http://testdriver-sandbox.vercel.app/login' });
|
|
8
|
+
|
|
9
|
+
//
|
|
10
|
+
const usernameField = await testdriver.find(
|
|
11
|
+
"Username, input field for username",
|
|
12
|
+
);
|
|
13
|
+
await usernameField.click();
|
|
14
|
+
await testdriver.type("standard_user");
|
|
15
|
+
|
|
16
|
+
const result = await testdriver.assert(
|
|
17
|
+
'the username field contains "standard_user"',
|
|
18
|
+
);
|
|
19
|
+
expect(result).toBeTruthy();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("should show validation message when clicking Sign In without password", async (context) => {
|
|
23
|
+
const testdriver = TestDriver(context, { headless: true });
|
|
24
|
+
await testdriver.provision.chrome({ url: 'http://testdriver-sandbox.vercel.app/login' });
|
|
25
|
+
|
|
26
|
+
// First fill in username
|
|
27
|
+
const usernameField = await testdriver.find(
|
|
28
|
+
"Username, input field for username",
|
|
29
|
+
);
|
|
30
|
+
await usernameField.click();
|
|
31
|
+
await testdriver.type("standard_user");
|
|
32
|
+
|
|
33
|
+
//
|
|
34
|
+
const signInButton = await testdriver.find(
|
|
35
|
+
"Sign in, black button below the password field",
|
|
36
|
+
);
|
|
37
|
+
await signInButton.click();
|
|
38
|
+
|
|
39
|
+
await testdriver.focusApplication("Google Chrome");
|
|
40
|
+
const result = await testdriver.assert(
|
|
41
|
+
"Please fill out this field is visible near the password field",
|
|
42
|
+
);
|
|
43
|
+
expect(result).toBeTruthy();
|
|
44
|
+
});
|
|
45
|
+
});
|
package/vitest.config.mjs
CHANGED
|
@@ -1,65 +1,20 @@
|
|
|
1
|
-
import { config } from
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { config } from 'dotenv';
|
|
2
|
+
import TestDriver from 'testdriverai/vitest';
|
|
3
|
+
import { defineConfig } from 'vitest/config';
|
|
4
4
|
|
|
5
|
-
// Load
|
|
5
|
+
// Load .env file early so it's available to the reporter (runs in main process)
|
|
6
|
+
// and to worker processes
|
|
6
7
|
config();
|
|
7
8
|
|
|
8
9
|
export default defineConfig({
|
|
9
|
-
plugins: [
|
|
10
|
-
testDriverPlugin({
|
|
11
|
-
apiKey: process.env.TD_API_KEY,
|
|
12
|
-
apiRoot: process.env.TD_API_ROOT || "https://testdriver-api.onrender.com",
|
|
13
|
-
}),
|
|
14
|
-
],
|
|
15
|
-
|
|
16
10
|
test: {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Setup file to initialize plugin in worker processes
|
|
21
|
-
setupFiles: ["./testdriver/acceptance-sdk/setup/vitestSetup.mjs"],
|
|
22
|
-
|
|
23
|
-
// Timeout settings
|
|
24
|
-
testTimeout: 600000, // 10 minutes per test
|
|
25
|
-
hookTimeout: 600000, // 10 minutes for setup/teardown
|
|
26
|
-
teardownTimeout: 120000, // 2 minutes for teardown specifically
|
|
27
|
-
|
|
28
|
-
globalTeardown: "./testdriver/acceptance-sdk/setup/globalTeardown.mjs",
|
|
29
|
-
|
|
30
|
-
// Reporter configuration
|
|
11
|
+
testTimeout: 120000,
|
|
12
|
+
hookTimeout: 120000,
|
|
31
13
|
reporters: [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
["html", { outputFile: "test-results/index.html" }],
|
|
36
|
-
[
|
|
37
|
-
"./interfaces/vitest-plugin.mjs",
|
|
38
|
-
{
|
|
39
|
-
apiKey: process.env.TD_API_KEY,
|
|
40
|
-
apiRoot:
|
|
41
|
-
process.env.TD_API_ROOT || "https://testdriver-api.onrender.com",
|
|
42
|
-
},
|
|
43
|
-
], // TestDriver test recording
|
|
14
|
+
'default',
|
|
15
|
+
// Don't pass apiKey/apiRoot here - they'll be read from env at runtime
|
|
16
|
+
TestDriver(),
|
|
44
17
|
],
|
|
45
|
-
|
|
46
|
-
// Use forks for isolation, run tests in parallel
|
|
47
|
-
pool: "forks",
|
|
48
|
-
poolOptions: {
|
|
49
|
-
forks: {
|
|
50
|
-
singleFork: false,
|
|
51
|
-
maxForks: 5, // Reduced from 10 to prevent resource contention
|
|
52
|
-
minForks: 1,
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
// Enable parallel execution
|
|
57
|
-
sequence: {
|
|
58
|
-
concurrent: true,
|
|
59
|
-
shuffle: false,
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
fileParallelism: true,
|
|
63
|
-
maxConcurrency: 5, // Reduced from 10 to match maxForks
|
|
18
|
+
setupFiles: ['testdriverai/vitest/setup'],
|
|
64
19
|
},
|
|
65
20
|
});
|
package/.github/dependabot.yml
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
-
# package ecosystems to update and where the package manifests are located.
|
|
3
|
-
# Please see the documentation for all configuration options:
|
|
4
|
-
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yaml-file
|
|
5
|
-
|
|
6
|
-
version: 2
|
|
7
|
-
updates:
|
|
8
|
-
- package-ecosystem: "npm" # See documentation for possible values
|
|
9
|
-
directory: "/" # Location of package manifests
|
|
10
|
-
schedule:
|
|
11
|
-
interval: "weekly"
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
name: v6 Linux
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
push:
|
|
6
|
-
branches:
|
|
7
|
-
- main
|
|
8
|
-
paths-ignore:
|
|
9
|
-
- "docs/**"
|
|
10
|
-
pull_request:
|
|
11
|
-
branches:
|
|
12
|
-
- main
|
|
13
|
-
|
|
14
|
-
schedule:
|
|
15
|
-
- cron: "0 0 * * *"
|
|
16
|
-
|
|
17
|
-
jobs:
|
|
18
|
-
# Job to gather all test files
|
|
19
|
-
test-setup:
|
|
20
|
-
runs-on: ubuntu-latest
|
|
21
|
-
steps:
|
|
22
|
-
- uses: actions/checkout@v3
|
|
23
|
-
- uses: actions/setup-node@v3
|
|
24
|
-
with:
|
|
25
|
-
node-version: 22
|
|
26
|
-
cache: npm
|
|
27
|
-
- run: npm ci
|
|
28
|
-
|
|
29
|
-
gather:
|
|
30
|
-
name: Gather Test Files
|
|
31
|
-
runs-on: ubuntu-latest
|
|
32
|
-
outputs:
|
|
33
|
-
test_files: ${{ steps.test_list.outputs.files }}
|
|
34
|
-
steps:
|
|
35
|
-
- name: Check out repository
|
|
36
|
-
uses: actions/checkout@v2
|
|
37
|
-
|
|
38
|
-
- name: Find all test files
|
|
39
|
-
id: test_list
|
|
40
|
-
run: |
|
|
41
|
-
FILES=$(ls ./testdriver/acceptance/*.yaml)
|
|
42
|
-
FILENAMES=$(basename -a $FILES)
|
|
43
|
-
FILES_JSON=$(echo "$FILENAMES" | jq -R -s -c 'split("\n")[:-1]')
|
|
44
|
-
echo "files=$FILES_JSON" >> $GITHUB_OUTPUT
|
|
45
|
-
test:
|
|
46
|
-
needs:
|
|
47
|
-
- gather
|
|
48
|
-
runs-on: ubuntu-latest
|
|
49
|
-
strategy:
|
|
50
|
-
matrix:
|
|
51
|
-
test: ${{ fromJson(needs.gather.outputs.test_files) }}
|
|
52
|
-
max-parallel: 8
|
|
53
|
-
fail-fast: false
|
|
54
|
-
steps:
|
|
55
|
-
- name: Checkout repository
|
|
56
|
-
uses: actions/checkout@v4
|
|
57
|
-
with:
|
|
58
|
-
fetch-depth: 0
|
|
59
|
-
|
|
60
|
-
- name: Set up Node.js
|
|
61
|
-
uses: actions/setup-node@v4
|
|
62
|
-
with:
|
|
63
|
-
node-version: "20"
|
|
64
|
-
cache: "npm"
|
|
65
|
-
|
|
66
|
-
- name: Install dependencies
|
|
67
|
-
run: NODE_ENV=production npm ci
|
|
68
|
-
- name: Run test in headless mode
|
|
69
|
-
run: node bin/testdriverai.js run testdriver/acceptance/${{ matrix.test }} --junit=out.xml
|
|
70
|
-
env:
|
|
71
|
-
FORCE_COLOR: 3
|
|
72
|
-
TD_API_KEY: 49c2996c-0687-40bf-9f2c-5d2e55b2a2c6
|
|
73
|
-
TD_WEBSITE: https://testdriver-sandbox.vercel.app
|
|
74
|
-
TD_THIS_FILE: ${{ matrix.test }}
|
|
75
|
-
TD_API_ROOT: "https://replayable-dev-ian-mac-m1-16.ngrok.io"
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
name: Acceptance SDK Tests
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
push:
|
|
8
|
-
branches: [main]
|
|
9
|
-
paths-ignore:
|
|
10
|
-
- "docs/**"
|
|
11
|
-
# So that we can manually trigger tests when there's flake
|
|
12
|
-
workflow_dispatch:
|
|
13
|
-
|
|
14
|
-
jobs:
|
|
15
|
-
test-workflow:
|
|
16
|
-
name: Run SDK Tests - ${{ matrix.platform }}
|
|
17
|
-
runs-on: ubuntu-latest
|
|
18
|
-
timeout-minutes: 30
|
|
19
|
-
strategy:
|
|
20
|
-
fail-fast: false
|
|
21
|
-
matrix:
|
|
22
|
-
platform: [linux, windows]
|
|
23
|
-
steps:
|
|
24
|
-
- name: Checkout repository
|
|
25
|
-
uses: actions/checkout@v4
|
|
26
|
-
with:
|
|
27
|
-
fetch-depth: 0
|
|
28
|
-
|
|
29
|
-
- name: Set up Node.js
|
|
30
|
-
uses: actions/setup-node@v4
|
|
31
|
-
with:
|
|
32
|
-
node-version: "20"
|
|
33
|
-
cache: "npm"
|
|
34
|
-
|
|
35
|
-
- name: Install dependencies
|
|
36
|
-
run: npm ci
|
|
37
|
-
|
|
38
|
-
- name: Run ESLint
|
|
39
|
-
run: npx eslint . --max-warnings 0
|
|
40
|
-
|
|
41
|
-
- name: Run Prettier
|
|
42
|
-
run: npx prettier --check .
|
|
43
|
-
|
|
44
|
-
- name: Run SDK tests with Vitest - ${{ matrix.platform }}
|
|
45
|
-
run: npx vitest run testdriver/acceptance-sdk/*.test.mjs
|
|
46
|
-
env:
|
|
47
|
-
FORCE_COLOR: 3
|
|
48
|
-
TD_API_KEY: ${{ secrets.TESTDRIVER_API_KEY }}
|
|
49
|
-
TEST_PLATFORM: ${{ matrix.platform }}
|
|
50
|
-
VERBOSE: true
|
|
51
|
-
LOGGING: true
|
|
52
|
-
continue-on-error: true
|
|
53
|
-
|
|
54
|
-
- name: Generate GitHub Summary
|
|
55
|
-
if: always()
|
|
56
|
-
run: |
|
|
57
|
-
echo "# 🧪 TestDriver SDK Test Results" >> $GITHUB_STEP_SUMMARY
|
|
58
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
59
|
-
|
|
60
|
-
if [ -f test-results/results.json ]; then
|
|
61
|
-
node -e "
|
|
62
|
-
const fs = require('fs');
|
|
63
|
-
const results = JSON.parse(fs.readFileSync('test-results/results.json', 'utf8'));
|
|
64
|
-
|
|
65
|
-
const total = results.numTotalTests || 0;
|
|
66
|
-
const passed = results.numPassedTests || 0;
|
|
67
|
-
const failed = results.numFailedTests || 0;
|
|
68
|
-
const skipped = results.numPendingTests || 0;
|
|
69
|
-
const duration = ((results.testResults?.[0]?.endTime - results.testResults?.[0]?.startTime) / 1000 || 0).toFixed(2);
|
|
70
|
-
|
|
71
|
-
console.log('## 📊 Overview\n');
|
|
72
|
-
console.log('| Metric | Count |');
|
|
73
|
-
console.log('|--------|-------|');
|
|
74
|
-
console.log('| ✅ Passed | ' + passed + ' |');
|
|
75
|
-
console.log('| ❌ Failed | ' + failed + ' |');
|
|
76
|
-
console.log('| ⏭️ Skipped | ' + skipped + ' |');
|
|
77
|
-
console.log('| 📝 Total | ' + total + ' |');
|
|
78
|
-
console.log('| ⏱️ Duration | ' + duration + 's |');
|
|
79
|
-
console.log('');
|
|
80
|
-
|
|
81
|
-
if (failed > 0) {
|
|
82
|
-
console.log('## ❌ Failed Tests\n');
|
|
83
|
-
results.testResults?.forEach(file => {
|
|
84
|
-
file.assertionResults?.filter(test => test.status === 'failed').forEach(test => {
|
|
85
|
-
console.log('### ' + test.fullName);
|
|
86
|
-
console.log('**File:** \`' + file.name + '\`');
|
|
87
|
-
console.log('');
|
|
88
|
-
if (test.failureMessages?.length > 0) {
|
|
89
|
-
console.log('**Error:**');
|
|
90
|
-
console.log('\`\`\`');
|
|
91
|
-
console.log(test.failureMessages.join('\n').substring(0, 1000));
|
|
92
|
-
console.log('\`\`\`');
|
|
93
|
-
console.log('');
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (passed > 0) {
|
|
100
|
-
console.log('## ✅ Passed Tests\n');
|
|
101
|
-
results.testResults?.forEach(file => {
|
|
102
|
-
const passedTests = file.assertionResults?.filter(test => test.status === 'passed') || [];
|
|
103
|
-
if (passedTests.length > 0) {
|
|
104
|
-
console.log('### ' + file.name.split('/').pop());
|
|
105
|
-
passedTests.forEach(test => {
|
|
106
|
-
console.log('- ✅ ' + test.title);
|
|
107
|
-
});
|
|
108
|
-
console.log('');
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
" >> $GITHUB_STEP_SUMMARY
|
|
113
|
-
else
|
|
114
|
-
echo "⚠️ No test results found" >> $GITHUB_STEP_SUMMARY
|
|
115
|
-
fi
|
|
116
|
-
|
|
117
|
-
- name: Test Summary (JUnit)
|
|
118
|
-
uses: test-summary/action@v2
|
|
119
|
-
with:
|
|
120
|
-
paths: "test-results/junit.xml"
|
|
121
|
-
if: always()
|
|
122
|
-
|
|
123
|
-
- name: Upload test results
|
|
124
|
-
if: always()
|
|
125
|
-
uses: actions/upload-artifact@v4
|
|
126
|
-
with:
|
|
127
|
-
name: test-results-${{ matrix.platform }}
|
|
128
|
-
path: |
|
|
129
|
-
test-results/junit.xml
|
|
130
|
-
test-results/results.json
|
|
131
|
-
test-results/index.html
|
|
132
|
-
retention-days: 7
|
|
133
|
-
if-no-files-found: ignore
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
name: Acceptance Tests
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
# So that we do a final check before publishing
|
|
5
|
-
pull_request_review:
|
|
6
|
-
types: [submitted]
|
|
7
|
-
# So that we don't do expensive tests until approved
|
|
8
|
-
push:
|
|
9
|
-
branches: [main]
|
|
10
|
-
paths-ignore:
|
|
11
|
-
- "docs/**"
|
|
12
|
-
# So that we can manually trigger tests when there's flake
|
|
13
|
-
workflow_dispatch:
|
|
14
|
-
|
|
15
|
-
jobs:
|
|
16
|
-
gather-test-files:
|
|
17
|
-
name: Gather Test Files
|
|
18
|
-
runs-on: ubuntu-latest
|
|
19
|
-
if: >
|
|
20
|
-
(github.event_name == 'workflow_dispatch') ||
|
|
21
|
-
(github.ref == 'refs/heads/main') ||
|
|
22
|
-
(github.event_name == 'pull_request_review' &&
|
|
23
|
-
(github.event.review.state == 'approved' || github.event.review.state == 'changes_requested'))
|
|
24
|
-
outputs:
|
|
25
|
-
test_files: ${{ steps.test_list.outputs.files }}
|
|
26
|
-
steps:
|
|
27
|
-
- name: Check out repository
|
|
28
|
-
uses: actions/checkout@v2
|
|
29
|
-
|
|
30
|
-
- name: Find all test files
|
|
31
|
-
id: test_list
|
|
32
|
-
run: |
|
|
33
|
-
FILES=$(ls ./testdriver/acceptance/*.yaml)
|
|
34
|
-
FILENAMES=$(basename -a $FILES)
|
|
35
|
-
FILES_JSON=$(echo "$FILENAMES" | jq -R -s -c 'split("\n")[:-1]')
|
|
36
|
-
echo "files=$FILES_JSON" >> $GITHUB_OUTPUT
|
|
37
|
-
test-workflow:
|
|
38
|
-
needs:
|
|
39
|
-
- gather-test-files
|
|
40
|
-
runs-on: ubuntu-latest
|
|
41
|
-
timeout-minutes: 10
|
|
42
|
-
|
|
43
|
-
strategy:
|
|
44
|
-
matrix:
|
|
45
|
-
test: ${{ fromJson(needs.gather-test-files.outputs.test_files) }}
|
|
46
|
-
max-parallel: 8
|
|
47
|
-
fail-fast: false
|
|
48
|
-
|
|
49
|
-
steps:
|
|
50
|
-
- name: Checkout repository
|
|
51
|
-
uses: actions/checkout@v4
|
|
52
|
-
with:
|
|
53
|
-
fetch-depth: 0
|
|
54
|
-
|
|
55
|
-
- name: Set up Node.js
|
|
56
|
-
uses: actions/setup-node@v4
|
|
57
|
-
with:
|
|
58
|
-
node-version: "20"
|
|
59
|
-
cache: "npm"
|
|
60
|
-
|
|
61
|
-
- name: Install dependencies
|
|
62
|
-
run: NODE_ENV=production npm ci
|
|
63
|
-
|
|
64
|
-
- name: Run test in headless mode
|
|
65
|
-
run: node bin/testdriverai.js run testdriver/acceptance/${{ matrix.test }}
|
|
66
|
-
env:
|
|
67
|
-
FORCE_COLOR: 3
|
|
68
|
-
TD_API_KEY: ${{ secrets.TESTDRIVER_API_KEY }}
|
|
69
|
-
TD_WEBSITE: https://testdriver-sandbox.vercel.app
|
|
70
|
-
TD_THIS_FILE: ${{ matrix.test }}
|
|
71
|
-
#
|
|
72
|
-
# TODO: Add snippets back, but this should only happen on `main`
|
|
73
|
-
# - name: Write MDX snippets separately
|
|
74
|
-
# run: |
|
|
75
|
-
# mkdir -p snippets
|
|
76
|
-
# FILE_NAME=$(basename "${{ matrix.test }}" .yaml)
|
|
77
|
-
# TEST_FILE="testdriver/${FILE_NAME}.yaml"
|
|
78
|
-
|
|
79
|
-
# EMBED_URL="${{ steps.testdriver.outputs.link }}"
|
|
80
|
-
# PARAMS="embed=true×tamp=90000&playbackRate=5"
|
|
81
|
-
|
|
82
|
-
# if [[ "$EMBED_URL" == *\?* ]]; then
|
|
83
|
-
# EMBED_URL="${EMBED_URL}&${PARAMS}"
|
|
84
|
-
# else
|
|
85
|
-
# EMBED_URL="${EMBED_URL}?${PARAMS}"
|
|
86
|
-
# fi
|
|
87
|
-
|
|
88
|
-
# # Write iframe MDX
|
|
89
|
-
# echo "<iframe src=\"$EMBED_URL\" width=\"100%\" height=\"300\" />" > "snippets/${FILE_NAME}-replay.mdx"
|
|
90
|
-
|
|
91
|
-
# # Write YAML MDX
|
|
92
|
-
# echo '```yaml' > "snippets/${FILE_NAME}-yaml.mdx"
|
|
93
|
-
# cat "$TEST_FILE" >> "snippets/${FILE_NAME}-yaml.mdx"
|
|
94
|
-
# echo '```' >> "snippets/${FILE_NAME}-yaml.mdx"
|
|
95
|
-
|
|
96
|
-
# - name: Upload snippets artifact
|
|
97
|
-
# uses: actions/upload-artifact@v4
|
|
98
|
-
# with:
|
|
99
|
-
# name: snippets-${{ matrix.os }}-${{ matrix.test }}
|
|
100
|
-
# path: snippets/
|
|
101
|
-
# retention-days: 1
|
|
102
|
-
|
|
103
|
-
# create-snippets-commit:
|
|
104
|
-
# name: Commit Snippets
|
|
105
|
-
# needs: run-tests
|
|
106
|
-
# runs-on: ubuntu-latest
|
|
107
|
-
# env:
|
|
108
|
-
# BASE_BRANCH: ${{ github.ref_name }}
|
|
109
|
-
# steps:
|
|
110
|
-
# - name: Check out current branch
|
|
111
|
-
# uses: actions/checkout@v3
|
|
112
|
-
# with:
|
|
113
|
-
# token: ${{ secrets.GH_TOKEN }}
|
|
114
|
-
# ref: ${{ github.head_ref }}
|
|
115
|
-
# - name: Download all snippets artifacts
|
|
116
|
-
# uses: actions/download-artifact@v4
|
|
117
|
-
# with:
|
|
118
|
-
# path: docs/snippets/tests
|
|
119
|
-
# pattern: snippets-*
|
|
120
|
-
# merge-multiple: true
|
|
121
|
-
|
|
122
|
-
# - name: Commit updated snippets
|
|
123
|
-
# uses: EndBug/add-and-commit@v9
|
|
124
|
-
# with:
|
|
125
|
-
# author_name: github-actions[bot]
|
|
126
|
-
# author_email: github-actions[bot]@users.noreply.github.com
|
|
127
|
-
# message: "Update test snippets [skip ci]"
|
|
128
|
-
# add: "docs/snippets/tests"
|
|
129
|
-
# new_branch: ${{ github.head_ref }}
|
|
130
|
-
# tag_push: "--force-with-lease"
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Ensure affected code follows standards and is formatted correctly. Otherwise, automatic formatting in future changes will cause larger diffs.
|
|
2
|
-
name: Lint + Prettier
|
|
3
|
-
|
|
4
|
-
on:
|
|
5
|
-
push:
|
|
6
|
-
paths-ignore:
|
|
7
|
-
- "docs/**"
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
lint:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
steps:
|
|
13
|
-
- uses: actions/checkout@v2
|
|
14
|
-
with:
|
|
15
|
-
# We need to fetch the full history to check for changes since `main`
|
|
16
|
-
fetch-depth: 0
|
|
17
|
-
- name: Set up Node.js
|
|
18
|
-
uses: actions/setup-node@v2
|
|
19
|
-
with:
|
|
20
|
-
node-version: 20
|
|
21
|
-
- name: npm ci
|
|
22
|
-
run: npm ci --ignore-scripts
|
|
23
|
-
- name: Run ESLint
|
|
24
|
-
run: npx eslint . --max-warnings 0
|
|
25
|
-
# Only check files that have been Added/Created/Modified/Renamed/Type-changed since `main`
|
|
26
|
-
- name: Run Prettier
|
|
27
|
-
run: git diff --name-only --diff-filter=ACMRT origin/main HEAD | xargs -r npx prettier --check --ignore-unknown
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
name: Publish @canary to NPM
|
|
2
|
-
|
|
3
|
-
permissions:
|
|
4
|
-
contents: write
|
|
5
|
-
pull-requests: write
|
|
6
|
-
actions: read
|
|
7
|
-
statuses: write
|
|
8
|
-
|
|
9
|
-
on:
|
|
10
|
-
# So that we publish for every push to `main`, despite tests
|
|
11
|
-
push:
|
|
12
|
-
branches: [main]
|
|
13
|
-
paths-ignore:
|
|
14
|
-
- "docs/**"
|
|
15
|
-
workflow_dispatch:
|
|
16
|
-
|
|
17
|
-
jobs:
|
|
18
|
-
publish-canary:
|
|
19
|
-
name: Publish testdriverai@canary
|
|
20
|
-
runs-on: ubuntu-latest
|
|
21
|
-
permissions:
|
|
22
|
-
contents: read
|
|
23
|
-
id-token: write
|
|
24
|
-
steps:
|
|
25
|
-
- name: Check out the repository
|
|
26
|
-
uses: actions/checkout@v4
|
|
27
|
-
- name: Set up Node.js
|
|
28
|
-
uses: actions/setup-node@v3
|
|
29
|
-
with:
|
|
30
|
-
node-version: "20"
|
|
31
|
-
registry-url: "https://registry.npmjs.org"
|
|
32
|
-
|
|
33
|
-
- name: Version the package
|
|
34
|
-
run: npm version --no-git-tag-version prerelease --preid=canary.$(git rev-parse --short HEAD)
|
|
35
|
-
|
|
36
|
-
- name: Publish to canary and beta tags
|
|
37
|
-
run: |
|
|
38
|
-
npm publish --tag canary
|
|
39
|
-
env:
|
|
40
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# `main` is always published to `testdriverai@latest`. Checks are performed in PRs and the Merge Queue to ensure a healthy `main` branch."
|
|
2
|
-
name: Publish @latest to NPM
|
|
3
|
-
|
|
4
|
-
on:
|
|
5
|
-
workflow_dispatch:
|
|
6
|
-
workflow_run:
|
|
7
|
-
workflows: ["Acceptance Tests"]
|
|
8
|
-
branches: [main]
|
|
9
|
-
types: [completed]
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
bump_version:
|
|
13
|
-
name: "Bump Version"
|
|
14
|
-
if: ${{ github.event.workflow_run.conclusion == 'success' && !contains(github.event.workflow_run.head_commit.message, '[skip ci]') }}
|
|
15
|
-
runs-on: ubuntu-latest
|
|
16
|
-
steps:
|
|
17
|
-
- name: Checkout code
|
|
18
|
-
uses: actions/checkout@v4
|
|
19
|
-
with:
|
|
20
|
-
ref: ${{ github.ref }}
|
|
21
|
-
persist-credentials: false
|
|
22
|
-
- name: Set up Node.js
|
|
23
|
-
uses: actions/setup-node@v3
|
|
24
|
-
with:
|
|
25
|
-
node-version: "20"
|
|
26
|
-
- name: Configure Git user
|
|
27
|
-
run: |
|
|
28
|
-
git config --global user.name "github-actions[bot]"
|
|
29
|
-
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
30
|
-
- name: "Bump version"
|
|
31
|
-
run: npm version patch -m "Bump version to %s [skip ci]"
|
|
32
|
-
|
|
33
|
-
- name: Push changes to main
|
|
34
|
-
run: |
|
|
35
|
-
git push https://${{ secrets.GH_TOKEN }}@github.com/testdriverai/testdriverai.git HEAD:main --force
|
|
36
|
-
|
|
37
|
-
publish-latest:
|
|
38
|
-
name: Publish testdriverai@latest
|
|
39
|
-
needs: bump_version
|
|
40
|
-
runs-on: ubuntu-latest
|
|
41
|
-
steps:
|
|
42
|
-
- uses: actions/checkout@v4
|
|
43
|
-
with:
|
|
44
|
-
ref: ${{ github.ref }}
|
|
45
|
-
- uses: actions/setup-node@v3
|
|
46
|
-
with:
|
|
47
|
-
node-version: "20"
|
|
48
|
-
- uses: JS-DevTools/npm-publish@v3
|
|
49
|
-
with:
|
|
50
|
-
token: ${{ secrets.NPM_AUTH_TOKEN }}
|
|
51
|
-
|
|
52
|
-
trigger-vscode-build:
|
|
53
|
-
runs-on: ubuntu-latest
|
|
54
|
-
needs: publish-latest
|
|
55
|
-
steps:
|
|
56
|
-
- name: Trigger VSCode Build + Publish
|
|
57
|
-
uses: peter-evans/repository-dispatch@v3
|
|
58
|
-
with:
|
|
59
|
-
repository: testdriverai/vscode
|
|
60
|
-
event-type: cli-publish
|
|
61
|
-
token: ${{ secrets.GH_TOKEN }}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Ensure that the published `testdriverai` package is installable on multiple version of Node.js across multiple operating systems.
|
|
2
|
-
name: Test TestDriverAI Installation
|
|
3
|
-
|
|
4
|
-
on:
|
|
5
|
-
schedule:
|
|
6
|
-
- cron: "0 * * * *" # Runs every hour
|
|
7
|
-
workflow_dispatch:
|
|
8
|
-
merge_group:
|
|
9
|
-
|
|
10
|
-
jobs:
|
|
11
|
-
install-testdriverai:
|
|
12
|
-
runs-on: ${{ matrix.runner }}
|
|
13
|
-
strategy:
|
|
14
|
-
fail-fast: false
|
|
15
|
-
matrix:
|
|
16
|
-
runner: [macos-latest, windows-latest]
|
|
17
|
-
node-version: ["18", "20", "22"]
|
|
18
|
-
|
|
19
|
-
steps:
|
|
20
|
-
- name: Checkout repository
|
|
21
|
-
uses: actions/checkout@v4
|
|
22
|
-
|
|
23
|
-
- name: Set up Node.js ${{ matrix.node-version }}
|
|
24
|
-
uses: actions/setup-node@v4
|
|
25
|
-
with:
|
|
26
|
-
node-version: ${{ matrix.node-version }}
|
|
27
|
-
|
|
28
|
-
- name: Verify `testdriverai` is executable
|
|
29
|
-
run: npx testdriverai@latest -y --help
|
package/.vscode/extensions.json
DELETED
package/.vscode/launch.json
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// Use IntelliSense to learn about possible attributes.
|
|
3
|
-
// Hover to view descriptions of existing attributes.
|
|
4
|
-
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
-
"version": "0.2.0",
|
|
6
|
-
"configurations": [
|
|
7
|
-
{
|
|
8
|
-
"name": "Attach",
|
|
9
|
-
"port": 9229,
|
|
10
|
-
"request": "attach",
|
|
11
|
-
"skipFiles": ["<node_internals>/**"],
|
|
12
|
-
"type": "node"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"type": "node",
|
|
16
|
-
"request": "launch",
|
|
17
|
-
"name": "Launch Program",
|
|
18
|
-
"skipFiles": ["<node_internals>/**"],
|
|
19
|
-
"program": "${workspaceFolder}/index.js"
|
|
20
|
-
}
|
|
21
|
-
]
|
|
22
|
-
}
|
package/.vscode/mcp.json
DELETED
package/.vscode/settings.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"editor.codeActionsOnSave": {
|
|
3
|
-
"source.organizeImports": "explicit"
|
|
4
|
-
},
|
|
5
|
-
"editor.formatOnSave": true,
|
|
6
|
-
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
7
|
-
"yaml.schemas": {
|
|
8
|
-
"https://raw.githubusercontent.com/testdriverai/testdriverai/main/schema.json": "file:///Users/kid/Desktop/td/internal/testdriverai/testdriver.yaml"
|
|
9
|
-
},
|
|
10
|
-
"vitest.enable": true,
|
|
11
|
-
"vitest.commandLine": "npx vitest --watch",
|
|
12
|
-
"vitest.include": ["**/testdriver/acceptance-sdk/*.test.mjs"],
|
|
13
|
-
"vitest.exclude": []
|
|
14
|
-
}
|