# Adding Your License Key to CI/CD Services

This article describes how to set up and activate your Telerik UI for .NET WinForms [license key](https://www.telerik.com/products/winforms/documentation/licensing/license-key) across a few popular CI/CD services by using deployment keys.

Deployment keys are a dedicated type of license key for build pipelines. They're tied to a specific application and the set of products that the application uses. Deployment keys cannot be used for application development.

To activate your license in a CI/CD environment:

1. Navigate to the [Deployment Keys](https://www.telerik.com/account/downloads/deployment-keys) page.

2. Click **Add Application**. In the form that opens:

   * Add the application name.

   * Select the type of application—public or private.

   * Select the set of products used in the application.

3. Copy the key value and store it securely.

4. [Create an environment variable](https://www.telerik.com/products/winforms/documentation/licensing/add-license-to-ci-cd#creating-an-environment-variable) named **TELERIK_LICENSE** and set it to the obtained key value. Alternatively, the key can be stored in a `telerik-license.txt` file, for example when using the [Azure Secure files approach](https://www.telerik.com/products/winforms/documentation/licensing/add-license-to-ci-cd#using-secure-files-on-azure-devops).

## Creating an Environment Variable

The recommended approach for providing your license key to the `Telerik.Licensing` NuGet package is to use environment variables. Each CI/CD platform has a different process for setting environment variables and this article lists only some of the most popular examples.

### GitHub Actions

1. Create a new [Repository Secret](https://docs.github.com/en/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository) or an [Organization Secret](https://docs.github.com/en/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-an-organization).

2. Set the name of the secret to `TELERIK_LICENSE` and paste the contents of the license file as a value.

3. After running `npm install` or `yarn`, add a build step to activate the license:

   ```YML
   	env:
   		TELERIK_LICENSE: ${{ "{{ secrets.TELERIK_LICENSE }}" }}
   ```

### Azure Pipelines

1. Create a new [secret variable](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops\&tabs=yaml%2Cbatch#secret-variables) named `TELERIK_LICENSE`.

2. Paste the contents of the license key file as a value.

> Always consider the Variable size limit—if you are using a [Variable Group](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops\&tabs=azure-pipelines-ui%2Cyaml), the license key will typically exceed the character limit for the variable values. The only way to have a long value in the Variable Group is to [link it from Azure Key Vault](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/link-variable-groups-to-key-vaults?view=azure-devops). If you cannot use a Key Vault, then use a normal pipeline variable instead or [use the secure files approach](https://www.telerik.com/products/winforms/documentation/licensing/add-license-to-ci-cd#using-secure-files-on-azure-devops).

## Using Secure Files on Azure DevOps

[Secure files](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/secure-files?view=azure-devops) are an alternative approach for sharing the license key file in Azure Pipelines that does not have the size limitations of environment variables.

You have two options for the file-based approach. Set the `TELERIK_LICENSE_PATH` variable or add a file named `telerik-license.txt` to the project directory or a parent directory.

> Make sure to reference Telerik.Licensing v.1.4.10 or later.

For a walkthrough example and more details, see [DevOps Examples - Telerik License with Secure File in Classic Pipeline](https://github.com/LanceMcCarthy/DevOpsExamples?tab=readme-ov-file#classic-pipeline)

### YAML Pipeline

With a YAML pipeline, you can use the [DownloadSecureFile@1](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/download-secure-file-v1?view=azure-pipelines) task, then use `$(name.secureFilePath)` to reference it. For example:

```yaml
   - task: DownloadSecureFile@1
    name: DownloadTelerikLicenseFile # defining the 'name' is important
    displayName: 'Download Telerik License Key File'
    inputs:
      secureFile: 'telerik-license.txt'

  - task: MSBuild@1
    displayName: 'Build Project'
    inputs:
      solution: 'myapp.csproj'
      platform: Any CPU
      configuration: Release
      msbuildArguments: '/p:RestorePackages=false'
    env:
      # use the name.secureFilePath value to set TELERIK_LICENSE_PATH
      TELERIK_LICENSE_PATH: $(DownloadTelerikLicenseFile.secureFilePath)
```

### Classic Pipeline

With a classic pipeline, use the “Download secure file” task and a PowerShell script to set `TELERIK_LICENSE_PATH` to the secure file path.

1. Add a “Download secure file” task and set the output variable's name to `telerikLicense`.

![Azure DevOps Download secure file task configured for a Telerik UI for WinForms license file.](https://www.telerik.com/products/winforms/documentation/assets/acc4f92f44c6de280540a7892af55ec3/installing-license-to-ci-services-0.png)

1. Add a PowerShell task and set the `TELERIK_LICENSE_PATH` variable to the `secureFilePath` property of the output variable.

![Azure DevOps PowerShell task setting TELERIK_LICENSE_PATH for a Telerik UI for WinForms license file.](https://www.telerik.com/products/winforms/documentation/assets/2f732289b90f594517e7a839d4de8ea0/installing-license-to-ci-services-1.png)

The script to set the environment variable is quoted below:

```powershell
	Write-Host "Setting TELERIK_LICENSE_PATH to $(telerikLicense.secureFilePath)"
	Write-Host "##vso[task.setvariable variable=TELERIK_LICENSE_PATH;]$(telerikLicense.secureFilePath)"
```

Alternatively, copy the file into the repository directory:

```powershell
	echo "Copying $(telerikLicense.secureFilePath) to $(Build.Repository.LocalPath)/telerik-license.txt"
	Copy-Item -Path $(telerikLicense.secureFilePath) -Destination "$(Build.Repository.LocalPath)/telerik-license.txt" -Force
```

## See Also

* [Setting Up Your License Key](https://www.telerik.com/products/winforms/documentation/licensing/license-key)
* [License Activation Errors and Warnings](https://www.telerik.com/products/winforms/documentation/licensing/license-errors-warnings)
* [Frequently Asked Questions about Your Telerik UI for .NET WinForms License Key](https://www.telerik.com/products/winforms/documentation/licensing/licensing-faq)
