Skip to content

Pipeline updated

Pipeline updated #101

Workflow file for this run

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."