Skip to content

Releases: opengisch/QFieldCloud

v25.30

15 Jan 11:20

Choose a tag to compare

This version adds 2 new environment variables :

  • STORAGES_PROJECT_DEFAULT_ATTACHMENTS_STORAGE: declares the storage key to which the attachments of new projects will be stored on.
  • STORAGE_PROJECT_DEFAULT_ATTACHMENTS_VERSIONED: if the attachments should be versioned, currently implemented only on WebDAV storages.

Important

File storage migration notes, dropping support of the legacy file storage soon.

In future versions of QFieldCloud, the "legacy" file storage support will be dropped. We recommend you to migrate your projects from a potential legacy storage to a new default storage.

🔗 See v25.1's Release Notes for default storage configuration.
🔗 See the migratefilestorage Django command tool, that can be used to migrate projects, e.g. :

  • Migrate a single project based on its id : docker compose exec app python manage.py migratefilestorage --project-id <PROJECT_UUID>
  • Migrate all the projects on the instance : docker compose exec app python manage.py migratefilestorage --all --no-filter

Note that avatar URL now is changed to use a public id, please consider updating any potential custom API implementation.

Warning

Note that shared_datasets projects now do not accept QGIS project files anymore.

What's Changed

  • feat: add a setting for attachment storage and if versioned by @gounux in #1435
  • refactor: remove margin-left from header logo in CSS by @Rakanhf in #1444
  • chore: bump various dependencies by @gounux in #1441
  • feat: disable .qgs for shared_datasets Project by @Rakanhf in #1433
  • feat: do not repeat the same log twice for libqfieldsync by @suricactus in #1439
  • fix: ensure there is some kind of extent when generating a thumbnail by @suricactus in #1440
  • Use rustfs instead of minio for local development by @suricactus in #1450
  • Revert "Merge pull request #1450 from opengisch/QF-7374-rustfs" by @suricactus in #1452
  • Revert "chore: bump boto3 related dependencies from 1.35.X to 1.42.3" by @gounux in #1457
  • Introduce flake8-if-expr to forbid inline ifs by @suricactus in #1455
  • feat: add ModelAdminSearchParserMixin to enhance code quality by @Rakanhf in #1456
  • feat: add user inactivity threshold and welcome back message on login by @Rakanhf in #1442
  • feat: add public ID for user avatars by @Rakanhf in #1443
  • feat: add not-yet-packaged CLI filter in file storage migration script by @gounux in #1446
  • test: add test for setting session role through QFC_PG_EFFECTIVE_USER Secret by @gounux in #1458
  • feat: expand Person quick link navigation by @Rakanhf in #1459
  • Expose the file_storage_bytes attribute in the /api/v1/projects serializer by @nirvn in #1460
  • feat: update org memberships when owner changes by @gounux in #1462
  • translations: update LANGUAGES in settings by @gounux in #1463

Full Changelog: v25.29...v25.30

v25.29

03 Dec 15:04

Choose a tag to compare

What's Changed

  • Add SSO branding for login with Microsoft Entra ID. by @lukasgraf in #1431
  • Temporarily bump django-auditlog to version from git that contains SSO fix by @lukasgraf in #1432
  • feat: add session_role to a postgis layer if configured, during deltas apply by @gounux in #1430
  • feat: make attachments of a project optionally versionable by @gounux in #1427
  • feat: override Django admin logout view to redirect to Allauth's logout by @Rakanhf in #1436
  • feat: add whitelabelling by @Rakanhf in #1428

Full Changelog: v25.28...v25.29

v25.28

20 Nov 15:47

Choose a tag to compare

Release notes

Django Admin login now goes through django-allauth's templates.

Recommended version for running QFieldCloud's database is now PostgreSQL 17 / PostGIS 3.5.

From this version on, nginx can be configured with the following additional environment variables :

  • NGINX_CLIENT_MAX_BODY_SIZE
  • NGINX_PROXY_CONNECT_TIMEOUT
  • NGINX_PROXY_READ_TIMEOUT
  • NGINX_PROXY_SEND_TIMEOUT

What's Changed

  • fix: wrongly hardcoded Content-Type header in non-nginx responses by @suricactus in #1406
  • fix: follow-up on wrongly hardcoded Content-Type header in non-nginx responses by @Rakanhf in #1408
  • Use only one login page from allauth by @Rakanhf in #1387
  • fix: do not check missing Sha256sum key when checking if file exists on legacy S3 during fs migration by @gounux in #1414
  • feat(drf): ensure the login on drf browseable API page is also using allauth by @suricactus in #1294
  • feat(admin): add custom admin site that reuses the allauth login by @suricactus in #1293
  • tests: Make volume name for test DB respect COMPOSE_PROJECT_NAME by @lukasgraf in #1416
  • Fix typos in README.md. by @felixxm in #1418
  • chore: update .gitignore to include .env.test and .venv by @Rakanhf in #1422
  • Various fixes and improvements in the jobs framework by @suricactus in #1409
  • Drop field is_metered from Plan model by @lukasgraf in #1421
  • fix: flaky file size calculations by @Rakanhf in #1417
  • Bump postgis image version to 17 in .env.example by @lukasgraf in #1413
  • chore: bump various dependencies by @gounux in #1424
  • Qf-6822 add restricted files update timestamp by @Rakanhf in #1411
  • feat: add qfieldcloud version to admin panel by @Rakanhf in #1425
  • follow up fix on Project data_last_updated_at on file delete by @Rakanhf in #1426
  • feat(nginx): Add env vars for Nginx max body size and proxy timeouts by @toebivankenoebi in #1429

New Contributors

Full Changelog: v25.27...v25.28

v25.27

24 Oct 14:42

Choose a tag to compare

Release notes

This version is mostly bugfixes and stability improvements. Check the detailed changedlog below for more info.

Caution

If you somehow depended on the long deprecated GeoDB module, this version of QFieldCloud finally removes the support for GeoDB. Before you proceed make sure you moved all your data outside your GeoDBs. The model and the data will be permanently deleted.

Because the GeoDB is no longer present as a service in the docker compose file, you need to docker compose up --remove-orphans.

Caution

If you have stored Secrets in the database and running on older version of QFieldCloud (<= v25.24), you should upgrade to v25.26 and run the migrations before upgrading to this version. Reason behind this is that the django_cryptography lib dependency which was used to store Secrets in older versions is removed in the requirements of this version, now using django-fernet-encrypted-fields to store encrypted values.

Also this version does a great restructuring of the envvars by adding a documentation to each and every of them. We recommend to reorder your .env file similar to .env.example so you can track changes by simply diff-ing between the two files.

What's Changed

  • Fix unnecessary creation of storage_package as PackageType by @Rakanhf in #1377
  • refactor: fix typing for parsing the Range header and serving the files by @suricactus in #1380
  • fix: use the_qgis_file_name in calcprojectstorage command by @gounux in #1383
  • refactor: no need for the WEB_HTTP(S)_PORT in the app container by @suricactus in #1381
  • chore: drop django_cryptography dependency by @gounux in #1384
  • bug: fix the mismatch between requirements.in and requirements.txt and bump a few more dependencies by @suricactus in #1382
  • feat(worker): make qgis jobs defined in a single file by @suricactus in #1367
  • feat: kill the geodb once and forever by @suricactus in #1379
  • Remove hardcoding of the third-party auth related headers by @gounux in #1385
  • Ensure legacy thumbnail file exists on S3 before migrating it by @gounux in #1386
  • test: add coverage reporting by @suricactus in #1390
  • fix: when the project where we try to upload a file to does not exist return a JSON formatted 404 by @suricactus in #1389
  • Fix flaky files API tests by @lukasgraf in #1393
  • fix: kill geodb envvars that are no longer needed by @suricactus in #1394
  • feat(worker): bump SDK to support streamable uploads by @suricactus in #1404
  • Limit time it takes to render a project thumbnail by @nirvn in #1402
  • Change nginx resolver to docker internal DNS for storage-download redirects by @gounux in #1399
  • feat: add support for virtual layers without embedded layers by @suricactus in #1396
  • fix: consider org member when getting who triggered latest_package_jobs by @gounux in #1391
  • Update README.md with contributing guidelines by @suricactus in #1403
  • feat: make the worker_wrapper logger level to debug if DEBUG==True by @suricactus in #1405
  • feat: add docs to each and every envvar with links to docs, group them logically by @suricactus in #1395
  • chore: change the default ENVIRONMENT from test to development by @suricactus in #1398
  • feat: remove GET param to display third-party auth providers on login page by @gounux in #1397
  • Bump sentry to v2 by @Rakanhf in #1388

New Contributors

Full Changelog: v25.26...v25.27

v25.26

02 Oct 12:06

Choose a tag to compare

What's Changed

Full Changelog: v25.25...v25.26

v25.25

17 Sep 08:19

Choose a tag to compare

What's Changed

  • Bump various deps in QFieldCloud by @suricactus in #1313
  • Bump various test dependencies by @suricactus in #1315
  • chore(deps): Bump all indirect dependencies to their latest version by @suricactus in #1318
  • Bump django-allauth from 65.4.1to 65.11.0 by @suricactus in #1314
  • Bump and pin deps in the qgis worker container by @suricactus in #1319
  • chore(deps): bump urllib3 from 2.2.2 to 2.5.0 in /docker-qgis in the pip group across 1 directory by @dependabot[bot] in #1321
  • typing: do not assign None if the variable is not None-able by @suricactus in #1306
  • fix(admin): searching for secrets admin throws error 500 by @suricactus in #1309
  • refactor: rewrite the way how secrets are filtered in latest_package_job_for_user by @suricactus in #1325
  • feat(filestorage): disable the minimum bytes length in the HTTP Range header by @suricactus in #1324
  • feat: do not report TooManyLoginAttemptsError to Sentry by @suricactus in #1312
  • test(delta): multiple deltas with same PK value in different layers are applied correctly by @suricactus in #1327
  • feat: kill manage.py status command as very venerable and unused in practice by @suricactus in #1326
  • feat: added configuration to set incident info and status page url by @suricactus in #1322
  • feat(secrets): use django-fernet-encrypted-fields for encrypted values by @gounux in #1286
  • fix(storage): if the project is using non-legacy storage, get it's size directly from the database by @suricactus in #1323
  • feat(admin): add custom admin site that can be extended in the future by @suricactus in #1310
  • feat(filestorage): Support If-(None-)Match and If-(Un)Modified-Since headers in file download endpoints by @suricactus in #1328
  • feat(storage): add file storage migration command arguments by @gounux in #1333
  • Update wget command to include chmod correctly by @urlacher23 in #1338
  • edit(fs migration): update command error handling by @gounux in #1336
  • fix: add the last remaining untraslated field names in admin by @suricactus in #1339
  • feat: added django-stubs and drf-stubs by @suricactus in #1342
  • docs: add docs about dump restore, improve the instance launch, add info how to access the database by @suricactus in #1340
  • Bump various deps and fix warnings when installing deps by @suricactus in #1341
  • edit(migration): remove prompt if accept argument is set by @gounux in #1343
  • Add dedicated model to store faulty deltafiles by @lukasgraf in #1334
  • feat(filestorage): always enable the versioning on QFieldCloud development stack by @suricactus in #1346
  • fix(nginx): CSRF check failure when debug mode is enabled by @suricactus in #1347
  • fix: revive Constance admin which disappeared with custom sites by @suricactus in #1348
  • chore: add debugger config for vscode and update README.md by @suricactus in #1350
  • Bump django-stubs from 5.2.2 to 5.2.5 by @suricactus in #1352
  • chore: pre-commit autoupgrade by @suricactus in #1353
  • chore: bump qgis from 3.44.1 to 3.44.2 by @suricactus in #1354
  • fix(admin): add unregistered admins by @gounux in #1355
  • fix(admin): revive the django axes admin by @suricactus in #1358
  • fix(admin): use QFieldCloudModelAdmin to improve admin page loading speed by @suricactus in #1359
  • storage: make project's file_storage configurable in admin when there is no file by @gounux in #1360
  • edit(fs migration): use harmonised logger during fs migration by @gounux in #1345

New Contributors

Full Changelog: v25.24...v25.25

v25.24

11 Sep 14:12

Choose a tag to compare

What's Changed

  • edit(delta): fix delta applied by several jobs when users pushing around the same time by @gounux in #1337
  • edit(packaging): avoid "empty project package" by @gounux in #1335

Full Changelog: v25.23...v25.24

v25.23

02 Sep 13:21

Choose a tag to compare

What's Changed

  • fix(deltas): fix AssertionError when Exception on Delta POST by @gounux in #1330

Full Changelog: v25.22...v25.23

v25.22

20 Aug 10:33

Choose a tag to compare

Notes

This release contains two critical fixes regarding applying changes from different layers during one fieldwork session, as well as fixing a potential security exploit related to secrets usage in Jobs.

We recommend everyone using QFieldCloud 25.13 or newer to upgrade immediately.

What's Changed

  • Fix last modified PK value match when modifying multiple offlined layers across multiple pushes by @nirvn in #1307
  • fix: secrets filtering for projects owned by non-organizations by @suricactus in #1308

Full Changelog: v25.21...v25.22

v25.21

15 Aug 14:08

Choose a tag to compare

What's Changed

  • fix: be explicit that the given assert is disabled on prod environment by @suricactus in #1305

Full Changelog: v25.20...v25.21