@muuktest/amikoo-reporter 1.2.0 → 1.3.2-beta.0
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/README.md +69 -13
- package/dist/amikooArtifacts.d.ts +1 -0
- package/dist/amikooArtifacts.d.ts.map +1 -1
- package/dist/amikooArtifacts.js +24 -0
- package/dist/amikooArtifacts.js.map +1 -1
- package/dist/apiUtils.d.ts +1 -1
- package/dist/apiUtils.d.ts.map +1 -1
- package/dist/apiUtils.js +26 -2
- package/dist/apiUtils.js.map +1 -1
- package/dist/controlHubReporter.d.ts.map +1 -1
- package/dist/controlHubReporter.js +19 -5
- package/dist/controlHubReporter.js.map +1 -1
- package/dist/gitUtils.d.ts.map +1 -1
- package/dist/gitUtils.js +0 -5
- package/dist/gitUtils.js.map +1 -1
- package/dist/videoUtils.d.ts.map +1 -1
- package/dist/videoUtils.js +6 -1
- package/dist/videoUtils.js.map +1 -1
- package/install.js +302 -35
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -12,24 +12,74 @@ Playwright reporter for Amikoo - Automatically installs and configures test repo
|
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
|
15
|
-
Install the package
|
|
15
|
+
Install the package:
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
npm install @muuktest/amikoo-reporter
|
|
18
|
+
npm install --save-dev @muuktest/amikoo-reporter
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
Then set your key in `.env.amikoo` (created automatically) or `.env`:
|
|
22
|
+
|
|
23
|
+
```dotenv
|
|
24
|
+
AMIKOO_KEY=your_amikoo_key_here
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Alternatively, install and configure the key in one command:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install --save-dev @muuktest/amikoo-reporter --amikoo-key=YOUR_KEY
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Or for CI/environments with env vars:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
AMIKOO_KEY=YOUR_KEY npm install --save-dev @muuktest/amikoo-reporter
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### One-command setup (no prior install needed)
|
|
40
|
+
|
|
41
|
+
You can also skip the manual `npm install` step. Running `init` via `npx` will
|
|
42
|
+
install `@muuktest/amikoo-reporter` as a devDependency in your project if it
|
|
43
|
+
isn't already there, then configure everything:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx @muuktest/amikoo-reporter init --amikoo-key=YOUR_KEY
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Works with `npm`, `pnpm`, `yarn`, and `bun` — the correct package manager is
|
|
50
|
+
detected from your lockfile. If your project has no `package.json` yet, a
|
|
51
|
+
minimal one will be created.
|
|
52
|
+
|
|
53
|
+
The installer will automatically:
|
|
54
|
+
- ✅ Install `@muuktest/amikoo-reporter` as a devDependency (when invoked as `init` and it isn't already installed)
|
|
55
|
+
- ✅ Configure or create your `playwright.config.ts` (or `.js`) with the reporter and `video: 'on'`
|
|
56
|
+
- ✅ Configure `.env.amikoo` (primary) or update `.env` (backward compatible) with your `AMIKOO_KEY`
|
|
57
|
+
|
|
58
|
+
## Re-initialize / Repair when already installed
|
|
59
|
+
|
|
60
|
+
If your config gets broken or you need to re-run the setup:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npx amikoo-reporter init --amikoo-key=YOUR_KEY
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This is idempotent — safe to run multiple times.
|
|
24
67
|
|
|
25
68
|
## Configuration
|
|
26
69
|
|
|
27
|
-
|
|
70
|
+
### AMIKOO_KEY
|
|
71
|
+
|
|
72
|
+
The key is stored in `.env.amikoo` (preferred) or `.env` (backward compatible):
|
|
28
73
|
|
|
29
74
|
```dotenv
|
|
30
75
|
AMIKOO_KEY=your_amikoo_key_here
|
|
31
76
|
```
|
|
32
77
|
|
|
78
|
+
**Priority order:**
|
|
79
|
+
1. Shell environment (`export AMIKOO_KEY=...`) — always wins
|
|
80
|
+
2. `.env.amikoo` file — loaded automatically at test time
|
|
81
|
+
3. `.env` file — fallback for existing projects
|
|
82
|
+
|
|
33
83
|
### How to obtain the key
|
|
34
84
|
|
|
35
85
|
- **AMIKOO_KEY**: Obtain from Amikoo application under your account settings or API keys section.
|
|
@@ -45,8 +95,8 @@ your-project/
|
|
|
45
95
|
├── tests/
|
|
46
96
|
│ └── ... your test files
|
|
47
97
|
├── playwright.config.ts (configured automatically)
|
|
48
|
-
├── .env (
|
|
49
|
-
├──
|
|
98
|
+
├── .env.amikoo (AMIKOO_KEY configured here)
|
|
99
|
+
├── node_modules/
|
|
50
100
|
│ └── @muuktest/ (installation folder for amikoo-reporter)
|
|
51
101
|
└── package.json
|
|
52
102
|
```
|
|
@@ -84,8 +134,8 @@ import { defineConfig } from '@playwright/test';
|
|
|
84
134
|
export default defineConfig({
|
|
85
135
|
reporter: [['@muuktest/amikoo-reporter']],
|
|
86
136
|
use: {
|
|
87
|
-
video: 'on',
|
|
88
|
-
screenshot: 'on'
|
|
137
|
+
video: 'on',
|
|
138
|
+
screenshot: 'on',
|
|
89
139
|
},
|
|
90
140
|
// ... rest of your config
|
|
91
141
|
});
|
|
@@ -94,13 +144,19 @@ export default defineConfig({
|
|
|
94
144
|
## Troubleshooting
|
|
95
145
|
|
|
96
146
|
### Reporter not found
|
|
97
|
-
|
|
147
|
+
Reinstall and fix in a single command:
|
|
148
|
+
```bash
|
|
149
|
+
npm install --save-dev @muuktest/amikoo-reporter && npx amikoo-reporter init
|
|
150
|
+
```
|
|
98
151
|
|
|
99
152
|
### API key errors
|
|
100
|
-
Verify your `.env` file contains a valid `AMIKOO_KEY`.
|
|
153
|
+
Verify your `.env.amikoo` (or `.env`) file contains a valid `AMIKOO_KEY`. You can also run:
|
|
154
|
+
```bash
|
|
155
|
+
npx amikoo-reporter init --amikoo-key=YOUR_KEY
|
|
156
|
+
```
|
|
101
157
|
|
|
102
158
|
### Videos not uploading
|
|
103
|
-
|
|
159
|
+
The installer enforces `video: 'on'` automatically. If missing, run `npx amikoo-reporter init` to fix.
|
|
104
160
|
|
|
105
161
|
## Advanced Configuration
|
|
106
162
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amikooArtifacts.d.ts","sourceRoot":"","sources":["../controlHub/amikooArtifacts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"amikooArtifacts.d.ts","sourceRoot":"","sources":["../controlHub/amikooArtifacts.ts"],"names":[],"mappings":"AAiBA,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAUjE;AAuBD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EACjE,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,cAAc,EAAE,CAclB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
package/dist/amikooArtifacts.js
CHANGED
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.detectAmikooKeySource = detectAmikooKeySource;
|
|
6
7
|
exports.collectAmikooArtifacts = collectAmikooArtifacts;
|
|
7
8
|
exports.uploadAmikooArtifacts = uploadAmikooArtifacts;
|
|
8
9
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -11,6 +12,29 @@ const os_1 = __importDefault(require("os"));
|
|
|
11
12
|
const apiUtils_1 = require("./apiUtils");
|
|
12
13
|
const zipUtils_1 = require("./zipUtils");
|
|
13
14
|
const s3Upload_1 = require("./s3Upload");
|
|
15
|
+
function readAmikooKeyFromEnvFile(filePath, ignorePlaceholder = false) {
|
|
16
|
+
if (!fs_1.default.existsSync(filePath))
|
|
17
|
+
return '';
|
|
18
|
+
const content = fs_1.default.readFileSync(filePath, 'utf8');
|
|
19
|
+
const keyMatch = content.match(/^\s*(?:export\s+)?AMIKOO_KEY\s*=\s*(.*)$/m);
|
|
20
|
+
const value = keyMatch ? keyMatch[1].trim() : '';
|
|
21
|
+
if (!value)
|
|
22
|
+
return '';
|
|
23
|
+
if (ignorePlaceholder && value === 'your_amikoo_key_here')
|
|
24
|
+
return '';
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function detectAmikooKeySource(resolvedKey) {
|
|
28
|
+
if (!resolvedKey)
|
|
29
|
+
return '';
|
|
30
|
+
const amikooKey = readAmikooKeyFromEnvFile(path_1.default.resolve(process.cwd(), '.env.amikoo'), true);
|
|
31
|
+
if (amikooKey && amikooKey === resolvedKey)
|
|
32
|
+
return '.env.amikoo';
|
|
33
|
+
const dotEnvKey = readAmikooKeyFromEnvFile(path_1.default.resolve(process.cwd(), '.env'));
|
|
34
|
+
if (dotEnvKey && dotEnvKey === resolvedKey)
|
|
35
|
+
return '.env';
|
|
36
|
+
return 'environment variable';
|
|
37
|
+
}
|
|
14
38
|
// How many artifact zips are built + uploaded to S3 in parallel.
|
|
15
39
|
//
|
|
16
40
|
// Each "worker" does: build zip on disk → request signed URL → PUT stream to S3.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amikooArtifacts.js","sourceRoot":"","sources":["../controlHub/amikooArtifacts.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"amikooArtifacts.js","sourceRoot":"","sources":["../controlHub/amikooArtifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/apiUtils.d.ts
CHANGED
package/dist/apiUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiUtils.d.ts","sourceRoot":"","sources":["../controlHub/apiUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"apiUtils.d.ts","sourceRoot":"","sources":["../controlHub/apiUtils.ts"],"names":[],"mappings":"AA4BA,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAID,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,UAAU,WAAW,CAAC,CAAC,GAAG,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA8C7F;AAGD,eAAO,MAAM,GAAG;UACR,CAAC,kBAAkB,MAAM,SAAS,MAAM;WAGvC,CAAC,kBAAkB,MAAM,SAAS,MAAM,SAAS,GAAG;UAGrD,CAAC,kBAAkB,MAAM,SAAS,MAAM,SAAS,GAAG;aAGjD,CAAC,kBAAkB,MAAM,SAAS,MAAM;CAElD,CAAC"}
|
package/dist/apiUtils.js
CHANGED
|
@@ -7,7 +7,28 @@ exports.api = void 0;
|
|
|
7
7
|
exports.getControlHubUrl = getControlHubUrl;
|
|
8
8
|
exports.apiRequest = apiRequest;
|
|
9
9
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
10
|
-
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
// Load .env.amikoo first (primary), then .env as fallback.
|
|
13
|
+
// Skip .env.amikoo if it only has the placeholder key to avoid dotenv's noisy
|
|
14
|
+
// "injected env" message when no real values are present.
|
|
15
|
+
const amikooEnv = (0, path_1.resolve)(process.cwd(), '.env.amikoo');
|
|
16
|
+
if ((0, fs_1.existsSync)(amikooEnv)) {
|
|
17
|
+
const content = (0, fs_1.readFileSync)(amikooEnv, 'utf8');
|
|
18
|
+
const hasRealKey = /^\s*(?:export\s+)?AMIKOO_KEY\s*=\s*(?!your_amikoo_key_here\s*$).+$/m.test(content);
|
|
19
|
+
if (hasRealKey) {
|
|
20
|
+
dotenv_1.default.config({ path: amikooEnv });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Only load .env if it exists and has non-comment, non-empty lines
|
|
24
|
+
const dotEnvPath = (0, path_1.resolve)(process.cwd(), '.env');
|
|
25
|
+
if ((0, fs_1.existsSync)(dotEnvPath)) {
|
|
26
|
+
const content = (0, fs_1.readFileSync)(dotEnvPath, 'utf8');
|
|
27
|
+
const hasContent = /^\s*(?!#)[\w]/m.test(content); // At least one line with a variable
|
|
28
|
+
if (hasContent) {
|
|
29
|
+
dotenv_1.default.config();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
11
32
|
const DEFAULT_CONTROLHUB_URL = 'https://app.amikoo.ai';
|
|
12
33
|
function getControlHubUrl() {
|
|
13
34
|
const raw = (process.env.CONTROLHUB_URL || '').trim();
|
|
@@ -40,9 +61,12 @@ async function apiRequest(options) {
|
|
|
40
61
|
const response = await fetch(url, fetchOptions);
|
|
41
62
|
const responseData = await response.json();
|
|
42
63
|
if (!response.ok || !responseData.success) {
|
|
64
|
+
const errPayload = responseData.data && Object.keys(responseData.data).length
|
|
65
|
+
? responseData.data
|
|
66
|
+
: responseData.message || `Request failed (${response.status})`;
|
|
43
67
|
return {
|
|
44
68
|
success: false,
|
|
45
|
-
error:
|
|
69
|
+
error: errPayload,
|
|
46
70
|
};
|
|
47
71
|
}
|
|
48
72
|
return {
|
package/dist/apiUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiUtils.js","sourceRoot":"","sources":["../controlHub/apiUtils.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"apiUtils.js","sourceRoot":"","sources":["../controlHub/apiUtils.ts"],"names":[],"mappings":";;;;;;AA4BA,4CAIC;AAwBD,gCA8CC;AAtGD,oDAA4B;AAC5B,2BAA8C;AAC9C,+BAA+B;AAE/B,2DAA2D;AAC3D,8EAA8E;AAC9E,0DAA0D;AAC1D,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;AACxD,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,qEAAqE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvG,IAAI,UAAU,EAAE,CAAC;QACf,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AAClD,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC;IACvF,IAAI,UAAU,EAAE,CAAC;QACf,gBAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAEvD,SAAgB,gBAAgB;IAC9B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,GAAG,IAAI,sBAAsB,CAAC;IAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;AAiBpC;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAAU,OAA0B;IAClE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAElD,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,EAAE,CAAC;IAEjF,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAgB;YAChC,MAAM;YACN,OAAO;SACR,CAAC;QAEF,IAAI,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,YAAY,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC3E,CAAC,CAAC,YAAY,CAAC,IAAI;gBACnB,CAAC,CAAC,YAAY,CAAC,OAAO,IAAI,mBAAmB,QAAQ,CAAC,MAAM,GAAG,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,UAAU;aAClB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,YAAY,CAAC,IAAI;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,sBAAsB;AACT,QAAA,GAAG,GAAG;IACjB,GAAG,EAAE,CAAU,QAAgB,EAAE,KAAa,EAAE,EAAE,CAChD,UAAU,CAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAEnD,IAAI,EAAE,CAAU,QAAgB,EAAE,KAAa,EAAE,IAAU,EAAE,EAAE,CAC7D,UAAU,CAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAE1D,GAAG,EAAE,CAAU,QAAgB,EAAE,KAAa,EAAE,IAAU,EAAE,EAAE,CAC5D,UAAU,CAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,MAAM,EAAE,CAAU,QAAgB,EAAE,KAAa,EAAE,EAAE,CACnD,UAAU,CAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlHubReporter.d.ts","sourceRoot":"","sources":["../controlHub/controlHubReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAKrD,OAAO,EAAyB,cAAc,
|
|
1
|
+
{"version":3,"file":"controlHubReporter.d.ts","sourceRoot":"","sources":["../controlHub/controlHubReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAKrD,OAAO,EAAyB,cAAc,EAAiD,MAAM,mBAAmB,CAAC;AAKzH,cAAM,UAAW,YAAW,QAAQ;IAElC,iBAAiB,EAAE,GAAG,EAAE,CAAM;IAC9B,MAAM,EAAE,GAAG,EAAE,CAAM;IACnB,WAAW,EAAE,cAAc,EAAE,CAAM;IACnC,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,EAAE,MAAM,CAAM;IAC5B,eAAe,EAAE,MAAM,CAAK;IAC5B,OAAO,EAAE,GAAG,EAAE,CAAM;IACpB,kBAAkB,EAAE,MAAM,CAAK;IAC/B,OAAO,EAAE,MAAM,CAAgB;IAC/B,gBAAgB,EAAE,OAAO,CAAS;IAClC,yBAAyB,EAAE,GAAG,EAAE,CAAM;IACtC,GAAG,EAAE,GAAG,CAAC;IACT,eAAe,EAAE,GAAG,EAAE,CAAM;IAE5B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,WAAW,CAA8B;IAE3C,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IAwD/B,WAAW,CAAC,IAAI,EAAE,GAAG;IAIrB,OAAO,CAAC,KAAK,EAAE,GAAG;IAalB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;IA+EhC,KAAK,CAAC,MAAM,EAAE,GAAG;CA0FxB;AACD,eAAe,UAAU,CAAC"}
|
|
@@ -44,7 +44,17 @@ class MyReporter {
|
|
|
44
44
|
this.branch = context.branch;
|
|
45
45
|
this.owner = context.owner;
|
|
46
46
|
if (!this.access_token) {
|
|
47
|
+
const keySource = (0, amikooArtifacts_1.detectAmikooKeySource)(this.key);
|
|
47
48
|
console.warn('\n⚠ Warning: Failed to obtain access token');
|
|
49
|
+
if (keySource) {
|
|
50
|
+
console.warn(` We tried to get AMIKOO_KEY from (best effort): ${keySource}`);
|
|
51
|
+
}
|
|
52
|
+
if (this.key) {
|
|
53
|
+
console.warn(' AMIKOO_KEY is set but failed to obtain access token. Verify the key is correct.');
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.warn(' AMIKOO_KEY is not set (or still has default value). Set it in .env.amikoo file or .env file and retry.');
|
|
57
|
+
}
|
|
48
58
|
console.warn(' Feedback data will not be sent to amikoo-reporter, and execution data will not be saved.\n');
|
|
49
59
|
}
|
|
50
60
|
else {
|
|
@@ -129,14 +139,13 @@ class MyReporter {
|
|
|
129
139
|
fileLocation: fileLocation,
|
|
130
140
|
fullTitle: fullTitle,
|
|
131
141
|
},
|
|
142
|
+
name: test.title,
|
|
132
143
|
filePath,
|
|
133
144
|
fullTitle,
|
|
134
145
|
duration: duration,
|
|
135
146
|
executionAt: new Date().toISOString(),
|
|
136
147
|
result: result.status === "passed" ? true : false,
|
|
137
|
-
error: errorData
|
|
138
|
-
systemOutput: '',
|
|
139
|
-
systemError: '',
|
|
148
|
+
error: errorData
|
|
140
149
|
};
|
|
141
150
|
this.testExecutionData.push(payload);
|
|
142
151
|
// Collect video for later batch processing
|
|
@@ -197,9 +206,14 @@ class MyReporter {
|
|
|
197
206
|
}
|
|
198
207
|
}
|
|
199
208
|
else {
|
|
200
|
-
const errorData =
|
|
209
|
+
const errorData = feedbackResponse.error;
|
|
210
|
+
const errorMsg = !errorData
|
|
211
|
+
? 'Unknown error'
|
|
212
|
+
: typeof errorData === 'string'
|
|
213
|
+
? errorData
|
|
214
|
+
: errorData.message || JSON.stringify(errorData);
|
|
201
215
|
console.error(`\n✖ Failed to send execution report\n`);
|
|
202
|
-
console.error(` ${
|
|
216
|
+
console.error(` ${errorMsg}\n`);
|
|
203
217
|
if (errorData.activeRepositories?.length) {
|
|
204
218
|
console.error(` Available repositories:`);
|
|
205
219
|
errorData.activeRepositories.forEach((repo) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlHubReporter.js","sourceRoot":"","sources":["../controlHub/controlHubReporter.ts"],"names":[],"mappings":";;;;;AACA,yCAA2C;AAC3C,yCAAiC;AACjC,6CAA6E;AAC7E,mCAA0H;AAC1H,
|
|
1
|
+
{"version":3,"file":"controlHubReporter.js","sourceRoot":"","sources":["../controlHub/controlHubReporter.ts"],"names":[],"mappings":";;;;;AACA,yCAA2C;AAC3C,yCAAiC;AACjC,6CAA6E;AAC7E,mCAA0H;AAC1H,uDAAyH;AACzH,mDAAqD;AACrD,gDAAwB;AACxB,oDAA4B;AAE5B,MAAM,UAAU;IAAhB;QAEE,sBAAiB,GAAU,EAAE,CAAC;QAC9B,WAAM,GAAU,EAAE,CAAC;QACnB,gBAAW,GAAqB,EAAE,CAAC;QAEnC,mBAAc,GAAW,EAAE,CAAC;QAC5B,oBAAe,GAAW,CAAC,CAAC;QAC5B,YAAO,GAAU,EAAE,CAAC;QACpB,uBAAkB,GAAW,CAAC,CAAC;QAC/B,YAAO,GAAW,YAAY,CAAC;QAC/B,qBAAgB,GAAY,KAAK,CAAC;QAClC,8BAAyB,GAAU,EAAE,CAAC;QAEtC,oBAAe,GAAU,EAAE,CAAC;QAQpB,cAAS,GAAU,EAAE,CAAC;QACtB,gBAAW,GAAyB,IAAI,CAAC;IAoPnD,CAAC;IAlPC,KAAK,CAAC,OAAO,CAAC,MAAW,EAAE,KAAU;QACnC,IAAA,kCAAkB,EAAC,MAAM,CAAC,CAAC;QAE3B,0EAA0E;QAC1E,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YAC7B,IAAI,CAAC;gBACH,2EAA2E;gBAC3E,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;gBACxC,MAAM,aAAa,GAAG,MAAM,cAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC;gBAC7E,IAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAC,CAAC;oBAC9C,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;gBACtD,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAa,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;gBACzC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;gBAC7C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAE3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,IAAA,uCAAqB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClD,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;oBAC3D,IAAG,SAAS,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CAAC,oDAAoD,SAAS,EAAE,CAAC,CAAC;oBAChF,CAAC;oBACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;oBACpG,CAAC;yBACI,CAAC;wBACJ,OAAO,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAC;oBAC3H,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;gBAC/G,CAAC;qBACG,CAAC;oBACH,wDAAwD;oBACxD,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;wBACnD,IAAA,0BAAkB,EAAC,IAAI,CAAC,YAAY,CAAC;wBACrC,IAAA,oBAAY,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;qBACvC,CAAC,CAAC;oBAEH,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;wBAC/B,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;wBACrD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC;wBACnD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC7B,CAAC;oBAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;oBACrD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAS;QACzB,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAU;QACtB,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;QACnD,IAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;gBAClC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;gBAC3B,SAAS,EAAE,OAAO;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAS,EAAE,MAAW;QACpC,8DAA8D;QAC9D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,cAAc,IAAI,CAAC,KAAK,KAAK,UAAU,GAAG,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACL,gGAAgG;gBAChG,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAClE,MAAM,sBAAsB,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAEpG,8DAA8D;gBAC9D,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAEnD,kDAAkD;gBAClD,MAAM,SAAS,GAAG,MAAM,IAAA,qBAAa,EAAC,IAAI,CAAC,CAAC;gBAE5C,2DAA2D;gBAC3D,MAAM,WAAW,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;gBAC5E,gGAAgG;gBAChG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC;gBAEjF,kGAAkG;gBAClG,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;gBACtF,MAAM,MAAM,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAE7E,2CAA2C;gBAC3C,IAAI,SAAS,GAAG,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,SAAS,GAAG,IAAA,2BAAmB,EAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,4EAA4E;gBAC9E,CAAC;gBAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAClD,MAAM,OAAO,GAAG;oBACd,MAAM,EAAE,MAAM;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,YAAY,EAAE,YAAY;wBAC1B,SAAS,EAAE,SAAS;qBACrB;oBACD,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,QAAQ;oBACR,SAAS;oBACT,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;oBACjD,KAAK,EAAE,SAAS;iBACjB,CAAC;gBAEF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAErC,2CAA2C;gBAC3C,MAAM,SAAS,GAAG,IAAA,yBAAY,EAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;gBAChD,CAAC;gBAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAA,wCAAsB,EAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAChG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,qEAAqE;QACrE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAW;QACrB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,OAAO,GAAuB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,yEAAyE;QACzE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAG,IAAI,CAAC,eAAe,EAAC,CAAC;YACvB,wCAAwC;YACxC,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAEnH,sBAAsB;YACtB,IAAI,WAAW,EAAE,UAAU,EAAE,CAAC;gBAC5B,MAAM,IAAA,6BAAgB,EAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,YAAY,GAAG;gBACnB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,iBAAiB;gBAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,uCAAuC;aAClG,CAAC;YAEF,sBAAsB;YACtB,MAAM,gBAAgB,GAAG,MAAM,cAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAChG,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBAEtD,2CAA2C;gBAC3C,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAW,CAAC;gBAClD,IAAI,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;oBACxC,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,QAAQ,IAAI,2BAA2B,EAAE,CAAC,CAAC;oBAC1E,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;wBAC/C,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACvC,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAY,CAAC;gBAChD,MAAM,QAAQ,GAAG,CAAC,SAAS;oBACzB,CAAC,CAAC,eAAe;oBACjB,CAAC,CAAC,OAAO,SAAS,KAAK,QAAQ;wBAC7B,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACrD,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACvD,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;gBAEjC,IAAI,SAAS,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;oBACzC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBAC3C,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;wBACjD,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACnD,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpB,CAAC;gBAED,IAAI,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;oBACrC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBACvC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAc,EAAE,EAAE;wBAClD,OAAO,CAAC,KAAK,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;aACG,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,IAAA,uCAAqB,EAAC,IAAI,CAAC,WAAW,EAAE;gBAC5C,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,SAAS,EAAE,IAAI,CAAC,GAAG;gBACnB,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE;aACxB,CAAC,CAAC;QACL,CAAC;QAED,IAAA,uBAAe,GAAE,CAAC;IACpB,CAAC;CAEF;AACD,kBAAe,UAAU,CAAC"}
|
package/dist/gitUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../controlHub/gitUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../controlHub/gitUtils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAwHD,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA2B7E"}
|
package/dist/gitUtils.js
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.getGitContext = getGitContext;
|
|
7
4
|
const child_process_1 = require("child_process");
|
|
8
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
9
5
|
const apiUtils_1 = require("./apiUtils");
|
|
10
|
-
dotenv_1.default.config();
|
|
11
6
|
// Parse Azure DevOps repository URL to extract its components
|
|
12
7
|
// Supports formats:
|
|
13
8
|
// - https://username@dev.azure.com/organization/project/_git/repository
|
package/dist/gitUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../controlHub/gitUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../controlHub/gitUtils.ts"],"names":[],"mappings":";;AAgIA,sCA2BC;AA3JD,iDAAyC;AACzC,yCAAiC;AAwBjC,8DAA8D;AAC9D,oBAAoB;AACpB,yEAAyE;AACzE,gEAAgE;AAChE,mEAAmE;AACnE,UAAU;AACV,gDAAgD;AAChD,WAAW;AACX,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;QAE9C,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC7C,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO;oBACL,QAAQ;oBACR,YAAY;oBACZ,OAAO;oBACP,UAAU;oBACV,OAAO,EAAE,yBAAyB,YAAY,EAAE;iBACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC7C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO;oBACL,QAAQ;oBACR,YAAY;oBACZ,OAAO;oBACP,UAAU;oBACV,OAAO,EAAE,WAAW,QAAQ,EAAE;iBAC/B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,SAAiB;IAE1C,MAAM,QAAQ,GAAoB;QAChC,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,kCAAkC;IAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,QAAQ,IAAI,EAAE;YACjC,IAAI,EAAE,WAAW,CAAC,UAAU;YAC5B,gBAAgB,EAAE,WAAW,CAAC,YAAY;YAC1C,WAAW,EAAE,WAAW,CAAC,OAAO;SACjC,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3E,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5D,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6GAA6G;AAC7G,wHAAwH;AACjH,KAAK,UAAU,aAAa,CAAC,YAAoB;IACtD,IAAI,MAAc,CAAC;IACnB,IAAI,SAAiB,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,wBAAQ,EAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,gBAAgB,CAAC;QAChI,SAAS,GAAG,IAAA,wBAAQ,EAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IACpH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACzF,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAC5G,CAAC;IAED,yCAAyC;IACzC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG;QACZ,OAAO,EAAE,KAAK;QACb,MAAM,EAAE,IAAI;KACb,CAAA;IACD,MAAM,QAAQ,GAAG,MAAM,cAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAG,IAAI,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,MAAM,QAAQ,EAAE,IAAI,CAAC;IACtC,OAAO;QACL,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG;QAC7C,cAAc,EAAE,IAAI;QACpB,MAAM;QACN,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,eAAe;KAC1C,CAAC;AACJ,CAAC"}
|
package/dist/videoUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videoUtils.d.ts","sourceRoot":"","sources":["../controlHub/videoUtils.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAGhD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,GAAG,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"videoUtils.d.ts","sourceRoot":"","sources":["../controlHub/videoUtils.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAGhD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,GAAG,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC,CA+BtD;AAsDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAqCvF"}
|
package/dist/videoUtils.js
CHANGED
|
@@ -83,7 +83,12 @@ async function processVideos(videos, organizationId, executionNumber, token) {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
else {
|
|
86
|
-
|
|
86
|
+
const missing = [
|
|
87
|
+
!videos.length && 'videos (none captured)',
|
|
88
|
+
!organizationId && 'could not get organization ID',
|
|
89
|
+
!executionNumber && 'could not get execution number',
|
|
90
|
+
].filter(Boolean).join(', ');
|
|
91
|
+
console.log(` ℹ Missing required parameters for video processing: ${missing}`);
|
|
87
92
|
}
|
|
88
93
|
return { videos: processed, uploadUrls };
|
|
89
94
|
}
|
package/dist/videoUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videoUtils.js","sourceRoot":"","sources":["../controlHub/videoUtils.ts"],"names":[],"mappings":";;;;;AAoCA,oCAGC;AAsBD,
|
|
1
|
+
{"version":3,"file":"videoUtils.js","sourceRoot":"","sources":["../controlHub/videoUtils.ts"],"names":[],"mappings":"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"}
|
package/install.js
CHANGED
|
@@ -2,13 +2,98 @@
|
|
|
2
2
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const path = require('path');
|
|
5
|
+
const { spawnSync } = require('child_process');
|
|
5
6
|
|
|
6
|
-
const userProjectRoot = process.env.INIT_CWD || process.cwd();
|
|
7
7
|
const packageRoot = __dirname;
|
|
8
8
|
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Project Root And Key Resolution
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
function findPlaywrightConfig(dir) {
|
|
14
|
+
if (!dir) return null;
|
|
15
|
+
const tsPath = path.join(dir, 'playwright.config.ts');
|
|
16
|
+
if (fs.existsSync(tsPath)) return tsPath;
|
|
17
|
+
const jsPath = path.join(dir, 'playwright.config.js');
|
|
18
|
+
if (fs.existsSync(jsPath)) return jsPath;
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function hasPackageJson(dir) {
|
|
23
|
+
if (!dir) return false;
|
|
24
|
+
return fs.existsSync(path.join(dir, 'package.json'));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Resolve the user project root across install modes. A simple
|
|
28
|
+
// `process.env.INIT_CWD || process.cwd()` is not always enough because
|
|
29
|
+
// lifecycle and manual invocations can differ and sometimes point to this
|
|
30
|
+
// package's own directory. We therefore prefer the first non-packageRoot
|
|
31
|
+
// candidate that already looks like a project, then fall back to the first
|
|
32
|
+
// non-packageRoot candidate to avoid writing files inside this package.
|
|
33
|
+
function resolveUserProjectRoot() {
|
|
34
|
+
const pwd = process.env.PWD ? path.resolve(process.env.PWD) : null;
|
|
35
|
+
const initCwd = process.env.INIT_CWD ? path.resolve(process.env.INIT_CWD) : null;
|
|
36
|
+
|
|
37
|
+
// When PWD is a different directory from INIT_CWD (nested scenario), prefer PWD
|
|
38
|
+
// as the target even if it doesn't yet look like a project. This handles cases
|
|
39
|
+
// where the user runs from a subdirectory (e.g. apps/e2e) that should get its
|
|
40
|
+
// own playwright config rather than modifying the parent's.
|
|
41
|
+
if (pwd && pwd !== packageRoot && initCwd && pwd !== initCwd) {
|
|
42
|
+
return pwd;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const candidates = [
|
|
46
|
+
// PWD usually reflects where the user invoked install from.
|
|
47
|
+
pwd,
|
|
48
|
+
// INIT_CWD is npm's original invocation directory.
|
|
49
|
+
initCwd,
|
|
50
|
+
// cwd is the script process working directory.
|
|
51
|
+
process.cwd(),
|
|
52
|
+
].filter(Boolean).map(dir => path.resolve(dir));
|
|
53
|
+
|
|
54
|
+
const uniqueCandidates = [...new Set(candidates)];
|
|
55
|
+
|
|
56
|
+
const nonPackageCandidates = uniqueCandidates.filter(dir => dir !== packageRoot);
|
|
57
|
+
|
|
58
|
+
// Prefer a non-packageRoot candidate that looks like a project directory.
|
|
59
|
+
const projectLikeCandidate = nonPackageCandidates.find(
|
|
60
|
+
dir => findPlaywrightConfig(dir) || hasPackageJson(dir)
|
|
61
|
+
);
|
|
62
|
+
if (projectLikeCandidate) {
|
|
63
|
+
return projectLikeCandidate;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Fallback for unusual environments: use the first non-packageRoot
|
|
67
|
+
// candidate even if it does not yet look like a project.
|
|
68
|
+
return nonPackageCandidates[0] || uniqueCandidates[0] || process.cwd();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const userProjectRoot = resolveUserProjectRoot();
|
|
72
|
+
|
|
9
73
|
const REPORTER_MODULE = '@muuktest/amikoo-reporter';
|
|
10
74
|
const REPORTER_ENTRY = `['${REPORTER_MODULE}']`;
|
|
11
75
|
const AMIKOO_PLAYWRIGHT_PACKAGE = '@muuktest/amikoo-playwright/reporter';
|
|
76
|
+
const AMIKOO_KEY_LINE_REGEX = /^\s*(?:export\s+)?AMIKOO_KEY\s*=.*$/m;
|
|
77
|
+
const AMIKOO_KEY_VALUE_REGEX = /^\s*(?:export\s+)?AMIKOO_KEY\s*=\s*(.*)$/m;
|
|
78
|
+
|
|
79
|
+
function resolveInstallAmikooKey() {
|
|
80
|
+
// CLI argument: --amikoo-key=VALUE (manual invocation)
|
|
81
|
+
const cliArg = process.argv.find(a => a.startsWith('--amikoo-key='));
|
|
82
|
+
if (cliArg) {
|
|
83
|
+
const val = cliArg.split('=').slice(1).join('=').trim();
|
|
84
|
+
if (val) return { value: val, source: 'cli', shouldPersist: true };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// npm forwards unknown CLI flags as npm_config_* env vars to lifecycle scripts.
|
|
88
|
+
const npmConfigKey = (process.env.npm_config_amikoo_key || '').trim();
|
|
89
|
+
if (npmConfigKey) return { value: npmConfigKey, source: 'npm_config', shouldPersist: true };
|
|
90
|
+
|
|
91
|
+
// Environment variable is used for the session but not persisted to file.
|
|
92
|
+
const envKey = (process.env.AMIKOO_KEY || '').trim();
|
|
93
|
+
if (envKey) return { value: envKey, source: 'env', shouldPersist: false };
|
|
94
|
+
|
|
95
|
+
return { value: '', source: 'none', shouldPersist: false };
|
|
96
|
+
}
|
|
12
97
|
|
|
13
98
|
// ---------------------------------------------------------------------------
|
|
14
99
|
// Helpers
|
|
@@ -435,19 +520,6 @@ function ensureVideoOn(content) {
|
|
|
435
520
|
// configurePlaywright
|
|
436
521
|
// ---------------------------------------------------------------------------
|
|
437
522
|
|
|
438
|
-
function findPlaywrightConfig() {
|
|
439
|
-
const tsPath = path.join(userProjectRoot, 'playwright.config.ts');
|
|
440
|
-
if (fs.existsSync(tsPath)) {
|
|
441
|
-
return tsPath;
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
const jsPath = path.join(userProjectRoot, 'playwright.config.js');
|
|
445
|
-
if (fs.existsSync(jsPath)) {
|
|
446
|
-
return jsPath;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
return null;
|
|
450
|
-
}
|
|
451
523
|
|
|
452
524
|
function createDefaultConfig() {
|
|
453
525
|
const configPath = path.join(userProjectRoot, 'playwright.config.ts');
|
|
@@ -463,7 +535,7 @@ function createDefaultConfig() {
|
|
|
463
535
|
}
|
|
464
536
|
|
|
465
537
|
function configurePlaywright() {
|
|
466
|
-
const configPath = findPlaywrightConfig();
|
|
538
|
+
const configPath = findPlaywrightConfig(userProjectRoot);
|
|
467
539
|
|
|
468
540
|
if (!configPath) {
|
|
469
541
|
console.log(' No playwright config found.');
|
|
@@ -475,9 +547,11 @@ function configurePlaywright() {
|
|
|
475
547
|
console.log(` Found playwright.config${ext}`);
|
|
476
548
|
|
|
477
549
|
const original = fs.readFileSync(configPath, 'utf8');
|
|
550
|
+
const hadReporter = hasActiveOccurrence(original, REPORTER_MODULE);
|
|
551
|
+
const hadVideoOn = /\bvideo\s*:\s*['"]on['"]/.test(original);
|
|
478
552
|
|
|
479
553
|
// Already configured (uncommented)?
|
|
480
|
-
const alreadyConfigured =
|
|
554
|
+
const alreadyConfigured = hadReporter;
|
|
481
555
|
|
|
482
556
|
let modified;
|
|
483
557
|
if (alreadyConfigured) {
|
|
@@ -496,14 +570,22 @@ function configurePlaywright() {
|
|
|
496
570
|
|
|
497
571
|
// Ensure video: 'on' in use block.
|
|
498
572
|
const withVideo = ensureVideoOn(reordered);
|
|
573
|
+
const hasVideoOn = /\bvideo\s*:\s*['"]on['"]/.test(withVideo);
|
|
574
|
+
|
|
575
|
+
// A flag to indicate if video was updated from off to on during this run.
|
|
576
|
+
const videoUpdated = !hadVideoOn && hasVideoOn;
|
|
499
577
|
|
|
500
578
|
if (withVideo !== original) {
|
|
501
579
|
fs.writeFileSync(configPath, withVideo, 'utf8');
|
|
502
|
-
if (alreadyConfigured) {
|
|
503
|
-
console.log(' amikoo-reporter already configured. Adjusted config where needed.\n');
|
|
504
|
-
} else {
|
|
580
|
+
if (!alreadyConfigured) {
|
|
505
581
|
console.log(' amikoo-reporter added to playwright config.\n');
|
|
506
582
|
}
|
|
583
|
+
if (videoUpdated) {
|
|
584
|
+
console.log(" Enabled Playwright video capture: use.video = 'on'.\n");
|
|
585
|
+
}
|
|
586
|
+
if (alreadyConfigured && !videoUpdated) {
|
|
587
|
+
console.log(' amikoo-reporter already configured. Adjusted config where needed.\n');
|
|
588
|
+
}
|
|
507
589
|
} else {
|
|
508
590
|
console.log(' amikoo-reporter already configured. No changes needed.\n');
|
|
509
591
|
}
|
|
@@ -513,29 +595,171 @@ function configurePlaywright() {
|
|
|
513
595
|
// configureEnv
|
|
514
596
|
// ---------------------------------------------------------------------------
|
|
515
597
|
|
|
516
|
-
function
|
|
517
|
-
const
|
|
598
|
+
function resolveEnvTargetPath() {
|
|
599
|
+
const amikooEnvPath = path.join(userProjectRoot, '.env.amikoo');
|
|
600
|
+
const dotEnvPath = path.join(userProjectRoot, '.env');
|
|
601
|
+
|
|
602
|
+
// Backward compat: if .env already has AMIKOO_KEY, work on .env instead
|
|
603
|
+
if (!fs.existsSync(amikooEnvPath) && fs.existsSync(dotEnvPath)) {
|
|
604
|
+
const dotEnvContent = fs.readFileSync(dotEnvPath, 'utf8');
|
|
605
|
+
if (AMIKOO_KEY_LINE_REGEX.test(dotEnvContent)) {
|
|
606
|
+
return dotEnvPath;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
return amikooEnvPath;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
function configureEnv(installKey) {
|
|
614
|
+
const targetPath = resolveEnvTargetPath();
|
|
615
|
+
|
|
518
616
|
const keyLine = 'AMIKOO_KEY=your_amikoo_key_here';
|
|
617
|
+
const resolvedKeyLine = installKey ? `AMIKOO_KEY=${installKey}` : keyLine;
|
|
519
618
|
|
|
520
|
-
if (!fs.existsSync(
|
|
521
|
-
fs.writeFileSync(
|
|
522
|
-
|
|
619
|
+
if (!fs.existsSync(targetPath)) {
|
|
620
|
+
fs.writeFileSync(targetPath, `# amikoo-reporter Configuration\n${resolvedKeyLine}\n`, 'utf8');
|
|
621
|
+
if (installKey) {
|
|
622
|
+
console.log(` Created ${path.basename(targetPath)} with AMIKOO_KEY from installation parameter.\n`);
|
|
623
|
+
process.stderr.write(`amikoo-reporter: AMIKOO_KEY set in ${targetPath}\n`);
|
|
624
|
+
} else {
|
|
625
|
+
console.log(` Created ${path.basename(targetPath)} — please update AMIKOO_KEY with your actual key.\n`);
|
|
626
|
+
}
|
|
523
627
|
} else {
|
|
524
|
-
const content = fs.readFileSync(
|
|
525
|
-
|
|
526
|
-
|
|
628
|
+
const content = fs.readFileSync(targetPath, 'utf8');
|
|
629
|
+
const hasAmikooKeyLine = AMIKOO_KEY_LINE_REGEX.test(content);
|
|
630
|
+
if (hasAmikooKeyLine) {
|
|
631
|
+
if (installKey) {
|
|
632
|
+
const updated = content.replace(AMIKOO_KEY_LINE_REGEX, `AMIKOO_KEY=${installKey}`);
|
|
633
|
+
if (updated !== content) {
|
|
634
|
+
fs.writeFileSync(targetPath, updated, 'utf8');
|
|
635
|
+
console.log(` Updated AMIKOO_KEY in existing ${path.basename(targetPath)} from installation parameter.\n`);
|
|
636
|
+
process.stderr.write(`amikoo-reporter: AMIKOO_KEY set in ${targetPath}\n`);
|
|
637
|
+
} else {
|
|
638
|
+
console.log(` AMIKOO_KEY already present in ${path.basename(targetPath)}. No changes needed.\n`);
|
|
639
|
+
}
|
|
640
|
+
} else {
|
|
641
|
+
console.log(` AMIKOO_KEY already present in ${path.basename(targetPath)}. Skipping.\n`);
|
|
642
|
+
}
|
|
527
643
|
} else {
|
|
528
644
|
const separator = content.endsWith('\n') ? '' : '\n';
|
|
529
|
-
fs.appendFileSync(
|
|
530
|
-
|
|
645
|
+
fs.appendFileSync(targetPath, `${separator}\n# amikoo-reporter Configuration\n${resolvedKeyLine}\n`, 'utf8');
|
|
646
|
+
if (installKey) {
|
|
647
|
+
console.log(` Appended AMIKOO_KEY from installation parameter to existing ${path.basename(targetPath)}.\n`);
|
|
648
|
+
process.stderr.write(`amikoo-reporter: AMIKOO_KEY set in ${targetPath}\n`);
|
|
649
|
+
} else {
|
|
650
|
+
console.log(` Appended AMIKOO_KEY to existing ${path.basename(targetPath)}.\n`);
|
|
651
|
+
}
|
|
531
652
|
}
|
|
532
653
|
}
|
|
654
|
+
|
|
655
|
+
return path.basename(targetPath);
|
|
533
656
|
}
|
|
534
657
|
|
|
535
658
|
// ---------------------------------------------------------------------------
|
|
536
659
|
// Main
|
|
537
660
|
// ---------------------------------------------------------------------------
|
|
538
661
|
|
|
662
|
+
|
|
663
|
+
// No npm_lifecycle_event environment variable is for cases when running directly,
|
|
664
|
+
// for example running with npx or node
|
|
665
|
+
const isManualRun = process.argv.includes('init') || !process.env.npm_lifecycle_event;
|
|
666
|
+
const isExplicitInit = process.argv.includes('init');
|
|
667
|
+
|
|
668
|
+
// ---------------------------------------------------------------------------
|
|
669
|
+
// Dependency Installation Helpers
|
|
670
|
+
// ---------------------------------------------------------------------------
|
|
671
|
+
|
|
672
|
+
// We detect the package manager so this installer uses the same tool the project
|
|
673
|
+
// already uses, instead of forcing npm.
|
|
674
|
+
function detectPackageManager(dir) {
|
|
675
|
+
if (fs.existsSync(path.join(dir, 'pnpm-lock.yaml'))) return 'pnpm';
|
|
676
|
+
if (fs.existsSync(path.join(dir, 'yarn.lock'))) return 'yarn';
|
|
677
|
+
if (fs.existsSync(path.join(dir, 'bun.lockb')) || fs.existsSync(path.join(dir, 'bun.lock'))) return 'bun';
|
|
678
|
+
const ua = process.env.npm_config_user_agent || '';
|
|
679
|
+
if (ua.startsWith('pnpm')) return 'pnpm';
|
|
680
|
+
if (ua.startsWith('yarn')) return 'yarn';
|
|
681
|
+
if (ua.startsWith('bun')) return 'bun';
|
|
682
|
+
// If there is no package.json and no lockfile and no helpful user-agent, detection falls back to npm
|
|
683
|
+
return 'npm';
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
function isReporterInstalled(dir) {
|
|
687
|
+
const pkgJsonPath = path.join(dir, 'package.json');
|
|
688
|
+
if (fs.existsSync(pkgJsonPath)) {
|
|
689
|
+
try {
|
|
690
|
+
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'));
|
|
691
|
+
const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}), ...(pkg.optionalDependencies || {}) };
|
|
692
|
+
if (deps[REPORTER_MODULE]) return true;
|
|
693
|
+
} catch {
|
|
694
|
+
// Ignore malformed package.json — fall through to node_modules check
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
return fs.existsSync(path.join(dir, 'node_modules', REPORTER_MODULE, 'package.json'));
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
function ensureReporterInstalled() {
|
|
701
|
+
if (isReporterInstalled(userProjectRoot)) return true;
|
|
702
|
+
|
|
703
|
+
// Reporter not installed at this point. This is the specific case where the user explicitly
|
|
704
|
+
// ran `npx @muuktest/amikoo-reporter init` but the installation was not run previously.
|
|
705
|
+
// Need a package.json to record the dependency
|
|
706
|
+
if (!fs.existsSync(path.join(userProjectRoot, 'package.json'))) {
|
|
707
|
+
console.log(` No package.json found in ${userProjectRoot}.`);
|
|
708
|
+
console.log(` Initializing one so ${REPORTER_MODULE} can be saved as a devDependency...`);
|
|
709
|
+
try {
|
|
710
|
+
fs.writeFileSync(
|
|
711
|
+
path.join(userProjectRoot, 'package.json'),
|
|
712
|
+
JSON.stringify({ name: path.basename(userProjectRoot), version: '1.0.0', private: true }, null, 2) + '\n',
|
|
713
|
+
'utf8'
|
|
714
|
+
);
|
|
715
|
+
} catch (err) {
|
|
716
|
+
console.error(` ✖ Could not create package.json: ${err.message}`);
|
|
717
|
+
console.error(` Please run: npm init -y && npm install --save-dev ${REPORTER_MODULE}\n`);
|
|
718
|
+
return false;
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
const pm = detectPackageManager(userProjectRoot);
|
|
723
|
+
const commands = {
|
|
724
|
+
npm: { cmd: 'npm', args: ['install', '--save-dev', REPORTER_MODULE] },
|
|
725
|
+
yarn: { cmd: 'yarn', args: ['add', '--dev', REPORTER_MODULE] },
|
|
726
|
+
pnpm: { cmd: 'pnpm', args: ['add', '--save-dev', REPORTER_MODULE] },
|
|
727
|
+
bun: { cmd: 'bun', args: ['add', '--dev', REPORTER_MODULE] },
|
|
728
|
+
};
|
|
729
|
+
const { cmd, args } = commands[pm];
|
|
730
|
+
|
|
731
|
+
console.log(` ${REPORTER_MODULE} is not installed in this project.`);
|
|
732
|
+
console.log(` Installing with: ${cmd} ${args.join(' ')}\n`);
|
|
733
|
+
|
|
734
|
+
// Clear npm lifecycle vars so the spawned install runs cleanly and its
|
|
735
|
+
// postinstall (which re-invokes this script) targets userProjectRoot.
|
|
736
|
+
const childEnv = { ...process.env, INIT_CWD: userProjectRoot };
|
|
737
|
+
delete childEnv.npm_lifecycle_event;
|
|
738
|
+
delete childEnv.npm_lifecycle_script;
|
|
739
|
+
delete childEnv.npm_command;
|
|
740
|
+
|
|
741
|
+
const result = spawnSync(cmd, args, {
|
|
742
|
+
cwd: userProjectRoot,
|
|
743
|
+
stdio: 'inherit',
|
|
744
|
+
env: childEnv,
|
|
745
|
+
shell: process.platform === 'win32',
|
|
746
|
+
});
|
|
747
|
+
|
|
748
|
+
if (result.error && result.error.code === 'ENOENT') {
|
|
749
|
+
console.error(`\n ✖ Could not find "${cmd}" on PATH.`);
|
|
750
|
+
console.error(` Please install manually: npm install --save-dev ${REPORTER_MODULE}\n`);
|
|
751
|
+
return false;
|
|
752
|
+
}
|
|
753
|
+
if (result.status !== 0) {
|
|
754
|
+
console.error(`\n ✖ ${cmd} exited with code ${result.status}.`);
|
|
755
|
+
console.error(` Please install manually: ${cmd} ${args.join(' ')}\n`);
|
|
756
|
+
return false;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
console.log(`\n ✔ ${REPORTER_MODULE} installed as devDependency.\n`);
|
|
760
|
+
return true;
|
|
761
|
+
}
|
|
762
|
+
|
|
539
763
|
function install() {
|
|
540
764
|
try {
|
|
541
765
|
if (userProjectRoot === packageRoot) {
|
|
@@ -543,15 +767,58 @@ function install() {
|
|
|
543
767
|
return;
|
|
544
768
|
}
|
|
545
769
|
|
|
546
|
-
|
|
770
|
+
if (isManualRun) {
|
|
771
|
+
console.log('amikoo-reporter init\n');
|
|
772
|
+
// When invoked explicitly as `npx @muuktest/amikoo-reporter init`, make
|
|
773
|
+
// sure the reporter is a real devDependency of the user's project.
|
|
774
|
+
// The child install will re-invoke this script via postinstall, which
|
|
775
|
+
// performs playwright/env configuration; we still run those below to
|
|
776
|
+
// guarantee configuration in cases where postinstall was skipped
|
|
777
|
+
// (e.g. --ignore-scripts).
|
|
778
|
+
if (isExplicitInit) {
|
|
779
|
+
const installed = ensureReporterInstalled();
|
|
780
|
+
if (!installed) {
|
|
781
|
+
console.log(' Continuing with configuration only (dependency not saved).\n');
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
} else {
|
|
785
|
+
console.log('Installing amikoo-reporter...\n');
|
|
786
|
+
}
|
|
547
787
|
|
|
548
788
|
configurePlaywright();
|
|
549
|
-
configureEnv();
|
|
550
789
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
790
|
+
const { value: installKey, source: installKeySource, shouldPersist: shouldPersistKey } = resolveInstallAmikooKey();
|
|
791
|
+
let envFile = '.env.amikoo';
|
|
792
|
+
envFile = configureEnv(shouldPersistKey ? installKey : '');
|
|
793
|
+
|
|
794
|
+
if (isManualRun) {
|
|
795
|
+
console.log('amikoo-reporter configuration complete!\n');
|
|
796
|
+
} else {
|
|
797
|
+
console.log('amikoo-reporter installation complete!\n');
|
|
798
|
+
}
|
|
799
|
+
if (shouldPersistKey && installKey) {
|
|
800
|
+
console.log(`We configured AMIKOO_KEY in ${envFile} with value provided!\n`);
|
|
801
|
+
console.log('Run your tests: npx playwright test\n');
|
|
802
|
+
} else if (installKey && installKeySource === 'env') {
|
|
803
|
+
console.log('AMIKOO_KEY detected and used from environment for this run (not taken from env files).\n');
|
|
804
|
+
console.log('Run your tests: npx playwright test\n');
|
|
805
|
+
} else {
|
|
806
|
+
// Check if the env file already has a real key (not placeholder)
|
|
807
|
+
const envFilePath = path.join(userProjectRoot, envFile);
|
|
808
|
+
const envContent = fs.existsSync(envFilePath) ? fs.readFileSync(envFilePath, 'utf8') : '';
|
|
809
|
+
const keyMatch = envContent.match(AMIKOO_KEY_VALUE_REGEX);
|
|
810
|
+
const existingKey = keyMatch ? keyMatch[1].trim() : '';
|
|
811
|
+
const isLikelyARealKey = existingKey && existingKey !== 'your_amikoo_key_here';
|
|
812
|
+
|
|
813
|
+
if (isLikelyARealKey) {
|
|
814
|
+
console.log(`AMIKOO_KEY is already configured in ${envFile}.\n`);
|
|
815
|
+
console.log('Run your tests: npx playwright test\n');
|
|
816
|
+
} else {
|
|
817
|
+
console.log('Next steps:');
|
|
818
|
+
console.log(` 1. Update your ${envFile} file with your AMIKOO_KEY (or export AMIKOO_KEY in your shell)`);
|
|
819
|
+
console.log(' 2. Run your tests: npx playwright test\n');
|
|
820
|
+
}
|
|
821
|
+
}
|
|
555
822
|
} catch (error) {
|
|
556
823
|
console.error('Installation error:', error.message);
|
|
557
824
|
console.error(`You may need to manually add the reporter to your playwright config:`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@muuktest/amikoo-reporter",
|
|
3
|
-
"version": "1.2.0",
|
|
3
|
+
"version": "1.3.2-beta.0",
|
|
4
4
|
"description": "Playwright reporter for Amikoo - automatically installs and configures test reporting to Amikoo AI",
|
|
5
5
|
"main": "dist/controlHubReporter.js",
|
|
6
6
|
"types": "dist/controlHubReporter.d.ts",
|
|
@@ -10,10 +10,15 @@
|
|
|
10
10
|
"default": "./dist/controlHubReporter.js"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
|
+
"bin": {
|
|
14
|
+
"amikoo-reporter": "install.js"
|
|
15
|
+
},
|
|
13
16
|
"scripts": {
|
|
14
17
|
"build": "rm -rf dist && tsc",
|
|
18
|
+
"test": "node --test",
|
|
15
19
|
"prepublishOnly": "npm run build",
|
|
16
|
-
"postinstall": "node install.js"
|
|
20
|
+
"postinstall": "node install.js",
|
|
21
|
+
"test:amikoo": "playwright test --reporter=@muuktest/amikoo-reporter"
|
|
17
22
|
},
|
|
18
23
|
"files": [
|
|
19
24
|
"dist/**/*",
|