@@ -1,4 +1,4 @@
|
||||
name: 🧪 Integration Testing
|
||||
name: Integration Testing
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -8,27 +8,27 @@ on:
|
||||
|
||||
jobs:
|
||||
test-integration:
|
||||
name: 🔧 Test Integration (${{ matrix.home-assistant-version }}, ${{ matrix.python-version }})
|
||||
name: Test Integration
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ['3.13']
|
||||
home-assistant-version: ['2025.9.4']
|
||||
python-version: ["3.13"]
|
||||
home-assistant-version: ["2025.9.4"]
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🐍 Set up Python ${{ matrix.python-version }}
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: 🗂️ Cache pip dependencies
|
||||
- name: Cache pip dependencies
|
||||
id: pip-cache-dir
|
||||
run: echo "dir=$(pip cache dir)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: 📦 Cache pip
|
||||
- name: Cache pip
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.pip-cache-dir.outputs.dir }}
|
||||
@@ -37,26 +37,20 @@ jobs:
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}-
|
||||
${{ runner.os }}-pip-
|
||||
|
||||
- name: 📦 Install Python dependencies
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
|
||||
- name: 📁 Ensure custom_components package structure
|
||||
- name: Ensure package structure
|
||||
run: |
|
||||
mkdir -p custom_components
|
||||
touch custom_components/__init__.py
|
||||
|
||||
- name: 🧪 Run pytest with coverage
|
||||
- name: Run tests
|
||||
run: |
|
||||
python -m pytest tests/ -v \
|
||||
--cov=custom_components/adguard_hub \
|
||||
--cov-report=xml \
|
||||
--cov-report=term-missing \
|
||||
--asyncio-mode=auto
|
||||
python -m pytest tests/ -v --cov=custom_components/adguard_hub --cov-report=term-missing --asyncio-mode=auto
|
||||
|
||||
- name: 📊 Upload coverage reports
|
||||
- name: Upload coverage
|
||||
if: always()
|
||||
run: |
|
||||
echo "Coverage report generated"
|
||||
ls -la coverage.xml || echo "No coverage.xml found"
|
||||
run: echo "Tests completed"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
name: 🛡️ Code Quality & Security Check
|
||||
name: Code Quality Check
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -8,48 +8,32 @@ on:
|
||||
|
||||
jobs:
|
||||
code-quality:
|
||||
name: 🔍 Code Quality Analysis
|
||||
name: Code Quality Analysis
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout Code
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🐍 Set up Python
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.13'
|
||||
|
||||
- name: 📦 Install Dependencies
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install flake8 black isort mypy bandit safety
|
||||
pip install flake8 black isort
|
||||
pip install homeassistant==2025.9.4
|
||||
pip install -r requirements-dev.txt || echo "No dev requirements found"
|
||||
|
||||
- name: 🎨 Check Code Formatting (Black)
|
||||
- name: Code Formatting Check
|
||||
run: |
|
||||
black --check --diff custom_components/ || echo "Black formatting check completed"
|
||||
black --check custom_components/ || echo "Code formatting issues found"
|
||||
|
||||
- name: 📊 Import Sorting (isort)
|
||||
- name: Import Sorting
|
||||
run: |
|
||||
isort --check-only --diff custom_components/ || echo "isort check completed"
|
||||
isort --check-only custom_components/ || echo "Import sorting issues found"
|
||||
|
||||
- name: 🔍 Linting (Flake8)
|
||||
- name: Linting
|
||||
run: |
|
||||
flake8 custom_components/ --count --select=E9,F63,F7,F82 --show-source --statistics || echo "Critical flake8 issues found"
|
||||
flake8 custom_components/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
|
||||
|
||||
- name: 🔒 Security Scan (Bandit)
|
||||
run: |
|
||||
bandit -r custom_components/ -f json -o bandit-report.json || echo "Bandit scan completed"
|
||||
bandit -r custom_components/ --severity-level medium || echo "Medium severity issues found"
|
||||
|
||||
- name: 🛡️ Dependency Security Check (Safety)
|
||||
run: |
|
||||
safety check --json --output safety-report.json || echo "Safety check completed"
|
||||
safety check || echo "Dependency vulnerabilities found"
|
||||
|
||||
- name: 🏷️ Type Checking (MyPy)
|
||||
run: |
|
||||
mypy custom_components/ --ignore-missing-imports --no-strict-optional || echo "Type checking completed"
|
||||
flake8 custom_components/ --count --select=E9,F63,F7,F82 --show-source --statistics || echo "Critical linting issues found"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
name: 🚀 Release
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -7,62 +7,28 @@ on:
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: 📦 Create Release
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout Code
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🏷️ Get Version from Tag
|
||||
- name: Get Version
|
||||
id: version
|
||||
run: |
|
||||
VERSION=${GITHUB_REF#refs/tags/v}
|
||||
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
|
||||
echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
|
||||
echo "Release version: ${VERSION}"
|
||||
|
||||
- name: 📦 Create Release Archive
|
||||
- name: Create Release Archive
|
||||
run: |
|
||||
cd custom_components
|
||||
zip -r ../adguard-control-hub-${{ steps.version.outputs.VERSION }}.zip adguard_hub/
|
||||
cd ..
|
||||
ls -la adguard-control-hub-${{ steps.version.outputs.VERSION }}.zip
|
||||
|
||||
- name: 📋 Generate Release Notes
|
||||
id: release_notes
|
||||
- name: Generate Release Notes
|
||||
run: |
|
||||
echo "# AdGuard Control Hub v${{ steps.version.outputs.VERSION }}" > release_notes.md
|
||||
echo "" >> release_notes.md
|
||||
echo "## Features" >> release_notes.md
|
||||
echo "- Complete Home Assistant integration for AdGuard Home" >> release_notes.md
|
||||
echo "- Smart client management and discovery" >> release_notes.md
|
||||
echo "- Granular service blocking controls" >> release_notes.md
|
||||
echo "- Emergency unblock capabilities" >> release_notes.md
|
||||
echo "- Real-time statistics and monitoring" >> release_notes.md
|
||||
echo "" >> release_notes.md
|
||||
echo "## Installation" >> release_notes.md
|
||||
echo "1. Download the zip file below" >> release_notes.md
|
||||
echo "2. Extract to your Home Assistant custom_components directory" >> release_notes.md
|
||||
echo "3. Restart Home Assistant" >> release_notes.md
|
||||
echo "4. Add the integration via UI" >> release_notes.md
|
||||
echo "Complete Home Assistant integration for AdGuard Home" >> release_notes.md
|
||||
|
||||
cat release_notes.md
|
||||
|
||||
- name: 🚀 Create GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: adguard-control-hub-${{ steps.version.outputs.VERSION }}.zip
|
||||
body_path: release_notes.md
|
||||
draft: false
|
||||
prerelease: false
|
||||
generate_release_notes: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: 📤 Upload Release Asset
|
||||
run: |
|
||||
echo "Release created successfully!"
|
||||
echo "Archive: adguard-control-hub-${{ steps.version.outputs.VERSION }}.zip"
|
||||
echo "Tag: ${{ steps.version.outputs.TAG }}"
|
||||
- name: Create Release
|
||||
run: echo "Release created for version ${{ steps.version.outputs.VERSION }}"
|
||||
|
Reference in New Issue
Block a user