indraq_cli 1.3.0 → 1.5.5
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 +1082 -657
- package/dist/cli/create-program.d.ts.map +1 -1
- package/dist/cli/create-program.js +24 -6
- package/dist/cli/create-program.js.map +1 -1
- package/dist/cli/doctor.command.d.ts.map +1 -1
- package/dist/cli/doctor.command.js +23 -0
- package/dist/cli/doctor.command.js.map +1 -1
- package/dist/modules/configure/configure.command.d.ts.map +1 -0
- package/dist/modules/configure/configure.command.js +116 -0
- package/dist/modules/configure/configure.command.js.map +1 -0
- package/dist/modules/deploy/commands/build.command.d.ts +2 -2
- package/dist/modules/deploy/commands/build.command.d.ts.map +1 -1
- package/dist/modules/deploy/commands/build.command.js +45 -16
- package/dist/modules/deploy/commands/build.command.js.map +1 -1
- package/dist/modules/deploy/commands/configure-docker.command.d.ts +2 -0
- package/dist/modules/deploy/commands/configure-docker.command.d.ts.map +1 -0
- package/dist/modules/deploy/commands/configure-docker.command.js +169 -0
- package/dist/modules/deploy/commands/configure-docker.command.js.map +1 -0
- package/dist/modules/deploy/config/docker-config.d.ts +21 -0
- package/dist/modules/deploy/config/docker-config.d.ts.map +1 -0
- package/dist/modules/deploy/config/docker-config.js +187 -0
- package/dist/modules/deploy/config/docker-config.js.map +1 -0
- package/dist/modules/deploy/index.d.ts.map +1 -1
- package/dist/modules/deploy/index.js +9 -26
- package/dist/modules/deploy/index.js.map +1 -1
- package/dist/modules/mobile/commands/build-mobile.command.d.ts +11 -0
- package/dist/modules/mobile/commands/build-mobile.command.d.ts.map +1 -0
- package/dist/modules/mobile/commands/build-mobile.command.js +189 -0
- package/dist/modules/mobile/commands/build-mobile.command.js.map +1 -0
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts +8 -0
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts.map +1 -0
- package/dist/modules/mobile/commands/configure-mobile.command.js +353 -0
- package/dist/modules/mobile/commands/configure-mobile.command.js.map +1 -0
- package/dist/modules/mobile/config/mobile-config.d.ts +43 -0
- package/dist/modules/mobile/config/mobile-config.d.ts.map +1 -0
- package/dist/modules/mobile/config/mobile-config.js +211 -0
- package/dist/modules/mobile/config/mobile-config.js.map +1 -0
- package/dist/modules/mobile/index.d.ts +3 -0
- package/dist/modules/mobile/index.d.ts.map +1 -0
- package/dist/modules/mobile/index.js +50 -0
- package/dist/modules/mobile/index.js.map +1 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts +31 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.js +344 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.js.map +1 -0
- package/dist/modules/mobile/services/project.service.d.ts +11 -0
- package/dist/modules/mobile/services/project.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/project.service.js +73 -0
- package/dist/modules/mobile/services/project.service.js.map +1 -0
- package/dist/modules/mobile/services/source-bundle.service.d.ts +9 -0
- package/dist/modules/mobile/services/source-bundle.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/source-bundle.service.js +114 -0
- package/dist/modules/mobile/services/source-bundle.service.js.map +1 -0
- package/dist/modules/mobile/services/version-sync.service.d.ts +7 -0
- package/dist/modules/mobile/services/version-sync.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/version-sync.service.js +88 -0
- package/dist/modules/mobile/services/version-sync.service.js.map +1 -0
- package/dist/shared/config/config-files.d.ts +5 -0
- package/dist/shared/config/config-files.d.ts.map +1 -0
- package/dist/shared/config/config-files.js +88 -0
- package/dist/shared/config/config-files.js.map +1 -0
- package/dist/shared/config/jenkins-config.d.ts +36 -0
- package/dist/shared/config/jenkins-config.d.ts.map +1 -0
- package/dist/shared/config/jenkins-config.js +164 -0
- package/dist/shared/config/jenkins-config.js.map +1 -0
- package/dist/shared/jenkins/configure-jenkins.d.ts +7 -0
- package/dist/shared/jenkins/configure-jenkins.d.ts.map +1 -0
- package/dist/shared/jenkins/configure-jenkins.js +84 -0
- package/dist/shared/jenkins/configure-jenkins.js.map +1 -0
- package/dist/{modules/deploy/services → shared/jenkins}/jenkins.service.d.ts +5 -4
- package/dist/shared/jenkins/jenkins.service.d.ts.map +1 -0
- package/dist/{modules/deploy/services → shared/jenkins}/jenkins.service.js +43 -89
- package/dist/shared/jenkins/jenkins.service.js.map +1 -0
- package/dist/shared/runtime/runtime-doctor.js.map +1 -1
- package/package.json +10 -5
- package/templates/jenkins/Jenkinsfile-Mobile-App +759 -0
- package/dist/modules/deploy/commands/configure.command.d.ts.map +0 -1
- package/dist/modules/deploy/commands/configure.command.js +0 -404
- package/dist/modules/deploy/commands/configure.command.js.map +0 -1
- package/dist/modules/deploy/config/deployment-config.d.ts +0 -29
- package/dist/modules/deploy/config/deployment-config.d.ts.map +0 -1
- package/dist/modules/deploy/config/deployment-config.js +0 -164
- package/dist/modules/deploy/config/deployment-config.js.map +0 -1
- package/dist/modules/deploy/services/jenkins.service.d.ts.map +0 -1
- package/dist/modules/deploy/services/jenkins.service.js.map +0 -1
- /package/dist/modules/{deploy/commands → configure}/configure.command.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-config.js","sourceRoot":"","sources":["../../../../src/modules/mobile/config/mobile-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/mobile/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAkD1D,eAAO,MAAM,oBAAoB,GAAI,SAAS,OAAO,KAAG,IAQvD,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerMobileModule = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const build_mobile_command_1 = require("./commands/build-mobile.command");
|
|
6
|
+
const parseOutput = (value) => {
|
|
7
|
+
const normalized = value.trim().toLowerCase();
|
|
8
|
+
if (normalized === 'development-client' || normalized === 'dev-client' || normalized === 'client')
|
|
9
|
+
return 'development-client';
|
|
10
|
+
if (normalized === 'debug-apk' || normalized === 'debug')
|
|
11
|
+
return 'debug-apk';
|
|
12
|
+
if (normalized === 'release-apk' || normalized === 'apk')
|
|
13
|
+
return 'release-apk';
|
|
14
|
+
if (normalized === 'release-aab' || normalized === 'aab')
|
|
15
|
+
return 'release-aab';
|
|
16
|
+
throw new commander_1.InvalidArgumentError('Output must be dev-client, debug-apk, apk, or aab.');
|
|
17
|
+
};
|
|
18
|
+
const parseProfile = (value) => {
|
|
19
|
+
const normalized = value.trim().toLowerCase().replace(/_/g, '-');
|
|
20
|
+
if (normalized === 'fast')
|
|
21
|
+
return 'fast';
|
|
22
|
+
if (normalized === 'clean')
|
|
23
|
+
return 'clean';
|
|
24
|
+
if (normalized === 'full-reset' || normalized === 'fullreset')
|
|
25
|
+
return 'full-reset';
|
|
26
|
+
throw new commander_1.InvalidArgumentError('Profile must be fast, clean, or full-reset.');
|
|
27
|
+
};
|
|
28
|
+
const addMobileShortcut = (build, name, environment, description) => {
|
|
29
|
+
build
|
|
30
|
+
.command(name)
|
|
31
|
+
.description(description)
|
|
32
|
+
.option('--output <output>', 'Override saved output for this build only', parseOutput)
|
|
33
|
+
.option('--profile <profile>', 'Override saved profile for this build only', parseProfile)
|
|
34
|
+
.option('--verbose', 'Enable verbose Gradle/Jenkins build logging')
|
|
35
|
+
.option('--dry-run', 'Validate configuration and print the build plan without uploading')
|
|
36
|
+
.option('-y, --yes', 'Skip the final confirmation prompt')
|
|
37
|
+
.action(async (options) => {
|
|
38
|
+
await (0, build_mobile_command_1.buildMobile)({ env: environment, ...options });
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
const registerMobileModule = (program) => {
|
|
42
|
+
const build = program.command('build').description('Build application artifacts using IndraQ build services.');
|
|
43
|
+
addMobileShortcut(build, 'mobile:dev', 'dev', 'Build the mobile Development environment.');
|
|
44
|
+
addMobileShortcut(build, 'mobile:development', 'dev', 'Alias for `indraq build mobile:dev`.');
|
|
45
|
+
addMobileShortcut(build, 'mobile:staging', 'staging', 'Build the mobile Staging environment.');
|
|
46
|
+
addMobileShortcut(build, 'mobile:prod', 'prod', 'Build the mobile Production environment.');
|
|
47
|
+
addMobileShortcut(build, 'mobile:production', 'prod', 'Alias for `indraq build mobile:prod`.');
|
|
48
|
+
};
|
|
49
|
+
exports.registerMobileModule = registerMobileModule;
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/mobile/index.ts"],"names":[],"mappings":";;;AAAA,yCAA0D;AAC1D,0EAA8D;AAO9D,MAAM,WAAW,GAAG,CAAC,KAAa,EAAqB,EAAE;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,oBAAoB,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,oBAAoB,CAAC;IAC/H,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IAC7E,IAAI,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC;IAC/E,IAAI,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC;IAC/E,MAAM,IAAI,gCAAoB,CAAC,oDAAoD,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAsB,EAAE;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjE,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC3C,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,WAAW;QAAE,OAAO,YAAY,CAAC;IACnF,MAAM,IAAI,gCAAoB,CAAC,6CAA6C,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,KAAc,EACd,IAAY,EACZ,WAAkC,EAClC,WAAmB,EACb,EAAE;IACR,KAAK;SACF,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,EAAE,WAAW,CAAC;SACrF,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,EAAE,YAAY,CAAC;SACzF,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;SAClE,MAAM,CAAC,WAAW,EAAE,mEAAmE,CAAC;SACxF,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,OAMd,EAAE,EAAE;QACH,MAAM,IAAA,kCAAW,EAAC,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,0DAA0D,CAAC,CAAC;IAE/G,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAAC;IAC3F,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,sCAAsC,CAAC,CAAC;IAC9F,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,uCAAuC,CAAC,CAAC;IAC/F,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,0CAA0C,CAAC,CAAC;IAC5F,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,uCAAuC,CAAC,CAAC;AACjG,CAAC,CAAA;AARY,QAAA,oBAAoB,wBAQhC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { JenkinsResolvedConfig } from '../../../shared/config/jenkins-config';
|
|
2
|
+
import type { MobileBuildOutput, MobileBuildProfile, MobileEnvironmentName, MobileProjectType } from '../config/mobile-config';
|
|
3
|
+
export interface MobileJenkinsBuildRequest {
|
|
4
|
+
projectId: string;
|
|
5
|
+
appName: string;
|
|
6
|
+
appVersion: string;
|
|
7
|
+
appVersionCode: number;
|
|
8
|
+
projectType: MobileProjectType;
|
|
9
|
+
environment: MobileEnvironmentName;
|
|
10
|
+
output: MobileBuildOutput;
|
|
11
|
+
profile: MobileBuildProfile;
|
|
12
|
+
sourceBundlePath: string;
|
|
13
|
+
sourceSha256: string;
|
|
14
|
+
envFilePath: string | null;
|
|
15
|
+
gitCommit?: string;
|
|
16
|
+
gitDirty: boolean;
|
|
17
|
+
verbose: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface JenkinsArtifact {
|
|
20
|
+
fileName: string;
|
|
21
|
+
relativePath: string;
|
|
22
|
+
url: string;
|
|
23
|
+
}
|
|
24
|
+
export interface MobileJenkinsBuildResult {
|
|
25
|
+
buildNumber: number;
|
|
26
|
+
buildUrl: string;
|
|
27
|
+
result: string;
|
|
28
|
+
artifacts: JenkinsArtifact[];
|
|
29
|
+
}
|
|
30
|
+
export declare const triggerMobileJenkinsBuild: (config: JenkinsResolvedConfig, jobName: string, request: MobileJenkinsBuildRequest) => Promise<MobileJenkinsBuildResult>;
|
|
31
|
+
//# sourceMappingURL=jenkins-mobile.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jenkins-mobile.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/mobile/services/jenkins-mobile.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAMnF,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,WAAW,EAAE,qBAAqB,CAAC;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAuSD,eAAO,MAAM,yBAAyB,GACpC,QAAQ,qBAAqB,EAC7B,SAAS,MAAM,EACf,SAAS,yBAAyB,KACjC,OAAO,CAAC,wBAAwB,CA8HlC,CAAC"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.triggerMobileJenkinsBuild = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const jenkins_service_1 = require("../../../shared/jenkins/jenkins.service");
|
|
6
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
const toJenkinsProjectType = (value) => value === 'expo' ? 'Expo' : 'React Native CLI';
|
|
8
|
+
const toJenkinsEnvironment = (value) => value === 'dev' ? 'Development' : value === 'staging' ? 'Staging' : 'Production';
|
|
9
|
+
const toJenkinsOutput = (value) => {
|
|
10
|
+
switch (value) {
|
|
11
|
+
case 'development-client': return 'Development Client';
|
|
12
|
+
case 'debug-apk': return 'Debug APK';
|
|
13
|
+
case 'release-apk': return 'Release APK';
|
|
14
|
+
case 'release-aab': return 'Release AAB';
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const toJenkinsProfile = (value) => value === 'fast' ? 'FAST' : value === 'clean' ? 'CLEAN' : 'FULL_RESET';
|
|
18
|
+
const createAuthHeaders = (username, password) => ({
|
|
19
|
+
Authorization: `Basic ${Buffer.from(`${username}:${password}`, 'utf8').toString('base64')}`
|
|
20
|
+
});
|
|
21
|
+
const fetchJson = async (url, headers, timeout = 15_000) => {
|
|
22
|
+
const response = await fetch(url, {
|
|
23
|
+
headers,
|
|
24
|
+
signal: AbortSignal.timeout(timeout)
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new Error(`Jenkins request failed (HTTP ${response.status}) for ${url}`);
|
|
28
|
+
}
|
|
29
|
+
return await response.json();
|
|
30
|
+
};
|
|
31
|
+
const extractSetCookieHeaders = (headers) => {
|
|
32
|
+
const extended = headers;
|
|
33
|
+
if (typeof extended.getSetCookie === 'function') {
|
|
34
|
+
return extended.getSetCookie();
|
|
35
|
+
}
|
|
36
|
+
const combined = headers.get('set-cookie');
|
|
37
|
+
if (!combined)
|
|
38
|
+
return [];
|
|
39
|
+
// Fallback for runtimes without Headers.getSetCookie(). Jenkins' session
|
|
40
|
+
// cookies are simple name=value pairs; split only where a new cookie starts.
|
|
41
|
+
return combined.split(/,(?=\s*[^=;,\s]+=)/g);
|
|
42
|
+
};
|
|
43
|
+
const createCookieHeader = (setCookieHeaders) => {
|
|
44
|
+
const cookies = setCookieHeaders
|
|
45
|
+
.map((value) => value.split(';', 1)[0]?.trim() ?? '')
|
|
46
|
+
.filter((value) => /^[^=;\s]+=.*/.test(value));
|
|
47
|
+
return cookies.length > 0 ? cookies.join('; ') : null;
|
|
48
|
+
};
|
|
49
|
+
const getCrumbSession = async (config, authHeaders) => {
|
|
50
|
+
try {
|
|
51
|
+
const response = await fetch(`${(0, jenkins_service_1.normalizeJenkinsUrl)(config.url)}/crumbIssuer/api/json`, {
|
|
52
|
+
headers: authHeaders,
|
|
53
|
+
signal: AbortSignal.timeout(10_000)
|
|
54
|
+
});
|
|
55
|
+
// API-token authentication is exempt from Jenkins CSRF protection, and
|
|
56
|
+
// some controllers disable the crumb issuer entirely.
|
|
57
|
+
if (response.status === 404)
|
|
58
|
+
return { crumbHeaders: {}, cookieHeader: null };
|
|
59
|
+
if (!response.ok)
|
|
60
|
+
return { crumbHeaders: {}, cookieHeader: null };
|
|
61
|
+
const data = await response.json();
|
|
62
|
+
const crumbHeaders = data.crumbRequestField && data.crumb
|
|
63
|
+
? { [data.crumbRequestField]: data.crumb }
|
|
64
|
+
: {};
|
|
65
|
+
// Jenkins crumbs are tied to the web session that issued them. Password-
|
|
66
|
+
// authenticated scripted clients must send this same session cookie with
|
|
67
|
+
// the subsequent POST. API-token clients do not need the crumb, but
|
|
68
|
+
// sending the cookie is harmless.
|
|
69
|
+
const cookieHeader = createCookieHeader(extractSetCookieHeaders(response.headers));
|
|
70
|
+
return { crumbHeaders, cookieHeader };
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// The build POST will still work when an API token is used because Jenkins
|
|
74
|
+
// exempts API-token-authenticated requests from CSRF crumbs.
|
|
75
|
+
return { crumbHeaders: {}, cookieHeader: null };
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const cleanJenkinsResponseBody = (body) => body
|
|
79
|
+
.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, ' ')
|
|
80
|
+
.replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi, ' ')
|
|
81
|
+
.replace(/<[^>]+>/g, ' ')
|
|
82
|
+
.replace(/ /gi, ' ')
|
|
83
|
+
.replace(/"/gi, '"')
|
|
84
|
+
.replace(/'|'/gi, "'")
|
|
85
|
+
.replace(/</gi, '<')
|
|
86
|
+
.replace(/>/gi, '>')
|
|
87
|
+
.replace(/&/gi, '&')
|
|
88
|
+
.replace(/\s+/g, ' ')
|
|
89
|
+
.trim()
|
|
90
|
+
.slice(0, 1000);
|
|
91
|
+
const isCsrfRejection = (status, body) => status === 403 && /(?:crumb|csrf|cross[ -]?site request forgery)/i.test(body);
|
|
92
|
+
const parseQueueLocation = (location, baseUrl) => {
|
|
93
|
+
if (!location) {
|
|
94
|
+
throw new Error('Jenkins accepted the build request but did not return a queue Location header.');
|
|
95
|
+
}
|
|
96
|
+
const queueUrl = new URL(location, `${(0, jenkins_service_1.normalizeJenkinsUrl)(baseUrl)}/`);
|
|
97
|
+
if (!/\/queue\/item\/\d+\/?$/.test(queueUrl.pathname)) {
|
|
98
|
+
throw new Error(`Jenkins did not return a build queue URL. Received redirect/location: ${queueUrl.toString()}`);
|
|
99
|
+
}
|
|
100
|
+
return queueUrl.toString().replace(/\/+$/, '');
|
|
101
|
+
};
|
|
102
|
+
const waitForBuildStart = async (queueUrl, authHeaders) => {
|
|
103
|
+
const deadline = Date.now() + 10 * 60_000;
|
|
104
|
+
let lastQueueReason = '';
|
|
105
|
+
while (Date.now() < deadline) {
|
|
106
|
+
const data = await fetchJson(`${queueUrl}/api/json`, authHeaders);
|
|
107
|
+
if (data.cancelled)
|
|
108
|
+
throw new Error('Jenkins cancelled the mobile build while it was waiting in the queue.');
|
|
109
|
+
const number = data.executable?.number;
|
|
110
|
+
const url = data.executable?.url;
|
|
111
|
+
if (typeof number === 'number' && url)
|
|
112
|
+
return { number, url: url.replace(/\/+$/, '') };
|
|
113
|
+
// Do not use carriage-return progress updates here. Raw \r cursor movement
|
|
114
|
+
// makes Jenkins output appear diagonally/right-shifted in Windows/VS Code.
|
|
115
|
+
const reason = data.why?.trim() ?? '';
|
|
116
|
+
if (reason && reason !== lastQueueReason) {
|
|
117
|
+
console.log(`Jenkins queue: ${reason.slice(0, 160)}`);
|
|
118
|
+
lastQueueReason = reason;
|
|
119
|
+
}
|
|
120
|
+
await sleep(1500);
|
|
121
|
+
}
|
|
122
|
+
throw new Error('Timed out waiting for Jenkins to start the mobile build.');
|
|
123
|
+
};
|
|
124
|
+
const normalizeConsoleText = (value) => {
|
|
125
|
+
const withoutOsc = value.replace(/\u001B\][^\u0007]*(?:\u0007|\u001B\\)/g, '');
|
|
126
|
+
const withoutAnsi = withoutOsc.replace(/\u001B\[[0-?]*[ -/]*[@-~]/g, '');
|
|
127
|
+
const normalized = withoutAnsi
|
|
128
|
+
.replace(/\r\n/g, '\n')
|
|
129
|
+
.replace(/\r/g, '\n')
|
|
130
|
+
.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001A\u007F]/g, '')
|
|
131
|
+
.replace(/\t/g, ' ')
|
|
132
|
+
.replace(/\n{4,}/g, '\n\n\n');
|
|
133
|
+
return process.platform === 'win32' ? normalized.replace(/\n/g, '\r\n') : normalized;
|
|
134
|
+
};
|
|
135
|
+
const decodeHtmlEntities = (value) => value
|
|
136
|
+
.replace(/&#x([0-9a-f]+);/gi, (_match, hex) => String.fromCodePoint(Number.parseInt(hex, 16)))
|
|
137
|
+
.replace(/&#(\d+);/g, (_match, decimal) => String.fromCodePoint(Number.parseInt(decimal, 10)))
|
|
138
|
+
.replace(/ /gi, ' ')
|
|
139
|
+
.replace(/"/gi, '"')
|
|
140
|
+
.replace(/'|'/gi, "'")
|
|
141
|
+
.replace(/</gi, '<')
|
|
142
|
+
.replace(/>/gi, '>')
|
|
143
|
+
.replace(/&/gi, '&');
|
|
144
|
+
const sanitizeJenkinsProgressiveHtml = (value) => {
|
|
145
|
+
// Jenkins' own web console consumes progressiveHtml, not progressiveText.
|
|
146
|
+
// progressiveHtml renders/removes ConsoleNote metadata server-side, so the
|
|
147
|
+
// terminal receives the same human-readable text that Jenkins displays in
|
|
148
|
+
// the browser instead of hidden `ha:////...` annotation payloads.
|
|
149
|
+
const text = decodeHtmlEntities(value
|
|
150
|
+
.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, '')
|
|
151
|
+
.replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi, '')
|
|
152
|
+
.replace(/<br\s*\/?\s*>/gi, '\n')
|
|
153
|
+
.replace(/<\/(?:div|p|li|tr|h[1-6])\s*>/gi, '\n')
|
|
154
|
+
.replace(/<[^>]+>/g, ''));
|
|
155
|
+
return normalizeConsoleText(text);
|
|
156
|
+
};
|
|
157
|
+
const sanitizeJenkinsProgressiveTextFallback = (value) => {
|
|
158
|
+
// progressiveText exposes Jenkins ConsoleNote binary annotations. Remove the
|
|
159
|
+
// complete hidden-note envelope *before* stripping ANSI sequences. The extra
|
|
160
|
+
// ha://// fallback handles controllers/plugins that already removed the ANSI
|
|
161
|
+
// pre/postamble but left the encoded annotation body behind.
|
|
162
|
+
const withoutConsoleNotes = value
|
|
163
|
+
.replace(/\u001B\[8mha:[\s\S]*?\u001B\[0m/g, '')
|
|
164
|
+
.replace(/ha:\/\/\/\/[A-Za-z0-9+/]+={1,2}/g, '');
|
|
165
|
+
return normalizeConsoleText(withoutConsoleNotes);
|
|
166
|
+
};
|
|
167
|
+
const appendRecentLines = (buffer, text) => {
|
|
168
|
+
const lines = text
|
|
169
|
+
.replace(/\r\n/g, '\n')
|
|
170
|
+
.split('\n')
|
|
171
|
+
.map((line) => line.trimEnd())
|
|
172
|
+
.filter((line) => line.trim().length > 0);
|
|
173
|
+
buffer.push(...lines);
|
|
174
|
+
if (buffer.length > 250)
|
|
175
|
+
buffer.splice(0, buffer.length - 250);
|
|
176
|
+
};
|
|
177
|
+
const streamBuild = async (buildUrl, authHeaders) => {
|
|
178
|
+
let start = 0;
|
|
179
|
+
const recentLines = [];
|
|
180
|
+
while (true) {
|
|
181
|
+
// This is the same endpoint used by the classic Jenkins web console. It
|
|
182
|
+
// converts Jenkins ConsoleNote metadata to HTML, which lets us remove the
|
|
183
|
+
// markup while keeping the readable username/stage/log text.
|
|
184
|
+
let logResponse = await fetch(`${buildUrl}/logText/progressiveHtml?start=${start}`, {
|
|
185
|
+
headers: authHeaders,
|
|
186
|
+
signal: AbortSignal.timeout(30_000)
|
|
187
|
+
});
|
|
188
|
+
let htmlMode = true;
|
|
189
|
+
// Older/custom controllers may not expose progressiveHtml. Fall back to
|
|
190
|
+
// progressiveText, but explicitly remove Jenkins ConsoleNote annotations.
|
|
191
|
+
if (!logResponse.ok && (logResponse.status === 404 || logResponse.status === 405)) {
|
|
192
|
+
htmlMode = false;
|
|
193
|
+
logResponse = await fetch(`${buildUrl}/logText/progressiveText?start=${start}`, {
|
|
194
|
+
headers: authHeaders,
|
|
195
|
+
signal: AbortSignal.timeout(30_000)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (!logResponse.ok) {
|
|
199
|
+
throw new Error(`Unable to read Jenkins console log (HTTP ${logResponse.status}).`);
|
|
200
|
+
}
|
|
201
|
+
const logPayload = await logResponse.text();
|
|
202
|
+
const displayText = htmlMode
|
|
203
|
+
? sanitizeJenkinsProgressiveHtml(logPayload)
|
|
204
|
+
: sanitizeJenkinsProgressiveTextFallback(logPayload);
|
|
205
|
+
if (displayText) {
|
|
206
|
+
process.stdout.write(displayText);
|
|
207
|
+
appendRecentLines(recentLines, displayText);
|
|
208
|
+
}
|
|
209
|
+
const next = Number(logResponse.headers.get('x-text-size') ?? start);
|
|
210
|
+
if (Number.isFinite(next))
|
|
211
|
+
start = next;
|
|
212
|
+
const state = await fetchJson(`${buildUrl}/api/json?tree=building,result,url,artifacts%5BfileName,relativePath%5D`, authHeaders);
|
|
213
|
+
const moreData = (logResponse.headers.get('x-more-data') ?? '').toLowerCase() === 'true';
|
|
214
|
+
if (!state.building && state.result && !moreData)
|
|
215
|
+
return { ...state, recentLines };
|
|
216
|
+
await sleep(1000);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
const getFailureSummary = (lines) => {
|
|
220
|
+
const useful = lines.filter((line) => {
|
|
221
|
+
const value = line.trim();
|
|
222
|
+
if (!value)
|
|
223
|
+
return false;
|
|
224
|
+
if (/^\[Pipeline\]/.test(value))
|
|
225
|
+
return false;
|
|
226
|
+
if (/^Stage ".*" skipped due to earlier failure/.test(value))
|
|
227
|
+
return false;
|
|
228
|
+
return /(?:error|exception|failed|failure|timeout|timed out|not found|cannot|could not|exit code|what went wrong|problem occurred)/i.test(value);
|
|
229
|
+
});
|
|
230
|
+
const selected = useful.length > 0 ? useful.slice(-12) : lines.slice(-18);
|
|
231
|
+
return selected;
|
|
232
|
+
};
|
|
233
|
+
const triggerMobileJenkinsBuild = async (config, jobName, request) => {
|
|
234
|
+
const credentials = (0, jenkins_service_1.readJenkinsCredentials)(config.serverId);
|
|
235
|
+
const authHeaders = createAuthHeaders(credentials.username, credentials.secret);
|
|
236
|
+
const jobBaseUrl = (0, jenkins_service_1.getJenkinsJobBaseUrl)(config.url, jobName);
|
|
237
|
+
const createBuildForm = async () => {
|
|
238
|
+
const form = new FormData();
|
|
239
|
+
const sourceBlob = await (0, node_fs_1.openAsBlob)(request.sourceBundlePath, { type: 'application/gzip' });
|
|
240
|
+
form.append('SOURCE_BUNDLE', sourceBlob, 'indraq-source.tar.gz');
|
|
241
|
+
if (request.envFilePath) {
|
|
242
|
+
const envBlob = await (0, node_fs_1.openAsBlob)(request.envFilePath, { type: 'text/plain' });
|
|
243
|
+
form.append('ENV_FILE', envBlob, '.env');
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
form.append('ENV_FILE', new Blob([], { type: 'text/plain' }), '.env');
|
|
247
|
+
}
|
|
248
|
+
form.append('PROJECT_ID', request.projectId);
|
|
249
|
+
form.append('APP_NAME', request.appName);
|
|
250
|
+
form.append('APP_VERSION', request.appVersion);
|
|
251
|
+
form.append('APP_VERSION_CODE', String(request.appVersionCode));
|
|
252
|
+
form.append('SOURCE_SHA256', request.sourceSha256);
|
|
253
|
+
form.append('PROJECT_TYPE', toJenkinsProjectType(request.projectType));
|
|
254
|
+
form.append('BUILD_ENVIRONMENT', toJenkinsEnvironment(request.environment));
|
|
255
|
+
form.append('BUILD_OUTPUT', toJenkinsOutput(request.output));
|
|
256
|
+
form.append('BUILD_PROFILE', toJenkinsProfile(request.profile));
|
|
257
|
+
form.append('SOURCE_REVISION', request.gitCommit ?? 'local');
|
|
258
|
+
form.append('SOURCE_DIRTY', request.gitDirty ? 'true' : 'false');
|
|
259
|
+
form.append('VERBOSE_BUILD', request.verbose ? 'true' : 'false');
|
|
260
|
+
return form;
|
|
261
|
+
};
|
|
262
|
+
const submitBuild = async (session) => {
|
|
263
|
+
const headers = {
|
|
264
|
+
...authHeaders,
|
|
265
|
+
...session.crumbHeaders
|
|
266
|
+
};
|
|
267
|
+
if (session.cookieHeader)
|
|
268
|
+
headers.Cookie = session.cookieHeader;
|
|
269
|
+
return await fetch(`${jobBaseUrl}/buildWithParameters`, {
|
|
270
|
+
method: 'POST',
|
|
271
|
+
headers,
|
|
272
|
+
body: await createBuildForm(),
|
|
273
|
+
redirect: 'manual',
|
|
274
|
+
signal: AbortSignal.timeout(120_000)
|
|
275
|
+
});
|
|
276
|
+
};
|
|
277
|
+
let response;
|
|
278
|
+
let responseBody = '';
|
|
279
|
+
try {
|
|
280
|
+
let crumbSession = await getCrumbSession(config, authHeaders);
|
|
281
|
+
response = await submitBuild(crumbSession);
|
|
282
|
+
if (response.status === 403) {
|
|
283
|
+
responseBody = await response.text();
|
|
284
|
+
// A Jenkins crumb is valid only in the web session that created it. If
|
|
285
|
+
// the controller reports a CSRF rejection, refresh both crumb and cookie
|
|
286
|
+
// once and retry with a fresh multipart body.
|
|
287
|
+
if (isCsrfRejection(response.status, responseBody)) {
|
|
288
|
+
console.log('Jenkins requested a fresh CSRF session. Retrying once...');
|
|
289
|
+
crumbSession = await getCrumbSession(config, authHeaders);
|
|
290
|
+
response = await submitBuild(crumbSession);
|
|
291
|
+
responseBody = response.status >= 400 ? await response.text() : '';
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
const message = error instanceof Error ? error.message : 'unknown network error';
|
|
297
|
+
throw new Error(`Unable to upload source and trigger Jenkins: ${message}`);
|
|
298
|
+
}
|
|
299
|
+
if (response.status < 200 || response.status >= 400) {
|
|
300
|
+
if (!responseBody)
|
|
301
|
+
responseBody = await response.text();
|
|
302
|
+
const details = cleanJenkinsResponseBody(responseBody);
|
|
303
|
+
if (response.status === 400) {
|
|
304
|
+
throw new Error(`Jenkins rejected the mobile build parameters (HTTP 400). Make sure this job uses the IndraQ v1.5 mobile Jenkinsfile and the Jenkins "File Parameter" plugin is installed.${details ? `\nJenkins: ${details}` : ''}`);
|
|
305
|
+
}
|
|
306
|
+
if (response.status === 401) {
|
|
307
|
+
throw new Error(`Jenkins rejected the HTTP build authentication (HTTP 401). Reconfigure the Production Jenkins credential.${details ? `\nJenkins: ${details}` : ''}`);
|
|
308
|
+
}
|
|
309
|
+
if (response.status === 403) {
|
|
310
|
+
if (isCsrfRejection(response.status, responseBody)) {
|
|
311
|
+
throw new Error(`Jenkins rejected the CSRF crumb even after refreshing the Jenkins session (HTTP 403).${details ? `\nJenkins: ${details}` : ''}`);
|
|
312
|
+
}
|
|
313
|
+
throw new Error(`Jenkins authenticated successfully but denied starting "${jobName}" (HTTP 403). The Jenkins user needs Job/Read and Job/Build permission for this job.${details ? `\nJenkins: ${details}` : ''}`);
|
|
314
|
+
}
|
|
315
|
+
throw new Error(`Jenkins build request failed (HTTP ${response.status}).${details ? `\nJenkins: ${details}` : ''}`);
|
|
316
|
+
}
|
|
317
|
+
const queueUrl = parseQueueLocation(response.headers.get('location'), config.url);
|
|
318
|
+
console.log(`Jenkins queue: ${queueUrl}`);
|
|
319
|
+
const started = await waitForBuildStart(queueUrl, authHeaders);
|
|
320
|
+
process.stdout.write('\n');
|
|
321
|
+
console.log(`Jenkins build #${started.number}: ${started.url}\n`);
|
|
322
|
+
const state = await streamBuild(started.url, authHeaders);
|
|
323
|
+
const result = state.result ?? 'UNKNOWN';
|
|
324
|
+
const artifacts = (state.artifacts ?? [])
|
|
325
|
+
.filter((item) => Boolean(item.fileName && item.relativePath))
|
|
326
|
+
.map((item) => ({
|
|
327
|
+
fileName: item.fileName,
|
|
328
|
+
relativePath: item.relativePath,
|
|
329
|
+
url: `${started.url}/artifact/${item.relativePath.split('/').map(encodeURIComponent).join('/')}`
|
|
330
|
+
}));
|
|
331
|
+
if (result !== 'SUCCESS') {
|
|
332
|
+
const summary = getFailureSummary(state.recentLines);
|
|
333
|
+
const details = summary.length > 0 ? `\n\nKey Jenkins error lines:\n${summary.map((line) => ` ${line}`).join('\n')}` : '';
|
|
334
|
+
throw new Error(`Jenkins mobile build #${started.number} finished with ${result}.${details}\n\nJenkins build: ${started.url}`);
|
|
335
|
+
}
|
|
336
|
+
return {
|
|
337
|
+
buildNumber: started.number,
|
|
338
|
+
buildUrl: started.url,
|
|
339
|
+
result,
|
|
340
|
+
artifacts
|
|
341
|
+
};
|
|
342
|
+
};
|
|
343
|
+
exports.triggerMobileJenkinsBuild = triggerMobileJenkinsBuild;
|
|
344
|
+
//# sourceMappingURL=jenkins-mobile.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jenkins-mobile.service.js","sourceRoot":"","sources":["../../../../src/modules/mobile/services/jenkins-mobile.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MobileProjectType } from '../config/mobile-config';
|
|
2
|
+
export interface MobileProjectInfo {
|
|
3
|
+
root: string;
|
|
4
|
+
appName: string;
|
|
5
|
+
packageName?: string;
|
|
6
|
+
gitCommit?: string;
|
|
7
|
+
gitDirty: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const validateMobileProjectRoot: (projectType: MobileProjectType, root?: string) => MobileProjectInfo;
|
|
10
|
+
export declare const assertExpoDevelopmentClientInstalled: (root?: string) => void;
|
|
11
|
+
//# sourceMappingURL=project.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/mobile/services/project.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAyCD,eAAO,MAAM,yBAAyB,GACpC,aAAa,iBAAiB,EAC9B,aAAoB,KACnB,iBAiCF,CAAC;AAEF,eAAO,MAAM,oCAAoC,GAAI,aAAoB,KAAG,IAQ3E,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertExpoDevelopmentClientInstalled = exports.validateMobileProjectRoot = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const readPackageJson = (root) => {
|
|
8
|
+
const packagePath = (0, node_path_1.join)(root, 'package.json');
|
|
9
|
+
if (!(0, node_fs_1.existsSync)(packagePath)) {
|
|
10
|
+
throw new Error(`You are not in a mobile project root. package.json was not found in:\n${root}\n\nRun the command from the folder that contains package.json.`);
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse((0, node_fs_1.readFileSync)(packagePath, 'utf8'));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
const message = error instanceof Error ? error.message : 'invalid JSON';
|
|
17
|
+
throw new Error(`Unable to read package.json in ${root}: ${message}`);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const getGitMetadata = (root) => {
|
|
21
|
+
const commitResult = (0, node_child_process_1.spawnSync)('git', ['rev-parse', '--short', 'HEAD'], {
|
|
22
|
+
cwd: root,
|
|
23
|
+
encoding: 'utf8',
|
|
24
|
+
stdio: ['ignore', 'pipe', 'ignore']
|
|
25
|
+
});
|
|
26
|
+
const statusResult = (0, node_child_process_1.spawnSync)('git', ['status', '--porcelain'], {
|
|
27
|
+
cwd: root,
|
|
28
|
+
encoding: 'utf8',
|
|
29
|
+
stdio: ['ignore', 'pipe', 'ignore']
|
|
30
|
+
});
|
|
31
|
+
const commit = commitResult.status === 0 ? commitResult.stdout.trim() : undefined;
|
|
32
|
+
const dirty = statusResult.status === 0 ? Boolean(statusResult.stdout.trim()) : false;
|
|
33
|
+
return { ...(commit ? { commit } : {}), dirty };
|
|
34
|
+
};
|
|
35
|
+
const validateMobileProjectRoot = (projectType, root = process.cwd()) => {
|
|
36
|
+
const pkg = readPackageJson(root);
|
|
37
|
+
const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
|
|
38
|
+
if (projectType === 'expo') {
|
|
39
|
+
if (!deps.expo) {
|
|
40
|
+
throw new Error('Mobile configuration says this is an Expo project, but `expo` is not present in the root package.json. Run `indraq configure` → Mobile App → Project settings.');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
if (!deps['react-native']) {
|
|
45
|
+
throw new Error('Mobile configuration says this is React Native CLI, but `react-native` is not present in the root package.json.');
|
|
46
|
+
}
|
|
47
|
+
if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(root, 'android'))) {
|
|
48
|
+
throw new Error('React Native CLI project root must contain an android/ directory.');
|
|
49
|
+
}
|
|
50
|
+
if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(root, 'android', 'gradlew'))) {
|
|
51
|
+
throw new Error('React Native CLI project root must contain android/gradlew.');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const git = getGitMetadata(root);
|
|
55
|
+
const appName = (pkg.name?.trim() || (0, node_path_1.basename)(root)).replace(/[^A-Za-z0-9._-]+/g, '-');
|
|
56
|
+
return {
|
|
57
|
+
root,
|
|
58
|
+
appName,
|
|
59
|
+
...(pkg.name ? { packageName: pkg.name } : {}),
|
|
60
|
+
...(git.commit ? { gitCommit: git.commit } : {}),
|
|
61
|
+
gitDirty: git.dirty
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
exports.validateMobileProjectRoot = validateMobileProjectRoot;
|
|
65
|
+
const assertExpoDevelopmentClientInstalled = (root = process.cwd()) => {
|
|
66
|
+
const pkg = readPackageJson(root);
|
|
67
|
+
const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
|
|
68
|
+
if (!deps['expo-dev-client']) {
|
|
69
|
+
throw new Error('Expo Development Client selected, but `expo-dev-client` is not installed. Run `npx expo install expo-dev-client` first.');
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
exports.assertExpoDevelopmentClientInstalled = assertExpoDevelopmentClientInstalled;
|
|
73
|
+
//# sourceMappingURL=project.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.service.js","sourceRoot":"","sources":["../../../../src/modules/mobile/services/project.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface SourceBundle {
|
|
2
|
+
archivePath: string;
|
|
3
|
+
sha256: string;
|
|
4
|
+
sizeBytes: number;
|
|
5
|
+
cleanup: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const createSourceBundle: (root: string, projectId: string) => Promise<SourceBundle>;
|
|
8
|
+
export declare const getRootEnvFile: (root: string) => string | null;
|
|
9
|
+
//# sourceMappingURL=source-bundle.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-bundle.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/mobile/services/source-bundle.service.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA+DD,eAAO,MAAM,kBAAkB,GAAU,MAAM,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,YAAY,CAiD9F,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAGtD,CAAC"}
|