Skip to content

2.0.0 — SQL Server 2025, current runtimes, tests that can fail

Latest

Choose a tag to compare

@croblesm croblesm released this 16 Sep 06:20
985cbef

Azure SQL Database Dev Container Templates 2.0.0

Paste as the body of the GitHub release for tag v2.0.0 (or the per-template tags the release workflow
creates). Keep the "Breaking changes" section near the top; it is the part existing users need.


The four templates were last updated in July 2024 and had stopped building. This release replaces the
retired SQL engine, brings every runtime and tool up to a supported version, and adds tests that can
actually fail.

Breaking changes

  • The SQL engine changed. Azure SQL Edge (retired 2025-09-30) is replaced by SQL Server 2025,
    mcr.microsoft.com/mssql/server:2025-latest, Developer edition. Re-apply the template rather than
    editing an existing container.
  • Default runtime versions moved to .NET 10, Python 3.14, and Node.js 24. .NET 8 is still offered
    until its end of support on 2026-11-10; Node 18 and 20 and the bullseye variants are gone.
  • The Python template uses mssql-python, Microsoft's driver, instead of pyodbc with ODBC Driver 17.
    It needs no system ODBC install. pyodbc still works if you add it yourself.
  • Committed build outputs were removed. The SQL Database project is built on container create, so
    there is no dacpac in the repository.

Fixed

  • The templates build again. Every template failed at the first RUN line in its Dockerfile, on x64
    and Arm alike: the pinned base images carried an expired Yarn apt key, and the bullseye defaults hit
    Debian 11's expired security repository.
  • Apple Silicon works. The app container runs natively on Arm. Three pieces were x64-only: .NET from
    the Debian apt feed, ODBC Driver 17, and the SqlPackage zip. Every installed binary is now checked
    against the container's architecture.
  • The LocalDev connection profile connects. It carried ${env:MSSQL_SA_PASSWORD}, which nothing
    expands in VS Code settings, so the saved profile had an empty password and prompted on first use. It
    now uses ${containerEnv:MSSQL_SA_PASSWORD}, which the dev container tooling resolves from the
    container's environment, keeping the password in .devcontainer/.env only.
  • Deprecated extension ids removed. github.copilot redirects to a built-in extension in some VS Code
    builds, and the failed install took ms-vscode.vscode-node-azure-pack down with it.
  • The database is ready before the container is. A compose health check replaced a polling loop, and a
    failed SQL project build no longer reports success.

Changed

  • Microsoft.Build.Sql 2.2.0, SqlPackage installed as a .NET tool, go-sqlcmd 1.10.0 fetched per
    architecture with a pinned checksum, Azure CLI 2.90, and Aspire 13.5 through the Aspire CLI. The Aspire
    workload, obsolete since Aspire 9, is gone.
  • The SQL Database project still targets Azure SQL Database (SqlAzureV12DatabaseSchemaProvider). That
    build, not the local engine, is what tells you whether your schema will work in Azure SQL Database.
  • Actions are pinned by commit SHA, and Dependabot now watches features, compose images and actions.
  • Screenshots moved to docs/, so they are no longer copied into every project created from a template.

Testing

CI ran nothing before this release: it filtered for a template deleted in 2024, called scripts that did
not exist, and was marked continue-on-error. Now every pull request runs a smoke test per template on
ubuntu-latest and ubuntu-24.04-arm, plus a static job that pins what this release promises: template
ids, the Azure SQL Database target, the Library schema and seed, the connection profile, port 1433, and
the compose shape.

Locally, test/gauntlet.sh runs the whole thing: 15 configurations, 486 checks, 12 planted defects that
must all be caught, 42 negative controls, and a supply-chain layer.

Known limits

  • SQL Server 2025 is x64 only. On Apple Silicon it runs under emulation, which Microsoft does not test or
    support.
  • SQL Server occasionally crashes while starting and dumps core: 1 start in 37 under emulation, and once
    on a native x64 CI runner. Rebuild the container.
  • The database service is capped at 2 GB, SQL Server's documented minimum.
  • Behind a proxy that blocks NuGet, npm or PyPI, container creation fails while installing tools. Each
    template's notes have a troubleshooting section.

Full comparison: 1.2.2...2.0.0