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: [ '9.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: Установка версии PipelineFramework run: | sed -i "s/.*<\/Version>/${{ env.VERSION }}<\/Version>/g" ./src/PipelineFramework/PipelineFramework.csproj sed -i "s/.*<\/Version>/${{ env.VERSION }}<\/Version>/g" ./src/PipelineFramework.DI/PipelineFramework.DI.csproj - name: Восстановление зависимостей run: dotnet restore --nologo - name: Сборка решения run: dotnet build --no-restore --nologo - name: Упаковка run: dotnet pack -c Release --no-build -o ./artifacts - name: Push to nuget env: NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} run: dotnet nuget push ./artifacts/*.nupkg --source https://git.frigat.duckdns.org/api/packages/FrigaT/nuget/index.json --api-key $NUGET_API_KEY