@vertesia/cli 0.45.2 → 0.46.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/lib/agent/commands.d.ts +11 -0
- package/lib/agent/commands.d.ts.map +1 -0
- package/lib/agent/commands.js +168 -0
- package/lib/agent/commands.js.map +1 -0
- package/lib/agent/connect.d.ts +1 -2
- package/lib/agent/connect.d.ts.map +1 -1
- package/lib/agent/connect.js +4 -8
- package/lib/agent/connect.js.map +1 -1
- package/lib/agent/docker-credential.js +9 -4
- package/lib/agent/docker-credential.js.map +1 -1
- package/lib/agent/docker.d.ts +2 -0
- package/lib/agent/docker.d.ts.map +1 -1
- package/lib/agent/docker.js +46 -7
- package/lib/agent/docker.js.map +1 -1
- package/lib/agent/index.d.ts.map +1 -1
- package/lib/agent/index.js +51 -18
- package/lib/agent/index.js.map +1 -1
- package/lib/agent/project.d.ts +13 -6
- package/lib/agent/project.d.ts.map +1 -1
- package/lib/agent/project.js +21 -26
- package/lib/agent/project.js.map +1 -1
- package/lib/agent/refresh.d.ts +6 -0
- package/lib/agent/refresh.d.ts.map +1 -0
- package/lib/agent/refresh.js +27 -0
- package/lib/agent/refresh.js.map +1 -0
- package/lib/agent/registry.d.ts +3 -1
- package/lib/agent/registry.d.ts.map +1 -1
- package/lib/agent/registry.js +6 -2
- package/lib/agent/registry.js.map +1 -1
- package/lib/agent/version.d.ts +2 -0
- package/lib/agent/version.d.ts.map +1 -0
- package/lib/agent/version.js +4 -0
- package/lib/agent/version.js.map +1 -0
- package/lib/client.d.ts +2 -2
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +2 -2
- package/lib/client.js.map +1 -1
- package/lib/memory/index.js.map +1 -1
- package/lib/objects/commands.d.ts +2 -2
- package/lib/objects/commands.d.ts.map +1 -1
- package/lib/objects/commands.js.map +1 -1
- package/lib/profiles/index.d.ts +1 -0
- package/lib/profiles/index.d.ts.map +1 -1
- package/lib/profiles/index.js +17 -0
- package/lib/profiles/index.js.map +1 -1
- package/lib/run/executor.d.ts +3 -3
- package/lib/run/executor.d.ts.map +1 -1
- package/lib/run/executor.js.map +1 -1
- package/package.json +4 -4
- package/lib/agent/Version.d.ts +0 -12
- package/lib/agent/Version.d.ts.map +0 -1
- package/lib/agent/Version.js +0 -39
- package/lib/agent/Version.js.map +0 -1
- package/lib/agent/build.d.ts +0 -8
- package/lib/agent/build.d.ts.map +0 -1
- package/lib/agent/build.js +0 -8
- package/lib/agent/build.js.map +0 -1
- package/lib/agent/deploy.d.ts +0 -8
- package/lib/agent/deploy.d.ts.map +0 -1
- package/lib/agent/deploy.js +0 -51
- package/lib/agent/deploy.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare enum PublishMode {
|
|
2
|
+
Push = 1,
|
|
3
|
+
Deploy = 2,
|
|
4
|
+
PushAndDeploy = 3
|
|
5
|
+
}
|
|
6
|
+
export declare function publish(version: string, mode: PublishMode): Promise<void>;
|
|
7
|
+
export declare function build(): Promise<void>;
|
|
8
|
+
export declare function release(version: string): Promise<void>;
|
|
9
|
+
export declare function run(version?: string): void;
|
|
10
|
+
export declare function listVersions(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"AAYA,oBAAY,WAAW;IACnB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,aAAa,IAAI;CACpB;AA0CD,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,iBAiB/D;AAED,wBAAsB,KAAK,kBAW1B;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,iBAU5C;AAED,wBAAgB,GAAG,CAAC,OAAO,GAAE,MAAuB,QAmBnD;AAED,wBAAsB,YAAY,kBAmCjC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import colors from "ansi-colors";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import os from "os";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { getClient } from "../client.js";
|
|
6
|
+
import { config, getCloudTypeFromConfigUrl } from "../profiles/index.js";
|
|
7
|
+
import { runDocker, runDockerWithAgentConfig, runDockerWithOutput } from "./docker.js";
|
|
8
|
+
import { AgentProject } from './project.js';
|
|
9
|
+
import { tryRrefreshProjectToken } from './refresh.js';
|
|
10
|
+
import { updateNpmrc } from "./registry.js";
|
|
11
|
+
import { validateVersion } from './version.js';
|
|
12
|
+
export var PublishMode;
|
|
13
|
+
(function (PublishMode) {
|
|
14
|
+
PublishMode[PublishMode["Push"] = 1] = "Push";
|
|
15
|
+
PublishMode[PublishMode["Deploy"] = 2] = "Deploy";
|
|
16
|
+
PublishMode[PublishMode["PushAndDeploy"] = 3] = "PushAndDeploy";
|
|
17
|
+
})(PublishMode || (PublishMode = {}));
|
|
18
|
+
function shoudlDeploy(mode) {
|
|
19
|
+
return mode & PublishMode.Deploy;
|
|
20
|
+
}
|
|
21
|
+
function shouldPush(mode) {
|
|
22
|
+
return mode & PublishMode.Push;
|
|
23
|
+
}
|
|
24
|
+
// we need to build for the linux/amd64 platform (this is the platform used in Vertesia k8s)
|
|
25
|
+
const TARGET_PLATFORM = "linux/amd64";
|
|
26
|
+
const LATEST_VERSION = "latest";
|
|
27
|
+
async function pushImage(project, version) {
|
|
28
|
+
// we need to frefresh the profile token if needed since
|
|
29
|
+
// the docker credentials helper are connecting to studio.
|
|
30
|
+
// this will refresh the profile token if needed by asking the user to reconnect
|
|
31
|
+
await tryRrefreshProjectToken(project);
|
|
32
|
+
const localTag = project.getLocalDockerTag(version);
|
|
33
|
+
const remoteTag = project.getVertesiaDockerTag(version);
|
|
34
|
+
// push the image to the registry
|
|
35
|
+
console.log(`Pushing docker image ${remoteTag}`);
|
|
36
|
+
runDocker(['tag', localTag, remoteTag]);
|
|
37
|
+
runDockerWithAgentConfig(['push', remoteTag]);
|
|
38
|
+
}
|
|
39
|
+
async function triggerDeploy(profile, project, version) {
|
|
40
|
+
const environment = getCloudTypeFromConfigUrl(profile.config_url);
|
|
41
|
+
const client = getClient();
|
|
42
|
+
const agentId = project.getAgentId();
|
|
43
|
+
console.log(`Deploy agent ${agentId}:${version} to ${environment}`);
|
|
44
|
+
await client.store.agents.deploy({
|
|
45
|
+
environment,
|
|
46
|
+
agentId: project.getAgentId(),
|
|
47
|
+
version,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
export async function publish(version, mode) {
|
|
51
|
+
if (!validateVersion(version)) {
|
|
52
|
+
console.log("Invalid version format: " + version + ". Use major.minor.patch[-modifier] format.");
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
if (!config.current) {
|
|
56
|
+
console.log("No active profile is defined.");
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
const profile = config.current;
|
|
60
|
+
const project = new AgentProject();
|
|
61
|
+
if (shouldPush(mode)) {
|
|
62
|
+
await pushImage(project, version);
|
|
63
|
+
}
|
|
64
|
+
if (shoudlDeploy(mode)) {
|
|
65
|
+
await triggerDeploy(profile, project, version);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export async function build() {
|
|
69
|
+
const project = new AgentProject();
|
|
70
|
+
const refreshResult = await tryRrefreshProjectToken(project);
|
|
71
|
+
if (refreshResult) {
|
|
72
|
+
await updateNpmrc(project, refreshResult.profile);
|
|
73
|
+
}
|
|
74
|
+
const tag = project.getLocalDockerTag(LATEST_VERSION);
|
|
75
|
+
console.log(`Building docker image: ${tag}`);
|
|
76
|
+
runDocker(['buildx', 'build', '--platform', TARGET_PLATFORM, '-t', tag, '.']);
|
|
77
|
+
}
|
|
78
|
+
export async function release(version) {
|
|
79
|
+
if (!validateVersion(version)) {
|
|
80
|
+
console.log("Invalid version format: " + version + ". Use major.minor.patch[-modifier] format.");
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
const project = new AgentProject();
|
|
84
|
+
const latestTag = project.getLocalDockerTag(LATEST_VERSION);
|
|
85
|
+
const versionTag = project.getLocalDockerTag(version);
|
|
86
|
+
runDocker(['tag', latestTag, versionTag]);
|
|
87
|
+
}
|
|
88
|
+
export function run(version = LATEST_VERSION) {
|
|
89
|
+
if (version !== LATEST_VERSION && !validateVersion(version)) {
|
|
90
|
+
console.log("Invalid version format: " + version + ". Use major.minor.patch[-modifier] format.");
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
const project = new AgentProject();
|
|
94
|
+
const tag = project.getLocalDockerTag(version);
|
|
95
|
+
// we need to inject the .env file into the container
|
|
96
|
+
// and to get the google credentials needed by the worker
|
|
97
|
+
// TODO: the google credentials will only work with vertesia users ...
|
|
98
|
+
// we need to specify the target palftorm to force qemu emulation for user on other platforms
|
|
99
|
+
const args = ['run', '--platform', TARGET_PLATFORM, '--env-file', '.env'];
|
|
100
|
+
const googleCredsFile = getGoogleCreddentialsFile();
|
|
101
|
+
if (googleCredsFile) {
|
|
102
|
+
args.push('-v', `${googleCredsFile}:/tmp/google-credentials.json`);
|
|
103
|
+
args.push('-e', 'GOOGLE_APPLICATION_CREDENTIALS=/tmp/google-credentials.json');
|
|
104
|
+
}
|
|
105
|
+
args.push(tag);
|
|
106
|
+
runDocker(args);
|
|
107
|
+
}
|
|
108
|
+
export async function listVersions() {
|
|
109
|
+
const project = new AgentProject();
|
|
110
|
+
if (!project.packageJson.vertesia?.image) {
|
|
111
|
+
console.error("Invalid package.json. Missing vertesia.image configuration.");
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
const out = runDockerWithOutput(["images", "--format", "{{.Repository}}:{{.Tag}}"]);
|
|
115
|
+
const lines = out.trim().split('\n');
|
|
116
|
+
const localTagPrefix = project.getLocalDockerTag("");
|
|
117
|
+
const remoteTagPrefix = project.getVertesiaDockerTag("");
|
|
118
|
+
const localTags = {};
|
|
119
|
+
const remoteTags = {};
|
|
120
|
+
const versions = new Set();
|
|
121
|
+
for (const line of lines) {
|
|
122
|
+
const i = line.indexOf(':');
|
|
123
|
+
if (i > 0) {
|
|
124
|
+
const name = line.substring(0, i);
|
|
125
|
+
const version = line.substring(i + 1);
|
|
126
|
+
if (line.startsWith(localTagPrefix)) {
|
|
127
|
+
localTags[version] = { version, name };
|
|
128
|
+
versions.add(version);
|
|
129
|
+
}
|
|
130
|
+
else if (line.startsWith(remoteTagPrefix)) {
|
|
131
|
+
remoteTags[version] = { version, name };
|
|
132
|
+
versions.add(version);
|
|
133
|
+
} // else igonre
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
versions.delete(LATEST_VERSION);
|
|
137
|
+
printVersion(LATEST_VERSION, localTags[LATEST_VERSION], remoteTags[LATEST_VERSION]);
|
|
138
|
+
// sort desc
|
|
139
|
+
Array.from(versions).sort((a, b) => b.localeCompare(a)).forEach(v => {
|
|
140
|
+
printVersion(v, localTags[v], remoteTags[v]);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function printVersion(version, local, remote) {
|
|
144
|
+
if (!local && !remote)
|
|
145
|
+
return;
|
|
146
|
+
const isLatest = version === LATEST_VERSION;
|
|
147
|
+
console.log(colors.bold(isLatest ? version : `v${version}`));
|
|
148
|
+
console.log(`\t${colors.green("Local tag:")} ${local ? local.name + ':' + version : 'N/A'}`);
|
|
149
|
+
if (remote) {
|
|
150
|
+
console.log(`\t${colors.green("published to:")} ${remote.name}:${version}`);
|
|
151
|
+
}
|
|
152
|
+
else if (isLatest) {
|
|
153
|
+
console.log(colors.dim("\tcannot be published"));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log(colors.dim("\tnot published"));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function getGoogleCreddentialsFile() {
|
|
160
|
+
const file = join(os.homedir(), '.config/gcloud/application_default_credentials.json');
|
|
161
|
+
if (fs.existsSync(file)) {
|
|
162
|
+
return file;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"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"}
|
package/lib/agent/connect.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/agent/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/agent/connect.ts"],"names":[],"mappings":"AASA,wBAAsB,gBAAgB,kBAiCrC"}
|
package/lib/agent/connect.js
CHANGED
|
@@ -2,18 +2,14 @@ import enquirer from "enquirer";
|
|
|
2
2
|
import { createProfile, updateProfile } from "../profiles/commands.js";
|
|
3
3
|
import { config, shouldRefreshProfileToken } from "../profiles/index.js";
|
|
4
4
|
import { AgentProject } from "./project.js";
|
|
5
|
-
import {
|
|
5
|
+
import { updateNpmrc } from "./registry.js";
|
|
6
6
|
const { prompt } = enquirer;
|
|
7
|
-
export async function connectToProject(
|
|
7
|
+
export async function connectToProject() {
|
|
8
8
|
const project = new AgentProject();
|
|
9
9
|
const pkg = project.packageJson;
|
|
10
10
|
let profileName = pkg.vertesia.profile;
|
|
11
|
-
const updateNpmrc = async (profile) => {
|
|
12
|
-
config.use(profile);
|
|
13
|
-
await createOrUpdateNpmRegistry(program, project.npmrcFile);
|
|
14
|
-
};
|
|
15
11
|
const onAuthenticationDone = async (result) => {
|
|
16
|
-
await updateNpmrc(result.profile);
|
|
12
|
+
await updateNpmrc(project, result.profile);
|
|
17
13
|
};
|
|
18
14
|
try {
|
|
19
15
|
if (!profileName) {
|
|
@@ -33,7 +29,7 @@ export async function connectToProject(program) {
|
|
|
33
29
|
await updateProfile(profileName, onAuthenticationDone);
|
|
34
30
|
}
|
|
35
31
|
else {
|
|
36
|
-
await updateNpmrc(profileName);
|
|
32
|
+
await updateNpmrc(project, profileName);
|
|
37
33
|
}
|
|
38
34
|
}
|
|
39
35
|
finally {
|
package/lib/agent/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/agent/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/agent/connect.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAChC,IAAI,WAAW,GAAuB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC3D,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAoB,EAAE,EAAE;QACxD,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAA;IACD,IAAI,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,uBAAuB;gBACvB,WAAW,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;YAClF,CAAC;QACL,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,WAAW,CAAC,CAAC;YAC/D,MAAM,aAAa,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACJ,MAAM,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;YAAS,CAAC;QACP,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YACvC,oBAAoB;YACpB,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC;YACnC,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,CAAC;IACL,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAwB,MAAM,MAAM,CAAC;YAC7C,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC5B,OAAO,EAAE,QAAQ;SACpB,CAAC,CAAC;QACH,IAAI,UAAU,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe;QAC1C,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC,CAAC,qBAAqB;AAC3C,CAAC"}
|
|
@@ -7,13 +7,19 @@ function handleNoOp() {
|
|
|
7
7
|
}
|
|
8
8
|
// Function to handle the `get` command
|
|
9
9
|
async function handleGet(serverUrl) {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
// we support us-docker.pkg.dev for now
|
|
11
|
+
if (!serverUrl.endsWith("-docker.pkg.dev")) {
|
|
12
|
+
process.exit(0); // ignore
|
|
13
|
+
}
|
|
12
14
|
try {
|
|
13
15
|
const credentials = await getDockerCredentials(serverUrl);
|
|
16
|
+
if (process.env.DEBUG_DOCKER_CREDS) {
|
|
17
|
+
fs.writeFileSync("./docker-creds-helper.log", "Get token for registry " + serverUrl + " => " + JSON.stringify(credentials, null, 2), "utf8");
|
|
18
|
+
}
|
|
14
19
|
process.stdout.write(JSON.stringify(credentials));
|
|
15
20
|
}
|
|
16
21
|
catch (error) {
|
|
22
|
+
fs.writeFileSync("./docker-creds-helper-error.log", "Get token for registry " + serverUrl + " => " + JSON.stringify(error, null, 2), "utf8");
|
|
17
23
|
console.error("Error fetching credentials:", error.message);
|
|
18
24
|
process.exit(1);
|
|
19
25
|
}
|
|
@@ -28,8 +34,7 @@ function main() {
|
|
|
28
34
|
switch (command) {
|
|
29
35
|
case "get":
|
|
30
36
|
const stdin = fs.readFileSync(0, "utf-8");
|
|
31
|
-
|
|
32
|
-
handleGet(ServerURL);
|
|
37
|
+
handleGet(stdin.trim());
|
|
33
38
|
break;
|
|
34
39
|
case "store":
|
|
35
40
|
case "erase":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-credential.js","sourceRoot":"","sources":["../../src/agent/docker-credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,+DAA+D;AAC/D,SAAS,UAAU;IACf,+CAA+C;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,uCAAuC;AACvC,KAAK,UAAU,SAAS,CAAC,SAAiB;IACtC,
|
|
1
|
+
{"version":3,"file":"docker-credential.js","sourceRoot":"","sources":["../../src/agent/docker-credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,+DAA+D;AAC/D,SAAS,UAAU;IACf,+CAA+C;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,uCAAuC;AACvC,KAAK,UAAU,SAAS,CAAC,SAAiB;IACtC,uCAAuC;IACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IAC9B,CAAC;IACD,IAAI,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACjC,EAAE,CAAC,aAAa,CAAC,2BAA2B,EAAE,yBAAyB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACjJ,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,EAAE,CAAC,aAAa,CAAC,iCAAiC,EAAE,yBAAyB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7I,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAGD,gCAAgC;AAChC,SAAS,IAAI;IACT,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,KAAK;YACN,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxB,MAAM;QAEV,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACP,UAAU,EAAE,CAAC;YACb,MAAM;QAEV;YACI,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/lib/agent/docker.d.ts
CHANGED
|
@@ -4,5 +4,7 @@ export declare function getDockerCredentials(serverUrl: string): Promise<{
|
|
|
4
4
|
Username: string;
|
|
5
5
|
Secret: string;
|
|
6
6
|
}>;
|
|
7
|
+
export declare function runDockerWithAgentConfig(args: string[]): import("child_process").SpawnSyncReturns<Buffer<ArrayBufferLike>>;
|
|
7
8
|
export declare function runDocker(args: string[]): import("child_process").SpawnSyncReturns<Buffer<ArrayBufferLike>>;
|
|
9
|
+
export declare function runDockerWithOutput(args: string[]): string;
|
|
8
10
|
//# sourceMappingURL=docker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/agent/docker.ts"],"names":[],"mappings":"AAUA,wBAAgB,mBAAmB,WAMlC;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/agent/docker.ts"],"names":[],"mappings":"AAUA,wBAAgB,mBAAmB,WAMlC;AAeD,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM;;;;GAO3D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,qEAOtD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,qEAqBvC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAqBjD"}
|
package/lib/agent/docker.js
CHANGED
|
@@ -4,7 +4,7 @@ import { join } from "node:path";
|
|
|
4
4
|
import { getClient } from "../client.js";
|
|
5
5
|
import { config } from "../profiles/index.js";
|
|
6
6
|
import { AgentProject } from "./project.js";
|
|
7
|
-
const
|
|
7
|
+
const LOCAL_DOCKER_CONFIG_DIR = '.docker';
|
|
8
8
|
export function genrateDockerConfig() {
|
|
9
9
|
return JSON.stringify({
|
|
10
10
|
"credHelpers": {
|
|
@@ -16,8 +16,7 @@ async function getGoogleToken(pkgDir) {
|
|
|
16
16
|
const project = new AgentProject(pkgDir);
|
|
17
17
|
const pkg = project.packageJson;
|
|
18
18
|
if (!pkg.vertesia.profile) {
|
|
19
|
-
|
|
20
|
-
process.exit(1);
|
|
19
|
+
throw new Error("Profile entry not found in package.json");
|
|
21
20
|
}
|
|
22
21
|
config.use(pkg.vertesia.profile); // will exit if profile not found
|
|
23
22
|
const client = getClient();
|
|
@@ -28,16 +27,56 @@ export async function getDockerCredentials(serverUrl) {
|
|
|
28
27
|
const token = await getGoogleToken();
|
|
29
28
|
return {
|
|
30
29
|
ServerURL: serverUrl,
|
|
31
|
-
Username: "
|
|
30
|
+
Username: "oauth2accesstoken",
|
|
32
31
|
Secret: token,
|
|
33
32
|
};
|
|
34
33
|
}
|
|
35
|
-
export function
|
|
36
|
-
const config = join(process.cwd(),
|
|
34
|
+
export function runDockerWithAgentConfig(args) {
|
|
35
|
+
const config = join(process.cwd(), LOCAL_DOCKER_CONFIG_DIR);
|
|
37
36
|
const baseArgs = [];
|
|
38
37
|
if (existsSync(config)) {
|
|
39
38
|
baseArgs.push("--config", config);
|
|
40
39
|
}
|
|
41
|
-
return
|
|
40
|
+
return runDocker(baseArgs.concat(args));
|
|
41
|
+
}
|
|
42
|
+
export function runDocker(args) {
|
|
43
|
+
const r = spawnSync('docker', args, {
|
|
44
|
+
stdio: 'inherit',
|
|
45
|
+
env: {
|
|
46
|
+
...process.env,
|
|
47
|
+
DOCKER_BUILDKIT: "1"
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// check for errors
|
|
51
|
+
if (r.error) {
|
|
52
|
+
console.error(`Failed to execute command "docker ${args.join(' ')}":`, r.error);
|
|
53
|
+
process.exit(2);
|
|
54
|
+
}
|
|
55
|
+
// Check for non-zero exit code
|
|
56
|
+
if (r.status !== 0) {
|
|
57
|
+
console.error(`Command "docker ${args.join(' ')}" failed with exit code ${r.status}`);
|
|
58
|
+
process.exit(r.status);
|
|
59
|
+
}
|
|
60
|
+
return r;
|
|
61
|
+
}
|
|
62
|
+
export function runDockerWithOutput(args) {
|
|
63
|
+
const r = spawnSync('docker', args, {
|
|
64
|
+
encoding: 'utf-8',
|
|
65
|
+
env: {
|
|
66
|
+
...process.env,
|
|
67
|
+
DOCKER_BUILDKIT: "1"
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// check for errors
|
|
71
|
+
if (r.error) {
|
|
72
|
+
console.error(`Failed to execute command "docker ${args.join(' ')}":`, r.error);
|
|
73
|
+
process.exit(2);
|
|
74
|
+
}
|
|
75
|
+
// Check for non-zero exit code
|
|
76
|
+
if (r.status !== 0) {
|
|
77
|
+
console.error(`Command "docker ${args.join(' ')}" failed with exit code ${r.status}\n${r.stderr}`);
|
|
78
|
+
process.exit(r.status);
|
|
79
|
+
}
|
|
80
|
+
return r.stdout.trim();
|
|
42
81
|
}
|
|
43
82
|
//# sourceMappingURL=docker.js.map
|
package/lib/agent/docker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/agent/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/agent/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAE1C,MAAM,UAAU,mBAAmB;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC;QAClB,aAAa,EAAE;YACX,4BAA4B,EAAE,UAAU;SAC3C;KACJ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAGD,KAAK,UAAU,cAAc,CAAC,MAAe;IACzC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC;IACnE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAChD,OAAO,CAAC,CAAC,KAAK,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IACxD,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,OAAO;QACH,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,mBAAmB;QAC7B,MAAM,EAAE,KAAK;KAChB,CAAC;AACN,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAc;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAc;IACpC,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE;QAChC,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE;YACD,GAAG,OAAO,CAAC,GAAG;YACd,eAAe,EAAE,GAAG;SACvB;KACJ,CAAC,CAAC;IACH,mBAAmB;IACnB,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,qCAAqC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,+BAA+B;IAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CACT,mBAAmB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,MAAM,EAAE,CACzE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAC9C,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE;QAChC,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE;YACD,GAAG,OAAO,CAAC,GAAG;YACd,eAAe,EAAE,GAAG;SACvB;KACJ,CAAC,CAAC;IACH,mBAAmB;IACnB,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,qCAAqC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,+BAA+B;IAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CACT,mBAAmB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CACtF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
package/lib/agent/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAmFpD"}
|
package/lib/agent/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { build } from "./
|
|
1
|
+
import { build, listVersions, publish, PublishMode, release, run } from "./commands.js";
|
|
2
2
|
import { connectToProject } from "./connect.js";
|
|
3
|
-
import { deploy } from "./deploy.js";
|
|
4
3
|
import { getGooglePrincipal, getGoogleToken } from "./registry.js";
|
|
5
4
|
export function registerAgentCommand(program) {
|
|
6
5
|
const agent = program.command("agent");
|
|
@@ -10,27 +9,61 @@ export function registerAgentCommand(program) {
|
|
|
10
9
|
if (pkgDir) {
|
|
11
10
|
process.chdir(pkgDir);
|
|
12
11
|
}
|
|
13
|
-
await connectToProject(
|
|
12
|
+
await connectToProject();
|
|
14
13
|
});
|
|
15
|
-
agent.command("
|
|
14
|
+
agent.command("publish <version>")
|
|
16
15
|
.description("Deploy a custom workflow worker. The user will be asked for a target image version.")
|
|
17
|
-
.option("-
|
|
18
|
-
.option("--
|
|
19
|
-
.option("--
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
.option("-d, --dir [project_dir]", "Use this as the current directory.")
|
|
17
|
+
.option("--push-only", "If used the docker image will be push only. The deoloyment will not be triggered.")
|
|
18
|
+
.option("--deploy-only", "If used the docker is assumed to be already pushed and only the deploy will be triggered.")
|
|
19
|
+
//.option("-p, --profile [profile]", "The profile name to use. If not specified the one from the package.json will be used.")
|
|
20
|
+
.action(async (version, options = {}) => {
|
|
21
|
+
if (options.dir) {
|
|
22
|
+
process.chdir(options.dir);
|
|
23
|
+
}
|
|
24
|
+
let mode;
|
|
25
|
+
if (options.pushOnly) {
|
|
26
|
+
mode = PublishMode.Push;
|
|
23
27
|
}
|
|
24
|
-
|
|
28
|
+
else if (options.deployOnly) {
|
|
29
|
+
mode = PublishMode.Deploy;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
mode = PublishMode.PushAndDeploy;
|
|
33
|
+
}
|
|
34
|
+
await publish(version, mode);
|
|
25
35
|
});
|
|
26
|
-
agent.command("build
|
|
27
|
-
.description("Build a local docker image.")
|
|
28
|
-
.option("-
|
|
29
|
-
.action(async (
|
|
30
|
-
if (
|
|
31
|
-
process.chdir(
|
|
36
|
+
agent.command("build")
|
|
37
|
+
.description("Build a local docker image using 'latest' as version.")
|
|
38
|
+
.option("-d, --dir [project_dir]", "Use this as the current directory.")
|
|
39
|
+
.action(async (options) => {
|
|
40
|
+
if (options.dir) {
|
|
41
|
+
process.chdir(options.dir);
|
|
42
|
+
}
|
|
43
|
+
await build();
|
|
44
|
+
});
|
|
45
|
+
agent.command("release [version]")
|
|
46
|
+
.description("Promote the latest version to a named version (tag it).")
|
|
47
|
+
.option("-d, --dir [project_dir]", "Use this as the current directory.")
|
|
48
|
+
.action(async (version, options) => {
|
|
49
|
+
if (options.dir) {
|
|
50
|
+
process.chdir(options.dir);
|
|
32
51
|
}
|
|
33
|
-
await
|
|
52
|
+
await release(version);
|
|
53
|
+
});
|
|
54
|
+
agent.command("run [version]")
|
|
55
|
+
.description("Run the docker image identified by the given version or the 'latest' version if no version is given.")
|
|
56
|
+
.option("-d, --dir [project_dir]", "Use this as the current directory.")
|
|
57
|
+
.action(async (version, options) => {
|
|
58
|
+
if (options.dir) {
|
|
59
|
+
process.chdir(options.dir);
|
|
60
|
+
}
|
|
61
|
+
await run(version);
|
|
62
|
+
});
|
|
63
|
+
agent.command("versions")
|
|
64
|
+
.description("List existing versions.")
|
|
65
|
+
.action(async (_options) => {
|
|
66
|
+
await listVersions();
|
|
34
67
|
});
|
|
35
68
|
agent.command("gtoken")
|
|
36
69
|
.description("Get a google cloud token for the current vertesia project.")
|
package/lib/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"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"}
|
package/lib/agent/project.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manage docker images:
|
|
3
|
+
* - build the latest image: vertesia agent build => agent_org/agent_name:latest
|
|
4
|
+
* - promote the latest build to a version => vertesia agent release 1.0.0 => agent_org/agent_name:1.0.0
|
|
5
|
+
* - list available versions => vertesia agent versions --remote
|
|
6
|
+
* - publish a specific image version => vertesia agent publish 1.0.0
|
|
7
|
+
*/
|
|
1
8
|
export interface AgentConfig {
|
|
2
9
|
profile?: string;
|
|
3
10
|
pm?: string;
|
|
@@ -5,7 +12,6 @@ export interface AgentConfig {
|
|
|
5
12
|
repository: string;
|
|
6
13
|
organization: string;
|
|
7
14
|
name: string;
|
|
8
|
-
version?: string;
|
|
9
15
|
};
|
|
10
16
|
}
|
|
11
17
|
export interface AgentPackageJson {
|
|
@@ -24,8 +30,9 @@ export declare class PackageJson implements AgentPackageJson {
|
|
|
24
30
|
get pm(): any;
|
|
25
31
|
get profile(): any;
|
|
26
32
|
set proffile(value: string);
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
getAgentId(): string;
|
|
34
|
+
getLocalDockerTag(version: string): string;
|
|
35
|
+
getVertesiaDockerTag(version: string): string;
|
|
29
36
|
get latestPublishedVersion(): string;
|
|
30
37
|
set latestPublishedVersion(version: string);
|
|
31
38
|
get vertesia(): any;
|
|
@@ -40,12 +47,12 @@ export declare class AgentProject {
|
|
|
40
47
|
get npmrcFile(): string;
|
|
41
48
|
get dockerConfigFile(): string;
|
|
42
49
|
get packageJson(): PackageJson;
|
|
50
|
+
getAgentId(): string;
|
|
51
|
+
getVertesiaDockerTag(version: string): string;
|
|
52
|
+
getLocalDockerTag(version: string): string;
|
|
43
53
|
/**
|
|
44
54
|
* Build the project sources using the configured package manager.
|
|
45
55
|
*/
|
|
46
56
|
buildSources(): void;
|
|
47
|
-
buildDockerImage(version?: string): string;
|
|
48
|
-
buildAndTagVertesiaImage(version: string): string;
|
|
49
|
-
buildAndPushDockerImage(version: string): string;
|
|
50
57
|
}
|
|
51
58
|
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/agent/project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/agent/project.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,MAAM,WAAW,WAAW;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE;QACJ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;KAChB,CAAA;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,qBAAa,WAAY,YAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM;IAAS,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;gBAA9C,IAAI,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAMjE,IAAI,IAAI,IAIQ,MAAM,CAFrB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED,IAAI,OAAO,IAIQ,MAAM,CAFxB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAExB;IAED,IAAI,EAAE,QAEL;IAED,IAAI,OAAO,QAEV;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAED,UAAU;IASV,iBAAiB,CAAC,OAAO,EAAE,MAAM;IAKjC,oBAAoB,CAAC,OAAO,EAAE,MAAM;IASpC,IAAI,sBAAsB,IAIU,MAAM,CAFzC;IAED,IAAI,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAEzC;IAED,IAAI,QAAQ,IAIQ,GAAG,CAFtB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,EAEtB;IAED,IAAI;CAGP;AAED,qBAAa,YAAY;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;gBAEP,MAAM,CAAC,EAAE,MAAM;IAkB3B,IAAI,SAAS,WAEZ;IAED,IAAI,gBAAgB,WAEnB;IAED,IAAI,WAAW,gBAMd;IAED,UAAU;IAIV,oBAAoB,CAAC,OAAO,EAAE,MAAM;IAIpC,iBAAiB,CAAC,OAAO,EAAE,MAAM;IAIjC;;OAEG;IACH,YAAY;CAQf"}
|