diff --git a/CHANGELOG.md b/CHANGELOG.md index b4f6a85..7f90a0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,10 +16,30 @@ shipped alongside it. [kac]: https://keepachangelog.com/en/1.1.0/ [semver]: https://semver.org/spec/v2.0.0.html -## [Unreleased] +## [0.11.0] — 2026-08-18 + +The CI release: tangled spindle workflows running in microVMs — from one +command, from every SDK, from every screen — with tracing to match. ### Added +- **`bsdkrun ci` — a local CI runner for [tangled](https://tangled.org) + spindle workflows.** It runs a repository's `.tangled/workflows/*.yml` in + real microVMs: the schema and `when:` matching are tangled's own Go package + (imported, not transcribed), the environment, layout and log format are + spindle's, and a manual run executes HEAD — never the dirty working tree. + `dependencies:` become a nixery image; `bsdkrun ci serve` accepts spindle's + `sh.tangled.pipeline` records over HTTP as the server half. +- **Workflows as code in every SDK.** All nine SDKs gained a CI builder: + `yaml()` renders spindle-compatible YAML, `save(repo)` commits it to + `.tangled/workflows/`, `run()` executes it in a microVM immediately. +- **CI/CD screens everywhere.** The desktop and web apps gained a CI/CD view + (workflow list, live step timeline, run history, log search/export), and + the terminal dashboard gained tabs with a CI/CD tab of its own. +- **OpenTelemetry tracing.** One trace per run, one span per step, always + recorded into the engine's SQLite (`ci traces`, `ci spans`, the daemon's + `ciTraces`/`ciTraceSpans`, the UIs' live Trace waterfall) and exported live + over OTLP/HTTP when `--otlp` / `OTEL_EXPORTER_OTLP_ENDPOINT` is set. - **`bsdkrun ci run` renders a live TUI on a terminal** (Bubble Tea): one row per step with realtime durations in seconds-with-milliseconds, a spinner on the running step and a dimmed tail of its output, failures keeping their @@ -69,6 +89,24 @@ shipped alongside it. a repository owned by another uid, which a virtio-fs mount always is). - `bsdkrun ci --help` prints the usage text instead of `run`'s flag dump. +### SDKs + +| SDK | Version | +| ---------- | ------- | +| typescript | 0.7.0 | +| python | 0.6.0 | +| ruby | 0.6.0 | +| elixir | 0.6.0 | +| clojure | 0.5.0 | +| rust | 0.4.0 | +| go | 0.4.0 | +| gleam | 1.6.0 | +| scala | 0.3.0 | + +All nine gained the CI workflow builder; the Go SDK also gained streaming VM +creation (`CreateStreaming`). The Scala, Clojure and Elixir README install +snippets now name current versions. + ## [0.10.0] — 2026-08-18 The AI-sandbox release: coding agents in disposable microVMs, a Docker engine diff --git a/Cargo.lock b/Cargo.lock index 5e6218b..0700f84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -615,7 +615,7 @@ dependencies = [ [[package]] name = "bsdkrun" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "bsdkrun-core", @@ -626,7 +626,7 @@ dependencies = [ [[package]] name = "bsdkrun-core" -version = "0.10.0" +version = "0.11.0" dependencies = [ "actix-web", "anyhow", @@ -687,7 +687,7 @@ dependencies = [ [[package]] name = "bsdkrun-supervisor" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "bsdkrun-core", diff --git a/Cargo.toml b/Cargo.toml index 9fa8eea..9d3cbed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ exclude = ["agent", "desktop", "examples", "library", "sdk"] [package] name = "bsdkrun" -version = "0.10.0" +version = "0.11.0" edition = "2021" description = "A Firecracker-style microVM launcher for BSD, Linux (OCI), and unikernel guests on macOS, built on libkrun (Hypervisor.framework)" diff --git a/core/Cargo.toml b/core/Cargo.toml index e02ad7e..c8537be 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bsdkrun-core" -version = "0.10.0" +version = "0.11.0" edition = "2021" description = "The bsdkrun engine: microVM boot, images, networking, volumes and the guest agent, as a library" diff --git a/flake.nix b/flake.nix index 909427a..2a553c6 100644 --- a/flake.nix +++ b/flake.nix @@ -365,7 +365,7 @@ commonArgs = { inherit src; pname = "bsdkrun"; - version = "0.10.0"; + version = "0.11.0"; strictDeps = true; # Explicit even though the workspace's `default-members` is this # package: the daemon is a member too, and nothing here should build @@ -464,7 +464,7 @@ # itself does not have to. Same source tree, different package. supervisorArgs = daemonArgs // { pname = "bsdkrun-supervisor"; - version = "0.10.0"; + version = "0.11.0"; cargoExtraArgs = "-p bsdkrun-supervisor"; # The supervisor carries the embedded Solo5 tender (its core dep diff --git a/sdk/clojure/README.md b/sdk/clojure/README.md index 7609a3b..c6cde54 100644 --- a/sdk/clojure/README.md +++ b/sdk/clojure/README.md @@ -32,13 +32,13 @@ and every namespace is a set of functions over plain maps. Via `deps.edn`: ```clojure -io.github.tsirysndr/bsdkrun {:mvn/version "0.2.2"} +io.github.tsirysndr/bsdkrun {:mvn/version "0.5.0"} ``` Via Leiningen: ```clojure -[io.github.tsirysndr/bsdkrun "0.2.2"] +[io.github.tsirysndr/bsdkrun "0.5.0"] ``` ### The `bsdkrun` binary diff --git a/sdk/clojure/build.clj b/sdk/clojure/build.clj index 5c558c4..3afaf9b 100644 --- a/sdk/clojure/build.clj +++ b/sdk/clojure/build.clj @@ -10,7 +10,7 @@ [deps-deploy.deps-deploy :as dd])) (def lib 'io.github.tsirysndr/bsdkrun) -(def version "0.4.0") +(def version "0.5.0") (def class-dir "target/classes") (def basis (delay (b/create-basis {:project "deps.edn"}))) (def jar-file (format "target/bsdkrun-%s.jar" version)) diff --git a/sdk/elixir/README.md b/sdk/elixir/README.md index 6056850..3b78c0d 100644 --- a/sdk/elixir/README.md +++ b/sdk/elixir/README.md @@ -33,7 +33,7 @@ Add `:bsdkrun_ex` to your `mix.exs` deps: ```elixir def deps do [ - {:bsdkrun_ex, "~> 0.1.0"} + {:bsdkrun_ex, "~> 0.6.0"} ] end ``` diff --git a/sdk/elixir/mix.exs b/sdk/elixir/mix.exs index 2cc26d4..8c89f5e 100644 --- a/sdk/elixir/mix.exs +++ b/sdk/elixir/mix.exs @@ -1,7 +1,7 @@ defmodule Bsdkrun.MixProject do use Mix.Project - @version "0.5.0" + @version "0.6.0" @source_url "https://github.com/tsirysndr/bsdkrun" def project do diff --git a/sdk/gleam/gleam.toml b/sdk/gleam/gleam.toml index bc8f723..73dfbf3 100644 --- a/sdk/gleam/gleam.toml +++ b/sdk/gleam/gleam.toml @@ -1,5 +1,5 @@ name = "bsdkrun" -version = "1.5.0" +version = "1.6.0" description = "Gleam SDK for bsdkrun — a Firecracker-style microVM launcher for BSD, Linux, and unikernel guests" licences = ["MIT"] diff --git a/sdk/python/pyproject.toml b/sdk/python/pyproject.toml index 6536ad1..1bba9b0 100644 --- a/sdk/python/pyproject.toml +++ b/sdk/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "bsdkrun" -version = "0.5.0" +version = "0.6.0" description = "Python SDK for bsdkrun — a Firecracker-style microVM launcher for BSD, Linux, and unikernel guests" readme = "README.md" requires-python = ">=3.10" diff --git a/sdk/ruby/lib/bsdkrun/version.rb b/sdk/ruby/lib/bsdkrun/version.rb index 3fec64f..6a3d165 100644 --- a/sdk/ruby/lib/bsdkrun/version.rb +++ b/sdk/ruby/lib/bsdkrun/version.rb @@ -2,5 +2,5 @@ module Bsdkrun # The bsdkrun Ruby SDK version. - VERSION = "0.5.0" + VERSION = "0.6.0" end diff --git a/sdk/rust/Cargo.lock b/sdk/rust/Cargo.lock index b4b371a..cc3cc2c 100644 --- a/sdk/rust/Cargo.lock +++ b/sdk/rust/Cargo.lock @@ -31,7 +31,7 @@ dependencies = [ [[package]] name = "bsdkrun-sdk" -version = "0.3.0" +version = "0.4.0" dependencies = [ "base64", "serde", diff --git a/sdk/rust/Cargo.toml b/sdk/rust/Cargo.toml index 5039282..b26660a 100644 --- a/sdk/rust/Cargo.toml +++ b/sdk/rust/Cargo.toml @@ -3,7 +3,7 @@ # `cargo build` here never drags libkrun into the link. [package] name = "bsdkrun-sdk" -version = "0.3.0" +version = "0.4.0" edition = "2021" rust-version = "1.75" description = "Rust SDK for bsdkrun — a Firecracker-style microVM launcher for BSD, Linux, and unikernel guests" diff --git a/sdk/scala/README.md b/sdk/scala/README.md index 1655467..2eb75fb 100644 --- a/sdk/scala/README.md +++ b/sdk/scala/README.md @@ -16,7 +16,7 @@ drops into a codebase already committed to cats-effect, ZIO, or neither. ## Install ```scala -libraryDependencies += "io.github.tsirysndr" %% "bsdkrun" % "0.1.0" +libraryDependencies += "io.github.tsirysndr" %% "bsdkrun" % "0.3.0" ``` Needs Java 11+ at runtime. The SDK finds the `bsdkrun` binary via diff --git a/sdk/scala/build.sbt b/sdk/scala/build.sbt index a380617..dcc932b 100644 --- a/sdk/scala/build.sbt +++ b/sdk/scala/build.sbt @@ -6,7 +6,7 @@ // the SDK droppable into a codebase already committed to cats-effect, ZIO or // neither. ThisBuild / organization := "io.github.tsirysndr" -ThisBuild / version := "0.2.0" +ThisBuild / version := "0.3.0" // Scala 3 LTS. The API avoids anything 3-only in its signatures, so a 2.13 // cross-build is a `crossScalaVersions` line away if one is ever wanted. diff --git a/sdk/typescript/package.json b/sdk/typescript/package.json index c00ff37..219df4d 100644 --- a/sdk/typescript/package.json +++ b/sdk/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@bsdkrun/sdk", - "version": "0.6.0", + "version": "0.7.0", "description": "TypeScript SDK for bsdkrun — boot and drive BSD/Linux/unikernel microVMs programmatically, à la Vercel/Deno Sandbox.", "license": "MIT", "type": "module", diff --git a/supervisor/Cargo.toml b/supervisor/Cargo.toml index 61a04cc..0382d7b 100644 --- a/supervisor/Cargo.toml +++ b/supervisor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bsdkrun-supervisor" -version = "0.10.0" +version = "0.11.0" edition = "2021" description = "Runs one bsdkrun command in its own process, and hosts the machine it boots"