diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..887645c --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,99 @@ +name: Code analysis + +on: + push: + branches: + - develop + pull_request: + branches-ignore: + - master + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} + cancel-in-progress: true + +env: + # flake8-commas is failing on Python 3.12 + DEFAULT_PYTHON: '3.11' + +jobs: + linters: + name: Linters + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python ${{ env.DEFAULT_PYTHON }} + uses: actions/setup-python@v5 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + + - name: Install system dependencies + # this step is needed for successful installation of "bonsai" library in python dependencies + run: sudo apt-get update && sudo apt-get install -y libldap2-dev libsasl2-dev + + - name: Install poetry + uses: snok/install-poetry@v1 + with: + virtualenvs-create: true + virtualenvs-in-project: true + + - name: Cache poetry + uses: actions/cache@v4 + with: + path: ~/.cache/pypoetry + key: ${{ runner.os }}-python-${{ env.DEFAULT_PYTHON }}-codeql-${{ hashFiles('**/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-python-${{ env.DEFAULT_PYTHON }}-codeql-${{ hashFiles('**/poetry.lock') }} + ${{ runner.os }}-python-${{ env.DEFAULT_PYTHON }}-codeql- + ${{ runner.os }}-python + ${{ runner.os }}- + + - name: Install dependencies + run: | + poetry install --no-root --all-extras --with dev,test,docs + + # Set the `CODEQL-PYTHON` environment variable to the Python executable + # within the Poetry virtual environment + echo "CODEQL_PYTHON=$(poetry run which python)" >> $GITHUB_ENV + + - name: Run flake8 + run: poetry run flake8 horizon/ + + - name: Run mypy + run: poetry run mypy ./horizon --config-file ./pyproject.toml + + codeql: + name: CodeQL + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python ${{ env.DEFAULT_PYTHON }} + uses: actions/setup-python@v5 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: python + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: /language:python diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6776c0c..4e6e9c0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -141,3 +141,10 @@ repos: hooks: - id: check-hooks-apply - id: check-useless-excludes + + +ci: + skip: + - flake8 # checked with Github Actions + - mypy # checked with Github Actions + - docker-compose-check # cannot run on pre-commit.ci