From a19c108761c19f84ecfe554eedaa284629c7d852 Mon Sep 17 00:00:00 2001 From: coopops Date: Thu, 28 May 2026 06:25:35 +0000 Subject: [PATCH] =?UTF-8?q?release:=20=D1=83=D0=B1=D1=80=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20docker=20job=20+=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=20Gitea=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit changelogithub знает только github.com и падает на git.coopenomics.world с "Can not parse GitHub repo from url ...". Заменён на curl к ${GITHUB_SERVER_URL}/api/v1/repos/.../releases (auth: GITHUB_TOKEN от Gitea Actions, contents:write). Changelog собирается из git log между двумя последними v-тегами. Docker job выпилен — Docker-образ для parser2 не публикуется, секреты DOCKERHUB_* не требуются. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/release.yml | 89 +++++++++++++---------------------- 1 file changed, 32 insertions(+), 57 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 06bb1d9..1848917 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,18 +5,16 @@ name: Release # существующим git-тегом v) — тогда: # 1. Публикуем workspace-пакеты в npm # 2. Создаём git-тег v и пушим его -# 3. Создаём GitHub Release с changelog'ом (changelogithub) -# 4. Собираем и пушим Docker-образ в docker.io (Docker Hub) +# 3. Создаём Gitea Release с changelog'ом через Gitea API # Если версия не менялась — workflow no-op (без ошибки). # # Требуемые secrets в настройках репозитория: -# NPM_TOKEN — npm access token с правами publish на @coopenomics/* -# (Gitea Actions не выдаёт OIDC id-token, поэтому npm -# trusted publishing/provenance здесь недоступны — -# используем классический auth через NODE_AUTH_TOKEN) -# DOCKERHUB_USERNAME — Docker Hub логин с доступом к организации dicoop -# DOCKERHUB_TOKEN — PAT с правами Read,Write из hub.docker.com/settings/security -# GITHUB_TOKEN — выдаётся автоматически GitHub Actions +# NPM_TOKEN — npm access token с правами publish на @coopenomics/* +# (Gitea Actions не выдаёт OIDC id-token, поэтому npm +# trusted publishing/provenance здесь недоступны — +# используем классический auth через NODE_AUTH_TOKEN) +# GITHUB_TOKEN — выдаётся автоматически Gitea Actions; используется для +# создания релиза через ${GITHUB_SERVER_URL}/api/v1/... on: push: @@ -27,7 +25,7 @@ concurrency: cancel-in-progress: false permissions: - contents: write # tag + GitHub Release + contents: write # tag + Gitea Release jobs: release: @@ -39,7 +37,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 0 # нужно для git tag проверки и changelogithub + fetch-depth: 0 # нужно для git tag проверки и git log changelog - uses: pnpm/action-setup@v4 with: { version: '10' } - uses: actions/setup-node@v4 @@ -90,52 +88,29 @@ jobs: git tag "v${{ steps.ver.outputs.version }}" git push origin "v${{ steps.ver.outputs.version }}" - - name: Create GitHub Release + # changelogithub знает только github.com и падает на git.coopenomics.world + # ("Can not parse GitHub repo from url ..."). Создаём релиз напрямую через + # Gitea REST API: GITHUB_SERVER_URL и GITHUB_REPOSITORY проставляются + # раннером, GITHUB_TOKEN имеет права contents:write на тот же репо. + # Changelog — git log между предыдущим v-тегом и текущим. + - name: Create Gitea Release if: steps.ver.outputs.released == 'true' - run: npx changelogithub + run: | + VERSION="${{ steps.ver.outputs.version }}" + PREV=$(git tag --list 'v*' --sort=-v:refname | grep -vx "v${VERSION}" | head -1) + if [ -n "$PREV" ]; then + CHANGELOG=$(git log "${PREV}..v${VERSION}" --pretty=format:'- %s') + else + CHANGELOG=$(git log "v${VERSION}" --pretty=format:'- %s') + fi + BODY=$(jq -n \ + --arg tag "v${VERSION}" \ + --arg body "$CHANGELOG" \ + '{tag_name:$tag, name:$tag, body:$body, draft:false, prerelease:false}') + curl -fsS -X POST \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$BODY" \ + "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - docker: - name: Build & push Docker image - runs-on: ubuntu-22.04 - needs: release - if: needs.release.outputs.released == 'true' - steps: - - uses: actions/checkout@v4 - with: - ref: v${{ needs.release.outputs.version }} - - uses: pnpm/action-setup@v4 - with: { version: '10' } - - uses: actions/setup-node@v4 - with: { node-version: '20', cache: 'pnpm' } - - run: pnpm install --frozen-lockfile - - run: pnpm --filter @coopenomics/coopos-ship-reader build - - run: pnpm --filter @coopenomics/parser2 build - - - uses: docker/setup-buildx-action@v3 - # Docker Hub auth: требует secrets DOCKERHUB_USERNAME + DOCKERHUB_TOKEN - # (Access Token из hub.docker.com/settings/security с правами Read,Write) - - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: dicoop/parser2 - tags: | - type=semver,pattern={{version}},value=v${{ needs.release.outputs.version }} - type=semver,pattern={{major}}.{{minor}},value=v${{ needs.release.outputs.version }} - type=raw,value=latest - - uses: docker/build-push-action@v5 - with: - context: . - file: Dockerfile - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max - platforms: linux/amd64,linux/arm64 -- 2.52.0