Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Azure Pipelines Tasks #15818

Closed
JamieMagee opened this issue Jun 1, 2022 · 25 comments
Closed

Support for Azure Pipelines Tasks #15818

JamieMagee opened this issue Jun 1, 2022 · 25 comments
Assignees
Labels
new datasource New datasource support new package manager New package manager support priority-4-low Low priority, unlikely to be done unless it becomes important to more people status:in-progress Someone is working on implementation type:feature Feature (new functionality) v33

Comments

@JamieMagee
Copy link
Contributor

What would you like Renovate to be able to do?

Azure Pipelines is very similar to GitHub Actions. It is made up of a list of steps that refer to tasks, which are versioned JavaScript packages. For example

- task: Bash@3
  inputs:
    script: echo hello

If you have any ideas on how this should be implemented, please tell us here.

There are two types of Azure Pipelines tasks:

  • Built-in
  • Marketplace

Built-in extensions are a part of Azure DevOps itself, and do not need to be explicitly installed. The source of truth for them is https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks.

Marketplace extensions must be explicitly installed by a user. The source of truth for them is the Visual Studio Marketplace1

Is this a feature you are interested in implementing yourself?

Yes

Footnotes

  1. https://marketplace.visualstudio.com/search?target=AzureDevOps&category=Azure%20Pipelines&sortBy=Installs

@JamieMagee JamieMagee added type:feature Feature (new functionality) status:requirements Full requirements are not yet known, so implementation should not be started priority-5-triage priority-4-low Low priority, unlikely to be done unless it becomes important to more people new package manager New package manager support new datasource New datasource support and removed priority-5-triage labels Jun 1, 2022
@github-actions
Copy link
Contributor

github-actions bot commented Jun 1, 2022

Hi there,

You're requesting support for a new package manager. We need to know some basic information about this package manager first. Please copy/paste the new package manager questionnaire, and fill it out in full.

Once the questionnaire is filled out we will evaluate if adding support for this manager is something we want to do.

Good luck,

The Renovate team

@JamieMagee JamieMagee self-assigned this Jun 1, 2022
@JamieMagee
Copy link
Contributor Author

JamieMagee commented Jul 26, 2022

Investigating this a bit more the API to use is going to be https://dev.azure.com/{organizationName}/_apis/distributedtask/tasks?allVersions=true.

This API returns all available versions for a task in the current organization. Not all task versions are available in all organizations.

I can't find this API exposed via azure-devops-node-api (Thought I might not be looking in the right place. I can, however, find the response type TaskDefinition1

Footnotes

  1. https://github.com/microsoft/azure-devops-node-api/blob/1032df89f37f85940bfc321fe34510af90ba03a5/api/interfaces/TaskAgentInterfaces.ts#L2709-L2751

@JamieMagee JamieMagee added status:ready and removed status:requirements Full requirements are not yet known, so implementation should not be started labels Jul 26, 2022
@JamieMagee
Copy link
Contributor Author

Versions in Azure Pipelines are immutable and pinning will not be necessary for this manager.

@JamieMagee
Copy link
Contributor Author

Work is complete on support for built-in Azure Pipelines tasks.

Providing support for custom Azure Pipelines tasks is a little more complicated. Custom Azure Pipelines tasks come from the Visual Studio Marketplace. The API for this doesn't provide us with the information that we need directly. For example take the following pipeline:

step:
- task: AppStoreRelease@1

If I search the marketplace, either through the UI1 or API, I receive no results. The extension this belongs to is called "Apple App Store" and has the following metadata:

Details
{
  "publisher": {
    "publisherId": "e0d976fd-2160-4f6e-811e-4e91431c5533",
    "publisherName": "ms-vsclient",
    "displayName": "Microsoft",
    "flags": "verified",
    "domain": null,
    "isDomainVerified": false
  },
  "extensionId": "fd779727-f190-4827-9972-d0a34dfb5b98",
  "extensionName": "app-store",
  "displayName": "Apple App Store",
  "flags": "validated, public",
  "lastUpdated": "2022-06-29T13:31:42.02Z",
  "publishedDate": "2016-08-23T15:38:19.237Z",
  "releaseDate": "2016-08-23T15:38:19.237Z",
  "shortDescription": "Provides tasks for publishing to Apple's App Store from a TFS/Azure DevOps build or release pipeline",
  "versions": [
    {
      "version": "1.207.0",
      "flags": "validated",
      "lastUpdated": "2022-06-29T13:31:42.02Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.207.0/1656509233572",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.207.0/assetbyname"
    },
    {
      "version": "1.190.0",
      "flags": "validated",
      "lastUpdated": "2021-07-09T06:38:15.65Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.190.0/1625812553609",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.190.0/assetbyname"
    },
    {
      "version": "1.188.0",
      "flags": "validated",
      "lastUpdated": "2021-05-26T16:51:37.517Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.188.0/1622047753762",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.188.0/assetbyname"
    },
    {
      "version": "1.186.0",
      "flags": "validated",
      "lastUpdated": "2021-04-05T16:56:53.813Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.186.0/1617641673320",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.186.0/assetbyname"
    },
    {
      "version": "1.183.1",
      "flags": "validated",
      "lastUpdated": "2021-02-19T11:30:21.207Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.1/1613734082007",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.183.1/assetbyname"
    },
    {
      "version": "1.183.0",
      "flags": "validated",
      "lastUpdated": "2021-02-16T11:17:33.61Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.183.0/1613474115061",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.183.0/assetbyname"
    },
    {
      "version": "1.178.4",
      "flags": "validated",
      "lastUpdated": "2020-11-10T13:22:40.727Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.4/1605014421387",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.178.4/assetbyname"
    },
    {
      "version": "1.178.3",
      "flags": "validated",
      "lastUpdated": "2020-11-07T14:38:15.447Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.3/1604759757655",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.178.3/assetbyname"
    },
    {
      "version": "1.178.2",
      "flags": "validated",
      "lastUpdated": "2020-11-06T15:45:05.1Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.178.2/1604677364340",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.178.2/assetbyname"
    },
    {
      "version": "1.177.2",
      "flags": "validated",
      "lastUpdated": "2020-10-30T13:15:34.133Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.177.2/1604063595012",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.177.2/assetbyname"
    },
    {
      "version": "1.176.0",
      "flags": "validated",
      "lastUpdated": "2020-09-30T05:54:58.13Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.176.0/1601445155241",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.176.0/assetbyname"
    },
    {
      "version": "1.175.0",
      "flags": "validated",
      "lastUpdated": "2020-09-11T09:24:13.38Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.175.0/1599816114013",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.175.0/assetbyname"
    },
    {
      "version": "1.158.0",
      "flags": "validated",
      "lastUpdated": "2019-08-28T21:00:18.163Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.158.0/1567025875559",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.158.0/assetbyname"
    },
    {
      "version": "1.150.0",
      "flags": "validated",
      "lastUpdated": "2019-03-28T19:30:52.07Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.150.0/1553801308588",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.150.0/assetbyname"
    },
    {
      "version": "1.147.0",
      "flags": "validated",
      "lastUpdated": "2019-01-09T21:35:46.927Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.147.0/1547069602120",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.147.0/assetbyname"
    },
    {
      "version": "1.126.0",
      "flags": "validated",
      "lastUpdated": "2017-11-06T17:13:53.34Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VsixManifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/Microsoft.VisualStudio.Services.VsixManifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.126.0/1509988431215",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.126.0/assetbyname"
    },
    {
      "version": "1.116.0",
      "flags": "validated",
      "lastUpdated": "2017-04-07T15:24:28.74Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.116.0/1491578666719",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.116.0/assetbyname"
    },
    {
      "version": "1.115.0",
      "flags": "validated",
      "lastUpdated": "2017-03-08T14:24:32.283Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.115.0/1488983071071",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.115.0/assetbyname"
    },
    {
      "version": "1.114.0",
      "flags": "validated",
      "lastUpdated": "2017-03-03T20:18:53.85Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.114.0/1488572332336",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.114.0/assetbyname"
    },
    {
      "version": "1.112.0",
      "flags": "validated",
      "lastUpdated": "2017-01-20T15:24:04.473Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.112.0/1484925840720",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.112.0/assetbyname"
    },
    {
      "version": "1.2.1",
      "flags": "validated",
      "lastUpdated": "2016-12-08T15:10:21.797Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/images/release-task-with-advanced.png"
        },
        {
          "assetType": "images/variable-definition-firewall-issues.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/images/variable-definition-firewall-issues.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.2.1/1481209817257",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.2.1/assetbyname"
    },
    {
      "version": "1.0.0",
      "flags": "validated",
      "lastUpdated": "2016-08-23T15:38:22.5Z",
      "files": [
        {
          "assetType": "images/promote-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/images/promote-task-with-advanced.png"
        },
        {
          "assetType": "images/release-task-with-advanced.png",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/images/release-task-with-advanced.png"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Details",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/Microsoft.VisualStudio.Services.Content.Details"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Content.Thirdpartynotice",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/Microsoft.VisualStudio.Services.Content.Thirdpartynotice"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Default",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/Microsoft.VisualStudio.Services.Icons.Default"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Icons.Small",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/Microsoft.VisualStudio.Services.Icons.Small"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.Manifest",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/Microsoft.VisualStudio.Services.Manifest"
        },
        {
          "assetType": "Microsoft.VisualStudio.Services.VSIXPackage",
          "source": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709/Microsoft.VisualStudio.Services.VSIXPackage"
        }
      ],
      "assetUri": "https://ms-vsclient.gallerycdn.vsassets.io/extensions/ms-vsclient/app-store/1.0.0/1474455309709",
      "fallbackAssetUri": "https://ms-vsclient.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vsclient/extension/app-store/1.0.0/assetbyname"
    }
  ],
  "categories": [
    "Azure Pipelines"
  ],
  "tags": [
    "App Store",
    "Apple",
    "Build task",
    "deploy",
    "Deploy task",
    "iOS",
    "iPad",
    "iPhone",
    "iTunes Connect",
    "release",
    "tvOS",
    "watchOS",
    "Xcode"
  ],
  "installationTargets": [
    {
      "target": "Microsoft.TeamFoundation.Server",
      "targetVersion": ""
    },
    {
      "target": "Microsoft.VisualStudio.Services.Cloud",
      "targetVersion": ""
    }
  ],
  "deploymentType": 0
}

None of which contains AppStoreRelease.

You need to retrieve the assetType of Microsoft.VisualStudio.Services.Manifest which looks like:

Details
{
    "manifestVersion": 1,
    "visibility": [
        "Build and release"
    ],
    "repository": {
        "type": "git",
        "uri": "https://github.com/microsoft/app-store-vsts-extension/"
    },
    "scope": [
        "vso.build",
        "vso.serviceendpoint"
    ],
    "contributions": [
        {
            "id": "app-store-promote",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "_build/Tasks/AppStorePromote"
            }
        },
        {
            "id": "app-store-release",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "_build/Tasks/AppStoreRelease"
            }
        },
        {
            "id": "ipa-resign",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "_build/Tasks/IpaResign"
            }
        },
        {
            "id": "apple-app-store-service-endpoint",
            "description": "AppleAppStoreAuthenticationEndpoint",
            "type": "ms.vss-endpoint.service-endpoint-type",
            "targets": [
                "ms.vss-endpoint.endpoint-types"
            ],
            "properties": {
                "name": "apple-app-store",
                "displayName": "Apple App Store",
                "url": "https://itunesconnect.apple.com/",
                "inputDescriptors": [],
                "authenticationSchemes": [
                    {
                        "type": "ms.vss-endpoint.endpoint-auth-scheme-basic",
                        "inputDescriptors": [
                            {
                                "id": "username",
                                "name": "App Store E-mail",
                                "description": "The e-mail address of the service account used to authenticate with the Apple App Store.",
                                "inputMode": "textbox",
                                "isConfidential": false,
                                "validation": {
                                    "isRequired": true,
                                    "dataType": "string"
                                }
                            },
                            {
                                "id": "password",
                                "name": "Password",
                                "description": "Password for the account that is publishing to the Apple App Store.",
                                "inputMode": "passwordbox",
                                "isConfidential": true,
                                "validation": {
                                    "isRequired": true,
                                    "dataType": "string"
                                }
                            },
                            {
                                "id": "appSpecificPassword",
                                "name": "App-specific Password",
                                "description": "Used with two-step verification. (See: https://appleid.apple.com/account/manage -> Security -> App-specific Passwords)",
                                "inputMode": "passwordbox",
                                "isConfidential": true,
                                "validation": {
                                    "isRequired": false,
                                    "dataType": "string"
                                }
                            },
                            {
                                "id": "fastlaneSession",
                                "name": "Fastlane Session",
                                "description": "Used with two-step verification. (See: https://github.com/fastlane/fastlane/blob/master/spaceship/README.md#support-for-ci-machines)",
                                "inputMode": "textarea",
                                "isConfidential": true,
                                "validation": {
                                    "isRequired": false,
                                    "dataType": "string"
                                }
                            }
                        ]
                    },
                    {
                        "type": "ms.vss-endpoint.endpoint-auth-scheme-token",
                        "inputDescriptors": [
                            {
                                "id": "apiKeyId",
                                "name": "Key ID",
                                "description": "App Store Connect API Key ID",
                                "inputMode": "textbox",
                                "isConfidential": false,
                                "validation": {
                                    "isRequired": true,
                                    "dataType": "string"
                                }
                            },
                            {
                                "id": "apiKeyIssuerId",
                                "name": "Issuer ID",
                                "description": "App Store Connect API Issuer ID",
                                "inputMode": "textbox",
                                "isConfidential": false,
                                "validation": {
                                    "isRequired": true,
                                    "dataType": "string"
                                }
                            },
                            {
                                "id": "apitoken",
                                "name": "Key Content (base64-encoded Private Key)",
                                "description": "Base64-encoded content of the App Store Connect API P8 private key file",
                                "inputMode": "textarea",
                                "isConfidential": true,
                                "validation": {
                                    "isRequired": true,
                                    "dataType": "string"
                                }
                            },
                            {
                                "id": "apiKeyInHouse",
                                "name": "In House (Enterprise)",
                                "description": "App Store Connect API Use In House (Enterprise) Account",
                                "inputMode": "combo",
                                "isConfidential": false,
                                "validation": {
                                    "isRequired": false,
                                    "dataType": "string",
                                    "maxLength": 30
                                },
                                "values": {
                                    "inputId": "apiKeyInHouseValues",
                                    "defaultValue": "apiKeyInHouse_false",
                                    "possibleValues": [
                                        {
                                            "value": "apiKeyInHouse_true",
                                            "displayValue": "Yes"
                                        },
                                        {
                                            "value": "apiKeyInHouse_false",
                                            "displayValue": "No"
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                ]
            }
        }
    ],
    "scopes": [],
    "contributionTypes": []
}

From there you need to look at the contributions with type of ms.vss-distributed-task.task and parse the name from the properties object.

All that is to say, it's not possible call that API directly in Renovate. Scraping the API to generate the data we need is the only way I can see. However, I'm not sure if the resulting data would be too large to bundle with Renovate directly or not.

Footnotes

  1. https://marketplace.visualstudio.com/search?term=AppStoreRelease&target=AzureDevOps&category=All%20categories&sortBy=Relevance

@rarkins
Copy link
Collaborator

rarkins commented Aug 9, 2022

Scrape -> new git repo -> use that as a datasource ?

@JamieMagee
Copy link
Contributor Author

JamieMagee commented Aug 9, 2022

Additionally, custom tasks can be defined by {publisherName}.{extensionName}.{taskId}.{taskName}, or some variation of it. For example:

  • id-az-pipeline.jmeter-perf-analyzer.custom-build-release-task.perfanalyzer
  • perfanalyzer

refer to the same task. The fully-qualified version is only required if there are conflicts with the taskName.

@JamieMagee
Copy link
Contributor Author

Scrape -> new git repo -> use that as a datasource ?

Yeah, that's likely going to be the solution.

@JamieMagee
Copy link
Contributor Author

And the query I've been using:

POST https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery

{
	"assetTypes": [
		"Microsoft.VisualStudio.Services.Manifest"
	],
	"filters": [
		{
			"criteria": [
				{
					"filterType": 5,
					"value": "Azure Pipelines"
				},
				{
					"filterType": 8,
					"value": "Microsoft.TeamFoundation.Server"
				},
				{
					"filterType": 8,
					"value": "Microsoft.VisualStudio.Services.Cloud"
				}
			],
			"pageSize": 1000,
			"sortBy": 1,
			"sortOrder": 0,
			"pagingToken": null
		}
	],
	"flags": 3
}

This returns the minimal information required (extension metadata, version, and the manifest file we need to parse)

@johannesoenema
Copy link

johannesoenema commented Aug 10, 2022

Hi @JamieMagee, I see this feature is released. Suddenly I see a lot of PRs being generated:
image

I am not sure your approach is working, because apparently not everyone has access to the same versions:
image

Did you add a setting, so we can turn off this feature for our repository?

Edit (just found out that package managers can be disabled globally):
{ "matchManagers": ["azure-pipelines"], "enabled": false }

@JamieMagee
Copy link
Contributor Author

Sorry about that! It's difficult to tell which versions are deployed. There's no public API, only the https://dev.azure.com/{organizationName}/_apis/distributedtask/tasks?allVersions=true API on Azure DevOps itself. Unfortunately, that's not possible to use for people that store their code in GitHub, but build on Azure Pipelines. I thought using the versions from the GitHub repository1 was safe, but clearly not.

Footnotes

  1. https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks

@JamieMagee
Copy link
Contributor Author

The version has been updated here: https://github.com/microsoft/azure-pipelines-tasks/pull/16485/files#diff-25b595d6d12daddae02f6c5f915dbf6e4619763231d5bc51c9f9ae99532b3d4a

But apparently hasn't been released yet.

@pascalberger
Copy link
Contributor

@JamieMagee I've a Azure Pipeline containing of a build stage and a deployment stage.

stages:
  - stage: Build
    jobs:
    - job: Build
      steps:
      - task: UseDotNet@2.207.2
        inputs:
          packageType: sdk
          version: 6.0.400
  - stage: Deployment
    jobs:
    - deployment: deployment
      strategy:
        runOnce:
          deploy:
            steps:
              - task: UseDotNet@2
                inputs:
                  packageType: sdk
                  version: 6.0.400

Renovate 32.154.4 seems to ignore the task in the deployment stage (the one pinned to version 2), while it updates the same task used in jobs (updated to 2.207.2).

@timmkrause
Copy link
Contributor

timmkrause commented Aug 11, 2022

Does the feature actually query for valid/available versions? As well for On-Prem Azure DevOps Servers?

At least I don't think so:

A task is missing. The pipeline references a task called 'DotNetCoreCLI'. This usually indicates the task isn't installed, and you may be able to install it from the Marketplace: https://marketplace.visualstudio.com. (Task version 2.208.1, job 'Job1', step ''.)

So I guess On-Prem users should disable the manager right?

@timmkrause
Copy link
Contributor

OK, I just understood a little bit more how it works via #16949.

Really seems like we've to disable it. What a pitty that Azure DevOps does not expose that tasks data via an API...

@NPadrutt
Copy link

Does the feature actually query for valid/available versions? As well for On-Prem Azure DevOps Servers?

At least I don't think so:

A task is missing. The pipeline references a task called 'DotNetCoreCLI'. This usually indicates the task isn't installed, and you may be able to install it from the Marketplace: https://marketplace.visualstudio.com. (Task version 2.208.1, job 'Job1', step ''.)

So I guess On-Prem users should disable the manager right?

I have the same issue on Azure DevOps. It seems the versions are not valid after they got updated.

@timmkrause
Copy link
Contributor

timmkrause commented Aug 15, 2022

@NPadrutt See #16949. It seems that Azure DevOps does not provide a "public API that exposes this information" (if I understood it correctly). So Renovate operates on a static list which is updated weekly by a GitHub Actions pipeline (#17050) based on https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks (see footnote of #16904). So there may even be discrepancies between the Microsoft Azure DevOps tasks repo and actually deployed task versions within Azure DevOps "Cloud".

We disabled the manager via

"azure-pipelines": {
  "enabled": false
}

@gitfool
Copy link
Contributor

gitfool commented Aug 17, 2022

FWIW, I'm also having issues since #16949 was merged; for example this renovate pull request fails to build on azure pipelines:

A task is missing. The pipeline references a task called 'UseDotNet'. This usually indicates the task isn't installed, and you may be able to install it from the Marketplace: https://marketplace.visualstudio.com. (Task version 2.207.2, job 'build_linux', step ''.)

gitfool added a commit to gitfool/.github that referenced this issue Aug 17, 2022
@JamieMagee
Copy link
Contributor Author

Thanks for reporting. I've opened this bug and will ping some folks internally. But from what I've researched there is no public API to determine exactly what versions are available.

rjgildea added a commit to DiamondLightSource/python-workflows that referenced this issue Aug 22, 2022
rjgildea added a commit to DiamondLightSource/python-zocalo that referenced this issue Aug 22, 2022
@rouke-broersma
Copy link

Perhaps this integration should be disabled by default since it will produce wrong results in many cases.

@HonkingGoose
Copy link
Collaborator

I'm labeling this v33 on the assumption that we want to disable the integration by default. Feel free to revert this, if needed.

@DevRCRun
Copy link

DevRCRun commented Oct 3, 2022

Could this be configured to bump major versions only? It often seems to be the case with ADO stuff that the MS environment is somewhat behind their latest versions. I'm unsure if they're intending us to track the versions this closely? Or are people generally pinning specific task versions in their pipelines rather than majors?

Reading https://learn.microsoft.com/en-us/azure/devops/pipelines/process/tasks?view=azure-devops&tabs=yaml

"When a new minor version is released (for example, 1.2 to 1.3), your build or release will automatically use the new version. However, if a new major version is released (for example 2.0), your build or release will continue to use the major version you specified until you edit the pipeline and manually change to the new major version. The build or release log will include an alert that a new major version is available."

@janorn
Copy link

janorn commented Oct 5, 2022

This Package rule makes renovate ignore minor updates. Keeping the task on the current major.

  "packageRules": [ 
    {
      // Skip minor version for Pipeline Tasks
      "matchDatasources": ["azure-pipelines-tasks"],
      "matchUpdateTypes": ["minor"],
      "enabled": false
    }
  ],

However when a new major version creates a PR it will also include the minor not only the major version.
Any suggestion on how to solve that?

  steps:
- - task: HelmInstaller@0
+ - task: HelmInstaller@1.210.0

@janorn
Copy link

janorn commented Oct 5, 2022

Would be so nice if I just could tell renovate to only use the value newMajor for the version.

@janorn
Copy link

janorn commented Oct 5, 2022

This config actually makes renovate only update major revisions.

  "packageRules": [ 
    {
      // Only extract major versions for Pipeline Tasks
      "matchDatasources": ["azure-pipelines-tasks"],
      "extractVersion": "^(?<version>\\d+)"
    }
  ]

rarkins added a commit that referenced this issue Oct 6, 2022
Closes #15818

BREAKING CHANGE: azure-pipelines manager is now disabled by default.
rarkins added a commit that referenced this issue Oct 6, 2022
Closes #15818

BREAKING CHANGE: azure-pipelines manager is now disabled by default.
rarkins added a commit that referenced this issue Oct 6, 2022
Closes #15818

BREAKING CHANGE: azure-pipelines manager is now disabled by default.
rarkins added a commit that referenced this issue Oct 12, 2022
Closes #15818

BREAKING CHANGE: azure-pipelines manager is now disabled by default.
rarkins added a commit that referenced this issue Oct 13, 2022
Closes #15818

BREAKING CHANGE: azure-pipelines manager is now disabled by default.
rarkins added a commit that referenced this issue Oct 19, 2022
Closes #15818

BREAKING CHANGE: azure-pipelines manager is now disabled by default.
rarkins added a commit that referenced this issue Oct 21, 2022
Closes #15818

BREAKING CHANGE: azure-pipelines manager is now disabled by default.
@renovate-release
Copy link
Collaborator

🎉 This issue has been resolved in version 33.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Nov 23, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
new datasource New datasource support new package manager New package manager support priority-4-low Low priority, unlikely to be done unless it becomes important to more people status:in-progress Someone is working on implementation type:feature Feature (new functionality) v33
Projects
None yet
Development

No branches or pull requests