From fe5bcb224eba4fef6962052df21aad4610bf83c2 Mon Sep 17 00:00:00 2001 From: M3gA-Mind Date: Thu, 20 Aug 2026 01:56:00 +0530 Subject: [PATCH] fix(ci): init every vendored submodule in the release Docker builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Docker job named eight submodule paths by hand while `.gitmodules` declares ten, so `vendor/tinyhosts` and `vendor/tinywallet` were never checked out. The Dockerfile COPYs `vendor/`, so both arrived in the image as empty directories and cargo failed on the missing manifest before compiling anything. Production releases have been blocked since 2026-08-07 and staging carries a byte-identical list. Fixing the two names would have restored the build and left the defect. The list's stated purpose was to skip "the large tauri-cef fork the core image doesn't need", and that fork stopped being a submodule in `1843706c3 refactor(tauri): replace CEF runtime with upstream Wry`. Nothing remains for an enumeration to exclude: all ten entries are `path` dependencies of the root crate, and cargo reads every one of their manifests during resolution whether or not the feature is enabled — which is why an `optional = true` crate broke the build. A subset is therefore always wrong. It had already gone stale three times, each surfacing at release time rather than in PR CI. So the enumeration is removed rather than corrected again. Nothing heavy is pulled in: the two missing crates are 508K and 836K, and their only nested submodule is `tinybus`, which the old list already named. --- .github/workflows/release-production.yml | 23 +++++++++++++++++++---- .github/workflows/release-staging.yml | 23 +++++++++++++++++++---- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release-production.yml b/.github/workflows/release-production.yml index 4866ba3f402..8e26450336c 100644 --- a/.github/workflows/release-production.yml +++ b/.github/workflows/release-production.yml @@ -397,11 +397,26 @@ jobs: with: ref: ${{ needs.prepare-build.outputs.build_ref }} fetch-depth: 1 - # Targeted init (not `submodules: true`) so we skip the large tauri-cef - # fork the core image doesn't need. The Dockerfile COPYs vendor/ because - # [patch.crates-io] resolves Rust SDK crates from vendor/. + # Every submodule, not an enumerated subset. The Dockerfile COPYs vendor/ + # because [patch.crates-io] resolves Rust SDK crates from vendor/, and an + # uninitialised submodule is copied in as an EMPTY directory — cargo then + # fails on the missing manifest before it compiles anything. + # + # This used to name eight paths, to skip "the large tauri-cef fork the + # core image doesn't need". That fork stopped being a submodule in + # `1843706c3 refactor(tauri): replace CEF runtime with upstream Wry`, so + # there is nothing left for the list to exclude: all ten entries in + # `.gitmodules` are `path` dependencies of the root crate, and cargo reads + # every one of their manifests to resolve, `optional` or not. A subset is + # therefore always a bug, which is what the list kept producing — it went + # stale three times (tinymemory in `54f8710f`, then tinywallet and + # tinyhosts together, issue #5594), and each time the breakage surfaced at + # RELEASE time rather than in PR CI. + # + # Enumerating buys nothing once nothing can legitimately be excluded, so + # the enumeration is gone rather than corrected a third time. - name: Init vendored Rust submodules - run: git submodule update --init --recursive vendor/tinyagents vendor/tinyflows vendor/tinycortex vendor/tinychannels vendor/tinyplace vendor/tinyhumans-sdk vendor/tinybus vendor/tinymemory + run: git submodule update --init --recursive - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Log in to GHCR diff --git a/.github/workflows/release-staging.yml b/.github/workflows/release-staging.yml index 842a901e952..29057b0578c 100644 --- a/.github/workflows/release-staging.yml +++ b/.github/workflows/release-staging.yml @@ -293,11 +293,26 @@ jobs: with: ref: ${{ needs.prepare-build.outputs.build_ref }} fetch-depth: 1 - # Targeted init (not `submodules: true`) so we skip the large tauri-cef - # fork the core image doesn't need. The Dockerfile COPYs vendor/ because - # [patch.crates-io] resolves Rust SDK crates from vendor/. + # Every submodule, not an enumerated subset. The Dockerfile COPYs vendor/ + # because [patch.crates-io] resolves Rust SDK crates from vendor/, and an + # uninitialised submodule is copied in as an EMPTY directory — cargo then + # fails on the missing manifest before it compiles anything. + # + # This used to name eight paths, to skip "the large tauri-cef fork the + # core image doesn't need". That fork stopped being a submodule in + # `1843706c3 refactor(tauri): replace CEF runtime with upstream Wry`, so + # there is nothing left for the list to exclude: all ten entries in + # `.gitmodules` are `path` dependencies of the root crate, and cargo reads + # every one of their manifests to resolve, `optional` or not. A subset is + # therefore always a bug, which is what the list kept producing — it went + # stale three times (tinymemory in `54f8710f`, then tinywallet and + # tinyhosts together, issue #5594), and each time the breakage surfaced at + # RELEASE time rather than in PR CI. + # + # Enumerating buys nothing once nothing can legitimately be excluded, so + # the enumeration is gone rather than corrected a third time. - name: Init vendored Rust submodules - run: git submodule update --init --recursive vendor/tinyagents vendor/tinyflows vendor/tinycortex vendor/tinychannels vendor/tinyplace vendor/tinyhumans-sdk vendor/tinybus vendor/tinymemory + run: git submodule update --init --recursive - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Build image (no push)