import { Callout } from "zudoku/ui/Callout";

# Migrating from ALbuild V1

The ALbuild Azure DevOps extension ships **V1 compatibility tasks** so existing pipelines keep working after you replace the old extension with ALbuild. Each compatibility task keeps the V1 **name, version and inputs**, reproduces the V1 behaviour on top of the `businessdev.ALbuild` module, and emits a **deprecation warning** (the task still succeeds).

<Callout type="caution" title="Frozen and transitional">
Compatibility tasks are transitional and will be removed in a future major version. They will not receive new features or fixes. Migrate to the native tasks/cmdlets at your own pace.
</Callout>

---

## Mapping

| V1 task | Native replacement |
| --- | --- |
| `InstallBcContainerHelper` | _(remove, ALbuild has no BcContainerHelper dependency)_ |
| `CreateBuildContainer` | [Get BC Artifact](build-tasks#get-bc-artifact) + [Create BC Container](build-tasks#create-bc-container) (`Find-BcArtifactUrl` + `New-BcContainer`) |
| `RemoveBuildContainer` | [Remove BC Container](build-tasks#remove-bc-container) (`Remove-BcContainer`) |
| `AppVersioning` | [Stamp Build Version](build-tasks#stamp-build-version) (`Invoke-BcBuildVersionStamp` / `Set-BcAppVersion`) |
| `CreateBuildBranch` | folded into [Stamp Build Version](build-tasks#stamp-build-version) (`Invoke-BcBuildVersionStamp`); or `New-BcBuildBranch` directly |
| `DownloadArtifactsNuGet` | [Resolve Dependencies](build-tasks#resolve-dependencies) (`Register-BcFeed` + `Resolve-BcDependencies`) |
| `DownloadArtifactsUniversalFeed` | [Get Universal Package](build-tasks#get-universal-package) (`Get-BcUniversalPackage`) |
| `DownloadDependenciesUniversalFeed` | [Get Universal Package](build-tasks#get-universal-package) (`Get-BcUniversalPackage`) |
| `DownloadConfigPackageUniversalFeed` | [Get Universal Package](build-tasks#get-universal-package) + [Import Configuration Package](build-tasks#import-configuration-package) |
| `Compile` | [Compile AL App](build-tasks#compile-al-app) (`Invoke-BcCompiler`) |
| `Install` | [Publish App](build-tasks#publish-app) (`Publish-BcContainerApp`) |
| `Install365App` | [Install 365 App](build-tasks#install-365-app) (`Install-Bc365App`) |
| `CheckXliffTranslation` | [Check Translations](build-tasks#check-translations) (`Test-BcTranslation`) |
| `RunTests` | [Run AL Tests](build-tasks#run-al-tests) (`Invoke-BcContainerTest`) |
| `SignApp` | [Sign AL App](build-tasks#sign-al-app) (`Invoke-BcAppSigning`) |
| `PublishTestResultsTestiny` | [Publish Testiny Results](build-tasks#publish-testiny-results) (`Publish-BcTestinyResult`), or the built-in `PublishTestResults` task |
| `PushNuGet` | [Publish NuGet Package](release-tasks#publish-nuget-package) (`Publish-BcPackage`) |
| `ReleasePTE` | [Publish Per-Tenant Extension](release-tasks#publish-per-tenant-extension) (`Publish-BcPerTenantExtension`) |
| `ReleaseOnPrem` | [Publish On-Prem App](release-tasks#publish-on-prem-app) (`Publish-BcOnPremApp`) |
| `ReleaseDevExtension` | [Publish Dev Extension](release-tasks#publish-dev-extension) (`Publish-BcDevExtension`) |
| `ReleaseAppSource` | [Submit to Marketplace](release-tasks#submit-to-marketplace) (`Submit-BcMarketplaceApp`) |

The full V1 task reference (inputs of each compatibility task) is on the [Legacy (V1) tasks](legacy-tasks) page.

---

## Notes on specific compatibility tasks

- **CreateBuildContainer / RemoveBuildContainer** keep the V1 convention of sharing the container name through the `containerName` pipeline variable.
- **AppVersioning** computes the version from the same token schema (`major.minor.increment.0`, `latest.latest.latest.build-id`, …). `onlyUpdateOnChangedSource` uses a git-based change check instead of the V1 `appVersions.json` artifact.
- **RunTests** runs the AL Test Runner inside the container natively (no BcContainerHelper). It discovers the AL test apps under `Build.Repository.LocalPath`, honours each app's optional `pipeline.config` (`alTestRunnerId` selects the test-runner codeunit), runs them and writes `TestResults.xml` (JUnit). Failing tests mark the build `SucceededWithIssues`, matching V1. It reuses the `containerUsername` / `containerPassword` variables set by the build-container tasks. The native granular [Run AL Tests](build-tasks#run-al-tests) task exposes the same runner with explicit inputs.
- **Install365App** downloads from a configurable URL (`ALBUILD_365APP_URL`, `{appId}` token).
- **ReleasePTE** exchanges the refresh token for the BC API; the client id is configurable via `ALBUILD_BC_CLIENTID`.
