diff --git a/.gitea/workflows/ci-cd.yml b/.gitea/workflows/ci-cd.yml index 882a25b..6f4d66d 100644 --- a/.gitea/workflows/ci-cd.yml +++ b/.gitea/workflows/ci-cd.yml @@ -23,7 +23,7 @@ jobs: # ========================================== # TESTING STAGE # ========================================== - + unit-tests: name: Unit Tests (Python ${{ matrix.python-version }}) runs-on: ubuntu-latest @@ -31,8 +31,8 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.12'] - + python-version: ['3.10', '3.11', '3.12'] + steps: - name: Checkout code uses: actions/checkout@v3 @@ -46,24 +46,21 @@ jobs: git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + - name: Set up uv & Python ${{ matrix.python-version }} + uses: astral-sh/setup-uv@v5 with: python-version: ${{ matrix.python-version }} - - - name: Cache pip dependencies - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-py${{ matrix.python-version }}-pip-${{ hashFiles('requirements.txt', 'requirements-test.txt') }} - restore-keys: | - ${{ runner.os }}-py${{ matrix.python-version }}-pip- + activate-environment: true + enable-cache: true + cache-dependency-glob: | + requirements.txt + requirements-test.txt - name: Install dependencies run: | - python -m pip install --upgrade pip setuptools wheel - pip install -r requirements.txt - pip install -r requirements-test.txt + uv pip install --upgrade setuptools wheel + uv pip install -r requirements.txt + uv pip install -r requirements-test.txt - name: Create test configuration run: | @@ -81,7 +78,7 @@ jobs: - name: Run unit tests with coverage run: | - pytest test_pterodisbot.py \ + python -m pytest test_pterodisbot.py \ -v \ --tb=short \ --cov=pterodisbot \ @@ -104,7 +101,7 @@ jobs: name: Code Quality & Linting runs-on: ubuntu-latest if: ${{ !inputs.skip_tests }} - + steps: - name: Checkout code uses: actions/checkout@v3 @@ -118,15 +115,17 @@ jobs: git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 - - name: Set up Python - uses: actions/setup-python@v4 + - name: Set up uv & Python + uses: astral-sh/setup-uv@v5 with: python-version: '3.12' + activate-environment: true + enable-cache: true - name: Install linting tools run: | - python -m pip install --upgrade pip - pip install flake8 pylint black isort mypy + uv pip install --upgrade setuptools wheel + uv pip install flake8 pylint black isort mypy - name: Run flake8 run: | @@ -176,7 +175,7 @@ jobs: name: Security Scanning runs-on: ubuntu-latest if: ${{ !inputs.skip_tests }} - + steps: - name: Checkout code uses: actions/checkout@v3 @@ -190,15 +189,17 @@ jobs: git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 - - name: Set up Python - uses: actions/setup-python@v4 + - name: Set up uv & Python + uses: astral-sh/setup-uv@v5 with: python-version: '3.12' + activate-environment: true + enable-cache: true - name: Install security tools run: | - python -m pip install --upgrade pip - pip install bandit safety pip-audit + uv pip install --upgrade setuptools wheel + uv pip install bandit safety pip-audit - name: Run bandit security scan run: | @@ -211,7 +212,7 @@ jobs: - name: Run safety dependency check run: | - pip install -r requirements.txt + uv pip install -r requirements.txt safety check --json --output safety-report.json || true continue-on-error: true @@ -234,7 +235,7 @@ jobs: runs-on: ubuntu-latest needs: [unit-tests] if: ${{ !inputs.skip_tests }} - + steps: - name: Checkout code uses: actions/checkout@v3 @@ -248,22 +249,21 @@ jobs: git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 - - name: Set up Python - uses: actions/setup-python@v4 + - name: Set up uv & Python + uses: astral-sh/setup-uv@v5 with: python-version: '3.12' - - - name: Cache dependencies - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-integration-${{ hashFiles('requirements.txt') }} + activate-environment: true + enable-cache: true + cache-dependency-glob: | + requirements.txt + requirements-test.txt - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install -r requirements-test.txt + uv pip install --upgrade setuptools wheel + uv pip install -r requirements.txt + uv pip install -r requirements-test.txt - name: Create test configuration run: | @@ -281,7 +281,7 @@ jobs: - name: Run integration tests run: | - pytest test_pterodisbot.py::TestIntegration \ + python -m pytest test_pterodisbot.py::TestIntegration \ -v \ --tb=short \ --timeout=60 @@ -289,7 +289,7 @@ jobs: # ========================================== # BUILD STAGE # ========================================== - + docker-build: name: Build Docker Image runs-on: ubuntu-latest @@ -298,7 +298,7 @@ jobs: always() && (needs.unit-tests.result == 'success' || inputs.skip_tests) && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') - + steps: - name: Checkout code uses: actions/checkout@v3 @@ -384,13 +384,13 @@ jobs: # ========================================== # REPORTING STAGE # ========================================== - + test-report: name: Generate Test Report runs-on: ubuntu-latest needs: [unit-tests, code-quality, security-scan, integration-tests] if: always() && !inputs.skip_tests - + steps: - name: Download all artifacts uses: actions/download-artifact@v3 @@ -419,7 +419,7 @@ jobs: runs-on: ubuntu-latest needs: [test-report, docker-build] if: always() - + steps: - name: Check pipeline status run: |