Skip to content

Consider adding Taskfile.yml for namespaced test/build commands #148

@jacaudi

Description

@jacaudi

Background

The repo uses a `Makefile` for testing, linting, code generation, and builds. Targets are flat (`test`, `lint`, `generate`, `build`, etc.). For a project of this size — with unit tests, envtest, race, coverage, and multiple build artifacts (binary + chart + image) — a Taskfile.yml would offer a few ergonomics that Make doesn't:

  • Namespaced commands: `task test:unit`, `task test:envtest`, `task test:race`, `task test:coverage` instead of a single `make test` that runs everything.
  • Built-in dependency graph + caching: re-running `task generate` is a no-op when sources haven't changed (Make handles this too, but with file-stamp footguns).
  • Self-documentation: `task --list` produces a clean per-task help table from the YAML `desc:` fields.
  • YAML over Make's tab/whitespace quirks — fewer footguns for contributors who don't write Make every day.

Why this isn't urgent

  • The current `Makefile` works. `make test` runs the right thing in CI; no developer-facing blockers.
  • Switching mid-stream creates dual-source-of-truth risk during the transition (CI uses one, devs use the other).
  • Task is an extra developer dependency to install (`brew install go-task` or similar) — not a one-line standard tool like `make`.

Proposed evaluation

Before committing to a switch:

  1. Survey what teams using cloudflare-operator's dev workflow actually run day-to-day. If `make test` and `make lint` cover 90%+ of invocations, the Taskfile gain is marginal.
  2. If we want namespacing without leaving Make, `make test-unit` / `make test-envtest` / `make test-race` as additional Make targets gets us most of the benefit at zero new dependency cost.
  3. If we adopt Taskfile, the migration plan should be:
    • Land Taskfile.yml alongside the existing Makefile.
    • Update CI to call Task (single source of truth going forward).
    • Mark the Makefile as deprecated in the README.
    • Delete the Makefile after one release cycle of dual-running.

Decision needed

Adopt Taskfile, extend the Makefile with namespaced targets, or stay as-is. Defer until someone's actually felt the friction.

Surfaced by

Routine question during issue #145's fix branch finalization.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions