diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 63ef139def..91951fd6d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ on: env: NODE_VERSION: "18" # needs to be also updated in .nvmrc - PYTHON_VERSION: "3.9" + PYTHON_VERSION: "3.11" MARIADB_VERSION: "10.4.10" COVERALLS_VERSION: "3.3.1" # check if Coverage needs to be also updated in requirements-ci.txt TYPESENSE_VERSION: "27.0" # needs to be also updated in scripts/define_variable.sh @@ -24,7 +24,7 @@ jobs: # Lint all source files by executing pre-commit hooks. lint: name: Lint - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 # do not execute scheduled jobs on forks: if: ${{ github.event_name != 'schedule' || github.repository_owner == 'zestedesavoir' }} @@ -44,7 +44,7 @@ jobs: # Build the documentation and upload it as an artifact. build-doc: name: Build Sphinx documentation - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 # do not execute scheduled jobs on forks: if: ${{ github.event_name != 'schedule' || github.repository_owner == 'zestedesavoir' }} @@ -87,7 +87,7 @@ jobs: # Build the website front-end and upload built assets as an artifact. build-front: name: Lint and build front-end - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 # do not execute scheduled jobs on forks: if: ${{ github.event_name != 'schedule' || github.repository_owner == 'zestedesavoir' }} @@ -137,7 +137,7 @@ jobs: test: name: Install and test zds-site needs: build-front - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 strategy: matrix: @@ -182,6 +182,11 @@ jobs: name: assets path: dist + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v5 + with: + python-version: "${{ env.PYTHON_VERSION }}" + - name: Upgrade pip run: | pip install --upgrade pip @@ -206,11 +211,6 @@ jobs: restore-keys: | ${{ runner.os }}-node- - - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v5 - with: - python-version: "${{ env.PYTHON_VERSION }}" - - name: Set up NodeJS ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: @@ -246,7 +246,7 @@ jobs: coverage: name: Push coverage to Coveralls needs: test - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Set up Python ${{ env.PYTHON_VERSION }} @@ -266,7 +266,7 @@ jobs: push_doc: name: Push documentation to GitHub Pages needs: ["build-doc", "test"] - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 if: "github.ref == 'refs/heads/dev'" environment: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 383967d4ca..1e2bad94a8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,16 +1,16 @@ repos: - repo: https://github.com/asottile/pyupgrade - rev: v3.15.1 + rev: v3.17.0 hooks: - id: pyupgrade args: [--py39-plus] - repo: https://github.com/psf/black-pre-commit-mirror - rev: 24.2.0 # needs to be also updated in requirements-dev.txt + rev: 24.8.0 # needs to be also updated in requirements-dev.txt hooks: - id: black language_version: python3 - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: trailing-whitespace exclude_types: ["svg"] diff --git a/Makefile b/Makefile index 59fc204670..4e95f718fb 100644 --- a/Makefile +++ b/Makefile @@ -102,7 +102,7 @@ zmd-stop: ## Stop the zmarkdown server ## ~ Search Engine run-search-engine: ## Run the search server - ./.local/typesense/typesense-server --data-dir=.local/typesense/typesense-data --api-key=xyz || echo 'No Typesense installed (you can add it locally with `./scripts/install_zds.sh +typesense-local`)' + @./.local/typesense/typesense-server --data-dir=.local/typesense/typesense-data --api-key=xyz || echo 'No Typesense installed (you can add it locally with `./scripts/install_zds.sh +typesense-local`)' index-all: ## Index the whole database in the search engine python manage.py search_engine_manager index_all diff --git a/assets/images/brands/gandi.svg b/assets/images/brands/gandi.svg new file mode 100644 index 0000000000..668ebe8dbf --- /dev/null +++ b/assets/images/brands/gandi.svg @@ -0,0 +1,5 @@ + + + + diff --git a/doc/source/install/install-macos.rst b/doc/source/install/install-macos.rst index 93c762727d..4035367baa 100644 --- a/doc/source/install/install-macos.rst +++ b/doc/source/install/install-macos.rst @@ -37,7 +37,7 @@ Pré-requis Ces instructions expliquent comment installer XCode, Homebrew, Python, pip, et les utilitaires GNU, sur macOS. Si vous avez déjà : - - une installation fonctionnelle de Homebrew et de Python 3.7+ ; + - une installation fonctionnelle de Homebrew et de Python 3.8+ ; - configuré votre terminal pour utiliser les utilitaires GNU à la place de ceux de BSD (avec `linuxify `_, par exemple) ; diff --git a/pyproject.toml b/pyproject.toml index f9b6c6c860..ba1242091e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.black] line-length = 120 -target-version = ["py37", "py38", "py39", "py310"] +target-version = ["py38", "py39", "py310", "py311", "py312"] extend-exclude = """ ^/doc """ diff --git a/requirements-dev.txt b/requirements-dev.txt index 7f8bc21fd4..41a1bb673d 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,12 +1,12 @@ -r requirements.txt -black==24.2.0 # needs to be also updated in .pre-commit-config.yaml +black==24.8.0 # needs to be also updated in .pre-commit-config.yaml colorlog==6.8.2 -django-debug-toolbar==4.3.0 +django-debug-toolbar==4.4.6 django-extensions==3.2.3 -Faker==24.1.0 -pre-commit==3.6.2 -PyYAML==6.0.1 -selenium==4.18.1 +Faker==30.0.0 +pre-commit==3.8.0 +PyYAML==6.0.2 +selenium==4.25.0 Sphinx==7.2.6 sphinx-rtd-theme==2.0.0 diff --git a/requirements-prod.txt b/requirements-prod.txt index bc41ba250a..67249c8626 100644 --- a/requirements-prod.txt +++ b/requirements-prod.txt @@ -1,6 +1,6 @@ -r requirements.txt -gunicorn==21.2.0 +gunicorn==23.0.0 mysqlclient==2.2.4 -sentry-sdk==2.9.0 -ujson==5.9.0 +sentry-sdk==2.14.0 +ujson==5.10.0 diff --git a/requirements.txt b/requirements.txt index 12e87843ca..0bd0e6e7e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,30 +1,30 @@ # Implicit dependencies (optional dependencies of dependencies) crispy-forms-bootstrap2==2024.1 -social-auth-app-django==5.4.0 +social-auth-app-django==5.4.2 # Explicit dependencies (references in code) beautifulsoup4==4.12.3 -django-crispy-forms==2.1 -django-model-utils==4.4.0 +django-crispy-forms==2.3 +django-model-utils==5.0.0 django-recaptcha==4.0.0 -Django==4.2.11 -easy-thumbnails[svg]==2.8.5 -factory-boy==3.3.0 +Django==4.2.16 +easy-thumbnails[svg]==2.10.0 +factory-boy==3.3.1 geoip2==4.8.0 -GitPython==3.1.42 +GitPython==3.1.43 homoglyphs==2.0.4 -lxml==5.1.0 -Pillow==10.2.0 +lxml==5.3.0 +Pillow==10.4.0 pymemcache==4.0.0 -requests==2.31.0 -typesense==0.19.0 +requests==2.32.3 +typesense==0.21.0 ua-parser==0.18.0 # Api dependencies -django-cors-headers==4.3.1 -django-filter==24.1 +django-cors-headers==4.4.0 +django-filter==24.3 django-oauth-toolkit==2.3.0 -djangorestframework==3.14.0 +djangorestframework==3.15.2 drf-extensions==0.7.1 dry-rest-permissions==0.1.10 drf-yasg==1.21.7 diff --git a/templates/pages/technologies.html b/templates/pages/technologies.html index 2719aaea6d..46622ef0b3 100644 --- a/templates/pages/technologies.html +++ b/templates/pages/technologies.html @@ -61,6 +61,19 @@

{% trans "Droits" %}

sous licence CC BY. {% endblocktrans %}

+ +

{% trans "Hébergement" %}

+ +

+ Gandi.net
+ {% blocktrans %} + + Gandi soutient {{ site_name }} + + dans ses projets et ambitions en fournissant ses solutions d'hébergement généreusement et en + relayant certaines de nos actualités. Merci ! + {% endblocktrans %} +

{% endif %} diff --git a/zds/mp/api/tests.py b/zds/mp/api/tests.py index ad6503dcb5..25b065d0b3 100644 --- a/zds/mp/api/tests.py +++ b/zds/mp/api/tests.py @@ -210,7 +210,6 @@ def test_expand_list_of_private_topics_for_author(self): response = self.client.get(reverse("api:mp:list") + "?expand=author") self.assertEqual(response.status_code, status.HTTP_200_OK) author = response.data.get("results")[0].get("author") - self.assertIsInstance(author, OrderedDict) self.assertEqual(author.get("username"), self.profile.user.username) self.assertEqual(author.get("avatar_url"), self.profile.get_avatar_url())