From 2b7df05eee86b7765fd73b49a72b4531fd4fd4b7 Mon Sep 17 00:00:00 2001 From: FrigaT Date: Sat, 6 Sep 2025 00:46:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=20cicd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/ManualRelease.yaml | 120 ---------------------------- .gitea/workflows/ci.yaml | 39 +++++++++ .gitea/workflows/release.yaml | 46 +++++++++++ Directory.Build.props | 1 - 4 files changed, 85 insertions(+), 121 deletions(-) delete mode 100644 .gitea/workflows/ManualRelease.yaml create mode 100644 .gitea/workflows/ci.yaml create mode 100644 .gitea/workflows/release.yaml diff --git a/.gitea/workflows/ManualRelease.yaml b/.gitea/workflows/ManualRelease.yaml deleted file mode 100644 index 042be59..0000000 --- a/.gitea/workflows/ManualRelease.yaml +++ /dev/null @@ -1,120 +0,0 @@ -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 \ No newline at end of file diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..06bc28b --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,39 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 9.0.x + + - name: Restore + run: dotnet restore + + - name: Build + run: dotnet build --no-restore -c Release + + - name: Test + run: dotnet test --no-build -c Release --collect:"XPlat Code Coverage" --logger "trx;LogFileName=test-results.trx" + + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-results + path: | + **/TestResults/*.trx + **/TestResults/*/coverage.cobertura.xml diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml new file mode 100644 index 0000000..63b9827 --- /dev/null +++ b/.gitea/workflows/release.yaml @@ -0,0 +1,46 @@ +name: Release + +on: + release: + types: [published] + +jobs: + pack-and-publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: Restore + run: dotnet restore + + - name: Set version from tag + id: version + run: | + TAG="${GITHUB_REF_NAME#v}" + echo "PACKAGE_VERSION=$TAG" >> $GITHUB_OUTPUT + + - name: Build + run: dotnet build -c Release -p:Version=${{ steps.version.outputs.PACKAGE_VERSION }} + + - name: Pack + run: dotnet pack -c Release --no-build -p:PackageVersion=${{ steps.version.outputs.PACKAGE_VERSION }} -o ./artifacts + + - name: Upload package artifact + uses: actions/upload-artifact@v4 + with: + name: nuget-packages + path: artifacts/*.nupkg + + - name: Publish 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 --skip-duplicate \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index eb5f14c..434e3f2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -17,7 +17,6 @@ git MIT pipeline;framework;middleware;dotnet - 0.0.1 MIT true