From bf1d62e3b3d7bd64160776bfc32d050bb4d62ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralph=20K=C3=BCpper?= Date: Mon, 31 Aug 2026 15:50:08 +0200 Subject: [PATCH] fix(ci): build compile-smoke's ext wrappers with the stdlib archive compile-smoke failed on the release candidate with one compile error out of 1348: test_issue_414_mysql_query_params Error: the wrapper archive(s) below bundle a DIFFERENT tokio compilation than the stdlib archive they would be linked with libperry_stdlib.a bundles tokio-e69c74b77ea3bbaf libperry_ext_mysql2.a bundles tokio-aa3a849219b7b42b The job named only perry, perry-runtime, perry-stdlib and the two -static wrappers, so perry-ext-mysql2 came from a different cargo invocation with its own tokio unification. The guard is right to refuse: two tokio compilations in one binary give two runtime::context::CONTEXT thread-locals, and perry-stdlib's runtime then reports 'there is no reactor running' (#507, #7629). Name the ext wrappers in the same invocation, matching what the doc-tests job already does. --- .github/workflows/test.yml | 11 ++++++++++- changelog.d/9290-compile-smoke-ext.md | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 changelog.d/9290-compile-smoke-ext.md diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 34484383ad..44a0ca714a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2791,7 +2791,16 @@ jobs: # the precompile fixtures that link the archives directly could not # pass — masked for weeks by continue-on-error. Name the wrapper # crates explicitly (same set the parity harness builds). - run: cargo build --release -p perry -p perry-runtime -p perry-stdlib -p perry-runtime-static -p perry-stdlib-static + # The ext wrappers must build in the SAME cargo invocation as the + # stdlib archive. Separate invocations let cargo unify tokio + # differently for each, and the link is then refused: "the wrapper + # archive(s) below bundle a DIFFERENT tokio compilation than the + # stdlib archive" (#507, #7629). The refusal is correct -- two tokio + # compilations mean two `runtime::context::CONTEXT` thread-locals and + # a "no reactor running" panic. `test_issue_414_mysql_query_params` + # was the single compile-smoke failure this caused. Same set the + # doc-tests job already builds together. + run: cargo build --release -p perry -p perry-runtime -p perry-stdlib -p perry-runtime-static -p perry-stdlib-static -p perry-ext-ioredis -p perry-ext-mongodb -p perry-ext-mysql2 -p perry-ext-pg -p perry-ext-nodemailer - name: Issue #945 scalar method IR guard run: | diff --git a/changelog.d/9290-compile-smoke-ext.md b/changelog.d/9290-compile-smoke-ext.md new file mode 100644 index 0000000000..cbd37e5658 --- /dev/null +++ b/changelog.d/9290-compile-smoke-ext.md @@ -0,0 +1,5 @@ +The `compile-smoke` CI job builds the database and mailer extension wrappers in +the same cargo invocation as the stdlib archive. Building them separately let +cargo unify tokio differently for each, and the linker guard correctly refused +the resulting pair — two tokio compilations in one binary mean two independent +runtime contexts and a "no reactor running" panic.