Skip to content

Conversation

@jgraettinger
Copy link
Member

Summary

This PR introduces a unified development infrastructure using mise as the project-wide tool manager, environment manager, and task runner. Local development stacks run on Linux with user-mode systemd managing service lifecycles.

Key changes:

  • mise tasks for building, testing, and running local stacks
  • VM-based development via Lima (local) or GCP (remote) for consistent environments
  • systemd integration for orchestrating control plane and data plane services
  • GitHub Actions workflows aligned with local ci:platform-build and ci:platform-test tasks
  • Documentation in mise/README.md covering setup, common workflows, and IDE configuration

Supporting changes bundled in this PR:

  • Adopt cargo nextest for Rust test runs
  • Refactor Supabase config for parallel pgTAP tests
  • Migrate config-encryption from micro-repo into this codebase
  • Remove GCP KMS dependencies from test fixtures (switched to age)
  • Various bug fixes and agent refactoring

Why VMs?

All developers use VMs for development to ensure:

  • Consistency - Matches CI and production (Ubuntu 24.04 LTS, systemd)
  • Isolation - Complete environment without impacting host machine
  • Security - Production credentials on host stay outside dev environments

Usage Highlights

# Create a VM (Lima or GCP)
mise run vm:create-lima tiger ~/work
mise run vm:create-gcp panther

# Inside the VM: run a local stack
mise run local:stack

# Inside the VM: run the full CI test suite
mise run ci:platform-test

# From your host: forward ports for development with integrated UI
mise run vm:port-forward lima-tiger

See mise/README.md for complete documentation including IDE setup, service management, and VM lifecycle.

@jgraettinger jgraettinger requested a review from a team December 1, 2025 19:28
@jgraettinger jgraettinger force-pushed the johnny/devex-spike-2 branch 3 times, most recently from a955415 to 93930d8 Compare December 2, 2025 17:32
Consolidate a legacy agent code path to instead use `runtime` (like
everything else).

Also add a retry on transient docker pull errors, like "TLS handshake
timeout" which happens periodically.
Do not assume a singular "binary directory". Instead use `locate-bin`
and the PATH to find flowctl-go.
…o be lost

response_rx was previously being error-checked before the log loop had a
chance to be driven, resulting in lost logs (obfuscating a local stack
issue w/ the connector network).

Fix this, and further harden log handling.
This was part of an aborted attempt to remove the dependency on get_random(),
as it complicates WASM builds.
Allows tests to function without GCP credentials.
Move the config-encryption service into the Flow repo. Simplify it by
removing YAML support and OpenAPI schema (for now, at least).

Add support for the `age` tool, used in local stack contexts. Add new
tests.
Parallel how protobuf generation works.
nextest runs all workspace tests in parallel, with ergonomic failure
reporting.
Allows the config to work with Podman local stacks.
Add `run_single_test.sh` for running pgTAP tests in parallel.

Turn off supabase features we don't use, on local stacks.
Introduce `mise` as a project-wide tool manager, environment manager,
and task runner for local, within VMs, and in CI.

Implement mise tasks for development and test targets, for driving
local stacks, and for managing development VMs.

Local stacks expect to be run within a Linux + systemd environment, and
use user-mode systemd to manage the lifecycle of desired stack components.

Development VMs are as-similar as possible to Github CI and our own
production environments (Ubuntu 24.04 LTS, systemd). The
`ci:platform-build` and `ci:platform-test` tasks closely mimic the
corresponding GitHub Actions workflows.
Remove Makefile, Tiltfile, go.sh, and other bits we no longer use.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants