UiPath Documentation
cicd-integrations
2025.10
true

CI/CD integrations user guide

Managing NuGet feeds

This page describes the three CLI parameters that control which NuGet feeds uipcli consults when resolving package dependencies, and shows how to use each one.

The same parameters apply to both standalone RPA projects and Solutions.

How uipcli resolves feeds

By default, uipcli resolves packages from three sources, merged in this order:

  1. Built-in feeds shipped with the CLI:
    • https://pkgs.dev.azure.com/uipath/Public.Feeds/_packaging/UiPath-Official/nuget/v3/index.json
    • https://gallery.uipath.com/api/v2
    • https://api.nuget.org/v3/index.json
    • C:\Program Files\Microsoft SDKs\NuGetPackages (if this path is on the current agent)
    • C:\Program Files (x86)\Microsoft SDKs\NuGetPackages (if this path is on the current agent)
  2. Host-level NuGet configuration on the machine running the CLI, typically %AppData%\NuGet\NuGet.Config (user-level) and %ProgramFiles(x86)%\NuGet\Config (machine-level).
  3. A custom nuget.config that you pass through --nugetConfigFilePath.

Three parameters let you customize this default resolution:

ParameterWhat it controls
--nugetConfigFilePathAdds the feeds from a nuget.config file you supply.
--disableBuiltInNugetFeedsDrops layer 1 (the built-in feeds).
--excludeConfiguredSourcesDrops layers 1 and 2. Only the --nugetConfigFilePath feeds remain.

When you run uipcli with a configuration file, each parameter has a JSON-style equivalent: "nugetConfigFilePath": "...", "disableBuiltInNugetFeeds": true, "excludeConfiguredSources": true.

Adding custom feeds with --nugetConfigFilePath

--nugetConfigFilePath points the CLI at a nuget.config file whose <packageSources> you want included in the dependency resolution. This is the primary way to add a private feed (corporate ProGet, Artifactory, Azure Artifacts, internal Nexus, etc.) without modifying anything on the build agent.

The file follows the standard NuGet schema:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="MyCustomFeed" value="https://my.corp.example/nuget/v3/index.json" />
  </packageSources>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="MyCustomFeed" value="https://my.corp.example/nuget/v3/index.json" />
  </packageSources>
</configuration>

Pass the path on the command line:

uipcli package pack "C:\projects\MyProject\project.json" -o "C:\Output" \
  --nugetConfigFilePath "C:\ci\nuget.config"
uipcli package pack "C:\projects\MyProject\project.json" -o "C:\Output" \
  --nugetConfigFilePath "C:\ci\nuget.config"

From 25.10.18 onwards, the file is honored end-to-end — the CLI forwards it to the WorkflowCompiler, which loads it through the NuGet libraries directly. The following directives all take effect:

DirectiveEffect
<clear /> inside <packageSources>Drops the inherited list of sources (built-in feeds and host-level configuration) before the rest of the file is applied.
<packageSourceCredentials>Per-source credentials. Basic authentication against private feeds (JFrog, Sonatype Nexus, internal Azure Artifacts, etc.) is handled by NuGet's native HTTP pipeline, including 401 challenges.
<packageSourceMapping>Restricts which package IDs (or ID prefixes) can be resolved from which sources.
<fallbackPackageFolders>Adds local folders that NuGet consults before going to the network. Useful for air-gapped builds.

Authenticated private feed (JFrog, Nexus, internal Azure Artifacts)

Declare the source and its credentials in the same file. The CLI does not need any extra parameters — the NuGet client picks the credentials up automatically when it hits the matching source:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="UiPath-Internal" value="https://artifactory.contoso.example/api/nuget/v3/uipath-feed/index.json" protocolVersion="3" />
  </packageSources>

  <packageSourceCredentials>
    <UiPath-Internal>
      <add key="Username" value="ci-bot" />
      <add key="ClearTextPassword" value="%ARTIFACTORY_TOKEN%" />
    </UiPath-Internal>
  </packageSourceCredentials>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="UiPath-Internal" value="https://artifactory.contoso.example/api/nuget/v3/uipath-feed/index.json" protocolVersion="3" />
  </packageSources>

  <packageSourceCredentials>
    <UiPath-Internal>
      <add key="Username" value="ci-bot" />
      <add key="ClearTextPassword" value="%ARTIFACTORY_TOKEN%" />
    </UiPath-Internal>
  </packageSourceCredentials>
</configuration>

Inject the password through a CI secret, not into the file directly. NuGet expands environment variables of the form %VAR% when it reads the file.

Restricting which sources resolve which packages

Use <packageSourceMapping> when you want UiPath activity packages to come from your internal mirror but allow other dependencies to fall through to a different feed:

<configuration>
  <packageSources>
    <add key="UiPath-Internal" value="https://artifactory.contoso.example/api/nuget/v3/uipath-feed/index.json" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>

  <packageSourceMapping>
    <packageSource key="UiPath-Internal">
      <package pattern="UiPath.*" />
    </packageSource>
    <packageSource key="nuget.org">
      <package pattern="*" />
    </packageSource>
  </packageSourceMapping>
</configuration>
<configuration>
  <packageSources>
    <add key="UiPath-Internal" value="https://artifactory.contoso.example/api/nuget/v3/uipath-feed/index.json" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>

  <packageSourceMapping>
    <packageSource key="UiPath-Internal">
      <package pattern="UiPath.*" />
    </packageSource>
    <packageSource key="nuget.org">
      <package pattern="*" />
    </packageSource>
  </packageSourceMapping>
</configuration>
Note:

On CLI versions prior to 25.10.18, only the <packageSources> URLs were forwarded to the packager — <clear />, <packageSourceCredentials>, <packageSourceMapping>, and <fallbackPackageFolders> were silently ignored. To pin dependency resolution to your nuget.config on older CLI builds, combine --nugetConfigFilePath with --excludeConfiguredSources and provide credentials through the host's NuGet configuration instead.

Alternative: place nuget.config in the CLI cache folder

If you prefer not to pass the parameter on every invocation, you can drop the nuget.config into the folder where uipcli is cached. The CLI picks it up automatically.

Using a custom nuget.config in Azure DevOps

Copy nuget.config to $(Agent.ToolsDirectory)/uipcli after the InstallPlatform step:

trigger:
- main

pool:
  vmImage: ubuntu-latest

stages:
- stage: Demo
  jobs:
    - job: Demo
      steps:
        - task: UiPathInstallPlatform@6
          inputs:
            cliVersion: '25.10'

        - task: CopyFiles@2
          inputs:
            SourceFolder: '$(Build.SourcesDirectory)'
            Contents: 'nuget.config'
            TargetFolder: '$(Agent.ToolsDirectory)/uipcli'

        - task: UiPathPack@6
          inputs:
            versionType: 'AutoVersion'
            projectJsonPath: '$(Build.SourcesDirectory)/project.json'
            outputPath: '$(Build.ArtifactStagingDirectory)/Output'
            traceLevel: 'Information'
trigger:
- main

pool:
  vmImage: ubuntu-latest

stages:
- stage: Demo
  jobs:
    - job: Demo
      steps:
        - task: UiPathInstallPlatform@6
          inputs:
            cliVersion: '25.10'

        - task: CopyFiles@2
          inputs:
            SourceFolder: '$(Build.SourcesDirectory)'
            Contents: 'nuget.config'
            TargetFolder: '$(Agent.ToolsDirectory)/uipcli'

        - task: UiPathPack@6
          inputs:
            versionType: 'AutoVersion'
            projectJsonPath: '$(Build.SourcesDirectory)/project.json'
            outputPath: '$(Build.ArtifactStagingDirectory)/Output'
            traceLevel: 'Information'

Using a custom nuget.config in Jenkins

Copy nuget.config to ${WORKSPACE}/CLI after the InstallPlatform step:

pipeline {
    agent {
        label 'jenkins-agent'
    }

    stages {
        stage('Clone') {
            steps {
                git (
                    branch: 'main',
                    url: 'https://github.com/your-org/your-repo.git'
                )
            }
        }

        stage('Install Platform') {
            steps {
                UiPathInstallPlatform (
                    cliVersion: '25.10',
                    traceLevel: 'Information'
                )
            }
        }

        stage('Copy nuget.config') {
            steps {
                bat 'copy nuget.config CLI\\nuget.config'
            }
        }

        stage('Pack') {
            steps {
                UiPathPack (
                    outputPath: '${WORKSPACE}/Output',
                    projectJsonPath: '${WORKSPACE}/project.json',
                    traceLevel: 'Information',
                    version: AutoVersion()
                )
            }
        }
    }
}
pipeline {
    agent {
        label 'jenkins-agent'
    }

    stages {
        stage('Clone') {
            steps {
                git (
                    branch: 'main',
                    url: 'https://github.com/your-org/your-repo.git'
                )
            }
        }

        stage('Install Platform') {
            steps {
                UiPathInstallPlatform (
                    cliVersion: '25.10',
                    traceLevel: 'Information'
                )
            }
        }

        stage('Copy nuget.config') {
            steps {
                bat 'copy nuget.config CLI\\nuget.config'
            }
        }

        stage('Pack') {
            steps {
                UiPathPack (
                    outputPath: '${WORKSPACE}/Output',
                    projectJsonPath: '${WORKSPACE}/project.json',
                    traceLevel: 'Information',
                    version: AutoVersion()
                )
            }
        }
    }
}

Disabling built-in feeds with --disableBuiltInNugetFeeds

--disableBuiltInNugetFeeds removes UiPath's built-in feeds from the resolution. Host-level NuGet configuration and any feeds from --nugetConfigFilePath are still consulted.

Use this when:

  • Your network blocks pkgs.dev.azure.com, gallery.uipath.com, or api.nuget.org, and you mirror the packages internally instead.
  • You want a deterministic set of activity-package versions sourced from your own feed, not from gallery.uipath.com.
uipcli package pack "C:\projects\MyProject\project.json" -o "C:\Output" \
  --nugetConfigFilePath "C:\ci\nuget.config" \
  --disableBuiltInNugetFeeds
uipcli package pack "C:\projects\MyProject\project.json" -o "C:\Output" \
  --nugetConfigFilePath "C:\ci\nuget.config" \
  --disableBuiltInNugetFeeds

Restricting to custom feeds only with --excludeConfiguredSources

--excludeConfiguredSources excludes both the built-in feeds and the NuGet sources configured at the user and machine level on the host running the CLI (typically %AppData%\NuGet\NuGet.Config and %ProgramFiles(x86)%\NuGet\Config). The CLI resolves packages only from the feeds defined in --nugetConfigFilePath.

Use this when:

  • You want hermetic, reproducible builds where only the feeds you declare in version control are consulted.
  • A shared build agent has machine-level feeds that you don't want bleeding into specific pipelines.
  • You're debugging "works on agent A, fails on agent B" issues caused by divergent host-level NuGet configuration.
uipcli package pack "C:\projects\MyProject\project.json" -o "C:\Output" \
  --nugetConfigFilePath "C:\ci\nuget.config" \
  --excludeConfiguredSources
uipcli package pack "C:\projects\MyProject\project.json" -o "C:\Output" \
  --nugetConfigFilePath "C:\ci\nuget.config" \
  --excludeConfiguredSources
Note:

Make sure the nuget.config you pass with --nugetConfigFilePath declares every feed your project needs — including any UiPath feed equivalents — because no other source is consulted.

Was this page helpful?

Connect

Need help? Support

Want to learn? UiPath Academy

Have questions? UiPath Forum

Stay updated