DEV Community

Gabriel Harnagea
Gabriel Harnagea

Posted on

73 Azure Pipelines tasks retire on October 15: find them in your repo in one command

On October 15, 2026 Microsoft retires 73 built-in task versions in Azure DevOps Services: CopyFiles@1, AzureCLI@0, DotNetCoreCLI@1, NuGetInstaller@0, PowerShell@1 and 68 more (official announcement).

Two dates matter:

  • 2026-10-15, retirement. The tasks still run, but each run reports a retirement error that does not fail the pipeline.
  • 2027-03-15, removal. Pipelines that still reference them fail with a blocking error.

So you have five months. The hard part is not the fix. It is finding every reference across dozens of repositories and templates, then knowing what each one should become. Of the 73 versions:

  • 2 have a drop-in replacement;
  • 24 have a replacement that needs input changes;
  • 27 need a manual migration to a different task;
  • 20 have no replacement at all (Xamarin, App Center, Azure Cloud Services and similar).

Option 1: a quick grep, nothing to install

The list of retired tasks is published as plain YAML, so three lines of shell give you the candidates in a checked-out repository:

url=https://raw.githubusercontent.com/HarnageaGabriel/trasloco/main/catalog/azure-pipelines/tasks.retirement.yaml
curl -fsSL "$url" | sed -n 's/^ *- task: //p' > retired-tasks.txt
grep -rniwF -f retired-tasks.txt --include='*.yml' --include='*.yaml' .
Enter fullscreen mode Exit fullscreen mode

It is a text search: it also matches comments, and it cannot tell you which replacement to use.

Option 2: trasloco modernize --check

trasloco is an open-source (Apache-2.0) CLI I'm building to move CI/CD pipelines between platforms. Its first shipped command reads your pipelines with a real Azure Pipelines YAML parser and reports each retired task with its replacement and what to do:

$ trasloco modernize --check --format text -- .
azure-pipelines.yml:11:11  DotNetCoreCLI@1 -> DotNetCoreCLI@2  [replacement with input changes]
    Replace DotNetCoreCLI@1 with DotNetCoreCLI@2 and review the replacement inputs before updating the pipeline.
    More: https://harnageagabriel.github.io/trasloco/tasks/dotnetcorecli-1/

templates/azurecli.yml:11:11  AzureCLI@0 -> AzureCLI@3  [manual migration]
    Migrate this step manually to AzureCLI@3, reviewing the documented behavior and input differences.
    More: https://harnageagabriel.github.io/trasloco/tasks/azurecli-0/

templates/copyfiles.yml:11:11  CopyFiles@1 -> CopyFiles@2  [drop-in replacement]
    Replace CopyFiles@1 with CopyFiles@2.
    More: https://harnageagabriel.github.io/trasloco/tasks/copyfiles-1/

Found 3 retired task reference(s) in 3 file(s): 1 drop-in, 1 with input changes, 1 manual, 0 no replacement. Retired 2026-10-15, removed 2027-03-15 (pipelines fail after removal).
Enter fullscreen mode Exit fullscreen mode

It exits with status 5 when something actionable remains, so it works as a CI gate. It also writes JSON and SARIF.

Install: grab a binary for Linux, macOS or Windows from the v0.1.0 release. Releases are signed with Sigstore (cosign) and carry SBOMs and build provenance; the install guide shows how to verify them.

GitHub Action (if your Azure Pipelines YAML lives in GitHub repositories), from the Marketplace:

- uses: HarnageaGabriel/trasloco@v0
  with:
    path: .
    fail-on-findings: true
Enter fullscreen mode Exit fullscreen mode

Azure Pipelines: the install guide has a complete Bash step that downloads a pinned release, checks it against the release checksums and runs the check.

One page per retired task

If you just want to know what replaces a given task, there is a page for each of the 73 versions, with the official replacement and the input differences: https://harnageagabriel.github.io/trasloco/

What it does not do (yet)

  • It reports; it does not rewrite. A --write mode that applies the safe rewrites is specified and comes next.
  • It reads YAML pipelines only, not classic (UI-defined) build and release definitions.
  • The dates are those of Azure DevOps Services; Azure DevOps Server follows its own servicing.

Feedback, bug reports and pipelines that break the parser are very welcome: https://github.com/HarnageaGabriel/trasloco/issues

Top comments (0)