name: Ручное создание релиза run-name: ${{ gitea.actor }} запустил создание релиза on: workflow_dispatch: inputs: version_type: description: 'Тип версии' required: true type: choice options: - major - minor - patch default: 'patch' pre_release: description: "Отметка pre-release (для не master веток всегда true)" type: boolean default: false jobs: build: runs-on: ubuntu-latest strategy: matrix: dotnet: [ '8.0.x' ] name: .Net ${{ matrix.dotnet }} Release steps: - name: Получение исходников uses: actions/checkout@v4 with: fetch-depth: 0 # Полная история для тегов - name: Автоматическое определение pre-release id: pre-release-detector run: | # Определяем ветку по умолчанию (main/master) DEFAULT_BRANCH=$(git remote show origin | grep 'HEAD branch' | awk '{print $3}') echo "Default branch: $DEFAULT_BRANCH" # Если текущая ветка не дефолтная - форсируем pre-release if [ "$GITHUB_REF_NAME" != "$DEFAULT_BRANCH" ]; then echo "Ветка не master - устанавливаем pre-release" echo "PRE_RELEASE=true" >> $GITHUB_ENV else echo "Ветка master - используем pre-release из параметров" echo "PRE_RELEASE=${{ github.event.inputs.pre_release }}" >> $GITHUB_ENV fi - name: Получение последней версии id: versioning run: | # Получаем последний тег LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") echo "Последний тэг: $LATEST_TAG" # Извлекаем цифры версии VERSION="${LATEST_TAG#v}" if [[ ! $VERSION =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-.+)?$ ]]; then echo "Неверный формат версии: $VERSION" exit 1 fi MAJOR=${BASH_REMATCH[1]} MINOR=${BASH_REMATCH[2]} PATCH=${BASH_REMATCH[3]} # Увеличиваем версию case "${{ github.event.inputs.version_type }}" in major) MAJOR=$((MAJOR + 1)) MINOR=0 PATCH=0 ;; minor) MINOR=$((MINOR + 1)) PATCH=0 ;; patch) PATCH=$((PATCH + 1)) ;; esac BASE_VERSION="$MAJOR.$MINOR.$PATCH" # Добавим pre-release, если требуется if ${{ env.PRE_RELEASE }}; then TIMESTAMP=$(date -u +"%Y%m%d%H%M%S") NEW_VERSION="$BASE_VERSION-pre.$TIMESTAMP" else NEW_VERSION="$BASE_VERSION" fi echo "Новая версия: $NEW_VERSION" echo "VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT echo "VERSION=$NEW_VERSION" >> $GITHUB_ENV - name: Настройка .NET Core uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ matrix.dotnet }} - name: Установка версии RetailUpdatesBot run: | sed -i "s/.*<\/Version>/${{ env.VERSION }}<\/Version>/g" ./RetailUpdatesBot/RetailUpdatesBot.csproj - name: Восстановление зависимостей run: dotnet restore --nologo - name: Сборка решения run: dotnet build --no-restore --nologo - name: Публикация run: dotnet publish RetailUpdatesBot --configuration Release --runtime win-x64 --artifacts-path artifacts --nologo - name: Создание ZIP архива run: | cd artifacts/publish/RetailUpdatesBot/release_win-x64/ zip -r ../RetailUpdatesBot-v${{ env.VERSION }}.zip * cd .. echo "ZIP_PATH=RetailUpdatesBot-v${{ env.VERSION }}.zip" >> $GITHUB_ENV - name: Создание релиза uses: https://gitea.com/actions/gitea-release-action@v1 env: NODE_OPTIONS: '--experimental-fetch' # if nodejs < 18 with: files: artifacts/publish/RetailUpdatesBot/RetailUpdatesBot-v${{ env.VERSION }}.zip tag_name: v${{ env.VERSION }} name: RetailUpdatesBot-v${{ env.VERSION }} body: "## Что нового\n\n- Описание изменений\n- Функциональность\n- Исправления" prerelease: ${{ env.PRE_RELEASE }}