From 3b93a6a16b3b74635fe8f60c18a31c58c6e867e2 Mon Sep 17 00:00:00 2001 From: sirmrak Date: Thu, 9 Jul 2026 21:59:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 102 +++++++++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 259a0dc..e2e4f3a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,14 +1,87 @@ -name: Create Release +name: Test and Release on: push: tags: - 'v*' + workflow_dispatch: # Позволяет запускать вручную jobs: - release: - name: Create GitHub Release + # Шаг 1: Валидация структуры HA интеграции + validate: + name: Validate Integration runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Hassfest Validation + uses: home-assistant/actions/hassfest@master + + - name: HACS Validation + uses: hacs/action@main + with: + category: "integration" + + # Шаг 2: Запуск тестов (если есть) + test: + name: Run Tests + runs-on: ubuntu-latest + needs: validate + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest pytest-homeassistant-custom-component + if [ -f requirements_test.txt ]; then pip install -r requirements_test.txt; fi + + - name: Run tests + run: | + if [ -d "tests" ]; then + pytest tests/ --cov=custom_components/motion_light --cov-report=xml + else + echo "No tests directory found, skipping tests" + fi + + # Шаг 3: Проверка стиля кода + lint: + name: Code Quality + runs-on: ubuntu-latest + needs: validate + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install linters + run: | + pip install black ruff mypy + + - name: Check code formatting with black + run: | + black --check custom_components/motion_light/ || echo "Code formatting issues found" + + - name: Check code with ruff + run: | + ruff check custom_components/motion_light/ || echo "Ruff issues found" + + # Шаг 4: Создание релиза (только если все проверки пройдены) + release: + name: Create Release + runs-on: ubuntu-latest + needs: [validate, test, lint] permissions: contents: write @@ -24,9 +97,16 @@ jobs: TAG=${GITHUB_REF#refs/tags/} echo "tag=$TAG" >> $GITHUB_OUTPUT - TAG_MSG=$(git tag -l --format='%(contents)' $TAG 2>/dev/null || git log -1 --pretty=%B) - echo "message<> $GITHUB_OUTPUT - echo "$TAG_MSG" >> $GITHUB_OUTPUT + PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") + + if [ -z "$PREV_TAG" ]; then + COMMITS=$(git log --pretty=format:"- %s" --reverse) + else + COMMITS=$(git log ${PREV_TAG}..HEAD --pretty=format:"- %s" --reverse) + fi + + echo "commits<> $GITHUB_OUTPUT + echo "$COMMITS" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Create GitHub Release @@ -34,13 +114,19 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | TAG="${{ steps.tag.outputs.tag }}" - MSG="${{ steps.tag.outputs.message }}" + COMMITS="${{ steps.tag.outputs.commits }}" echo "🚀 Создаём релиз $TAG в GitHub..." + cat > /tmp/release_notes.md << EOF + ## Изменения в версии $TAG + + $COMMITS + EOF + gh release create "$TAG" \ --title "Release $TAG" \ - --notes "$MSG" \ + --notes-file /tmp/release_notes.md \ --target main echo "✅ Релиз создан!" \ No newline at end of file