Files
parser2/.github/workflows/release.yml
T
claude 16bd87cca1
Release / Release (push) Successful in 9m23s
Release / Build & push Docker image (push) Has been skipped
release: публикация npm через NODE_AUTH_TOKEN (Gitea не выдаёт OIDC) (#4)
Хотфикс release.yml: NPM auth через NODE_AUTH_TOKEN=NPM_TOKEN, снят provenance и id-token: write — Gitea Actions не выдаёт OIDC id-token, поэтому trusted publishing/provenance работать не могут.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 05:56:17 +00:00

142 lines
5.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Release
# Запускается при каждом push в main (обычно — merge PR из dev).
# Если версия в packages/parser2/package.json изменилась (не совпадает с
# существующим git-тегом v<version>) — тогда:
# 1. Публикуем workspace-пакеты в npm
# 2. Создаём git-тег v<version> и пушим его
# 3. Создаём GitHub Release с changelog'ом (changelogithub)
# 4. Собираем и пушим Docker-образ в docker.io (Docker Hub)
# Если версия не менялась — 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
on:
push:
branches: [main]
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write # tag + GitHub Release
jobs:
release:
name: Release
runs-on: ubuntu-22.04
outputs:
released: ${{ steps.ver.outputs.released }}
version: ${{ steps.ver.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # нужно для git tag проверки и changelogithub
- uses: pnpm/action-setup@v4
with: { version: '10' }
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
registry-url: 'https://registry.npmjs.org'
- run: pnpm install --frozen-lockfile
# Читаем версию из packages/parser2/package.json и проверяем
# что тега v<version> ещё не существует.
- name: Check version change
id: ver
run: |
VERSION=$(node -p "require('./packages/parser2/package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
if git rev-parse "v$VERSION" >/dev/null 2>&1; then
echo "Tag v$VERSION already exists — nothing to release"
echo "released=false" >> $GITHUB_OUTPUT
else
echo "New version detected: v$VERSION"
echo "released=true" >> $GITHUB_OUTPUT
fi
- name: Build packages
if: steps.ver.outputs.released == 'true'
run: |
pnpm --filter @coopenomics/coopos-ship-reader build
pnpm --filter @coopenomics/parser2 build
# Auth через NODE_AUTH_TOKEN: actions/setup-node по registry-url прописал
# //registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN} в ~/.npmrc, npm/lerna
# читают токен из env. Provenance не включаем — требует OIDC id-token,
# которого Gitea Actions не выдаёт (Trusted Publisher тоже не сработает).
- name: Publish via Lerna (from-package)
if: steps.ver.outputs.released == 'true'
run: pnpm exec lerna publish from-package --yes --no-private
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Tag release
if: steps.ver.outputs.released == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git tag "v${{ steps.ver.outputs.version }}"
git push origin "v${{ steps.ver.outputs.version }}"
- name: Create GitHub Release
if: steps.ver.outputs.released == 'true'
run: npx changelogithub
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