Conversation
Establish `rework` as the active development branch and add `CHANGES.md`/`TODO.md` to keep changes and work items tracked alongside the test harness. Made-with: Cursor
Introduce a repo-local Docker image that builds the kernel and runs the existing v9fs test harness under QEMU, and update GitHub Actions workflows to run using the same containerized environment used for local macOS development. Made-with: Cursor
Build the kernel once, export it as a reusable artifact, and run QEMU test suites against that artifact without rebuilding. Publish the kernel image as a GitHub Actions artifact for reuse by other workflows. Made-with: Cursor
- Guest initrd runs v9fs-guest-run from kernel cmdline (Option A)\n- v9fs-run-tests bind-mounts a stable 9p export root\n- Unique GitHub Actions log artifact names; ignore local kernel/tmp outputs\n- Document guest-direct flow in README; update CHANGES/TODO Made-with: Cursor
- Add push trigger (all branches); keep workflow_dispatch + workflow_call\n- Default kernel repo/ref on push to v9fs/linux @ master\n- Latency tag line uses env + commit SHA fallback\n- Rename workflow for clarity; document triggers in README and CHANGES Made-with: Cursor
v9fs/linux has no master branch; push CI used ref=master and actions/checkout failed.\nUse ericvh/devel (repo default_branch) for demand push defaults and nightly. Made-with: Cursor
Use main for push defaults, nightly, and workflow_dispatch ref default;\navoid unstable topic-branch dynamics. Made-with: Cursor
- Set umask 022 and chmod logs after v9fs-run-tests\n- Add workflow chmod step before upload-artifact as backstop\n- Update README wording for main branch Made-with: Cursor
- Package kernel Image outputs into tar.gz in build job\n- Push as OCI artifact to ghcr.io/<owner>/v9fs-test-kernel via ORAS\n- Add packages:write permissions and document retrieval Made-with: Cursor
Run full test matrix in-guest, write logs/<ts>/guest.exitcode, and have v9fs-run-tests exit nonzero when failures occurred so GitHub Actions shows red while still running everything. Made-with: Cursor
GitHub runners build x86_64 kernels as arch/x86_64/boot/bzImage;\npackage/upload now include both *Image and bzImage and tar step is robust. Made-with: Cursor
Switch jobs to ubuntu-24.04-arm so kernel builds and QEMU guest tests default to arm64 outputs. Made-with: Cursor
Pass v9fs.ts=<host timestamp> on kernel cmdline and have initrd export TIMESTAMP from it so guest writes guest.exitcode into the same logs/<ts>/ directory that the host checks. Made-with: Cursor
Create/update kernel-main and kernel-nightly releases and upload arch/arm64/boot/Image as a stable asset so it can be fetched via wget. Made-with: Cursor
- Copy dbench/postmark/fsx + client.txt into /home/v9fs-test/testbin (no host symlinks)\n- Include shared library deps for those tools in initrd\n- Ensure log artifacts upload even when tests fail Made-with: Cursor
When v9fs-run-tests fails, print qemu.log and per-test logs into the CI stream to speed up debugging (artifacts still uploaded via always()). Made-with: Cursor
- sync after writing logs/<ts>/guest.exitcode in guest\n- sync before initrd poweroff\n- host waits briefly for guest.exitcode to appear before failing Made-with: Cursor
- Compute kernel source SHA and tag GHCR artifact as linux-<sha>\n- Build-kernel job tries oras pull first; skips rebuild on hit\n- Publish step tags both linux-<sha> and ref convenience tags Made-with: Cursor
- Add linux-kernel-publish.yml (repository_dispatch + workflow_dispatch)\n- demand/nightly: download published Image from GitHub Releases; no in-repo kernel build\n- Document dispatch model and update CHANGES Made-with: Cursor
Tag rework-take-1 and move all existing tracked files under old/rework-take-1/ for reference. Add minimal top-level docs + gitignore for clean-slate rebuild. Made-with: Cursor
- Minimal Docker+QEMU harness that exports /workspaces/share/tmpdir via virtio-9p\n- Initrd runs guest smoke test on the 9p mount and writes guest.log + guest.exitcode\n- CI workflow downloads arm64 Image release asset and runs the smoke test\n- Kernel publish workflow builds arm64 Image and uploads to a release tag Made-with: Cursor
Force-enable NET_9P/9P_FS + virtio transport options via scripts/config so published arm64 Image can mount virtio-9p in the smoke harness. Made-with: Cursor
- Remove custom Dockerfile/entrypoint\n- Run harness + kernel builds inside ghcr.io/v9fs/docker:latest\n- Invoke repo scripts from bind mount (./scripts/...)\n- Update CI workflows and Makefile/README accordingly Made-with: Cursor
Fix local/CI runs inside v9fs/docker by setting +x on scripts and qemu wrapper. Made-with: Cursor
Bind mounts under /workspaces/share require mount(2); run docker with --user 0:0 in local Makefile and CI/publish workflows. Made-with: Cursor
Use command -v busybox instead of assuming /bin/busybox (v9fs/docker image layout differs). Made-with: Cursor
Use /home/v9fs-test/go/bin/u-root to generate a minimal initramfs (no busybox dependency) and embed our /init to mount 9p and run guest smoke. Made-with: Cursor
Use u-root with -base /home/v9fs-test/initrd.cpio and -nocmd so we don't need the go toolchain; just overlay our /init to mount 9p and run the guest smoke. Made-with: Cursor
Pass -defaultsh=/bin/sh to u-root overlay to avoid gosh symlink errors when modifying the base initrd. Made-with: Cursor
Stop using u-root overlay (fails in v9fs/docker). Instead, rewrite the base /home/v9fs-test/initrd.cpio in pure Python to replace the init entry with our guest runner init. Made-with: Cursor
When u-root init runs /bin/uinit, it will panic if PID1 exits. Ensure uinit loops forever if poweroff/halt/reboot returns unexpectedly. Made-with: Cursor
Build a patched initrd that replaces /init with a small script, and injects /bin/sh,/bin/mount,/bin/ls plus their shared libraries from the container so the guest can mount the 9p export and ls it reliably. Made-with: Cursor
Use a simpler awk expression to extract shared library paths from ldd output. Made-with: Cursor
Add required semicolon between awk pattern actions for portability. Made-with: Cursor
Use portable awk patterns to capture absolute-path libraries from ldd output. Made-with: Cursor
Avoid duplicate cpio paths (e.g. /bin/sh) by skipping base entries for any injected file so the kernel definitely sees our replaced binaries and init script. Made-with: Cursor
Write parent directory entries (e.g. /lib and /lib/aarch64-linux-gnu) before injecting shared libraries so the kernel can find the dynamic loader and libc. Made-with: Cursor
Inject mkdir/sync/sleep/poweroff/halt/reboot in addition to sh/mount/ls so the guest /init script can run without relying on u-root applets. Made-with: Cursor
The v9fs/docker image doesn't ship poweroff/halt/reboot binaries. Use /proc/sysrq-trigger after sync to request shutdown, and only inject the minimal utils we need. Made-with: Cursor
Without the directories, proc mount failed and v9fs.ts couldn't be read from /proc/cmdline, so guest.exitcode wasn't written. Create mountpoints first. Made-with: Cursor
Redirecting mount/sync/sysrq errors to /dev/null fails when /dev/null doesn't exist yet, preventing proc mount and cmdline parsing. Keep output on console until /dev is ready. Made-with: Cursor
Avoid relying on reading v9fs.ts from /proc/cmdline by writing guest.exitcode/guest.log to a stable host-visible path (logs/guest.*). v9fs-run-tests copies those into logs/<ts>/ for artifacts. Made-with: Cursor
The 9p export root is /mnt/9 (bind-mounted repo is /mnt/9/test). Write guest.exitcode/guest.log under that path so v9fs-run-tests can read them. Made-with: Cursor
Even though the smoke test mounts 9p directly, we still launch /bbin/cpud in the background for parity with the v9fs/docker initrd behavior. Made-with: Cursor
Export FSDEV_PATH=/ so the guest can chroot into the container filesystem over 9p and run bash+ls from there. Keep writing guest.exitcode into the repo so the harness still reports failures. Made-with: Cursor
Run a CI matrix over smoke, fsx, postmark, and dbench using the new 9p-root export + chroot execution path. Benchmarks are prepared in the container and results are surfaced via guest.exitcode/logs artifacts. Made-with: Cursor
Add a diod regression job to the CI matrix and introduce labeled docker runs plus log-capturing cleanup helpers. Made-with: Cursor
|
@copilot resolve the merge conflicts in this pull request - prefer branch changes over origin. In the end the main repo should look like the branch. |
Co-authored-by: ericvh <69592+ericvh@users.noreply.github.com>
Resolved in f22ea51. All merge conflicts were resolved preferring the branch changes — deleted files (demand.yml, nightly.yml) stay deleted, and branch versions of all conflicting files (linux-kernel-publish.yml, .gitignore, CHANGES.md, README.md, TODO.md, qemu.bash, scripts/*) are kept. |
|
@copilot - if you fixed the merge then why is it still conflicting? |
The conflict is resolved — Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
Used AI to rework test harness, should be much cleaner now.