From 39eb43c8f64e67680634266e9f6c223183a974cc Mon Sep 17 00:00:00 2001 From: vitaliytv Date: Mon, 27 Jul 2026 15:58:23 +0300 Subject: [PATCH 1/2] =?UTF-8?q?fix(ci):=20tag-mt-release.yml=20=D1=8F?= =?UTF-8?q?=D0=B2=D0=BD=D0=BE=20=D1=82=D1=80=D0=B8=D0=B3=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20release-mt.yml=20(anti-recursion=20guard)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Живий тест на mt-v0.1.2 показав: push тега через GITHUB_TOKEN НЕ породжує подію `push: tags:` для інших workflow — навмисний anti-recursion guard GitHub Actions. release-mt.yml тому не запускався автоматично; довелось тригерити вручну (gh workflow run --ref mt-v0.1.2). Додано явний `gh workflow run release-mt.yml --ref ` одразу після push тега (permissions: actions: write) — замикає повний ланцюжок merge → bump → tag → release без ручного втручання. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/tag-mt-release.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/tag-mt-release.yml b/.github/workflows/tag-mt-release.yml index f167816..7b59d24 100644 --- a/.github/workflows/tag-mt-release.yml +++ b/.github/workflows/tag-mt-release.yml @@ -25,6 +25,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: write # commit-back bump версії + push тега + actions: write # workflow_dispatch release-mt.yml нижче — push тега через GITHUB_TOKEN САМ не тригерить push-подію (anti-recursion guard GH Actions) steps: - uses: actions/checkout@v6 with: @@ -99,3 +100,12 @@ jobs: tag="mt-v${{ steps.ver.outputs.version }}" git tag "$tag" git push origin "$tag" + + # Push тега токеном GITHUB_TOKEN НЕ породжує нову подію `push: tags:` (anti-recursion + # guard GH Actions — навмисне обмеження, щоб дії токена не викликали ланцюжок workflow-ів). + # release-mt.yml тому сам по собі не запуститься на цей тег — тригеримо явно через API. + - name: Trigger release-mt.yml for the new tag + if: steps.ver.outputs.skip == 'false' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh workflow run release-mt.yml --repo "${{ github.repository }}" --ref "mt-v${{ steps.ver.outputs.version }}" From b4b08f74cf05a2436630bd9f00c695924cfa6ec4 Mon Sep 17 00:00:00 2001 From: vitaliytv Date: Mon, 27 Jul 2026 16:02:11 +0300 Subject: [PATCH 2/2] =?UTF-8?q?fix(ci):=20musl-=D1=82=D0=B0=D1=80=D0=B3?= =?UTF-8?q?=D0=B5=D1=82=20build-napi=20=D0=BF=D0=BE=D1=82=D1=80=D0=B5?= =?UTF-8?q?=D0=B1=D1=83=D1=94=20-C=20target-feature=3D-crt-static?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Другий реальний баг з того самого live-fire тесту (mt-v0.1.2): build-napi для x86_64-unknown-linux-musl падав з "cannot produce cdylib ... does not support these crate types" — musl-таргет за замовчуванням fully-static (crt-static), а .node napi-аддон — це завжди динамічна бібліотека (dlopen з Node/Bun), яку статичний musl не підтримує. CLI-бінарник (crates/mt) цей самий таргет навпаки обирав САМЕ заради crt-static (без залежності від системного libc) — тож флаг вимикається лише в кроці build-napi, не зачіпає збірку CLI. Перевірено локально: `RUSTFLAGS="-C target-feature=-crt-static" cargo zigbuild --release --target x86_64-unknown-linux-musl -p mt-napi` — компілюється й лінкується чисто, результат — валідний ELF shared object (macOS-нога build-napi в тому самому прогоні впала не через цю причину, а через `fail-fast: true`, що скасував її після падіння musl-ноги). Co-Authored-By: Claude Sonnet 5 --- .github/workflows/release-mt.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/release-mt.yml b/.github/workflows/release-mt.yml index 46583c4..369790e 100644 --- a/.github/workflows/release-mt.yml +++ b/.github/workflows/release-mt.yml @@ -132,6 +132,12 @@ jobs: - name: Build mt-napi (zigbuild) if: ${{ matrix.zig }} + # musl-таргет за замовчуванням fully-static (crt-static) — не підтримує cdylib + # ("cannot produce cdylib... does not support these crate types"). napi-аддон + # (на відміну від CLI-бінарника вище, якому crt-static якраз потрібен) — + # вимикаємо crt-static лише для цього кроку, як і документує сам napi-rs для musl. + env: + RUSTFLAGS: -C target-feature=-crt-static run: cargo zigbuild --release --target ${{ matrix.target }} -p mt-napi - name: Build mt-napi (native)