fix(flatpak): pin the skia-binaries archive to 0.99.0 — #193 bumped the crate and left the tarball at 0.87 #196

Merged
enricobuehler merged 1 commits from worktree-flatpak-skia-099-pin into main 2026-08-13 13:53:22 +00:00
Owner

main cannot build the flatpak right now. #193 took skia-safe/skia-bindings 0.87.0 → 0.99.0 in crates/pf-console-ui/Cargo.toml, but packaging/flatpak/io.unom.Punktfunk.yml still pinned the 0.87.0 prebuilt Skia archive, so every flatpak leg since that merge dies with:

error[E0599]: no variant, associated function, or constant named `Default`
              found for enum `SkPathFillType`   (and `SkPathDirection`)
--> cargo/vendor/skia-bindings-0.99.0/src/defaults.rs:57

Why it reads like a crate bug (it isn't)

Nothing in that message points at the manifest. The offline sandbox can't fetch Skia, so the manifest pre-downloads a tarball and sets SKIA_BINARIES_URL: file:///…/skia-binaries.tar.gz. Because the URL is file://, the fetch can never fail — there is no download error to notice. skia-bindings just unpacks the archive verbatim into target/…/build/skia-bindings-*/out/skia/, including the bindings.rs it was generated with.

Those two Defaults are associated consts emitted into bindings.rs, so they travel with the archive, not with the crate — 0.99.0's src/defaults.rs was compiling against 0.87.0-era bindings. Confirmed by extracting the 0.99.0 archive:

impl SkPathFillType { pub const Default: SkPathFillType = SkPathFillType::Winding; }
impl SkPathDirection { pub const Default: SkPathDirection = SkPathDirection::CW; }

Present on both x86_64 and aarch64 — exactly the two the compiler reported missing.

Cargo.lock and cargo-sources.json are derived from the lock and self-corrected to 0.99 on their own. This tarball is the only hand-maintained pin in the offline chain, which is precisely why it was the thing left behind.

The fix

Repins both arch entries to the 0.99.0 assets:

arch sha256
x86_64 158407a4b5ce8738431bb76498be3a44fda770e51d61aac18a0e0e97becdc1de
aarch64 cf5469d1d963f704cc997f9b3342d11c49b917002361947e5c7bf7dcc3f13534

⚠ The asset name changed across the bump, not just the version: jpeg entered skia-safe's default feature set at 0.99, so the resolved-feature key went pdf-textlayout-vulkanjpegd-jpege-pdf-textlayout-vulkan. A future bump cannot be done by string-substituting the version number.

Validated against each archive's own key.txt / tag.txt (tag 0.99.0, key a25a0fdb7d90429aa2d1-<target>-jpegd-jpege-pdf-textlayout-vulkan), with libskparagraph.a and the Vulkan backend symbols present, so the archive still matches the feature set pf-console-ui resolves.

Preventing the repeat

crates/pf-console-ui/Cargo.toml already documented the correct 0.99.0 asset name — the bump author verified the native build path and evidently never knew the flatpak hand-pin existed. Both bump sites (plus packaging/flatpak/README.md) now carry a pointer to the other, and the README explains why the failure surfaces as a compile error rather than a fetch error.

Verification

  • Manifest parses as YAML with both pins resolving to the intended assets; sha256s computed from the actual downloads.
  • cargo metadata still parses the edited Cargo.toml (comment-only change).
  • Both Default consts confirmed present in the extracted bindings.rs for both architectures.
  • Not run: an end-to-end flatpak build — that needs a Linux flatpak host. The fix is verified at the archive level. The flatpak CI leg on this PR is the first real end-to-end check.
`main` cannot build the flatpak right now. #193 took `skia-safe`/`skia-bindings` 0.87.0 → 0.99.0 in `crates/pf-console-ui/Cargo.toml`, but `packaging/flatpak/io.unom.Punktfunk.yml` still pinned the **0.87.0** prebuilt Skia archive, so every flatpak leg since that merge dies with: ``` error[E0599]: no variant, associated function, or constant named `Default` found for enum `SkPathFillType` (and `SkPathDirection`) --> cargo/vendor/skia-bindings-0.99.0/src/defaults.rs:57 ``` ### Why it reads like a crate bug (it isn't) Nothing in that message points at the manifest. The offline sandbox can't fetch Skia, so the manifest pre-downloads a tarball and sets `SKIA_BINARIES_URL: file:///…/skia-binaries.tar.gz`. Because the URL is `file://`, **the fetch can never fail** — there is no download error to notice. skia-bindings just unpacks the archive verbatim into `target/…/build/skia-bindings-*/out/skia/`, *including the `bindings.rs` it was generated with*. Those two `Default`s are associated consts emitted **into** `bindings.rs`, so they travel with the **archive**, not with the crate — 0.99.0's `src/defaults.rs` was compiling against 0.87.0-era bindings. Confirmed by extracting the 0.99.0 archive: ```rust impl SkPathFillType { pub const Default: SkPathFillType = SkPathFillType::Winding; } impl SkPathDirection { pub const Default: SkPathDirection = SkPathDirection::CW; } ``` Present on **both** x86_64 and aarch64 — exactly the two the compiler reported missing. `Cargo.lock` and `cargo-sources.json` are derived from the lock and self-corrected to 0.99 on their own. This tarball is the **only** hand-maintained pin in the offline chain, which is precisely why it was the thing left behind. ### The fix Repins both arch entries to the 0.99.0 assets: | arch | sha256 | |---|---| | x86_64 | `158407a4b5ce8738431bb76498be3a44fda770e51d61aac18a0e0e97becdc1de` | | aarch64 | `cf5469d1d963f704cc997f9b3342d11c49b917002361947e5c7bf7dcc3f13534` | ⚠ The asset **name** changed across the bump, not just the version: `jpeg` entered skia-safe's default feature set at 0.99, so the resolved-feature key went `pdf-textlayout-vulkan` → `jpegd-jpege-pdf-textlayout-vulkan`. **A future bump cannot be done by string-substituting the version number.** Validated against each archive's own `key.txt` / `tag.txt` (tag `0.99.0`, key `a25a0fdb7d90429aa2d1-<target>-jpegd-jpege-pdf-textlayout-vulkan`), with `libskparagraph.a` and the Vulkan backend symbols present, so the archive still matches the feature set `pf-console-ui` resolves. ### Preventing the repeat `crates/pf-console-ui/Cargo.toml` already documented the correct 0.99.0 asset name — the bump author verified the *native* build path and evidently never knew the flatpak hand-pin existed. Both bump sites (plus `packaging/flatpak/README.md`) now carry a pointer to the other, and the README explains why the failure surfaces as a compile error rather than a fetch error. ### Verification - Manifest parses as YAML with both pins resolving to the intended assets; sha256s computed from the actual downloads. - `cargo metadata` still parses the edited `Cargo.toml` (comment-only change). - Both `Default` consts confirmed present in the extracted `bindings.rs` for both architectures. - ⏳ **Not run:** an end-to-end flatpak build — that needs a Linux flatpak host. The fix is verified at the archive level. The flatpak CI leg on this PR is the first real end-to-end check.
enricobuehler added 1 commit 2026-08-13 13:51:59 +00:00
fix(flatpak): pin the skia-binaries archive to 0.99.0 — #193 bumped the crate and left the tarball at 0.87
ci / bun-nix (pull_request) Successful in 26s
ci / docs-site (pull_request) Successful in 1m19s
ci / rust-arm64 (pull_request) Successful in 1m47s
ci / web (pull_request) Successful in 3m23s
android / android (pull_request) Successful in 5m16s
windows-client / client (x64, , x86_64-pc-windows-msvc, C:\t) (pull_request) Successful in 7m3s
windows-client / client (arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (pull_request) Successful in 2m57s
ci / rust (pull_request) Successful in 8m51s
1679275272
The dependency currency wave took skia-safe/skia-bindings 0.87.0 -> 0.99.0 in
crates/pf-console-ui/Cargo.toml, but packaging/flatpak/io.unom.Punktfunk.yml still
pinned the 0.87.0 prebuilt archive, so every flatpak leg since the merge dies with

    error[E0599]: no variant, associated function, or constant named `Default`
                  found for enum `SkPathFillType`   (and `SkPathDirection`)
    --> cargo/vendor/skia-bindings-0.99.0/src/defaults.rs:57

Nothing about that message points at the manifest, so it reads like a crate bug. It
isn't. `SKIA_BINARIES_URL: file://…` makes skia-bindings unpack the pinned tarball
verbatim into target/…/build/skia-bindings-*/out/skia/ — *including the bindings.rs
it was generated with*. Those two `Default`s are associated consts emitted INTO
bindings.rs, so they travel with the archive, not with the crate: 0.99.0's
src/defaults.rs was compiling against 0.87.0-era bindings. Verified directly — the
0.99.0 archive carries `impl SkPathFillType { pub const Default = Winding }` and
`impl SkPathDirection { pub const Default = CW }` on both x86_64 and aarch64.

Because the URL is file://, the fetch can never fail, so there is no download error
to notice — the only symptom is a compile error deep in a vendored crate.

The asset name changed across the bump: `jpeg` entered skia-safe's defaults at 0.99,
so the resolved-feature key went `pdf-textlayout-vulkan` -> `jpegd-jpege-pdf-textlayout-vulkan`.
Confirmed against each archive's own key.txt/tag.txt (tag 0.99.0, key
a25a0fdb7d90429aa2d1-<target>-jpegd-jpege-pdf-textlayout-vulkan), and libskparagraph.a
plus the Vulkan backend symbols are present, so the feature set still matches what
pf-console-ui resolves.

Everything else in the offline chain (Cargo.lock, cargo-sources.json) is regenerated
from the lock and self-corrects; this tarball is the single hand-maintained pin, which
is exactly why it was the thing left behind. Both bump sites now carry a pointer to
the other so the next one can't split-brain the same way.
enricobuehler scheduled this pull request to auto merge when all checks succeed 2026-08-13 13:53:16 +00:00
enricobuehler merged commit 155cced56b into main 2026-08-13 13:53:22 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#196