Skip to content

Orbit v0.15.0 (Preview)

Choose a tag to compare

@github-actions github-actions released this 13 Aug 02:50
93cc5d8

What changed

Publish a schema without its source tree or the .NET SDK. orbit sqlserver publish, diff, diff --script, and reset accept --dacpac-dir, a per-invocation root holding one build-output directory per SQL project:

orbit sqlserver publish --all --dacpac-dir .artifacts
.artifacts/
  PlatformDB/
    PlatformDB.dacpac
    CommonFiles.dacpac      # referenced artifacts sit alongside the leaf
  OrdersDB/
    OrdersDB.dacpac

sqlserver.projects is unchanged — the environment file still declares path: to the .sqlproj, and the artifact is supplied at the call site, where it belongs. sqlpackage is still required; the .NET SDK is not.

Every missing piece is reported before the first database is touched, naming each project rather than failing partway through a multi-project publish.

SQL Server readiness now proves logins, not just an open port. A TCP probe accepts as soon as the listener is up, which can be seconds before the instance finishes recovering and authenticates. orbit doctor now warns when a sqlserver.target has no health check or a TCP-only one, and prints the authenticated exec probe to use instead. A publish that races a starting target also fails immediately with a clear cause rather than continuing with a silently degraded first-time-create decision.

Why it matters

Publishing a schema previously meant having its source on the machine that publishes — every schema repository cloned, every project rebuilt, on every CI run. The alternative was to bypass Orbit and call sqlpackage directly, which means reimplementing what sits around the apply: composite bootstrap for a database that does not exist yet, the retry that heals an unresolved shared reference, and the error classification that turns a sqlpackage failure into an actionable message.

Neither choice was good. This release removes it: a runner that already has the build artifacts can publish through Orbit and keep all of that.

The readiness change fixes a failure that looked like a bug in publishing but was not. A container reporting healthy while refusing logins produced sql_server_unavailable on a target that was plainly running, and the guidance said to start something already started. Orbit's own CI had been working around this by waiting on the container log; that signal is now what Orbit recommends to users.

Upgrade notes

No configuration changes are required.

orbit doctor will warn about SQL Server targets using a TCP health check. The warning includes the exact YAML to adopt; environments are not broken until it is acted on, but the race it describes stays possible until then.

The bundled demo (orbit init) now versions independently of Orbit and is pinned at v2026.8.1. This has no user-visible effect.


Known issue in this release — fixed in v0.15.2

--dacpac-dir (and every other orbit sqlserver publish invocation) cannot find its target when run with --instance. The resource name was derived by trimming orbit- off the container name, which is correct in shared mode and wrong under --instance: publish reports the target unavailable seconds after up reports it healthy, and the suggested remedy names a resource orbit rejects as unknown.

There is no workaround in this version. Use v0.15.2 or later if you publish schema under --instance — which is the mode a CI runner isolating its environment will be using, and therefore the main case --dacpac-dir was built for.

Recorded here rather than only in v0.15.2's notes because an upgrade that skips versions reads the notes of the version it lands on, not the ones it passes over.