# Release cycle We'll discuss here how releases are made and what is the current choice of software that is included in the distribution. ## Schedule The release of Model W happens quarterly: - **1st Monday of January** (January 6, 2025) - **1st Monday of April** (April 7, 2025) - **1st Monday of July** (July 7, 2025) - **1st Monday of October** (October 6, 2025) The cycle for each release will be like this: - **Development** (4 weeks) — In this phase the new release will be developed. Ideal versions of each software will be decided and all Model W packages and documentation will be updated and tested to reach this target. - **Pilot** (4 weeks) — A pilot project will be selected to test the upcoming release - **Roll-out** (3 months) — All projects must migrate to the new Model W release - **Support** (3 months) — After 3 month, when a new version comes out, the three previous versions stays supported for 3 more months to give time to projects to make their roll-out. At any given point in time, there will be 4 releases supported. The latest release and the three previous ones. ## This repo This repo contains the documentation. The `develop` branch matches the development cycle of the release. Each release will then receive a PEP-440 version number in the format `.` which will be tagged. LTS releases might receive their own branch. ## Versions The latest release is `2025.07`. The versions detailed below are the one for this release. ### Model W packages All Model W packages follow the same release logic. For example, the January 2023 release will be versioned `2023.01`. The version number is used in all the packages, and they all are guaranteed to work together. Which means that in order to switch from one version of Model W to another, you mainly need to change the version number of those packages in your requirements. Then you'll run into updating issues and so forth. ### Python Versions are decided by checking at the time of entering development phase which are the highest mutually compatible versions of Django, Numpy, SciPy, Pandas and Python. ```{note} We don't use Numpy and friends so much but since they are often picky about the Python version it has been decided to include them. ``` - [Python](https://endoflife.date/python) — Version `~3.13` - Web Stuff - [Django](https://www.djangoproject.com/download/) — Version `~5.2` - [Django REST Framework](https://www.django-rest-framework.org/community/release-notes/) — Version `~3.16` - [Procrastinate](https://github.com/procrastinate-org/procrastinate) — Version `~3.2` - [Wagtail](https://docs.wagtail.io/en/stable/releases/index.html) — Version `~7.0` - [Channels](https://channels.readthedocs.io/en/stable/releases/index.html) — Version `~4.2` - [Django Postgres Extra](https://django-postgres-extra.readthedocs.io/en/latest/major_releases.html) — Version `~2.0` - [Wailer](https://github.com/WithAgency/Wailer/tags) — Version `~1.0` - Annoying compiled stuff - [Numpy](https://numpy.org/news/) — Version `~2.3` - [Pandas](https://pandas.pydata.org/docs/whatsnew/index.html) — Version `~2.3` ### JavaScript - [Node](https://nodejs.org/en/about/releases/) — Version `^22` - [Svelte](https://www.npmjs.com/package/svelte) — Version `~5.33` - [SvelteKit](https://www.npmjs.com/package/@sveltejs/kit) — Version `~2.20` ### Databases - [PostgreSQL](https://www.postgresql.org/support/versioning/) — Version `^15` - [Redis](https://redis.io/topics/release-notes) — Version `^7` ## Adopting a new release Switching to a new version of Model W is simple: - Update the first line of the `Dockerfile` under both `api` and `front` - Update the `modelw-preset-*` packages inside `api/pyproject.toml` and inside `front/package.json` - Don't forget to run `poetry update` as well as `npm install` - Test the project locally - `git push` - Test the deployment