Compare commits

127 Commits

Author SHA1 Message Date
e073e33a7b Merge pull request 'chore(deps): update dependency mypy to v1.20.1' (#72) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 50s
Python Linters / mypy (push) Successful in 49s
Python Linters / pylint (push) Successful in 55s
REUSE Compliance / reuse (push) Successful in 7s
Selftests / test-sync (push) Successful in 48s
Selftests / test-build-install (push) Successful in 56s
2026-04-18 06:16:18 +02:00
62e3d88ba4 chore(deps): update dependency mypy to v1.20.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 51s
Python Linters / mypy (pull_request) Successful in 50s
Python Linters / pylint (pull_request) Successful in 57s
REUSE Compliance / reuse (pull_request) Successful in 13s
Selftests / test-sync (pull_request) Successful in 50s
Selftests / test-build-install (pull_request) Successful in 56s
2026-04-18 03:17:09 +00:00
b27213425a Merge pull request 'chore(deps): update dependency mypy to v1.20.0' (#71) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 29s
Python Linters / pylint (push) Successful in 31s
Python Linters / mypy (push) Successful in 29s
REUSE Compliance / reuse (push) Successful in 6s
Selftests / test-build-install (push) Successful in 29s
Selftests / test-sync (push) Successful in 48s
2026-04-06 04:16:53 +02:00
9b4ab9d25b chore(deps): update dependency mypy to v1.20.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 31s
Python Linters / formatting (pull_request) Successful in 28s
REUSE Compliance / reuse (pull_request) Successful in 11s
Python Linters / mypy (pull_request) Successful in 29s
Selftests / test-build-install (pull_request) Successful in 59s
Selftests / test-sync (pull_request) Successful in 49s
2026-04-06 01:21:21 +00:00
4e393ed5aa Merge pull request 'chore(deps): update dependency bump-my-version to v1.3.0' (#70) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 28s
Python Linters / pylint (push) Successful in 31s
Python Linters / mypy (push) Successful in 28s
REUSE Compliance / reuse (push) Successful in 6s
Selftests / test-build-install (push) Successful in 29s
Selftests / test-sync (push) Successful in 51s
2026-03-28 03:16:46 +01:00
afe96292ae chore(deps): update dependency bump-my-version to v1.3.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 31s
Python Linters / formatting (pull_request) Successful in 28s
REUSE Compliance / reuse (pull_request) Successful in 11s
Python Linters / mypy (pull_request) Successful in 30s
Selftests / test-sync (pull_request) Successful in 53s
Selftests / test-build-install (pull_request) Successful in 1m2s
2026-03-28 01:20:41 +00:00
85ec1eb377 Merge pull request 'chore(deps): update dependency black to v26.3.1' (#69) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / pylint (push) Successful in 32s
Python Linters / formatting (push) Successful in 28s
REUSE Compliance / reuse (push) Successful in 7s
Python Linters / mypy (push) Successful in 32s
Selftests / test-sync (push) Successful in 53s
Selftests / test-build-install (push) Successful in 1m0s
2026-03-17 06:16:53 +01:00
6df40f94ef chore(deps): update dependency black to v26.3.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 31s
Python Linters / formatting (pull_request) Successful in 27s
REUSE Compliance / reuse (pull_request) Successful in 12s
Python Linters / mypy (pull_request) Successful in 29s
Selftests / test-sync (pull_request) Successful in 49s
Selftests / test-build-install (pull_request) Successful in 58s
2026-03-17 04:17:48 +00:00
2c8f9d9d6e Merge pull request 'chore(deps): update dependency black to v26.3.0' (#68) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 26s
Python Linters / pylint (push) Successful in 29s
Python Linters / mypy (push) Successful in 28s
REUSE Compliance / reuse (push) Successful in 7s
Selftests / test-build-install (push) Successful in 29s
Selftests / test-sync (push) Successful in 47s
2026-03-12 03:17:10 +01:00
cca1be3a2d chore(deps): update dependency black to v26.3.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 27s
Python Linters / pylint (pull_request) Successful in 30s
REUSE Compliance / reuse (pull_request) Successful in 11s
Python Linters / mypy (pull_request) Successful in 30s
Selftests / test-build-install (pull_request) Successful in 1m2s
Selftests / test-sync (pull_request) Successful in 50s
2026-03-12 01:21:13 +00:00
8dbc538152 Merge pull request 'chore(deps): update dependency isort to v8.0.1' (#67) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 27s
Python Linters / pylint (push) Successful in 30s
Python Linters / mypy (push) Successful in 29s
REUSE Compliance / reuse (push) Successful in 7s
Selftests / test-build-install (push) Successful in 30s
Selftests / test-sync (push) Successful in 48s
2026-03-06 03:17:09 +01:00
9ce9f04e93 chore(deps): update dependency isort to v8.0.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 33s
Python Linters / formatting (pull_request) Successful in 28s
REUSE Compliance / reuse (pull_request) Successful in 10s
Python Linters / mypy (pull_request) Successful in 29s
Selftests / test-build-install (pull_request) Successful in 1m0s
Selftests / test-sync (pull_request) Successful in 51s
2026-03-06 01:21:11 +00:00
c63986d44f Merge pull request 'chore(deps): update dependency isort to v8' (#66) from renovate/major-all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 25s
Python Linters / pylint (push) Successful in 28s
Python Linters / mypy (push) Successful in 26s
REUSE Compliance / reuse (push) Successful in 5s
Selftests / test-build-install (push) Successful in 27s
Selftests / test-sync (push) Successful in 48s
2026-02-25 03:17:02 +01:00
5e5f3704a3 chore(deps): update dependency isort to v8
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 54s
Python Linters / pylint (pull_request) Successful in 1m0s
Python Linters / mypy (pull_request) Successful in 30s
REUSE Compliance / reuse (pull_request) Successful in 13s
Selftests / test-build-install (pull_request) Successful in 57s
Selftests / test-sync (pull_request) Successful in 49s
2026-02-25 01:20:35 +00:00
fcd07bb9cd Merge pull request 'chore(deps): update dependency bump-my-version to v1.2.7' (#65) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 27s
Python Linters / pylint (push) Successful in 31s
REUSE Compliance / reuse (push) Successful in 6s
Python Linters / mypy (push) Successful in 27s
Selftests / test-build-install (push) Successful in 30s
Selftests / test-sync (push) Successful in 46s
2026-02-20 04:19:42 +01:00
05f81ef9ce chore(deps): update dependency bump-my-version to v1.2.7
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 25s
Python Linters / pylint (pull_request) Successful in 30s
REUSE Compliance / reuse (pull_request) Successful in 11s
Python Linters / mypy (pull_request) Successful in 28s
Selftests / test-build-install (pull_request) Successful in 58s
Selftests / test-sync (pull_request) Successful in 49s
2026-02-20 01:20:51 +00:00
77ceed1c5e Merge pull request 'chore(deps): update dependency black to v26' (#64) from renovate/major-all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 34s
Python Linters / pylint (push) Successful in 37s
Python Linters / mypy (push) Successful in 36s
REUSE Compliance / reuse (push) Successful in 8s
Selftests / test-build-install (push) Successful in 37s
Selftests / test-sync (push) Successful in 55s
Reviewed-on: #64
2026-01-23 11:45:06 +01:00
74dc7d7d85 chore(deps): update dependency black to v26
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 37s
Python Linters / formatting (pull_request) Successful in 33s
REUSE Compliance / reuse (pull_request) Successful in 16s
Python Linters / mypy (pull_request) Successful in 35s
Selftests / test-sync (pull_request) Successful in 57s
Selftests / test-build-install (pull_request) Successful in 1m11s
2026-01-23 05:17:39 +00:00
102dab5677 Merge pull request 'chore(deps): update https://github.com/fsfe/reuse-action action to v6' (#53) from renovate/https-github.com-fsfe-reuse-action-6.x into main
All checks were successful
Python Linters / mypy (push) Successful in 1m39s
Python Linters / formatting (push) Successful in 1m42s
Python Linters / pylint (push) Successful in 1m46s
REUSE Compliance / reuse (push) Successful in 46s
Selftests / test-sync (push) Successful in 1m38s
Selftests / test-build-install (push) Successful in 1m43s
Reviewed-on: #53
2026-01-07 13:58:53 +01:00
cda756682c Merge pull request 'chore(deps): update dependency bump-my-version to v1.2.6' (#63) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 17s
Python Linters / pylint (push) Successful in 46s
Python Linters / formatting (push) Successful in 50s
Python Linters / mypy (push) Successful in 48s
Selftests / test-sync (push) Successful in 55s
Selftests / test-build-install (push) Successful in 1m48s
2026-01-02 03:18:54 +01:00
f1d82598c3 chore(deps): update dependency bump-my-version to v1.2.6
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 17s
Python Linters / formatting (pull_request) Successful in 1m11s
Python Linters / mypy (pull_request) Successful in 1m9s
Python Linters / pylint (pull_request) Successful in 2m0s
Selftests / test-build-install (pull_request) Successful in 1m45s
Selftests / test-sync (pull_request) Successful in 1m14s
2026-01-02 01:20:42 +00:00
dcc3c632da Merge pull request 'chore(deps): update dependency mypy to v1.19.1' (#62) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 15s
Python Linters / pylint (push) Successful in 46s
Python Linters / formatting (push) Successful in 49s
Python Linters / mypy (push) Successful in 1m15s
Selftests / test-build-install (push) Successful in 1m52s
Selftests / test-sync (push) Successful in 1m53s
2025-12-19 02:19:45 +01:00
ce8514ab6e chore(deps): update dependency mypy to v1.19.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 18s
Python Linters / mypy (pull_request) Successful in 1m5s
Python Linters / formatting (pull_request) Successful in 1m7s
Python Linters / pylint (pull_request) Successful in 1m48s
Selftests / test-build-install (pull_request) Successful in 1m36s
Selftests / test-sync (pull_request) Successful in 1m10s
2025-12-18 05:19:24 +00:00
c7e310e117 Merge pull request 'chore(deps): update dependency bump-my-version to v1.2.5' (#61) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 18s
Python Linters / pylint (push) Successful in 44s
Python Linters / formatting (push) Successful in 42s
Python Linters / mypy (push) Successful in 54s
Selftests / test-sync (push) Successful in 55s
Selftests / test-build-install (push) Successful in 1m42s
2025-12-17 03:19:34 +01:00
d2822442bd chore(deps): update dependency bump-my-version to v1.2.5
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 40s
Python Linters / formatting (pull_request) Successful in 38s
Python Linters / mypy (pull_request) Successful in 57s
REUSE Compliance / reuse (pull_request) Successful in 1m1s
Selftests / test-build-install (pull_request) Successful in 1m36s
Selftests / test-sync (pull_request) Successful in 1m25s
2025-12-17 01:19:28 +00:00
a8ba0b68f7 Merge pull request 'chore(deps): update dependency black to v25.12.0' (#60) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 16s
Python Linters / pylint (push) Successful in 44s
Python Linters / formatting (push) Successful in 42s
Python Linters / mypy (push) Successful in 48s
Selftests / test-build-install (push) Successful in 54s
Selftests / test-sync (push) Successful in 58s
2025-12-11 04:19:47 +01:00
2fe38f1b09 chore(deps): update dependency black to v25.12.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 17s
Python Linters / pylint (pull_request) Successful in 54s
Python Linters / formatting (pull_request) Successful in 40s
Python Linters / mypy (pull_request) Successful in 49s
Selftests / test-sync (pull_request) Successful in 54s
Selftests / test-build-install (pull_request) Successful in 1m45s
2025-12-11 02:18:33 +00:00
7ff6b06f7a Merge pull request 'chore(deps): update dependency pylint to v4.0.4' (#59) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 21s
Python Linters / pylint (push) Successful in 55s
Python Linters / mypy (push) Successful in 1m7s
Python Linters / formatting (push) Successful in 1m9s
Selftests / test-build-install (push) Successful in 1m36s
Selftests / test-sync (push) Successful in 1m16s
2025-12-04 03:17:51 +01:00
476ff5d8c7 chore(deps): update dependency pylint to v4.0.4
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 1m14s
Python Linters / formatting (pull_request) Successful in 1m36s
Python Linters / mypy (pull_request) Successful in 1m33s
Python Linters / pylint (pull_request) Successful in 1m39s
Selftests / test-sync (pull_request) Successful in 49s
Selftests / test-build-install (pull_request) Successful in 1m49s
2025-12-04 01:19:59 +00:00
6c1fb7e2ad Merge pull request 'chore(deps): update dependency mypy to v1.19.0' (#58) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 9s
Python Linters / formatting (push) Successful in 38s
Python Linters / pylint (push) Successful in 44s
Python Linters / mypy (push) Successful in 51s
Selftests / test-build-install (push) Successful in 43s
Selftests / test-sync (push) Successful in 52s
2025-12-02 03:19:08 +01:00
7b19cdbebd chore(deps): update dependency mypy to v1.19.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 18s
Python Linters / pylint (pull_request) Successful in 1m6s
Python Linters / formatting (pull_request) Successful in 1m2s
Selftests / test-build-install (pull_request) Successful in 1m33s
Python Linters / mypy (pull_request) Successful in 1m57s
Selftests / test-sync (pull_request) Successful in 1m10s
2025-12-02 01:20:48 +00:00
6b62eac9f2 Merge pull request 'chore(deps): update actions/checkout action to v6' (#57) from renovate/actions-checkout-6.x into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 1m1s
Python Linters / pylint (push) Successful in 1m23s
Python Linters / formatting (push) Successful in 2m9s
Python Linters / mypy (push) Successful in 2m13s
Selftests / test-sync (push) Successful in 1m1s
Selftests / test-build-install (push) Successful in 1m46s
Reviewed-on: #57
2025-11-24 23:26:55 +01:00
ebc0219c5c chore(deps): update actions/checkout action to v6
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 35s
Python Linters / formatting (pull_request) Successful in 34s
Python Linters / mypy (pull_request) Successful in 37s
REUSE Compliance / reuse (pull_request) Successful in 49s
Selftests / test-sync (pull_request) Successful in 1m0s
Selftests / test-build-install (pull_request) Successful in 1m26s
2025-11-24 01:21:46 +00:00
e362e35740 Merge pull request 'chore(deps): update dependency pylint to v4.0.3' (#56) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 15s
Python Linters / pylint (push) Successful in 43s
Python Linters / formatting (push) Successful in 42s
Python Linters / mypy (push) Successful in 44s
Selftests / test-sync (push) Successful in 52s
Selftests / test-build-install (push) Successful in 1m20s
2025-11-17 03:18:07 +01:00
4778985683 chore(deps): update dependency pylint to v4.0.3
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 45s
Python Linters / mypy (pull_request) Successful in 1m9s
Python Linters / pylint (pull_request) Successful in 1m12s
Python Linters / formatting (pull_request) Successful in 1m18s
Selftests / test-build-install (pull_request) Successful in 1m11s
Selftests / test-sync (pull_request) Successful in 50s
2025-11-17 01:18:14 +00:00
19cc36f305 Merge pull request 'chore(deps): update all-dev-dependencies' (#55) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 15s
Python Linters / formatting (push) Successful in 42s
Python Linters / pylint (push) Successful in 44s
Python Linters / mypy (push) Successful in 41s
Selftests / test-build-install (push) Successful in 40s
Selftests / test-sync (push) Successful in 48s
2025-11-13 04:17:54 +01:00
78a852d8c2 chore(deps): update all-dev-dependencies
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 15s
Python Linters / formatting (pull_request) Successful in 31s
Python Linters / pylint (pull_request) Successful in 34s
Python Linters / mypy (pull_request) Successful in 31s
Selftests / test-sync (pull_request) Successful in 46s
Selftests / test-build-install (pull_request) Successful in 1m23s
2025-11-13 02:18:15 +00:00
4ede6878ca Merge pull request 'chore(deps): update all-dev-dependencies (major)' (#54) from renovate/major-all-dev-dependencies into main
All checks were successful
Python Linters / pylint (push) Successful in 33s
Python Linters / mypy (push) Successful in 31s
Python Linters / formatting (push) Successful in 31s
REUSE Compliance / reuse (push) Successful in 6s
Selftests / test-build-install (push) Successful in 29s
Selftests / test-sync (push) Successful in 48s
2025-10-16 04:19:26 +02:00
3063b019ef chore(deps): update all-dev-dependencies
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 8s
Python Linters / pylint (pull_request) Successful in 35s
Python Linters / mypy (pull_request) Successful in 34s
Python Linters / formatting (pull_request) Successful in 41s
Selftests / test-build-install (pull_request) Successful in 1m7s
Selftests / test-sync (pull_request) Successful in 47s
2025-10-16 01:20:43 +00:00
3c6176c17c chore(deps): update https://github.com/fsfe/reuse-action action to v6
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 1m4s
Python Linters / mypy (pull_request) Successful in 1m2s
Python Linters / pylint (pull_request) Successful in 1m7s
REUSE Compliance / reuse (pull_request) Successful in 17s
Selftests / test-sync (pull_request) Successful in 54s
Selftests / test-build-install (pull_request) Successful in 1m4s
2025-10-10 01:19:56 +00:00
c14dcb08b8 Merge pull request 'chore(deps): update dependency pylint to v3.3.9' (#52) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 7s
Python Linters / formatting (push) Successful in 38s
Python Linters / mypy (push) Successful in 40s
Python Linters / pylint (push) Successful in 44s
Selftests / test-build-install (push) Successful in 40s
Selftests / test-sync (push) Successful in 49s
2025-10-09 04:16:33 +02:00
ed9b62af58 chore(deps): update dependency pylint to v3.3.9
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 31s
Python Linters / pylint (pull_request) Successful in 34s
Python Linters / mypy (pull_request) Successful in 32s
REUSE Compliance / reuse (pull_request) Successful in 8s
Selftests / test-sync (pull_request) Successful in 56s
Selftests / test-build-install (pull_request) Successful in 1m6s
2025-10-09 01:21:22 +00:00
300352e1cf Merge pull request 'chore(deps): update dependency bump-my-version to v1.2.4' (#51) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 15s
Python Linters / formatting (push) Successful in 31s
Python Linters / pylint (push) Successful in 34s
Python Linters / mypy (push) Successful in 33s
Selftests / test-sync (push) Successful in 46s
Selftests / test-build-install (push) Successful in 1m19s
2025-10-08 04:17:29 +02:00
a10474f1d2 chore(deps): update dependency bump-my-version to v1.2.4
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 27s
Python Linters / pylint (pull_request) Successful in 31s
REUSE Compliance / reuse (pull_request) Successful in 16s
Python Linters / mypy (pull_request) Successful in 1m22s
Selftests / test-sync (pull_request) Successful in 56s
Selftests / test-build-install (pull_request) Successful in 1m16s
2025-10-08 01:22:16 +00:00
8c38978b28 Merge pull request 'chore(deps): update dependency isort to v6.1.0' (#50) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 14s
Python Linters / formatting (push) Successful in 30s
Python Linters / pylint (push) Successful in 32s
Python Linters / mypy (push) Successful in 30s
Selftests / test-sync (push) Successful in 45s
Selftests / test-build-install (push) Successful in 1m21s
2025-10-05 04:17:29 +02:00
4e01d7d10c chore(deps): update dependency isort to v6.1.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / mypy (pull_request) Successful in 1m3s
REUSE Compliance / reuse (pull_request) Successful in 13s
Python Linters / pylint (pull_request) Successful in 1m11s
Python Linters / formatting (pull_request) Successful in 1m19s
Selftests / test-sync (pull_request) Successful in 50s
Selftests / test-build-install (pull_request) Successful in 1m2s
2025-10-05 01:20:21 +00:00
d7c35c572d Merge pull request 'chore(deps): update dependency pyyaml to v6.0.3' (#49) from renovate/pyyaml-6.x-lockfile into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 7s
Python Linters / pylint (push) Successful in 31s
Python Linters / mypy (push) Successful in 30s
Python Linters / formatting (push) Successful in 38s
Selftests / test-build-install (push) Successful in 30s
Selftests / test-sync (push) Successful in 44s
2025-09-29 04:16:41 +02:00
8f3df25251 chore(deps): update dependency pyyaml to v6.0.3
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 34s
Python Linters / formatting (pull_request) Successful in 29s
Python Linters / mypy (pull_request) Successful in 29s
REUSE Compliance / reuse (pull_request) Successful in 16s
Selftests / test-sync (pull_request) Successful in 55s
Selftests / test-build-install (pull_request) Successful in 1m14s
2025-09-29 01:20:52 +00:00
5d8b63e883 Merge pull request 'chore(deps): update all-dev-dependencies' (#47) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 7s
Python Linters / pylint (push) Successful in 37s
Python Linters / formatting (push) Successful in 34s
Python Linters / mypy (push) Successful in 39s
Selftests / test-build-install (push) Successful in 33s
Selftests / test-sync (push) Successful in 56s
2025-09-24 14:47:56 +02:00
399ed7fd48 chore(deps): update all-dev-dependencies
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 36s
Python Linters / pylint (pull_request) Successful in 40s
Python Linters / mypy (pull_request) Successful in 37s
REUSE Compliance / reuse (pull_request) Successful in 15s
Selftests / test-build-install (pull_request) Successful in 38s
Selftests / test-sync (pull_request) Successful in 57s
2025-09-24 12:45:12 +00:00
6f1e92cc50 Merge pull request 'chore(deps): update dependency pylint to v3.3.8' (#45) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / mypy (push) Successful in 40s
REUSE Compliance / reuse (push) Successful in 14s
Python Linters / formatting (push) Successful in 1m11s
Python Linters / pylint (push) Successful in 1m16s
Selftests / test-sync (push) Successful in 51s
Selftests / test-build-install (push) Successful in 1m23s
2025-08-14 02:05:18 +02:00
6d44b44394 chore(deps): update dependency pylint to v3.3.8
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 32s
Python Linters / pylint (pull_request) Successful in 35s
Python Linters / mypy (pull_request) Successful in 33s
REUSE Compliance / reuse (pull_request) Successful in 17s
Selftests / test-sync (pull_request) Successful in 1m1s
Selftests / test-build-install (pull_request) Successful in 1m20s
2025-08-13 00:06:20 +00:00
ebd6804ff2 Merge pull request 'chore(deps): update dependency mypy to v1.17.1' (#44) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 1m8s
Python Linters / mypy (push) Successful in 1m1s
Python Linters / pylint (push) Successful in 1m13s
REUSE Compliance / reuse (push) Successful in 11s
Selftests / test-sync (push) Successful in 1m0s
Selftests / test-build-install (push) Successful in 1m8s
2025-08-05 02:05:08 +02:00
b3c47783ad chore(deps): update dependency mypy to v1.17.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 36s
Python Linters / mypy (pull_request) Successful in 36s
Python Linters / pylint (pull_request) Successful in 46s
REUSE Compliance / reuse (pull_request) Successful in 18s
Selftests / test-sync (pull_request) Successful in 1m9s
Selftests / test-build-install (pull_request) Successful in 1m23s
2025-08-04 00:06:28 +00:00
b2f6d31d62 Merge pull request 'chore(deps): update dependency bump-my-version to v1.2.1' (#43) from renovate/all-dev-dependencies into main
All checks were successful
REUSE Compliance / reuse (push) Successful in 17s
Python Linters / mypy (push) Successful in 1m10s
Python Linters / pylint (push) Successful in 1m22s
Python Linters / formatting (push) Successful in 1m32s
Selftests / test-sync (push) Successful in 1m0s
Selftests / test-build-install (push) Successful in 1m13s
2025-07-24 02:04:39 +02:00
182c2d0c6a chore(deps): update dependency bump-my-version to v1.2.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 47s
Python Linters / formatting (pull_request) Successful in 41s
Python Linters / mypy (pull_request) Successful in 43s
REUSE Compliance / reuse (pull_request) Successful in 17s
Selftests / test-build-install (pull_request) Successful in 1m35s
Selftests / test-sync (pull_request) Successful in 1m11s
2025-07-23 00:05:45 +00:00
2e7ceb2858 Merge pull request 'chore(deps): update dependency mypy to v1.17.0' (#42) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 37s
Python Linters / pylint (push) Successful in 41s
Python Linters / mypy (push) Successful in 38s
REUSE Compliance / reuse (push) Successful in 11s
Selftests / test-sync (push) Successful in 1m0s
Selftests / test-build-install (push) Successful in 1m7s
2025-07-19 02:06:02 +02:00
a99c00138a chore(deps): update dependency mypy to v1.17.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
REUSE Compliance / reuse (pull_request) Successful in 17s
Python Linters / formatting (pull_request) Successful in 43s
Python Linters / mypy (pull_request) Successful in 45s
Python Linters / pylint (pull_request) Successful in 47s
Selftests / test-build-install (pull_request) Successful in 1m15s
Selftests / test-sync (pull_request) Successful in 1m10s
2025-07-18 00:05:22 +00:00
0dd7c01666 chore(deps): update dependency mypy to v1.16.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 32s
Python Linters / pylint (pull_request) Successful in 35s
Python Linters / mypy (pull_request) Successful in 34s
REUSE Compliance / reuse (pull_request) Successful in 17s
Selftests / test-sync (pull_request) Successful in 57s
Selftests / test-build-install (pull_request) Successful in 1m6s
REUSE Compliance / reuse (push) Successful in 8s
Python Linters / formatting (push) Successful in 34s
Python Linters / pylint (push) Successful in 37s
Python Linters / mypy (push) Successful in 45s
Selftests / test-build-install (push) Successful in 33s
Selftests / test-sync (push) Successful in 49s
2025-06-20 00:05:51 +00:00
f9a0217df5 chore(deps): update dependency bump-my-version to v1.2.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 34s
Python Linters / pylint (pull_request) Successful in 36s
Python Linters / mypy (pull_request) Successful in 34s
REUSE Compliance / reuse (pull_request) Successful in 26s
Selftests / test-sync (pull_request) Successful in 1m12s
Selftests / test-build-install (pull_request) Successful in 1m20s
Python Linters / formatting (push) Successful in 1m4s
Python Linters / mypy (push) Successful in 1m2s
Python Linters / pylint (push) Successful in 1m9s
REUSE Compliance / reuse (push) Successful in 10s
Selftests / test-sync (push) Successful in 56s
Selftests / test-build-install (push) Successful in 1m2s
2025-06-11 00:06:02 +00:00
0b441a1acc Merge pull request 'chore(deps): update dependency mypy to v1.16.0' (#39) from renovate/all-dev-dependencies into main
All checks were successful
Python Linters / formatting (push) Successful in 1m3s
Python Linters / mypy (push) Successful in 1m2s
Python Linters / pylint (push) Successful in 1m8s
REUSE Compliance / reuse (push) Successful in 18s
Selftests / test-sync (push) Successful in 1m1s
Selftests / test-build-install (push) Successful in 1m9s
Reviewed-on: #39
2025-06-02 21:40:21 +02:00
874e41a093 chore(deps): update dependency mypy to v1.16.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 38s
Python Linters / pylint (pull_request) Successful in 39s
Python Linters / mypy (pull_request) Successful in 37s
REUSE Compliance / reuse (pull_request) Successful in 19s
Selftests / test-sync (pull_request) Successful in 1m5s
Selftests / test-build-install (pull_request) Successful in 1m16s
2025-06-02 00:05:37 +00:00
5aab0cf71c chore(deps): update dependency bump-my-version to v1.1.4
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 37s
Python Linters / mypy (pull_request) Successful in 35s
Python Linters / formatting (pull_request) Successful in 39s
REUSE Compliance / reuse (pull_request) Successful in 13s
Selftests / test-sync (pull_request) Successful in 58s
Selftests / test-build-install (pull_request) Successful in 1m26s
Python Linters / mypy (push) Successful in 1m2s
Python Linters / pylint (push) Successful in 1m14s
REUSE Compliance / reuse (push) Successful in 10s
Python Linters / formatting (push) Successful in 1m29s
Selftests / test-sync (push) Successful in 56s
Selftests / test-build-install (push) Successful in 1m7s
2025-05-25 00:05:49 +00:00
6b78b28526 chore(deps): update dependency bump-my-version to v1.1.3
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 39s
Python Linters / formatting (pull_request) Successful in 38s
Python Linters / mypy (pull_request) Successful in 36s
REUSE Compliance / reuse (pull_request) Successful in 14s
Selftests / test-sync (pull_request) Successful in 1m0s
Selftests / test-build-install (pull_request) Successful in 1m31s
Python Linters / formatting (push) Successful in 1m10s
Python Linters / pylint (push) Successful in 1m16s
REUSE Compliance / reuse (push) Successful in 8s
Python Linters / mypy (push) Successful in 1m28s
Selftests / test-sync (push) Successful in 59s
Selftests / test-build-install (push) Successful in 1m7s
2025-05-21 00:05:50 +00:00
7437d7c2e5 chore(deps): update dependency pylint to v3.3.7
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 32s
Python Linters / pylint (pull_request) Successful in 35s
Python Linters / mypy (pull_request) Successful in 34s
REUSE Compliance / reuse (pull_request) Successful in 16s
Selftests / test-sync (pull_request) Successful in 57s
Selftests / test-build-install (pull_request) Successful in 1m7s
Python Linters / pylint (push) Successful in 38s
Python Linters / formatting (push) Successful in 40s
REUSE Compliance / reuse (push) Successful in 8s
Python Linters / mypy (push) Successful in 33s
Selftests / test-build-install (push) Successful in 31s
Selftests / test-sync (push) Successful in 1m4s
2025-05-08 00:05:32 +00:00
43dd03df3a chore(deps): update dependency bump-my-version to v1.1.2
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 33s
Python Linters / pylint (pull_request) Successful in 36s
REUSE Compliance / reuse (pull_request) Successful in 17s
Python Linters / mypy (pull_request) Successful in 1m22s
Selftests / test-sync (pull_request) Successful in 1m0s
Selftests / test-build-install (pull_request) Successful in 1m17s
Python Linters / formatting (push) Successful in 1m1s
Python Linters / pylint (push) Successful in 1m7s
REUSE Compliance / reuse (push) Successful in 16s
Python Linters / mypy (push) Successful in 1m31s
Selftests / test-sync (push) Successful in 55s
Selftests / test-build-install (push) Successful in 1m2s
2025-04-16 00:06:38 +00:00
99edf04456 chore(deps): update all-dev-dependencies
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 36s
Python Linters / formatting (pull_request) Successful in 36s
REUSE Compliance / reuse (pull_request) Successful in 6s
Python Linters / mypy (pull_request) Successful in 32s
Selftests / test-build-install (pull_request) Successful in 37s
Selftests / test-sync (pull_request) Successful in 50s
REUSE Compliance / reuse (push) Successful in 11s
Python Linters / mypy (push) Successful in 1m2s
Python Linters / pylint (push) Successful in 1m11s
Python Linters / formatting (push) Successful in 1m14s
Selftests / test-sync (push) Successful in 52s
Selftests / test-build-install (push) Successful in 1m6s
2025-03-24 21:57:11 +00:00
ad310c1627 chore(deps): update https://github.com/jrubics/poetry-publish action to v2.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 37s
REUSE Compliance / reuse (pull_request) Successful in 8s
Python Linters / formatting (pull_request) Successful in 34s
Python Linters / mypy (pull_request) Successful in 33s
Selftests / test-build-install (pull_request) Successful in 36s
Selftests / test-sync (pull_request) Successful in 57s
Python Linters / formatting (push) Successful in 35s
Python Linters / pylint (push) Successful in 38s
Python Linters / mypy (push) Successful in 37s
REUSE Compliance / reuse (push) Successful in 8s
Selftests / test-build-install (push) Successful in 34s
Selftests / test-sync (push) Successful in 56s
2025-03-24 21:51:54 +00:00
a1523ad9fc chore(deps): update all-dev-dependencies
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 34s
Python Linters / pylint (pull_request) Successful in 36s
REUSE Compliance / reuse (pull_request) Successful in 9s
Python Linters / mypy (pull_request) Successful in 35s
Selftests / test-build-install (pull_request) Successful in 37s
Selftests / test-sync (pull_request) Successful in 56s
Python Linters / formatting (push) Successful in 34s
Python Linters / mypy (push) Successful in 37s
Python Linters / pylint (push) Successful in 39s
REUSE Compliance / reuse (push) Successful in 8s
Selftests / test-build-install (push) Successful in 37s
Selftests / test-sync (push) Successful in 59s
2025-03-24 21:46:02 +00:00
b95e3172f4 renovate: group dev dependencies
All checks were successful
Python Linters / formatting (push) Successful in 35s
Python Linters / pylint (push) Successful in 37s
Python Linters / mypy (push) Successful in 35s
REUSE Compliance / reuse (push) Successful in 7s
Selftests / test-build-install (push) Successful in 31s
Selftests / test-sync (push) Successful in 50s
2025-03-24 22:42:32 +01:00
cab888fae4 fix(deps): update dependency pyyaml to v6.0.2
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / formatting (pull_request) Successful in 35s
Python Linters / pylint (pull_request) Successful in 38s
Python Linters / mypy (pull_request) Successful in 36s
REUSE Compliance / reuse (pull_request) Successful in 8s
Selftests / test-build-install (pull_request) Successful in 35s
Selftests / test-sync (pull_request) Successful in 57s
Python Linters / formatting (push) Successful in 35s
Python Linters / pylint (push) Successful in 38s
Python Linters / mypy (push) Successful in 36s
REUSE Compliance / reuse (push) Successful in 8s
Selftests / test-build-install (push) Successful in 36s
Selftests / test-sync (push) Successful in 58s
2025-03-24 21:16:13 +00:00
80eb37d8ed renovate: add automerge
All checks were successful
REUSE Compliance / reuse (push) Successful in 15s
Python Linters / formatting (push) Successful in 36s
Python Linters / pylint (push) Successful in 38s
Python Linters / mypy (push) Successful in 38s
Selftests / test-build-install (push) Successful in 1m8s
Selftests / test-sync (push) Successful in 53s
2025-03-24 22:10:53 +01:00
bea16d9b67 Bump version: 0.2.1 → 0.2.2
All checks were successful
Python package / build (push) Successful in 1m14s
Python Linters / pylint (push) Successful in 43s
Python Linters / formatting (push) Successful in 37s
Python Linters / mypy (push) Successful in 41s
Selftests / test-build-install (push) Successful in 40s
Selftests / test-sync (push) Successful in 1m2s
REUSE Compliance / reuse (push) Successful in 19s
2025-01-12 21:25:37 +01:00
f9e46060cf Revert "update release workflow to be based on releases"
Some checks failed
Python Linters / formatting (push) Waiting to run
Python Linters / mypy (push) Waiting to run
REUSE Compliance / reuse (push) Waiting to run
Selftests / test-build-install (push) Waiting to run
Selftests / test-sync (push) Waiting to run
Python Linters / pylint (push) Has been cancelled
This reverts commit be86ebad40.

This isn't possible with act
2025-01-12 21:24:57 +01:00
b250c89d38 Bump version: 0.2.0 → 0.2.1
All checks were successful
Python Linters / pylint (push) Successful in 40s
Python Linters / formatting (push) Successful in 36s
Python Linters / mypy (push) Successful in 38s
REUSE Compliance / reuse (push) Successful in 8s
Selftests / test-build-install (push) Successful in 42s
Selftests / test-sync (push) Successful in 1m3s
2025-01-12 21:17:45 +01:00
9a598a799d Merge pull request 'Update release workflow' (#26) from release-workflow into main
Some checks are pending
Python Linters / pylint (push) Waiting to run
Python Linters / formatting (push) Waiting to run
Python Linters / mypy (push) Waiting to run
REUSE Compliance / reuse (push) Waiting to run
Selftests / test-build-install (push) Waiting to run
Selftests / test-sync (push) Waiting to run
Reviewed-on: #26
2025-01-12 21:17:35 +01:00
be86ebad40 update release workflow to be based on releases
All checks were successful
Python Linters / pylint (pull_request) Successful in 45s
Python Linters / formatting (pull_request) Successful in 37s
Python Linters / mypy (pull_request) Successful in 38s
REUSE Compliance / reuse (pull_request) Successful in 9s
Selftests / test-build-install (pull_request) Successful in 40s
Selftests / test-sync (pull_request) Successful in 1m2s
2025-01-12 21:15:46 +01:00
a61f197da9 add bump-my-version 2025-01-12 21:15:25 +01:00
6ed3e30f56 fix poetry install in ubuntu 24.04
All checks were successful
Python Linters / pylint (push) Successful in 40s
Python Linters / formatting (push) Successful in 37s
Python Linters / mypy (push) Successful in 37s
REUSE Compliance / reuse (push) Successful in 9s
Selftests / test-build-install (push) Successful in 40s
Selftests / test-sync (push) Successful in 1m4s
2025-01-12 21:06:39 +01:00
a613879338 make log file destination configurable 2025-01-12 21:06:39 +01:00
78b9e3fd15 Merge pull request 'chore(deps): update fsfe/reuse-action action to v5' (#24) from renovate/fsfe-reuse-action-5.x into main
All checks were successful
Python Linters / pylint (push) Successful in 48s
Python Linters / formatting (push) Successful in 51s
Python Linters / mypy (push) Successful in 55s
REUSE Compliance / reuse (push) Successful in 16s
Selftests / test-build-install (push) Successful in 53s
Selftests / test-sync (push) Successful in 1m20s
Reviewed-on: #24
2024-12-16 11:09:46 +01:00
d47ea047b9 chore(deps): update fsfe/reuse-action action to v5
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 45s
Python Linters / formatting (pull_request) Successful in 53s
Python Linters / mypy (pull_request) Successful in 56s
REUSE Compliance / reuse (pull_request) Successful in 28s
Selftests / test-build-install (pull_request) Successful in 54s
Selftests / test-sync (pull_request) Successful in 1m29s
2024-12-16 10:03:00 +00:00
7f82643a25 Merge pull request 'chore(deps): update fsfe/reuse-action action to v4' (#22) from renovate/fsfe-reuse-action-4.x into main
All checks were successful
Python Linters / formatting (push) Successful in 1m17s
Python Linters / pylint (push) Successful in 1m26s
REUSE Compliance / reuse (push) Successful in 24s
Python Linters / mypy (push) Successful in 44s
Selftests / test-build-install (push) Successful in 45s
Selftests / test-sync (push) Successful in 1m5s
Reviewed-on: #22
2024-07-08 13:09:07 +02:00
f88df253e5 chore(deps): update fsfe/reuse-action action to v4
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
Python Linters / pylint (pull_request) Successful in 1m17s
Python Linters / formatting (pull_request) Successful in 26s
Python Linters / mypy (pull_request) Successful in 28s
REUSE Compliance / reuse (pull_request) Successful in 18s
Selftests / test-build-install (pull_request) Successful in 42s
Selftests / test-sync (pull_request) Successful in 1m25s
2024-07-06 22:03:59 +00:00
e68ef71536 Merge pull request 'chore(deps): update dependency pylint to v3.1.0' (#16) from renovate/pylint-3.x-lockfile into main
All checks were successful
Python Linters / formatting (push) Successful in 46s
Python Linters / pylint (push) Successful in 54s
REUSE Compliance / reuse (push) Successful in 11s
Python Linters / mypy (push) Successful in 47s
Selftests / test-build-install (push) Successful in 45s
Selftests / test-sync (push) Successful in 57s
Reviewed-on: #16
2024-03-01 13:42:41 +01:00
3c9130be14 Merge branch 'main' into renovate/pylint-3.x-lockfile
All checks were successful
Python Linters / formatting (pull_request) Successful in 54s
Python Linters / pylint (pull_request) Successful in 1m4s
REUSE Compliance / reuse (pull_request) Successful in 12s
Python Linters / mypy (pull_request) Successful in 52s
Selftests / test-build-install (pull_request) Successful in 50s
Selftests / test-sync (pull_request) Successful in 1m0s
2024-03-01 13:37:39 +01:00
90966e0c89 Merge pull request 'chore(deps): update fsfe/reuse-action action to v3' (#17) from renovate/fsfe-reuse-action-3.x into main
All checks were successful
Python Linters / formatting (push) Successful in 1m34s
Python Linters / pylint (push) Successful in 1m45s
REUSE Compliance / reuse (push) Successful in 25s
Python Linters / mypy (push) Successful in 46s
Selftests / test-build-install (push) Successful in 54s
Selftests / test-sync (push) Successful in 1m34s
Reviewed-on: #17
2024-03-01 13:27:48 +01:00
7002577290 chore(deps): update fsfe/reuse-action action to v3
All checks were successful
Python Linters / pylint (pull_request) Successful in 1m26s
Python Linters / formatting (pull_request) Successful in 38s
REUSE Compliance / reuse (pull_request) Successful in 26s
Python Linters / mypy (pull_request) Successful in 53s
Selftests / test-build-install (pull_request) Successful in 51s
Selftests / test-sync (pull_request) Successful in 1m35s
2024-02-27 23:02:11 +00:00
5d22f31c19 chore(deps): update dependency pylint to v3.1.0
Some checks failed
Python Linters / pylint (pull_request) Failing after 22s
Python Linters / formatting (pull_request) Failing after 33s
Python Linters / mypy (pull_request) Failing after 36s
REUSE Compliance / reuse (pull_request) Successful in 22s
Selftests / test-build-install (pull_request) Failing after 33s
Selftests / test-sync (pull_request) Failing after 36s
2024-02-25 23:03:15 +00:00
ffa853cb2a Merge pull request 'chore(deps): update dependency black to v24.2.0' (#15) from renovate/black-24.x-lockfile into main
All checks were successful
Python Linters / formatting (push) Successful in 1m30s
Python Linters / pylint (push) Successful in 1m41s
REUSE Compliance / reuse (push) Successful in 22s
Python Linters / mypy (push) Successful in 51s
Selftests / test-build-install (push) Successful in 47s
Selftests / test-sync (push) Successful in 1m6s
Reviewed-on: #15
2024-02-17 09:19:43 +01:00
c152bccd81 chore(deps): update dependency black to v24.2.0
All checks were successful
Python Linters / pylint (pull_request) Successful in 36s
Python Linters / formatting (pull_request) Successful in 45s
Python Linters / mypy (pull_request) Successful in 49s
REUSE Compliance / reuse (pull_request) Successful in 9s
Selftests / test-build-install (pull_request) Successful in 47s
Selftests / test-sync (pull_request) Successful in 1m29s
2024-02-12 23:02:34 +00:00
83a64a3c63 Merge pull request 'chore(deps): update jrubics/poetry-publish action to v2' (#14) from renovate/jrubics-poetry-publish-2.x into main
All checks were successful
Python Linters / pylint (push) Successful in 1m4s
Python Linters / formatting (push) Successful in 56s
Python Linters / mypy (push) Successful in 59s
REUSE Compliance / reuse (push) Successful in 10s
Selftests / test-build-install (push) Successful in 53s
Selftests / test-sync (push) Successful in 1m17s
Reviewed-on: #14
2024-02-09 09:46:14 +01:00
75fee2d622 chore(deps): update jrubics/poetry-publish action to v2
All checks were successful
Python Linters / pylint (pull_request) Successful in 1m0s
Python Linters / formatting (pull_request) Successful in 50s
Python Linters / mypy (pull_request) Successful in 50s
REUSE Compliance / reuse (pull_request) Successful in 20s
Selftests / test-build-install (pull_request) Successful in 53s
Selftests / test-sync (pull_request) Successful in 1m12s
2024-02-08 23:04:26 +00:00
8bcadaab3f Merge pull request 'chore(deps): update dependency black to v24.1.1' (#13) from renovate/black-24.x-lockfile into main
All checks were successful
Python Linters / pylint (push) Successful in 1m5s
Python Linters / formatting (push) Successful in 53s
Python Linters / mypy (push) Successful in 55s
REUSE Compliance / reuse (push) Successful in 11s
Selftests / test-build-install (push) Successful in 53s
Selftests / test-sync (push) Successful in 1m17s
Reviewed-on: #13
2024-01-29 16:32:12 +01:00
73ac8287dc chore(deps): update dependency black to v24.1.1
All checks were successful
Python Linters / pylint (pull_request) Successful in 39s
Python Linters / formatting (pull_request) Successful in 46s
REUSE Compliance / reuse (pull_request) Successful in 10s
Python Linters / mypy (pull_request) Successful in 50s
Selftests / test-build-install (pull_request) Successful in 46s
Selftests / test-sync (pull_request) Successful in 1m9s
2024-01-28 23:02:49 +00:00
d7b517dcfd Merge pull request 'chore(deps): update dependency black to v24' (#12) from renovate/black-24.x into main
All checks were successful
Python Linters / pylint (push) Successful in 1m0s
Python Linters / formatting (push) Successful in 50s
Python Linters / mypy (push) Successful in 52s
REUSE Compliance / reuse (push) Successful in 10s
Selftests / test-build-install (push) Successful in 49s
Selftests / test-sync (push) Successful in 1m19s
Reviewed-on: #12
2024-01-27 12:13:55 +01:00
408be1f7a5 chore(deps): update dependency black to v24
All checks were successful
Python Linters / pylint (pull_request) Successful in 39s
Python Linters / formatting (pull_request) Successful in 45s
Python Linters / mypy (pull_request) Successful in 48s
REUSE Compliance / reuse (pull_request) Successful in 9s
Selftests / test-build-install (pull_request) Successful in 43s
Selftests / test-sync (pull_request) Successful in 1m16s
2024-01-26 23:02:51 +00:00
9da3e2437a Merge pull request 'chore(deps): update actions/checkout action to v4' (#11) from renovate/actions-checkout-4.x into main
All checks were successful
Python Linters / formatting (push) Successful in 1m33s
Python Linters / pylint (push) Successful in 1m45s
REUSE Compliance / reuse (push) Successful in 22s
Python Linters / mypy (push) Successful in 53s
Selftests / test-build-install (push) Successful in 52s
Selftests / test-sync (push) Successful in 1m7s
Reviewed-on: #11
2024-01-17 19:49:50 +01:00
4c334858b2 chore(deps): update actions/checkout action to v4
All checks were successful
Python Linters / pylint (pull_request) Successful in 1m21s
Python Linters / formatting (pull_request) Successful in 26s
Python Linters / mypy (pull_request) Successful in 44s
REUSE Compliance / reuse (pull_request) Successful in 9s
Selftests / test-build-install (pull_request) Successful in 46s
Selftests / test-sync (pull_request) Successful in 1m19s
2024-01-16 23:00:41 +00:00
bca361ab95 release version 0.2.0
All checks were successful
Python Linters / formatting (push) Successful in 51s
Python Linters / pylint (push) Successful in 1m0s
REUSE Compliance / reuse (push) Successful in 10s
Python Linters / mypy (push) Successful in 54s
Selftests / test-build-install (push) Successful in 52s
Selftests / test-sync (push) Successful in 1m37s
Python package / build (push) Successful in 1m29s
2024-01-16 17:03:01 +01:00
400db96e3e Merge pull request 'CI tests and publishing' (#10) from ci-test into main
All checks were successful
Python Linters / formatting (push) Successful in 52s
Python Linters / pylint (push) Successful in 1m3s
REUSE Compliance / reuse (push) Successful in 10s
Python Linters / mypy (push) Successful in 57s
Selftests / test-build-install (push) Successful in 55s
Selftests / test-sync (push) Successful in 59s
Reviewed-on: #10
2024-01-16 16:54:02 +01:00
4250475933 add version command
All checks were successful
Python Linters / formatting (pull_request) Successful in 1m17s
Python Linters / mypy (pull_request) Successful in 1m24s
Python Linters / pylint (pull_request) Successful in 1m31s
REUSE Compliance / reuse (pull_request) Successful in 15s
Selftests / test-build-install (pull_request) Successful in 54s
Selftests / test-sync (pull_request) Successful in 1m16s
2024-01-16 16:47:19 +01:00
60455082c2 fix pylint by igoring some errors 2024-01-16 16:47:19 +01:00
86a64570c5 add CI tests and publishing workflows 2024-01-16 16:47:19 +01:00
6d62bcf3ab fix REUSE compliance 2024-01-15 17:22:26 +01:00
7783f88f0e Merge pull request 'chore(deps): update dependency pylint to v3' (#9) from renovate/pylint-3.x into main
Reviewed-on: #9
2024-01-15 17:08:27 +01:00
7ca9442dca chore(deps): update dependency pylint to v3 2024-01-15 16:06:14 +00:00
2c7fd637ff Merge pull request 'chore(deps): update dependency mypy to v1.8.0' (#8) from renovate/mypy-1.x-lockfile into main
Reviewed-on: #8
2024-01-15 17:04:34 +01:00
07550ed290 Merge pull request 'chore(deps): update dependency isort to v5.13.2' (#7) from renovate/isort-5.x-lockfile into main
Reviewed-on: #7
2024-01-15 17:04:28 +01:00
8d9ae25b26 Merge pull request 'chore(deps): update dependency black to v23.12.1' (#5) from renovate/black-23.x-lockfile into main
Reviewed-on: #5
2024-01-15 17:04:20 +01:00
9f4ff81133 Merge pull request 'chore(deps): update dependency pylint to v2.17.7' (#4) from renovate/pylint-2.x-lockfile into main
Reviewed-on: #4
2024-01-15 17:04:13 +01:00
c5e6238e77 chore(deps): update dependency mypy to v1.8.0 2024-01-15 16:02:59 +00:00
7644910bf1 chore(deps): update dependency isort to v5.13.2 2024-01-15 16:02:49 +00:00
a4c701df0d chore(deps): update dependency black to v23.12.1 2024-01-15 15:59:58 +00:00
539f961f4c chore(deps): update dependency pylint to v2.17.7 2024-01-15 15:59:48 +00:00
c1baccee23 enable renovate for repository 2024-01-15 16:57:37 +01:00
7806c859fc add pypi badges 2023-09-22 11:33:47 +02:00
523f23d301 update README 2023-09-22 11:30:16 +02:00
c730a98168 fix black 2023-09-22 09:54:32 +02:00
c3b1d69416 fix REUSE compliance 2023-09-22 09:52:21 +02:00
a87045e3c6 update documentation 2023-09-22 09:52:07 +02:00
e5b1022e0b ignore dist dir and configuration file 2023-09-22 09:47:30 +02:00
cfed5c4807 convert to poetry project, fix mypy issues 2023-09-21 17:23:14 +02:00
8c54fd318a make final log message contain total duration and size for whole run 2023-06-09 10:18:41 +02:00
22f5c05d92 fix formatting 2023-06-09 10:18:14 +02:00
721d96101f show size and duration after sync 2023-06-09 10:07:05 +02:00
e061c160fd add REUSE API badge 2023-06-09 09:14:42 +02:00
19 changed files with 1487 additions and 51 deletions

View File

@@ -0,0 +1,21 @@
# SPDX-FileCopyrightText: 2023 DB Systel GmbH
#
# SPDX-License-Identifier: Apache-2.0
name: "Reusable Poetry build workflow"
inputs:
poetry_install_args:
default: ""
description: "Value for additional poetry install arguments"
required: false
runs:
using: "composite"
steps:
- name: Add pipx to PATH
run: echo "/root/.local/bin" >> ${GITHUB_PATH}
- name: Install poetry
run: pipx install poetry
- name: Install poetry package
run: poetry install --no-interaction ${{ inputs.poetry_install_args }}
shell: bash

View File

@@ -0,0 +1,41 @@
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
name: Python Linters
on:
push:
branches:
- main
pull_request:
jobs:
pylint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install dependencies
uses: ./.gitea/actions/poetrybuild
- name: Lint with pylint
run: poetry run pylint seafile_mirror
formatting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install dependencies
uses: ./.gitea/actions/poetrybuild
- name: Test formatting with isort and black
run: |
poetry run isort --check seafile_mirror/
poetry run black .
mypy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install dependencies
uses: ./.gitea/actions/poetrybuild
- name: Test typing with mypy
run: poetry run mypy

View File

@@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
name: Python package
on:
push:
tags:
- "v*.*.*"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Build and publish to PyPI
uses: https://github.com/JRubics/poetry-publish@v2.1
with:
pypi_token: ${{ secrets.PYPI_TOKEN }}

View File

@@ -0,0 +1,19 @@
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
name: REUSE Compliance
on:
push:
branches:
- main
pull_request:
jobs:
reuse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Check REUSE Compliance
uses: https://github.com/fsfe/reuse-action@v6

View File

@@ -0,0 +1,59 @@
# SPDX-FileCopyrightText: 2023 DB Systel GmbH
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
name: Selftests
on:
push:
branches:
- main
pull_request:
jobs:
# Test building the package and installing it via pip3
test-build-install:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Add pipx to PATH
run: echo "/root/.local/bin" >> ${GITHUB_PATH}
- name: Install poetry
run: pipx install poetry
- name: Build package
run: poetry build
- name: Install package
run: pip3 install dist/seafile_mirror-*.tar.gz
- name: Run package
run: |
seafile-mirror --version
seafile-mirror --help
# Run tool and sync a test library
test-sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install dependencies
uses: ./.gitea/actions/poetrybuild
# using minimal set of dependencies
with:
poetry_install_args: "--without dev"
- name: Install seaf-cli
run: |
apt-get update
apt-get install -y seafile-cli
- name: Configure seaf-cli and start daemon
run: |
seaf-cli init -d /tmp
seaf-cli start
- name: Fill configuration for test library
run: |
sed -i "s|__seafile_server__|${{ secrets.SEAFILE_SERVER }}|" tests/seafile_mirror.conf.yaml
sed -i "s|__seafile_user__|${{ secrets.SEAFILE_USER }}|" tests/seafile_mirror.conf.yaml
sed -i "s|__seafile_pass__|${{ secrets.SEAFILE_PASS }}|" tests/seafile_mirror.conf.yaml
- name: Sync the library
run: poetry run seafile-mirror -c tests -v
- name: Attempt to find expected string in library
run: grep "__ci_test_expect__" tests/ci-test/testfile.txt

4
.gitignore vendored
View File

@@ -2,6 +2,10 @@
# #
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
dist/
venv/
.seafile_mirror.db.json .seafile_mirror.db.json
/seafile_mirror.conf.yaml
__pycache__/ __pycache__/
*.log *.log
tests/ci-test/

View File

@@ -6,6 +6,10 @@ SPDX-License-Identifier: Apache-2.0
# Seafile Mirror # Seafile Mirror
[![REUSE status](https://api.reuse.software/badge/src.mehl.mx/mxmehl/seafile-mirror)](https://api.reuse.software/info/src.mehl.mx/mxmehl/seafile-mirror)
[![The latest version of reuse can be found on PyPI.](https://img.shields.io/pypi/v/seafile-mirror.svg)](https://pypi.org/project/seafile-mirror/)
[![Information on what versions of Python the tool supports can be found on PyPI.](https://img.shields.io/pypi/pyversions/seafile-mirror.svg)](https://pypi.org/project/seafile-mirror/)
A Python tool to handle clean read-only (re-)syncs of A Python tool to handle clean read-only (re-)syncs of
[Seafile](https://www.seafile.com) libraries with the intention to mirror them. [Seafile](https://www.seafile.com) libraries with the intention to mirror them.
@@ -39,30 +43,47 @@ Seafile servers!
## Install ## Install
The tool depends on the following applications: The tool depends on the following applications:
* `Python 3` and its library `yaml` * `Python 3`
* [`seafile-cli`](https://help.seafile.com/syncing_client/linux-cli/), available e.g. in [Debian](https://packages.debian.org/bullseye/seafile-cli) * [`seafile-cli`](https://help.seafile.com/syncing_client/linux-cli/), available
e.g. in [Debian](https://packages.debian.org/bullseye/seafile-cli)
You can execute the tool with `python3 seafile_mirror.py`. The `--help` flag You can install the latest release via `pip3 install seafile-mirror`.
informs you about the required and available commands.
The tool is executable by `seafile-mirror`. The `--help` flag informs you about
the required and available commands.
There is also an [Ansible There is also an [Ansible
role](https://src.mehl.mx/mxmehl/seafile-mirror-ansible) that takes care of role](https://src.mehl.mx/mxmehl/seafile-mirror-ansible) that takes care of
installing the tool, setting up a systemd service, and running it daily. installing the tool via `pipx`, setting up a systemd service, and running it
daily.
To keep the Seafile daemon that is required for `seafile-cli` running in the background, check out this [exemplary systemd service](examples/seaf-daemon.service). To keep the Seafile daemon that is required for `seafile-cli` running in the
background, check out this [exemplary systemd
service](examples/seaf-daemon.service).
## Configuration ## Configuration
Configuration is done in a YAML file called `seafile_mirror.conf.yaml`. You can find an example [here](examples/seafile_mirror.conf.yaml). Configuration is done in a YAML file called `seafile_mirror.conf.yaml`. You can
find an example [here](examples/seafile_mirror.conf.yaml).
If that configuration file resides in the same location as the `seafile_mirror.py` file you are running, you should provide `--configdir ./`. If that configuration file resides in the same location your current working
directory, you should provide `--configdir ./`.
## Logging and caching ## Logging and caching
The tool creates `seafile_mirror.log` in addition to the log to the standard The tool creates `seafile_mirror.log` in addition to the log to the standard
output. With `-v` you can print DEBUG messages that will help you in case of output in the configuration directory. With `-v` you can print DEBUG messages
problems. that will help you in case of problems.
It also caches the current status of synced libraries and their latest full It also caches the current status of synced libraries and their latest full
download in the file `.seafile_mirror.db.json`. Do not delete this file unless download in the file `.seafile_mirror.db.json`. Do not delete this file unless
you don't mind that the tool will re-sync all libraries in the next run. you don't mind that the tool will re-sync all libraries in the next run.
## Contribute and Development
Contributions are welcome! The development is easiest with `poetry`: `poetry
install` and `poetry run seafile-mirror` will get you started.
## License
Apache-2.0, Copyright Max Mehl

View File

@@ -1,3 +0,0 @@
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0

1114
poetry.lock generated Normal file

File diff suppressed because it is too large Load Diff

3
poetry.lock.license Normal file
View File

@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
SPDX-License-Identifier: Apache-2.0

57
pyproject.toml Normal file
View File

@@ -0,0 +1,57 @@
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
[tool.poetry]
name = "seafile-mirror"
version = "0.2.2"
description = "Handle clean read-only (re-)syncs of Seafile libraries to mirror them"
authors = ["Max Mehl <mail@mehl.mx>"]
license = "Apache-2.0"
readme = "README.md"
repository = "https://src.mehl.mx/mxmehl/seafile-mirror"
packages = [{ include = "seafile_mirror" }]
[tool.poetry.scripts]
seafile-mirror = 'seafile_mirror.seafile_mirror:main'
[tool.poetry.dependencies]
python = "^3.10"
pyyaml = "^6.0.1"
[tool.poetry.group.dev.dependencies]
pylint = "^4.0.0"
isort = "^8.0.0"
black = "^26.0.0"
mypy = "^1.5.1"
pylama = "^8.4.1"
types-pyyaml = "^6.0.12.11"
bump-my-version = "^1.0.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
# FORMATTING settings
[tool.isort]
profile = "black"
[tool.black]
line-length = 100
# MYPY settings
[tool.mypy]
files = ["seafile_mirror/*.py"]
# Bump-My-Version
[tool.bumpversion]
commit = true
tag = true
allow_dirty = false
tag_name = "v{new_version}"
[[tool.bumpversion.files]]
filename = "pyproject.toml"
regex = true
search = "^version = \"{current_version}\""
replace = "version = \"{new_version}\""

18
renovate.json5 Normal file
View File

@@ -0,0 +1,18 @@
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
extends: ["local>renovate-bot/renovate-config"],
"packageRules": [
// Group and merge all dev dependencies, even major versions
{
"matchDepTypes": ["dev"],
"groupName": "all-dev-dependencies",
"automerge": true
},
// Merge all other patch and minor dependencies
{
"matchUpdateTypes": ["minor", "patch"],
"matchCurrentVersion": "!/^0/",
"automerge": true
}
]
}

3
renovate.json5.license Normal file
View File

@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
SPDX-License-Identifier: Apache-2.0

10
seafile_mirror/__init__.py Executable file
View File

@@ -0,0 +1,10 @@
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
"""Global init file"""
from importlib.metadata import version
__version__ = version("seafile-mirror")

View File

@@ -43,9 +43,7 @@ def db_update(dbdict, libid, **kwargs):
if libid not in dbdict: if libid not in dbdict:
dbdict[libid] = {} dbdict[libid] = {}
for key, value in kwargs.items(): for key, value in kwargs.items():
logging.debug( logging.debug("Updating '%s' of library '%s' in in-memory cache dictionary", key, libid)
"Updating '%s' of library '%s' in in-memory cache dictionary", key, libid
)
dbdict[libid][key] = value dbdict[libid][key] = value
db_write(dbdict) db_write(dbdict)

View File

@@ -39,3 +39,14 @@ def findstring(text, string):
def countlines(string: str) -> int: def countlines(string: str) -> int:
"""Count number of lines in a variable""" """Count number of lines in a variable"""
return len(string.splitlines()) return len(string.splitlines())
def convert_bytes(size):
"""Convert bytes to KB, MB etc depending on size"""
power = 1024
level = 0
labels = {0: "B", 1: "KB", 2: "MB", 3: "GB", 4: "TB"}
while size > power:
size /= power
level += 1
return f"{round(size, 2)} {labels[level]}"

View File

@@ -10,7 +10,7 @@ import subprocess
import sys import sys
from time import sleep from time import sleep
from .cachedb import db_get_library_key, db_update from ._cachedb import db_get_library_key, db_update
# Constants # Constants
# Seafile CLI command # Seafile CLI command
@@ -38,7 +38,7 @@ def sf_runcmd(auth: list, *arguments: str) -> str:
# check for errors # check for errors
if ret.returncode != 0: if ret.returncode != 0:
logging.error("The command '%s' returned an error: %s", ret.args, ret.stderr) logging.error("The command '%s' returned an error: %s", ret.args, ret.stderr)
return False return ""
return ret.stdout.decode("UTF-8") return ret.stdout.decode("UTF-8")
@@ -50,20 +50,20 @@ def sf_parse(output: str, fromcommand: str) -> list:
for lib in output.splitlines()[1:]: for lib in output.splitlines()[1:]:
# If list, split is by " ", and structure is name,id,dir # If list, split is by " ", and structure is name,id,dir
if fromcommand == "list": if fromcommand == "list":
lib = [x.strip() for x in lib.split(" ")] lib_info = [x.strip() for x in lib.split(" ")]
lib = {"name": lib[0], "id": lib[1], "dir": lib[2]} lib_dict = {"name": lib_info[0], "id": lib_info[1], "dir": lib_info[2]}
libs.append(lib) libs.append(lib_dict)
# If status, split is by "\t", and structure is name,status,progress # If status, split is by "\t", and structure is name,status,progress
elif fromcommand == "status": elif fromcommand == "status":
lib_tmp = [x.strip() for x in lib.split("\t")] lib_tmp = [x.strip() for x in lib.split("\t")]
lib = {"name": lib_tmp[0], "status": lib_tmp[1]} lib_dict = {"name": lib_tmp[0], "status": lib_tmp[1]}
# Add progress if it exists # Add progress if it exists
try: try:
lib["progress"] = lib_tmp[2] lib_dict["progress"] = lib_tmp[2]
except IndexError: except IndexError:
lib["progress"] = None lib_dict["progress"] = ""
libs.append(lib) libs.append(lib_dict)
return libs return libs
@@ -71,8 +71,8 @@ def sf_parse(output: str, fromcommand: str) -> list:
def sf_getstatus(libname: str) -> dict: def sf_getstatus(libname: str) -> dict:
"""Return the current status of a library (name, status, progress)""" """Return the current status of a library (name, status, progress)"""
# Get output of `status` and parse it # Get output of `status` and parse it
libsstatus = sf_runcmd(None, "status") libsstatus_cmd = sf_runcmd([], "status")
libsstatus = sf_parse(libsstatus, "status") libsstatus = sf_parse(libsstatus_cmd, "status")
# In the list of statuses, get the one for the requested library. None if no match # In the list of statuses, get the one for the requested library. None if no match
status = next((item for item in libsstatus if item["name"] == libname), None) status = next((item for item in libsstatus if item["name"] == libname), None)
@@ -140,10 +140,10 @@ def sf_desync_all(cache):
sys.exit(1) sys.exit(1)
def sf_waitforsynced(libname) -> int: def sf_waitforsynced(libname) -> float:
"""Regularly check status of the library that started to sync""" """Regularly check status of the library that started to sync"""
libsynced = False libsynced = False
syncwaitmins = 0 syncwaitmins: float = 0
nostatus, nostatus_limit = 0, 10 nostatus, nostatus_limit = 0, 10
while libsynced is not True: while libsynced is not True:
libstatus = sf_getstatus(libname) libstatus = sf_getstatus(libname)
@@ -183,8 +183,8 @@ def sf_waitforsynced(libname) -> int:
libname, libname,
nostatus_limit, nostatus_limit,
) )
sf_runcmd(None, "stop") sf_runcmd([], "stop")
sf_runcmd(None, "start") sf_runcmd([], "start")
# If library not synced yet or no status available, wait # If library not synced yet or no status available, wait
if not libsynced: if not libsynced:

View File

@@ -14,9 +14,10 @@ from time import sleep
import yaml import yaml
from functions.cachedb import db_read from . import __version__
from functions.helpers import findstring, get_lock from ._cachedb import db_read
from functions.seafile import ( from ._helpers import convert_bytes, findstring, get_lock
from ._seafile import (
sf_bump_cache_status, sf_bump_cache_status,
sf_desync_all, sf_desync_all,
sf_lastsync_old_enough, sf_lastsync_old_enough,
@@ -26,6 +27,11 @@ from functions.seafile import (
parser = argparse.ArgumentParser(description=__doc__) parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("-c", "--configdir", required=True, help="The config directory") parser.add_argument("-c", "--configdir", required=True, help="The config directory")
parser.add_argument(
"-l",
"--logfile",
help="The path to the logfile. Default: <configdir>/seafile_mirror.log",
)
parser.add_argument( parser.add_argument(
"-d", "-d",
"--dry", "--dry",
@@ -48,10 +54,21 @@ parser.add_argument(
default=False, default=False,
help="Print and log DEBUG messages", help="Print and log DEBUG messages",
) )
parser.add_argument("--version", action="version", version="%(prog)s " + __version__)
def main(): def main(): # pylint: disable=too-many-locals, too-many-statements, too-many-branches
"""Main function""" """Main function"""
args = parser.parse_args()
# Set files depending on configdir
configdir = args.configdir.rstrip("/") + "/"
configfile = configdir + "seafile_mirror.conf.yaml"
cachefile = configdir + ".seafile_mirror.db.json"
if args.logfile:
logfile = args.logfile
else:
logfile = configdir + "seafile_mirror.log"
# Logging # Logging
log = logging.getLogger() log = logging.getLogger()
logging.basicConfig( logging.basicConfig(
@@ -86,7 +103,7 @@ def main():
sf_desync_all(cache) sf_desync_all(cache)
# Create list of libraries we handle(d) for final output # Create list of libraries we handle(d) for final output
libsdone = [] libsdone = {"libs": [], "bytes": 0, "time": 0}
# Go through users in config # Go through users in config
for access in config: for access in config:
@@ -114,16 +131,12 @@ def main():
libid = lib["id"] libid = lib["id"]
# Set resync interval if there is a lib-specific setting. Otherwise default # Set resync interval if there is a lib-specific setting. Otherwise default
libresyncinterval = ( libresyncinterval = (
lib["resync_interval_days"] lib["resync_interval_days"] if "resync_interval_days" in lib else resyncinterval
if "resync_interval_days" in lib
else resyncinterval
) )
# Check if last sync of library is older than resync_interval_days # Check if last sync of library is older than resync_interval_days
if sf_lastsync_old_enough(cache, libid, args.force, libresyncinterval): if sf_lastsync_old_enough(cache, libid, args.force, libresyncinterval):
logging.info( logging.info("Starting to re-sync library %s (%s) to %s", libname, libid, libdir)
"Starting to re-sync library %s (%s) to %s", libname, libid, libdir
)
else: else:
logging.info( logging.info(
"Local mirror of library %s (%s) at %s is still recent enough. Skipping it.", "Local mirror of library %s (%s) at %s is still recent enough. Skipping it.",
@@ -183,22 +196,33 @@ def main():
) )
sf_runcmd(None, "desync", "-d", libdir) sf_runcmd(None, "desync", "-d", libdir)
# Get size of directory (libdir) in bytes
# Note: this is not fully equivalent with what `du` would show. It's
# caused by the fact that `du` considers filesystem block sizes
libdirsize = sum(f.stat().st_size for f in libdir.glob("**/*") if f.is_file())
# Update libsdone and cache # Update libsdone and cache
libsdone.append(libname) libsdone["libs"].append(libname)
libsdone["bytes"] += libdirsize
libsdone["time"] += syncduration
sf_bump_cache_status(cache, libid, status="synced", duration=syncduration) sf_bump_cache_status(cache, libid, status="synced", duration=syncduration)
logging.info( logging.info(
"Library %s (%s) has been re-synced to %s", libname, libid, libdir "Library %s (%s) has been re-synced to %s. Duration: %s minutes. Size: %s",
libname,
libid,
libdir,
round(syncduration),
convert_bytes(libdirsize),
) )
logging.info("Fully re-synced the following libraries: %s", ", ".join(libsdone)) logging.info(
"Fully re-synced the following libraries: %s. Total duration: %s minutes. Total size: %s",
", ".join(libsdone["libs"]),
round(libsdone["time"]),
convert_bytes(libsdone["bytes"]),
)
if __name__ == "__main__": if __name__ == "__main__":
args = parser.parse_args()
# Set files depending on configdir
configdir = args.configdir.rstrip("/") + "/"
configfile = configdir + "seafile_mirror.conf.yaml"
cachefile = configdir + ".seafile_mirror.db.json"
logfile = configdir + "seafile_mirror.log"
main() main()

View File

@@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2023 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
# Configuration file for seafile-mirror which will be filled in and applied in
# the CI test
- server: __seafile_server__
user: __seafile_user__
password: __seafile_pass__
# The default resync interval
resync_interval_days: 7
# Define the libraries which shall be synced
libs:
- name: ci-test
# ID of the Seafile library (can be seen in the web UI)
id: 558667f5-cee2-443d-8f8e-668e70a23e9f
# local directory where the mirror shall be created
dir: tests/ci-test