diff --git a/.gitea/README.md b/.gitea/README.md index ef29604..1be56c3 100644 --- a/.gitea/README.md +++ b/.gitea/README.md @@ -28,6 +28,8 @@ Runner: `ubuntu-latest`, **bird2** из apt, Docker для job **release**. Если releasable-коммитов нет — semantic-release no-op, образы не публикуются. +Повтор упавшего **release** (тег уже есть, bake нет): detect берёт `v*` на `HEAD` и всё равно пушит образы. Подробнее: [docs/releasing.md](../docs/releasing.md#перезапуск-упавшего-job-release). + ### Секреты **`ACTIONS_PAT`**: push tags, releases, Container Registry. Fallback: **`gitea.token`**. diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 70ac16e..a7ea556 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -303,6 +303,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 + fetch-tags: true token: ${{ secrets.ACTIONS_PAT || gitea.token }} persist-credentials: true - uses: actions/setup-node@v4 @@ -323,8 +324,22 @@ jobs: id: rel run: | set -euo pipefail + version="" if [ -f .release-version ]; then - echo "version=$(tr -d '[:space:]' < .release-version)" >> "$GITHUB_OUTPUT" + version="$(tr -d '[:space:]' < .release-version)" + echo "New release from semantic-release: $version" + else + # Re-run after a failed docker step: tag already exists, successCmd + # did not write .release-version (semantic-release is a no-op). + git fetch --tags --force origin || true + tag="$(git tag --points-at HEAD --list 'v*.*.*' | sort -V | tail -n1 || true)" + if [ -n "${tag:-}" ]; then + version="${tag#v}" + echo "Reuse existing tag $tag on HEAD (release retry)" + fi + fi + if [ -n "${version:-}" ]; then + echo "version=$version" >> "$GITHUB_OUTPUT" echo "released=true" >> "$GITHUB_OUTPUT" else echo "released=false" >> "$GITHUB_OUTPUT" diff --git a/docs/releasing.md b/docs/releasing.md index a8428c0..4c9a840 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -79,6 +79,12 @@ Web UI показывает версию из API (footer sidebar, страни Если релиз «не создался», а CI зелёный: смотрите лог release — часто `No releasable commits`. Исправление: новый коммит с корректным заголовком (например `refactor(web): …`). +## Перезапуск упавшего job release + +semantic-release пишет `.release-version` только в `successCmd` при **новом** релизе. Если тег `vX.Y.Z` уже создан, а `docker buildx bake` упал, повторный run того же SHA делает semantic-release no-op (файла нет). Job **release** тогда берёт версию из git-тега на `HEAD` и публикует образы. + +Перезапускать нужно **весь job release**, не отдельный шаг bake: checkout + semantic-release + detect + bake идут подряд. + ## CHANGELOG Release notes — в Gitea Release; файл `CHANGELOG.md` генерируется в CI и прикрепляется как asset, **не** попадает в git history.