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), and does not contact AutomationOps except when a governance flag or --ignored-rules is passed while you are signed in — 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] [--ignored-rules <rules>] [--governance-file-path <path>] [--governance-product <product>] \
  [--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] [--ignored-rules <rules>] [--governance-file-path <path>] [--governance-product <product>] \
  [--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​

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, or when the tenant's governance policy is checked.

Dependency resolution​

LongValueDefaultDescription
--nuget-sources-config-path <path>path—Path 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 path—Resolve 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, --ignored-rules, --governance-file-path, and --governance-product control the workflow analyzer that runs against every RPA project in the solution. The flags can be combined.

LongValueDefaultDescription
--skip-analyzeflagoffSkip the workflow analyzer for every RPA project. Compilation and validation still run — only the analyzer rules are skipped.
--ignored-rules <rules>comma-separated rule IDs—Analyzer rule IDs whose findings are ignored for every RPA project, for example ST-USG-034,ST-MRD-002. Repeat the flag to add more. The rules still run, but their findings are not reported and do not fail the pack. Applies on top of --governance-file-path or the shipped rules. When the signed-in tenant publishes an AutomationOps policy, the list is not applied and a warning says so.
--governance-file-path <path>path—Analyze every RPA project against this local governance policy file instead of the analyzer rules shipped with the WorkflowCompiler. Accepts a policy exported from AutomationOps or a Studio rules-configuration file. When you are signed in, the tenant is asked first (about StudioWeb, unless --governance-product names another product). When the tenant publishes a policy of its own, that policy is used, this file is ignored with a warning, and the pack continues. When the tenant publishes no policy, when it cannot be asked, or when its policy service does not answer, this file is used. The file is read before the tenant is asked, so an unreadable or non-JSON file fails the pack in every case.
--governance-product <product>text—Analyze 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>path—Path 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.VAR—Certificate password. Pass env.ENV_NAME to read from an environment variable instead of the shell history.
--signing-timestamp-server <url>URL—Timestamp 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. When --author or --description is omitted, each member project keeps the value its own project file declares, and falls back to UiPath / Created by UiPath when it declares none.

LongValueDefaultDescription
--author <text>texteach project's own author, else UiPathPackage author. When set, applies to every member project.
--description <text>texteach project's own description, else Created by UiPathPackage description. When set, applies to every member project.
--release-notes <text>text—Release notes for the package.
--project-url <url>URL—Automation Hub idea URL.
--repository-url <url>URL—Source repository URL.
--repository-commit <sha>text—Source repository commit hash.
--repository-branch <branch>text—Source 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 --governance-product Development
uip solution pack ./my-solution ./dist --version 1.2.0 --governance-product Development

Ignore specific analyzer rules​

uip solution pack ./my-solution ./dist --version 1.2.0 --ignored-rules ST-USG-034,ST-MRD-002
uip solution pack ./my-solution ./dist --version 1.2.0 --ignored-rules ST-USG-034,ST-MRD-002

The rules still run, but their findings do not fail the pack. The list is not applied when the tenant publishes an AutomationOps policy.

Scripting — capture the output path for the publish step​

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

Data shape (--output json)​

Real pack:

{
  "Code": "SolutionPack",
  "Data": {
    "Package": "[email protected]",
    "Packages": "./dist/my-solution_1.2.0.zip"
  }
}
{
  "Code": "SolutionPack",
  "Data": {
    "Package": "[email protected]",
    "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": "[email protected]",
    "DryRun": true,
    "Status": "Valid"
  }
}
{
  "Code": "SolutionPack",
  "Data": {
    "Package": "[email protected]",
    "DryRun": true,
    "Status": "Valid"
  }
}

When the pack fails and the packager reports per-project results, the failure envelope carries Data.Projects, one entry per member project:

FieldDescription
PathThe project directory, relative to the solution directory, with forward slashes.
TypeThe project type.
ResultSuccess or Failure.
MessageThe project's result message, when it has one.
FindingsThe project's findings. Each finding can carry Level, Source (Other, Analyzer, Validator, or Compiler), ErrorCode, RuleName, Description, FilePath, ActivityIdRef, and DocumentationLink.

Data.Projects is omitted when the failure belongs to no project.

Project types​

Pack hands each member project to the packager tool for its project type. Some project types have their own pack behavior:

Project typePack behavior
FlowThe .flow file is checked against the Maestro designer's validation rules. A flow with errors fails the pack. Every issue, warnings included, is reported as a finding, with ActivityIdRef naming the node.
Business RulesPacked as a .uirule archive named <rule-name>-<version>.uirule, holding the rule's .dmn files and an entry-points.json derived from them.
Data Fabric entitiesValidated only: pack checks that every entity definition is intact and its schema is valid. The entity definition resources are the deployable payload, so no separate package is produced for the project.

Failure modes​

  • Missing outputPath without --dry-run. Fails with a pointer to provide an output directory or pass --dry-run.
  • Empty governance flag value. An empty value for --governance-file-path or --governance-product is rejected.
  • Unusable governance policy file. A --governance-file-path file that cannot be read or is not JSON fails the pack. So does a file that holds only the inner policy of an AutomationOps export; pass the exported file as-is.
  • Member package ID collision. A member's package ID is composed as <solution>.<project-type>.<member-folder>, capped at 100 characters, and must be unique across the solution. Spaces and dots collapse to a single dot, and IDs are compared case-insensitively. When two members compose the same ID, the pack fails with ErrorCode: invalid_argument, naming the ID and the folders that produced it. The <solution> part is the .uipx file's own name; --name renames the archive only and does not change member IDs. Rename the member folder or the .uipx, then pack again.
  • Project failure. A project that fails compilation, validation, or analysis fails the pack. Data.Projects names the project and its findings.
  • 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(opens in new window)

Want to learn? UiPath Academy(opens in new window)

Have questions? UiPath Forum(opens in new window)

Stay updated