diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..60241ef --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,121 @@ +name: Continuous Integration + +on: + push: + branches: + - main + pull_request: + workflow_dispatch: + +jobs: + venv: + name: Create virtual environment + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4.1.1 + - name: Set up Python + uses: actions/setup-python@v5.0.0 + id: setup_python + with: + python-version: "3.8" + - name: Create virtual environment + uses: actions/cache@v4.0.0 + with: + key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version }}-${{ github.run_id }} + restore-keys: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version }} + path: .venv + - name: Update Pip + run: | + python -m venv .venv + source .venv/bin/activate + python -m pip install --upgrade pip + python -m pip install --upgrade --upgrade-strategy eager .[dev,test] mypy types-setuptools + + format: + name: Check formatting + runs-on: ubuntu-latest + needs: [venv] + steps: + - name: Checkout sources + uses: actions/checkout@v4.1.1 + - name: Set up Python + uses: actions/setup-python@v5.0.0 + id: setup_python + with: + python-version: "3.8" + - name: Cache virtual environment + uses: actions/cache@v4.0.0 + with: + key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version }}-${{ github.run_id }} + path: .venv + - name: Check Python formatting + uses: psf/black@23.12.1 + - name: Check JSON formatting + run: | + source .venv/bin/activate + pre-commit run check-json --all-files + - name: Check other formatting + run: | + source .venv/bin/activate + pre-commit run end-of-file-fixer --all-files + pre-commit run trailing-whitespace --all-files + + lint: + name: Lint + runs-on: ubuntu-latest + needs: [venv] + steps: + - name: Checkout sources + uses: actions/checkout@v4.1.1 + - name: Set up Python + uses: actions/setup-python@v5.0.0 + id: setup_python + with: + python-version: "3.8" + - name: Cache virtual environment + uses: actions/cache@v4.0.0 + with: + key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version}}-${{ github.run_id }} + path: .venv + - name: Lint with ruff + uses: chartboost/ruff-action@v1.0.0 + - name: Lint with mypy + run: | + source .venv/bin/activate + mypy --ignore-missing-imports ssllabs + mypy --ignore-missing-imports tests + + test: + name: Test with Python ${{ matrix.python-version }} + runs-on: ubuntu-latest + needs: [format, lint] + strategy: + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + steps: + - name: Checkout sources + uses: actions/checkout@v4.1.1 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5.0.0 + id: setup_python + with: + python-version: ${{ matrix.python-version }} + allow-prereleases: true + check-latest: true + - name: Use virtual environment + uses: actions/cache@v4.0.0 + with: + key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version}}-${{ github.run_id }} + restore-keys: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version }} + path: .venv + - name: Install dependencies + run: | + python -m venv .venv + source .venv/bin/activate + python -m pip install --upgrade pip + python -m pip install --upgrade --upgrade-strategy eager .[test] + - name: Test with pytest + run: | + source .venv/bin/activate + pytest --cov=ssllabs diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml new file mode 100644 index 0000000..fbc3aaa --- /dev/null +++ b/.github/workflows/cleanup.yml @@ -0,0 +1,26 @@ +name: Cleanup +on: + pull_request: + types: + - closed +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - name: Cleanup cache + run: | + gh extension install actions/gh-actions-cache + + REPO=${{ github.repository }} + BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge" + cacheKeys=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 ) + + # set this to not fail the workflow while deleting cache keys + set +e + + for cacheKey in $cacheKeys + do + gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm + done + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/publish.yml similarity index 91% rename from .github/workflows/pythonpublish.yml rename to .github/workflows/publish.yml index d1758eb..fae6eb5 100644 --- a/.github/workflows/pythonpublish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Upload Python Package +name: Publish Python Package on: release: @@ -26,6 +26,8 @@ jobs: python-version: "3.12" - name: Install dependencies run: | + python -m venv .venv + source .venv/bin/activate python -m pip install --upgrade pip python -m pip install .[docs] - name: Build documentation diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml deleted file mode 100644 index a91831d..0000000 --- a/.github/workflows/pythonpackage.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: Python package - -on: - push: - branches: - - main - pull_request: - workflow_dispatch: - -jobs: - format: - name: Check formatting - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v4.1.1 - - name: Set up Python - uses: actions/setup-python@v5.0.0 - with: - python-version: "3.8" - - name: Check Python formatting - uses: psf/black@23.12.1 - - name: Check JSON formatting - run: | - python -m pip install --upgrade pip - python -m pip install pre-commit - pre-commit run check-json --all-files - - name: Check other formatting - run: | - pre-commit run end-of-file-fixer --all-files - pre-commit run trailing-whitespace --all-files - - lint: - name: Lint - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v4.1.1 - - name: Set up Python - uses: actions/setup-python@v5.0.0 - with: - python-version: "3.8" - - name: Lint with ruff - uses: chartboost/ruff-action@v1.0.0 - - name: Lint with mypy - run: | - python -m pip install --upgrade pip - python -m pip install mypy types-setuptools - mypy --ignore-missing-imports ssllabs - mypy --ignore-missing-imports tests - - test: - name: Test with Python ${{ matrix.python-version }} - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - steps: - - name: Checkout sources - uses: actions/checkout@v4.1.1 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5.0.0 - with: - python-version: ${{ matrix.python-version }} - allow-prereleases: true - check-latest: true - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install -e .[test] - - name: Test with pytest - run: | - pytest --cov=ssllabs