Skip to content

Support Python 3.13 #423

Support Python 3.13

Support Python 3.13 #423

Workflow file for this run

name: Continuous Integration
on:
workflow_call:
pull_request:
push:
branches:
- master
permissions:
contents: read
jobs:
lint:
name: 🎨 Linters
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Set up Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install -U pip setuptools
python -m pip install -r dev-requirements.txt
python -m pip uninstall -y charset-normalizer
- name: Type checking (Mypy)
run: |
mypy --strict charset_normalizer
- name: Import sorting check (isort)
run: |
isort --check charset_normalizer
- name: Code format (Black)
run: |
black --check --diff --target-version=py37 charset_normalizer
- name: Style guide enforcement (Flake8)
run: |
flake8 charset_normalizer
tests:
name: ✅ Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Install dependencies
run: |
python -m pip install -U pip setuptools
python -m pip install -r dev-requirements.txt
python -m pip uninstall -y charset-normalizer
- name: Install the package
run: |
python -m build --no-isolation
python -m pip install ./dist/*.whl
- name: Run tests
run: |
pytest
- uses: codecov/codecov-action@4fe8c5f003fae66aa5ebb77cfd3e7bfbbda0b6b0 # v3.1.5
detection_coverage:
needs:
- tests
name: 📈 Detection Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Set up Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install -U pip setuptools
python -m pip install -r dev-requirements.txt
python -m pip uninstall -y charset-normalizer
- name: Install the package
run: |
python -m build
python -m pip install ./dist/*.whl
- name: Clone the complete dataset
run: |
git clone https://github.com/Ousret/char-dataset.git
- name: Coverage WITH preemptive
run: |
python ./bin/coverage.py --coverage 97 --with-preemptive
- name: Coverage WITHOUT preemptive
run: |
python ./bin/coverage.py --coverage 95
# integration_test:
#
# needs:
# - tests
#
# name: 🔗 Integration Tests
# runs-on: ubuntu-latest
#
# steps:
# - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
# - name: Set up Python
# uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
# with:
# python-version: '3.11'
# - name: Install dependencies
# run: |
# pip install -U pip setuptools
# pip install -r dev-requirements.txt
# - name: Remove Chardet & Charset-Normalizer
# run: |
# pip uninstall -y chardet
# pip uninstall -y charset-normalizer
# - name: Install the package
# run: |
# python -m build
# pip install ./dist/*.whl
# - name: Clone the complete dataset
# run: |
# git clone https://github.com/Ousret/char-dataset.git
# - name: Start the Flask server
# run: |
# python ./bin/serve.py &
# - name: Integration Tests with Requests
# run: |
# python ./bin/integration.py
chardet_bc:
name: ⏪ Chardet Backward-Compatibility Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Set up Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install -U pip setuptools
python -m pip install -r dev-requirements.txt
python -m pip uninstall -y charset-normalizer
- name: Install the package
run: |
python -m build
python -m pip install ./dist/*.whl
- name: Clone the complete dataset
run: |
git clone https://github.com/Ousret/char-dataset.git
- name: BC Coverage
run: |
python ./bin/bc.py --coverage 80
mypyc_test:
name: ⚡ MypyC Tests
needs:
- tests
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
os: [ ubuntu-latest, macos-latest, windows-latest ]
include:
- python-version: "3.7"
os: ubuntu-latest
- python-version: "3.7"
os: macos-13
- python-version: "3.7"
os: windows-latest
env:
PYTHONIOENCODING: utf8 # only needed for Windows (console IO output encoding)
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Install dependencies
run: |
python -m pip install -U pip setuptools
python -m pip install -r dev-requirements.txt
python -m pip uninstall -y charset-normalizer
- name: Install the package
env:
CHARSET_NORMALIZER_USE_MYPYC: '1'
run: |
python -m pip install .
- name: Clone the complete dataset
run: |
git clone https://github.com/Ousret/char-dataset.git
- name: Coverage WITH preemptive
run: |
python ./bin/coverage.py --coverage 97 --with-preemptive
- name: Performance (Normal)
run: |
python ./bin/performance.py
performance:
name: ⚡ Performance Test (no MypyC)
runs-on: ubuntu-latest
needs:
- mypyc_test
- chardet_bc
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Set up Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install -U pip setuptools
python -m pip install -r dev-requirements.txt
python -m pip uninstall -y charset-normalizer
- name: Install the package
run: |
python -m build
python -m pip install ./dist/*.whl
- name: Clone the complete dataset
run: |
git clone https://github.com/Ousret/char-dataset.git
- name: Performance (Normal)
run: |
python ./bin/performance.py
- name: Performance (Medium)
run: |
python ./bin/performance.py --size-increase 2