Pipeline updated #101
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish npm package | |
on: | |
push: | |
tags: | |
- 'v*' # Триггерим workflow при создании тега, начинающегося с 'v' | |
jobs: | |
publish: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Получаем всю историю коммитов для работы с тегами | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
registry-url: 'https://registry.npmjs.org' | |
- name: Log github.ref | |
run: | | |
echo "github.ref: ${{ github.ref }}" | |
- name: Get tag info | |
id: tag | |
run: | | |
echo "Extracting tag name from GITHUB_REF..." | |
TAG_NAME=${GITHUB_REF#refs/tags/} | |
echo "TAG_NAME=$TAG_NAME" | |
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV | |
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_OUTPUT | |
- name: Determine branch and version | |
id: version | |
run: | | |
echo "Determining branch and version..." | |
echo "github.ref: ${{ github.ref }}" | |
# Получаем коммит, на который указывает тег | |
TAG_COMMIT=$(git rev-list -n 1 $TAG_NAME) | |
echo "TAG_COMMIT: $TAG_COMMIT" | |
# Определяем, из какой ветки был создан коммит | |
BRANCH_NAME=$(git branch -a --contains $TAG_COMMIT | grep -E 'remotes/origin/(develop|master)' | sed 's|remotes/origin/||' | head -n 1 | tr -d ' ') | |
echo "BRANCH_NAME: $BRANCH_NAME" | |
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV | |
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_OUTPUT | |
if [[ "$BRANCH_NAME" == "develop" ]]; then | |
echo "Tag was created from the develop branch." | |
TIMESTAMP=$(date -u +"%Y%m%d%H%M%S") | |
VERSION="${TAG_NAME}-dev${TIMESTAMP}" | |
echo "VERSION=$VERSION" | |
echo "VERSION=$VERSION" >> $GITHUB_ENV | |
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT | |
echo "CHANNEL=dev" >> $GITHUB_ENV | |
else | |
echo "Tag was created from the master branch." | |
VERSION="${TAG_NAME}" | |
echo "VERSION=$VERSION" | |
echo "VERSION=$VERSION" >> $GITHUB_ENV | |
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT | |
echo "CHANNEL=latest" >> $GITHUB_ENV | |
fi | |
- name: Check current version in package.json | |
id: current-version | |
run: | | |
echo "Checking current version in package.json..." | |
CURRENT_VERSION=$(node -p "require('./package.json').version") | |
echo "CURRENT_VERSION=$CURRENT_VERSION" | |
echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV | |
echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_OUTPUT | |
- name: Normalize versions for comparison | |
id: normalize-versions | |
run: | | |
echo "Normalizing versions for comparison..." | |
NORMALIZED_CURRENT_VERSION=$(echo "$CURRENT_VERSION" | sed 's/^v//') | |
NORMALIZED_TAG_VERSION=$(echo "$TAG_NAME" | sed 's/^v//') | |
echo "NORMALIZED_CURRENT_VERSION=$NORMALIZED_CURRENT_VERSION" | |
echo "NORMALIZED_TAG_VERSION=$NORMALIZED_TAG_VERSION" | |
echo "NORMALIZED_CURRENT_VERSION=$NORMALIZED_CURRENT_VERSION" >> $GITHUB_ENV | |
echo "NORMALIZED_TAG_VERSION=$NORMALIZED_TAG_VERSION" >> $GITHUB_ENV | |
- name: Update package.json version if necessary | |
if: | | |
env.BRANCH_NAME == 'develop' || | |
env.NORMALIZED_CURRENT_VERSION != env.NORMALIZED_TAG_VERSION | |
run: | | |
echo "Updating package.json version to ${{ env.VERSION }}..." | |
npm version ${{ env.VERSION }} --no-git-tag-version | |
echo "Updated package.json:" | |
cat package.json | |
- name: Install dependencies | |
run: | | |
echo "Installing dependencies..." | |
npm install | |
echo "Dependencies installed." | |
- name: Build package | |
run: | | |
echo "Building package..." | |
npm run build | |
echo "Build completed." | |
- name: Publish to npm | |
run: | | |
echo "Publishing package to npm with tag ${{ env.CHANNEL }}..." | |
npm publish --tag ${{ env.CHANNEL }} | |
echo "Package published successfully." | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Update GitHub Release | |
if: env.BRANCH_NAME == 'develop' | |
run: | | |
echo "Updating GitHub release for tag ${{ env.VERSION }}..." | |
# Получаем ID релиза по имени тега | |
RELEASE_ID=$(curl -s \ | |
-H "Authorization: token ${{ secrets.PAT }}" \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
"https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG_NAME" | jq -r '.id') | |
if [[ "$RELEASE_ID" == "null" || -z "$RELEASE_ID" ]]; then | |
echo "Release not found for tag $TAG_NAME." | |
exit 1 | |
fi | |
echo "Found release ID: $RELEASE_ID" | |
# Обновляем релиз с новым именем тега | |
curl -s \ | |
-X PATCH \ | |
-H "Authorization: token ${{ secrets.PAT }}" \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-d '{ | |
"tag_name": "'${{ env.VERSION }}'", | |
"name": "'${{ env.VERSION }}'", | |
"body": "Release updated to match the new tag." | |
}' \ | |
"https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID" | |
echo "GitHub release updated to ${{ env.VERSION }}." | |
- name: Update tag if from develop | |
if: env.BRANCH_NAME == 'develop' | |
run: | | |
echo "Updating tag to ${{ env.VERSION }}..." | |
# Настраиваем имя и email пользователя для Git | |
echo "Setting Git user name and email..." | |
git config --global user.name "GitHub Actions" | |
git config --global user.email "[email protected]" | |
# Удаляем старый тег локально | |
echo "Deleting old tag $TAG_NAME locally..." | |
git tag -d $TAG_NAME | |
# Удаляем старый тег на удаленном репозитории | |
echo "Deleting old tag $TAG_NAME on remote..." | |
git push --delete origin $TAG_NAME | |
# Создаем новый тег с [skip ci] в сообщении | |
echo "Creating new tag ${{ env.VERSION }}..." | |
git tag -a ${{ env.VERSION }} -m "New release [skip ci]" | |
# Пушим новый тег | |
echo "Pushing new tag ${{ env.VERSION }} to remote..." | |
git push origin ${{ env.VERSION }} | |
echo "Tag updated to ${{ env.VERSION }}." | |
- name: Commit and push changes to develop | |
if: env.BRANCH_NAME == 'develop' | |
run: | | |
echo "Preparing to commit and push changes to develop..." | |
# Проверяем, существует ли ветка develop в локальной копии | |
if ! git show-ref --quiet refs/heads/develop; then | |
echo "Branch develop does not exist locally. Creating it..." | |
git branch develop origin/develop | |
fi | |
# Переключаемся на ветку develop | |
git checkout develop | |
# Обновляем ветку develop до актуального состояния | |
git pull origin develop | |
# Настраиваем имя и email пользователя для Git | |
echo "Setting Git user name and email..." | |
git config --global user.name "GitHub Actions" | |
git config --global user.email "[email protected]" | |
# Добавляем изменения | |
echo "Staging package.json and package-lock.json..." | |
git add package.json package-lock.json | |
# Выполняем коммит | |
echo "Committing changes..." | |
git commit -m "Update version to ${{ env.VERSION }} [skip ci]" | |
# Пушим изменения в ветку develop | |
echo "Pushing changes to develop..." | |
git push origin develop | |
echo "Changes pushed to develop." |