Skip to content

Commit dafbb95

Browse files
authored
Release 3.4.4 (#658)
* ⬆️ upgrade dependencies (dev, ci) * 🔧 update cd.yml workflow (add riscv64, s390x and armv7l) and restore unique attestation "multiple.intoto.jsonl" * 📝 write changelog for 3.4.4 * ⬆️ upgrade dependencies (dev, ci) * 🔧 update cd.yml workflow (add riscv64, s390x and armv7l) and restore unique attestation "multiple.intoto.jsonl" * 📝 write changelog for 3.4.4 * ⬆️ raise mypy upper bound to 1.18.2
2 parents 1a4e710 + 1f18ffa commit dafbb95

File tree

6 files changed

+180
-88
lines changed

6 files changed

+180
-88
lines changed

.github/workflows/cd.yml

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,39 @@ jobs:
4747
needs: pre_flight_check
4848
strategy:
4949
matrix:
50-
os: [ ubuntu-latest, windows-latest, macos-14 ]
50+
os: [ubuntu-latest, windows-latest, macos-14, ubuntu-24.04-arm]
5151
qemu: [ '' ]
52+
musl: [ '' ]
5253
include:
5354
# Split ubuntu job for the sake of speed-up
5455
- os: ubuntu-latest
55-
qemu: aarch64
56+
qemu: ppc64le
57+
musl: ""
5658
- os: ubuntu-latest
5759
qemu: ppc64le
60+
musl: musllinux
61+
- os: ubuntu-latest
62+
qemu: riscv64
63+
musl: ""
64+
- os: ubuntu-latest
65+
qemu: riscv64
66+
musl: musllinux
5867
- os: ubuntu-latest
5968
qemu: s390x
69+
musl: ""
70+
- os: ubuntu-latest
71+
qemu: s390x
72+
musl: musllinux
73+
- os: ubuntu-latest
74+
qemu: armv7l
75+
musl: ""
76+
- os: ubuntu-latest
77+
qemu: armv7l
78+
musl: musllinux
79+
- os: ubuntu-latest
80+
musl: musllinux
81+
- os: ubuntu-24.04-arm
82+
musl: musllinux
6083
steps:
6184
- name: Checkout
6285
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
@@ -86,13 +109,48 @@ jobs:
86109
CIBW_ENVIRONMENT: CHARSET_NORMALIZER_USE_MYPYC='1'
87110
CIBW_TEST_REQUIRES: pytest
88111
CIBW_TEST_COMMAND: pytest -c {package} {package}/tests
89-
CIBW_SKIP: "cp31?t-*"
112+
CIBW_SKIP: "cp31?t-* ${{ matrix.musl == 'musllinux' && '*manylinux*' || '*musllinux*' }}"
90113
- name: Upload artifacts
91114
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
92115
with:
93116
name: dist-${{ matrix.os }}-${{ matrix.qemu }}
94117
path: ./wheelhouse/*.whl
95118

119+
checksum:
120+
name: Compute hashes
121+
runs-on: ubuntu-latest
122+
needs:
123+
- build-wheels
124+
- universal-wheel
125+
outputs:
126+
hashes: ${{ steps.compute.outputs.hashes }}
127+
steps:
128+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
129+
- name: Download distributions
130+
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
131+
with:
132+
name: dist
133+
path: dist
134+
- name: Collected dists
135+
run: |
136+
tree dist
137+
- name: Generate hashes
138+
id: compute # needs.checksum.outputs.hashes
139+
working-directory: ./dist
140+
run: echo "hashes=$(sha256sum * | base64 -w0)" >> $GITHUB_OUTPUT
141+
142+
provenance:
143+
needs: checksum
144+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@f7dd8c54c2067bafc12ca7a55595d5ee9b75204a
145+
permissions:
146+
actions: read
147+
id-token: write
148+
contents: write
149+
with:
150+
base64-subjects: ${{ needs.checksum.outputs.hashes }}
151+
upload-assets: true
152+
compile-generator: true
153+
96154
deploy:
97155
name: 🚀 Deploy to PyPi
98156
runs-on: ubuntu-latest
@@ -101,8 +159,7 @@ jobs:
101159
id-token: write
102160
contents: write
103161
needs:
104-
- build-wheels
105-
- universal-wheel
162+
- provenance
106163
environment:
107164
name: pypi
108165
url: https://pypi.org/project/charset-normalizer/

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ repos:
2323
# Run the formatter.
2424
- id: ruff-format
2525
- repo: https://github.com/pre-commit/mirrors-mypy
26-
rev: v1.17.1
26+
rev: v1.18.2
2727
hooks:
2828
- id: mypy
2929
args: [ --check-untyped-defs ]

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@
22
All notable changes to charset-normalizer will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
33
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
44

5-
## [3.4.4](https://github.com/Ousret/charset_normalizer/compare/3.4.2...master) (2025-09-??)
5+
## [3.4.4](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.4) (2025-10-13)
66

77
### Changed
88
- Bound `setuptools` to a specific constraint `setuptools>=68,<=81`.
9+
- Raised upper bound of mypyc for the optional pre-built extension to v1.18.2
910

1011
### Removed
1112
- `setuptools-scm` as a build dependency.
1213

1314
### Misc
1415
- Enforced hashes in `dev-requirements.txt` and created `ci-requirements.txt` for security purposes.
16+
- Additional pre-built wheels for riscv64, s390x, and armv7l architectures.
17+
- Restore ` multiple.intoto.jsonl` in GitHub releases in addition to individual attestation file per wheel.
1518

1619
## [3.4.3](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.3) (2025-08-09)
1720

_mypyc_hook/backend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from setuptools import build_meta as _orig # type: ignore[import-untyped]
77

88
USE_MYPYC = os.getenv("CHARSET_NORMALIZER_USE_MYPYC", "0") == "1"
9-
MYPYC_SPEC = "mypy>=1.4.1,<=1.17.1"
9+
MYPYC_SPEC = "mypy>=1.4.1,<=1.18.2"
1010

1111
# Expose all the PEP 517 hooks from setuptools
1212
get_requires_for_build_sdist = _orig.get_requires_for_build_sdist

ci-requirements.txt

Lines changed: 66 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@ argcomplete==3.6.2 ; python_full_version >= '3.8' \
88
--hash=sha256:65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591 \
99
--hash=sha256:d0519b1bc867f5f4f4713c41ad0aba73a4a5f007449716b16f385f2166dc6adf
1010
# via nox
11-
attrs==25.3.0 ; python_full_version >= '3.8' \
11+
attrs==25.3.0 ; python_full_version == '3.8.*' \
1212
--hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \
1313
--hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b
1414
# via nox
15+
attrs==25.4.0 ; python_full_version >= '3.9' \
16+
--hash=sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11 \
17+
--hash=sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373
18+
# via nox
1519
build==1.1.1 ; python_full_version < '3.8' \
1620
--hash=sha256:8ed0851ee76e6e38adce47e4bee3b51c771d86c64cf578d0c2245567ee200e73 \
1721
--hash=sha256:8eea65bb45b1aac2e734ba2cc8dad3a6d97d97901a395bd0ed3e7b46953d2a31
@@ -275,10 +279,14 @@ filelock==3.16.1 ; python_full_version == '3.8.*' \
275279
--hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \
276280
--hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435
277281
# via virtualenv
278-
filelock==3.19.1 ; python_full_version >= '3.9' \
282+
filelock==3.19.1 ; python_full_version == '3.9.*' \
279283
--hash=sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58 \
280284
--hash=sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d
281285
# via virtualenv
286+
filelock==3.20.0 ; python_full_version >= '3.10' \
287+
--hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
288+
--hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
289+
# via virtualenv
282290
importlib-metadata==6.7.0 ; python_full_version < '3.8' \
283291
--hash=sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4 \
284292
--hash=sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5
@@ -334,9 +342,13 @@ platformdirs==4.3.6 ; python_full_version == '3.8.*' \
334342
--hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \
335343
--hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb
336344
# via virtualenv
337-
platformdirs==4.3.8 ; python_full_version >= '3.9' \
338-
--hash=sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc \
339-
--hash=sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4
345+
platformdirs==4.4.0 ; python_full_version == '3.9.*' \
346+
--hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \
347+
--hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf
348+
# via virtualenv
349+
platformdirs==4.5.0 ; python_full_version >= '3.10' \
350+
--hash=sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312 \
351+
--hash=sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3
340352
# via virtualenv
341353
pluggy==1.2.0 ; python_full_version < '3.8' \
342354
--hash=sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849 \
@@ -374,39 +386,49 @@ tomli==2.0.1 ; python_full_version < '3.8' \
374386
# build
375387
# nox
376388
# pytest
377-
tomli==2.2.1 ; python_full_version >= '3.8' and python_full_version < '3.11' \
378-
--hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \
379-
--hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \
380-
--hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \
381-
--hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \
382-
--hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \
383-
--hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \
384-
--hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \
385-
--hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \
386-
--hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \
387-
--hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \
388-
--hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \
389-
--hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \
390-
--hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \
391-
--hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \
392-
--hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \
393-
--hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \
394-
--hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \
395-
--hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \
396-
--hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \
397-
--hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \
398-
--hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \
399-
--hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \
400-
--hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \
401-
--hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \
402-
--hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \
403-
--hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \
404-
--hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \
405-
--hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \
406-
--hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \
407-
--hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \
408-
--hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \
409-
--hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7
389+
tomli==2.3.0 ; python_full_version >= '3.8' and python_full_version < '3.11' \
390+
--hash=sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456 \
391+
--hash=sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845 \
392+
--hash=sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999 \
393+
--hash=sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0 \
394+
--hash=sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878 \
395+
--hash=sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf \
396+
--hash=sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3 \
397+
--hash=sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be \
398+
--hash=sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52 \
399+
--hash=sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b \
400+
--hash=sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67 \
401+
--hash=sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549 \
402+
--hash=sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba \
403+
--hash=sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22 \
404+
--hash=sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c \
405+
--hash=sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f \
406+
--hash=sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6 \
407+
--hash=sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba \
408+
--hash=sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45 \
409+
--hash=sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f \
410+
--hash=sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77 \
411+
--hash=sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606 \
412+
--hash=sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441 \
413+
--hash=sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0 \
414+
--hash=sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f \
415+
--hash=sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530 \
416+
--hash=sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05 \
417+
--hash=sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8 \
418+
--hash=sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005 \
419+
--hash=sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879 \
420+
--hash=sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae \
421+
--hash=sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc \
422+
--hash=sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b \
423+
--hash=sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b \
424+
--hash=sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e \
425+
--hash=sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf \
426+
--hash=sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac \
427+
--hash=sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8 \
428+
--hash=sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b \
429+
--hash=sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf \
430+
--hash=sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463 \
431+
--hash=sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876
410432
# via
411433
# build
412434
# dependency-groups
@@ -426,19 +448,19 @@ typing-extensions==4.13.2 ; python_full_version == '3.8.*' \
426448
# via
427449
# exceptiongroup
428450
# virtualenv
429-
typing-extensions==4.14.1 ; python_full_version >= '3.9' and python_full_version < '3.11' \
430-
--hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \
431-
--hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76
451+
typing-extensions==4.15.0 ; python_full_version >= '3.9' and python_full_version < '3.11' \
452+
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
453+
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
432454
# via
433455
# exceptiongroup
434456
# virtualenv
435457
virtualenv==20.26.6 ; python_full_version < '3.8' \
436458
--hash=sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48 \
437459
--hash=sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2
438460
# via nox
439-
virtualenv==20.34.0 ; python_full_version >= '3.8' \
440-
--hash=sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026 \
441-
--hash=sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a
461+
virtualenv==20.35.3 ; python_full_version >= '3.8' \
462+
--hash=sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44 \
463+
--hash=sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a
442464
# via nox
443465
zipp==3.15.0 ; python_full_version < '3.8' \
444466
--hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \

0 commit comments

Comments
 (0)