Something went wrong. Try again.
Instant MicroVMs/Unikernels for macOS and Linux
linux unikernel unikraft osv freebsd netbsd microvm libkrun
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180name: sdk unit (Python / Ruby / Elixir / Gleam / Clojure / Go / Rust / Scala)
# Unit + argv-builder tests for the non-TypeScript SDKs. These never boot a# guest, so they need no /dev/kvm and no libkrun — they exercise argv building,# JSON decoding, error rendering, and (for Gleam) real subprocess round-trips# through the Erlang FFI. The TypeScript and Scala e2e suites — the ones that# boot a real guest — live in e2e-sdk.yml; the Scala job here runs only the# unit half, which `BSDKRUN_E2E` gates.
on: workflow_dispatch: {} push: branches: - "main" paths: - "sdk/python/**" - "sdk/ruby/**" - "sdk/elixir/**" - "sdk/gleam/**" - "sdk/clojure/**" - "sdk/go/**" - "sdk/rust/**" - "sdk/scala/**" - ".github/workflows/sdk-unit.yml" pull_request: paths: - "sdk/python/**" - "sdk/ruby/**" - "sdk/elixir/**" - "sdk/gleam/**" - "sdk/clojure/**" - "sdk/go/**" - "sdk/rust/**" - "sdk/scala/**" - ".github/workflows/sdk-unit.yml"
permissions: contents: read
jobs: python: name: python runs-on: ubuntu-latest timeout-minutes: 10 defaults: run: working-directory: sdk/python steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v5 with: enable-cache: true - run: uv sync - run: uv run ruff check - run: uv run ruff format --check - run: uv run mypy - run: uv run pytest
ruby: name: ruby runs-on: ubuntu-latest timeout-minutes: 10 defaults: run: working-directory: sdk/ruby steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: "3.3" - name: Validate the gemspec run: ruby -e 'Gem::Specification.load("bsdkrun.gemspec").validate' - run: rake test
elixir: name: elixir runs-on: ubuntu-latest timeout-minutes: 10 defaults: run: working-directory: sdk/elixir steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: otp-version: "27" elixir-version: "1.18" - run: mix deps.get - run: mix compile --warnings-as-errors - run: mix test
gleam: name: gleam runs-on: ubuntu-latest timeout-minutes: 10 defaults: run: working-directory: sdk/gleam steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: otp-version: "27" gleam-version: "1.18.1" - run: gleam deps download - run: gleam format --check src test - run: gleam test
clojure: name: clojure runs-on: ubuntu-latest timeout-minutes: 10 defaults: run: working-directory: sdk/clojure steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: distribution: temurin java-version: "21" - uses: DeLaGuardo/setup-clojure@13.4 with: cli: latest - run: clojure -M:test
go: name: go runs-on: ubuntu-latest timeout-minutes: 10 defaults: run: working-directory: sdk/go steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: sdk/go/go.mod - name: gofmt run: test -z "$(gofmt -l .)" - run: go vet ./... - run: go test ./...
rust: name: rust runs-on: ubuntu-latest timeout-minutes: 15 defaults: run: working-directory: sdk/rust steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - run: cargo fmt --check - run: cargo clippy -- -D warnings - run: cargo test
scala: name: scala runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v4 # The JDK, Scala and sbt versions come from sdk/scala/mise.toml, so CI and # a developer's checkout build against exactly the same toolchain. - uses: jdx/mise-action@v2 with: working_directory: sdk/scala cache: true # `-Xfatal-warnings` is on in build.sbt, so this is also the warnings gate # — the equivalent of elixir's `mix compile --warnings-as-errors`. - name: compile working-directory: sdk/scala run: sbt -batch compile Test/compile - name: test working-directory: sdk/scala run: sbt -batch test