diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index 7c47cbe..9a74b8b 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -35,18 +35,15 @@ jobs: tags: tft-devcontainer-ci:latest load: true - - name: Show tool versions in container run: | - docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace tft-devcontainer-ci:latest bash -lc 'just --version && cmake --version && ninja --version && arm-none-eabi-gcc --version | head -n 1 && uv --version' + docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace \ + tft-devcontainer-ci:latest bash -lc 'just --version && cmake --version && ninja --version && arm-none-eabi-gcc --version | head -n 1 && uv --version' - - name: Sync host Python tools inside container + - name: Sync tools and Run CI build run: | - docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace tft-devcontainer-ci:latest bash -lc 'cd tools/host && uv sync' - - - name: Run CI build inside container - run: | - docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace tft-devcontainer-ci:latest bash -lc 'just ci::build' + docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace \ + tft-devcontainer-ci:latest bash -lc 'cd tools/host && uv sync && cd ../.. && just ci::build' - name: Upload build directory if: always() @@ -80,20 +77,16 @@ jobs: tags: tft-devcontainer-ci:latest load: true - - name: Download build directory artifact uses: actions/download-artifact@v4 with: name: build-tree path: build/ - - name: Sync host Python tools inside container + - name: Sync tools and Run host tests run: | - docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace tft-devcontainer-ci:latest bash -lc 'cd tools/host && uv sync' - - - name: Run host tests inside container - run: | - docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace tft-devcontainer-ci:latest bash -lc 'just ci::test' + docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace \ + tft-devcontainer-ci:latest bash -lc 'cd tools/host && uv sync && cd ../.. && just ci::test' - name: Upload test logs and build directory if: always() @@ -103,4 +96,4 @@ jobs: path: | build/ if-no-files-found: warn - retention-days: 7 \ No newline at end of file + retention-days: 7 diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index 6ca6e54..c632971 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -1,16 +1,5 @@ name: Release -# Раздельные теги (bootloader — Фаза 5, firmware/bootloader/PLAN.md): -# firmware_test, bootloader и service-tui версионируются и релизятся -# независимо друг от друга. -# firmware-vX.Y.Z → publish-firmware (только firmware_test_hab.bin, Debug) -# bootloader-vX.Y.Z → publish-bootloader (только bootloader_hab.bin, Release, -# подписан ТЕСТОВЫМ HAB-ключом — см. -# firmware/bootloader/SIGNING_CEREMONY.md) -# tui-vX.Y.Z → publish-tui (service-tui-vX.Y.Z-{macos,windows}.zip) -# HAB firmware_test/bootloader, вшиваемые в TUI-бандл, всегда собираются заново -# из текущего HEAD тега tui-v*, а не берутся из отдельных релизов — так проще -# и не тянет зависимость на чужой GitHub Release. on: push: tags: @@ -35,11 +24,6 @@ permissions: contents: write jobs: - # ───────────────────────────────────────────────────────────────────────── - # firmware — собирает HAB Debug firmware_test И HAB Release bootloader. - # Нужна как для standalone firmware-/bootloader-релизов, так и для вшивания - # обоих образов в TUI-бандл (package-tui, Фаза 5) — выполняется всегда. - # ───────────────────────────────────────────────────────────────────────── firmware: name: Build firmware_test HAB (Debug) + bootloader HAB (Release) runs-on: ubuntu-latest @@ -62,12 +46,6 @@ jobs: tags: tft-devcontainer-ci:latest load: true - - - name: Sync host Python tools inside container - run: | - docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace \ - tft-devcontainer-ci:latest bash -lc 'cd tools/host && uv sync' - - name: Проверить, что тег совпадает с версией в CMakeLists.txt if: startsWith(github.ref, 'refs/tags/firmware-v') run: | @@ -79,10 +57,10 @@ jobs: fi echo " ✅ Версия тега совпадает с CMakeLists.txt: ${file_version}" - - name: Собрать firmware_test HAB (Debug) + - name: Sync tools and Собрать firmware_test HAB (Debug) run: | docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace \ - tft-devcontainer-ci:latest bash -lc 'just build::hab-firmware-test-debug' + tft-devcontainer-ci:latest bash -lc 'cd tools/host && uv sync && cd ../.. && just build::hab-firmware-test-debug' - name: Upload firmware_test_hab.bin uses: actions/upload-artifact@v4 @@ -103,10 +81,10 @@ jobs: fi echo " ✅ Версия тега совпадает с CMakeLists.txt: ${file_version}" - - name: Собрать bootloader HAB (Release) + - name: Sync tools and Собрать bootloader HAB (Release) run: | docker run --rm --user root -v "$GITHUB_WORKSPACE":/workspace -w /workspace \ - tft-devcontainer-ci:latest bash -lc 'just build::hab-bootloader-release' + tft-devcontainer-ci:latest bash -lc 'cd tools/host && uv sync && cd ../.. && just build::hab-bootloader-release' - name: Upload bootloader_hab.bin uses: actions/upload-artifact@v4 @@ -116,10 +94,6 @@ jobs: if-no-files-found: error retention-days: 14 - # ───────────────────────────────────────────────────────────────────────── - # publish-firmware — только на тег firmware-v*, отдельный standalone-релиз - # HAB-образа (для tools/host/flash_usb.py и ручной прошивки, не через TUI). - # ───────────────────────────────────────────────────────────────────────── publish-firmware: name: Publish firmware release needs: firmware @@ -137,23 +111,13 @@ jobs: name: firmware-hab-debug path: release-assets/ - - name: Create GitHub Release - env: - GH_TOKEN: ${{ github.token }} - run: | - gh release create "${GITHUB_REF_NAME}" \ - release-assets/firmware_test_hab.bin \ - --title "firmware_test ${GITHUB_REF_NAME#firmware-v}" \ - --generate-notes + - name: Create Forgejo Release + uses: softprops/action-gh-release@v2 + with: + files: release-assets/firmware_test_hab.bin + name: "firmware_test ${{ github.ref_name }}" + generate_release_notes: true - # ───────────────────────────────────────────────────────────────────────── - # publish-bootloader — только на тег bootloader-v*, отдельный standalone- - # релиз HAB-образа (для tools/host/flash_usb.py / SWD, не через TUI). - # ⚠️ Подписан ТЕСТОВЫМ HAB-ключом (dev/pre-series, HAB Open чип всё равно - # загрузит и unsigned) — реальная SRK-церемония не проведена, см. - # firmware/bootloader/SIGNING_CEREMONY.md. Явно проговорено в release notes, - # чтобы этот asset не приняли за production-подписанный постфактум. - # ───────────────────────────────────────────────────────────────────────── publish-bootloader: name: Publish bootloader release needs: firmware @@ -171,20 +135,13 @@ jobs: name: bootloader-hab-release path: release-assets/ - - name: Create GitHub Release - env: - GH_TOKEN: ${{ github.token }} - run: | - gh release create "${GITHUB_REF_NAME}" \ - release-assets/bootloader_hab.bin \ - --title "bootloader ${GITHUB_REF_NAME#bootloader-v}" \ - --notes "⚠️ HAB-подпись — ТЕСТОВЫЙ ключ (dev/pre-series, HAB Open). Не production. Реальная SRK-церемония — firmware/bootloader/SIGNING_CEREMONY.md." + - name: Create Forgejo Release + uses: softprops/action-gh-release@v2 + with: + files: release-assets/bootloader_hab.bin + name: "bootloader ${{ github.ref_name }}" + body: "⚠️ HAB-подпись — ТЕСТОВЫЙ ключ (dev/pre-series, HAB Open). Не production. Реальная SRK-церемония — firmware/bootloader/SIGNING_CEREMONY.md." - # ───────────────────────────────────────────────────────────────────────── - # service-tui-{macos,windows} — упаковка PyInstaller-бандла с вшитым HAB - # из job firmware. Запускается на тег tui-v* и на workflow_dispatch с - # release_type=tui (для тестового прогона без публикации). - # ───────────────────────────────────────────────────────────────────────── service-tui-macos: name: Package service-tui (macOS) needs: firmware @@ -197,7 +154,7 @@ jobs: uses: actions/checkout@v4 - name: Install uv - uses: astral-sh/setup-uv@v8.3.2 # без плавающего major-тега начиная с v8 (upstream security policy) — пин точной версии, обновлять периодически + uses: astral-sh/setup-uv@v8.3.2 - name: Install just uses: extractions/setup-just@v4 @@ -256,7 +213,7 @@ jobs: uses: actions/checkout@v4 - name: Install uv - uses: astral-sh/setup-uv@v8.3.2 # без плавающего major-тега начиная с v8 (upstream security policy) — пин точной версии, обновлять периодически + uses: astral-sh/setup-uv@v8.3.2 - name: Install just uses: extractions/setup-just@v4 @@ -306,9 +263,6 @@ jobs: if-no-files-found: error retention-days: 14 - # ───────────────────────────────────────────────────────────────────────── - # publish-tui — только на тег tui-v*, релиз с обоими zip-бандлами. - # ───────────────────────────────────────────────────────────────────────── publish-tui: name: Publish service-tui release needs: [service-tui-macos, service-tui-windows] @@ -327,11 +281,9 @@ jobs: path: release-assets/ merge-multiple: true - - name: Create GitHub Release - env: - GH_TOKEN: ${{ github.token }} - run: | - gh release create "${GITHUB_REF_NAME}" \ - release-assets/*.zip \ - --title "service-tui ${GITHUB_REF_NAME#tui-v}" \ - --generate-notes + - name: Create Forgejo Release + uses: softprops/action-gh-release@v2 + with: + files: release-assets/*.zip + name: "service-tui ${{ github.ref_name }}" + generate_release_notes: true