Skip to content

Version or Publish

Version or Publish #23

name: Version or Publish
on:
workflow_run:
workflows: ["Builds, tests & co"]
types: [completed]
concurrency: ${{ github.workflow }}
permissions: read-all
jobs:
release:
if: ${{ github.repository_owner == 'js2me' && github.event.workflow_run.conclusion == 'success' }}
permissions:
contents: write # to create release
id-token: write # to generate provenance
issues: write # to post issue comments
pull-requests: write # to create pull request
runs-on: ubuntu-latest
steps:
- name: Checkout tree
uses: actions/checkout@v4
- name: Set-up Node.js
uses: actions/setup-node@v4
with:
check-latest: true
node-version-file: .nvmrc
- run: corepack enable
- run: pnpm i
- name: Get latest tag before changeset
id: before-tag
continue-on-error: false
run: |
git fetch --tags
tag=$(git for-each-ref --sort=-creatordate --format '%(refname:short)' refs/tags | head -n 1)
if [ -z "$tag" ]; then
echo "last_tag=" >> $GITHUB_OUTPUT
else
echo "last_tag=$tag" >> $GITHUB_OUTPUT
fi
- name: Create Release Pull Request
uses: changesets/action@v1
continue-on-error: false
id: pub-or-release-pr
with:
version: pnpm changeset version
publish: pnpm pub-ci # на этом этапе в ноде пишется process.env.PUBLISHED_GIT_TAG и process.env.PUBLISHED_VERSION_RELEASE_NOTES
env:
GITHUB_TOKEN: ${{ github.token }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Export release variables
id: export-release
run: |
# Проверяем существование переменных
if [ -n "$PUBLISHED_GIT_TAG" ]; then
echo "tag=$PUBLISHED_GIT_TAG" >> $GITHUB_OUTPUT
else
echo "tag=" >> $GITHUB_OUTPUT
fi
# Обрабатываем release notes
if [ -n "$PUBLISHED_VERSION_RELEASE_NOTES" ]; then
NOTES="$PUBLISHED_VERSION_RELEASE_NOTES"
# Экранирование для GitHub Actions
NOTES="${NOTES//'%'/'%25'}"
NOTES="${NOTES//$'\n'/'%0A'}"
NOTES="${NOTES//$'\r'/'%0D'}"
echo "notes=$NOTES" >> $GITHUB_OUTPUT
else
echo "notes=" >> $GITHUB_OUTPUT
fi
- name: Create GitHub Release
if: steps.export-release.outputs.tag != ''
continue-on-error: false
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
tag_name: ${{ steps.export-release.outputs.tag }}
release_name: ${{ steps.export-release.outputs.tag }}
body: ${{ steps.export-release.outputs.notes }}
draft: false
prerelease: false