Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
5bd404e
Dockers
jayvdb Jun 12, 2026
6905674
slimmer wind
jayvdb Jun 12, 2026
9db27ee
window
jayvdb Jun 12, 2026
acf5b07
win
jayvdb Jun 12, 2026
ec54f27
get correct windows mise
jayvdb Jun 12, 2026
f270b3e
force builder to specify version
jayvdb Jun 12, 2026
83d4645
more windows
jayvdb Jun 12, 2026
0d4e67a
avoid build args on Windows
jayvdb Jun 12, 2026
536e700
fix windows and macos
jayvdb Jun 12, 2026
3c3ce1a
windows ci fix
jayvdb Jun 12, 2026
46d851b
docker fixes
jayvdb Jun 12, 2026
c4b1a95
docker fixes
jayvdb Jun 13, 2026
6400949
improve docker files
jayvdb Jun 13, 2026
39a8328
re-add make dep
jayvdb Jun 13, 2026
020997d
tidy Dockerfiles
jayvdb Jun 13, 2026
eb3d657
windows docker fix
jayvdb Jun 13, 2026
63c3f8d
move files under config/
jayvdb Jun 13, 2026
691f4f6
disable another auto install setting
jayvdb Jun 13, 2026
f956319
various improvements
jayvdb Jun 13, 2026
b96905f
setup-foo tasks
jayvdb Jun 13, 2026
45ca9a4
windows fix and rules
jayvdb Jun 13, 2026
0943908
fix windows bash in docker
jayvdb Jun 13, 2026
32d4cb0
fix win debugging
jayvdb Jun 13, 2026
0987ee5
fix win bash
jayvdb Jun 13, 2026
6ea6e55
debug windows docker
jayvdb Jun 13, 2026
fc753d3
debug nano bash: dump conda m2-bash tree + retry with runtime dirs on…
jayvdb Jun 13, 2026
cad09f9
debug nano bash: dump msys-2.0.dll imports with llvm-readobj
jayvdb Jun 13, 2026
eb45da4
debug nano bash: fix llvm-readobj path (github- backend dir)
jayvdb Jun 13, 2026
e1708a6
nano bash: backfill kernel32 IdnToAscii/IdnToUnicode from servercore
jayvdb Jun 13, 2026
538befa
nano bash: overwrite kernel32 KnownDLL source via in-container copy
jayvdb Jun 13, 2026
9aed73c
nano bash: drop *kernel32 KnownDLL so loader binds the donor kernel32
jayvdb Jun 13, 2026
77f6a95
windows bash via busybox-w32 sh + POSIX task bodies
jayvdb Jun 13, 2026
d709e2d
windows busybox: name the bin sh.exe (mise writes bin verbatim)
jayvdb Jun 13, 2026
63d7cc1
debug windows busybox: why `mise` is not found under busybox sh
jayvdb Jun 13, 2026
c24ee3b
debug windows busybox: probe mise exec PATH for missing C:\mise\bin
jayvdb Jun 13, 2026
f6a429c
debug windows busybox: isolate -euo pipefail vs task env for mise lookup
jayvdb Jun 13, 2026
a1771a2
windows busybox: name the shell ash.exe so mise keeps a Windows PATH
jayvdb Jun 13, 2026
05f207a
windows: pin CARGO_HOME/RUSTUP_HOME so cargo: tools find the gnu default
jayvdb Jun 13, 2026
c069e28
windows: put llvm-mingw bin on PATH for cargo: builds; skip taplo
jayvdb Jun 13, 2026
fc729f3
ci: windows runs setup-windows, not setup-all directly
jayvdb Jun 13, 2026
1ea0d31
split os config
jayvdb Jun 13, 2026
93b0b73
ci: pin mise@2026.6.5 in install-action tool lists
jayvdb Jun 13, 2026
ab98935
ci: fix docker builds for the split os mise config
jayvdb Jun 13, 2026
35f02de
ci: serialize linux install + widen windows pipx PATH lookup
jayvdb Jun 13, 2026
d7b125c
ci: copy pipx.exe to a stable PATH dir on windows
jayvdb Jun 13, 2026
c039507
ci: skip pipx:semgrep in the windows image (Nano can't run pipx)
jayvdb Jun 13, 2026
c9bf818
ci(windows): install only the Nano-compatible guest langs
jayvdb Jun 13, 2026
dbe4bb3
tidy & precompile on windows docker
jayvdb Jun 13, 2026
81562f4
Another Windows fix, and other things
jayvdb Jun 14, 2026
ccb2d8f
ci(mise): prebuilt tool binaries, taplo-safe vars, windows toolchain fix
jayvdb Jun 14, 2026
c025f0b
docs(mise): trim the linux var-prefix comment
jayvdb Jun 14, 2026
5a7ea83
fix(ci): wasm-pack wasm-bindgen resolution + mise tooling
jayvdb Jun 14, 2026
5f4d6ba
conftest and a nano fix
jayvdb Jun 14, 2026
4d925cd
style checks
jayvdb Jun 14, 2026
084e3b5
ci(windows): skip wasm-opt on Nano for all wasm-pack builds
jayvdb Jun 14, 2026
47335d4
more rules
jayvdb Jun 14, 2026
b79d5c7
fix et-cli race
jayvdb Jun 14, 2026
d5b50cf
tidy
jayvdb Jun 14, 2026
9fc3fe5
java and C linting
jayvdb Jun 14, 2026
ad28489
disable cpplint on nano
jayvdb Jun 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 38 additions & 5 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,39 @@
target/
.git/
.ruff_cache/
.vscode/
services/ws-server/storage/
# AUTO-GENERATED from .gitignore by 'mise run gen:dockerignore' -- do not edit.
# Docker reads only this file; patterns are **/-prefixed to match at any depth
# like .gitignore. Edit .gitignore and regenerate.

**/.claude/
**/*.wasm
**/*.onnx
**/target/
**/.DS_Store
services/ws-wasm-agent/pkg/
services/ws-server/static/models/
**/.zig-cache/
**/zig-out/
**/*.o
**/*.pem
**/mprocs.log
**/__pycache__/
**/.pytest_cache/
**/.python-version
**/uv.lock
**/node_modules/
**/pnpm-lock.yaml
**/.venv/
# .NET build output. `obj/` is safe globally (nothing tracked is named obj/),
# but `bin/` is scoped to the module so it never matches a Rust crate's
# `src/bin/` (e.g. utilities/int-gen/src/bin/).
**/obj/
services/ws-modules/dotnet-data1/bin/
# Editor dir (but keep the shared recommended-extensions list), tool caches, and
# the ws-server's runtime file storage.
.vscode/*
!.vscode/extensions.json
**/.ruff_cache/
**/.lycheecache
services/ws-server/storage/
**/.git/
**/Dockerfile*
README.md
**/.dockerignore
38 changes: 4 additions & 34 deletions .dprint.jsonc
Original file line number Diff line number Diff line change
@@ -1,36 +1,6 @@
// dprint anchors its base directory (the tree it formats) to the directory of
// the config file it discovers. This stub keeps that base at the repo root while
// the real config lives in config/ alongside the other linter configs.
{
"java": {
},
"json": {
},
// Match the repo-wide 120 line-length set in .editorconfig and ruff.toml,
// otherwise dprint's bundled ruff would reformat Python files to its
// default and fight with `mise run ruff-fmt`.
"ruff": {
"lineLength": 120,
},
"malva": {
},
"markdown": {
},
"markup": {
},
"typescript": {
},
"yaml": {
},
"excludes": [
"**/node_modules",
"**/*-lock.json",
],
"plugins": [
"https://github.com/speakeasy-api/dprint-plugin-java/releases/latest/download/dprint_plugin_java.wasm",
"https://plugins.dprint.dev/g-plane/malva-v0.15.2.wasm",
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.27.0.wasm",
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.6.0.wasm",
"https://plugins.dprint.dev/json-0.21.3.wasm",
"https://plugins.dprint.dev/markdown-0.21.1.wasm",
"https://plugins.dprint.dev/ruff-0.7.10.wasm",
"https://plugins.dprint.dev/typescript-0.95.15.wasm",
],
"extends": "config/dprint.jsonc",
}
6 changes: 6 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ trim_trailing_whitespace = true
[*.md]
indent_size = unset

# OPA/Rego: `conftest fmt` (opa fmt) indents with tabs and isn't configurable, so
# its canonical formatting needs tabs, not the repo's space default.
[*.rego]
indent_style = tab
indent_size = unset

# License files use the canonical upstream formatting (centred headers, odd
# indent widths, etc.) — leave them alone.
[LICENSE-*]
Expand Down
22 changes: 9 additions & 13 deletions .github/workflows/check.yml → .github/workflows/check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,16 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- name: Install mise
uses: taiki-e/install-action@v2
with:
tool: cargo-binstall,mise
tool: cargo-binstall,mise@2026.6.5

- name: Select all language envs
run: echo "MISE_ENV=$(mise run print-all-langs)" >> "$GITHUB_ENV"

- name: Install pipx (Windows only — aqua has no Windows build)
if: runner.os == 'Windows'
run: python -m pip install pipx

# Optional npm backend, installed before the main `mise install`.
# See [tasks.setup-aube] in .mise/config.toml for the full rationale.
- name: Install aube (optional npm backend, allowed to fail)
Expand All @@ -53,14 +50,7 @@ jobs:

- name: Install mise tools
run: |
mise settings add idiomatic_version_file_enable_tools "[]"
mise settings experimental=true
mise settings set cargo.binstall true
# See test.yml for notes on why conda:openssl is installed up front.
mise install conda:openssl
# On macOS, lld is needed to compile Rust binary tools from source
# (e.g. `cargo:taplo-cli`, see CARGO_TARGET_*_APPLE_DARWIN_RUSTFLAGS).
mise install conda:lld
mise run preinstall
mise install
env:
GITHUB_TOKEN: ${{ github.token }}
Expand All @@ -69,6 +59,12 @@ jobs:
# doesn't fail the whole `mise install` step.
MISE_HTTP_TIMEOUT: "120"

- name: Prefetch Rust dependencies
run: mise run prefetch:rust
env:
GITHUB_TOKEN: ${{ github.token }}
CARGO_NET_RETRY: "5"

- name: Run checkers
run: |
mise run check
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ name: dependencies
- Cargo.lock
- Cargo.toml
- "**/Cargo.toml"
- deny.toml
- .github/workflows/dependencies.yml
- config/deny.toml
- config/osv-scanner.toml
- .github/workflows/dependencies.yaml
workflow_dispatch:

permissions:
Expand All @@ -22,29 +23,32 @@ defaults:
run:
shell: bash

# Deliberately mise-free: the only tools this job needs are the three
# dep-audit binaries, all of which taiki-e/install-action ships
# prebuilt. Skipping mise also skips the conda:openssl + workspace
# tool install path that the main CI flows take ~3 min on, keeping
# this check fast (~30 s typical).
jobs:
dependencies:
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Install dep-audit tools
- name: Install tools
uses: taiki-e/install-action@v2
with:
tool: cargo-deny,cargo-unmaintained,osv-scanner
tool: cargo-deny,cargo-unmaintained,mise@2026.6.5,osv-scanner

- name: Trust mise config
run: mise trust

- name: Generate config/osv-scanner.toml from config/deny.toml
run: mise run gen:osv-scanner

- name: cargo deny check
run: cargo deny check
run: mise run cargo-deny-check

- name: osv-scanner
run: osv-scanner --lockfile Cargo.lock
run: mise run osv-scanner

# `cargo unmaintained` persists per-repository archival/last-commit
# lookups under `$XDG_CACHE_HOME/cargo-unmaintained` (default
Expand All @@ -68,4 +72,7 @@ jobs:
- name: cargo unmaintained
env:
GITHUB_TOKEN: ${{ github.token }}
run: cargo unmaintained
run: mise run cargo-unmaintained-check

- name: Check config/osv-scanner.toml is committed
run: git diff --exit-code -- config/osv-scanner.toml
59 changes: 59 additions & 0 deletions .github/workflows/docker-linux.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
name: docker-linux

"on":
pull_request:
paths:
- .github/workflows/docker-linux.yaml
- Dockerfile
workflow_dispatch:

permissions:
contents: read

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

defaults:
run:
shell: bash

jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false

# The image is huge (every language toolchain + prefetched models + a full
# debug build, incl. aws-lc-sys's large C objects), and its peak `target/`
# overruns a single runner disk. Reclaim the unused preinstalled SDKs and
# concatenate the freed root space with /mnt into one LVM volume mounted at
# Docker's data dir, then restart Docker so the build uses the combined space.
- name: Maximize build space (combine root + /mnt for Docker)
uses: easimon/maximize-build-space@v10
with:
root-reserve-mb: 4096
swap-size-mb: 1024
remove-dotnet: "true"
remove-android: "true"
remove-haskell: "true"
remove-codeql: "true"
remove-docker-images: "true"
build-mount-path: /var/lib/docker
build-mount-path-ownership: "root:root"

- name: Restart Docker on the maximized volume
run: sudo systemctl restart docker

- name: Build stage test
env:
GITHUB_TOKEN: ${{ github.token }}
run: DOCKER_BUILDKIT=1 docker build --target test --secret id=gh_token,env=GITHUB_TOKEN -t edge-toolkit-test .

- name: Run the test suite
run: docker run --rm edge-toolkit-test
52 changes: 52 additions & 0 deletions .github/workflows/docker-windows.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
name: docker-windows

"on":
pull_request:
paths:
- .github/workflows/docker-windows.yaml
- Dockerfile.nanoserver
workflow_dispatch:

permissions:
contents: read

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

defaults:
run:
shell: bash

jobs:
build:
runs-on: windows-2022
timeout-minutes: 120
env:
# The classic Windows builder can't substitute build-args into the Dockerfile's RUN,
# and mise's prebuilt "latest" zip is stale (2026.3.0, too old for the config).
# 2026.6.5 is the first release with auto_env (loads .mise/config.windows.toml).
MISE_VERSION: "2026.6.5"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false

# Hosted Windows runners don't reliably leave the Docker daemon running, so
# the build can fail connecting to the docker_engine pipe. Start it (no-op
# if already running) and confirm connectivity before building.
- name: Start the Docker daemon
run: |
sc query docker | grep -q RUNNING || net start docker
docker version

- name: Prepare mise and Github token for the build context
run: |
v="${{ env.MISE_VERSION }}"
curl -fsSL -o mise.zip "https://github.com/jdx/mise/releases/download/v$v/mise-v$v-windows-x64.zip"
printf '%s' "${{ github.token }}" > gh_token

- name: Build stage precompile
run: docker build -f Dockerfile.nanoserver --target precompile -t edge-toolkit-windows .
Loading
Loading