Skip to content

flakehub-publish: include-output-paths fails on multi-system matrix #65

@tsunaminoai

Description

@tsunaminoai

What happened?

flakehub-publish has been broken since the job was expanded to a 4-system matrix (PR #63). It fails consistently on tag pushes — blocking FlakeHub releases even when the GitHub release itself succeeds.

Two failure modes observed so far, both in the Run DeterminateSystems/flakehub-push@v6 step:

Mode 1 (pre-#64): The Linux runner tried to evaluate macOS outputs and failed trying to build zig-x86_64-macos-0.15.2.tar.xz — a macOS Zig binary that cannot be fetched/built on Linux.

Mode 2 (post-#64, current): With GHA cache disabled, the nix eval inside flakehub-push still fails. The root cause of include-output-paths: true forcing cross-system evaluation has not been resolved.

See: https://github.com/sc2in/zigmark/actions/runs/27066874681

Minimal reproduction

Push any version tag (e.g. v0.7.0-rcN) to main. The flakehub-publish matrix jobs will fail.

Expected behaviour

All 4 flakehub-publish matrix jobs complete successfully and the flake is indexed on FlakeHub with pre-populated output paths for each system.

Actual behaviour

flakehub-publish fails on Linux runners (and possibly macOS) when include-output-paths: true causes flakehub-push to evaluate outputs for systems other than the runner's native architecture.

Version / environment

CI: ubuntu-latest / ubuntu-24.04-arm / macos-14 / macos-13, Zig 0.16.0

When did this break?

After a specific release (v0.7.0-rc3, introduced in PR #63)


Potential solutions to investigate

  1. sectionize / per-system output filtering in the flake — expose outputs only for ${system} so flakehub-push only evaluates the local system's outputs when run on that runner. Requires restructuring flake.nix outputs.

  2. my-flake-is-too-big: true — tells flakehub-push to skip output-path evaluation entirely. Loses cache pre-population but unblocks publishing.

  3. extra-labels scoping — if flakehub-push supports scoping output evaluation to a specific system label, use ${{ matrix.system }} to limit what each runner evaluates.

  4. Single-system push without include-output-paths — revert to a single Linux runner with include-output-paths: false for indexing only, and accept that FlakeHub won't pre-populate caches. Simplest fallback.

  5. Contact Determinate Systems — this may be a known limitation of flakehub-push with multi-system flakes on single-arch runners; they may have a recommended pattern.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions