@uipath/solution-tool 1.195.0 → 1.197.0-preview.59
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 +49 -0
- package/dist/deploy.js +6649 -7033
- package/dist/index.js +2 -0
- package/dist/init.js +2953 -4058
- package/dist/models/pack-command-types.d.ts +11 -3
- package/dist/pack.js +185534 -181922
- package/dist/publish.js +7209 -6302
- package/dist/resource.js +5614 -6071
- package/dist/services/auth-helper.d.ts +3 -0
- package/dist/services/deploy-activate-service.d.ts +2 -0
- package/dist/services/deploy-list-service.d.ts +2 -0
- package/dist/services/deploy-run-service.d.ts +22 -4
- package/dist/services/deploy-uninstall-service.d.ts +2 -0
- package/dist/services/folder-helper.d.ts +3 -0
- package/dist/services/pack-command-service.d.ts +0 -1
- package/dist/services/pack-service.d.ts +0 -10
- package/dist/services/packages-list-service.d.ts +2 -0
- package/dist/services/personal-workspace-deploy.d.ts +28 -0
- package/dist/services/personal-workspace-resolver.d.ts +1 -1
- package/dist/services/publish-service.d.ts +26 -8
- package/dist/services/resource-refresh-service.d.ts +3 -1
- package/dist/services/solution-packager-helpers.d.ts +25 -0
- package/dist/services/sync-resources-from-bindings.d.ts +8 -0
- package/dist/templates/AGENTS.md +25 -10
- package/dist/tool.js +54451 -98104
- package/package.json +2 -2
|
@@ -7,4 +7,7 @@ export interface SolutionAuthContext {
|
|
|
7
7
|
export declare function getSolutionAuthContext(options: {
|
|
8
8
|
tenant?: string;
|
|
9
9
|
loginValidity?: number;
|
|
10
|
+
/** Pin auth to this exact `.uipath/.auth` path (forwarded to
|
|
11
|
+
* `getAuthContext`) instead of resolving from `process.cwd()`. */
|
|
12
|
+
envFilePath?: string;
|
|
10
13
|
}): Promise<SolutionAuthContext>;
|
|
@@ -11,6 +11,8 @@ export interface ActivateDeploymentOptions {
|
|
|
11
11
|
* `--tenant` flag flows through here; library callers usually omit it.
|
|
12
12
|
*/
|
|
13
13
|
tenant?: string;
|
|
14
|
+
/** Pin auth to this exact `.uipath/.auth` path. */
|
|
15
|
+
envFilePath?: string;
|
|
14
16
|
/** Timeout in seconds for activation polling. Default 360. */
|
|
15
17
|
timeout?: number;
|
|
16
18
|
/** Milliseconds between activation status polls. Default 5000. */
|
|
@@ -21,6 +21,8 @@ export type SortDirection = "Ascending" | "Descending";
|
|
|
21
21
|
export interface ListDeploymentsOptions {
|
|
22
22
|
/** Override the active tenant for auth + folder-lookup. The CLI's deprecated `--tenant` flag flows through here. */
|
|
23
23
|
tenant?: string;
|
|
24
|
+
/** Pin auth (+ folder lookup) to this exact `.uipath/.auth` path. */
|
|
25
|
+
envFilePath?: string;
|
|
24
26
|
/** Filter by parent folder path (e.g., `"Shared"`). Post-fetch substring match. */
|
|
25
27
|
folderPath?: string;
|
|
26
28
|
/** Filter by parent folder key (GUID). Alternative to {@link folderPath}. */
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Discriminator for {@link DeployFailure}; library callers can ignore the tag and read `.message`/`.instructions`. */
|
|
2
2
|
export type DeployFailureReason = "auth_failed" | "folder_resolution_failed" | "config_file_not_found" | "config_file_read_failed" | "config_file_parse_failed" | "install_request_failed"
|
|
3
|
+
/** Personal Workspace deploy via AS auto-deploy failed (publish first, then retry). */
|
|
4
|
+
| "personal_workspace_deploy_failed"
|
|
3
5
|
/** Recovery: deployment completed but flagged "Needs Setup" — manual config required before activation. */
|
|
4
6
|
| "needs_setup_to_activate"
|
|
5
7
|
/** Recovery: deployment completed, ready to activate — auto-activation didn't run. */
|
|
@@ -21,6 +23,8 @@ export type DeployFailureReason = "auth_failed" | "folder_resolution_failed" | "
|
|
|
21
23
|
export interface DeployOptions {
|
|
22
24
|
/** Override the active tenant for auth + folder-lookup. The CLI's deprecated `--tenant` flag flows through here. */
|
|
23
25
|
tenant?: string;
|
|
26
|
+
/** Pin auth (+ folder lookup) to this exact `.uipath/.auth` path. */
|
|
27
|
+
envFilePath?: string;
|
|
24
28
|
/** Name for the deployment (`uip solution deploy run -n`). */
|
|
25
29
|
deploymentName: string;
|
|
26
30
|
/** Package name to deploy. */
|
|
@@ -50,16 +54,30 @@ export interface DeployOptions {
|
|
|
50
54
|
}
|
|
51
55
|
export interface DeploySuccess {
|
|
52
56
|
ok: true;
|
|
53
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Tenant path: `"DeploymentSucceeded"` after polling reaches terminal.
|
|
59
|
+
* PW path: `"DeploymentStarted"` — the AS auto-deploy endpoint returns
|
|
60
|
+
* at request acceptance, before terminal state is observable.
|
|
61
|
+
*/
|
|
54
62
|
status: string;
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
/** Tenant only — populated from Pipelines install result. PW returns no key. */
|
|
64
|
+
deploymentKey?: string | null;
|
|
65
|
+
/** Tenant only — Pipelines deployment id. Undefined for PW (no Pipelines call). */
|
|
66
|
+
pipelineDeploymentId?: string;
|
|
57
67
|
/** Allows `null` so `"InstanceId": null` reaches JSON output when the SDK reports null. */
|
|
58
68
|
instanceId?: string | null;
|
|
59
69
|
folderName: string;
|
|
60
70
|
folderPath: string;
|
|
61
|
-
/** "SuccessfulActivate" | "Skipped" | "NoInstance" — short canonical token. */
|
|
71
|
+
/** "SuccessfulActivate" | "Skipped" | "NoInstance" — short canonical token. PW path emits `"Auto"`. */
|
|
62
72
|
activationStatus: string;
|
|
73
|
+
/** PW only — server-assigned auto-name (`AutoDeploy-<solution>`). */
|
|
74
|
+
deploymentName?: string;
|
|
75
|
+
/** PW only — package name as deployed. */
|
|
76
|
+
packageName?: string;
|
|
77
|
+
/** PW only — package version as deployed. */
|
|
78
|
+
packageVersion?: string;
|
|
79
|
+
/** PW only — future-tense human guidance ("Check status with..."). */
|
|
80
|
+
nextSteps?: string;
|
|
63
81
|
}
|
|
64
82
|
export interface DeployFailure {
|
|
65
83
|
ok: false;
|
|
@@ -9,6 +9,8 @@ export interface UninstallDeploymentOptions {
|
|
|
9
9
|
* `--tenant` flag flows through here; library callers usually omit it.
|
|
10
10
|
*/
|
|
11
11
|
tenant?: string;
|
|
12
|
+
/** Pin auth to this exact `.uipath/.auth` path. */
|
|
13
|
+
envFilePath?: string;
|
|
12
14
|
/** Timeout in seconds for uninstall polling. Default 360. */
|
|
13
15
|
timeout?: number;
|
|
14
16
|
/** Milliseconds between uninstall status polls. Default 5000. */
|
|
@@ -18,4 +18,7 @@ export declare function resolveParentFolder(options: {
|
|
|
18
18
|
personalWorkspace?: boolean;
|
|
19
19
|
tenant?: string;
|
|
20
20
|
loginValidity?: number;
|
|
21
|
+
/** Pin folder-lookup auth to this exact `.uipath/.auth` path, forwarded to
|
|
22
|
+
* `resolvePersonalWorkspace`/`resolveFolder` so it matches the deploy auth. */
|
|
23
|
+
envFilePath?: string;
|
|
21
24
|
}): Promise<string | undefined>;
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
import "@uipath/packager-tool-apiworkflow";
|
|
2
|
-
import "@uipath/packager-tool-bpmn";
|
|
3
|
-
import "@uipath/packager-tool-case";
|
|
4
|
-
import "@uipath/packager-tool-connector";
|
|
5
|
-
import "@uipath/packager-tool-flow";
|
|
6
|
-
import "@uipath/packager-tool-functions";
|
|
7
|
-
import "@uipath/packager-tool-webapp";
|
|
8
|
-
import "@uipath/packager-tool-workflowcompiler";
|
|
9
|
-
import "@uipath/resource-builder-tool";
|
|
10
|
-
import "@uipath/tool-agent";
|
|
11
1
|
import type { PackCommandOptions } from "../models/pack-command-types";
|
|
12
2
|
export type { PackCommandOptions };
|
|
13
3
|
/**
|
|
@@ -22,6 +22,8 @@ export type ListPackagesFailureReason = "auth_failed" | "list_request_failed";
|
|
|
22
22
|
export interface ListPackagesOptions {
|
|
23
23
|
/** Override the active tenant for auth. The CLI's deprecated `--tenant` flag flows through here. */
|
|
24
24
|
tenant?: string;
|
|
25
|
+
/** Pin auth to this exact `.uipath/.auth` path. */
|
|
26
|
+
envFilePath?: string;
|
|
25
27
|
/** Max packages to fetch. Default `DEFAULT_PAGE_SIZE`. */
|
|
26
28
|
limit?: number;
|
|
27
29
|
/** Column to sort by. Default `"publishDate"`. */
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SolutionAuthContext } from "./auth-helper";
|
|
2
|
+
export interface PersonalWorkspaceDeployResult {
|
|
3
|
+
deploymentName: string;
|
|
4
|
+
packageName: string;
|
|
5
|
+
packageVersion: string;
|
|
6
|
+
folderFQN: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Deploy a Personal-Workspace-feed solution package via the Automation
|
|
10
|
+
* Solutions auto-deploy endpoint.
|
|
11
|
+
*
|
|
12
|
+
* The tenant `deploy run` path (Pipelines `deploy-from-package`) resolves the
|
|
13
|
+
* package from the tenant feed and cannot see a PW-feed package. This path
|
|
14
|
+
* uses the feed-aware `POST /api/deployments/deploy` endpoint instead:
|
|
15
|
+
* - the PW folder key scopes both the package lookup and the deploy (header
|
|
16
|
+
* `X-UIPATH-FolderKey`);
|
|
17
|
+
* - `overwrites: []` lets the server apply the package's default resource
|
|
18
|
+
* configuration (no caller-side overwrite computation);
|
|
19
|
+
* - the endpoint auto-names the deployment `AutoDeploy-<solution>` and
|
|
20
|
+
* auto-activates — matching Studio Web's PW autoDeploy behavior.
|
|
21
|
+
*/
|
|
22
|
+
export declare function deployToPersonalWorkspace(auth: SolutionAuthContext, params: {
|
|
23
|
+
packageName: string;
|
|
24
|
+
packageVersion: string;
|
|
25
|
+
}, options?: {
|
|
26
|
+
tenant?: string;
|
|
27
|
+
loginValidity?: number;
|
|
28
|
+
}): Promise<PersonalWorkspaceDeployResult>;
|
|
@@ -25,4 +25,4 @@ export interface ResolvedPersonalWorkspace {
|
|
|
25
25
|
* @param options - tenant and login validity for API authentication
|
|
26
26
|
* @returns Resolved Personal Workspace `{ key, name }`
|
|
27
27
|
*/
|
|
28
|
-
export declare function resolvePersonalWorkspace(options?: Pick<CreateApiClientOptions, "tenant" | "loginValidity">): Promise<ResolvedPersonalWorkspace>;
|
|
28
|
+
export declare function resolvePersonalWorkspace(options?: Pick<CreateApiClientOptions, "tenant" | "loginValidity" | "envFilePath">): Promise<ResolvedPersonalWorkspace>;
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** Discriminator for {@link PublishFailure}; library callers can ignore the tag and read `.message` / `.ok`. */
|
|
2
|
-
export type PublishFailureReason = "auth_failed" | "file_not_found" | "not_a_zip" | "file_read_failed" | "upload_failed" | "upload_version_conflict" | "upload_network" | "poll_timeout" | "poll_failed" | "poll_aborted" | "publish_failed";
|
|
2
|
+
export type PublishFailureReason = "auth_failed" | "file_not_found" | "not_a_zip" | "file_read_failed" | "personal_workspace_resolution_failed" | "upload_failed" | "upload_version_conflict" | "upload_network" | "poll_timeout" | "poll_failed" | "poll_aborted" | "publish_failed";
|
|
3
3
|
export interface PublishOptions {
|
|
4
4
|
/** Override the active tenant for auth resolution. The CLI's deprecated `--tenant` flag flows through here. */
|
|
5
5
|
tenant?: string;
|
|
6
|
+
/** Pin auth to this exact `.uipath/.auth` path. */
|
|
7
|
+
envFilePath?: string;
|
|
8
|
+
/** Upload into the current user's Personal Workspace feed instead of the tenant feed. */
|
|
9
|
+
personalWorkspace?: boolean;
|
|
6
10
|
/** Wait until the published package reaches a terminal state. Default `false`. */
|
|
7
11
|
wait?: boolean;
|
|
8
12
|
/** Timeout in seconds for the poll loop when `wait` is true. Default `360`. */
|
|
@@ -16,14 +20,19 @@ export interface PublishOptions {
|
|
|
16
20
|
}
|
|
17
21
|
export interface PublishSuccess {
|
|
18
22
|
ok: true;
|
|
19
|
-
/**
|
|
20
|
-
packageName: string;
|
|
21
|
-
/** Package version (semver). */
|
|
22
|
-
packageVersion: string;
|
|
23
|
-
/** Orchestrator's stable key for this exact version (uuid). */
|
|
23
|
+
/** Orchestrator's stable key for this exact version (uuid). Always populated. */
|
|
24
24
|
packageVersionKey: string;
|
|
25
|
-
/**
|
|
26
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Package name as published. Optional because PW publish enriches metadata
|
|
27
|
+
* via a follow-up `packagesGetVersion` call that can briefly 404 due to
|
|
28
|
+
* feed indexing lag — when that happens, the upload is still authoritative
|
|
29
|
+
* but the human-readable name is absent.
|
|
30
|
+
*/
|
|
31
|
+
packageName?: string;
|
|
32
|
+
/** Package version (semver). Optional for the same reason as `packageName`. */
|
|
33
|
+
packageVersion?: string;
|
|
34
|
+
/** Terminal state when `wait: true` (`"Ready"`/`"Active"`), else the upload's immediate state. Optional for the same reason. */
|
|
35
|
+
state?: string;
|
|
27
36
|
}
|
|
28
37
|
export interface PublishFailure {
|
|
29
38
|
ok: false;
|
|
@@ -39,5 +48,14 @@ export type PublishResult = PublishSuccess | PublishFailure;
|
|
|
39
48
|
* solution feed and optionally polls to a terminal state. Returns a tagged
|
|
40
49
|
* {@link PublishResult} for expected failures; re-throws only on unexpected
|
|
41
50
|
* SDK errors. Does not touch `OutputFormatter` / `processContext`.
|
|
51
|
+
*
|
|
52
|
+
* Two upload paths:
|
|
53
|
+
* - **Tenant feed (default)**: `PipelinesApi.pipelinesPackageUpload` —
|
|
54
|
+
* returns a full DTO including packageName/version/state. The CI service
|
|
55
|
+
* principal is authorized for this endpoint; do not unify on the AS path.
|
|
56
|
+
* - **Personal Workspace** (`personalWorkspace: true`): `PackagesApi.packagesUpload`
|
|
57
|
+
* with `locationKey` set to the PW folder key — returns a packageVersionKey
|
|
58
|
+
* GUID only. A follow-up `packagesGetVersion` enriches metadata best-effort
|
|
59
|
+
* (can 404 on indexing lag — handled gracefully).
|
|
42
60
|
*/
|
|
43
61
|
export declare function publishSolutionAsync(packagePath: string, options?: PublishOptions): Promise<PublishResult>;
|
|
@@ -3,6 +3,8 @@ export type ResourceRefreshFailureReason = "solution_not_found" | "not_a_solutio
|
|
|
3
3
|
export interface ResourceRefreshOptions {
|
|
4
4
|
/** Minimum minutes before token expiration to trigger a refresh. Default `10` (matches the CLI's `--login-validity`). */
|
|
5
5
|
loginValidity?: number;
|
|
6
|
+
/** Pin auth to this exact `.uipath/.auth` path. */
|
|
7
|
+
envFilePath?: string;
|
|
6
8
|
}
|
|
7
9
|
export interface ResourceRefreshSuccess {
|
|
8
10
|
ok: true;
|
|
@@ -23,7 +25,7 @@ export interface ResourceRefreshFailure {
|
|
|
23
25
|
}
|
|
24
26
|
export type ResourceRefreshResult = ResourceRefreshSuccess | ResourceRefreshFailure;
|
|
25
27
|
/**
|
|
26
|
-
* Programmatic core of `uip solution
|
|
28
|
+
* Programmatic core of `uip solution resources refresh`: re-scans every project's
|
|
27
29
|
* `bindings_v2.json` and syncs resource declarations into the solution, importing
|
|
28
30
|
* from Orchestrator when a match exists and virtualizing the rest. Returns a tagged
|
|
29
31
|
* {@link ResourceRefreshResult}; re-throws only on unexpected errors. Mirrors
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IFileSystem } from "@uipath/filesystem";
|
|
2
|
+
import { type ISolutionPackager, type SolutionPackOptions } from "@uipath/solution-packager/node";
|
|
3
|
+
import { LogLevel } from "@uipath/solutionpackager-tool-core";
|
|
4
|
+
/**
|
|
5
|
+
* Shared building blocks for the solution packager command services
|
|
6
|
+
* (`pack`, `restore`). Both run the same SDK packager with the same auth
|
|
7
|
+
* connection and log-level mapping; keeping that logic here avoids duplicating
|
|
8
|
+
* it across the per-command services.
|
|
9
|
+
*/
|
|
10
|
+
/** Create a node solution packager wired to the CLI logger and telemetry. */
|
|
11
|
+
export declare function createSolutionPackager(): Promise<ISolutionPackager>;
|
|
12
|
+
/**
|
|
13
|
+
* Read a solution file as a `Uint8Array`. `IFileSystem.readFile` may hand back
|
|
14
|
+
* a `Buffer`/array depending on the backend, so coerce it before passing the
|
|
15
|
+
* bytes to the packager.
|
|
16
|
+
*/
|
|
17
|
+
export declare function readSolutionFileAsUint8Array(fs: IFileSystem, filePath: string): Promise<Uint8Array>;
|
|
18
|
+
/** Map the CLI logger level to the packager SDK log level (defaults to Error). */
|
|
19
|
+
export declare function resolveSdkLogLevel(): LogLevel;
|
|
20
|
+
/**
|
|
21
|
+
* Attach the authenticated cloud connection to the packager options when a
|
|
22
|
+
* session is available. No-op when the user is not logged in (the packager
|
|
23
|
+
* then runs against public feeds only).
|
|
24
|
+
*/
|
|
25
|
+
export declare function applyAuthConnection(options: SolutionPackOptions, loginValidity?: number): Promise<void>;
|
|
@@ -66,6 +66,14 @@ export interface RcsMatch {
|
|
|
66
66
|
path?: string;
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Find a resource in RCS by key (UUID). RCS's `SearchFolderEntities` endpoint
|
|
71
|
+
* has no key-based filter — only `name`/`entityTypes`/`entitySubTypes`. We
|
|
72
|
+
* paginate all resources of this kind and filter locally by key, exiting
|
|
73
|
+
* early on the match. Used for connections, whose binding carries the UUID
|
|
74
|
+
* directly via `bindingKey`.
|
|
75
|
+
*/
|
|
76
|
+
export declare function findResourceByKeyInRcs(builder: ISolutionBuilder, kind: string, expectedKey: string, folderPath?: string, propagateErrors?: boolean): Promise<RcsMatch | undefined>;
|
|
69
77
|
/**
|
|
70
78
|
* Page through RCS for a given (kind, name) and collect every match. Returns
|
|
71
79
|
* an empty array on lookup error (logged as a warning). Callers decide what
|
package/dist/templates/AGENTS.md
CHANGED
|
@@ -45,10 +45,12 @@ You must manage membership via the CLI, never by editing the manifest. All these
|
|
|
45
45
|
|---|---|
|
|
46
46
|
| Create a solution | `uip solution init <name>` |
|
|
47
47
|
| Register an existing subfolder of the solution dir as a project (no copying — use after scaffolding *inside* the solution dir, e.g. `uip rpa create-project --location <solution-dir>`) | `uip solution project add <project-path> [<solution-file>]` |
|
|
48
|
-
| Add a project from outside the solution — copies the folder at `<path>` into the solution dir and registers it (`<path>` is a local filesystem path) | `uip solution project import
|
|
48
|
+
| Add a project from outside the solution — copies the folder at `<path>` into the solution dir and registers it (`<path>` is a local filesystem path) | `uip solution project import <path>` |
|
|
49
49
|
| Unregister a project (does not delete the project files on disk) | `uip solution project remove <project-path> [<solution-file>]` |
|
|
50
50
|
| List projects in the solution | `uip solution project list` |
|
|
51
51
|
|
|
52
|
+
The `uip ... init` scaffolders (`agent init`, `maestro flow init`, `maestro bpmn init`, `maestro case init`, `api-workflow init`) **auto-register** the new project when run inside a solution directory — they walk up for the enclosing `.uipx` and add it to `Projects[]` automatically, so a separate `project add` is not needed. Pass `--skip-solution-registration` to scaffold standalone without registering; the output's `Data.SolutionRegistration.Status` is then `OptedOut`. The full set of `Status` values is: `Registered` / `AlreadyRegistered` (added in this run / already present), `NotInSolution` (no enclosing `.uipx` found), `OptedOut` (`--skip-solution-registration` passed), `Skipped` (a candidate solution was found but registration was not safe to attempt — e.g. multiple `.uipx` in one directory, or the project sits outside the solution dir), and `Failed` (manifest read/parse/write error).
|
|
53
|
+
|
|
52
54
|
## Project Types
|
|
53
55
|
|
|
54
56
|
A solution can contain multiple projects of different types. The table below lists each project type and the `uip` command that scaffolds a fresh one (or marks the row when no scaffolding command exists).
|
|
@@ -64,13 +66,13 @@ A solution can contain multiple projects of different types. The table below lis
|
|
|
64
66
|
| `Agent` | LLM agent project — **low-code** (configured via `agent.json`; no Python) or **coded** (Python: LangGraph / LlamaIndex / OpenAI Agents). Both subtypes share `ProjectType: "Agent"`; the discriminator is `agent.json#type`. | `uip agent init <path>` (low-code) · `uip codedagent new [name]` (coded — see the `uipath-agents` skill for the full flow) | `uipath-agents` |
|
|
65
67
|
| `AppV2` | Coded App — web application | `uip codedapp init <path>` | `uipath-coded-apps` |
|
|
66
68
|
| `Function` | UiPath Function (JS / TS / Python) | `uip functions new [name]` | none |
|
|
67
|
-
| `Api` | API Workflow project |
|
|
69
|
+
| `Api` | API Workflow project | `uip api-workflow init <name>` | none |
|
|
68
70
|
| `Connector` | Integration Service connector | no CLI scaffolding — use `uip is connectors` to list / get / export existing connectors | none |
|
|
69
71
|
| `WebApp` | Legacy low-code UiPath App (the coded variant is `AppV2`) | no CLI scaffolding | none |
|
|
70
72
|
|
|
71
73
|
All skill should be installed by running the command: `uip skills install`. The general-purpose `uipath-platform` skill covers what isn't in a type-specific skill.
|
|
72
74
|
|
|
73
|
-
The type lives in either `project.uiproj` (top-level `ProjectType`) or `project.json` (`designOptions.outputType`, falling back to top-level `ProjectType` when `outputType` is absent — read or write either field).
|
|
75
|
+
The type lives in either `project.uiproj` (top-level `ProjectType`) or `project.json` (`designOptions.outputType`, falling back to top-level `ProjectType` when `outputType` is absent — read or write either field). The `init` scaffolders above auto-register when run inside a solution directory (unless `--skip-solution-registration` is passed). For other scaffolders, register the project with the solution after scaffolding: use `uip solution project add <project-path> [<solution-file>]` when the project already lives inside the solution directory (registers in place, no copy), or `uip solution project import <path>` to copy a project from outside the solution dir into it and register it. If you pass an unknown type to those commands, they reject with the exhaustive accepted list — trust that error over this table.
|
|
74
76
|
|
|
75
77
|
## End-to-End Lifecycle
|
|
76
78
|
|
|
@@ -83,6 +85,13 @@ uip login
|
|
|
83
85
|
# Non-interactive (CI / CD) with client credentials:
|
|
84
86
|
uip login --client-id <ID> --client-secret <SECRET> --tenant <TENANT>
|
|
85
87
|
|
|
88
|
+
# 1a. (Optional) Restore project dependencies before packing. Resolves NuGet
|
|
89
|
+
# deps (including authenticated Orchestrator feeds) so pack can compile.
|
|
90
|
+
# Useful in CI: login -> restore -> pack. Takes <solutionPath> only; it
|
|
91
|
+
# does not produce a package. Pack also restores internally, so this is an
|
|
92
|
+
# optimization, not a requirement.
|
|
93
|
+
uip solution restore .
|
|
94
|
+
|
|
86
95
|
# 2. Pack the solution into a .zip. Two positional args:
|
|
87
96
|
# <solutionPath> — solution dir (containing .uipx) or a .uis file
|
|
88
97
|
# <output-path> — directory where the .zip is written (required unless --dry-run)
|
|
@@ -121,11 +130,15 @@ uip solution deploy list
|
|
|
121
130
|
```bash
|
|
122
131
|
uip solution deploy run --skip-activate ... # leaves "Inactive (Ready to activate)"
|
|
123
132
|
uip solution deploy activate <deployment-name> # activate later
|
|
124
|
-
uip solution deploy uninstall <deployment-name>
|
|
133
|
+
uip solution deploy uninstall <deployment-name> --yes # remove the deployment + its resources (--yes required; the CLI never prompts)
|
|
125
134
|
```
|
|
126
135
|
|
|
127
136
|
`uninstall` and `activate` take the deployment name as a **positional** argument (no `--name` flag). `status` takes the **pipeline deployment ID** (the GUID returned by `deploy run`), also positional.
|
|
128
137
|
|
|
138
|
+
## Package Signing
|
|
139
|
+
|
|
140
|
+
`solution pack` can sign each packed project `.nupkg` with a code-signing certificate. Signing is opt-in: add `--signing-certificate-path <cert.pfx>` to the pack command. The certificate password (`--signing-certificate-password`) is optional — passing it as `env.VAR` (e.g. `env.SIGNING_PASSWORD`) is recommended, though an inline value also works. An optional timestamp server is set with `--signing-timestamp-server <url>`.
|
|
141
|
+
|
|
129
142
|
## Studio Web (Browser Editing)
|
|
130
143
|
|
|
131
144
|
Studio Web is a separate target from the Orchestrator deploy chain — it hosts a browser-based collaborative editor for solutions. The `solution upload` command pushes the local solution there and returns a `DesignerUrl` to open the solution in a browser; this is independent of `pack` / `publish` / `deploy` and does *not* produce a runtime-deployable artifact.
|
|
@@ -134,7 +147,7 @@ Studio Web is a separate target from the Orchestrator deploy chain — it hosts
|
|
|
134
147
|
uip solution upload . # upload solution dir to Studio Web as a new solution; returns DesignerUrl
|
|
135
148
|
uip solution upload . --force # force-replace the existing Studio Web solution referenced by .uipx (destroys cloud version history)
|
|
136
149
|
uip solution download <solution-id> # round-trip a Studio Web solution back to disk
|
|
137
|
-
uip solution delete <solution-id>
|
|
150
|
+
uip solution delete <solution-id> --yes # remove a solution from Studio Web (--yes required; the CLI never prompts)
|
|
138
151
|
```
|
|
139
152
|
|
|
140
153
|
`upload` accepts a solution directory, a `.uipx` file, or a `.uis` file. It probes Studio Web for the bundled `SolutionId` first: if the cloud has no solution with that id, the upload imports as new; if a solution with that id already exists, the upload is refused unless `--force` is passed. Forcing replaces the cloud project in place and **wipes its Studio Web version history**, so use `--force` deliberately. To upload a copy as an unrelated cloud solution instead of overwriting, scaffold a fresh solution with `uip solution init` (or remove the `SolutionId` from the local `.uipx`) and re-run upload.
|
|
@@ -146,15 +159,15 @@ Each project declares the resources it needs (assets, queues, buckets, processes
|
|
|
146
159
|
After editing a project's bindings, or after `solution project import` (which doesn't auto-sync resources), reconcile the solution-level inventory:
|
|
147
160
|
|
|
148
161
|
```bash
|
|
149
|
-
uip solution
|
|
162
|
+
uip solution resources refresh # re-scan every project, sync new / removed resources
|
|
150
163
|
```
|
|
151
164
|
|
|
152
|
-
`solution
|
|
165
|
+
`solution resources refresh` creates new resources for bindings not yet in the solution and imports from Orchestrator when a matching resource already exists.
|
|
153
166
|
|
|
154
167
|
Inspect the current solution inventory:
|
|
155
168
|
|
|
156
169
|
```bash
|
|
157
|
-
uip solution
|
|
170
|
+
uip solution resources list # everything declared in this solution
|
|
158
171
|
```
|
|
159
172
|
|
|
160
173
|
## Deployment Configuration
|
|
@@ -196,6 +209,8 @@ The CLI talks about the same resource types Orchestrator does:
|
|
|
196
209
|
- **Connections** — Integration Service connections to external systems (Salesforce, ServiceNow, …).
|
|
197
210
|
- **Processes / Releases** — published packages bound to a folder.
|
|
198
211
|
- **Triggers** & **Webhooks** — event-, time-, or queue-based job firing; outbound HTTP notifications.
|
|
212
|
+
- **Entities** — Data Service tables. Add or bind with kind `Entity`.
|
|
213
|
+
- **ChoiceSets** — enumerations used by entity fields. Add with kind `ChoiceSet`.
|
|
199
214
|
|
|
200
215
|
Resources outside a solution are managed under the orchestrator tool, which exposes per-type subgroups (`uip or assets …`, `uip or queues …`, `uip or buckets …`, `uip or bucket-files …`, `uip or libraries …`, `uip or queue-items …`, `uip or triggers …`, `uip or webhooks …`). Run `uip or --help` for the live list. Example:
|
|
201
216
|
|
|
@@ -251,9 +266,9 @@ Adjacent groups commonly used alongside solutions:
|
|
|
251
266
|
|---|---|
|
|
252
267
|
| `Not authenticated` / 401 | `uip login`, then re-run |
|
|
253
268
|
| Command targets the wrong tenant | `uip login tenant set <tenant>`; verify with `uip login status` |
|
|
254
|
-
| Pack succeeds but publish 409s | Version conflict — bump the version (`uip solution pack . ./out -v <new-version>`) or delete the colliding version with `uip solution packages delete <package-name> <version
|
|
269
|
+
| Pack succeeds but publish 409s | Version conflict — bump the version (`uip solution pack . ./out -v <new-version>`) or delete the colliding version with `uip solution packages delete <package-name> <version> --yes` (only if intentional; `--yes` required) |
|
|
255
270
|
| `deploy run` fails on a resource conflict | `uip solution deploy config link config.json <resource> --name <existing> --folder-path <path>` to map to the existing one, or change `conflictFixingAction` via `config set` |
|
|
256
|
-
| `Resource not found` after deploy | `uip solution
|
|
271
|
+
| `Resource not found` after deploy | `uip solution resources refresh` to re-sync from each project's `bindings_v2.json`; if still missing, the resource was never declared in any project |
|
|
257
272
|
| Output looks empty | You may have redirected stderr — confirmations and errors go there. Re-run without `2>` |
|
|
258
273
|
|
|
259
274
|
---
|