UiPath Documentation
uipath-cli
latest
false
UiPath CLI user guide

uip solution pack

Syntax and options for `uip solution pack`, which produces a deployable `.zip` from a solution directory or `.uis` bundle file.

uip solution pack produces a deployable .zip package from a solution directory (containing a .uipx manifest) or from a .uis bundle file. The resulting archive is what uip solution publish uploads to the tenant feed, which uip solution deploy run can then deploy.

Pack is an offline operation — it does not contact Orchestrator except to resolve NuGet dependencies from tenant feeds (or an Orchestrator folder's library feed via --feed-folder) — so it is safe to run inside build steps that do not yet have full credentials, as long as dependency resolution is covered.

Synopsis

uip solution pack <solutionPath> [outputPath] \
  [--name <name>] [--version <version>] \
  [--dry-run] \
  [--skip-analyze] [--governance-file-path <path> | --automation-ops-profile <profile>] \
  [--nuget-sources-config-path <path>] [--exclude-configured-sources] [--feed-folder <name>] \
  [--signing-certificate-path <path>] [--signing-certificate-password <password>] [--signing-timestamp-server <url>] \
  [--author <text>] [--description <text>] [--release-notes <text>] [--project-url <url>] \
  [--repository-url <url>] [--repository-commit <sha>] [--repository-branch <branch>] [--repository-type <type>] \
  [--login-validity <minutes>]
uip solution pack <solutionPath> [outputPath] \
  [--name <name>] [--version <version>] \
  [--dry-run] \
  [--skip-analyze] [--governance-file-path <path> | --automation-ops-profile <profile>] \
  [--nuget-sources-config-path <path>] [--exclude-configured-sources] [--feed-folder <name>] \
  [--signing-certificate-path <path>] [--signing-certificate-password <password>] [--signing-timestamp-server <url>] \
  [--author <text>] [--description <text>] [--release-notes <text>] [--project-url <url>] \
  [--repository-url <url>] [--repository-commit <sha>] [--repository-branch <branch>] [--repository-type <type>] \
  [--login-validity <minutes>]

The command honours the global options and returns the standard exit codes.

Arguments

  • <solutionPath> (required) — Path to a solution directory (containing a .uipx manifest) or a .uis file.
  • [outputPath] (optional) — Output directory where the .zip package will be written. Required unless --dry-run is set — omitting it without --dry-run fails with a pointer to add one or the other.

Options

Core

LongValueDefaultDescription
-n, --name <name>textsolution folder name (or .uis file's base name)Package name. The packaged .zip is named <name>_<version>.zip.
-v, --version <version>text1.0.0Package version. Appears in the output filename and is the value passed to --package-version on deploy run.
--dry-runflagoffRun the full pack pipeline (resource sync, runtime-dependency emission, packager option validation) against a disposable temporary copy and discard the output. Catches pack-time failures — a missing dependency, a broken resource binding, an unpackable project type — without producing a .zip or writing anything back into the solution. It does not inspect the produced package's contents, so it cannot guarantee the solution feed will accept the result. Makes [outputPath] optional.
--login-validity <minutes>minutes10Minimum minutes before token expiration to trigger a refresh. Only relevant when dependency resolution needs a tenant feed.

Dependency resolution

LongValueDefaultDescription
--nuget-sources-config-path <path>pathPath to a NuGet sources configuration file for resolving project dependencies.
--exclude-configured-sourcesflagoffResolve dependencies only from tenant feeds and --nuget-sources-config-path. Drops the built-in UiPath and nuget.org feeds — a dependency not on those feeds fails to restore.
--feed-folder <name>name or pathResolve dependencies from this Orchestrator folder's library feed instead of every tenant feed. Accepts a folder name or fully qualified path.

Governance analysis

--skip-analyze, --governance-file-path, and --automation-ops-profile control the workflow analyzer that runs against every RPA project in the solution. --governance-file-path and --automation-ops-profile are mutually exclusive.

LongValueDefaultDescription
--skip-analyzeflagoffSkip the workflow analyzer for every RPA project. Compilation and validation still run — only the analyzer rules are skipped.
--governance-file-path <path>pathAnalyze every RPA project against this local governance policy file, instead of the analyzer rules shipped with the WorkflowCompiler.
--automation-ops-profile <profile>textAnalyze every RPA project against the governance policy published in AutomationOps for the signed-in tenant. The value is the product whose policy is downloaded — for example StudioWeb, Development, Business.

An empty value for either governance flag (--governance-file-path "") is rejected as a mistake, not silently treated as "no flag."

Package signing

Signing an already-packed project's .nupkg requires the dotnet CLI on PATH.

LongValueDefaultDescription
--signing-certificate-path <path>pathPath to a .pfx code-signing certificate. When set, every packed project .nupkg in the solution is signed before being bundled into the solution .zip.
--signing-certificate-password <password>text or env.VARCertificate password. Pass env.ENV_NAME to read from an environment variable instead of the shell history.
--signing-timestamp-server <url>URLTimestamp server URL for the signature.

Package metadata (source traceability)

These flags stamp traceability metadata into a package.metadata.json file at the archive root and into each project's .nuspec. None are required — omit them all and the package carries only name, version, and the two WorkflowCompiler-required defaults (author: "UiPath", description: "Created by UiPath" when not overridden).

LongValueDefaultDescription
--author <text>textUiPathPackage author.
--description <text>textCreated by UiPathPackage description.
--release-notes <text>textRelease notes for the package.
--project-url <url>URLAutomation Hub idea URL.
--repository-url <url>URLSource repository URL.
--repository-commit <sha>textSource repository commit hash.
--repository-branch <branch>textSource repository branch.
--repository-type <type>textgit (when --repository-url is set)Source repository type. Only recorded when --repository-url is also set.

Examples

Minimal

uip solution pack ./my-solution ./dist
uip solution pack ./my-solution ./dist

Packs the solution at ./my-solution into ./dist/my-solution_1.0.0.zip (default version).

Common — pin name and version for a CI build

uip solution pack ./my-solution ./dist --name invoices --version 1.2.0
uip solution pack ./my-solution ./dist --name invoices --version 1.2.0

Writes ./dist/invoices_1.2.0.zip.

Validate without packing

uip solution pack ./my-solution --dry-run
uip solution pack ./my-solution --dry-run

Runs the full pack pipeline against a temporary directory and discards the output — useful as a pre-deploy gate in CI, since it catches resource-binding, variable-reference, and runtime-dependency errors without needing an outputPath.

Stamp source-traceability metadata

uip solution pack ./my-solution ./dist --version 1.2.0 \
  --repository-url https://github.com/acme/repo \
  --repository-commit abc123 \
  --repository-branch main \
  --release-notes "v1.2.0"
uip solution pack ./my-solution ./dist --version 1.2.0 \
  --repository-url https://github.com/acme/repo \
  --repository-commit abc123 \
  --repository-branch main \
  --release-notes "v1.2.0"

Sign packed projects

uip solution pack ./my-solution ./dist --version 1.2.0 \
  --signing-certificate-path ./cert.pfx \
  --signing-certificate-password env.UIPATH_SIGNING_CERTIFICATE_PASSWORD \
  --signing-timestamp-server http://timestamp.digicert.com
uip solution pack ./my-solution ./dist --version 1.2.0 \
  --signing-certificate-path ./cert.pfx \
  --signing-certificate-password env.UIPATH_SIGNING_CERTIFICATE_PASSWORD \
  --signing-timestamp-server http://timestamp.digicert.com

Skip the workflow analyzer

uip solution pack ./my-solution ./dist --version 1.2.0 --skip-analyze
uip solution pack ./my-solution ./dist --version 1.2.0 --skip-analyze

Compilation and validation still run — only the analyzer rules are skipped.

Analyze against a tenant governance policy

uip solution pack ./my-solution ./dist --version 1.2.0 --automation-ops-profile Development
uip solution pack ./my-solution ./dist --version 1.2.0 --automation-ops-profile Development

Scripting — capture the output path for the publish step

PKG=$(uip solution pack ./my-solution ./dist --version 1.2.0 --output-filter "Data.Packages" --output plain)
uip solution publish "$PKG"
PKG=$(uip solution pack ./my-solution ./dist --version 1.2.0 --output-filter "Data.Packages" --output plain)
uip solution publish "$PKG"

Data shape (--output json)

Real pack:

{
  "Code": "SolutionPack",
  "Data": {
    "Package": "my-solution@1.2.0",
    "Packages": "./dist/my-solution_1.2.0.zip"
  }
}
{
  "Code": "SolutionPack",
  "Data": {
    "Package": "my-solution@1.2.0",
    "Packages": "./dist/my-solution_1.2.0.zip"
  }
}
  • Package<name>@<version> identifier for the packed solution.
  • Packages — comma-separated list of .zip path(s) written to <outputPath>. Typically a single path.

Dry run (--dry-run):

{
  "Code": "SolutionPack",
  "Data": {
    "Package": "my-solution@1.0.0",
    "DryRun": true,
    "Status": "Valid"
  }
}
{
  "Code": "SolutionPack",
  "Data": {
    "Package": "my-solution@1.0.0",
    "DryRun": true,
    "Status": "Valid"
  }
}

Failure modes

  • Missing outputPath without --dry-run. Fails with a pointer to provide an output directory or pass --dry-run.
  • Conflicting governance flags. --governance-file-path and --automation-ops-profile are mutually exclusive; an empty value for either is rejected.
  • Output path inside a member project directory. Refused — anything written there would get packed into that project's own package on the next pack. Choose an output path outside the solution's project directories (for example ./out at the solution root, or a directory outside the solution entirely).
  • Unpackable project type. Names the project type and points at uip tools search / uip tools install <tool> to add the packager tool that handles it (or uip update first, if it's a newly added type).

See also

Was this page helpful?

Connect

Need help? Support

Want to learn? UiPath Academy

Have questions? UiPath Forum

Stay updated