curl-sys 0.4.90+curl-8.21.0

Native bindings to the libcurl library
Documentation
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# SPDX-License-Identifier: curl

# This workflow contains checks at the source code level only.

name: 'Source'

'on':
  push:
    branches:
      - master
      - '*/ci'
    paths-ignore:
      - '.circleci/**'
      - 'appveyor.*'
      - 'Dockerfile'
  pull_request:
    branches:
      - master
    paths-ignore:
      - '.circleci/**'
      - 'appveyor.*'
      - 'Dockerfile'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: true

permissions: {}

env:
  DO_NOT_TRACK: '1'

jobs:
  checksrc:
    name: 'checksrc'
    runs-on: ubuntu-slim
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: 'check'
        run: scripts/checksrc-all.pl

  linters:
    name: 'spellcheck, linters, REUSE'
    runs-on: ubuntu-24.04-arm
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: 'install prereqs'
        run: |
          python3 -m venv ~/venv
          ~/venv/bin/pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary \
            -r .github/scripts/requirements.txt \
            -r tests/http/requirements.txt \
            -r tests/requirements.txt

      - name: 'REUSE check'
        run: |
          source ~/venv/bin/activate
          reuse lint

      - name: 'codespell'
        run: |
          source ~/venv/bin/activate
          codespell --version
          .github/scripts/codespell.sh

      - name: 'typos'
        timeout-minutes: 2
        run: |
          /home/linuxbrew/.linuxbrew/bin/brew install typos-cli
          eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
          typos --version
          .github/scripts/typos.sh

      - name: 'cmakelint'
        run: |
          source ~/venv/bin/activate
          scripts/cmakelint.sh

      - name: 'perlcheck'
        run: |
          scripts/perlcheck.sh

      - name: 'ruff'
        run: |
          source ~/venv/bin/activate
          scripts/pythonlint.sh

  pytype:
    name: 'pytype'
    runs-on: ubuntu-24.04-arm  # pytype is discontinued and requires python 3.8-3.12
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: 'install prereqs'
        run: |
          python3 -m venv ~/venv
          ~/venv/bin/pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary pytype==2024.10.11 \
            -r .github/scripts/requirements.txt \
            -r tests/http/requirements.txt \
            -r tests/requirements.txt

      - name: 'check'
        run: |
          source ~/venv/bin/activate
          find . -name '*.py' -exec pytype -j auto -k -- {} +

  complexity:
    name: 'complexity and function sizes'
    runs-on: ubuntu-slim
    timeout-minutes: 3
    steps:
      - name: 'install pmccabe'
        timeout-minutes: 2
        run: |
          ls -l /etc/apt/sources.list.d
          sudo find /etc/apt/sources.list.d -type f -not -name 'ubuntu.sources' -delete -print
          sudo sed -i 's/priority:1/priority:9/' /etc/apt/apt-mirrors.txt; cat /etc/apt/apt-mirrors.txt
          sudo apt-get -o Dpkg::Use-Pty=0 update
          sudo apt-get -o Dpkg::Use-Pty=0 install pmccabe

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: 'check function complexity'
        run: ./scripts/top-complexity

      - name: 'check function lengths'
        run: ./scripts/top-length

  xmllint:
    name: 'xmllint'
    runs-on: ubuntu-slim
    timeout-minutes: 3
    steps:
      - name: 'install prereqs'
        timeout-minutes: 2
        run: |
          sudo find /etc/apt/sources.list.d -type f -not -name 'ubuntu.sources' -delete -print
          sudo sed -i 's/priority:1/priority:9/' /etc/apt/apt-mirrors.txt; cat /etc/apt/apt-mirrors.txt
          sudo apt-get -o Dpkg::Use-Pty=0 update
          sudo apt-get -o Dpkg::Use-Pty=0 install libxml2-utils

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: 'check'
        run: git grep -z -i -l -E '^<\?xml' | xargs -0 -r xmllint --output /dev/null

  miscchecks:
    name: 'misc checks'
    runs-on: ubuntu-24.04-arm
    timeout-minutes: 5
    steps:
      - name: 'install prereqs'
        timeout-minutes: 2
        run: /home/linuxbrew/.linuxbrew/bin/brew install actionlint shellcheck zizmor

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: 'zizmor GHA'
        env:
          GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
        run: |
          eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
          zizmor --persona pedantic .github/workflows/*.yml .github/dependabot.yml

      - name: 'zizmor GHA (auditor, warning-only)'
        env:
          GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
        run: |
          eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
          zizmor --persona auditor .github/workflows/*.yml .github/dependabot.yml || true

      - name: 'actionlint'
        run: |
          eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
          export SHELLCHECK_OPTS='--exclude=1090,1091,2086,2153 --enable=avoid-nullary-conditions,deprecate-which'
          actionlint --version
          actionlint --ignore matrix --ignore ubuntu-26.04 .github/workflows/*.yml

      - name: 'shellcheck CI'
        run: |
          eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
          shellcheck --version
          .github/scripts/shellcheck-ci.sh

      - name: 'shellcheck'
        run: |
          eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
          shellcheck --version
          .github/scripts/shellcheck.sh

      - name: 'spacecheck'
        run: scripts/spacecheck.pl

      - name: 'yamlcheck'
        run: .github/scripts/yamlcheck.sh

      - name: 'badwords'
        run: scripts/badwords-all