Compare commits

...

2826 commits

Author SHA1 Message Date
Michael Pöhn
bf33fc5d9b Merge branch 'scanner' into 'master'
scanner: fix catalog match

See merge request fdroid/fdroidserver!1692
2025-09-18 11:31:13 +00:00
linsui
5ded08048b scanner: remove asLibraryDependency from catalog accessor 2025-09-18 11:19:32 +00:00
linsui
5f6e59c76d scanner: fix catalog match 2025-09-18 11:19:32 +00:00
linsui
9b8a334dcf Merge branch 'checkupdates-fix-get_upstream_main_branch' into 'master'
checkupdates: fix get_upstream_main_branch() for Debian/forky

See merge request fdroid/fdroidserver!1702
2025-09-18 10:57:09 +00:00
Hans-Christoph Steiner
8b11e098db checkupdates: fix get_upstream_main_branch() for Debian/forky
```
FAIL: test_get_upstream_main_branch (tests.test_checkupdates.CheckupdatesTest.test_get_upstream_main_branch)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builds/fdroid/fdroidserver/tests/test_checkupdates.py", line 509, in test_get_upstream_main_branch
    self.assertEqual(
    ~~~~~~~~~~~~~~~~^
        f'upstream/{testvalue}',
        ^^^^^^^^^^^^^^^^^^^^^^^^
        branch,
        ^^^^^^^
        f'The default branch should be called {testvalue}!',
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
AssertionError: 'upstream/foo' != 'upstream/main'
- upstream/foo
+ upstream/main
 : The default branch should be called foo!
```
2025-09-18 10:52:15 +00:00
Hans-Christoph Steiner
c9c5147cac Merge branch 'user-rclone.conf' into 'master'
deploy: find rclone.conf in the root of the repo

See merge request fdroid/fdroidserver!1701
2025-09-18 10:01:04 +00:00
thefuture
b6d6d46aeb error if repo rclone.conf is not referenced in config.yml 2025-09-18 11:06:04 +02:00
Hans-Christoph Steiner
1f9fb16844 deploy: find rclone.conf in the root of the repo
This enables the same way of managing the config as existed with s3cmd's
s3cfg file.
2025-09-18 11:05:18 +02:00
Hans-Christoph Steiner
0a87deff1c Merge branch 'remove-libcloud-and-s3cmd' into 'master'
Remove libcloud and s3cmd from fdroidserver

Closes #1289 and #1288

See merge request fdroid/fdroidserver!1650
2025-09-17 11:36:13 +00:00
paul mayero
dbd769db9f Remove libcloud and s3cmd from fdroidserver 2025-09-17 11:36:12 +00:00
Hans-Christoph Steiner
a9856cfb92 Merge branch 'spelling-versionCode-versionName' into 'master'
standardize on versionCode/versionName as spelling

See merge request fdroid/fdroidserver!1699
2025-09-17 07:08:00 +00:00
Hans-Christoph Steiner
bbe29abaa3 standardize on versionName as spelling 2025-09-17 06:55:46 +00:00
Hans-Christoph Steiner
1068057524 standardize on versionCode as spelling 2025-09-17 06:55:46 +00:00
linsui
e8d4d8fc6a Merge branch 'maven' into 'master'
scanner: remove tailing / from maven repo address

See merge request fdroid/fdroidserver!1700
2025-09-17 06:50:54 +00:00
linsui
f578684be8 scanner: remove tailing / from maven repo address 2025-09-17 14:37:30 +08:00
Hans-Christoph Steiner
57244dec63 Merge branch 'noversioncode' into 'master'
update: Handle APKs without a version code in their manifest

Closes #1240

See merge request fdroid/fdroidserver!1695
2025-08-26 10:10:51 +00:00
Tobias Mueller
2eb3986ecf update: Handle APKs without a version code in their manifest 2025-08-26 10:10:51 +00:00
Hans-Christoph Steiner
d4ad523dd2 Merge branch '__init__.py-black-format' into 'master'
convert fdroidserver/__init__.py to black format

See merge request fdroid/fdroidserver!1690
2025-08-18 15:48:23 +00:00
Hans-Christoph Steiner
6fff73b678 convert fdroidserver/__init__.py to black format 2025-08-18 15:38:08 +00:00
linsui
fbf8fc54db Merge branch 'patch-1' into 'master'
Sonatype is now Maven Central

See merge request fdroid/fdroidserver!1693
2025-08-18 13:32:29 +00:00
Licaon_Kter
f5f79ac1ea Sonatype is now Maven Central 2025-08-18 13:32:29 +00:00
Michael Pöhn
97e9784d5d Merge branch 'fix-srcname-cache-crash' into 'master'
update: don't crash if src tarball is not present

See merge request fdroid/fdroidserver!1691
2025-07-31 15:31:38 +00:00
Hans-Christoph Steiner
d20a6a5dcf update: don't crash if src tarball is not present 2025-07-29 17:20:11 +02:00
Michael Pöhn
058f0b7f6a Merge branch 'cache-srcname-sha256' into 'master'
update: cache the SHA-256 of the src tarball

Closes #1290

See merge request fdroid/fdroidserver!1686
2025-07-28 21:10:40 +00:00
Hans-Christoph Steiner
e07cdf5f0c update: cache the SHA-256 of the src tarball
closes #1290
2025-07-28 14:11:07 +00:00
Hans-Christoph Steiner
f9d111c8c1 Merge branch 'removeunf' into 'master'
Remove UpstreamNonFree

Closes fdroiddata#2481

See merge request fdroid/fdroidserver!1680
2025-07-28 14:10:18 +00:00
Licaon_Kter
8b54e2b4cf Remove UpstreamNonFree 2025-07-28 15:59:35 +02:00
Hans-Christoph Steiner
d594a683ab Merge branch 'isort' into 'master'
Sort import

See merge request fdroid/fdroidserver!1689
2025-07-26 15:47:48 +00:00
linsui
7a98650ed3 Sort import
ruff check --fix --select I
2025-07-26 15:35:19 +00:00
linsui
b19b8050db Merge branch 'fix-schildichat-fastlane' into 'master'
update: more accurate fastlane subdir/flavor matching

See merge request fdroid/fdroidserver!1687
2025-07-26 12:52:31 +00:00
Hans-Christoph Steiner
6a3758d3c4 update: more accurate fastlane subdir/flavor matching
This should fix Schildichat showing Element X's metadata.
2025-07-26 12:36:32 +00:00
Hans-Christoph Steiner
546821fc3d Merge branch 'scanpath' into 'master'
scanner: report all errors

See merge request fdroid/fdroidserver!1688
2025-07-26 10:44:26 +00:00
linsui
120a1655b4 scanner: report all errors 2025-07-26 18:33:57 +08:00
linsui
19d709edcd Merge branch 'standalone-gradlew-fdroid' into 'master'
make gradlew-fdroid a standalone project

See merge request fdroid/fdroidserver!1684
2025-07-25 17:46:59 +00:00
Hans-Christoph Steiner
5049645003 make gradlew-fdroid a standalone project
https://gitlab.com/fdroid/gradlew-fdroid
2025-07-25 17:46:31 +00:00
Hans-Christoph Steiner
e4b54c9768 Merge branch 'docker-buildserver-always-apt-https' into 'master'
buildserver: always use HTTPS for apt connections in Docker image

See merge request fdroid/fdroidserver!1603
2025-07-23 16:24:56 +00:00
Hans-Christoph Steiner
7988c54d00 buildserver: always use HTTPS for apt connections in Docker image
This configuration has been in use in .gitlab-ci.yml scripts for a while
now and has proven reliable.  This is a "low hanging fruit" improvement.
It provides an extra layer of protection for when their are apt vulns.  And
it makes it much harder to profile what a server/laptop is doing based on
the internet traffic.  The network observer will no longer be able to see
which packages are being downloaded since apt uses HTTP pipelining so size
attacks are not really possible. And HTTPS hides the URLs, filenames,
download contents, etc.
2025-07-23 16:09:20 +00:00
Hans-Christoph Steiner
05c4bf2483 Merge branch 'ci-PUBLISH-to-bookworm' into 'master'
gitlab-ci: update PUBLISH to bookworm since prod has already

See merge request fdroid/fdroidserver!1685
2025-07-23 16:08:48 +00:00
Hans-Christoph Steiner
7e219561b7 gitlab-ci: update PUBLISH to bookworm since prod has already 2025-07-22 21:52:28 +02:00
Hans-Christoph Steiner
6ad3c74bb4 Merge branch 'subdir-fastlane-support' into 'master'
update: support fastlane/ dir in subdir:

See merge request fdroid/fdroidserver!1679
2025-07-17 08:46:27 +00:00
Hans-Christoph Steiner
96c0d928da update: support fastlane/ dir in subdir:
GNU Taler apps use this.
* https://git.taler.net/taler-android.git/tree/merchant-terminal/fastlane/metadata/android/en-US?h=pos-1.0.2
2025-07-16 17:32:49 +02:00
Hans-Christoph Steiner
ba5c78d45f update: fetch Builds one time and reuse 2025-07-16 16:35:58 +02:00
linsui
8f1411607a Merge branch 'update-gradle-job' into 'master'
gitlab-ci: update "gradle" job to only check files when changed

See merge request fdroid/fdroidserver!1682
2025-07-16 12:23:02 +00:00
Hans-Christoph Steiner
97b0b0eaf8
gitlab-ci: update gradle: job to only check files in
While we are at it, also upgrade to Debian/trixie and rules:

this now handles making the merge requests:
https://gitlab.com/fdroid/gradle-transparency-log/-/merge_requests/2
2025-07-16 14:08:54 +02:00
Hans-Christoph Steiner
c6c4764b33 Merge branch 'gradle-release-checksums.py' into 'master'
bot: update to gradle v7.6.6

See merge request fdroid/fdroidserver!1681
2025-07-16 12:06:44 +00:00
fdroid-bot
7946acd52a gradle v8.14.3 2025-07-16 11:52:37 +00:00
linsui
0a91b98aee Merge branch 'gradle' into 'master'
AGP 8.11 requires Gradle 8.13

See merge request fdroid/fdroidserver!1678
2025-07-06 07:30:11 +00:00
linsui
09a51a429b AGP 8.11 requires Gradle 8.13 2025-07-06 07:29:46 +00:00
linsui
47b5ecdc8c Merge branch 'gradle' into 'master'
gradle 8.14.3

See merge request fdroid/fdroidserver!1677
2025-07-05 07:15:55 +00:00
linsui
909864a8c7 gradle 8.14.3 2025-07-05 15:03:27 +08:00
Hans-Christoph Steiner
47b9b24aef Merge branch 'gitlab-ci-pages-needs' into 'master'
gitlab-ci: 'pages' needs 'Build documentation' but it has `changes:`

See merge request fdroid/fdroidserver!1670
2025-06-26 06:55:43 +00:00
Hans-Christoph Steiner
f4f1c003a6 gitlab-ci: 'pages' needs 'Build documentation' but it has changes:
Fixes this error:

> Unable to create pipeline
>
> 'pages' job needs 'Build documentation' job, but 'Build documentation'
> does not exist in the pipeline. This might be because of the only,
> except, or rules keywords. To need a job that sometimes does not exist
> in the pipeline, use needs:optional.
2025-06-26 06:44:56 +00:00
Michael Pöhn
51b55963a5 Merge branch 'only-copy-icons-if-they-changed' into 'master'
only copy icons into repo/ if they changed

See merge request fdroid/fdroidserver!1664
2025-06-25 10:32:06 +00:00
Hans-Christoph Steiner
52c1bcca70 only copy icons into repo/ if they changed
This should make things more efficient and reduce the size of the diffs in
the transparency log.  Using shutil.copy2() preserves metadata.
2025-06-25 09:46:20 +00:00
Hans-Christoph Steiner
8a36e264b4 Merge branch 'merge_weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1676
2025-06-25 08:05:47 +00:00
Hans-Christoph Steiner
d5d65cfabd
make -C locale update 2025-06-25 09:54:03 +02:00
Hans-Christoph Steiner
dcb804f70d enable Bashkir (ba) as supported locale, its at 100% 2025-06-25 09:50:54 +02:00
Zulfar
a0cae97155 Translated using Weblate: Bashkir (ba) by Zulfar <mzulfar20@gmail.com>
Currently translated at 100.0% (579 of 579 strings)

Added translation using Weblate: Bashkir (ba) by Zulfar <mzulfar20@gmail.com>

Co-authored-by: Zulfar <mzulfar20@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ba/
Translation: F-Droid/F-Droid Server
2025-06-25 09:49:50 +02:00
Hans-Christoph Steiner
956cb11f91
gitlab-ci: rm dash from macOS tests, it reliably segfaults
dash rarely changes and is reliably run on Debian in the hooks/pre-commit
job.  So remove it from the macOS job, where it is flaky and hard to
troubleshoot (who has macOS? ;-)

https://gitlab.com/fdroid/fdroidserver/-/jobs/10454622138

```
==============================================================================
run commit hooks
+ echo_header 'run commit hooks'
+ test -x ./hooks/pre-commit
+ ./hooks/pre-commit
WARNING: pydocstyle is not installed, using dummy placeholder!
WARNING: pyflakes is not installed, using dummy placeholder!
WARNING: pycodestyle is not installed, using dummy placeholder!
./hooks/pre-commit: line 111: 20320 Segmentation fault: 11  $DASH -n $f
ERROR: dash tests failed!
```
2025-06-25 09:42:46 +02:00
Hans-Christoph Steiner
193ca5842c
version 2.4.2 2025-06-24 21:52:38 +02:00
Hans-Christoph Steiner
a44364d661
update CHANGELOG.md 2025-06-24 21:52:21 +02:00
Hans-Christoph Steiner
9fffe0aea4 Merge branch 'merge_weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1675
2025-06-24 15:24:31 +00:00
Artyom Rybakov
76eb0611a0 Translated using Weblate: Russian (ru) by Artyom Rybakov <rib.artem@gmail.com>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Artyom Rybakov <rib.artem@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2025-06-24 17:12:59 +02:00
WaldiS
e21fd0d167 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 100.0% (579 of 579 strings)

Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>

Currently translated at 98.4% (570 of 579 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2025-06-24 17:12:59 +02:00
Swyter
d5e554dcd6 Translated using Weblate: Spanish (es) by Swyter <swyterzone@gmail.com>
Currently translated at 98.2% (569 of 579 strings)

Translated using Weblate: Spanish (es) by Swyter <swyterzone@gmail.com>

Currently translated at 98.2% (569 of 579 strings)

Co-authored-by: Swyter <swyterzone@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2025-06-24 17:12:59 +02:00
Hans-Christoph Steiner
e3ee7ed42e Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.6.5

See merge request fdroid/fdroidserver!1674
2025-06-24 15:08:15 +00:00
fdroid-bot
417ec9fe96 gradle v8.14.2 2025-06-24 14:58:15 +00:00
Torsten Grote
a3cd45c3fb Merge branch 'nightly-deploy-fixes' into 'master'
fixes for nightly and deploy, while debugging fdroidclient-nightly

See merge request fdroid/fdroidserver!1672
2025-06-24 12:05:14 +00:00
Hans-Christoph Steiner
d71fba164c nightly: fix bug that clones nightly repo to wrong location
bug introduced in ce018158ee from !1563
2025-06-24 13:08:48 +02:00
Hans-Christoph Steiner
e177520379 nightly: include project's LICENSE in the nightly repo 2025-06-24 13:08:48 +02:00
Hans-Christoph Steiner
10f2a4c592 Merge branch 'gitlab-ci-docker-depends-on-fdroid-build' into 'master'
gitlab-ci: "fdroid build" changes: for "docker" job

Closes docker-executable-fdroidserver#28

See merge request fdroid/fdroidserver!1673
2025-06-24 11:02:38 +00:00
Hans-Christoph Steiner
6b6cc2379c gitlab-ci: "fdroid build" changes: for "docker" job
"docker" depends on "fdroid build", so "fdroid build"'s changes: needs to
include "docker"'s.
2025-06-24 12:56:24 +02:00
Hans-Christoph Steiner
dcd5336138 scanner: fix tests after !1526 2025-06-23 23:10:15 +02:00
Hans-Christoph Steiner
f953146505
version 2.4.1 2025-06-23 22:37:29 +02:00
Hans-Christoph Steiner
e110390b99
update CHANGELOG.md 2025-06-23 22:37:26 +02:00
Hans-Christoph Steiner
fd3f71ad3c
run tests/refresh-SUSS_DEFAULT.py 2025-06-23 22:37:23 +02:00
Hans-Christoph Steiner
336d5381ae Merge branch 'fix-flaky-test' into 'master'
update: change assert to fix flaky tests

See merge request fdroid/fdroidserver!1671
2025-06-23 19:03:27 +00:00
Hans-Christoph Steiner
63298ad2ad update: change assert to fix flaky tests
This was happening often:

```
======================================================================
FAIL: test_strip_and_copy_image_in_file_ctime_changed (tests.test_update.UpdateTest.test_strip_and_copy_image_in_file_ctime_changed)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builds/fdroid/fdroidserver/tests/test_update.py", line 1409, in test_strip_and_copy_image_in_file_ctime_changed
    self.assertNotAlmostEqual(
AssertionError: 1750683024.4857466 == 1750683024.4957466 within 0.01 delta (0.009999990463256836 difference)
```
2025-06-23 15:16:21 +02:00
Torsten Grote
61777e273c Merge branch 'deploy-fix-for-nightly' into 'master'
deploy: use master branch when working complete git-mirror repo

See merge request fdroid/fdroidserver!1666
2025-06-23 13:09:57 +00:00
Hans-Christoph Steiner
53bf6c7ce1 deploy: use master branch when working complete git-mirror repo
The *-nightly git repo always uses the _master_ branch.  The `index_only:`
support maintains a separate local branch since its git repo should be as
small as possible.  The full repo should be maintained for mirrors not
using `index_only:` so that when it force-pushes, it does not need to always
push all the files, only the updated ones.  So the full repo should be
maintained in the _master_ branch, and only the `index_only` mirrors should
have their own branch.

This adds a test case to reproduce this error:
https://gitlab.com/fdroid/fdroidclient/-/jobs/10347168516

This case also applies to any setup that used `servergitmirrors:` before the
`index_only:` feature was added.  This also applies to cases if the repo
maintainer manually clones the *-nightly repo into _fdroid/git-mirror/_
2025-06-23 12:39:15 +00:00
linsui
51c973f15e Merge branch 'buildserver-androguard-from-backports' into 'master'
buildserver: androguard res0/res1 fixes from bookworm-backports

See merge request fdroid/fdroidserver!1667
2025-06-20 10:34:59 +00:00
Hans-Christoph Steiner
894fdb641e buildserver: androguard res0/res1 fixes from bookworm-backports 2025-06-20 10:34:27 +00:00
Hans-Christoph Steiner
d029095641 Merge branch 'merge_weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1669
2025-06-18 21:01:20 +00:00
Bora Atıcı
85dba17d48 Translated using Weblate: Turkish (tr) by Bora Atıcı <boratici.acc@gmail.com>
Currently translated at 99.8% (578 of 579 strings)

Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2025-06-18 22:49:22 +02:00
Nuri KÜÇÜKLER
57541eb52e Translated using Weblate: Turkish (tr) by Nuri KÜÇÜKLER <enatsek@gmail.com>
Currently translated at 98.6% (571 of 579 strings)

Co-authored-by: Nuri KÜÇÜKLER <enatsek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2025-06-18 22:49:22 +02:00
ssantos
7e8976d9b0 Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2025-06-18 22:49:22 +02:00
WaldiS
b6d7e8732b Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 98.2% (569 of 579 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2025-06-18 22:49:22 +02:00
Ecron
2590f00ff0 Translated using Weblate: Catalan (ca) by Ecron <ecron_89@hotmail.com>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Ecron <ecron_89@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
Translation: F-Droid/F-Droid Server
2025-06-18 22:49:22 +02:00
Hans-Christoph Steiner
1135cee8b7 Merge branch 'nightly-GitPython' into 'master'
nightly: switch dep from vcs_git to GitPython

See merge request fdroid/fdroidserver!1563
2025-06-18 16:47:06 +00:00
Hans-Christoph Steiner
76d711ba3c nightly: convert to black format 2025-06-18 18:34:53 +02:00
Hans-Christoph Steiner
b2057a1ce0 nightly: switch dep from vcs_git to GitPython
This code already depends on GitPython, and hopefully the common.vcs* stuff
can eventually go away entirely.  GitPython should provide those bits
already, and they are maintained by someone else.

https://github.com/gitpython-developers/GitPython/pull/2029
2025-06-18 18:34:49 +02:00
Hans-Christoph Steiner
ce018158ee nightly: set up test for git clone function 2025-06-18 18:03:59 +02:00
Hans-Christoph Steiner
d398994ad3 Merge branch 'fix-categories-yml-only-icon' into 'master'
update: If categories.yml only has icon:, then add name:

See merge request fdroid/fdroidserver!1659
2025-06-16 17:25:09 +00:00
Hans-Christoph Steiner
494d811846 update: If cateogories.yml only has icon:, then add name:
E.g. if _categories.yml_ is like:

```yaml
Time:
  icon: time.png
```
2025-06-16 17:13:48 +00:00
Hans-Christoph Steiner
964861eb68 Merge branch 'polish-pylint' into 'master'
polish pylint

See merge request fdroid/fdroidserver!1637
2025-06-16 17:13:27 +00:00
linsui
8c14e44f63 gitlab-ci: show pylint output in log when it fails 2025-06-16 17:08:38 +00:00
Hans-Christoph Steiner
e1a8e1a08a pylint: use default good-names list 2025-06-16 17:08:38 +00:00
Hans-Christoph Steiner
d5bc7a6942 let pylint choose how many CPUs to use 2025-06-16 17:08:38 +00:00
Jochen Sprickerhof
78e6b8f04c Merge branch 'strip-and-copy-check-by-time' into 'master'
update: use ctime/mtime to control _strip_and_copy_image runs

See merge request fdroid/fdroidserver!1665
2025-06-11 19:26:03 +00:00
Hans-Christoph Steiner
59102fb07f update: use ctime/mtime to control _strip_and_copy_image runs
Oftentimes, the file that is copied is stripped, in which case, the file
size is different.  Using a file size check here means it will rerun the
strip and copy every time `fdroid update` is run for any image that needs
to be stripped.  If the source's ctime is newer than the destination, then
the process should run since it is a newly created file.  Even more so with
mtime, since the destination's mtime is reset based on the source's.
2025-06-11 17:33:34 +02:00
Hans-Christoph Steiner
3cb6078059 Merge branch 'lazyconfig' into 'master'
Lazyload environment variables in config.yml

See merge request fdroid/fdroidserver!1645
2025-06-11 13:02:09 +00:00
linsui
cd1630d2f5 Lazyload environment variables in config.yml 2025-06-11 13:02:09 +00:00
linsui
e44fd22199 Merge branch 'gradle' into 'master'
gradlew-fdroid: update AGP required gradle version

See merge request fdroid/fdroidserver!1661
2025-06-10 17:33:49 +00:00
linsui
69003ae65b gradlew-fdroid: update AGP required gradle version 2025-06-10 17:18:35 +00:00
Hans-Christoph Steiner
d4a71cd572 Merge branch 'two-fixes-for-tests' into 'master'
two fixes for the tests

See merge request fdroid/fdroidserver!1657
2025-06-10 17:14:21 +00:00
Hans-Christoph Steiner
721de49104 make_website: only parse repo_pubkey if its needed
This makes writing tests a lot easier, since the test cases no longer need
to provide a value for `repo_pubkey:`.
2025-06-08 20:12:04 +00:00
Hans-Christoph Steiner
677301bc8a gitlab-ci: make gradle job show files with trigger it
For some reason, this logic thinks that this merge request has changed
makebuildserver and/or gradlew-fdroid, though it clearly has not. This
should shed some light on it.

https://gitlab.com/fdroid/fdroidserver/-/jobs/9835383262
2025-06-08 20:12:04 +00:00
linsui
f281068cbf Merge branch 'gradle8142' into 'master'
gradle 8.14.2

See merge request fdroid/fdroidserver!1663
2025-06-08 07:14:18 +00:00
Licaon_Kter
e98f0966e0 gradle 8.14.2 2025-06-08 09:31:16 +03:00
linsui
0885cf3b49 Merge branch 'gradle8141' into 'master'
gradle - 8.14.1

See merge request fdroid/fdroidserver!1660
2025-05-24 07:32:06 +00:00
Licaon_Kter
c70af2503c gradle - 8.14.1 2025-05-24 09:36:38 +03:00
Hans-Christoph Steiner
bd10ee73c1 Merge branch 'deprecate_bzr_svn' into 'master'
Deprecate bzr, hg and git-svn support (attack surface)

See merge request fdroid/fdroidserver!1656
2025-05-23 07:15:12 +00:00
Jochen Sprickerhof
cfc848771d Deprecate bzr, hg and git-svn support (attack surface) 2025-05-23 07:14:42 +00:00
Michael Pöhn
ac90d11906 Merge branch 'funding-manifest-urls' into 'master'
💸 add .well-known/funding-manifest-urls

See merge request fdroid/fdroidserver!1658
2025-05-22 15:31:33 +00:00
Michael Pöhn
7cf1cd1f4c
💸 add .well-known/funding-manifest-urls
This is used by floss.fund to automatically verify that a repository is
indeed owned by the author of the corresponding funding.json file.
2025-05-22 17:29:50 +02:00
Hans-Christoph Steiner
2a939bf87f Merge branch 'flavor' into 'master'
update: match fastlane flavor with all combinations

See merge request fdroid/fdroidserver!1647
2025-05-22 12:59:26 +00:00
linsui
a5d966bf0f calculate all combinations of gradle flavors 2025-05-22 12:24:33 +02:00
linsui
e957583337 common: add calculate_gradle_flavor_combination 2025-05-22 12:24:32 +02:00
linsui
6c054f62ca flavour -> flavor 2025-05-22 12:16:43 +02:00
Hans-Christoph Steiner
0ac750463f Merge branch 'checkupdate' into 'master'
checkupdates: set push ref to HEAD:refs/heads/branch_name

See merge request fdroid/fdroidserver!1638
2025-05-22 10:13:23 +00:00
Hans-Christoph Steiner
8c9b0b3a2a add test case 2025-05-22 12:12:24 +02:00
linsui
243a0475f9 checkupdates: don't create branch with .lock end 2025-05-22 12:12:24 +02:00
linsui
e538c34c32 checkupdates: set push ref to HEAD:refs/heads/branch_name 2025-05-22 12:12:24 +02:00
Hans-Christoph Steiner
e7060011aa Merge branch 'triple-t' into 'master'
Fix handling of Triple-T 1.0.0 graphics

Closes #1260

See merge request fdroid/fdroidserver!1652
2025-05-22 10:11:25 +00:00
Leo Heitmann Ruiz
5f534ea2cb Add test case for Triple-T 1.0.0 graphics 2025-05-22 11:57:57 +02:00
Leo Heitmann Ruiz
ffd4274503 Fix handling of Triple-T 1.0.0 graphics
Unlike screenshots, the featureGraphic, icon, promoGraphic, and tvBanner
should be placed directly in the locale directory instead of in a
dedicated subdirectory (in the F-Droid metadata structure). For version
1.0.0 of the Triple-T structure this currently isn't done. Instead, the
graphics are treated as screenshots are.

To illustrate:

en-US/listing/icon/icon.png
en-US/listing/featureGraphic/play_store_feature_graphic.png

Should end up as:

en-US/icon.png
en-US/featureGraphic.png

But instead they currently end up as:

en-US/icon/icon.png
en-US/featureGraphic/play_store_feature_graphic.png

This patch should fix it.

It seems the erroneous behavior was introduced in
a4169484fd

Closes #1260
2025-05-21 16:57:35 +00:00
Hans-Christoph Steiner
0a8f9ec5fc Merge branch 'SOURCE_DATE_EPOCH' into 'master'
set SOURCE_DATE_EPOCH from app's git otherwise fdroiddata metadata file

See merge request fdroid/fdroidserver!1653
2025-05-20 20:03:48 +00:00
Hans-Christoph Steiner
20b36f1970 SOURCE_DATE_EPOCH from app's git otherwise fdroiddata metadata file
https://reproducible-builds.org/docs/source-date-epoch
2025-05-19 16:31:40 +02:00
linsui
0b6e304922 Merge branch 'gradlew-fdroid-one-more-level' into 'master'
gradlew-fdroid: also search ../../gradle/ for wrapper files

See merge request fdroid/fdroidserver!1655
2025-05-19 08:44:11 +00:00
Hans-Christoph Steiner
9384c5ab70 gradlew-fdroid: also search ../../gradle/ for wrapper files
https://github.com/geteduroam/android-app/pull/139
2025-05-17 00:15:44 +02:00
linsui
7b6767eb50 Merge branch 'no-git-exec-in-update' into 'master'
update: never execute VCS e.g. git

See merge request fdroid/fdroidserver!1630
2025-05-16 07:00:36 +00:00
Hans-Christoph Steiner
4e7bda736c update: never execute VCS e.g. git
Package repos come from untrusted sources, in terms of the buildserver. They
should be handled in VMs and containers as much as possible to avoid
vulnerabilities.  As far as I could tell, `fdroid update` only has a single
place where it executes any VCS system: if there is .fdroid.yml present in
a package repo, then it will fetch the commit ID using git.

For better security properties, this implements a simple function to just
read the files to get that commit ID.  The function that executes git to do
the same thing is relabeled "unsafe".  That is used for status JSON
everywhere, but that runs on fdroiddata.git and fdroidserver.git, which are
trusted repos.

The unsafe version is also used in places where git.Repo() is needed for
other things.
2025-05-12 18:30:03 +02:00
Hans-Christoph Steiner
2a9c8e9644 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1654
2025-05-12 14:44:41 +00:00
M. Fatih Uluçam
da58061c80 Translated using Weblate: Turkish (tr) by "M. Fatih Uluçam" <mulucam@gmail.com>
Currently translated at 94.6% (548 of 579 strings)

Co-authored-by: M. Fatih Uluçam <mulucam@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
VfBFan
696df82999 Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
Laurent FAVOLE
cc61a3e9e3 Translated using Weblate: French (fr) by Laurent FAVOLE <laurentfavole03@gmail.com>
Currently translated at 99.1% (574 of 579 strings)

Co-authored-by: Laurent FAVOLE <laurentfavole03@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
ssantos
3b78b3cf06 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
Aindriú Mac Giolla Eoin
0e086f5e61 Translated using Weblate: Irish (ga) by Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ga/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
Andrey
61943c3f06 Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>
Currently translated at 98.4% (570 of 579 strings)

Co-authored-by: Andrey <andrey@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
Ihor Hordiichuk
eebbfedee5 Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
Besnik Bleta
1a9ba8e956 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.7% (566 of 579 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2025-05-12 16:29:00 +02:00
Fjuro
dd64d557f2
Translated using Weblate: Czech (cs) by Fjuro <fjuro@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:13 +02:00
Liner Seven
cd0b961e3c
Translated using Weblate: Japanese (ja) by Liner Seven <linour7gmekiblo@gmail.com>
Currently translated at 100.0% (579 of 579 strings)

Translated using Weblate: Japanese (ja) by Liner Seven <linour7gmekiblo@gmail.com>

Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:13 +02:00
C. Rüdinger
57ec6a93ed
Translated using Weblate: German (de) by "C. Rüdinger" <Mail-an-CR@web.de>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: C. Rüdinger <Mail-an-CR@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:13 +02:00
Ceeee
0e752f1ef0
Translated using Weblate: German (de) by Ceeee <marius.romanus@gmx.de>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Ceeee <marius.romanus@gmx.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:12 +02:00
VfBFan
13166fce05
Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:12 +02:00
Igor Rückert
22af55fb6d
Translated using Weblate: Portuguese (Brazil) (pt_BR) by Igor Rückert <igorruckert@yahoo.com.br>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Igor Rückert <igorruckert@yahoo.com.br>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:12 +02:00
大王叫我来巡山
858edaaa4d
Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:12 +02:00
Максим Горпиніч
f2faeca949
Translated using Weblate: Ukrainian (uk) by Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Currently translated at 100.0% (579 of 579 strings)

Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2025-05-11 16:14:11 +02:00
linsui
9e51fa36e5 Merge branch 'upgradedebianvm' into 'master'
Use latest Bookworm images for makebuildserver

See merge request fdroid/fdroidserver!1651
2025-05-08 12:13:25 +00:00
Licaon_Kter
7924888e5a Use latest Bookworm images for makebuildserver 2025-05-08 12:13:25 +00:00
Michael Pöhn
b581d08b6f Merge branch 'optional_config' into 'master'
Make v2 localized config optional

See merge request fdroid/fdroidserver!1649
2025-04-28 11:14:40 +00:00
Jochen Sprickerhof
b83c1aace3
Make v2 localized config optional
Fixes:

Traceback (most recent call last):
  File "/home/fdroid/fdroidserver/fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/home/fdroid/fdroidserver/fdroidserver/__main__.py", line 222, in main
    raise e
  File "/home/fdroid/fdroidserver/fdroidserver/__main__.py", line 203, in main
    mod.main()
  File "/home/fdroid/fdroidserver/fdroidserver/update.py", line 2774, in main
    fdroidserver.index.make(archived_apps, archapks, repodirs[1], True)
  File "/home/fdroid/fdroidserver/fdroidserver/index.py", line 132, in make
    make_v2(
  File "/home/fdroid/fdroidserver/fdroidserver/index.py", line 728, in make_v2
    output["repo"] = v2_repo(repodict, repodir, archive)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/fdroid/fdroidserver/fdroidserver/index.py", line 686, in v2_repo
    repo["icon"] = config["archive" if archive else "repo"]["icon"]
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
KeyError: 'icon'
2025-04-28 08:38:54 +02:00
linsui
561da8f7d1 Merge branch 'gradle' into 'master'
gradle v8.14

See merge request fdroid/fdroidserver!1648
2025-04-26 07:11:12 +00:00
linsui
b93fc6f9da gradle v8.14 2025-04-26 14:41:27 +08:00
Michael Pöhn
265adadaba Merge branch 'include-stages-in-update.json' into 'master'
update: include stages timing info in update.json

See merge request fdroid/fdroidserver!1644
2025-04-23 17:38:27 +00:00
Hans-Christoph Steiner
2a33857fd0
update: include stages timing info in update.json
!1627 missed this, so stages only get included in running.json.  That means
the stages info is only visible while update is running, making it hard to
use.
2025-04-23 19:26:50 +02:00
Hans-Christoph Steiner
3b360f6b80 Merge branch 'repo_key_sha256-valid' into 'master'
lint: repo_key_sha256 to list of valid config keys

See merge request fdroid/fdroidserver!1643
2025-04-16 12:00:33 +00:00
Hans-Christoph Steiner
004103357b gitlab-ci: metadata_v0 test expects no config 2025-04-16 11:11:57 +00:00
Hans-Christoph Steiner
56338cd7d0 repo_key_sha256 to list of valid config keys
fdroidserver!287
2025-04-16 11:11:57 +00:00
Hans-Christoph Steiner
a03cfa3fc2 Merge branch 'patch-1' into 'master'
Clarify libmagic needs to be installed separately

See merge request fdroid/fdroidserver!1640
2025-04-15 16:22:22 +00:00
Benson Muite
c4d46a187f Clarify libmagic needs to be installed separately
See installation instructions at https://pypi.org/project/python-magic/
2025-04-12 14:54:36 +03:00
Hans-Christoph Steiner
692f79ec7d Merge branch 'verify-json-output' into 'master'
`fdroid verify` JSON output

See merge request fdroid/fdroidserver!1632
2025-04-10 15:52:41 +00:00
Hans-Christoph Steiner
17e5a59704 verify: generate <appid>.json files that list all reports 2025-04-10 15:41:46 +00:00
Hans-Christoph Steiner
029636ed61 verify: write verified.json in function to ease testing 2025-04-10 15:41:46 +00:00
Hans-Christoph Steiner
d34d051329 Merge branch 'checkupdate' into 'master'
checkupdates: always print remote message of git push

See merge request fdroid/fdroidserver!1636
2025-04-09 09:58:53 +00:00
linsui
2aba6fd324 checkupdates: always print remote message of git push 2025-04-09 17:48:11 +08:00
Hans-Christoph Steiner
f7cc4812a2 Merge branch 'gitlab-ci-refactor-to-rules' into 'master'
gitlab-ci: migrate to rules: syntax and split up linters into standalone jobs

See merge request fdroid/fdroidserver!1614
2025-04-09 07:31:18 +00:00
Hans-Christoph Steiner
9bcd13bfdd gitlab-ci: add "lint" pre-stage before default "test" stage 2025-04-09 07:19:50 +00:00
Hans-Christoph Steiner
7f67a882e7 gitlab-ci: only run Python-only jobs when .py files change 2025-04-09 07:19:50 +00:00
Hans-Christoph Steiner
6ad79e3c06 gitlab-ci: move bandit to its own job 2025-04-09 07:19:50 +00:00
Hans-Christoph Steiner
3e67bee037 gitlab-ci: move pylint to its own job 2025-04-09 07:19:50 +00:00
Hans-Christoph Steiner
3b9d39ac61 gitlab-ci: move shellcheck to own job fenced by changes: 2025-04-09 07:19:50 +00:00
Hans-Christoph Steiner
aa9cc14991 gitlab-ci: refactor to rules: and ditch old only: syntax
Adding workflow: is required, otherwise there would be duplicate
pipelines for all users in the @fdroid group.  There would be "branch
pipelines" and "merge request pipelines".  Confusingly, only jobs with
rules: get duplicated.
2025-04-09 07:19:50 +00:00
Hans-Christoph Steiner
07d499ce1f Merge branch 'checkupdate' into 'master'
checkupdates: adjust log level

See merge request fdroid/fdroidserver!1635
2025-04-09 07:01:34 +00:00
linsui
a13dd109d3 checkupdates: adjust log level 2025-04-09 14:51:27 +08:00
Hans-Christoph Steiner
3582a12f18 Merge branch 'clearer-srclibs' into 'master'
vcs_git: clearer error messages for checkrepo()

See merge request fdroid/fdroidserver!1634
2025-04-03 10:25:11 +00:00
Michael Pöhn
69f9f52ba2 drop error prefix when raising VCSException in case retrieving git revision failed 2025-04-03 10:24:46 +00:00
Michael Pöhn
046c527ee8 vcs_git: clearer error messages for checkrepo()
This updates error messages the help identify issues when loading srclibs
and fixes pushing srclibs into build vms/containers.
2025-04-03 10:24:46 +00:00
Michael Pöhn
0d88a94192 metadata: rename srcdir -> srclibs_dir for clarity 2025-04-03 10:24:46 +00:00
Hans-Christoph Steiner
e6cff099f2
delete file I mistakenly included 2025-04-01 11:41:46 +02:00
Hans-Christoph Steiner
bb7394ab3c Merge branch 'start-integrating' into 'master'
start integrating

See merge request fdroid/fdroidserver!1631
2025-03-31 15:34:14 +00:00
Hans-Christoph Steiner
a011b34b97 black format and use returncode directly without != 0 2025-03-31 11:27:13 +02:00
Hans-Christoph Steiner
9a8d80ee6b purge dead code: apk_signer_fingerprint_short 2025-03-31 11:09:07 +02:00
Hans-Christoph Steiner
ef4bbe4612 Merge branch 'use-codeclimate-for-linting-tests' into 'master'
ci: use GitLab Code Quality for linting tests

See merge request fdroid/fdroidserver!1443
2025-03-26 21:33:31 +00:00
proletarius101
90b82ea7e6 ci: use GitLab Code Quality for linting tests 2025-03-26 21:33:31 +00:00
Hans-Christoph Steiner
c98028136a
version 2.4.0 2025-03-25 12:13:57 +01:00
Hans-Christoph Steiner
9fb909b648
update CHANGELOG.md 2025-03-25 12:13:54 +01:00
Hans-Christoph Steiner
0cce48dc04
use black code format for locale/pick-complete-translations.py 2025-03-25 12:13:51 +01:00
Hans-Christoph Steiner
eef237de85
locale/pick-complete-translations.py: use stable sort order for MANIFEST.in 2025-03-25 12:13:47 +01:00
Hans-Christoph Steiner
0c867f908f
make -C locale update 2025-03-25 12:13:43 +01:00
Hans-Christoph Steiner
4cefec9333
fix missing comma in error message 2025-03-25 12:13:22 +01:00
Ihor Hordiichuk
d9046727e5
Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (578 of 578 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2025-03-25 11:23:22 +01:00
Hans-Christoph Steiner
01b948cae7 Merge branch 'publish-and-signatures-cleanup' into 'master'
run test_signatures.py in PUBLISH CI job; clean up signatures/publish tests

See merge request fdroid/fdroidserver!1624
2025-03-25 10:23:16 +00:00
Hans-Christoph Steiner
59474437b3 delete cruft test script 2025-03-25 10:23:00 +00:00
Hans-Christoph Steiner
a69340a1ea MANIFEST.in: case-insensitive ASCII byte value for stable sort
```
LC_ALL=C sort --ignore-case --stable --output=MANIFEST.in MANIFEST.in
```
2025-03-25 10:23:00 +00:00
Hans-Christoph Steiner
40be283c4a APK for testing maxSdkVersion handling
APK is org.bitbucket.tickytacky.mirrormirror_4.apk disassembled with
`apktool decode`, maxSdkVersion added, then reassembled with `apktool build`
2025-03-25 10:23:00 +00:00
Hans-Christoph Steiner
eef3188600 test_signatures: remove unneeded config from tests 2025-03-25 10:23:00 +00:00
Hans-Christoph Steiner
d024c8964f convert test_signatures.py to black code format 2025-03-25 10:23:00 +00:00
Hans-Christoph Steiner
8f351d8406 publish: convert to black code format 2025-03-25 10:23:00 +00:00
Hans-Christoph Steiner
68fad5c7f7 gitlab-ci: delete extraneous keystore key from PUBLISH job
repo_keyalias is set in tests/config.yml, so this does not need to fake the
fdroiddata value.
2025-03-25 10:23:00 +00:00
Hans-Christoph Steiner
5150c721f4 verify_apk_signature: work when options is not set
Then test_signatures.py can run on the PUBLISH CI job.
2025-03-25 10:23:00 +00:00
Michael Pöhn
8d17b67642 Merge branch 'update-stages-in-status-json' into 'master'
update: add execution stages to status JSON

See merge request fdroid/fdroidserver!1627
2025-03-25 09:07:22 +00:00
Hans-Christoph Steiner
acbab69722 update: add execution stages to status JSON
This should help us profile what takes so long in `fdroid update`.  It also
gives feedback so that people can see how close to done it is, or where it
failed.

This is based on how incremental status JSON works for `fdroid build`.
2025-03-24 11:14:40 +01:00
Hans-Christoph Steiner
51487192b9 Merge branch 'fix-found-dexdump' into 'master'
fix _dexdump_found() in test_scanner.py !1621

See merge request fdroid/fdroidserver!1625
2025-03-24 08:24:46 +00:00
Hans-Christoph Steiner
58609aa9f0 fix _dexdump_found() in test_scanner.py !1621
find_sdk_tools_cmd() will throw an exception if it can't find the tool, not
return None.
2025-03-24 08:24:01 +00:00
Hans-Christoph Steiner
0b192a7694 Merge branch 'weblate' into 'master'
update source strings

See merge request fdroid/fdroidserver!1626
2025-03-23 21:00:40 +00:00
Hans-Christoph Steiner
b29ee09fda
locale: full update of source strings 2025-03-23 21:49:34 +01:00
Aindriú Mac Giolla Eoin
7cf7f4b14e
Translated using Weblate: Irish (ga) by Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ga/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:05 +01:00
LucasMZ
050aec31e2
Translated using Weblate: Portuguese (Brazil) (pt_BR) by LucasMZ <git@lucasmz.dev>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: LucasMZ <git@lucasmz.dev>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:04 +01:00
Edgars Andersons
f0cd68a9fb
Translated using Weblate: Latvian (lv) by Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>
Currently translated at 11.0% (69 of 623 strings)

Co-authored-by: Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/lv/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:04 +01:00
Besnik Bleta
868eb64de6
Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.7% (609 of 623 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:04 +01:00
VfBFan
51457a6f8e
Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:04 +01:00
大王叫我来巡山
b95d60f24b
Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:04 +01:00
Fjuro
3c9fa6761e
Translated using Weblate: Czech (cs) by Fjuro <fjuro@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:03 +01:00
Champ0999
4e18b38d8f
Translated using Weblate: Italian (it) by Champ0999 <champ0999@users.noreply.hosted.weblate.org>
Currently translated at 89.7% (559 of 623 strings)

Co-authored-by: Champ0999 <champ0999@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:03 +01:00
Максим Горпиніч
cb69c4fea3
Translated using Weblate: Ukrainian (uk) by Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2025-03-23 11:56:03 +01:00
Hans-Christoph Steiner
2b8640b95a Merge branch 'scanner-suppress-verbose' into 'master'
scanner: only output "X problems found" if errors or --verbose

See merge request fdroid/fdroidserver!1622
2025-03-21 08:45:52 +00:00
Hans-Christoph Steiner
35d205a9b9 scanner: only output "X problems found" if errors or --verbose
UNIX/POSIX standard behavior is to output nothing at all if a command
succeeds.  This suppresses "0 problems found", unless the user requests it.
2025-03-21 08:45:23 +00:00
Hans-Christoph Steiner
78efc16fc2 scanner: suppress verbose/confusing log output on success
This additionally asserts that the right log output happened.
2025-03-21 08:45:23 +00:00
Hans-Christoph Steiner
88f4a36f38 Merge branch 'no-more-stats-dir' into 'master'
remove last uses of stats/ dir

See merge request fdroid/fdroidserver!1620
2025-03-20 14:42:09 +00:00
Hans-Christoph Steiner
4b9100ae80 publish: remove last use of stats/ dir
This file can be treated like the other index files in repo/. This also has
the advantage that it will automatically get synced by @CiaranG's existing
sync scripts.
2025-03-20 15:08:32 +01:00
Hans-Christoph Steiner
38378ddfb7 rename v1_sort_packages to sort_package_versions 2025-03-20 15:08:32 +01:00
Hans-Christoph Steiner
8565a97465 rename functions and variables to reflect stats/ going away 2025-03-20 15:08:32 +01:00
Hans-Christoph Steiner
b911fb9ed9
make -C locale/ update 2025-03-20 15:06:59 +01:00
Hans-Christoph Steiner
c17a9253ff
version 2.4 alpha 2 2025-03-20 15:04:20 +01:00
Hans-Christoph Steiner
88108c8381
update CHANGELOG.md 2025-03-20 15:04:17 +01:00
Hans-Christoph Steiner
80edad8947 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1623
2025-03-20 13:43:15 +00:00
Edgars Andersons
46939ec4ba
Translated using Weblate: Latvian (lv) by Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>
Currently translated at 10.7% (67 of 621 strings)

Co-authored-by: Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/lv/
Translation: F-Droid/F-Droid Server
2025-03-20 12:48:20 +00:00
Максим Горпиніч
efd79866a7
Translated using Weblate: Ukrainian (uk) by Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Currently translated at 100.0% (621 of 621 strings)

Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2025-03-20 12:48:20 +00:00
VfBFan
f6011ae304
Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (621 of 621 strings)

Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>

Currently translated at 99.5% (618 of 621 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-03-20 12:48:19 +00:00
大王叫我来巡山
d67a7c1b04
Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (621 of 621 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2025-03-20 12:48:19 +00:00
Igor Rückert
af147855f6
Translated using Weblate: Portuguese (Brazil) (pt_BR) by Igor Rückert <igorruckert@yahoo.com.br>
Currently translated at 100.0% (621 of 621 strings)

Co-authored-by: Igor Rückert <igorruckert@yahoo.com.br>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2025-03-20 12:48:18 +00:00
Hosted Weblate
dad3299810
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2025-03-20 12:48:17 +00:00
Hans-Christoph Steiner
ada4631f15 Merge branch 'dexdump-arch-skip' into 'master'
handle arches that are missing dexdump in tests

See merge request fdroid/fdroidserver!1621
2025-03-20 12:48:05 +00:00
Hans-Christoph Steiner
ec2b847e03 handle arches that are missing dexdump in tests
dexdump is only available for certain CPU architectures.  Google binaries
are for amd64 and arm64.  Debian binaries are for amd64, arm64, armhf,
i386, and riscv64.  That leaves out armel, ppc64el, s390x, loong64, etc.
where pure Python code runs perfectly fine.
2025-03-20 12:42:59 +00:00
Hans-Christoph Steiner
f09d859281 Merge branch 'fix-1125' into 'master'
index: fail if user sets mirrors:isPrimary wrong

Closes #1125

See merge request fdroid/fdroidserver!1617
2025-03-20 11:13:36 +00:00
Hans-Christoph Steiner
20569217d9 index: fail if user sets mirrors:isPrimary wrong
Really, this is not meant to be set by the user in the config.  But if they
add something harmless that'll be ignored anyway, it seems that throwing an
error is too much.  So only throw the error if it is set wrongly.
2025-03-20 11:13:09 +00:00
Hans-Christoph Steiner
8e39f82eb9 Merge branch 'bun' into 'master'
scanner: add bun.lock as lock file of package.json

See merge request fdroid/fdroidserver!1615
2025-03-20 07:30:02 +00:00
linsui
5e28cd367f scanner: add bun.lock as lock file of package.json 2025-03-20 07:29:09 +00:00
Hans-Christoph Steiner
0af61d8fe1 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1618
2025-03-19 20:20:38 +00:00
Hans-Christoph Steiner
6fbb2fec9c
make -C locale update 2025-03-19 17:57:41 +01:00
Kristoffer Grundström
4448aeb550
Translated using Weblate: Swedish (sv) by Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Currently translated at 19.2% (118 of 613 strings)

Co-authored-by: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Ricky Tigg
65b015302d
Translated using Weblate: Finnish (fi) by Ricky Tigg <ricky.tigg@gmail.com>
Currently translated at 5.0% (31 of 613 strings)

Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fi/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Hosted Weblate
273b763aed
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Hans-Christoph Steiner
c62094274c
Translated using Weblate: Tamil (ta) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 98.6% (604 of 612 strings)

Co-authored-by: Hans-Christoph Steiner <hans@eds.org>
Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ta/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Kristoffer Grundström
29487d8c3a
Translated using Weblate: Swedish (sv) by Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Currently translated at 12.5% (77 of 612 strings)

Co-authored-by: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Marcus skoding
560d7fd200
Translated using Weblate: Swedish (sv) by Marcus skoding <ggd7cnc9m@mozmail.com>
Currently translated at 12.5% (77 of 612 strings)

Translated using Weblate: Swedish (sv) by Marcus skoding <ggd7cnc9m@mozmail.com>

Currently translated at 12.2% (75 of 612 strings)

Co-authored-by: Marcus skoding <ggd7cnc9m@mozmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Kristoffer Grundström
f76114ba5c
Translated using Weblate: Swedish (sv) by Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Currently translated at 12.2% (75 of 612 strings)

Co-authored-by: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Kuldeep Singh
40daf5e153
Added translation using Weblate: Punjabi (pa) by Kuldeep Singh <kuldeepburjbhalaike@gmail.com>
Co-authored-by: Kuldeep Singh <kuldeepburjbhalaike@gmail.com>
2025-03-19 17:53:54 +01:00
தமிழ்நேரம்
72ca7ebc4f
Translated using Weblate: Tamil (ta) by தமிழ்நேரம் <anishprabu.t@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ta/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Hosted Weblate
db7afbedf5
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Bård Sigurd Møller
e50ce950a3
Translated using Weblate: Norwegian Nynorsk (nn) by Bård Sigurd Møller <git@bsmoller.no>
Currently translated at 0.6% (4 of 611 strings)

Added translation using Weblate: Norwegian Nynorsk (nn) by Bård Sigurd Møller <git@bsmoller.no>

Co-authored-by: Bård Sigurd Møller <git@bsmoller.no>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nn/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Edgars Andersons
7f207496bb
Translated using Weblate: Latvian (lv) by Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>
Currently translated at 7.0% (43 of 612 strings)

Translated using Weblate: Latvian (lv) by Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>

Currently translated at 6.8% (42 of 611 strings)

Co-authored-by: Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/lv/
Translation: F-Droid/F-Droid Server
2025-03-19 17:53:54 +01:00
Hans-Christoph Steiner
edd88cc701
version 2.4 alpha 1 2025-03-19 17:45:15 +01:00
Hans-Christoph Steiner
a01e91da6c
update CHANGELOG.md 2025-03-19 17:45:12 +01:00
Hans-Christoph Steiner
e23b196a0f
run tests/refresh-SUSS_DEFAULT.py 2025-03-19 17:45:08 +01:00
Hans-Christoph Steiner
52045f9819 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1616
2025-03-19 16:24:40 +00:00
Golubev Alexander
ca082daaea Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: Golubev Alexander <fatzer2@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
大王叫我来巡山
9429f0917b Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
Максим Горпиніч
c5d5ab3a79 Translated using Weblate: Ukrainian (uk) by Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
LucasMZ
26860dbf2f Translated using Weblate: Portuguese (Brazil) (pt_BR) by LucasMZ <git@lucasmz.dev>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: LucasMZ <git@lucasmz.dev>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
ssantos
0907755efe Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (613 of 613 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 100.0% (613 of 613 strings)

Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>

Currently translated at 99.8% (612 of 613 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
WaldiS
2a36726798 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 100.0% (613 of 613 strings)

Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>

Currently translated at 99.8% (612 of 613 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
Liner Seven
c0da9df12f Translated using Weblate: Japanese (ja) by Liner Seven <linour7gmekiblo@gmail.com>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
Aindriú Mac Giolla Eoin
bb5d7a0e91 Translated using Weblate: Irish (ga) by Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ga/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
Lula Bye
dedc92b467 Translated using Weblate: French (fr) by Lula Bye <translate.cylinder716@passinbox.com>
Currently translated at 97.3% (597 of 613 strings)

Co-authored-by: Lula Bye <translate.cylinder716@passinbox.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
Nicolás Pérez
99b8f76487 Translated using Weblate: Spanish (es) by Nicolás Pérez <ccnicolasperez@gmail.com>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: Nicolás Pérez <ccnicolasperez@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
VfBFan
d3eff85c51 Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
Fjuro
fcbbf3bea3 Translated using Weblate: Czech (cs) by Fjuro <fjuro@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
pitroig
2b8c957d12 Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 100.0% (613 of 613 strings)

Co-authored-by: pitroig <ona@riseup.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
Translation: F-Droid/F-Droid Server
2025-03-19 17:13:35 +01:00
Hans-Christoph Steiner
a95f4f11b0
pick-complete-translations.py: use new Weblate API 2025-03-19 17:13:29 +01:00
Hans-Christoph Steiner
b416d9b604 Merge branch 'skip-test-for-unsupported-arch' into 'master'
skip tests that won't run on a given CPU architecture

See merge request fdroid/fdroidserver!1330
2025-03-19 14:56:18 +00:00
Hans-Christoph Steiner
0b3fe26524
skip tests that won't run on a given CPU architecture 2025-03-19 15:47:06 +01:00
Hans-Christoph Steiner
025828932d purge test exceptions for Python < 3.9, that's the min version 2025-03-19 11:11:36 +01:00
Michael Pöhn
17a4912e83 Merge branch 'gitlab-ci-signing-server' into 'master'
gitlab-ci: "PUBLISH" job to test in the signing server's setup

See merge request fdroid/fdroidserver!1613
2025-03-12 16:48:36 +00:00
Hans-Christoph Steiner
c5f442616e gitlab-ci: "PUBLISH" job to test in the signing server's setup 2025-03-12 17:27:26 +01:00
Hans-Christoph Steiner
2f4e0f47a1 signatures: make from . import net optional
This eliminates the need to have python3-requests installed on the signing
server.  This was missed in 031ae1103e
2025-03-12 17:27:26 +01:00
Hans-Christoph Steiner
3e6cb67e69 Merge branch 'signing-server' into 'master'
complete workflow for porting the signing server for config.yml

See merge request fdroid/fdroidserver!1610
2025-03-12 13:11:21 +00:00
Hans-Christoph Steiner
d06e33697a lint: missing valid config key: apk_signing_key_block_list 2025-03-12 13:37:17 +01:00
Hans-Christoph Steiner
9d147c6b6b test_common: remove self.tmpdir and use standard self.testdir pat 2025-03-12 13:37:17 +01:00
Hans-Christoph Steiner
858068c64b only show "unsafe perms on config.yml" when secrets are present
This should make for fewer false positives.
2025-03-12 13:37:17 +01:00
Hans-Christoph Steiner
36007d50e5 AbstractBaseTest class for sharing setUp and tearDown in tests 2025-03-12 13:37:17 +01:00
Hans-Christoph Steiner
f269232b96 hide error messages in tests that are meant to fail 2025-03-12 13:37:17 +01:00
Hans-Christoph Steiner
8cf1297e2c clarify config data types and structures 2025-03-12 13:37:17 +01:00
Hans-Christoph Steiner
081e02c109 expand {env: foo} in any place a string can be
`keypass: {env: keypass}` has been in use in production repos for
years.  That is not anything new. It makes it possible to maintain
_config.yml_ publicly even when it needs secrets.  This change makes
sure it is possible to use {env: foo} syntax anywhere where a string
value is valid. The "list of dicts" values can be str, list of str or
list of dicts with str.

Before the {env: keypass} syntax, the actual password was just inline
in the config file.  Before this commit, it was only possible to use
{env: key} syntax in simple, string-only configs, e.g. from
examples/config.yml:
2025-03-12 13:37:17 +01:00
Hans-Christoph Steiner
031ae1103e function-local imports to limit deps for publish/signindex/gpgsign
This eliminates the need to have these installed on the signing server:

* python3-qrcode
* python3-requests

The signing server currently uses a git clone to run _fdroidserver_ and
`apt-get install` for dependencies.  This leaves "qrcode" in
"install_requires" since moving it to "extras_require" would break
`fdroid update` and `fdroid nightly` for anything that does
`pip install fdroidserver`:

https://gitlab.com/eighthave/fdroidserver/-/jobs/9386520037
2025-03-12 13:37:13 +01:00
Hans-Christoph Steiner
864ccb560b Merge branch 'pydocfix' into 'master'
🪐 fix pydoc link in hooks/pre-commit

See merge request fdroid/fdroidserver!1612
2025-03-12 09:17:58 +00:00
Michael Pöhn
14e13b4f4a
🪐 fix pydoc link in hooks/pre-commit
updated pydoc linter flags based on how it's used in .gitlab-ci.yml
2025-03-12 10:04:46 +01:00
Michael Pöhn
1521d5c659 Merge branch 'YAML-1.2' into 'master'
standardize config on ruamel.yaml with a YAML 1.2 config

See merge request fdroid/fdroidserver!1611
2025-03-10 08:34:06 +00:00
Hans-Christoph Steiner
3ab2baf542 _yaml.config_dump() for writing out config
This outputs YAML in a string that is suitable for use in regexps
and string replacements, as well as complete files.  It is therefore
explicitly set up to avoid writing out headers and footers.
2025-03-10 08:49:18 +01:00
Hans-Christoph Steiner
2f47938dbf standardize config on ruamel.yaml with a YAML 1.2 config
This is a key piece of the ongoing `PUBLISH` _config.yml_ migration. There was uneven implementation of which YAML parser to use, and that could lead to bugs where one parser might read a value one way, and a different parser will read the value a different way. I wanted to be sure that YAML 1.2 would always work.

This makes all code that handles config files use the same `ruamel.yaml` parsers.  This only touches other usages of YAML parsers when there is overlap.  This does not port all of _fdroidserver_ to `ruamel.yaml` and YAML 1.2.  The metadata files should already be YAML 1.2 anyway.

# Conflicts:
#	fdroidserver/lint.py
2025-03-10 08:48:58 +01:00
Hans-Christoph Steiner
53b62415d3 load lint_licenses where it is needed to avoid circular imports
This is the only thing that common.py imports from lint.py.
2025-03-07 14:52:23 +01:00
Jochen Sprickerhof
16fb0fbe91 Merge branch 'purge-config.py' into 'master'
purge config.py

See merge request fdroid/fdroidserver!1607
2025-03-05 14:42:01 +00:00
Hans-Christoph Steiner
3cc6c09ffc use common var for 'config.yml', standarize on UTF-8
This makes it easy to track all the places that use config.yml, and
hopefully makes things feel cleaner.  This also standardizes all places
where config.yml is written out to use UTF-8 as the file encoding.

This also includes a lot of black code format fixes.
2025-03-05 12:20:32 +01:00
Hans-Christoph Steiner
1f96a84f9a
gitlab-ci: add yamllint job 2025-02-26 17:28:01 +01:00
Hans-Christoph Steiner
642499ec94
purge config.py handling, it is no longer supported 2025-02-26 17:27:58 +01:00
Hans-Christoph Steiner
cb9533bd74 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.13

See merge request fdroid/fdroidserver!1609
2025-02-26 12:39:57 +00:00
fdroid-bot
a37c409c74 gradle v8.13 2025-02-26 10:19:22 +00:00
Michael Pöhn
0f5a1a0bfb Merge branch 'lint-config.yml' into 'master'
Lint config.yml

See merge request fdroid/fdroidserver!1606
2025-02-26 10:18:47 +00:00
Hans-Christoph Steiner
1ee9ea8cf9 lint: implement for config.yml 2025-02-24 19:07:27 +01:00
Hans-Christoph Steiner
695d97e103
fix: "no new line character at the end of file"
If yamllint is installed `fdroid lint` will run it, and what will output
the  (new-line-at-end-of-file) warning message.
2025-02-24 18:13:13 +01:00
Hans-Christoph Steiner
56865f9ba6
checkupdates: remove auto_author: config, it is no longer used
checkupdates-runner sets the required values anyway.
fe3cb890db/.gitlab-ci.yml (L35)
2025-02-24 11:58:56 +01:00
Hans-Christoph Steiner
ecdf47d893 update: do not crash on {env: } in paths in config.yml 2025-02-22 23:32:29 +01:00
Hans-Christoph Steiner
4d66f30faf Merge branch 'skip-test-on-macOS' into 'master'
skip test with mystery failure only on macOS

See merge request fdroid/fdroidserver!1605
2025-02-14 10:15:17 +00:00
Hans-Christoph Steiner
f92542c7ea skip test with mystery failure only on macOS
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1587#note_2273747610

This happened when this test was a shell script as well:
https://gitlab.com/fdroid/fdroidserver/-/blob/2.3.5/tests/run-tests#L1244
2025-02-14 11:12:22 +01:00
Hans-Christoph Steiner
dde1942520 Merge branch 'migrate-integration-tests-to-python' into 'master'
Migrate integration tests from Bash to Python

See merge request fdroid/fdroidserver!1587
2025-02-13 20:40:35 +00:00
Hans-Christoph Steiner
1694966455 gpg requires a short path to the socket to talk to gpg-agent 2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
efda0f5d6c skip gpgsign test if gpg is not availabe on the PATH 2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
b7c5233668 test_integration: stop trying to handle proxy errors
I don't think it is possible to automatically handle those cases, because
proxy setups can be so widely varied and can have privacy ramifications.
The person running the test who hits proxy errors will need to handle them
manually.
2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
efce0ce0e4 use shared test function to replicate .testfiles setup
* It should include a subdir named after the test case.
* self.testdir is the common var name for this.
* tmp_repo is not a repo/ subdir, but instead the root of the whole repo
2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
820abbc876 'archive/' dir might have been locally created 2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
7a21c24e45 test_integration: add docstring comments 2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
b933043ca1 new helpers: get_output_extension() & get_release_apk_filename()
This also moves to the standard var names: appid & versionCode
2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
8b52740636 use for f in files var name; avoid using keyword as var name 2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
1720a51e9e replace := walrus operator usages 2025-02-13 17:56:30 +01:00
mindston
1cbd68af84 Ignore bandit insecure usage of tmp dir warnings 2025-02-13 17:56:30 +01:00
mindston
565ae02678 Remove macOS exceptions 2025-02-13 17:56:30 +01:00
mindston
fa4ff197aa Force C.UTF-8 locale for messages instead of en_US.UTF-8 2025-02-13 17:56:30 +01:00
mindston
aeb6c612e9 Set configuration variables for tests that run Git 2025-02-13 17:56:30 +01:00
mindston
96f9d7fdf8 Fix androguard import for versions <4 2025-02-13 17:56:30 +01:00
mindston
385832c1fd Fix usage of removed $WORKSPACE variable in run-tests 2025-02-13 17:56:30 +01:00
mindston
62b4af4f19 Fix UTC timezone import to work on Python <3.11 2025-02-13 17:56:30 +01:00
mindston
9201b3ca94 Migrate integration tests from Bash to Python 2025-02-13 17:56:30 +01:00
Hans-Christoph Steiner
49697d1479 Merge branch 'error-on-duplicate-files' into 'master'
index: error if duplicate package files are in repo

See merge request fdroid/fdroidserver!1602
2025-02-13 16:56:08 +00:00
Hans-Christoph Steiner
f7dc89e9ba index: error if duplicate package files are in repo
Looks like the ~index-v2 work removed this error case, and the old bash
integration test case failed to catch it.  This reestablishes this error.

@mindston's refactoring of the old bash test suite caught this issue, e.g.
!1587
2025-02-12 18:38:05 +01:00
Jochen Sprickerhof
6df9d0ecba Merge branch 'autoname' into 'master'
checkupdates: sort the order of dirs when finding autoname

See merge request fdroid/fdroidserver!1601
2025-02-07 17:26:17 +00:00
linsui
a7e56598d6 checkupdates: sort the order of dirs when finding autoname 2025-02-07 22:16:18 +08:00
Hans-Christoph Steiner
9215f5e4b1 Merge branch 'triple-t' into 'master'
update.py: fix triple-t metadata extract when there is no subdir

See merge request fdroid/fdroidserver!1599
2025-01-27 13:49:11 +00:00
linsui
2b725a5966 update.py: fix triple-t metadata extract when there is no subdir 2025-01-27 13:47:36 +00:00
Hans-Christoph Steiner
7c376209e0 Merge branch 'testcommon-rename-to-shared_test_code' into 'master'
tests: rename testcommon module to shared_test_code

See merge request fdroid/fdroidserver!1583
2025-01-27 10:21:58 +00:00
Hans-Christoph Steiner
66d220bd9f tests: rename testcommon module to shared_test_code
This name always confuses me, since there is also test_common.py. And this
module is not actually a test suite, even though it starts with "test".
This also makes for better tab completion, e.g.

python3 -m unittest tests/te[Tab] -> tests/test_
2025-01-27 10:11:19 +00:00
linsui
f9431aaf0f Merge branch 'gradle' into 'master'
gradle v8.12.1

See merge request fdroid/fdroidserver!1598
2025-01-26 04:20:00 +00:00
linsui
0c6e976a01 gradle v8.12.1 2025-01-26 12:09:54 +08:00
Hans-Christoph Steiner
6e1c1f4cc0
make -C locale update 2025-01-21 17:03:56 +01:00
Hans-Christoph Steiner
f719efcba0
version 2.3.5 2025-01-21 16:43:22 +01:00
Hans-Christoph Steiner
e45709beef
update CHANGELOG.md 2025-01-21 16:43:16 +01:00
Hans-Christoph Steiner
0930937939 Merge branch 'ban-apksigner-v33' into 'master'
ban apksigner v33, it has bugs verifying APKs with v3/v3.1 sigs

See merge request fdroid/fdroidserver!1593
2025-01-21 15:00:24 +00:00
Hans-Christoph Steiner
2ac925a249 ban apksigner v33, it has bugs verifying APKs with v3/v3.1 sigs 2025-01-21 15:00:23 +00:00
Hans-Christoph Steiner
afd1a89ca5 Merge branch 'updatedebianimagetrick' into 'master'
Fix vagrant image download issue

See merge request fdroid/fdroidserver!1595
2025-01-21 14:08:09 +00:00
Licaon_Kter
f3102d81b1 Fix vagrant image download issue 2025-01-21 15:57:12 +02:00
Hans-Christoph Steiner
c8c2b1be78 Merge branch 'updatedebianimage' into 'master'
Use latest Bookworm images for makebuildserver

See merge request fdroid/fdroidserver!1594
2025-01-21 13:49:50 +00:00
Licaon_Kter
9e03dba11e Use latest Bookworm images for makebuildserver 2025-01-21 13:36:56 +02:00
Hans-Christoph Steiner
1fc8053936 Merge branch 'fix-ci' into 'master'
two CI fixes: remove broken arch job and ignore one checkupdates test on macOS

See merge request fdroid/fdroidserver!1592
2025-01-21 09:34:12 +00:00
Hans-Christoph Steiner
9b5a67340e checkupdates: skip test_get_upstream_main_branch on macOS
This test checks the detection of the default initial branch. It is a hard
thing to test since different platform configurations have different
defaults.  checkupdates is basically only used on GNU/Linux anyway.

Here's the failure:
https://gitlab.com/fdroid/fdroidserver/-/jobs/8896420261
2025-01-20 15:37:54 +01:00
Hans-Christoph Steiner
594099a10c gitlab-ci: remove arch_pip_install job
https://gitlab.com/fdroid/fdroidserver/-/jobs/8898887965

It broke and no one seems to want to maintain it.
2025-01-20 15:28:25 +01:00
Hans-Christoph Steiner
f14c3e38c8 Merge branch 'merge_weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1591
2025-01-20 14:04:35 +00:00
大王叫我来巡山
d588afd3f9 Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Максим Горпиніч
eecfcbe547 Translated using Weblate: Ukrainian (uk) by Максим Горпиніч <mgorpinic2005@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Максим Горпиніч <mgorpinic2005@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Reno Tx
06eb722b13 Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Reno Tx <renotx@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Besnik Bleta
d969181b55 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.7% (598 of 612 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Andrey
49d18e494b Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Andrey <andrey@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Golubev Alexander
a9404dbb42 Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Golubev Alexander <fatzer2@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Dmitry
89f44e0fed Translated using Weblate: Russian (ru) by Dmitry <dmitrydmitry761@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Dmitry <dmitrydmitry761@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
ssantos
a3f9b244d9 Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
LucasMZ
787612b93f Translated using Weblate: Portuguese (Brazil) (pt_BR) by LucasMZ <git@lucasmz.dev>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: LucasMZ <git@lucasmz.dev>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Liner Seven
d742fc4f65 Translated using Weblate: Japanese (ja) by Liner Seven <linour7gmekiblo@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Aindriú Mac Giolla Eoin
f78492e8ad Translated using Weblate: Irish (ga) by Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ga/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Armand Camponovo
7720402d72 Translated using Weblate: French (fr) by Armand Camponovo <contact@camarm.dev>
Currently translated at 96.7% (592 of 612 strings)

Co-authored-by: Armand Camponovo <contact@camarm.dev>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Sylvain Pichon
eb616643c4 Translated using Weblate: French (fr) by Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Currently translated at 96.5% (591 of 612 strings)

Translated using Weblate: French (fr) by Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>

Currently translated at 95.7% (586 of 612 strings)

Co-authored-by: Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
gallegonovato
11574b717e Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
VfBFan
6e0b9c94b2 Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Fjuro
c1f0914476 Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
pitroig
8831217ca1 Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: pitroig <ona@riseup.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
Translation: F-Droid/F-Droid Server
2025-01-20 14:53:42 +01:00
Hans-Christoph Steiner
3000cfcd04
pick-complete-translations.py: auto cherry-pick complete langs 2025-01-20 14:53:08 +01:00
Hans-Christoph Steiner
d4b348bd93 Merge branch 'nettests_localhost' into 'master'
test_net: figure out the proper IP protocol for localhost

See merge request fdroid/fdroidserver!1589
2025-01-20 10:34:01 +00:00
Simon Chopin
89a282c12e test_net: figure out the proper IP protocol for localhost
On some systems, localhost is only defined for 127.0.0.1 (e.g. Ubuntu
and Debian containers). However, there is code that hardcodes possible
values for localhost, making it possible to open an IPv6 socket for
localhost.

On those systems, the socket will be open but urllib3 will resolve
localhost *only* to 127.0.0.1, thus failing miserably to connect.

To resolve the situation, rather than defaulting to IPv6 we actually
resolve localhost and use the socket family of the first result. On my
current system (upcoming Ubuntu Plucky) if localhost=::1 is defined in
/etc/hosts it will come up as the first result, if not 127.0.0.1 will.

V2: Use self.port rather than a forgotten hardcoded port.

Fixes: f01628ca6b "fix localhost network tests on systems with IPv6"
2025-01-20 10:33:49 +00:00
Hans-Christoph Steiner
2716f93e79 Merge branch 'verify-handle-corrupt-json' into 'master'
verify: handle corrupt verified.json

See merge request fdroid/fdroidserver!1580
2025-01-20 09:48:32 +00:00
Hans-Christoph Steiner
5b1b1d12a1 verify: handle corrupt verified.json
verified.json can get quite large on verification.f-droid.org, and for some
unknown reason, it sometimes corrupts it when writing it out.  All the data
is already available in all the other JSON files, so this just automatically
reconstructs it.  Its a hack, but it took me much less time than I've
already spent trying to troubleshoot why it writes out corrupt verified.json.
2025-01-20 09:48:20 +00:00
Jochen Sprickerhof
4c88b19bae Merge branch 'apk-v1-signature-regex-fix' into 'master'
match the full file name when looking for the v1 signature block

See merge request fdroid/fdroidserver!1588
2025-01-15 15:24:37 +00:00
Hans-Christoph Steiner
f5a6aa2cbf bandit no longer includes B410 lxml check
https://github.com/PyCQA/bandit/pull/1212
2025-01-15 15:07:24 +01:00
Hans-Christoph Steiner
20caa6fa1c match the full file name when looking for the v1 signature block
ZipFile.namelist() produces a string per file.  The filename could contain
newline chars, including at the beginning and end.  ^$ in regex matches
around newline chars.  \A\Z matches the beginning/end of the full string.

This is exactly the same as obfusk's r'\AMETA-INF/(?s:.)*\.(DSA|EC|RSA)\Z'
but in a readable format that is also easily searchable, and standard for
this code base.

https://github.com/obfusk/fdroid-fakesigner-poc/blob/master/fdroidserver-regex.patch

#1251
2025-01-15 14:45:35 +01:00
linsui
0bb240fac6 Merge branch 'gradle' into 'master'
update to gradle v8.12

See merge request fdroid/fdroidserver!1584
2024-12-22 07:11:51 +00:00
linsui
c70684ea25 update to gradle v8.12 2024-12-22 15:00:47 +08:00
Hans-Christoph Steiner
3b64dcee7a
version 2.3.4 2024-12-12 17:43:43 +01:00
Hans-Christoph Steiner
eb49351b81
update CHANGELOG.md 2024-12-12 17:43:19 +01:00
Hans-Christoph Steiner
dfbf79ef2b Merge branch 'fix-net-tests-on-ipv6' into 'master'
fix localhost network tests on systems with IPv6

See merge request fdroid/fdroidserver!1581
2024-12-12 15:20:24 +00:00
Hans-Christoph Steiner
f01628ca6b fix localhost network tests on systems with IPv6
Thanks to themill from Debian for this suggestion:

> https://docs.python.org/3/library/socket.html#socket.socket makes me
> think socket.socket has done an ipv4 only but urilib3 will do
> whatever localhost resolves to.  I suspect the test code should be
> using socket.create_server - there's an example at
> https://docs.python.org/3/library/socket.html#socket.create_server
2024-12-12 15:19:58 +00:00
Jochen Sprickerhof
99c3ea9966 Merge branch 'extlib' into 'master'
lint: only error out on missing extlib on versions not archived

See merge request fdroid/fdroidserver!1579
2024-12-12 14:43:42 +00:00
linsui
f93e30f1e9 lint: only error out on missing extlib on versions not archived 2024-12-12 22:33:36 +08:00
linsui
9b59d5cf48 update: extract archive policy calculation to common 2024-12-12 22:20:38 +08:00
Hans-Christoph Steiner
173e45f248
make -C locale update 2024-12-11 14:39:27 +01:00
Hans-Christoph Steiner
c631ca7142
version 2.3.3 2024-12-11 12:51:34 +01:00
Hans-Christoph Steiner
b408d56c2b
update CHANGELOG.md for 2.3.3 2024-12-11 12:51:03 +01:00
Hans-Christoph Steiner
d826178892 Merge branch 'verify--clean-up-verified' into 'master'
verify: --clean-up-verified to rm all files except the JSON report

See merge request fdroid/fdroidserver!1574
2024-12-11 11:48:39 +00:00
Hans-Christoph Steiner
5deb936e86 verify: --clean-up-verified to rm all files except the JSON report 2024-12-11 11:39:02 +00:00
Hans-Christoph Steiner
56814824ee new function get_src_tarball_name; deprecates getsrcname
Some places in the code that need this, like verify.py, do not have
app and build instances, but do have appid and versionCode.  And
fdroidserver/build.py is going away.
2024-12-11 11:39:02 +00:00
Hans-Christoph Steiner
78865a7b2b Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1578
2024-12-11 11:35:28 +00:00
VfBFan
ba0069aaa2 Translated using Weblate: German (de) by VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Licaon Kter
66704e1a4c Translated using Weblate: Romanian (ro) by Licaon Kter <licaon.kter@protonmail.com>
Currently translated at 95.4% (583 of 611 strings)

Co-authored-by: Licaon Kter <licaon.kter@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Golubev Alexander
2d12f8c731 Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: Golubev Alexander <fatzer2@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
WaldiS
25daaea989 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 99.3% (607 of 611 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Reno Tx
cd25bd6ce7 Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: Reno Tx <renotx@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Eryk Michalak
4a5d2c4422 Translated using Weblate: Polish (pl) by Eryk Michalak <gnu.ewm@protonmail.com>
Currently translated at 97.3% (595 of 611 strings)

Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Shuuji TAKAHASHI (shuuji3)
07b83ed101 Translated using Weblate: Japanese (ja) by "Shuuji TAKAHASHI (shuuji3)" <shuuji3@gmail.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: Shuuji TAKAHASHI (shuuji3) <shuuji3@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Ecron
8658f21282 Translated using Weblate: Catalan (ca) by Ecron <ecron_89@hotmail.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: Ecron <ecron_89@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
தமிழ்நேரம்
067a216f00 Translated using Weblate: Tamil (ta) by தமிழ்நேரம் <anishprabu.t@gmail.com>
Currently translated at 100.0% (611 of 611 strings)

Translated using Weblate: Tamil (ta) by தமிழ்நேரம் <anishprabu.t@gmail.com>

Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ta/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Ldm Public
6671720d68 Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 95.9% (586 of 611 strings)

Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>

Currently translated at 95.9% (586 of 611 strings)

Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>

Currently translated at 95.4% (583 of 611 strings)

Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>

Currently translated at 95.0% (581 of 611 strings)

Co-authored-by: Ldm Public <ldmpub@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Lzebulon
e8aff6a755 Translated using Weblate: French (fr) by Lzebulon <lzebulon@crans.org>
Currently translated at 95.9% (586 of 611 strings)

Translated using Weblate: French (fr) by Lzebulon <lzebulon@crans.org>

Currently translated at 95.4% (583 of 611 strings)

Translated using Weblate: French (fr) by Lzebulon <lzebulon@crans.org>

Currently translated at 95.0% (581 of 611 strings)

Translated using Weblate: French (fr) by Lzebulon <lzebulon@crans.org>

Currently translated at 94.9% (580 of 611 strings)

Co-authored-by: Lzebulon <lzebulon@crans.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2024-12-11 12:25:21 +01:00
Michael Pöhn
36fafaf2cc Merge branch 'replace-deprecated-pkg_resources' into 'master'
support Python 3.13

See merge request fdroid/fdroidserver!1576
2024-12-11 10:28:02 +00:00
Hans-Christoph Steiner
bc118484e4 index.xml: XML escaping from Python < 3.13 which stopped converting "
index.xml is for old clients that are stuck in the past forever.  So the
format should not change at all.  Python 3.13 changed minidom so it no
longer converts " to an XML entity.
154477be72
2024-12-06 16:15:48 +01:00
Hans-Christoph Steiner
6d40e8fa27
extras_require: python-magic is preferred when libmagic is available 2024-12-06 12:26:45 +01:00
Hans-Christoph Steiner
46dba20ba3
setup.py: update classifiers 2024-12-06 12:26:42 +01:00
Hans-Christoph Steiner
5fde2f4d03
replace deprecated pkg_resources.get_distribution() from setuptools
This should fix the CI error for macOS and reduce technical debt.
https://gitlab.com/fdroid/fdroidserver/-/jobs/8542884186
2024-12-06 12:26:37 +01:00
Jochen Sprickerhof
30e308ac8a Merge branch 'stop-overwriting-index-png' into 'master'
update: only gen index.png when making index.html

See merge request fdroid/fdroidserver!1575
2024-12-04 12:25:06 +00:00
Hans-Christoph Steiner
ad9b0c3294 update: only gen index.png when making index.html
* https://f-droid.org/repo does not use the index.png at all
* Some repos want to set their own index.png rather than the QR code
2024-12-04 13:13:30 +01:00
Hans-Christoph Steiner
11aee5b325
version 2.3.2 2024-11-26 22:17:08 +01:00
Hans-Christoph Steiner
620e9f9331
update CHANGELOG.md for 2.3.2 2024-11-26 22:17:05 +01:00
Hans-Christoph Steiner
194d4b63d0 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1573
2024-11-26 21:13:32 +00:00
தமிழ்நேரம்
a45893addf Translated using Weblate: Tamil (ta) by தமிழ்நேரம் <anishprabu.t@gmail.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ta/
Translation: F-Droid/F-Droid Server
2024-11-26 22:03:01 +01:00
Joan Pujolar
dbd6034738 Translated using Weblate: Catalan (ca) by Joan Pujolar <joan.pujolar@gmail.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: Joan Pujolar <joan.pujolar@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
Translation: F-Droid/F-Droid Server
2024-11-26 22:03:01 +01:00
Ldm Public
222f19d167 Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 93.7% (573 of 611 strings)

Co-authored-by: Ldm Public <ldmpub@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2024-11-26 22:03:01 +01:00
Peter Dave Hello
a8c354a2d0 Translated using Weblate: Chinese (Traditional Han script) (zh_Hant) by Peter Dave Hello <hsu@peterdavehello.org>
Currently translated at 81.9% (501 of 611 strings)

Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
Translation: F-Droid/F-Droid Server
2024-11-26 22:03:01 +01:00
Danial Behzadi
19bb2bf1aa Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>
Currently translated at 18.1% (111 of 611 strings)

Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>

Currently translated at 9.9% (61 of 611 strings)

Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>

Currently translated at 9.9% (61 of 611 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fa/
Translation: F-Droid/F-Droid Server
2024-11-26 22:03:01 +01:00
Hugo Carvalho
9ce877acdb Translated using Weblate: Portuguese (pt) by Hugo Carvalho <hugokarvalho@hotmail.com>
Currently translated at 100.0% (611 of 611 strings)

Translated using Weblate: Portuguese (pt) by Hugo Carvalho <hugokarvalho@hotmail.com>

Currently translated at 97.3% (595 of 611 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by Hugo Carvalho <hugokarvalho@hotmail.com>

Currently translated at 100.0% (611 of 611 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by Hugo Carvalho <hugokarvalho@hotmail.com>

Currently translated at 97.3% (595 of 611 strings)

Co-authored-by: Hugo Carvalho <hugokarvalho@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2024-11-26 22:03:01 +01:00
gfbdrgng
0b40c04422 Translated using Weblate: Russian (ru) by gfbdrgng <hnaofegnp@hldrive.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: gfbdrgng <hnaofegnp@hldrive.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2024-11-26 22:03:01 +01:00
Reno Tx
4ea9cdfa93
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 96.8% (592 of 611 strings)

Co-authored-by: Reno Tx <renotx@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
Translation: F-Droid/F-Droid Server
2024-11-26 19:01:59 +01:00
Michael Pöhn
e52a07d63a Merge branch 'install-fixes' into 'master'
install: fix breakage in downloading from Maven Central, GitHub Releases

See merge request fdroid/fdroidserver!1572
2024-11-26 15:15:59 +00:00
Hans-Christoph Steiner
8fc340aaca install: fix download dir when fetching from GitHub Releases 2024-11-26 15:31:47 +01:00
Hans-Christoph Steiner
8c81033ea3 FDroidPopenBytes: do not crash if options are not set
This makes writing test cases a lot easier. For example:

======================================================================
ERROR: test_devices (tests.test_install.InstallTest.test_devices)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/hans/code/fdroid/server/tests/test_install.py", line 31, in test_devices
    devices = fdroidserver.install.devices()
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hans/code/fdroid/server/fdroidserver/install.py", line 225, in devices
    p = common.SdkToolsPopen(['adb', "devices"])
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hans/code/fdroid/server/fdroidserver/common.py", line 2921, in SdkToolsPopen
    return FDroidPopen([abscmd] + commands[1:],
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hans/code/fdroid/server/fdroidserver/common.py", line 3024, in FDroidPopen
    result = FDroidPopenBytes(commands, cwd, envs, output, stderr_to_stdout)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hans/code/fdroid/server/fdroidserver/common.py", line 2987, in FDroidPopenBytes
    if output and options.verbose:
                  ^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'verbose'
2024-11-26 15:20:06 +01:00
Hans-Christoph Steiner
d2cc020336 install: fix broken URL building logic for Maven Central
The append logic was wrong, so it was trying to download URLs like:
https://repo.maven.apache.org/maven2/org/fdroid/fdroid/F-Droid/maven-metadata.xml/org/fdroid/fdroid/F-Droid/1.20.0/F-Droid-1.20.0.apk

Which should be:
https://repo.maven.apache.org/maven2/org/fdroid/fdroid/F-Droid/1.20.0/F-Droid-1.20.0.apk

Can be manually tested using:
`test_download_fdroid_apk=1 python -m unittest -k test_download_fdroid_apk_from_maven`
2024-11-26 15:14:18 +01:00
Hans-Christoph Steiner
a2d27ba15e
install: remove forgotten print() 2024-11-26 11:17:46 +01:00
Michael Pöhn
a9c6eeb753 Merge branch 'fix-1543' into 'master'
buildserver/provision-apt-get-install: install python3-magic for scanner

See merge request fdroid/fdroidserver!1571
2024-11-25 18:43:01 +00:00
Hans-Christoph Steiner
9b2a4a90a7 buildserver/provision-apt-get-install:
This was forgotten in !1543

ansible-role-install-fdroidserver-dependencies!11
2024-11-25 19:21:07 +01:00
Hans-Christoph Steiner
fe29f56238
version 2.3.1 2024-11-25 17:38:02 +01:00
Hans-Christoph Steiner
a26995e534
update CHANGELOG.md for 2.3.0 and 2.3.1 2024-11-25 17:35:39 +01:00
Hans-Christoph Steiner
25bd35a166 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1570
2024-11-25 15:42:28 +00:00
大王叫我来巡山
865c7a33bb Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
Besnik Bleta
e61ee39ee4 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.5% (596 of 611 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
gfbdrgng
e162278143 Translated using Weblate: Russian (ru) by gfbdrgng <hnaofegnp@hldrive.com>
Currently translated at 98.3% (601 of 611 strings)

Co-authored-by: gfbdrgng <hnaofegnp@hldrive.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
dedakir923
4b53f4b1d3 Translated using Weblate: Portuguese (Brazil) (pt_BR) by dedakir923 <dedakir923@exoular.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: dedakir923 <dedakir923@exoular.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
LucasMZ
04f8058dfc Translated using Weblate: Portuguese (Brazil) (pt_BR) by LucasMZ <git@lucasmz.dev>
Currently translated at 97.7% (597 of 611 strings)

Co-authored-by: LucasMZ <git@lucasmz.dev>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
Aindriú Mac Giolla Eoin
46dd2227e9 Translated using Weblate: Irish (ga) by Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ga/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
Sylvain Pichon
8ee15b9cac Translated using Weblate: French (fr) by Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Currently translated at 92.7% (567 of 611 strings)

Co-authored-by: Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
Sylvain Pichon
13db3f7018 Translated using Weblate: French (fr) by Sylvain Pichon <service@spichon.fr>
Currently translated at 92.6% (566 of 611 strings)

Translated using Weblate: French (fr) by Sylvain Pichon <service@spichon.fr>

Currently translated at 92.1% (563 of 611 strings)

Co-authored-by: Sylvain Pichon <service@spichon.fr>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
gallegonovato
a9c9825727 Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
VfBFan
696f68a99d Translated using Weblate: German (de) by VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
Fjuro
bb911bf4f3 Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (611 of 611 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-11-25 16:30:51 +01:00
Jochen Sprickerhof
67e27cc706 Merge branch 'optional-deps-for-macOS' into 'master'
install biplist and pycountry by default on macOS

See merge request fdroid/fdroidserver!1569
2024-11-25 14:39:34 +00:00
Hans-Christoph Steiner
1b0fabe8f5 install biplist and pycountry by default on macOS
* biplist is only used for Apple iOS IPA files.
* pycountry is only used for linting countryCodes in mirror configs.

Both of these are included via the Debian packaging, where those packages
and updates are more vetted.  Homebrew for macOS makes it very difficult to
include optional dependencies, so this includes the optional dependencies
via distutils' method.
2024-11-25 15:28:43 +01:00
Jochen Sprickerhof
cd29dd84d2 Merge branch 'drop_imghdr' into 'master'
scanner: replace deprecated imghdr with libmagic/puremagic

See merge request fdroid/fdroidserver!1543
2024-11-25 13:57:06 +00:00
Jochen Sprickerhof
8a5359ab3f scanner: replace deprecated imghdr with libmagic/puremagic
libmagic's Python bindings detect more types, puremagic is pure Python.

imghdr was dropped in Python 3.13.

This reverts commit 3bc246ccad.
2024-11-25 13:26:38 +01:00
Hans-Christoph Steiner
432618eb03 Merge branch 'master' into 'master'
post release translation updates

See merge request fdroid/fdroidserver!1568
2024-11-21 20:45:45 +00:00
Hans-Christoph Steiner
4d3feb93e3
make -C locale update 2024-11-21 21:35:26 +01:00
Doctorredits_here
732a945fa3
Translated using Weblate: Indonesian (id) by Doctorredits_here <alkaf.alkaf2018@tutamail.com>
Currently translated at 16.8% (100 of 592 strings)

Co-authored-by: Doctorredits_here <alkaf.alkaf2018@tutamail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/id/
Translation: F-Droid/F-Droid Server
2024-11-21 21:35:23 +01:00
Cool Man
069f75b3d5
Translated using Weblate: Arabic (ar) by Cool Man <mcool3273@gmail.com>
Currently translated at 5.5% (33 of 592 strings)

Co-authored-by: Cool Man <mcool3273@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ar/
Translation: F-Droid/F-Droid Server
2024-11-21 21:35:19 +01:00
Hans-Christoph Steiner
6ff1c9733c
include tests/__init__.py in dist tarball 2024-11-21 21:35:16 +01:00
Hans-Christoph Steiner
d69028e1b1 Merge branch 'master' into 'master'
release 2.3.0

See merge request fdroid/fdroidserver!1567
2024-11-21 16:01:50 +00:00
Hans-Christoph Steiner
eae5ae3ae8
version 2.3.0 2024-11-21 16:49:01 +01:00
Hans-Christoph Steiner
37dc6c121d run tests/refresh-SUSS_DEFAULT.py 2024-11-21 15:23:29 +01:00
Hans-Christoph Steiner
2a6d584713 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.11.1

See merge request fdroid/fdroidserver!1566
2024-11-21 12:48:17 +00:00
fdroid-bot
50b686b33b gradle v8.11.1 2024-11-21 12:26:23 +00:00
linsui
9203941b78 Merge branch 'fix-checkupdates-one-MR-per-app' into 'master'
checkupdates: reuse per-app branches when making merge requests; plus bug fixes

See merge request fdroid/fdroidserver!1551
2024-11-21 12:25:47 +00:00
Hans-Christoph Steiner
0ec9cd6921 checkupdates: only update app branches if metadata file changed 2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
e3f724681a checkupdates: parse default branch from upstream remote 2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
fd15ac9276 checkupdates: mark as Draft when only changing Current Version
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1551#note_2190155816
2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
c97503b5f3 checkupdates: get default branch from git config 2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
fbe9152ee5 checkupdates: commit summary is merge request title 2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
cd8d4ef88b checkupdates: reuse per-app branches when making merge requests
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1551#note_2206085258
2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
20ff302e89 checkupdates: remove duplicate push in push_commits() 2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
17c480d299 checkupdates: make iter_commits only include commits in appid branch
iter_commits() follows `git rev-list` (which selects different commits
than `git diff`).  With ... notation, `git rev-list` will return all
the commits that are not shared by the two branches.  This needs only
the commits in the right side of the comparison (like how `git diff`
does it).
2024-11-21 12:15:14 +00:00
Hans-Christoph Steiner
f34a132132 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1564
2024-11-20 16:42:27 +00:00
Phantomwise
fb880ad14f Translated using Weblate: French (fr) by Phantomwise <phantomwise67@protonmail.com>
Currently translated at 94.4% (559 of 592 strings)

Co-authored-by: Phantomwise <phantomwise67@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2024-11-20 17:31:53 +01:00
Hugo Carvalho
82e47bd392 Translated using Weblate: Portuguese (Portugal) (pt_PT) by Hugo Carvalho <hugokarvalho@hotmail.com>
Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Hugo Carvalho <hugokarvalho@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2024-11-20 17:31:53 +01:00
linsui
a72be3e415 Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by linsui <linsui@inbox.lv>
Currently translated at 100.0% (592 of 592 strings)

Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: linsui <linsui@inbox.lv>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-11-20 17:31:53 +01:00
ygsk10
fcf4875c76 Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by ygsk10 <yogaskung@protonmail.ch>
Currently translated at 100.0% (592 of 592 strings)

Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by ygsk10 <yogaskung@protonmail.ch>

Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: ygsk10 <yogaskung@protonmail.ch>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-11-20 17:31:53 +01:00
Hans-Christoph Steiner
a8e31796d8 Merge branch 'wasm' into 'master'
scanner: disallow wasm file

See merge request fdroid/fdroidserver!1562
2024-11-20 12:49:15 +00:00
linsui
56d5f360ed scanner: disallow wasm file 2024-11-20 19:10:30 +08:00
Jochen Sprickerhof
e137aa9c44 Merge branch 'refactor-tests' into 'master'
Refactor TestCase files into python modules

See merge request fdroid/fdroidserver!1561
2024-11-20 09:58:58 +00:00
Hans-Christoph Steiner
487269c667 tests: standardize on VerboseFalseOptions as mock 2024-11-20 10:46:21 +01:00
SilentGhost
7ff32bc4b0 Refactor TestCase files into python modules
Convert all TestCase files into standard python modules to be run and
discovered by unittest.
2024-11-20 10:37:52 +01:00
Hans-Christoph Steiner
4d6682bc70 update: fix _strip_and_copy_image to work with pathlib 2024-11-19 20:27:29 +01:00
Hans-Christoph Steiner
65119b3193 rename to test_gradlew-fdroid to match Python unittest naming 2024-11-19 20:27:29 +01:00
Hans-Christoph Steiner
00e9b7dcd7 Merge branch 'color-output' into 'master'
add --color arg for optional colorized log output

See merge request fdroid/fdroidserver!1552
2024-11-19 13:04:38 +00:00
Hans-Christoph Steiner
290587f449 add ColorFormatter class for optional colorized log output 2024-11-19 13:04:23 +00:00
Hans-Christoph Steiner
7e8e2403cd black formatting 2024-11-19 13:04:23 +00:00
Hans-Christoph Steiner
801d6f9566 Merge branch 'hg-gotorevisionx' into 'master'
Fix local build scenario with Mercurial repositories

See merge request fdroid/fdroidserver!1560
2024-11-18 21:12:23 +00:00
relan
118c7fc783 Remove "hg purge" after "hg update"
1. "hg purge" works only on interactive shell (see #1015).
2. No need to clean anything because we did this before "hg update".
2024-11-18 21:12:04 +00:00
relan
87909fae74 Remove ignored files on gotorevisionx for hg
Other revisions can change the list of ignored files and if we don't
remove them, switching to another revision can fail.
2024-11-18 21:12:04 +00:00
Hans-Christoph Steiner
3bd2bc69d3 Merge branch 'fix-file-exists' into 'master'
Vagrantfile: fix undefined method `exists?' error

See merge request fdroid/fdroidserver!1558
2024-11-18 21:09:22 +00:00
relan
7661518775 Vagrantfile: fix undefined method `exists?' error
This method has been deprecated for a long time, now it's gone.
2024-11-18 21:09:12 +00:00
Hans-Christoph Steiner
d7813b2abc Merge branch 'fix-chown-dot' into 'master'
Fix warning from "chown" about the syntax

See merge request fdroid/fdroidserver!1559
2024-11-18 21:08:35 +00:00
relan
5b57ced0a6 Fix warning from "chown" about the syntax
The warning:

    chown: warning: '.' should be ':': ‘vagrant.vagrant’
2024-11-14 21:45:46 +03:00
Hans-Christoph Steiner
069f088b38 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.11

See merge request fdroid/fdroidserver!1556
2024-11-13 07:24:20 +00:00
fdroid-bot
dde2947ad2 gradle v8.11 2024-11-13 06:40:37 +00:00
Hans-Christoph Steiner
c42edd4163 Merge branch 'fdroid-install-updates' into 'master'
`fdroid install` updates

See merge request fdroid/fdroidserver!1554
2024-11-13 06:40:00 +00:00
Hans-Christoph Steiner
1be808c728 include net.TestCase in dist tarball
Now that `fdroid install` is something that is expected to work as part of
any package, the test suite should also include the net tests, which
`fdroid install` relies on.
2024-11-08 17:59:06 +02:00
Hans-Christoph Steiner
ad66baa266 net: skip test in CI that mysteriously fails there
I couldn't figure out why it is failing there.
2024-11-08 17:49:15 +02:00
Hans-Christoph Steiner
85e585161f net: use localhost instead of IP for both sides of test setup 2024-11-08 17:49:15 +02:00
Hans-Christoph Steiner
90eeb63809 net: ignore proxy env vars, tests only use localhost
Proxy settings via environment variables can interfere with this
test. The requests library will automatically pick up proxy
settings from environment variables. Proxy settings can force the
local connection over the proxy, which might not support that,
then this fails with an error like 405 or others.
2024-11-08 17:49:14 +02:00
Hans-Christoph Steiner
05e091804d install: verify sig for all downloaded APKs if apksigner is installed 2024-11-08 17:12:42 +02:00
Hans-Christoph Steiner
addb7b9acc install: echo characters that the user inputs at the prompt 2024-11-08 17:12:42 +02:00
Hans-Christoph Steiner
b9b4ca9778 install: download any app from f-droid.org 2024-11-08 17:12:42 +02:00
Hans-Christoph Steiner
dfbf54bbba Merge branch 'rewordfrosting' into 'master'
Reword extra blocks

See merge request fdroid/fdroidserver!1555
2024-11-08 15:09:05 +00:00
Licaon_Kter
96ed60fda3 Reword extra blocks 2024-11-08 15:09:05 +00:00
Hans-Christoph Steiner
d666c030f7 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1553
2024-11-05 14:31:18 +00:00
Hans-Christoph Steiner
69d2c874b6
enable new languages: Irish (ga) and Japanese (ja) 2024-11-05 15:20:56 +01:00
Peter Dave Hello
46df7d87aa Translated using Weblate: Chinese (Traditional Han script) (zh_Hant) by Peter Dave Hello <hsu@peterdavehello.org>
Currently translated at 82.0% (486 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
2024-11-05 15:18:40 +01:00
WaldiS
7ee9882be5 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 99.6% (590 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
2024-11-05 15:18:40 +01:00
Golubev Alexander
7da3357d47 Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
2024-11-05 15:18:40 +01:00
Fat Potato
eec7addc16 Translated using Weblate: Portuguese (Portugal) (pt_PT) by Fat Potato <mjwany48@gmail.com>
Currently translated at 98.3% (582 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
2024-11-05 15:18:40 +01:00
ssantos
d6a004da56 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
2024-11-05 15:18:40 +01:00
Eryk Michalak
f37381e0ff Translated using Weblate: Polish (pl) by Eryk Michalak <gnu.ewm@protonmail.com>
Currently translated at 99.3% (588 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
2024-11-05 15:18:40 +01:00
Lily Chou
cc2088d7bf Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by Lily Chou <lily-develop@outlook.com>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2024-11-05 15:18:40 +01:00
pitroig
4a6bb9e064 Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
5771cfe9f4 Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 99.6% (590 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
770d31ce3e Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 48.3% (286 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
aae4d7f08a Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 25.8% (153 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
dd98d45698 Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 25.6% (152 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
f3151bfb3e Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 25.3% (150 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
14df3c3ec5 Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 25.1% (149 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
12b816421f Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 25.0% (148 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
97bdfcbe7c Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 20.4% (121 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
ba5ed94494 Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 18.2% (108 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
f9ddddf1c6 Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 11.3% (67 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
Fjuro
f3303f88cc Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2024-11-05 15:18:39 +01:00
Fjuro
df496419d4 Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2024-11-05 15:18:39 +01:00
Reno Tx
75995b3915 Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-11-05 15:18:39 +01:00
Suguru Hirahara
c5b8d2823d Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 10.4% (62 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
2024-11-05 15:18:39 +01:00
VfBFan
18d0fad4d1 Translated using Weblate: German (de) by VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (592 of 592 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
2024-11-05 15:18:39 +01:00
Wang
97eab1ada9 Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by Wang <wang@plasma.ac.cn>
Currently translated at 97.9% (580 of 592 strings)

Co-authored-by: Wang <wang@plasma.ac.cn>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
Fjuro
e2ad739628 Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
Ihor Hordiichuk
11a7c8d1ce Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
ssantos
0babd55762 Translated using Weblate: German (de) by ssantos <ssantos@web.de>
Currently translated at 99.6% (590 of 592 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
Aindriú Mac Giolla Eoin
9e092582c2 Translated using Weblate: Irish (ga) by Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Currently translated at 100.0% (592 of 592 strings)

Added translation using Weblate: Irish (ga) by Aindriú Mac Giolla Eoin <aindriu80@gmail.com>

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ga/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
Jakub Boukal
3e7bce38f8 Translated using Weblate: Czech (cs) by Jakub Boukal <www.bagr@gmail.com>
Currently translated at 99.1% (587 of 592 strings)

Co-authored-by: Jakub Boukal <www.bagr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
Nazar
8676ab800f Translated using Weblate: Ukrainian (uk) by Nazar <balaraz@tuta.io>
Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Nazar <balaraz@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
VfBFan
8e0722d490 Translated using Weblate: German (de) by VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Currently translated at 98.4% (583 of 592 strings)

Co-authored-by: VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
Besnik Bleta
3d923a07c1 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.1% (575 of 592 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
大王叫我来巡山
3f71f87900 Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 94.7% (561 of 592 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-11-05 15:18:39 +01:00
Oğuz Ersen
6e70263dcb Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguz@ersen.moe>
Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2024-11-05 15:17:21 +01:00
Hans-Christoph Steiner
643d8da709 Merge branch 'fdroid-install' into 'master'
install: expand subcommand to be able to fetch F-Droid.apk and install it

See merge request fdroid/fdroidserver!1546
2024-11-05 13:13:01 +00:00
Hans-Christoph Steiner
acae5f1ac9 tests/run-tests: stop skipping install.TestCase 2024-11-01 00:57:45 +01:00
Hans-Christoph Steiner
27e3b5066a install: add --no-privacy-mode as an argument 2024-11-01 00:34:03 +01:00
Hans-Christoph Steiner
4d22a7f67f install: Y/n prompt, --yes, --no controls downloading F-Droid.apk 2024-11-01 00:34:03 +01:00
Hans-Christoph Steiner
560472e4e5 install: download from GitHub Releases 2024-11-01 00:16:13 +01:00
Hans-Christoph Steiner
1eb6516f16 install: add IPNS download method 2024-11-01 00:09:58 +01:00
Hans-Christoph Steiner
3da48e64bc install: use Maven Central as additional source 2024-11-01 00:09:58 +01:00
Hans-Christoph Steiner
b77eba824b install: convert to common.get_config() 2024-11-01 00:09:54 +01:00
Hans-Christoph Steiner
3a3417f6f8 install: add --privacy-mode flag 2024-10-31 23:49:34 +01:00
Hans-Christoph Steiner
c7bc8d0fea install: function to fetch, verify and install the F-Droid.apk 2024-10-31 23:49:30 +01:00
Hans-Christoph Steiner
681d705da0 install: reliable algorithm for picking devices from adb output
Versions of this algorithm are used elsewhere:
* https://github.com/openatx/adbutils/blob/master/adbutils/_adb.py
2024-10-31 21:55:20 +01:00
Hans-Christoph Steiner
f1b110942a net: let localhost RetryServer tests run with an HTTP proxy active 2024-10-31 21:55:20 +01:00
Hans-Christoph Steiner
59fcfa5dec index: download_repo_index_v2() uses mirrors
test_download_repo_index_v2_url_parsing is no longer needed, since all the
things it tested are now handled in test_download_repo_index_v2
2024-10-31 21:55:18 +01:00
Hans-Christoph Steiner
2e3f6d273a net: download_using_mirrors() to download like fdroidclient does 2024-10-31 21:54:47 +01:00
Hans-Christoph Steiner
49dcc53076 install: download_fdroid_apk() to fetch the recommended initial APK 2024-10-31 21:54:47 +01:00
Hans-Christoph Steiner
56bed02a29 install: download_apk() fetchs APKs by appid based on the index 2024-10-31 21:54:45 +01:00
Jochen Sprickerhof
97b156a963 Merge branch 'drop_known_apks' into 'master'
Drop stats/known_apks.txt

See merge request fdroid/fdroidserver!1547
2024-10-31 11:02:09 +00:00
Hans-Christoph Steiner
ab28c442e2 KnownApks: remove dead code 2024-10-31 09:20:26 +00:00
Hans-Christoph Steiner
173c1d67f4 KnownApks: appid is no longer needed at all, remove it. 2024-10-31 09:20:26 +00:00
Hans-Christoph Steiner
5032207da0 add basic tests of KnownApks mechanism
The tests in tests/run-tests do provide coverage for these cases, but it is
not explicit, but just comes from testing that the index file has not
changed.  These tests make it explicit what is being tested.
2024-10-31 09:20:26 +00:00
Jochen Sprickerhof
81c0c9d4aa Drop stats/known_apks.txt
Use repo/index-v2.json instead.
Also fix deprecated datetime.utcnow().
2024-10-31 09:20:26 +00:00
Hans-Christoph Steiner
83a3227235 Merge branch 'fix-checkupdates-one-MR-per-app' into 'master'
checkupdates: --merge_request commits to branch named after appid

See merge request fdroid/fdroidserver!1550
2024-10-30 19:03:14 +00:00
Hans-Christoph Steiner
25779e8b32 checkupdates: --merge_request commits to branch named after appid 2024-10-30 18:35:34 +01:00
Hans-Christoph Steiner
21cb8ac5e0 Merge branch 'frosting' into 'master'
scanner: scan frosting blocks in binary scanner

See merge request fdroid/fdroidserver!1548
2024-10-30 15:26:23 +00:00
linsui
e3eb597331 scanner: scan frosting blocks in binary scanner 2024-10-30 15:16:32 +00:00
linsui
5c32d5bb38 Merge branch 'checkupdates-merge-request' into 'master'
checkupdates: --merge-request flag for single app runs then a MR

See merge request fdroid/fdroidserver!1149
2024-10-30 14:44:28 +00:00
Hans-Christoph Steiner
9a34590e95 checkupdates: make merge-request per appid on push 2024-10-30 14:43:45 +00:00
Hans-Christoph Steiner
66a340fe89 checkupdates: add --verbose progress to push_commits() 2024-10-30 14:43:45 +00:00
Hans-Christoph Steiner
206f07364b checkupdates: remove appid branches that have been merged
To avoid having thousands of branches on checkupdatess-bot's remote, this
cleans up any remote branches that are pointing to commit that has been
fully merged.
2024-10-30 14:43:45 +00:00
Hans-Christoph Steiner
78b368f88b enforce black code format for tests/checkupdates.TestCase 2024-10-30 14:43:45 +00:00
Hans-Christoph Steiner
e03915e391 deploy: ensure progress is instantiated before trying to use it 2024-10-30 14:43:45 +00:00
Hans-Christoph Steiner
4c225f02d2 checkupdates: push_commits() to push auto-branch when new commits 2024-10-30 14:43:45 +00:00
Hans-Christoph Steiner
a9db97d214 Merge branch 'catalog2' into 'master'
scanner: catalog: get catalog from parent dirs

See merge request fdroid/fdroidserver!1540
2024-10-30 13:51:12 +00:00
linsui
24dc3baadf scanner: catalog: relax VERSION_CATALOG_REGEX
There may be other blocks in dependencyResolutionManagement
2024-10-20 21:21:28 +08:00
linsui
4c3dd9c76c scanner: catalog: get catalog from parent dirs
When walking through the repo, there may be another settings.gradle in a
sub project with a different catalog. In the subdir the catalog of the
sub project shuold be used and in other subdir the catalog of the root
project should be used.
2024-10-20 21:21:28 +08:00
Hans-Christoph Steiner
399ac608c7 Merge branch 'apkcache_no_checksum' into 'master'
Use mtime and file size for apkcache

See merge request fdroid/fdroidserver!1542
2024-10-18 10:50:57 +00:00
Jochen Sprickerhof
3544d5195d Use mtime and file size for apkcache
This reduces the update time significantly as we no longer compute the
sha256 for every apk.
2024-10-18 10:41:15 +00:00
Hans-Christoph Steiner
1e919a6e19 Merge branch 'doc_repo_web_base_url' into 'master'
Document repo_web_base_url

See merge request fdroid/fdroidserver!1178
2024-10-15 16:36:02 +00:00
Jochen Sprickerhof
de2f05e4da
Document repo_web_base_url 2024-10-15 18:31:56 +02:00
Hans-Christoph Steiner
5fbd5ed2d1 Merge branch 'move-mirror-script' into 'master'
mv mirror push script to fdroid-bootstrap-buildserver

See merge request fdroid/fdroidserver!1545
2024-10-11 09:44:11 +00:00
Hans-Christoph Steiner
40c6b7d9cf mv mirror push script to fdroid-bootstrap-buildserver
This script is only part of the production _buildserver_, so it should
be managed by the Ansible setup for the production _buildserver_.

fdroid-bootstrap-buildserver!26
2024-10-11 09:44:03 +00:00
Jochen Sprickerhof
ae42710d33 Merge branch 'flutter-triple-t' into 'master'
Consider subdir for Flutter app triple-t metadata discover

See merge request fdroid/fdroidserver!1541
2024-10-10 12:51:16 +00:00
linsui
deabd7bdc0 Consider subdir for Flutter app triple-t metadata discover 2024-10-10 12:50:59 +00:00
Hans-Christoph Steiner
f446be6c0c Merge branch 'gradlew_plugin' into 'master'
gradlew: fix plugin version

See merge request fdroid/fdroidserver!1544
2024-10-09 10:03:38 +00:00
linsui
eadfe415b0 gradlew: fix plugin version 2024-10-09 00:48:47 +08:00
Jochen Sprickerhof
b9ff024775 Merge branch 'read_metadata' into 'master'
Read only metadata of apps given on the command line

See merge request fdroid/fdroidserver!1037
2024-10-06 08:35:05 +00:00
Jochen Sprickerhof
15d3a3612d
Drop duplicated code (already done in get_metadata_files) 2024-10-06 10:25:19 +02:00
Jochen Sprickerhof
4d0a21f336
Use vercodes in read_metadata interface
read_metadata is only called in read_app_args with an argument. As
vercodes is already there, drop the duplicate call.
2024-10-06 10:25:19 +02:00
Jochen Sprickerhof
8ab1d53318
Read only metadata of apps given on the command line 2024-10-06 10:25:19 +02:00
linsui
66018d3f09 Merge branch 'catalog' into 'master'
scanner: catalog: dependency declaration can be declared as a simple string

See merge request fdroid/fdroidserver!1536
2024-09-27 16:33:58 +00:00
linsui
2ceec6b9d6 scanner: catalog: dependency declaration can be declared as a simple string 2024-09-27 14:28:55 +00:00
Hans-Christoph Steiner
1323751835 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.10.2

See merge request fdroid/fdroidserver!1538
2024-09-25 11:08:17 +00:00
fdroid-bot
2a13d6d400 gradle v8.10.2 2024-09-25 10:58:29 +00:00
Hans-Christoph Steiner
ba91b71d60 Merge branch 'ipfs-cid' into 'master'
Only check for ipfs_cid when doing fdroid update

See merge request fdroid/fdroidserver!1503
2024-09-25 10:57:55 +00:00
g0t mi1k
5f7203ddf2 Only check for ipfs_cid when doing fdroid update 2024-09-25 11:44:05 +01:00
Hans-Christoph Steiner
680554c1c6 Merge branch 'licaon-kter-master-patch-50256' into 'master'
Use latest Bookworm images for makebuildserver

See merge request fdroid/fdroidserver!1534
2024-09-23 19:04:58 +00:00
Licaon_Kter
17a051329e Use latest Bookworm images for makebuildserver 2024-09-23 19:04:42 +00:00
Hans-Christoph Steiner
8c4583b04e Merge branch 'catalog' into 'master'
scanner: support libs.versions.toml

Closes #1168

See merge request fdroid/fdroidserver!1526
2024-09-23 15:03:25 +00:00
linsui
eff0ef48f4 scanner: support libs.versions.toml 2024-09-23 16:35:27 +08:00
linsui
528760acc8 scanner.TestCase: format 2024-09-23 16:28:50 +08:00
Hans-Christoph Steiner
0d148d58e1 Merge branch 'appid-args-should-not-end-with-colon' into 'master'
throw error when CLI appid args end with a : but no Version Code

See merge request fdroid/fdroidserver!1522
2024-09-23 08:21:31 +00:00
Hans-Christoph Steiner
0d5c7516f2 throw error when CLI appid args end with a : but no Version Code
This is already the behavior in read_app_args(), but wasn't implemented in
read_pkg_args() yet.
2024-09-23 08:21:21 +00:00
Hans-Christoph Steiner
21e91564a0 Merge branch 'ci-debian-testing-libcloud' into 'master'
gitlab-ci: include libcloud for tests

See merge request fdroid/fdroidserver!1533
2024-09-23 08:16:31 +00:00
Hans-Christoph Steiner
2b9cb9cf3e gitlab-ci: include libcloud for tests 2024-09-23 10:13:07 +02:00
Hans-Christoph Steiner
a57a612982 Merge branch 'remove-flattr' into 'master'
Remove all mentions of Flattr

See merge request fdroid/fdroidserver!1530
2024-09-23 07:59:08 +00:00
Leo Heitmann Ruiz
0cee694c43 Remove all mentions of Flattr 2024-09-23 07:59:08 +00:00
Hans-Christoph Steiner
96ec2da0e7 Merge branch 'fix-scanner-tests-failing-with-refresh' into 'master'
scanner: always use built-in ruleset when running tests

See merge request fdroid/fdroidserver!1532
2024-09-23 07:57:57 +00:00
Hans-Christoph Steiner
043492277e
scanner: always use built-in ruleset when running tests
The SUSS rule sets are changing all the time, but the test cases are not.
So this makes the test cases just use the built-in ruleset so the test
cases don't randomly break.
2024-09-21 17:20:11 +02:00
Hans-Christoph Steiner
9a65e24930 Merge branch 'diff' into 'master'
Show \r when diffing reproducible apk

See merge request fdroid/fdroidserver!1529
2024-09-19 13:25:55 +00:00
linsui
afc31e115e Show \r when diffing reproducible apk 2024-09-19 20:19:44 +08:00
Hans-Christoph Steiner
143639b8df Merge branch 'fix-scanner-tests' into 'master'
add test files missing from MANIFEST.in

See merge request fdroid/fdroidserver!1527
2024-09-17 15:58:52 +00:00
Hans-Christoph Steiner
feb0fdfad6 add test files missing from MANIFEST.in 2024-09-17 15:58:30 +00:00
Hans-Christoph Steiner
2bf2777f5e Merge branch 'licaon-kter-master-patch-66765' into 'master'
scanner - jcenter is gone

See merge request fdroid/fdroidserver!1528
2024-09-17 15:58:12 +00:00
Licaon_Kter
02f0052806 scanner - jcenter is gone 2024-09-17 15:58:02 +00:00
Hans-Christoph Steiner
19beb0378d Merge branch 'deploy-standardization' into 'master'
standardize deploy.py code to follow fdroidserver patterns

See merge request fdroid/fdroidserver!1521
2024-09-17 11:57:33 +00:00
Hans-Christoph Steiner
fe3d929f67 deploy: lists for command lines to handle escaping
fdroidserver uses lists of strings to handle the escaping command line
arguments, this converts the rclone code to that pattern.
2024-09-17 10:16:57 +00:00
Hans-Christoph Steiner
5126a58af8 deploy: rclone_config always as list to avoid code duplication 2024-09-17 10:16:57 +00:00
linsui
567e3dbaba Merge branch 'import' into 'master'
import_subcommand.py: misc fixes and updates

See merge request fdroid/fdroidserver!1525
2024-09-16 13:16:49 +00:00
linsui
8648954f19 import_subcommand.py: misc fixes and updates 2024-09-16 19:48:02 +08:00
linsui
faac9b38c8 import_subcommand.py: move functions from common.py
These functions are only used in this file
2024-09-12 22:14:28 +08:00
linsui
5da4e670dd import_subcommand.py: format 2024-09-12 22:12:06 +08:00
Hans-Christoph Steiner
b7749ece8d Merge branch 'weblate' into 'master'
fix typo in translatable string: s,itmes,items,g

See merge request fdroid/fdroidserver!1524
2024-09-10 16:05:35 +00:00
Hans-Christoph Steiner
492d4a5619
fix typo in translatable string: s,itmes,items,g 2024-09-10 17:00:54 +02:00
Jose Delvani
41b9419740
Translated using Weblate: Portuguese (Brazil) (pt_BR) by Jose Delvani <jsdelvani@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Jose Delvani <jsdelvani@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2024-09-10 15:17:38 +02:00
gallegonovato
c326fc961d
Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2024-09-10 15:17:38 +02:00
Besnik Bleta
eb68ae3d8c
Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 93.2% (552 of 592 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2024-09-10 15:17:38 +02:00
Hans-Christoph Steiner
f6f962aaf4
Translated using Weblate: Serbian (sr) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 97.9% (580 of 592 strings)

Translated using Weblate: Romanian (ro) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 97.9% (580 of 592 strings)

Translated using Weblate: Albanian (sq) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 90.5% (536 of 592 strings)

Translated using Weblate: Polish (pl) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 96.4% (571 of 592 strings)

Translated using Weblate: French (fr) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 93.2% (552 of 592 strings)

Translated using Weblate: Italian (it) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 93.5% (554 of 592 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 97.9% (580 of 592 strings)

Translated using Weblate: Portuguese (Brazil) (pt_BR) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 97.9% (580 of 592 strings)

Co-authored-by: Hans-Christoph Steiner <hans@eds.org>
Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
Translation: F-Droid/F-Droid Server
2024-09-10 15:17:38 +02:00
Hosted Weblate
d6f5a1760a
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2024-09-10 15:17:38 +02:00
Hans-Christoph Steiner
a0c1029fee
version 2.3 alpha 2 2024-09-10 11:26:10 +02:00
Hans-Christoph Steiner
fe1c6b5149 run tests/refresh-SUSS_DEFAULT.py 2024-09-10 11:11:34 +02:00
Hans-Christoph Steiner
3a85c754ae Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1523
2024-09-10 09:03:16 +00:00
Hans-Christoph Steiner
4579aa079a
make -C locale compile 2024-09-10 10:52:24 +02:00
Hans-Christoph Steiner
a8f09043d2
fix format strings 2024-09-10 10:52:21 +02:00
Hans-Christoph Steiner
fef7ae772e
enable new official languages: Catalan Serbian Swahili 2024-09-10 10:52:15 +02:00
abelbiwott-dev
f84af4feb0
Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
Reno Tx
0f26f66553
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-09-09 19:35:54 +02:00
Reno Tx
ed71e06bc4
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 75.6% (439 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-09-09 19:35:54 +02:00
Cxnfl1ct
c7ad9f8e41
Translated using Weblate: Korean (ko) by Cxnfl1ct <wind0wso2o2@naver.com>
Currently translated at 31.2% (181 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/
2024-09-09 19:35:54 +02:00
Reno Tx
e7909fd48a
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 58.6% (340 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-09-09 19:35:54 +02:00
Ihor Hordiichuk
3612153cf3
Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
2024-09-09 19:35:54 +02:00
linsui
39e8c68425
Translated using Weblate: Chinese (Simplified Han script) (zh_Hans) by linsui <linsui@inbox.lv>
Currently translated at 96.0% (557 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2024-09-09 19:35:54 +02:00
Reno Tx
936a51f4c2
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 57.9% (336 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-09-09 19:35:54 +02:00
Reno Tx
411304defa
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 53.2% (309 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-09-09 19:35:54 +02:00
Reno Tx
9437c6a110
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 36.5% (212 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-09-09 19:35:54 +02:00
abelbiwott-dev
46c058470a
Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>
Currently translated at 99.8% (579 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
Reno Tx
c2b940dfed
Translated using Weblate: Serbian (sr) by Reno Tx <renotx@users.noreply.hosted.weblate.org>
Currently translated at 28.1% (163 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
2024-09-09 19:35:54 +02:00
abelbiwott-dev
e49674c08b
Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>
Currently translated at 99.6% (578 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
paul mayero
a576422ae4
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 97.5% (566 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
Ihor Hordiichuk
3b7cc2625e
Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
2024-09-09 19:35:54 +02:00
paul mayero
9d50d4fbc5
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.1% (569 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
paul mayero
dd36b8173a
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.1% (569 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
paul mayero
8f17d754be
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.2% (570 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
paul mayero
8d2cf47c6f
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.2% (570 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
paul mayero
3684a1753a
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.2% (570 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
paul mayero
a4758e7e61
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.2% (570 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
pitroig
f3ac6d8038
Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-09-09 19:35:54 +02:00
paul mayero
b8a83bfac5
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.2% (570 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
paul mayero
8bd395c35a
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 98.4% (571 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
WaldiS
f693e12135
Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 98.2% (570 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
2024-09-09 19:35:54 +02:00
pitroig
fb32fd2c4b
Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 23.6% (137 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-09-09 19:35:54 +02:00
pitroig
7513cee223
Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 14.1% (82 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-09-09 19:35:54 +02:00
pitroig
d121a39841
Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 14.1% (82 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-09-09 19:35:54 +02:00
unmes
5871fb6b44
Translated using Weblate: Catalan (ca) by unmes <jordi.guiu.pujols@gmail.com>
Currently translated at 14.1% (82 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-09-09 19:35:54 +02:00
Adrià Martín
639d96da30
Translated using Weblate: Catalan (ca) by Adrià Martín <adriamartinmor@gmail.com>
Currently translated at 13.7% (80 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-09-09 19:35:54 +02:00
Yaron Shahrabani
5f63577bc7
Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>
Currently translated at 4.6% (27 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/he/
2024-09-09 19:35:54 +02:00
Coool (github.com/Coool)
4ef611e67e
Translated using Weblate: Latvian (lv) by "Coool (github.com/Coool)" <coool@mail.lv>
Currently translated at 0.3% (2 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/lv/
2024-09-09 19:35:54 +02:00
Coool (github.com/Coool)
0796d14161
Added translation using Weblate: Latvian (lv) by "Coool (github.com/Coool)" <coool@mail.lv> 2024-09-09 19:35:54 +02:00
Ihor Hordiichuk
94f02b3e04
Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
2024-09-09 19:35:54 +02:00
ssantos
edf32a6f8a
Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
2024-09-09 19:35:54 +02:00
ssantos
07c3857491
Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
2024-09-09 19:35:54 +02:00
paul mayero
071f7af9f6
Translated using Weblate: Swahili (sw) by paul mayero <pmmayero@gmail.com>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
2024-09-09 19:35:54 +02:00
ssantos
828cedfd30
Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 99.4% (577 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
2024-09-09 19:35:54 +02:00
ssantos
5aad779d69
Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>
Currently translated at 99.4% (577 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
2024-09-09 19:35:54 +02:00
chumoer
a14acc510f
Translated using Weblate: Chinese (Simplified) (zh_Hans) by chumoer <k17733196511@gmail.com>
Currently translated at 96.0% (557 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2024-09-09 19:35:54 +02:00
Danial Behzadi
dc4eb2dbd1
Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>
Currently translated at 8.1% (47 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fa/
2024-09-09 19:35:54 +02:00
raulmagdalena
98569b13fb
Translated using Weblate: Catalan (ca) by raulmagdalena <4omoald1a@mozmail.com>
Currently translated at 6.7% (39 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
2024-09-09 19:35:54 +02:00
109247019824
83691d1580
Translated using Weblate: Bulgarian (bg) by 109247019824 <stoyan@gmx.com>
Currently translated at 0.1% (1 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/bg/
2024-09-09 19:35:54 +02:00
Fqwe1
ef524f87de
Translated using Weblate: Ukrainian (uk) by Fqwe1 <Fqwe1@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
2024-09-09 19:35:54 +02:00
lucasmz-dev
e07c7eb08f
Translated using Weblate: Portuguese (Brazil) (pt_BR) by lucasmz-dev <git@lucasmz.dev>
Currently translated at 100.0% (580 of 580 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
2024-09-09 19:35:54 +02:00
Xiang Heng Wei
1bf951a91d
Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xiang Heng Wei <yylteam@hotmail.com>
Currently translated at 88.9% (516 of 580 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xiang Heng Wei <yylteam@hotmail.com>

Currently translated at 81.0% (470 of 580 strings)

Co-authored-by: Xiang Heng Wei <yylteam@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:54 +02:00
Jose Delvani
e7ad71527f
Translated using Weblate: Portuguese (Brazil) (pt_BR) by Jose Delvani <delvani.eletricista@gmail.com>
Currently translated at 100.0% (580 of 580 strings)

Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Tymofii Lytvynenko
109e66260d
Translated using Weblate: Ukrainian (uk) by Tymofii Lytvynenko <till.svit@gmail.com>
Currently translated at 100.0% (580 of 580 strings)

Co-authored-by: Tymofii Lytvynenko <till.svit@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Christopher Forzy
d0054d3f89
Translated using Weblate: French (fr) by Christopher Forzy <christopher.forzy@ecomail.fr>
Currently translated at 95.1% (552 of 580 strings)

Co-authored-by: Christopher Forzy <christopher.forzy@ecomail.fr>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
neverender
d36712c4c7
Translated using Weblate: Russian (ru) by neverender <audiolunaire@getgoogleoff.me>
Currently translated at 99.8% (579 of 580 strings)

Co-authored-by: neverender <audiolunaire@getgoogleoff.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
WaldiS
82f0d13f75
Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 98.1% (569 of 580 strings)

Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>

Currently translated at 97.5% (566 of 580 strings)

Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>

Currently translated at 97.2% (564 of 580 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
pitroig
c7af6b439e
Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 4.4% (26 of 580 strings)

Co-authored-by: pitroig <ona@riseup.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
hugoalh
fe768cb734
Translated using Weblate: Chinese (Traditional) (zh_Hant) by hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Currently translated at 73.9% (429 of 580 strings)

Translated using Weblate: Chinese (Traditional) (zh_Hant) by hugoalh <hugoalh@users.noreply.hosted.weblate.org>

Currently translated at 73.6% (427 of 580 strings)

Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
gfbdrgng
aaf775481f
Translated using Weblate: Russian (ru) by gfbdrgng <hnaofegnp@hldrive.com>
Currently translated at 99.6% (578 of 580 strings)

Co-authored-by: gfbdrgng <hnaofegnp@hldrive.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
gallegonovato
c52c368b75
Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (580 of 580 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
lucasmz-dev
d7ad6e9b54
Translated using Weblate: Portuguese (Brazil) (pt_BR) by lucasmz-dev <git@lucasmz.dev>
Currently translated at 95.3% (553 of 580 strings)

Co-authored-by: lucasmz-dev <git@lucasmz.dev>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Maxi
e545f5e24f
Translated using Weblate: German (de) by Maxi <maxitendo01@proton.me>
Currently translated at 100.0% (580 of 580 strings)

Co-authored-by: Maxi <maxitendo01@proton.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
abelbiwott-dev
8dc0633096
Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>
Currently translated at 100.0% (580 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 86.2% (500 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 78.6% (456 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 66.7% (387 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 56.3% (327 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 48.1% (279 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 42.2% (245 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 34.3% (199 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 31.2% (181 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 23.9% (139 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 18.7% (109 of 580 strings)

Translated using Weblate: Swahili (sw) by abelbiwott-dev <abelbiwott@outlook.com>

Currently translated at 14.3% (83 of 580 strings)

Co-authored-by: abelbiwott-dev <abelbiwott@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sw/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Test Account
991d3c8d35
Added translation using Weblate: Swahili (sw) by Test Account <ta2464666@gmail.com>
Co-authored-by: Test Account <ta2464666@gmail.com>
2024-09-09 19:35:53 +02:00
Licaon Kter
9bd7b42109
Translated using Weblate: Romanian (ro) by Licaon Kter <licaon.kter@protonmail.com>
Currently translated at 100.0% (580 of 580 strings)

Co-authored-by: Licaon Kter <licaon.kter@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Agnieszka C
030dd4d484
Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 96.8% (562 of 580 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
大王叫我来巡山
f3d301d1de
Translated using Weblate: Chinese (Simplified) (zh_Hans) by 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 80.0% (464 of 580 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Fjuro
7a7657638e
Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (580 of 580 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Oğuz Ersen
55ea03c769
Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguz@ersen.moe>
Currently translated at 100.0% (580 of 580 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Hosted Weblate
9d025dc3a9
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Danial Behzadi
ccbd68c1d4
Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>
Currently translated at 8.3% (46 of 552 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fa/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
pitroig
7c26cd31f2
Translated using Weblate: Catalan (ca) by pitroig <ona@riseup.net>
Currently translated at 4.5% (25 of 552 strings)

Co-authored-by: pitroig <ona@riseup.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ca/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ
3bab86f352
Translated using Weblate: Greek (el) by ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ <stavros.daliakopoulos@gmail.com>
Currently translated at 11.9% (66 of 552 strings)

Translated using Weblate: Greek (el) by ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ <stavros.daliakopoulos@gmail.com>

Currently translated at 11.7% (65 of 552 strings)

Co-authored-by: ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ <stavros.daliakopoulos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/el/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Suguru Hirahara
3de9027875
Translated using Weblate: Japanese (ja) by Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Currently translated at 1.4% (8 of 552 strings)

Co-authored-by: Suguru Hirahara <shirahara@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ja/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Naveen
597b1415b3
Translated using Weblate: Tamil (ta) by Naveen <naveen.sakthivel@tutanota.com>
Currently translated at 1.9% (11 of 552 strings)

Co-authored-by: Naveen <naveen.sakthivel@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ta/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
flac
d02357093e
Translated using Weblate: Belarusian (be) by flac <flac_twin@keemail.me>
Currently translated at 8.5% (47 of 552 strings)

Co-authored-by: flac <flac_twin@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/be/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Laachir
b55934d69c
Translated using Weblate: Arabic (ar) by Laachir <LaachirDeeper@users.noreply.hosted.weblate.org>
Currently translated at 5.6% (31 of 552 strings)

Co-authored-by: Laachir <LaachirDeeper@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ar/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Kristoffer Grundström
dae6e46137
Translated using Weblate: Swedish (sv) by Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Currently translated at 13.0% (72 of 552 strings)

Translated using Weblate: Swedish (sv) by Kristoffer Grundström <swedishsailfishosuser@tutanota.com>

Currently translated at 12.8% (71 of 552 strings)

Co-authored-by: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Issa1553
ad4762a1f2
Translated using Weblate: Dutch (nl) by Issa1553 <fairfull.playing@gmail.com>
Currently translated at 18.4% (102 of 552 strings)

Co-authored-by: Issa1553 <fairfull.playing@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nl/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
PD
feb4cd48d3
Translated using Weblate: Arabic (ar) by PD <macstuff@pretreer.com>
Currently translated at 4.5% (25 of 552 strings)

Translated using Weblate: Arabic (ar) by PD <macstuff@pretreer.com>

Currently translated at 3.4% (19 of 552 strings)

Co-authored-by: PD <macstuff@pretreer.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ar/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
P.O
ac4bf4eb1f
Translated using Weblate: Swedish (sv) by "P.O" <rasmusson.mikael@protonmail.com>
Currently translated at 12.6% (70 of 552 strings)

Co-authored-by: P.O <rasmusson.mikael@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2024-09-09 19:35:53 +02:00
Hans-Christoph Steiner
26c7630b4e Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.10.1

See merge request fdroid/fdroidserver!1520
2024-09-09 17:35:47 +00:00
fdroid-bot
773f6e4009 gradle v8.10.1 2024-09-09 15:57:11 +00:00
Jochen Sprickerhof
1f82e10748 Merge branch 'doc-updates' into 'master'
doc updates

See merge request fdroid/fdroidserver!1518
2024-09-09 15:56:34 +00:00
Hans-Christoph Steiner
22204f4e07 README: remove obsolete section on buildserver tests 2024-09-09 15:56:24 +00:00
Hans-Christoph Steiner
a386a6132a README: document how releases work 2024-09-09 15:56:24 +00:00
Hans-Christoph Steiner
c6e8dfd4dd CONTRIBUTING: specify which Black version for format 2024-09-09 15:56:24 +00:00
Jochen Sprickerhof
72a0ad81b8 Merge branch 'safety-only-with-api-key' into 'master'
Safety only with API key

See merge request fdroid/fdroidserver!1514
2024-09-09 15:52:46 +00:00
Hans-Christoph Steiner
b669ce654d gitlab-ci: only trigger safety job if API key is present 2024-09-09 15:52:28 +00:00
Hans-Christoph Steiner
3c03fef28f safety: clarify reason to ignore CVE 2024-09-09 15:52:28 +00:00
Hans-Christoph Steiner
adf9dcb93e Merge branch 'walk-straight' into 'master'
Correct traversing cibase

See merge request fdroid/fdroidserver!1519
2024-09-08 18:16:07 +00:00
SilentGhost
8e89cf511d Correct traversing cibase
Partly revert d9aab228 and fix bug introduced in 548f73d9:
modifying list that is being iterated over
2024-09-06 15:05:36 +02:00
Hans-Christoph Steiner
88a23f3a33 Merge branch 'config_lint' into 'master'
lint: check for valid keys in config files

See merge request fdroid/fdroidserver!1516
2024-09-05 11:28:49 +00:00
linsui
0ad2820b6f lint: check config keys 2024-09-05 18:54:46 +08:00
linsui
debac3fd61 lint.py: format 2024-09-05 02:09:55 +08:00
Hans-Christoph Steiner
634466f8a5 Merge branch 'lock' into 'master'
scanner: fix build_dir type

See merge request fdroid/fdroidserver!1515
2024-09-04 16:08:04 +00:00
linsui
9b633fb827 scanner: fix build_dir type 2024-09-04 23:58:09 +08:00
Hans-Christoph Steiner
745f01a96c Merge branch 'lock' into 'master'
scanner: support workspace for lock files

See merge request fdroid/fdroidserver!1513
2024-09-04 14:55:40 +00:00
linsui
3a4a4190aa scanner: add test files into MANIFEST.in 2024-09-04 16:44:48 +02:00
linsui
632959ae35 scanner: fix test
The suss rule is updated
2024-09-04 22:32:48 +08:00
linsui
4e829e2f19 scanner: fix npm lock file name 2024-09-04 22:32:48 +08:00
linsui
9482ddfbe3 scanner: support workspace for lock files 2024-09-04 22:32:48 +08:00
Hans-Christoph Steiner
f337ef95a9 Merge branch 'ci-safety-fix' into 'master'
safety: update to 3.x and make two CVEs just a warning

See merge request fdroid/fdroidserver!1509
2024-09-04 13:39:17 +00:00
Hans-Christoph Steiner
d9e9618c56 gitlab-ci: port to Safety 3.x and move to own job
https://docs.safetycli.com/safety-docs/installation/gitlab
https://docs.safetycli.com/safety-docs/administration/safety-policy-files
2024-09-04 13:38:44 +00:00
Hans-Christoph Steiner
b1084c0b8a WIP safety: make CVE-2024-6345 just a warning 2024-09-04 13:38:44 +00:00
Hans-Christoph Steiner
ef247bc97a safety: make CVE-2024-5569 just a warning
We get these packages from Debian, zipp is not used in production, and its
only a DoS.
2024-09-04 13:38:44 +00:00
Hans-Christoph Steiner
3a1bbb54aa Merge branch 'lock' into 'master'
scanner: error on dependency files without lock file

Closes #1200

See merge request fdroid/fdroidserver!1504
2024-08-31 13:13:02 +00:00
linsui
9ccb3b5f0d Remove comment of google mave repo to workground a bug of ruff 2024-08-31 02:45:14 +08:00
linsui
8884732114 scanner.py: skip format on hex literal 2024-08-31 01:47:26 +08:00
Hans-Christoph Steiner
65f768e1cf black: fdroidserver/scanner.py now complies 2024-08-30 13:47:20 +02:00
linsui
1d796b734f scanner: error on dependency files without lock file 2024-08-30 13:46:17 +02:00
linsui
c3644464ff scanner.py: format 2024-08-30 13:46:17 +02:00
linsui
3782eddc4d Add ruff rule 2024-08-30 13:46:17 +02:00
Hans-Christoph Steiner
9684eade0d Merge branch 'fix/duplicated-sign' into 'master'
fix(nightly): workaround for broken os.walk and more logging

See merge request fdroid/fdroidserver!1512
2024-08-30 10:22:55 +00:00
WrenIX
d1d1eb4c53
chore(nightly): improve log messages 2024-08-29 09:58:27 +02:00
WrenIX
d9aab228e2
fix(nightly): workaround for broken os.walk and more logging 2024-08-29 00:51:30 +02:00
Hans-Christoph Steiner
5276d9880f Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.10

See merge request fdroid/fdroidserver!1508
2024-08-17 19:12:48 +00:00
fdroid-bot
170b6d4648 gradle v8.10 2024-08-15 15:47:52 +00:00
Hans-Christoph Steiner
84150be5d0 Merge branch 'reset-server' into 'master'
Drop --reset-server

See merge request fdroid/fdroidserver!1507
2024-08-15 15:45:29 +00:00
g0t mi1k
19aef075b4 Drop --reset-server 2024-08-15 15:44:59 +00:00
Jochen Sprickerhof
1ebf32321f Merge branch 'checkupdates_ignore_appname' into 'master'
Support UpdateCheckName in dirs_with_manifest

Closes #1155

See merge request fdroid/fdroidserver!1501
2024-07-30 11:32:59 +00:00
Jochen Sprickerhof
0edc732705
Support UpdateCheckName in dirs_with_manifest
Closes: #1155
2024-07-25 10:45:27 +02:00
Jochen Sprickerhof
c4db47dc47 Merge branch 'scanner-uncrash' into 'master'
🐜 scanner: fix ScannerTool init crash

Closes #1212

See merge request fdroid/fdroidserver!1485
2024-07-25 07:04:23 +00:00
Michael Pöhn
8cf4503a00 🐜 scanner: fix ScannerTool init crash
When scanner.py::ScannerTool is instatiated but the calling code was
started by a call to e.g. `build.py` ScannerTool will crash. This change
makes it so that ScannerTool will intializes with a default value
instead of crashing when triging to access a non existen cli argument.

also see https://gitlab.com/fdroid/fdroidserver/-/issues/1212
2024-07-25 06:54:42 +00:00
Jochen Sprickerhof
7f7c93e801 Merge branch 'appdirs_platformdirs' into 'master'
Replace unmaintained appdirs by platformdirs

See merge request fdroid/fdroidserver!1496
2024-07-25 06:46:55 +00:00
Jochen Sprickerhof
e1aaa3ce93
Replace unmaintained appdirs by platformdirs
8734277956
2024-07-25 08:36:45 +02:00
Jochen Sprickerhof
956c4be7e5 Merge branch 'gradle' into 'master'
Gradle 8.9

See merge request fdroid/fdroidserver!1498
2024-07-18 11:33:56 +00:00
StellarSand
ecd980f366 gradle 8.9 2024-07-18 02:23:45 +00:00
Jochen Sprickerhof
59f353e119 Merge branch 'prune' into 'master'
Prune origin before fetch

See merge request fdroid/fdroidserver!1494
2024-07-10 08:09:24 +00:00
linsui
d1856bea26 Prune origin before fetch 2024-07-10 15:33:51 +08:00
Hans-Christoph Steiner
7a9945ce88 Merge branch 'index-only-follow-up' into 'master'
always use GitLab Pages, not Artifacts, with index-only mode

See merge request fdroid/fdroidserver!1493
2024-07-03 09:30:23 +00:00
Hans-Christoph Steiner
fbb6772e37 always use GitLab Pages, not Artifacts, with index-only mode
If the repo is too large, then it'll hit the GitLab Pages limit.  That is
basically impossible in index-only mode, so it should always use Pages.
2024-07-03 09:18:22 +00:00
Hans-Christoph Steiner
034e83bfca deploy: complete index-only support for awsbucket: 2024-07-03 09:18:22 +00:00
Hans-Christoph Steiner
4a362541bd Merge branch 'gh-releases' into 'master'
🛰️  deploy: github releases

See merge request fdroid/fdroidserver!1471
2024-06-28 13:21:55 +00:00
Michael Pöhn
0fa88c5c20
💇 implement review nits
Implement review nits as requested bei @eighthave in
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1471
2024-06-27 12:28:54 +02:00
Michael Pöhn
3cf3685280
🐐 appeace bandint security warnings
In this particular case bandit was complaining about potential path
escape exploits on urlopen. However the urls are safe enough, because
all template parameters inserted into the url are from:

 * config.yml - malicious changes to config.yml are possible that's
   already a lot bigger issue than this than redirecting github api
   calls.
 * git tags witch are present in bot the local index-v2.json file (as
   versionName) and the remote github API. (git tags don't allow the
   string '..')
2024-06-27 12:28:41 +02:00
Michael Pöhn
aca98c1355
🏏 incorporate review feedback 2024-06-27 12:28:29 +02:00
Michael Pöhn
a87284cf80
🚥 deploy: tests for github releases deploy functions
Add test cases for github releases function in deploy.py
2024-06-27 12:28:16 +02:00
Michael Pöhn
242490ddc3
🎯 deploy: no releaseChannels on github releases
Don't deploy versions of to GitHub releases where a `releaseChannels`
value is set in index-v2.json. (This usually would mean it's a alpha or
beta version.)
2024-06-27 12:28:04 +02:00
Michael Pöhn
c6598f2835
☄️ deploy: github releases - whatsNew text as note
Use whatsNew text (if available) as release notes text when deploying to
Github releases. This feature will always use 'en-US' locale texts,
since English is the lingua franka on GitHub. Additionally this change
also adds a config option to preprend a static text to those release
notes.
2024-06-27 12:27:51 +02:00
Michael Pöhn
a079f9d85f
♟️ deploy: add global config github_token 2024-06-27 12:27:39 +02:00
Michael Pöhn
7a6fa7f816
🛄 deploy: separate function for release file lookup 2024-06-27 12:27:27 +02:00
Michael Pöhn
44b0af933d
🎡 add unit tests for github.py
add unittests for our github api calls
2024-06-27 12:27:15 +02:00
Michael Pöhn
1b19293ab0
🛰️ deploy: github releases
Implemented basic support for using `fdroid delpoy` to upload APKs from
the repo to GitHub releases.
2024-06-27 12:27:01 +02:00
Hans-Christoph Steiner
aeb8a7a3e5 Merge branch 'fix-subprocess-checkoutput-on-rclone' into 'master'
fix: subprocess.check_output to produce string and not bytes

See merge request fdroid/fdroidserver!1490
2024-06-12 06:31:49 +00:00
pmmayero
8255dec6b8 fix: jinja 2 CVE 2024-06-12 06:30:27 +00:00
pmmayero
3f59d0908f fix: subprocess.check_output to produce string and not bytes 2024-06-12 06:30:27 +00:00
Hans-Christoph Steiner
21e03e62a8 Merge branch 'index-only-deploy-mode' into 'master'
Add index only deployment mode

Closes #1181

See merge request fdroid/fdroidserver!1420
2024-06-11 17:46:00 +00:00
proletarius101
845ed3ef47 Add index only deployment mode 2024-06-11 17:45:59 +00:00
Hans-Christoph Steiner
24b3b0957f Merge branch 'safety-false-positive' into 'master'
safety: ignore false positive

See merge request fdroid/fdroidserver!1492
2024-06-07 10:15:32 +00:00
Hans-Christoph Steiner
6e489b78b3
safety: ignore false positive
jinja2 is not used by fdroidserver, nor any dependencies I could find via
debtree and pipdeptree.
2024-06-07 12:04:12 +02:00
Hans-Christoph Steiner
e7ff344f2b Merge branch 'gradle' into 'master'
gradle 8.8

See merge request fdroid/fdroidserver!1489
2024-06-05 15:00:19 +00:00
linsui
41e90e5ee7 gradle 8.8 2024-06-01 16:24:26 +08:00
Hans-Christoph Steiner
f50e5a806d Merge branch 'switching-s3cmd-for-rclone' into 'master'
Adding rclone as an option to fdroid deploy

Closes #1095

See merge request fdroid/fdroidserver!1095
2024-05-29 14:08:07 +00:00
paul mayero
7aabfbcbf0 Adding rclone as an option to fdroid deploy 2024-05-29 14:08:07 +00:00
Hans-Christoph Steiner
eadbf06d48 Merge branch 'licaon-kter-master-patch-05845' into 'master'
Fix more tests after !1487

See merge request fdroid/fdroidserver!1488
2024-05-23 08:30:36 +00:00
Licaon_Kter
feafe2812d Fix more tests after !1487 2024-05-22 13:40:27 +00:00
Hans-Christoph Steiner
b3748aa3f1 Merge branch 'scannerid' into 'master'
scanner - pickup by id, sort list

See merge request fdroid/fdroidserver!1487
2024-05-22 09:26:13 +00:00
Licaon_Kter
98f935493e fix test cases 2024-05-22 09:25:49 +00:00
Licaon_Kter
df97ebe052 scanner - pickup by id, sort list 2024-05-22 09:25:49 +00:00
Hans-Christoph Steiner
18c9bc6e01 Merge branch 'sdkmanager-bookworm-backports' into 'master'
buildserver: use sdkmanager from backports

See merge request fdroid/fdroidserver!1475
2024-05-20 18:36:40 +00:00
Hans-Christoph Steiner
afb9b7570e buildserver: use sdkmanager from backports 2024-05-20 18:36:33 +00:00
Hans-Christoph Steiner
25b1a77424
fix merge conflict with https://hosted.weblate.org/projects/f-droid/fdroidserver/ 2024-05-14 12:22:56 +02:00
Hans-Christoph Steiner
4c0fa1d0a9 Merge branch 'update-pot' into 'master'
make -C locale update

See merge request fdroid/fdroidserver!1484
2024-05-13 12:10:49 +00:00
Hans-Christoph Steiner
c37a26bcd2
make -C locale update 2024-05-13 13:59:52 +02:00
Hans-Christoph Steiner
b45b31b927
version 2.3 alpha 1 2024-05-13 10:45:09 +02:00
Hans-Christoph Steiner
2f148b4407 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1483
2024-05-13 08:44:31 +00:00
Hans-Christoph Steiner
6bebd8b160
safety: ignore CVE-2018-20225, should never affect fdroidserver
https://data.safetycli.com/v/67599/97c
2024-05-13 10:33:37 +02:00
Fjuro
7e1b2e0788 Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:52 +02:00
Random
34dd9a75e4 Translated using Weblate: Italian (it) by Random <random-r@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:43 +02:00
ALoLo_527
f6235831ae Translated using Weblate: Chinese (Simplified) (zh_Hans) by ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>
Currently translated at 82.0% (453 of 552 strings)

Co-authored-by: ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:35 +02:00
Oğuz Ersen
99841bf7c5 Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguz@ersen.moe>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:03 +02:00
Agnieszka C
c7f1bdd14c Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2024-05-13 10:24:56 +02:00
gallegonovato
25278801de Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2024-05-13 10:24:45 +02:00
Michael Pöhn
8d9c048505 Merge branch 'config-options-as-module-level-variables' into 'master'
clarify that 'config' and 'options' should only be module-level variables

See merge request fdroid/fdroidserver!1477
2024-05-08 14:47:49 +00:00
Hans-Christoph Steiner
64c9154fff
gitlab-ci: fix macOS job after !1466 2024-05-08 16:36:21 +02:00
Hans-Christoph Steiner
5745ed4753 common: only try to delete .testfiles dir if it exists
Otherwise, some tests fail with an error.
2024-05-08 16:28:14 +02:00
Hans-Christoph Steiner
18f3acc32e split out options from read_config()
There is no longer any reason for these to be intertwined.

This deliberately avoids touching some files as much as possible because
they are super tangled and due to be replaced.  Those files are:

* fdroidserver/build.py
* fdroidserver/update.py

# Conflicts:
#	tests/testcommon.py

# Conflicts:
#	fdroidserver/btlog.py
#	fdroidserver/import_subcommand.py
2024-05-08 16:26:46 +02:00
Hans-Christoph Steiner
685efa23d4 import: always load testcommon from localmodule
Having this import before sys.path.insert() made it load testcommon from
the Debian package.
2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
1e5699e90c remove all references to optparse (deprecated since Python 3.2) 2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
717df09be0 clarify that config/options can be global or module-level variable 2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
92a3f4b191 rename local variable to stop overwriting global options
This fixes a bug where if smartcardoptions is set as a str in config.yml
will overwrite all command line options.

a4d069862
fdroidserver!1106
2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
1eaba25021 common: do not use module reference for local functions
This just makes things more confusing.
2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
8208841460 common: make explicit which test cases need mocked options 2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
660f8756e5 Merge branch 'docstrings' into 'master'
docstrings and code format from !1436

See merge request fdroid/fdroidserver!1482
2024-05-08 13:55:10 +00:00
Gregor Düster
dbdefe200c Format files with ruff 2024-05-08 15:41:51 +02:00
Gregor Düster
df27405d8b [build] Add more docstrings 2024-05-08 15:35:28 +02:00
Gregor Düster
1c70758940 [btlog] Add more docstrings 2024-05-08 15:31:43 +02:00
Gregor Düster
4109e8fb03 [checkupdates] Add module docstring 2024-05-08 15:31:38 +02:00
Gregor Düster
97346a2cba [nightly] Add more docstrings 2024-05-08 15:31:32 +02:00
Gregor Düster
6c27fec94b [import] Add more docstrings 2024-05-08 15:31:29 +02:00
Michael Pöhn
5d8c6b8cd5 Merge branch 'fix-ubuntu-ppa-job' into 'master'
Fix ubuntu ppa job

See merge request fdroid/fdroidserver!1481
2024-05-08 13:17:23 +00:00
Hans-Christoph Steiner
9f62445f38 gitlab-ci: fix ubuntu_lts_ppa job to work with Ubuntu/noble 2024-05-08 13:16:00 +00:00
Michael Pöhn
80705579c2 Merge branch 'getcert' into 'master'
get_first_signer_certificate: check all v1 v2 and v3 certs

Closes #1128

See merge request fdroid/fdroidserver!1466
2024-05-08 13:14:05 +00:00
Hans-Christoph Steiner
ad9f0a9022 include @obfusk's proof-of-concept APKs in test suite
https://github.com/obfusk/fdroid-fakesigner-poc/releases/tag/poc-apks
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
fc4a9c96a5 test APK signatures with a cert chain are parsed like apksigner
Microsoft and SanDisk sign APKs with a X.509 certificate chain of
trust, so there are actually three certificates included. apksigner
only cares about one certificate and ignores the other certificates in
the chain.

The correct values come from:

    apksigner verify --print-certs 883cbdae7aeb2e4b122e8ee8d89966c7062d0d49107a130235fa220a5b994a79.apk

X.509 certificates are machine generated and just data, so are not
copyrightable.  So I included SANAPPSI.* directly.
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
accdd65f91 also handle APKs entirely without JAR/v1 signatures
future-proofing!
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
9a327b5097 reliable implementation of get_first_signer_certificate()
This keeps key pieces of @linsui's algorithm, specifically the check
that all certificates are the same.  apksigner also does this check.

closes #1128
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
a8fd360a88 skip AndroidManifest.xml and resources when fetching v2+ certs 2024-05-07 16:22:59 +02:00
FC (Fay) Stegerman
6f5fd2b132 PoC + writeup + patch
6c6dc25112/fdroidserver.patch (L28)

https://github.com/androguard/androguard/issues/1030
refs #1128

(this is an excerpt of the original patch)
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
312f822764 androguard is required, stop using use_androguard() 2024-05-07 16:22:59 +02:00
linsui
2fea71a6c7 get_first_signer_certificate: check all v1 v2 and v3 certs 2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
93f361c623 replace decade old pyasn1 crypto impl with working asn1crypto
For some APKs, get_certificate() was returning a different result than
apksigner and keytool.  So I just took the algorithm from androguard, which
uses asn1crypto instead of pyasn1.  So that removes a dependency as well.
asn1crypto is already required by androguard.

The original get_certificate() came from 6e2d0a9e1
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
4666330a4d Merge branch 'gradlefile' into 'master'
throw error if gradle build method is used but no build.gradle file is found

See merge request fdroid/fdroidserver!1479
2024-05-07 14:14:26 +00:00
linsui
7104411296 throw error if gradle build method is used but no build.gradle file is found 2024-05-07 14:13:47 +00:00
Hans-Christoph Steiner
99bd544ab9 Merge branch 'fedora-40-ci-failure' into 'master'
make it easier to support the Fedora job

See merge request fdroid/fdroidserver!1474
2024-05-07 14:11:53 +00:00
Hans-Christoph Steiner
5df3d27126 gitlab-ci: stay on Fedora 39 until it is no longer supported
We can rely on the debian:testing job to test the bleeding edge, and it is
a lot easier to troubleshoot.

The Fedora job is a lot harder to troubleshoot than the Debian-based jobs,
and they are often quite bleeding edge.  Currently, there is a change to
either Python or an image processing lib (Pillow?) that now compresses PNGs
differently than all previous releases.  That breaks the tests based on
processing images and checking the SHA-256 matches.

70e7e720b9
fdroidserver!669
2024-05-07 12:58:23 +00:00
Hans-Christoph Steiner
1b65e33835 make it easy to keep test artifacts from jobs
When troubleshooting things that are difficult to reproduce locally, like
different behaviors in the fedora_latest job, these changes make it easy to
keep the test files around after the tests run.  For example, if PNGs are
processed differently by newer Python versions.
2024-05-07 12:58:23 +00:00
Hans-Christoph Steiner
299e3e5f4c index: handle image processing diffs across various Python versions
Apparently, the newest Python thingies strip the PNGs a tiny bit smaller,
so a fixed file size will lead to the test failing:

https://gitlab.com/fdroid/fdroidserver/-/jobs/6703386074
```
Traceback (most recent call last):
  File "/builds/fdroid/fdroidserver/tests/index.TestCase", line 704, in test_package_metadata
    self.assertEqual(36027, metadata['featureGraphic']['en-US']['size'])
AssertionError: 36027 != 35619
```
2024-05-07 12:58:23 +00:00
Hans-Christoph Steiner
1cb1394de3 Merge branch 'debugkey' into 'master'
lint: blocklist known AOSP debug keys in AASK

See merge request fdroid/fdroidserver!1478
2024-05-07 11:33:12 +00:00
Hans-Christoph Steiner
9a9b5beeaa simplify test setup
I'm in the midst of working towards getting rid of the "config" instances
that are in the subcommand module, e.g. `fdroidserver.lint.config`
2024-05-07 11:33:04 +00:00
Hans-Christoph Steiner
14c8647909 add additional tests 2024-05-07 11:33:04 +00:00
linsui
d243cbd030 lint: blocklist known AOSP debug keys in AASK 2024-05-07 11:33:04 +00:00
Michael Pöhn
08c553e1cb Merge branch 'deploy' into 'master'
deploy: retry when git push fails

See merge request fdroid/fdroidserver!1480
2024-05-06 06:36:58 +00:00
linsui
f82d648cb1 deploy: retry when git push fails 2024-05-05 20:53:35 +00:00
Michael Pöhn
79586fd9e3 Merge branch 'fix-icons-in-fdroid-mirror' into 'master'
mirror: apparently the 'icons' dir does not always exist

See merge request fdroid/fdroidserver!1476
2024-05-05 17:14:49 +00:00
Hans-Christoph Steiner
6f07538cdc mirror: apparently the 'icons' dir does not always exist
https://apt.izzysoft.de/fdroid/archive/com.futsch1.medtimer_28.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.hardbacknutter.nevertoomanybooks_75.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.jovial.jrpn15_20.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.jovial.jrpn2_20.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.logger.app_8.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.lorenzovainigli.foodexpirationdates.foss_22.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.openathena_36.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.oppzippy.openscq30_21.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.sanmer.mrepo_713.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.starry.myne_325.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/dev.imranr.obtainium_22602.apk:
2024-04-21 18:55:22 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/dev.sanmer.pi_137.apk:
2024-04-21 18:55:22 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/org.breezyweather_50108.apk:
2024-04-21 18:55:22 ERROR 404: Not Found.
2024-04-21 18:55:22,448 ERROR: no "icon" in org.breezyweather
2024-04-21 18:55:22,449 ERROR: no "icon" in com.lorenzovainigli.foodexpirationdates.foss
2024-04-21 18:55:22,449 ERROR: no "icon" in com.jovial.jrpn15
2024-04-21 18:55:22,450 ERROR: no "icon" in com.jovial.jrpn2
2024-04-21 18:55:22,450 ERROR: no "icon" in com.logger.app
2024-04-21 18:55:22,450 ERROR: no "icon" in com.futsch1.medtimer
2024-04-21 18:55:22,451 ERROR: no "icon" in com.sanmer.mrepo
2024-04-21 18:55:22,451 ERROR: no "icon" in com.starry.myne
2024-04-21 18:55:22,451 ERROR: no "icon" in com.hardbacknutter.nevertoomanybooks
2024-04-21 18:55:22,452 ERROR: no "icon" in dev.imranr.obtainium
2024-04-21 18:55:22,452 ERROR: no "icon" in com.openathena
2024-04-21 18:55:22,453 ERROR: no "icon" in com.oppzippy.openscq30
2024-04-21 18:55:22,453 ERROR: no "icon" in dev.sanmer.pi
2024-04-21 18:55:22,454 CRITICAL: Unknown exception found!
Traceback (most recent call last):
  File "/home/fdroid/code/fdroid/fdroidserver/fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/home/fdroid/code/fdroid/fdroidserver/fdroidserver/__main__.py", line 230, in main
    raise e
  File "/home/fdroid/code/fdroid/fdroidserver/fdroidserver/__main__.py", line 211, in main
    mod.main()
  File "/home/fdroid/code/fdroid/fdroidserver/fdroidserver/mirror.py", line 269, in main
    _run_wget(os.path.join(basedir, section, icondir), urls[icondir])
KeyError: 'icons'
2024-05-02 18:29:42 +02:00
Hans-Christoph Steiner
32ef77ecb6 Merge branch 'androguard-modernization' into 'master'
port to androguard >= 4 and drop support for older than 3.3.5

See merge request fdroid/fdroidserver!1462
2024-04-25 11:09:27 +00:00
Hans-Christoph Steiner
be59b38ac1 update: handle ValueError from apkInspector in androguard 4.1
androguard 4.1 uses a new lib called apkInspector instead of zipfile.ZipFile
so that it can handle usable but invalid ZIP files.  It will also throw
ValueError on some things, for example:

Traceback (most recent call last):
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/tests/update.TestCase", line 878, in test_scan_apk_bad_zip
    fdroidserver.update.scan_apk(apkfile)
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/fdroidserver/update.py", line 1586, in scan_apk
    scan_apk_androguard(apk, apk_file)
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/fdroidserver/update.py", line 1725, in scan_apk_androguard
    apkobject = common.get_androguard_APK(apkfile)
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/fdroidserver/common.py", line 2673, in get_androguard_APK
    return APK(apkfile)
  File "/usr/local/lib/python3.10/dist-packages/androguard/core/apk/__init__.py", line 273, in __init__
    self.zip = ZipEntry.parse(filename, False)
  File "/usr/local/lib/python3.10/dist-packages/apkInspector/headers.py", line 410, in parse
    eocd = EndOfCentralDirectoryRecord.parse(apk_file)
  File "/usr/local/lib/python3.10/dist-packages/apkInspector/headers.py", line 59, in parse
    raise ValueError("End of central directory record (EOCD) signature not found")
ValueError: End of central directory record (EOCD) signature not found
2024-04-25 13:00:23 +02:00
Hans-Christoph Steiner
ef4ec74882 some parts of androguard 4.x use loguru instead of logging 2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
1c84f63247 replace deprecated get_element() which was removed in 4.x
/usr/lib/python3/dist-packages/androguard/core/bytecodes/apk.py:884: DeprecationWarning: This method is deprecated since 3.3.5.

It was added in 3.3.5.  Debian/bullseye and Ubuntu/20.04/focal both include
new enough versions.  Debian/buster's is too old (3.3.3).
2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
5b7abc0423 single function to tame androguard's verbose default output
# Conflicts:
#	fdroidserver/common.py
2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
7a144a4762 port to androguard >= 4 and drop support for older than 3.3.3
This also makes androguard a hard requirement, which has been true for a
while anyway.  So the code that handles androguard as an optional
requirement is removed.  androguard from Debian/buster is new enough, so
this does not seem like it will cause any problems.
2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
cdc7c98707 common.get_androguard_APK() is no longer private to the module 2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
a742df3758
add CHANGELOG entry for v2.2.2 2024-04-25 12:39:00 +02:00
Hans-Christoph Steiner
e45e37b2df Merge branch 'altstore-index-fix' into 'master'
🐛 index fix: skip altstore when no IPAs present

See merge request fdroid/fdroidserver!1473
2024-04-24 12:05:03 +00:00
Michael Pöhn
005a33732c apply review suggestions 2024-04-24 11:56:07 +00:00
Michael Pöhn
bd6afa4365
🐛 index fix: skip altstore when no IPAs present 2024-04-24 12:45:29 +02:00
Hans-Christoph Steiner
07929ffe66 Merge branch 'black' into 'master'
move fdroidserver/deploy.py to black format

See merge request fdroid/fdroidserver!1472
2024-04-24 08:51:46 +00:00
Hans-Christoph Steiner
79f148167a deploy: automatically convert to black format 2024-04-24 08:42:15 +00:00
Hans-Christoph Steiner
cb04d801d8 deploy: manually move hard cases to black code format 2024-04-24 08:42:15 +00:00
Hans-Christoph Steiner
eacfb8095b Merge branch 'alt-store' into 'master'
iOS metadata + alt-store source support

See merge request fdroid/fdroidserver!1465
2024-04-24 08:39:05 +00:00
Hans-Christoph Steiner
9716b5e1ab index: manual black format 2024-04-24 10:29:50 +02:00
Michael Pöhn
d00a87ed6c
🏏 alt-store index: incorporate review feedback 2024-04-23 17:28:30 +02:00
Michael Pöhn
f2118b35a3
🏟️ fix ci 2024-04-23 16:06:10 +02:00
Michael Pöhn
45efb88f85
🕴️ add test for make_altstore 2024-04-23 16:05:58 +02:00
Michael Pöhn
86db8c93cc
🩹 fix parse_ipa tests 2024-04-23 16:05:47 +02:00
Michael Pöhn
f742799a9d
🏟️ add test for _parse_from_pbxproj
Also fix lint issues
2024-04-23 16:05:34 +02:00
Michael Pöhn
450765490b
🗺️ add test for _get_ipa_ico 2024-04-23 16:05:22 +02:00
Michael Pöhn
a21ed39117
🛻 move alstore index function
Move function for generating altstore index from update.py to index.py
2024-04-23 16:05:10 +02:00
Michael Pöhn
301f0c8273
🍎 altstore: implement ipa entitlement parser
This adds a parser for reading entitlement values from .ipa files.
Entitlement values are stored in files called
'.../embedded.mobileprovision' packed into .ipa files. These are CMS
signed plist files.

https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax

This also ignores the 2 non-optional entitlements, as mentioned in
altstore docs:

https://faq.altstore.io/distribute-your-apps/make-a-source#entitlements-array-of-strings
2024-04-23 16:04:57 +02:00
Michael Pöhn
2658c22933
🖼️ altstore index screenshots and icons 2024-04-23 16:04:44 +02:00
Michael Pöhn
519c3c1fcf
👑 altstore index: add entitlement support 2024-04-23 16:04:31 +02:00
Michael Pöhn
93e7cc9092
📑 better alt-store index 2024-04-23 16:04:19 +02:00
Michael Pöhn
fb33ae58e2
🐑 naive alt-store support
Naive shot at implementing alt store support. Might still be missing important
bits and pices I'm not aware of.
2024-04-23 16:04:07 +02:00
Hans-Christoph Steiner
e24640da85 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1470
2024-04-10 14:03:35 +00:00
Hans-Christoph Steiner
1fa376a9dc CheckUpdates should be called checkupdates
"checkupdates" is an fdroid subcommand, e.g. `fdroid checkupdates`, and it
is always spelled all lower case.

sed -i 's,CheckUpdates,checkupdates,g' fdroidserver/*.py locale/*/LC_MESSAGES/fdroidserver.po
2024-04-10 15:50:26 +02:00
Hans-Christoph Steiner
6ab1fd9945 fix UpdateCheckMode string in lint
sed -i "s/UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet/UpdateCheckMode is set but it looks like checkupdates hasn't been run yet./g" locale/*/LC_MESSAGES/fdroidserver.po
2024-04-10 15:50:26 +02:00
Hans-Christoph Steiner
443973c6f1 Translated using Weblate: Romanian (ro) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Hungarian (hu) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 57.6% (318 of 552 strings)

Translated using Weblate: Korean (ko) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 32.7% (181 of 552 strings)

Translated using Weblate: French (fr) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Tibetan (bo) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 53.4% (295 of 552 strings)

Translated using Weblate: Chinese (Traditional) (zh_Hant) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 66.8% (369 of 552 strings)

Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/bo/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/hu/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
Translation: F-Droid/F-Droid Server
2024-04-10 15:50:26 +02:00
VfBFan
954c136506 Translated using Weblate: German (de) by VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
2024-04-10 15:50:26 +02:00
Alexander Ivanov
4e491830cc Translated using Weblate: Russian (ru) by Alexander Ivanov <saiv46.dev@gmail.com>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
2024-04-10 15:50:26 +02:00
Besnik Bleta
a90191949d Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.1% (536 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
2024-04-10 15:50:26 +02:00
Besnik Bleta
e8a980ea9c Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 94.5% (522 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
2024-04-10 15:50:26 +02:00
Simona Iacob
0d12b5ffba Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>
Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 99.6% (550 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 99.0% (547 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 98.5% (544 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 98.3% (543 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 97.2% (537 of 552 strings)

Co-authored-by: Simona Iacob <s@zp1.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2024-04-10 15:50:10 +02:00
Licaon Kter
b08ae68706 Translated using Weblate: Romanian (ro) by Licaon Kter <licaon.kter@protonmail.com>
Currently translated at 96.7% (534 of 552 strings)

Co-authored-by: Licaon Kter <licaon.kter@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2024-04-10 15:50:10 +02:00
linsui
44f4317ff8 Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>
Currently translated at 80.4% (444 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 80.4% (444 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 80.2% (443 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 80.0% (442 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 79.8% (441 of 552 strings)

Co-authored-by: linsui <linsui@inbox.lv>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-04-10 15:47:54 +02:00
David Jiang
98d880fe1c Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>
Currently translated at 80.4% (444 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 80.2% (443 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 80.0% (442 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 79.8% (441 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 79.7% (440 of 552 strings)

Co-authored-by: David Jiang <david.jiang2024@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-04-10 15:47:54 +02:00
Daniel Hejduk
6ba048d660 Translated using Weblate: Czech (cs) by Daniel Hejduk <jellymail@protonmail.com>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Daniel Hejduk <jellymail@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-04-10 15:40:59 +02:00
Hans-Christoph Steiner
d6bbebddbb Merge branch 'buymeacoffee' into 'master'
insert_funding_yml_donation_links: update lfx link and add polar

See merge request fdroid/fdroidserver!1469
2024-04-10 12:06:06 +00:00
linsui
d62b8cc2ed insert_funding_yml_donation_links: support polar 2024-04-10 18:58:27 +08:00
linsui
c23af7984c insert_funding_yml_donation_links: update lfx link
community_bridge is lfx_crowdfunding now
2024-04-10 18:58:27 +08:00
Hans-Christoph Steiner
18fe76ced9 Merge branch 'drop_version_lock_pyasn1' into 'master'
Drop version locking on pyasn1

See merge request fdroid/fdroidserver!1467
2024-04-10 09:30:49 +00:00
Jochen Sprickerhof
4389168588 Drop version locking on pyasn1
I did not find any reason for this.
2024-04-10 09:30:34 +00:00
Hans-Christoph Steiner
b53c498fcd Merge branch 'buymeacoffee' into 'master'
insert_funding_yml_donation_links: support buymeacoffee

See merge request fdroid/fdroidserver!1468
2024-04-10 09:25:59 +00:00
linsui
d9f59536cf insert_funding_yml_donation_links: support buymeacoffee 2024-04-10 15:01:27 +08:00
Hans-Christoph Steiner
6a84fe1ae8 Merge branch 'ios-metadata' into 'master'
support iOS fastlane metadata

See merge request fdroid/fdroidserver!1426
2024-04-03 15:04:54 +00:00
Michael Pöhn
b6482f19a6 🛣️ update: fix pathlib import 2024-04-03 14:55:35 +00:00
Michael Pöhn
6152abee08 🪀 tests for insert_localized_ios_app_metadata
Split some functions from insert_localized_ios_app_metadata into
sub-functions and implemented separate tests for each.
2024-04-03 14:55:35 +00:00
Michael Pöhn
bbf17ee59c 🧆 improve and test parse_ios_screenshot_name 2024-04-03 14:55:35 +00:00
Michael Pöhn
806a07b719 🫏 better variable name 2024-04-03 14:55:35 +00:00
Michael Pöhn
53185ea2e7 🫏 appeace linter 2024-04-03 14:55:35 +00:00
Michael Pöhn
293caf5ff9 🪪 iOS fastlane screenshot support 2024-04-03 14:55:35 +00:00
Michael Pöhn
c166a8a2b7 🪄 split screenshot ingestion into separate function 2024-04-03 14:55:35 +00:00
Michael Pöhn
c1500e4ca1 🗨 iOS text metadata support
This change adds basic i18n support for parsing iOS fastlane metadata.
Currently supported:
 * name
 * subtitle (summary)
 * description
2024-04-03 14:55:35 +00:00
Hans-Christoph Steiner
d20e0adab4 Merge branch '1189-fdroid-link' into 'master'
Switch to generating fdroid.link links

Closes #1189

See merge request fdroid/fdroidserver!1459
2024-04-03 13:55:08 +00:00
Torsten Grote
faf1090214 Use fdroid.link for repo index page 2024-04-03 13:54:48 +00:00
Torsten Grote
be673c56cf Use fdroid.link for nightly README 2024-04-03 13:54:48 +00:00
Michael Pöhn
0ced053eaf Merge branch 'testOnly-check' into 'master'
check for <application android:testOnly="true">

See merge request fdroid/fdroidserver!1463
2024-04-03 13:49:47 +00:00
Hans-Christoph Steiner
9c65bed4a5 check for <application android:testOnly="true">
This adds a check for "testOnly" to the existing "debuggable" check, since
they are very similar.  We should really be refactoring all the checks into
a more reasonable setup.  Since "debuggable" and "testOnly" are both set in
the same place (`<application>` in _AndroidManifest.xml_) and are both set
by the same process (running debug builds), I thought it would be OK to
include both in the same place.  Plus it was a one-line change.
2024-04-03 13:47:04 +00:00
Michael Pöhn
0cf1749ec3 Merge branch 'publish-error-on-failed' into 'master'
publish: --error-on-failed to exit when signing/verifying fails

See merge request fdroid/fdroidserver!1464
2024-04-03 13:42:30 +00:00
Hans-Christoph Steiner
e269e41b12
publish: --error-on-failed to exit when signing/verifying fails
Since we have limited visibility into @CiaranG's signing server, it is hard
to make changes to the publishing process, especially ones that might break
@CiaranG's automation.  So `fdroid publish` mostly reports success by
moving an APK from unsigned/ to repo/.  In some cases, we want immediate
failure, like in CI.  So this adds `--error-on-failed` for that purpose.
2024-04-03 15:33:18 +02:00
Hans-Christoph Steiner
4c03082d14 Merge branch 'gradle' into 'master'
gradle 8.7

See merge request fdroid/fdroidserver!1460
2024-03-24 21:30:08 +00:00
linsui
1f28fce1ea gradle 8.7 2024-03-24 20:03:54 +08:00
Jochen Sprickerhof
6ab4b99a5f Merge branch 'jdk17' into 'master'
checkupdates: add a bookworm blocklist item

See merge request fdroid/fdroidserver!1458
2024-03-15 07:15:26 +00:00
linsui
082df1d9b6 checkupdates: add a bookworm blocklist item 2024-03-14 21:44:32 +08:00
Michael Pöhn
f7ca36a66b Merge branch 'appdirs' into 'master'
use appdirs to get easy cross-platform standard directories

See merge request fdroid/fdroidserver!1457
2024-03-14 12:44:10 +00:00
Hans-Christoph Steiner
6781525ddd use appdirs to get easy cross-platform standard directories
This is more important to get right now, with `fdroid install`, which
should work easily on all platforms.
2024-03-14 12:43:02 +00:00
Hans-Christoph Steiner
f003492574 Merge branch 'bookworm' into 'master'
Upgrade build server images to Bookworm

See merge request fdroid/fdroidserver!1439
2024-03-14 12:26:14 +00:00
proletarius101
ac4694fcd3
fix Could not initialize class org.codehaus.groovy.runtime.InvokerHelper
https://gitlab.com/proletarius101/fdroidserver/-/jobs/6068794117#L547
2024-03-14 13:14:41 +01:00
proletarius101
b20a14af09
fix unnecessary or invalid openjdk installation scripts 2024-03-14 13:14:41 +01:00
proletarius101
f2bdf5214a
install openjdk 11 from bullseye repo instead in the test cases 2024-03-14 13:14:41 +01:00
proletarius101
1bd35fc37f
upgrade basebox to 12.20231211.1 2024-03-14 13:14:41 +01:00
proletarius101
0a3f785254
drop gradle support before 7.3
debian bookworm supports only Java 17+, which is compatible with gradle 7.3+: https://docs.gradle.org/current/userguide/compatibility.html
2024-03-14 13:14:41 +01:00
proletarius101
a0a766cc8e
drop gradle support before 2.0
debian bullseye supports only Java 8+, which is compatible with gradle 2.0+: https://docs.gradle.org/current/userguide/compatibility.html
2024-03-14 13:14:41 +01:00
proletarius101
cf74ca5f56
update docker image tag 2024-03-14 13:14:41 +01:00
proletarius101
2fc9564ebe
use full base docker image 2024-03-14 13:14:40 +01:00
Licaon_Kter
5dc327e867
add missed file 2024-03-14 13:14:40 +01:00
Licaon_Kter
5733545972
fine tune purge 2024-03-14 13:14:40 +01:00
Licaon_Kter
27206162d4
Upgrade Buildserver VM to latest Debian (Bookworm) 2024-03-14 13:14:39 +01:00
Licaon_Kter
d31856b6c7
Upgrade Buildserver VM to latest Debian (Bookworm) 2024-03-14 13:14:35 +01:00
Licaon_Kter
f30dcf5069
Upgrade Buildserver VM to latest Debian (Bookworm) 2024-03-14 13:14:34 +01:00
Hans-Christoph Steiner
9105738427 Merge branch 'windows-path-split-fix' into 'master'
Fix path splitting error on Windows

See merge request fdroid/fdroidserver!1452
2024-03-13 19:46:08 +00:00
Sergey Zolotarev
6d71690946 Fix path splitting error on Windows 2024-03-13 19:44:44 +00:00
Hans-Christoph Steiner
980ff3c20a Merge branch 'fix_generic_whatsNew' into 'master'
Add unversioned whatsNew to index-v2 (Closes: #1202)

Closes #1202

See merge request fdroid/fdroidserver!1456
2024-03-13 18:11:00 +00:00
Jochen Sprickerhof
edb2d76e25
Add unversioned whatsNew to index-v2 (Closes: #1202)
copy_triple_t_store_metadata() can read the whatsNew from an unversioned
release-notes.txt. For v2 copy this to the latest build.
2024-03-13 06:40:33 +01:00
Hans-Christoph Steiner
b222275d77 Merge branch 'uri' into 'master'
scanner: update maven repo regex

See merge request fdroid/fdroidserver!1453
2024-03-12 07:57:11 +00:00
linsui
a002e46997 scanner: update maven repo regex 2024-03-12 07:57:11 +00:00
Hans-Christoph Steiner
07a0bd7314 Merge branch 'https-apt' into 'master'
gitlab-ci: always use HTTPS for apt repos

See merge request fdroid/fdroidserver!1450
2024-03-06 14:01:38 +00:00
Hans-Christoph Steiner
3560a2522a
gitlab-ci: docker:git has become stable, so switch to stable tag
When this job was implemented, it needed the "git" tag.  Now that it works,
still with the stable tag.
2024-03-06 14:51:19 +01:00
Hans-Christoph Steiner
7b45ea7898
gitlab-ci: always use HTTPS for apt repos
This has been in place in a number of other places and has proven stable,
so I'm introducing it here, since the "docker" job actually publishes
docker images that are publicly used.  So little painless security fixes
are worthwhile.
2024-03-06 14:50:51 +01:00
Hans-Christoph Steiner
2f556a9026 Merge branch 'net-install-tests' into 'master'
tests and code format from %"mirroring resilience" work

See merge request fdroid/fdroidserver!1451
2024-03-06 13:32:12 +00:00
Hans-Christoph Steiner
cff3364fdf split out mirrors data structure into standalone, tested function 2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
9749282b44 net: fix test_download_file_url_parsing
self.assertTrue(requests_get.called) will always be true because .called
will contain a MagicMock instance.
2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
7904f12d05 net: add test of automatic retries in download_file()
The existing logic from d1ddd525c in !1225 is confusing because it adds its
own retry loop on top of the retry mechanism that is built into requests.
So this test confirms that setting `download_file(retries=3)` actually
results in more than three retries.
2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
074dda4b61 use tiny entry.jar rather than large index-v1.jar for net test case 2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
261be20109 convert tests/testcommon.py to black code format 2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
617a9e75c7 convert install.py to black code format 2024-03-06 13:31:46 +00:00
Michael Pöhn
9dc14674f1 Merge branch 'nice-console-output' into 'master'
method to globally set logging to output nicely to the console

See merge request fdroid/fdroidserver!1449
2024-03-06 13:03:18 +00:00
Hans-Christoph Steiner
76d9eddb3a method to globally set logging to output nicely to the console
This will make all of the direct calls to logging level functions output
in a format that looks appropriate for the console. Previously, the default
output looked like it should be written to a log file.
2024-03-06 12:53:20 +00:00
Hans-Christoph Steiner
091fe9b260 Merge branch 'litecoin' into 'master'
fix litecoin address regex

See merge request fdroid/fdroidserver!1441
2024-02-28 08:01:03 +00:00
linsui
7913df25ba fix litecoin address regex 2024-02-28 08:00:39 +00:00
Hans-Christoph Steiner
c5d4b5b991 Merge branch 'nonfreenet-non-changeable' into 'master'
add 'non-changeable' to NonFreeNet description

See merge request fdroid/fdroidserver!1448
2024-02-21 17:31:58 +00:00
Nitai Sasson
8931e038d6 add 'non-changeable' to NonFreeNet description 2024-02-21 17:13:58 +01:00
Hans-Christoph Steiner
ba59241422 Merge branch 'refresh-scanner-in-buildserver-vm' into 'master'
build: pass --refresh-scanner thru to buildserver VM

See merge request fdroid/fdroidserver!1447
2024-02-16 15:36:34 +00:00
Hans-Christoph Steiner
04cedd1808 build: pass --refresh-scanner thru to buildserver VM 2024-02-16 11:43:42 +01:00
Hans-Christoph Steiner
35c373a473 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.6.4

See merge request fdroid/fdroidserver!1445
2024-02-14 17:41:46 +00:00
fdroid-bot
ec88cc627f gradle v8.6 2024-02-14 17:32:15 +00:00
Hans-Christoph Steiner
3c77ac66b1
gitlab-ci: revert to old config.py for servergitmirrors: job 2024-02-14 18:31:25 +01:00
Hans-Christoph Steiner
c794c0fe18 Merge branch 'fixup-1438' into 'master'
fixups from "feat: add servergitmirrors as a dict support"

See merge request fdroid/fdroidserver!1446
2024-02-14 17:12:17 +00:00
Hans-Christoph Steiner
4e0c721b04 fixups from "feat: add servergitmirrors as a dict support"
These slipped by in reviewing fdroidserver!1438
https://gitlab.com/fdroid/fdroidserver/-/jobs/6173435409
2024-02-14 18:10:29 +01:00
Hans-Christoph Steiner
094764398a Merge branch 'servergitmirrors-as-dict' into 'master'
feat: add servergitmirrors as a dict support

See merge request fdroid/fdroidserver!1438
2024-02-14 16:50:40 +00:00
proletarius101
947217549a feat: add servergitmirrors as a dict support 2024-02-14 16:50:39 +00:00
Hans-Christoph Steiner
12692b76b7 Merge branch 'safety-ignore-windows-only-CVE-2024-22190' into 'master'
safety: ignore CVE-2024-22190 it only affects Windows

See merge request fdroid/fdroidserver!1444
2024-02-14 16:49:50 +00:00
Hans-Christoph Steiner
b36153b06c
safety: ignore CVE-2024-22190 it only affects Windows
https://security-tracker.debian.org/tracker/CVE-2024-22190
2024-02-14 17:46:12 +01:00
Hans-Christoph Steiner
7462ed7283 Merge branch 'gradle' into 'master'
add gradle 8.6

See merge request fdroid/fdroidserver!1440
2024-02-05 13:23:45 +00:00
linsui
ac71bb07b8 add gradle 8.6 2024-02-05 13:23:13 +00:00
Hans-Christoph Steiner
ee764ff92e Merge branch 'scanner' into 'master'
scanner: refresh data without scanning

See merge request fdroid/fdroidserver!1437
2024-01-29 15:26:28 +00:00
linsui
2f313a0bd6 scanner: refresh data without scaning 2024-01-29 23:13:13 +08:00
Michael Pöhn
1c203ae643 Merge branch 'refresh_scanner-config' into 'master'
scanner: add refresh_config config item for buildserver

Closes #1184

See merge request fdroid/fdroidserver!1435
2024-01-25 22:40:23 +00:00
Hans-Christoph Steiner
031a130395 scanner: add refresh_config config item for buildserver
Includes some cosmetic changes from black.
2024-01-25 17:04:38 +01:00
Hans-Christoph Steiner
907dfd1c3c Merge branch 'suss-refresh' into 'master'
scanner: use the refreshed data

Closes #1184

See merge request fdroid/fdroidserver!1434
2024-01-25 13:11:21 +00:00
Hans-Christoph Steiner
d6aa3caaca
scanner: test of --refresh controls triggering a refresh 2024-01-25 14:03:46 +01:00
linsui
6fb2e07dda fdroid build: add --refresh-scanner option
Apply 1 suggestion(s) to 1 file(s)
2024-01-25 14:03:12 +01:00
linsui
fe7e4f8226 scanner: refresh data before loading data 2024-01-25 14:03:12 +01:00
Hans-Christoph Steiner
aa0b85955c Merge branch 'version' into 'master'
Fix "fdroid --version"

Closes #1164

See merge request fdroid/fdroidserver!1433
2024-01-25 12:00:30 +00:00
Gregor Düster
b9c7e8f63a Fix "fdroid --version"
Fixes https://gitlab.com/fdroid/fdroidserver/-/issues/1164 .

Helpful resource:
https://packaging.python.org/en/latest/guides/single-sourcing-package-version/
2024-01-25 12:00:05 +00:00
Hans-Christoph Steiner
7ade08e46d Merge branch 'updatesuss' into 'master'
Update default suss

See merge request fdroid/fdroidserver!1431
2024-01-25 11:40:32 +00:00
Hans-Christoph Steiner
1d9ec42758 scanner: update test counts based on new default rules
The new rules announce more things.
2024-01-25 12:31:05 +01:00
Hans-Christoph Steiner
681392d8c2 scanner: script to update default rules from SUSS 2024-01-25 11:51:22 +01:00
Licaon_Kter
ac6a08e10f Update default suss 2024-01-25 11:05:55 +01:00
Michael Pöhn
d60f36c30e Merge branch 'serverwebroot-as-dict' into 'master'
config: convert serverwebroot: to list-of-dicts format

See merge request fdroid/fdroidserver!1430
2024-01-24 10:46:04 +00:00
Hans-Christoph Steiner
810387a009 deploy: update_serverwebroots() for testable logic
This moves all of the serverwebroot: logic into a function, and adds tests.
I did this because I ran into issues in the logic in main():

Traceback (most recent call last):
  File "/builds/eighthave/fdroidserver/fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/builds/eighthave/fdroidserver/fdroidserver/__main__.py", line 230, in main
    raise e
  File "/builds/eighthave/fdroidserver/fdroidserver/__main__.py", line 211, in main
    mod.main()
  File "/builds/eighthave/fdroidserver/fdroidserver/deploy.py", line 753, in main
    s = serverwebroot.rstrip('/').split(':')
AttributeError: 'dict' object has no attribute 'rstrip'
2024-01-23 18:49:12 +01:00
Hans-Christoph Steiner
fbf097d390 deploy: update_serverwebroot() works w/o options/config
Since update_serverwebroot() is part of the public API, this function should
work without setting `fdroidserver.deploy.options` or
`fdroidserver.deploy.config`.
2024-01-23 17:48:47 +01:00
Hans-Christoph Steiner
7a656d45e3 config: convert serverwebroot: to list-of-dicts format
This allows for more metadata about the server and deploy mode.
2024-01-22 22:11:49 +01:00
Hans-Christoph Steiner
3f50372d8d config: test cases for serverwebroot: with string and list 2024-01-22 22:11:49 +01:00
Michael Pöhn
5983962107 Merge branch 'biplist' into 'master'
gitlab-ci: install biplist if available, otherwise skip test_parse_ipa

See merge request fdroid/fdroidserver!1429
2024-01-11 16:21:32 +00:00
Hans-Christoph Steiner
dc7170e709 gitlab-ci: install biplist if available, otherwise skip test_parse_ipa
Fedora does not have a biplist package.
2024-01-11 16:02:06 +01:00
Hans-Christoph Steiner
6eee83db47 run black on new .ipa test cases 2024-01-11 16:02:06 +01:00
Hans-Christoph Steiner
22d3ba81dd Merge branch 'ipa-support' into 'master'
minimal IPA support

Closes #1067

See merge request fdroid/fdroidserver!1413
2024-01-11 11:13:48 +00:00
Michael Pöhn
8b5a61bb25 ⛰️ make ipa related test cases more robust 2024-01-11 12:02:53 +01:00
Michael Pöhn
881943a0db 🥔 install biplist for ci tests
biplist is an optional python dependency required for processing iOS
apps. (.ipa files)
2024-01-11 12:02:52 +01:00
Michael Pöhn
7211e9f9b4 🍲 add unit test for update.scan_repo_for_ipas 2024-01-11 11:34:21 +01:00
Michael Pöhn
995118bcd2 🥔 add strapped IPA file and test for parse_ipa 2024-01-11 11:34:21 +01:00
Michael Pöhn
c288317530 🪨 version string conversion: error handling+tests 2024-01-11 11:34:21 +01:00
Michael Pöhn
3ee91d1777 🧴 force android package names for IPAs for now 2024-01-11 11:34:21 +01:00
Michael Pöhn
ea9374ecf6 🛠️ update.py: finish minimal IPA support
This add a few missing pieces to get IPA support working. (added and
lastUpdated dates + caching for ipa files)
2024-01-11 11:34:05 +01:00
Jochen Sprickerhof
60371093e2 Make python3-biplist optional 2024-01-11 11:34:00 +01:00
Jochen Sprickerhof
e3d319f30b Update with suggestions 2024-01-11 11:33:25 +01:00
Jochen Sprickerhof
7d06608531 Move version_string_to_int into separate function 2024-01-11 11:33:25 +01:00
Jochen Sprickerhof
dfbb2df839 Use CFBundleShortVersionString for version code 2024-01-11 11:33:25 +01:00
Jochen Sprickerhof
a987341c37 ipa: add Usage permissions 2024-01-11 11:33:25 +01:00
Jochen Sprickerhof
77daf6feb6 Add Apple ipa support (Closes: #1067) 2024-01-11 11:33:25 +01:00
Hans-Christoph Steiner
11d21d6b18
gitlab-ci: bump base commit in metadata_v0 job to get rev-parse fix
!1427
2024-01-11 11:33:00 +01:00
Hans-Christoph Steiner
50aa35772b Merge branch 'fix-ci-pycountry' into 'master'
gitlab-ci: include pycountry in all master-only jobs

See merge request fdroid/fdroidserver!1428
2024-01-10 17:46:53 +00:00
Hans-Christoph Steiner
69ccce0644
gitlab-ci: include pycountry in all master-only jobs
follow up from !1418
2024-01-09 16:53:25 +01:00
Hans-Christoph Steiner
79bb763986 Merge branch 'fix_git_describe' into 'master'
Use git rev-parse instead of describe

See merge request fdroid/fdroidserver!1427
2024-01-09 14:04:26 +00:00
Hans-Christoph Steiner
0849e664e7 metadata_v0: use git rev-parse instead of git describe 2024-01-09 14:54:38 +01:00
Jochen Sprickerhof
d3abb74c88
Use git rev-parse instead of describe
We only want the hash.
2024-01-09 13:15:23 +01:00
Hans-Christoph Steiner
252af24cc3 Merge branch 'lint-config-files' into 'master'
lint config files

See merge request fdroid/fdroidserver!1418
2024-01-09 09:41:35 +00:00
Hans-Christoph Steiner
d7a673523d "field will be in random order" only applies to config.py
YAML only has lists, no sets or tuples, so this warning can only ever make
any sense when config.py is the active config file.
2024-01-09 09:32:37 +00:00
Hans-Christoph Steiner
a1d9d9d885 switch to loading mirrors.yml with ruamel to get YAML 1.2 support 2024-01-09 09:32:37 +00:00
Hans-Christoph Steiner
96fc49d7fc lint: check syntax of countryCode: fields for mirrors 2024-01-09 09:32:37 +00:00
Hans-Christoph Steiner
4511da68b9 lint: support linting config files 2024-01-09 09:32:37 +00:00
Hans-Christoph Steiner
3f35b0b361 lint: do yamllint install check once globally 2024-01-09 09:32:37 +00:00
Hans-Christoph Steiner
a3b7c5ad12 Merge branch 'parse-srclibs' into 'master'
handle all cases of @ in srclibs, and remove duplicate code

See merge request fdroid/fdroidserver!1424
2024-01-08 15:02:34 +00:00
Hans-Christoph Steiner
6faaae9431 always parse srclib entries with parse_srclib_spec()
Remove duplicated code.
2024-01-07 10:50:29 +01:00
Hans-Christoph Steiner
15b983f48d handle all cases of @ in srclibs
expands on fdroidserver!1422
2024-01-07 10:50:29 +01:00
Hans-Christoph Steiner
599bd5a3a1 Merge branch 'srclib' into 'master'
allow @ in srclib tag

See merge request fdroid/fdroidserver!1422
2024-01-06 21:46:33 +00:00
linsui
2331bcfe15 all @ in srclib tag 2023-12-19 15:49:17 +08:00
Hans-Christoph Steiner
83cd04f3b6 Merge branch 'macOS' into 'master'
GitLab CI: add shellcheck, androguard <4, silence irrelevant bandit error, enable macOS job

See merge request fdroid/fdroidserver!1421
2023-12-15 08:47:42 +00:00
Hans-Christoph Steiner
8c8b9021f5 tests/run-tests: disable nightly.TestCase on non-Linux until its ported 2023-12-15 09:15:19 +01:00
Hans-Christoph Steiner
52f27aea75 tests/run-tests: temp disable git mirror test on non-Linux
I looked into this but couldn't figure it out.  It is the only failing
test on macOS, so it seemed worth just adding this single quirk for now.
2023-12-15 09:15:19 +01:00
Hans-Christoph Steiner
d9288c8613 gitlab-ci: add macOS job based on only Travis job 2023-12-15 09:14:50 +01:00
Hans-Christoph Steiner
2f84ce36da androguard 4 came out, and has breaking changes 2023-12-15 08:40:27 +01:00
Hans-Christoph Steiner
2d5770985f gitlab-ci: silence irrelevant bandit error
This SSH connection is only ever to the Vagrant VM on the same machine.

>> Issue: [B507:ssh_no_host_key_verification] Paramiko call with policy set to automatically trust the unknown host key.
   Severity: High   Confidence: Medium
   CWE: CWE-295 (https://cwe.mitre.org/data/definitions/295.html)
   More Info: https://bandit.readthedocs.io/en/1.7.6/plugins/b507_ssh_no_host_key_verification.html
   Location: ./fdroidserver/build.py:104:8
103	        sshs = paramiko.SSHClient()
104	        sshs.set_missing_host_key_policy(paramiko.AutoAddPolicy())
105	        sshs.connect(sshinfo['hostname'], username=sshinfo['user'],
2023-12-15 08:40:27 +01:00
Hans-Christoph Steiner
865673964e gitlab-ci: enable shellcheck on tests/run-tests 2023-12-15 08:40:01 +01:00
Hans-Christoph Steiner
9d8c098f74 gitlab-ci: add shellcheck to gradlew-fdroid checks 2023-12-15 08:39:13 +01:00
Hans-Christoph Steiner
45d1363a0e tests/run-tests: use $sed var for all calls that need GNU sed
FreeBSD, macOS, and others come with BSD sed, which does not support all
the things that GNU sed does.  Also, BSD rmdir does not have any extended
options like --ignore-fail-on-non-empty.
2023-12-13 22:30:19 +01:00
Michael Pöhn
bf73477d4c Merge branch 'port-to-vendored-looseversion' into 'master'
port to vendored looseversion lib

See merge request fdroid/fdroidserver!1419
2023-12-08 11:18:30 +00:00
Hans-Christoph Steiner
e2949cbd61 port to looseversion 2023-12-08 10:48:01 +01:00
Hans-Christoph Steiner
4b208e438e gitlab-ci: gradle job needs python3-packaging now 2023-12-08 10:42:29 +01:00
Hans-Christoph Steiner
ad9cabdab9 add looseversion license information to vendored file 2023-12-08 10:42:29 +01:00
Hans-Christoph Steiner
a1a88d39cf download looseversion to vendor
e1a5a176a9/src/looseversion/__init__.py
2023-12-08 10:42:27 +01:00
Hans-Christoph Steiner
c4424a5e1a Merge branch 'python3.12' into 'master'
Add support for Python 3.12

See merge request fdroid/fdroidserver!1403
2023-12-08 07:30:48 +00:00
Andrew Gunnerson
679ba6f552
Add support for Python 3.12
Python 3.12 completely removed the builtin `distutils` module. This
commit replaces its use with the `packaging` package, which is an
external dependency, but maintained by the Python developers.

Signed-off-by: Andrew Gunnerson <accounts+gitlab@chiller3.com>
2023-12-07 18:15:05 -05:00
Michael Pöhn
2fb8fc4879 Merge branch 'config-mirrors-yml' into 'master'
establish config/mirrors.yml as a way to set up mirrors

See merge request fdroid/fdroidserver!1417
2023-12-07 16:34:14 +00:00
Hans-Christoph Steiner
4536b130df index: add datatype checking to mirrors: and config/mirrors.yml 2023-12-07 17:25:15 +01:00
Hans-Christoph Steiner
6d541e3ef6
establish config/mirrors.yml as a way to set up mirrors
The mirrors: entry in config.yml is great for quick access and shorter
mirror lists.  Now that we are adding a lot more metadata to the mirrors,
including potentially the full text of the privacy policy, having this
in its own file should make these cases easier to manage.
2023-12-07 14:38:26 +01:00
Hans-Christoph Steiner
7a0dad6dfc Merge branch 'master' into 'master'
Support `Uri.create()` syntax for maven repositories

Closes #1180

See merge request fdroid/fdroidserver!1412
2023-12-07 09:58:53 +00:00
Axel López
825f969652 Support Uri.create() syntax for maven repositories 2023-12-07 01:30:59 +00:00
Hans-Christoph Steiner
4a8b6432a4 Merge branch 'lint' into 'master'
lint: remove check_bulletes_lists

See merge request fdroid/fdroidserver!1416
2023-12-06 16:01:22 +00:00
linsui
2081a9f2d2 lint: remove check_bulletes_lists 2023-12-06 23:35:55 +08:00
Michael Pöhn
baf4cd6b61 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.5

See merge request fdroid/fdroidserver!1415
2023-12-01 13:29:37 +00:00
fdroid-bot
685983bfab gradle v8.5 2023-11-30 19:13:01 +00:00
Hans-Christoph Steiner
a7142f787c Merge branch 'fix-bandit-lint' into 'master'
🩹 fix bandit warning

See merge request fdroid/fdroidserver!1414
2023-11-30 19:12:29 +00:00
Michael Pöhn
ac2a3896aa
🩹 fix bandit warning
F-Droid server doesn't fetch pip dependencies directly from mercurial/hg
repositories. So https://data.safetycli.com/v/62044/f17/ is not
affecting us. Hence we can ingore it.
2023-11-30 17:49:55 +01:00
Hans-Christoph Steiner
304caa4b42 Merge branch 'deinit' into 'master'
add --force to git deinit

See merge request fdroid/fdroidserver!1411
2023-11-28 10:02:03 +00:00
linsui
e2e7782ef3 add --force to git deinit 2023-11-25 22:11:19 +08:00
Michael Pöhn
9b38690df6 Merge branch 'port-test-jq-to-gnu-sed' into 'master'
remove jq dependency in the tests, port to GNU sed

See merge request fdroid/fdroidserver!1410
2023-11-23 12:29:25 +00:00
Hans-Christoph Steiner
f13d9235ce remove jq dependency in the tests, port to GNU sed
This avoids spreading the jq dependency to more places, like:

https://gitlab.com/eighthave/ansible-role-install-fdroidserver-dependencies/-/jobs/5559798360

And is helpful when porting to non-Debian platforms.
2023-11-23 12:24:49 +00:00
Michael Pöhn
4b5dd72674 Merge branch 'ruamel' into 'master'
set ruamel.yaml version to older than 1.17.22

See merge request fdroid/fdroidserver!1389
2023-11-23 12:24:32 +00:00
linsui
6a7a6e310b set ruamel.yaml version to older than 1.17.22
Newer version changed the behavior
2023-11-23 12:17:56 +00:00
Jochen Sprickerhof
ecb6b599b6 Merge branch 'remove_glay_repotrunk' into 'master'
Remove --gplay option and UpdateCheckMode "RepoTrunk"

See merge request fdroid/fdroidserver!1402
2023-11-21 07:27:08 +00:00
Gregor Düster
b5424d40f1 [checkupdates] Remove UpdateCheckMode "RepoTrunk"
It's unclear whether this still works and we're not planning to maintain
it.
2023-11-21 07:18:17 +00:00
Gregor Düster
81fdba452a [checkupdates] Remove --gplay option
It's unclear whether this still works and we're not planning to maintain
it.
2023-11-21 07:18:17 +00:00
Jochen Sprickerhof
cbfb12f917 Merge branch 'revert--filter-blob-none' into 'master'
Revert "Clone without blobs to save space"

Closes #1177

See merge request fdroid/fdroidserver!1409
2023-11-20 09:23:21 +00:00
Hans-Christoph Steiner
3e9f27612e Revert "Clone without blobs to save space" !1382
This seems to make git ignore the _fsck skipList_ files.

This reverts commit 24ea1f6852.

closes #1177
fdroid-bootstrap-buildserver!34
!1408
2023-11-20 10:07:05 +01:00
Hans-Christoph Steiner
79adc6f57a Merge branch 'fetchsrclib' into 'master'
fetch_srclib: fetch source code

See merge request fdroid/fdroidserver!1407
2023-11-17 10:46:06 +00:00
linsui
5ae15532f0 fetch_srclib: fetch source code 2023-11-17 10:45:53 +00:00
Hans-Christoph Steiner
cbbb255551 Merge branch 'python3.12_docker' into 'master'
buildserver: Add python3-packaging dependency

See merge request fdroid/fdroidserver!1406
2023-11-17 09:16:54 +00:00
Andrew Gunnerson
f4f1de941c
buildserver: Add python3-packaging dependency
Signed-off-by: Andrew Gunnerson <accounts+gitlab@chiller3.com>
2023-11-15 18:43:58 -05:00
Jochen Sprickerhof
5751a50f21 Merge branch 'deinit' into 'master'
deinit git submodule

See merge request fdroid/fdroidserver!1404
2023-11-15 14:02:14 +00:00
linsui
f99f430e9e deinit git submodule 2023-11-14 01:06:49 +08:00
Hans-Christoph Steiner
f14efd849c Merge branch 'install-android-m2repository-without-sudo' into 'master'
allow gradle/sdkmanager to install extras;android;m2repository

Closes #1169

See merge request fdroid/fdroidserver!1399
2023-11-09 12:26:07 +00:00
Hans-Christoph Steiner
8aad2dd0c3 allow gradle/sdkmanager to install extras;android;m2repository
closes #1169
2023-11-09 12:25:33 +00:00
Hans-Christoph Steiner
79d69696a4 Merge branch 'clone_without_blobs' into 'master'
Clone without blobs to save space

See merge request fdroid/fdroidserver!1382
2023-11-09 12:22:20 +00:00
sim
24ea1f6852 Clone without blobs to save space 2023-11-09 12:13:29 +00:00
Jochen Sprickerhof
bb5fc0a380 Merge branch 'fixup_more_docstrings' into 'master'
[docs] Remove unnecessary use of Union

See merge request fdroid/fdroidserver!1401
2023-11-06 08:46:05 +00:00
Gregor Düster
81fea25509
[docs] Remove unnecessary use of Union 2023-10-26 09:17:43 +02:00
Jochen Sprickerhof
f4b10cf839 Merge branch 'more_docstrings' into 'master'
[checkupdates] Add more docstrings

See merge request fdroid/fdroidserver!1400
2023-10-23 08:54:38 +00:00
Gregor Düster
02b855da5e
[docs] Start utilising intersphinx 2023-10-22 21:27:08 +02:00
Gregor Düster
f238470855
[docs] Put type annotations in type hints instead of docstring 2023-10-22 21:01:27 +02:00
Gregor Düster
7b715bb2c9
[docs] Enable intersphinx 2023-10-22 20:43:52 +02:00
Gregor Düster
5503a05ef6
[checkupdates] Add more docstrings 2023-10-22 19:19:56 +02:00
Hans-Christoph Steiner
d036d5be36 Merge branch 'fix-typo-build-py' into 'master'
Fix typo in build.py

See merge request fdroid/fdroidserver!1398
2023-10-10 14:26:52 +00:00
cvzi
af1c5d4e5d Fix typo in build.py
encoutered -> encountered
2023-10-10 12:14:20 +00:00
Jochen Sprickerhof
3f8c3cdf18 Merge branch 'safety-ignore-patched-cves' into 'master'
safety: ignore CVEs patched in Debian

See merge request fdroid/fdroidserver!1397
2023-10-10 07:43:47 +00:00
Hans-Christoph Steiner
667567abb8
safety: ignore CVEs patched in Debian 2023-10-10 09:33:51 +02:00
Hans-Christoph Steiner
7af54754e6 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.6.3

See merge request fdroid/fdroidserver!1396
2023-10-10 07:27:00 +00:00
fdroid-bot
1ddc448f15 gradle v8.4 2023-10-10 07:19:29 +00:00
Hans-Christoph Steiner
608e2d0839 Merge branch 'gradle84' into 'master'
Gradle 8.4

See merge request fdroid/fdroidserver!1395
2023-10-10 07:18:54 +00:00
Licaon_Kter
2a33567577 Gradle 8.4 2023-10-10 07:18:42 +00:00
Hans-Christoph Steiner
113bf3a769 Merge branch 'fix_logging' into 'master'
Ignore encoding errors in logs

See merge request fdroid/fdroidserver!1394
2023-10-10 07:16:15 +00:00
Jochen Sprickerhof
49c415424d
Ignore encoding errors in logs
Found while compiling io.privatestorage.privatestoragemobile_9:

Traceback (most recent call last):
  File "/home/fdroid/fdroidserver/fdroidserver/build.py", line 1053, in main
    if trybuild(app, build, build_dir, output_dir, log_dir,
  File "/home/fdroid/fdroidserver/fdroidserver/build.py", line 813, in trybuild
    build_server(app, build, vcs, build_dir, output_dir, log_dir, force)
  File "/home/fdroid/fdroidserver/fdroidserver/build.py", line 253, in build_server
    logging.debug("buildserver > " + str(line, 'utf-8').rstrip())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfa in position 8: invalid start byte
2023-09-27 17:41:26 +02:00
Hans-Christoph Steiner
047819d34f Merge branch 'weblate' into 'master'
Sync translations with Weblate

See merge request fdroid/fdroidserver!1393
2023-09-22 08:23:53 +00:00
Gregor Düster
d6187679b6
locale/ro: Fix template string 2023-09-22 09:37:33 +02:00
Yaron Shahrabani
a2f9ca4bf4
Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>
Currently translated at 4.5% (25 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/he/
2023-09-21 14:23:37 +00:00
Xiang Heng Wei
5dd325941c
Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xiang Heng Wei <yylteam@hotmail.com>
Currently translated at 79.5% (439 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2023-09-21 14:23:37 +00:00
Bai
edfe52a5eb
Translated using Weblate: Turkish (tr) by Bai <batuhanakkurt000@gmail.com>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
2023-09-21 14:23:36 +00:00
Random
376209dcca
Translated using Weblate: Italian (it) by Random <random-r@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2023-09-21 14:23:36 +00:00
Random
e2ba75aa51
Translated using Weblate: Italian (it) by Random <random-r@users.noreply.hosted.weblate.org>
Currently translated at 96.7% (534 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2023-09-21 14:23:35 +00:00
Random
36cadf0103
Translated using Weblate: Italian (it) by Random <random-r@users.noreply.hosted.weblate.org>
Currently translated at 96.5% (533 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2023-09-21 14:23:34 +00:00
The Cats
95e85c2a86
Translated using Weblate: Portuguese (Brazil) (pt_BR) by The Cats <philosoph@danwin1210.de>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
2023-09-21 14:23:34 +00:00
Simona Iacob
3761e3368c
Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>
Currently translated at 95.1% (525 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
2023-09-21 14:23:33 +00:00
HM
c26f0d0da8
Translated using Weblate: Persian (fa) by HM <goodlinuxuser@chmail.ir>
Currently translated at 7.7% (43 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fa/
2023-09-21 14:23:33 +00:00
The Cats
fb36179919
Translated using Weblate: Portuguese (Brazil) (pt_BR) by The Cats <philosoph@danwin1210.de>
Currently translated at 96.9% (535 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
2023-09-21 14:23:32 +00:00
coronabond
84839b5914
Translated using Weblate: Italian (it) by coronabond <coronabond@airmail.cc>
Currently translated at 96.3% (532 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2023-09-21 14:23:31 +00:00
gallegonovato
1fe77bb34f
Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2023-09-21 14:23:31 +00:00
Translator
3a5374be9d
Translated using Weblate: French (fr) by Translator <kvb@tuta.io>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2023-09-21 14:23:30 +00:00
gallegonovato
1603f00ab4
Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 97.8% (540 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2023-09-21 14:23:30 +00:00
John Donne
8164f3d13f
Translated using Weblate: French (fr) by John Donne <akheron@zaclys.net>
Currently translated at 99.0% (547 of 552 strings)

Co-authored-by: John Donne <akheron@zaclys.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:29 +00:00
zhiqi
348b4ac19b
Translated using Weblate: Chinese (Simplified) (zh_Hans) by zhiqi <lzqlzq21@gmail.com>
Currently translated at 76.4% (422 of 552 strings)

Co-authored-by: zhiqi <lzqlzq21@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:28 +00:00
Stephan Paternotte
5f1740ebc8
Translated using Weblate: Dutch (nl) by Stephan Paternotte <stephan@paternottes.net>
Currently translated at 3.6% (20 of 552 strings)

Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nl/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:28 +00:00
Mirko Di
8acc82a11c
Translated using Weblate: Italian (it) by Mirko Di <mirko@mirkodi.eu>
Currently translated at 96.3% (532 of 552 strings)

Co-authored-by: Mirko Di <mirko@mirkodi.eu>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:27 +00:00
Kingo Bingo
8ee10c9499
Translated using Weblate: Chinese (Simplified) (zh_Hans) by Kingo Bingo <bingokingosoft@gmail.com>
Currently translated at 75.9% (419 of 552 strings)

Co-authored-by: Kingo Bingo <bingokingosoft@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:26 +00:00
ssantos
7396c77474
Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:26 +00:00
abe1242
218db99769
Translated using Weblate: Malayalam (ml) by abe1242 <abmdn1242@gmail.com>
Currently translated at 1.0% (6 of 552 strings)

Co-authored-by: abe1242 <abmdn1242@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ml/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:25 +00:00
C. Rüdinger
318010649f
Translated using Weblate: German (de) by "C. Rüdinger" <Mail-an-CR@web.de>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: C. Rüdinger <Mail-an-CR@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:25 +00:00
The Cats
f6cdeadb1f
Translated using Weblate: Portuguese (Brazil) (pt_BR) by The Cats <philosoph@danwin1210.de>
Currently translated at 96.7% (534 of 552 strings)

Translated using Weblate: Portuguese (Brazil) (pt_BR) by The Cats <philosoph@danwin1210.de>

Currently translated at 95.8% (529 of 552 strings)

Translated using Weblate: Portuguese (Brazil) (pt_BR) by The Cats <philosoph@danwin1210.de>

Currently translated at 95.1% (525 of 552 strings)

Co-authored-by: The Cats <philosoph@danwin1210.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:24 +00:00
Davide Neri
b167f6b3ee
Translated using Weblate: Italian (it) by Davide Neri <davnerix@gmail.com>
Currently translated at 96.1% (531 of 552 strings)

Translated using Weblate: Italian (it) by Davide Neri <davnerix@gmail.com>

Currently translated at 96.0% (530 of 552 strings)

Co-authored-by: Davide Neri <davnerix@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:23 +00:00
gallegonovato
2029b5a107
Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 95.1% (525 of 552 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:23 +00:00
Rex_sa
0fe7c5ef1f
Translated using Weblate: Arabic (ar) by Rex_sa <rex.sa@pm.me>
Currently translated at 3.2% (18 of 552 strings)

Translated using Weblate: Arabic (ar) by Rex_sa <rex.sa@pm.me>

Currently translated at 2.7% (15 of 552 strings)

Co-authored-by: Rex_sa <rex.sa@pm.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ar/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:22 +00:00
Translator
ed6da709d4
Translated using Weblate: French (fr) by Translator <kvb@tuta.io>
Currently translated at 97.8% (540 of 552 strings)

Co-authored-by: Translator <kvb@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:22 +00:00
random r
eb11af9226
Translated using Weblate: Italian (it) by random r <epsilin@yopmail.com>
Currently translated at 92.7% (512 of 552 strings)

Co-authored-by: random r <epsilin@yopmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:21 +00:00
Andrey
fe44aa2a21
Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Andrey <andrey@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:20 +00:00
Ihor Hordiichuk
7c0a2e3508
Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:20 +00:00
Fjuro
1824605730
Translated using Weblate: Czech (cs) by Fjuro <ifjuro@proton.me>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Fjuro <ifjuro@proton.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:19 +00:00
Agnieszka C
36195e14e6
Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:18 +00:00
Макар Разин
65f4f489a8
Translated using Weblate: Belarusian (be) by Макар Разин <makarrazin14@gmail.com>
Currently translated at 7.6% (42 of 552 strings)

Added translation using Weblate: Belarusian (be) by Макар Разин <makarrazin14@gmail.com>

Translated using Weblate: Russian (ru) by Макар Разин <makarrazin14@gmail.com>

Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Ukrainian (uk) by Макар Разин <makarrazin14@gmail.com>

Currently translated at 99.8% (551 of 552 strings)

Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/be/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:18 +00:00
Eric
6a137f5e6a
Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 75.7% (418 of 552 strings)

Co-authored-by: Eric <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:17 +00:00
Mehrab Poladov
35fedfb37f
Translated using Weblate: Azerbaijani (az) by Mehrab Poladov <thepoladov@protonmail.com>
Currently translated at 0.1% (1 of 552 strings)

Added translation using Weblate: Azerbaijani (az) by Mehrab Poladov <thepoladov@protonmail.com>

Co-authored-by: Mehrab Poladov <thepoladov@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/az/
Translation: F-Droid/F-Droid Server
2023-09-21 14:23:16 +00:00
Hans-Christoph Steiner
c02a194978 Merge branch 'fix_categories' into 'master'
Add default locale for generated categories

See merge request fdroid/fdroidserver!1390
2023-09-21 14:23:07 +00:00
Jochen Sprickerhof
521ff4fe17 Add default locale for generated categories
The client expects at least a name to be set.

Regression of 2c566cf6.
2023-09-21 14:14:06 +00:00
Hans-Christoph Steiner
b5724f507b Merge branch 'licaon-kter-master-patch-70325' into 'master'
Lint 'main' too as it gains popularity

See merge request fdroid/fdroidserver!1392
2023-09-21 13:25:05 +00:00
Licaon_Kter
4d0117d54c fix lint 2023-09-21 13:16:49 +00:00
Licaon_Kter
4a9b69a720 Lint 'main' too 2023-09-21 13:16:49 +00:00
Michael Pöhn
aaf58826c0 Merge branch 'test_sdk_exists' into 'master'
test_sdk_exists to be based on apksigner, that's the requirement

See merge request fdroid/fdroidserver!1391
2023-09-21 13:15:09 +00:00
Hans-Christoph Steiner
17cb026d97 safety: ignore 60350, it is being handled in Debian
* https://security-tracker.debian.org/tracker/CVE-2023-40267
2023-09-20 10:10:15 +02:00
Hans-Christoph Steiner
3757add164 test_sdk_exists to be based on apksigner, that's the requirement
Before, lots of pieces of the Android SDK were required for fdroidserver to
operate, like aapt, zipalign, etc.  Now, apksigner is the only requirement.

%"support APK Signature v2+"
!889
2023-09-17 23:31:07 +02:00
Hans-Christoph Steiner
b470ad2a6f
Merge branch 'error-messages-and-categories' into 'master'
error messages and categories

Closes #1137

See merge request fdroid/fdroidserver!1384
2023-09-08 08:54:50 +00:00
Hans-Christoph Steiner
48559ecec5 category with no apps should be ignored, even if defined in config
https://gitlab.com/fdroid/fdroidclient/-/issues/2619#note_1421280589

The test needed to change because the test index files contained category
definitions that were not ever used in the "copy tests/repo, generate java/gpg
keys, update, and gpgsign" test in tests/run-tests.
2023-09-08 10:45:53 +02:00
Hans-Christoph Steiner
2c566cf68f update: add all categories in metadata files to repo definitions
!1366 makes it so categories are now defined by the repo. Categories can be
defined in the config so that lint has a list of categories to enforce. This
also provides a place for localization and icons for the categories. The old
way of defining categories was just listing them in app metadata files. This
restores that way of functioning when using index-v2.

closes #1137
2023-09-08 10:45:51 +02:00
Hans-Christoph Steiner
64b8ee772c throw useful error if a config YAML file is not a dict 2023-09-08 10:42:27 +02:00
Hans-Christoph Steiner
00aa595f37 deploy: give useful error if rsync is not installed 2023-09-08 10:42:27 +02:00
Hans-Christoph Steiner
ed50de055a
Merge branch 'gradlew-fdroid-8.2' into 'master'
gradlew-fdroid: add key/values for Gradle Android Plugin 8.3, 8.2 and 8.1

See merge request fdroid/fdroidserver!1386
2023-09-08 08:35:29 +00:00
Hans-Christoph Steiner
207859f160 gradlew-fdroid: add key/values for Gradle Android Plugin 8.3/8.2/8.1 2023-09-08 08:35:21 +00:00
Hans-Christoph Steiner
38c0463bd0
Merge branch 'indent' into 'master'
metadata: set mapping indentation to 2

Closes #1154

See merge request fdroid/fdroidserver!1385
2023-09-08 08:26:38 +00:00
linsui
8188bb6bfa metadata: set mapping indentation to 2 2023-09-08 08:18:27 +00:00
Jochen Sprickerhof
c3331b1c58 Merge branch 'gradlew-8.3' into 'master'
Gradle 8.3

See merge request fdroid/fdroidserver!1388
2023-08-21 12:26:40 +00:00
cvzi
f0aa3bae66
Gradle 8.3 2023-08-19 00:17:21 +02:00
Michael Pöhn
8bba38f5dc Merge branch 'config-files-error' into 'master'
log error if config file name is not known; standardize Release Channels config filename

See merge request fdroid/fdroidserver!1369
2023-07-25 14:39:34 +00:00
Hans-Christoph Steiner
9df8caca07 log error if config file name is not known
The case of Anti-Features keys and filenames is quite confusing.  I was
confused to find out that config/antiFeatures.yml is correct, while
config/antifeatures.yml is nothing.  This throws an error message to make
that clear.
2023-07-25 14:31:09 +00:00
Hans-Christoph Steiner
4e28fad55a use constants for names used in the config dict
Hopefully this helps with the Anti-Features case confusion:
* antifeatures
* antiFeatures
* AntiFeatures
2023-07-25 14:31:09 +00:00
Hans-Christoph Steiner
190a95ab17 use consistent name for releaseChannels config file 2023-07-25 14:31:09 +00:00
Jochen Sprickerhof
04aa9d2a06 Merge branch 'mirror-rsync-timeout' into 'master'
mirror-to-mirror.sh: set 1h timeout for rsync runs

See merge request fdroid/fdroidserver!1381
2023-07-25 13:03:41 +00:00
Hans-Christoph Steiner
ce77a33228
mirror-to-mirror.sh: set 1h timeout for rsync runs
This script is run every 10 minutes or so to push new files to the primary
mirrors.  It sets a lock to prevent multiple copies from running in
parallel.  Yesterday, one rsync process got stuck and never exited, thereby
preventing this script from running.  Adding a 1h timeout seems like a safe
way to deal with this kind of problem.  This would not deal with rsync
getting so stuck that it fails to heed the timeout, hopefully that's not an
issue.
2023-07-25 14:52:29 +02:00
Hans-Christoph Steiner
c88eb253f6 Merge branch 'importtemplate' into 'master'
Import - add more template content

See merge request fdroid/fdroidserver!1378
2023-07-12 13:45:10 +00:00
Licaon_Kter
a756ce0b1a Import - add more template content 2023-07-12 13:45:10 +00:00
Hans-Christoph Steiner
15adec73ca Merge branch 'licaon-kter-master-patch-54084' into 'master'
Gradle 8.2.1

See merge request fdroid/fdroidserver!1380
2023-07-12 13:33:52 +00:00
Licaon_Kter
d040fc518a Gradle 8.2.1 2023-07-12 13:33:46 +00:00
Hans-Christoph Steiner
85d87aea14 Merge branch 'alex2-master-patch-82183' into 'master'
Don't specify a release candidate in version constraint for androguard dependency

See merge request fdroid/fdroidserver!1379
2023-07-10 10:19:59 +00:00
Alex Gaynor
5660e7089d Don't specify a release candidate in version constraint for androguard dependency
This causes pip to include pre-releases for all dependencies, which is unfortunate in many cases.
2023-07-08 16:24:00 +00:00
Hans-Christoph Steiner
e1a108fd71 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.2

See merge request fdroid/fdroidserver!1377
2023-07-04 08:27:43 +00:00
fdroid-bot
fda149821a gradle v8.2 2023-07-04 08:19:00 +00:00
Hans-Christoph Steiner
3f02072f20 Merge branch 'licaon-kter-master-patch-84619' into 'master'
Gradle 8.2

See merge request fdroid/fdroidserver!1375
2023-07-04 08:18:33 +00:00
Licaon_Kter
f9d9abf98d Gradle 8.2 2023-07-04 08:18:21 +00:00
Hans-Christoph Steiner
61925ac4f4 Merge branch 'fix-ci' into 'master'
two small fixes for failing GitLab CI jobs

See merge request fdroid/fdroidserver!1376
2023-07-04 08:18:05 +00:00
Hans-Christoph Steiner
132e953c8c update: use proper name for PIL image filter ANTIALIAS -> LANCZOS
ANTIALIAS was made an alias of LANCZOS in 2.7.0:
https://pillow.readthedocs.io/en/stable/releasenotes/2.7.0.html#antialias-renamed-to-lanczos

The ANTIALIAS alias was removed in Pillow 10.0.0:
https://pillow.readthedocs.io/en/stable/deprecations.html
2023-07-03 17:44:47 +02:00
Hans-Christoph Steiner
3db90b65fb gitlab-ci: switch archlinux job to virtualenv
https://gitlab.com/fdroid/fdroidserver/-/jobs/4466370098

$ pip install -e .[test]
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try 'pacman -S
    python-xyz', where xyz is the package you are trying to
    install.

    If you wish to install a non-Arch-packaged Python package,
    create a virtual environment using 'python -m venv path/to/venv'.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip.

    If you wish to install a non-Arch packaged Python application,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. Make sure you have python-pipx
    installed via pacman.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
2023-07-03 16:17:08 +02:00
Hans-Christoph Steiner
255258f1c8 Merge branch 'lint-categories-from-config' into 'master'
Lint: categories from config

See merge request fdroid/fdroidserver!1366
2023-06-13 16:05:51 +00:00
Hans-Christoph Steiner
6b82710039 test load_localized_config() with categories 2023-06-02 13:28:53 +02:00
Hans-Christoph Steiner
bc58959315 purge remnants of repo/categories.txt, which is long unused 2023-06-02 13:26:03 +02:00
Hans-Christoph Steiner
1c3a87e002 lint: get Categories from config 2023-06-02 13:26:03 +02:00
Hans-Christoph Steiner
6124caf341 Merge branch 'test_for_1370' into 'master'
Add test for !1370

See merge request fdroid/fdroidserver!1372
2023-06-02 11:12:17 +00:00
Jochen Sprickerhof
7af95fc660
gitlab-ci: bump version to compare in metadata_v0 job 2023-06-02 10:38:16 +02:00
Jochen Sprickerhof
27ea667438
Add test for !1370
The bug fixed in !1370 was due to a reuse of the per app anti features
dictionary in the per version one and adding the per version anti
features into it. This was not caught by the test suite as the app
versions are processed from newest to oldest and the test data had only
anti features in the oldest version. This patch adds an anti feature to
a newest version so only those in between should not have it.
2023-06-02 10:26:27 +02:00
Hans-Christoph Steiner
a1c4f803de Merge branch 'fix-ArchivePolicy-0' into 'master'
update: fix regression for ArchivePolicy: 0

See merge request fdroid/fdroidserver!1371
2023-06-01 18:59:14 +00:00
Hans-Christoph Steiner
d96de4d8c2 update: test archive_old_apks() with ArchivePolicy: 0 2023-06-01 20:31:26 +02:00
FC Stegerman
9ac7dfe452 update: fix regression for ArchivePolicy: 0
* https://gitlab.com/fdroid/fdroidserver/-/merge_requests/920#note_1413338920
* https://gitlab.com/fdroid/fdroidserver/-/merge_requests/920#note_1413344025
2023-06-01 20:31:24 +02:00
Hans-Christoph Steiner
d564ba1fd1 Merge branch 'fix_antifeatures' into 'master'
Don't modify app dict when generating v2 antifeatures

Closes #1103

See merge request fdroid/fdroidserver!1370
2023-06-01 17:56:59 +00:00
Jochen Sprickerhof
2ee3cccb60 Don't modify app dict when generating v2 antifeatures
Regression of: 061ca38a
Closes: #1103
2023-06-01 17:53:34 +00:00
Hans-Christoph Steiner
3f7e01b909 Merge branch 'licaon-kter-master-patch-94098' into 'master'
scanner - tgz is gzip

See merge request fdroid/fdroidserver!1368
2023-06-01 11:40:20 +00:00
Licaon_Kter
2a60f6c195 scanner - tgz is gzip 2023-06-01 07:43:42 +00:00
Hans-Christoph Steiner
d929c15843 Merge branch 'archivepolicy-integer' into 'master'
Make "ArchivePolicy" always be an integer

Closes #327

See merge request fdroid/fdroidserver!920
2023-05-31 19:34:00 +00:00
Gregor Düster
31791b44f3
fixup! metadata: Make ArchivePolicy an interger internally 2023-05-30 23:05:59 +02:00
Hans-Christoph Steiner
9ef2088ace
add unit tests 2023-05-30 23:02:36 +02:00
Gregor Düster
337974cbed
metadata: Make ArchivePolicy an interger internally 2023-05-30 23:02:34 +02:00
Michael Pöhn
cf887583c0 Merge branch 'metadata-sort-and-refactor' into 'master'
metadata: remove obsolete quirks; add sorting and removal of empty values

Closes #332

See merge request fdroid/fdroidserver!1365
2023-05-29 16:50:57 +00:00
Hans-Christoph Steiner
fac7ceffe3 metadata: remove non-values from Builds: entries 2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
689786eea4 metadata: refactor _builds_to_yaml to use dicts and _format functions
_builds_to_yaml does not use any features of the metadata.Build class, so
it can operate on plain dicts as well.  It also does not need to output
Build instances because those are converted to plain dicts when writing out
to YAML.
2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
b055559df7 metadata: remove STRING/INT conversion on output
The type conversion should all happen in post_parse_yaml_metadata whenever
possible.  Also, when `if` blocks end in `return`, it is clearer if no
`elif` or `else` is used.
2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
1bc9b41a2b metadata: YAML 1.2 handles gradle: off now, "off" isn't a boolean
Before switching to YAML 1.2, there needed to be special handling of values
that YAML parsed as booleans.
2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
070dae1431 versionCode is an int everywhere since !1176 fixed #332 2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
e64f121c0c metadata: type conversion happens at parsing, not at writing
These test cases were writing assuming they had to transform the data
format.  That is no longer the case.  Going forward, the parsing process
converts everything to a standardized format.  That will hopefully be
enforceable by the JSON Schema in the future.
2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
26b2cffdcc metadata: tests for converting Builds: entries for writing out
* The metadata.Builds() class initializes all possible flags, then the
  flags with init values are filtered out when writing out YAML.
* TYPE_SCRIPT flags with one entry will be converted to a string.
2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
d3521d7374 metadata: case-insensitive sort for AntiFeatures Categories 2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
2efc9437ab gitlab-ci: purge stale removals from metadata_v0 job. 2023-05-29 16:50:28 +00:00
Hans-Christoph Steiner
65a1698ba3 Merge branch 'normalize-type-list-int' into 'master'
metadata: refactor parsing normalization

See merge request fdroid/fdroidserver!1359
2023-05-25 15:05:01 +00:00
Hans-Christoph Steiner
2aa0403208 metadata: handle SHA-256 values that parse as decimal ints
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1350#note_1370665635
2023-05-25 16:53:02 +02:00
Hans-Christoph Steiner
642e444cfa metadata: _normalize_type_list for TYPE_LIST quirks and errors
This should reduce surprises when dealing with filenames in things like
`rm:`.  So any float/int/bool value can be used directly, without quoting.

* A plain str/int/float value is interpreted as a list of one string.
* Dictionaries as values throws error.
* A set is treated like a list.
2023-05-25 16:53:02 +02:00
Hans-Christoph Steiner
4711b632b8 metadata: _normalize_type_int to handle exceptions 2023-05-25 16:53:02 +02:00
Hans-Christoph Steiner
9f606d0fbb metadata: auto-convert YAML special float values: .nan .inf -.inf
Even for people who know what the special floats not-a-number, infinity,
and negative infinity, they don't necessarily know the YAML 1.2 syntax for
these.  I didn't.  And I've spent some quality time fighting things with
those values.  They are also easy to reliably convert to string values.
2023-05-25 16:53:02 +02:00
Hans-Christoph Steiner
8374842faa metadata: normalize TYPE_BOOL to YAML 1.2 booleans
This makes the internal representation always be a boolean, and that also
means that YAML 1.2 booleans will be written out, e.g. rewritemeta.
2023-05-25 16:53:02 +02:00
Hans-Christoph Steiner
aa98d67c86 metadata: test None in post_metadata_parse 2023-05-25 15:10:05 +02:00
Hans-Christoph Steiner
d9b1d845e7 Merge branch 'linsui-master-patch-37288' into 'master'
Fix Chinese example in doc string

See merge request fdroid/fdroidserver!1364
2023-05-25 13:06:55 +00:00
linsui
982ecb45ab Fix Chinese example in doc string 2023-05-25 13:06:45 +00:00
Michael Pöhn
7e1c63b407 Merge branch 'test-build-Prepare-only-in-VM' into 'master'
build: add test to ensure Prepare: is only run in VM

See merge request fdroid/fdroidserver!1361
2023-05-25 13:06:21 +00:00
Hans-Christoph Steiner
df7c909884 build: add test to ensure Prepare: is only run in VM 2023-05-25 13:03:25 +00:00
Michael Pöhn
65e1c81f20 Merge branch 'scanner_argument_order' into 'master'
scanner: Print all short options before long options

See merge request fdroid/fdroidserver!1363
2023-05-25 12:54:18 +00:00
Gregor Düster
fde880d780
scanner: Print all short options before long options
This is the default throughout the code base.
2023-05-25 12:33:39 +02:00
Hans-Christoph Steiner
6d8c1fb885 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1360
2023-05-24 21:10:26 +00:00
Hans-Christoph Steiner
544fa1bb4d
make -C locale update 2023-05-24 23:01:08 +02:00
Hosted Weblate
c5ef3d19cd
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2023-05-24 23:01:06 +02:00
Hans-Christoph Steiner
5d85f7ad95 Merge branch 'ci-metadata_v0-RequiresRoot' into 'master'
gitlab-ci: update metadata_v0 job for RequiresRoot: as TYPE_BOOL

See merge request fdroid/fdroidserver!1362
2023-05-24 20:45:08 +00:00
Hans-Christoph Steiner
fc9afc83b8 gitlab-ci: update metadata_v0 job for RequiresRoot: as TYPE_BOOL
b0c05842d8
!1350
2023-05-24 22:36:11 +02:00
Michael Pöhn
86343cbf18 Merge branch 'antiFeatures-from-config' into 'master'
allow Anti-Features to include localized descriptions about why they were added

Closes #683

See merge request fdroid/fdroidserver!1350
2023-05-23 19:08:35 +00:00
Hans-Christoph Steiner
dbf163e03f test to check that the right Builds flag values get removed 2023-05-23 12:11:09 +02:00
Hans-Christoph Steiner
f68b77a933 use pathlib's read_text() to avoid confusin intended blocks 2023-05-23 12:06:21 +02:00
Hans-Christoph Steiner
895e0553a0 error if a YAML Anti-Feature conflicts with a localized file
https://gitlab.com/fdroid/fdroidserver/-/issues/683#note_1383597734
2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
b0c05842d8 metadata: RequiresRoot is boolean, according to docs
"Set this optional field to ‘True’ if the application requires root
privileges to be usable."
https://f-droid.org/docs/Build_Metadata_Reference/#RequiresRoot
2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
0393e46af9 metadata: handle TYPE_STRINGMAP when writing out YAML 2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
e8ab84b583 metadata: simplify _app_to_yaml()
There are some redundant checks and odd construct:
* cm.update({a: b}) --> cm[a] = b
* getattr(app, field) --> app.get(field)
2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
2cb12f9594 metadata: break out write_yaml to standalone function and add unit tests 2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
784bebfee9 metadata: keep manually added NoSourceSince in AntiFeatures
If the metadata file contains NoSourceSince:, it is added to the collection
of Anti-Features.  When rewriting the .yml file, NoSourceSince should only
be written into the AntiFeatures: collection if there are manual changes,
e.g. the user had provided translations.
2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
7c1d7fb4b3 metadata: check error messages are printed for more cases 2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
b2fc59ef9a gitlab-ci: bump version to compare in metadata_v0 job
The previous commit changes the internal representation of
antiFeatures from a list to dict.
https://gitlab.com/eighthave/fdroidserver/-/jobs/4260622978
2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
061ca38afd define "string map" type for new Anti-Features explanations
closes #683
2023-05-23 10:47:03 +02:00
Hans-Christoph Steiner
6e62ea3614 Merge branch 'scanner-allow-non-zero-exit' into 'master'
feat(scanner): Allow non-zero-exit code if problems were found

See merge request fdroid/fdroidserver!1342
2023-05-23 08:35:18 +00:00
Georg krause
9af2efda2e feat(scanner): Allow non-zero-exit code if problems were found 2023-05-23 09:54:24 +02:00
Hans-Christoph Steiner
44513c23fd Merge branch 'readme-and-contributing' into 'master'
update README and add CONTRIBUTING.md

See merge request fdroid/fdroidserver!1353
2023-05-22 14:16:43 +00:00
Hans-Christoph Steiner
a08d4a74e8 update CONTRIBUTING.md 2023-05-22 14:16:31 +00:00
Hans-Christoph Steiner
a02ed98c7e update README to fix out of date things 2023-05-22 14:16:31 +00:00
Hans-Christoph Steiner
84b45abb03 Merge branch 'last-prop' into 'master'
gradlew-fdroid: use last duplicate key like java.util.Properties

Closes #1131

See merge request fdroid/fdroidserver!1356
2023-05-22 11:35:54 +00:00
FC Stegerman
f160ae55cb
gradlew-fdroid: use last duplicate key like java.util.Properties 2023-05-19 18:12:23 +02:00
Michael Pöhn
a9b2f624e5 Merge branch 'scanner_dataclass' into 'master'
scanner: replace global dict by dataclass

See merge request fdroid/fdroidserver!1208
2023-05-12 17:58:26 +00:00
Jochen Sprickerhof
2488cb5710 scanner: replace global dict by dataclass 2023-05-12 17:58:04 +00:00
Jochen Sprickerhof
52e798575b Merge branch 'fix_mkdir' into 'master'
Create repo/icons without failure

See merge request fdroid/fdroidserver!1355
2023-05-12 07:25:53 +00:00
Jochen Sprickerhof
5723a1dafe
Create repo/icons without failure
Fixes fdroid lint CI.
2023-05-12 09:12:28 +02:00
Michael Pöhn
1b765d11e7 Merge branch 'lint-AntiFeatures-from-config' into 'master'
lint: Anti-Features validator uses names from config / plus tests, cleanups, and minor bugfixes

See merge request fdroid/fdroidserver!1352
2023-05-11 14:20:15 +00:00
Hans-Christoph Steiner
af5b067396 gitlab-ci: bump version to compare in metadata_v0 job
The relevant change comes from !1332
2023-05-11 10:37:45 +02:00
Hans-Christoph Steiner
024d309262 index: rename app var to app_dict, its not an App instance
Throughout the code, variables named "app" are instances of the App class.
In this case, this is related, but it is a dict not an App instance, since
it is being prepared for including in the index-v1.json.
2023-05-11 10:37:45 +02:00
Hans-Christoph Steiner
8bc9a3da73 test_parse_yaml_metadata_continue_on_warning checks logging calls 2023-05-11 10:37:45 +02:00
Hans-Christoph Steiner
86b643f87b metadata: test to check that metadata/*.yml overrides .fdroid.yml
This actually uncovered that .fdroid.yml isn't really working. But that is
a problem for another day.
2023-05-11 10:37:45 +02:00
Hans-Christoph Steiner
bb99986630 metadata: fix crash if .fdroid.yml but its not a git repo 2023-05-11 10:37:45 +02:00
Hans-Christoph Steiner
c2bc52dd85 use constant for default locale 2023-05-11 10:37:45 +02:00
Hans-Christoph Steiner
d5a1439457 lint: Anti-Features validator uses names from config 2023-05-11 10:29:04 +02:00
Hans-Christoph Steiner
d6dba05ec3 test load_localized_locale() and translated Anti-Features 2023-05-10 13:34:09 +02:00
Hans-Christoph Steiner
b04c7ff539 load_localized_config() returns a dict in a stable order
I renamed the variables while I was at it, to make it clearer.
2023-05-10 13:17:40 +02:00
Hans-Christoph Steiner
74a23284e1 common: load_localized_config() should make repo/ if not present
For 1,000,000 checks, this adds:
* ~4 seconds of runtime on a server with very slow disks.
* ~0.7 seconds of runtime on my laptop with a fast SSD.
2023-05-10 09:21:14 +02:00
Hans-Christoph Steiner
49362b5fd1 move load_locale() and file_entry() to be accessible by all modules
* load_locale -> common.load_localized_config() since common handles config
* file_entry -> metadata.file_entry() since metadata handles data format
2023-05-10 09:21:14 +02:00
Hans-Christoph Steiner
f9864dc3a2 rewritemeta: split into remove_blank_flags_from_builds()
This takes this key bit of functionality, splits it out as its own
function, and adds some unit tests.
2023-05-10 09:21:14 +02:00
Hans-Christoph Steiner
8ccc89ad4e index: fix requestsdict check order of operations
If requestsdict is None, the old logic would still check
requestsdict["uninstall"]) and crash there.
2023-05-10 09:21:14 +02:00
Hans-Christoph Steiner
3efe797bf8 gitlab-ci: CI_BUILD_* vars were renamed to other things
https://web.archive.org/web/20190110134948/https://docs.gitlab.com/ee/ci/variables/#gitlab-90-renaming

Looks like GitLab v16 is finally removing the old names.

sed -i \
  -e s,CI_BUILD_TOKEN,CI_JOB_TOKEN,g \
  -e s,CI_BUILD_REF_SLUG,CI_COMMIT_REF_SLUG,g \
  -e s,CI_BUILD_REF_NAME,CI_COMMIT_REF_NAME,g \
  -e s,CI_BUILD_REPO,CI_REPOSITORY_URL,g \
  .gitlab-ci.yml
2023-05-10 09:21:14 +02:00
Hans-Christoph Steiner
f7830a41f1 deploy: ensure mirrors and binary transparency always create 'master'
If there was a global default on a machine that was something other than
'master', these things would crash with:

Traceback (most recent call last):
  File "/home/hans/code/fdroid/server/fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/home/hans/code/fdroid/server/fdroidserver/__main__.py", line 230, in main
    raise e
  File "/home/hans/code/fdroid/server/fdroidserver/__main__.py", line 211, in main
    mod.main()
  File "/home/hans/code/fdroid/server/fdroidserver/deploy.py", line 833, in main
    push_binary_transparency(BINARY_TRANSPARENCY_DIR,
  File "/home/hans/code/fdroid/server/fdroidserver/deploy.py", line 705, in push_binary_transparency
    local.pull('master')
  File "/usr/lib/python3/dist-packages/git/remote.py", line 1045, in pull
    res = self._get_fetch_info_from_stderr(proc, progress, kill_after_timeout=kill_after_timeout)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/git/remote.py", line 848, in _get_fetch_info_from_stderr
    proc.wait(stderr=stderr_text)
  File "/usr/lib/python3/dist-packages/git/cmd.py", line 604, in wait
    raise GitCommandError(remove_password_if_present(self.args), status, errstr)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(1)
  cmdline: git pull -v -- local master
  stderr: 'fatal: couldn't find remote ref master'
2023-05-10 09:21:14 +02:00
Hans-Christoph Steiner
0735bfa7e5 remove obsolete test case 2023-05-09 20:45:16 +02:00
Hans-Christoph Steiner
0124b9dde9 Merge branch 'cert-pin' into 'master'
`AllowedAPKSigningKeys` cleanups

See merge request fdroid/fdroidserver!1343
2023-05-05 08:47:02 +00:00
Hans-Christoph Steiner
43b278b9d6
build: fix loading config files in tests
The new test case works with the default config.
2023-05-05 09:49:34 +02:00
Hans-Christoph Steiner
1e4e2489aa
add keep_when_not_allowed config/option 2023-05-05 09:49:32 +02:00
Hans-Christoph Steiner
386fb55b99
keep old test case intact 2023-05-05 09:49:27 +02:00
Jason A. Donenfeld
26472c22ce build: check AllowedAPKSigningKeys in reproducible build scenario
The builder should check the `AllowedAPKSigningKeys` at build time, so
that the CI can check if somebody gives a wrong value that doesn't match
a compared RB binary.  In the event it fails, it gives useful
information, and in the event it succeeds, it makes it clear that this
build has verification back to the developer's original key.

Also, add tests for this to the test suite.
2023-05-05 06:14:31 +00:00
Jason A. Donenfeld
8a0b7e5b1b lint: binary or Binaries requires AllowedAPKSigningKeys
Per fdroiddata!12911 the linter should error out if somebody uses `binary` or
`Binaries` without supplying an `AllowedAPKSigningKeys`.

There are two reasons for this:

- Security: this allows full verification that the binaries built match
  the developers, not just what happened to get uploaded onto github at
  some later point in time.

- Reliable updates: if the signing key changes, users won't be able to
  update, so this is something we should learn about when upstreams send
  in commits changing their signing key, rather than just leaving it to
  chance.
2023-05-05 06:14:31 +00:00
Hans-Christoph Steiner
41104e217b Merge branch 'consistent-linting-formatting' into 'master'
make linting and formatting rules consistent

See merge request fdroid/fdroidserver!1160
2023-05-04 14:12:09 +00:00
proletarius101
4b898287e9 make linting and formatting rules consistent 2023-05-04 14:12:08 +00:00
Michael Pöhn
acc774f91e Merge branch 'clean-up-metadata' into 'master'
collection of cleanups, tests and minor refactoring related to metadata

See merge request fdroid/fdroidserver!1351
2023-05-04 12:55:38 +00:00
Hans-Christoph Steiner
f871df502d metadata: minor optimization: call fieldtype() once per loop
I profiled this with timeit and a dict with 1000000000 items, and this is
the time difference:

with_equals:		0.8466835720173549
with_is:		0.8536969239939936
with_old:		1.4458542719949037

I also compared using `==` and `is`, and `==` was slightly faster.
2023-05-02 13:53:53 +02:00
Hans-Christoph Steiner
9a9705a667 update test_read_metadata to use ruamel.yaml and YAML 1.2
I tried to get this to indent the .yaml files properly so yamllint defaults
work with tests/metadata/dump/*.yaml, but it didn't take for some reason:

    yaml.indent(mapping=4, sequence=4, offset=2)
2023-05-02 13:52:38 +02:00
Hans-Christoph Steiner
28ea6cea7f add tests of TYPE_LIST parsing 2023-05-02 13:52:06 +02:00
Hans-Christoph Steiner
0b3fd725c3 metadata.TestCase: metadata.warnings_action = 'error' as default
The default state for the tests should be to fail on errors.
2023-05-02 13:51:44 +02:00
Hans-Christoph Steiner
822439dff5 remove exception for ruamel.yaml on Debian/stretch
stretch is no more, and this code base specifies Python 3.9 as minimum.
2023-05-02 13:50:54 +02:00
Hans-Christoph Steiner
74dddfd9fb refactor App.get_last_build() to checkupdates
This function is only used in checkupdates, and removing it from the App
class moves the App class one step closer to being a plain dict, which is a
more Pythonic style.
2023-05-02 13:50:31 +02:00
Hans-Christoph Steiner
8300ed051b ruamel.yaml is now required and the packages are all new enough 2023-05-02 13:41:39 +02:00
Hans-Christoph Steiner
e794ccb38c work towards switching fdroidserver/metadata.py to black 2023-05-02 13:41:27 +02:00
Hans-Christoph Steiner
e5fda54693 add test_check_metadata_AntiFeatures 2023-05-02 13:37:07 +02:00
Hans-Christoph Steiner
c6ad8505d4 some easier fixes for black code format 2023-05-02 13:37:07 +02:00
Hans-Christoph Steiner
5968cfe7e0 Merge branch 'litecoin' into 'master'
add litecoin address native segwit format

See merge request fdroid/fdroidserver!1332
2023-05-02 11:31:41 +00:00
linsui
1a0a0a1839 add litecoin address native segwit format 2023-05-02 11:31:34 +00:00
Michael Pöhn
2135a9e7fb Merge branch 'refactor-into-single-yaml-post-process' into 'master'
refactor into a single function to do YAML post processing

See merge request fdroid/fdroidserver!1346
2023-05-02 11:31:06 +00:00
Hans-Christoph Steiner
572819dbc8 gitlab-ci: use bookworm for "Build documentation" job
I think most fdroidserver core devs are working on bookworm these days, and
the bullseye version is erroring on things that the bookworm version does
not.

fdroidserver/metadata.py:777 in public function `post_parse_yaml_metadata`:
        D202: No blank lines allowed after function docstring (found 1)
2023-04-28 10:55:21 +02:00
Hans-Christoph Steiner
a692cd9d72 hooks/pre-commit: enable pydocstyle, if installed 2023-04-28 10:55:21 +02:00
Hans-Christoph Steiner
d7214a7f1c hooks/pre-commit: run yamllint on more YAML files
I keep messing up YAML syntax with values that have : in them...

This doesn't work for all YAML files:
* tests/metadata/dump/*.yaml have bad indenting
* tests/metadata/*.yml have bad indenting, which is useful for tests
2023-04-28 10:55:21 +02:00
Hans-Christoph Steiner
1bcd9a8489 metadata: handle empty files and dicts, and error out on non-dicts 2023-04-28 10:55:20 +02:00
Hans-Christoph Steiner
2b81a66b79 App.comments is no more since !772 2023-04-28 10:44:19 +02:00
Hans-Christoph Steiner
dbe21b2b94 metadata: transform all TYPE_STRING values w/ _normalize_type_string()
Before this, there were separate post-parse paths for app-fields versus
build-flags.  This makes all TYPE_STRING values always go through the same
post-parse code path.
2023-04-28 10:44:19 +02:00
Hans-Christoph Steiner
a8531a03a6 metadata: refactor into one function to do YAML post processing
It used to be that there had to be separate post processing steps depending
on whether it was parsing .txt or .yml.  The .txt format is long gone!

!772
2023-04-28 10:44:19 +02:00
Hans-Christoph Steiner
3869e1374b metadata: force TYPE_STRING fields to string in internal dict
* YAML 1.2's boolean is 'true' so this makes the conversion correct.
* rewritemeta would also have to be changed to support this.
2023-04-27 21:51:10 +02:00
Hans-Christoph Steiner
c0ae09e0df metadata: remove strange app arg construct from parse_yaml_metadata()
My guess is that this is some kind of vestige of the old code structure,
back when there was .txt and .yml formats.  This makes it a normal Python
function: input as arg, return value is the result.
2023-04-27 21:51:10 +02:00
Hans-Christoph Steiner
41972e6525 warn on all unrecognized build flags
No need to put the list of keys in a set beforehand, just report all build
flags that are invalid.
2023-04-27 21:51:10 +02:00
Hans-Christoph Steiner
1166258145 map out type conversions in metadata.PostMetadataParseTest suite 2023-04-27 21:50:49 +02:00
Hans-Christoph Steiner
27a0df9ddb metadata: failfast=False like the rest of the tests 2023-04-27 21:48:27 +02:00
Michael Pöhn
2293633380 Merge branch 'enable-more-black' into 'master'
enable more black code format

See merge request fdroid/fdroidserver!1349
2023-04-27 09:50:59 +00:00
Hans-Christoph Steiner
6dcdadd0e3
config black exceptions in pyproject.toml
This means that anyone can run `black .` and it won't break things. Plus it
gives us a roadmap for fully enabling black.
2023-04-27 11:34:19 +02:00
Hans-Christoph Steiner
32ea4ef19a
enable black on fdroidserver/asynchronousfilereader/__init__.py 2023-04-27 11:34:18 +02:00
Hans-Christoph Steiner
2273d8203b
enable black on fdroidserver/signatures.py 2023-04-27 11:34:16 +02:00
Hans-Christoph Steiner
6620bf0208
enable black on tests: api, gpgsign, main, net, vcs 2023-04-27 11:34:14 +02:00
Hans-Christoph Steiner
77f9ac9fa8
enable black on fdroidserver/rewritemeta.py 2023-04-27 11:34:12 +02:00
Hans-Christoph Steiner
eb81af57bb
enable black on fdroidserver/init.py 2023-04-27 11:34:10 +02:00
Hans-Christoph Steiner
c7070b2799
index.TestCase: manually convert to black code format
* switch to `from fdroidserver import common, index, signindex...`
2023-04-27 11:34:07 +02:00
Hans-Christoph Steiner
98decf8cfa index: use 'fake.url' as test domain when no networking is used 2023-04-27 10:35:09 +02:00
Michael Pöhn
5e75b03814 Merge branch 'mirror-metadata' into 'master'
index-v2 'mirrors' fully settable from config

See merge request fdroid/fdroidserver!1344
2023-04-27 08:06:13 +00:00
Hans-Christoph Steiner
7c692a4532 index-v2 'mirrors' fully settable from config
This lets mirrors: in config.yml be the same list-of-dicts format as it is
in index-v2.  This also includes a data format conversion to maintain the
right format for the old, unchanging index v0 and v1 formats.

#928
#1107
2023-04-27 07:53:02 +00:00
Hans-Christoph Steiner
ceef07d2f2 test of current internal format of mirrors list in config 2023-04-27 07:53:02 +00:00
Hans-Christoph Steiner
c4d202f2d8 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.1.1

See merge request fdroid/fdroidserver!1348
2023-04-24 09:35:05 +00:00
fdroid-bot
087fd04b02 gradle v8.1.1 2023-04-24 09:21:53 +00:00
Hans-Christoph Steiner
60e11cab6c Merge branch 'remove-last-maven-quirks' into 'master'
remove last `maven:` quirks and make it always a string

See merge request fdroid/fdroidserver!1345
2023-04-24 09:21:11 +00:00
Hans-Christoph Steiner
ad960c6ecd
remove last maven: quirks and make it always a string
It turns out that the maven: field was originally declared as a TYPE_STRING,
given that it was not given a different type in metadata.py's 	flagtypes.
The code was confused because it was given a default value of `False` rather
than `None` as the rest of the TYPE_STRING fields have.

This construct in build.py means maven: should always be a string:

        if '@' in build.maven:
            maven_dir = os.path.join(root_dir, build.maven.split('@', 1)[1])
        else:
            maven_dir = root_dir
2023-04-24 11:08:48 +02:00
Hans-Christoph Steiner
a107e810d4
build: add test case for maven: builds 2023-04-24 11:08:46 +02:00
Hans-Christoph Steiner
7641c30389
add real test of moving files with deploy.update_serverwebroot() 2023-04-24 11:08:42 +02:00
Hans-Christoph Steiner
fa95302580
add myself to .mailmap !1347 2023-04-21 08:01:44 +02:00
Hans-Christoph Steiner
f09c806c96 Merge branch 'mailmap' into 'master'
Add .mailmap

See merge request fdroid/fdroidserver!1347
2023-04-21 05:56:28 +00:00
Gregor Düster
a2868766db
Add .mailmap
See https://git-scm.com/docs/gitmailmap .
2023-04-21 07:21:45 +02:00
Hans-Christoph Steiner
331d3663db Merge branch 'metadata_purge_legacy' into 'master'
metadata: Remove code ensuring YAML 1.2 compatibility

See merge request fdroid/fdroidserver!1328
2023-04-20 07:59:20 +00:00
Gregor Düster
d971f19e92
metadata: Remove code ensuring YAML 1.2 compatibility
This is no longer necessary b/c the current YAML parser, ruamel.yaml,
implements YAML 1.2 in contrast to the previous parser PyYAML.
2023-04-18 17:08:44 +02:00
Gregor Düster
cff57e1a53
metadata: Remove ununsed code 2023-04-18 17:08:43 +02:00
Michael Pöhn
82c3e364a5 Merge branch 'fix-ci-for-sdkmanager' into 'master'
gitlab-ci: ubuntu_lts_ppa & debian_testing jobs need sdkmanager

See merge request fdroid/fdroidserver!1339
2023-04-13 13:32:15 +00:00
Hans-Christoph Steiner
3b0a6575de gitlab-ci: ubuntu_lts_ppa & debian_testing jobs need sdkmanager 2023-04-13 12:32:47 +00:00
Hans-Christoph Steiner
894a421d43 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.1

See merge request fdroid/fdroidserver!1341
2023-04-12 14:06:19 +00:00
fdroid-bot
c107d93568 gradle v8.1 2023-04-12 12:45:24 +00:00
Hans-Christoph Steiner
5e3624157c Merge branch 'sonatype' into 'master'
Add maven central staging repo to allowed list

See merge request fdroid/fdroidserver!1340
2023-04-12 12:44:43 +00:00
Jason Donenfeld
6a239cbde4 Add maven central staging repo to allowed list 2023-04-12 12:44:42 +00:00
Hans-Christoph Steiner
135fb76b6d Merge branch 'update_status' into 'master'
Write status json upon fdroid update start (Closes: #1114)

Closes #1114

See merge request fdroid/fdroidserver!1338
2023-04-11 16:45:45 +00:00
Jochen Sprickerhof
f5cdeff507
Write status json upon fdroid update start (Closes: #1114) 2023-04-11 17:14:58 +02:00
Hans-Christoph Steiner
ab3f64c22f Merge branch 'fix-apt-syntax' into 'master'
buildserver: fix apt Acquire::Retries syntax

See merge request fdroid/fdroidserver!1337
2023-04-11 14:45:45 +00:00
Hans-Christoph Steiner
48be7c3b25
buildserver: fix apt Acquire::Retries syntax
Acquire is its own group, not a subgroup of APT:
https://manpages.debian.org/buster/apt/apt.conf.5.en.html#THE_ACQUIRE_GROUP
2023-04-11 16:33:14 +02:00
Hans-Christoph Steiner
f5d5d9e9b8 Merge branch 'remove-download-handling' into 'master'
remove NDK download handling in favor of fdroid/sdkmanager

See merge request fdroid/fdroidserver!1070
2023-04-11 11:55:18 +00:00
Hans-Christoph Steiner
36d2a8f899
all ndk paths in config must be strings
The paths in the config must be strings because they are used in things
like env vars where they must be strings.  Plus lots of other places in the
code assumes they are strings.  This is the first step to defining the
border of where paths can be pathlib.Path() and where they must be strings.
2023-04-11 13:54:19 +02:00
Hans-Christoph Steiner
898624dcac
common.get_android_tools_versions() for modern NDK dir layout
NDK r10e is still in use, but is so old, it does not have the modern
sdkmanager package metadata.
2023-04-11 13:54:17 +02:00
Hans-Christoph Steiner
0dd5a7db64
remove NDK download handling in favor of fdroid/sdkmanager 2023-04-11 13:54:05 +02:00
Hans-Christoph Steiner
66d750e5fa Merge branch 'fix_ipfs_test' into 'master'
Strip ipfsCIDv1 before testing index-v2

See merge request fdroid/fdroidserver!1335
2023-04-11 10:29:57 +00:00
Jochen Sprickerhof
d59a88f844 Strip ipfsCIDv1 before testing index-v2 2023-04-11 10:29:27 +00:00
Hans-Christoph Steiner
239ab5bd21 Merge branch 'test_find_sdk_tools_cmd-intermittent' into 'master'
set skipUnless for test that relies on ANDROID_HOME

See merge request fdroid/fdroidserver!1334
2023-04-11 09:05:18 +00:00
Hans-Christoph Steiner
94badac317 set skipUnless for test that relies on ANDROID_HOME
This job just started failing, but wasn't before:
https://gitlab.com/eighthave/fdroidserver/-/jobs/4060582594

But I look at it, and it looks right that it fails.  So how on earth
was it succeeding before?  Basically the `os.getenv('ANDROID_HOME')`
returns `None` when `ANDROID_HOME` is not set. It is not set in both the
jobs, so how did it not stacktrace before?
2023-04-04 22:41:46 +02:00
Hans-Christoph Steiner
7c85afc988 Merge branch 'fix_antifeatures' into 'master'
Fix antifeatures

See merge request fdroid/fdroidserver!1331
2023-04-04 14:21:10 +00:00
Jochen Sprickerhof
889b8cb372 Don't copy per version anti features to all versions
make_v0() modified the apps data structure to copy an anti feature for a
specific version to all versions resulting in index-v1 and -v2 to
contain wrong anti feature annotations. This patch fixes this and adds a
test that the data structure is no longer modified.

The bug shadowed bugs in the AF implementation of -v1 and -v2 resulting
in not coping the version specific data. This is corrected as well.
This is also tested now.

For -v2 the AF dict is now sorted to make the result reproducible.

Finally The NoSourceSince AF was added as a per version and overall AF
in -v1 and is now only applied as an overall AF and the test is updated
accordingly.
2023-04-04 14:20:41 +00:00
Jochen Sprickerhof
484f289919 index.TestCase: support more arguments (like -k) 2023-04-04 14:20:41 +00:00
Hans-Christoph Steiner
4a386aa2eb Merge branch 'licaon-kter-master-patch-59706' into 'master'
Scanner - add newer sonatype maven repos

Closes #1113

See merge request fdroid/fdroidserver!1333
2023-04-04 11:30:55 +00:00
Licaon_Kter
35133a9a8f Scanner - add newer sonatype maven repos 2023-04-04 11:00:13 +00:00
Hans-Christoph Steiner
4165c32e2f Merge branch 'fix_class' into 'master'
vmtools: Properly initialize provider member

See merge request fdroid/fdroidserver!1329
2023-03-21 14:02:21 +00:00
Jochen Sprickerhof
2a5b127773
vmtools: Properly initialize provider member 2023-03-21 14:00:58 +01:00
Hans-Christoph Steiner
0136872154 Merge branch 'pylint' into 'master'
pylint: Reenable 10 checks

See merge request fdroid/fdroidserver!1319
2023-03-20 16:51:40 +00:00
Hans-Christoph Steiner
8f4167660e disable pylint no-member on tests/extra/manual-vmtools-test.py
This script is some of the only documentation of certain processes that
run in the buildserver setup.  It is not really maintained, but is still
here as a kind of reference.
2023-03-20 17:38:10 +01:00
Hans-Christoph Steiner
9749b26baa pylint: Reenable C0201 consider-iterating-dictionary
* C0201: Consider iterating the dictionary directly instead of calling .keys() (consider-iterating-dictionary)
2023-03-20 16:33:16 +01:00
FestplattenSchnitzel
a4c1ca48ad pylint: Reenable R1722 consider-using-sys-exit
* R1722: Consider using 'sys.exit' instead (consider-using-sys-exit)
2023-03-20 16:33:16 +01:00
Hans-Christoph Steiner
1fbfae355a pylint: Reenable R1723 no-else-break
* R1723: Unnecessary "elif" after "break", remove the leading "el" from "elif" (no-else-break)
2023-03-20 16:33:16 +01:00
FestplattenSchnitzel
abc752314b pylint: Reenable E1101 no-member 2023-03-20 16:33:16 +01:00
FestplattenSchnitzel
1dcb863f55 pylint: Set Python version, exclude vendored file 2023-03-20 16:33:16 +01:00
Jochen Sprickerhof
b5ec531e72 Merge branch 'checkupdates' into 'master'
checkupdates: skip when there is no match for version

See merge request fdroid/fdroidserver!1321
2023-03-20 14:43:41 +00:00
linsui
88eac942ec checkupdates: skip when there is no match for version
... name regex in CheckUpdateData
2023-03-20 14:31:08 +00:00
Jochen Sprickerhof
99be8d679d Merge branch 'fix-ci' into 'master'
fix the current crop of new CI failures

See merge request fdroid/fdroidserver!1327
2023-03-20 14:28:21 +00:00
Hans-Christoph Steiner
b92e280eab fix code format for new black rule 2023-03-20 14:47:48 +01:00
Hans-Christoph Steiner
e903952029 always use defusedxml.ElementTree, never xml.etree.ElementTree
defusedxml is now available and installed everywhere, including the
buildserver VM and the buildserver host.

This fixes bandit's error because it didn't understand the try: block
* https://gitlab.com/eighthave/fdroidserver/-/jobs/3965835264
* https://bandit.readthedocs.io/en/1.7.5/blacklists/blacklist_calls.html#b313-b320-xml
2023-03-20 14:44:13 +01:00
Hans-Christoph Steiner
4295d254f9 build: actually raise exception when ndk: entry is invalid
pylint said:
fdroidserver/common.py:4238:8: W0133: Exception statement has no effect (pointless-exception-statement)
2023-03-20 14:43:44 +01:00
Hans-Christoph Steiner
bf5e65dd24 pylint: hide broad-exception-caught and broad-exception-raised
I suppose it would be nice to have these enabled, but yeah...
2023-03-20 14:43:44 +01:00
Hans-Christoph Steiner
08d4b4671c Merge branch 'ndk-path-long' into 'master'
metadata.Build.ndk_path(): find long form ndk too

Closes #1099

See merge request fdroid/fdroidserver!1313
2023-03-20 13:40:10 +00:00
FC Stegerman
a5978ad8b2 metadata.Build.ndk_path(): find long form ndk too 2023-03-20 13:39:47 +00:00
Jochen Sprickerhof
668a83a9af Merge branch 'update-handle-bad-xml-namespaces' into 'master'
update: handle messed up namespaces in AndroidManifest.xml

See merge request fdroid/fdroidserver!1326
2023-03-20 13:24:59 +00:00
Hans-Christoph Steiner
e6ff596b4c update: handle messed up namespaces in AndroidManifest.xml 2023-03-20 13:24:59 +00:00
Hans-Christoph Steiner
1f6eab8365
set dev version: 2.3 alpha 0 2023-03-09 16:00:50 +01:00
Hans-Christoph Steiner
35a1cb20e6
version 2.2.1 2023-03-09 14:53:00 +01:00
Hans-Christoph Steiner
e093d471f8 update CHANGELOG for 2.2.1 2023-03-09 13:58:14 +01:00
Hans-Christoph Steiner
770a860fe7 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1325
2023-03-09 12:54:40 +00:00
Hans-Christoph Steiner
202ecc858c gitlab-ci: break out locale tests into job that fails on errors 2023-03-09 13:42:33 +01:00
Hans-Christoph Steiner
5a0453ca9d make -C locale update 2023-03-09 13:20:42 +01:00
Hans-Christoph Steiner
68cd544dfb fix bad formats in translations 2023-03-09 13:16:14 +01:00
Max Xie
950e342d6e
Translated using Weblate: Chinese (Simplified) (zh_Hans) by Max Xie <monyxie@gmail.com>
Currently translated at 77.9% (417 of 535 strings)

Co-authored-by: Max Xie <monyxie@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:33 +01:00
Oğuz Ersen
aa80a762c4
Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguz@ersen.moe>
Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:33 +01:00
Fjuro
b45fa5d864
Translated using Weblate: Czech (cs) by Fjuro <ifjuro@proton.me>
Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: Fjuro <ifjuro@proton.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:33 +01:00
Besnik Bleta
963d119a0c
Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.5% (522 of 535 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
VfBFan
7973dd2c8f
Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (535 of 535 strings)

Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>

Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
ssantos
ad391f02f3
Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (535 of 535 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 100.0% (535 of 535 strings)

Translated using Weblate: German (de) by ssantos <ssantos@web.de>

Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Agnieszka C
4fc443ce9c
Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Andrey
37441f6f1a
Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>
Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: Andrey <andrey@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Ihor Hordiichuk
cadd53c40c
Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Translator
8c4f8cb388
Translated using Weblate: French (fr) by Translator <kvb@tuta.io>
Currently translated at 100.0% (535 of 535 strings)

Co-authored-by: Translator <kvb@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Eric
badbe7af5d
Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <hamburger2048@users.noreply.hosted.weblate.org>
Currently translated at 77.1% (413 of 535 strings)

Co-authored-by: Eric <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Hosted Weblate
5600e4828f
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Saurmandal
33e506e5e4
Translated using Weblate: Hindi (hi) by Saurmandal <saurmandal@protonmail.com>
Currently translated at 2.5% (16 of 619 strings)

Co-authored-by: Saurmandal <saurmandal@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/hi/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
VfBFan
49412de27c
Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (619 of 619 strings)

Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>

Currently translated at 100.0% (619 of 619 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Hosted Weblate
50c3ed0f4b
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Rubén
f848824371
Added translation using Weblate: Catalan (ca) by Rubén <rubenx@mail.com>
Co-authored-by: Rubén <rubenx@mail.com>
2023-03-09 12:48:32 +01:00
Ahmad0a
e74fc222f4
Translated using Weblate: Arabic (ar) by Ahmad0a <Ahmad3p@protonmail.com>
Currently translated at 1.7% (11 of 623 strings)

Translated using Weblate: Arabic (ar) by Ahmad0a <Ahmad3p@protonmail.com>

Currently translated at 1.6% (10 of 623 strings)

Added translation using Weblate: Arabic (ar) by Ahmad0a <Ahmad3p@protonmail.com>

Co-authored-by: Ahmad0a <Ahmad3p@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ar/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Danial Behzadi
fef8239502
Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>
Currently translated at 8.5% (53 of 623 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fa/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Đorđe Vasiljević
bded120a90
Translated using Weblate: Serbian (sr) by Đorđe Vasiljević <djordje.vasiljevich@gmail.com>
Currently translated at 0.1% (1 of 623 strings)

Co-authored-by: Đorđe Vasiljević <djordje.vasiljevich@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Abhiram
3b66bd2899
Translated using Weblate: Malayalam (ml) by Abhiram <abhiram@skiff.com>
Currently translated at 0.8% (5 of 623 strings)

Co-authored-by: Abhiram <abhiram@skiff.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ml/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
K.B.Dharun Krishna
94a19d5727
Translated using Weblate: Tamil (ta) by K.B.Dharun Krishna <kbdharunkrishna@gmail.com>
Currently translated at 1.6% (10 of 623 strings)

Translated using Weblate: Tamil (ta) by K.B.Dharun Krishna <kbdharunkrishna@gmail.com>

Currently translated at 0.1% (1 of 623 strings)

Added translation using Weblate: Tamil (ta) by K.B.Dharun Krishna <kbdharunkrishna@gmail.com>

Co-authored-by: K.B.Dharun Krishna <kbdharunkrishna@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ta/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:32 +01:00
Goudarz Jafari
3f84832953
Translated using Weblate: Persian (fa) by Goudarz Jafari <goudarz.jafari@gmail.com>
Currently translated at 7.8% (49 of 623 strings)

Co-authored-by: Goudarz Jafari <goudarz.jafari@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fa/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
Yaron Shahrabani
c3b1c56c72
Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>
Currently translated at 2.2% (14 of 623 strings)

Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>

Currently translated at 1.7% (11 of 623 strings)

Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>

Currently translated at 1.4% (9 of 623 strings)

Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>

Currently translated at 1.1% (7 of 623 strings)

Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>

Currently translated at 0.1% (1 of 623 strings)

Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/he/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
Hosted Weblate
6e1e544c44
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
Linerly
29e3f97347
Translated using Weblate: Indonesian (id) by Linerly <linerly@protonmail.com>
Currently translated at 15.0% (92 of 612 strings)

Co-authored-by: Linerly <linerly@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/id/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
Holiq Ibrahim
952bcda61c
Translated using Weblate: Indonesian (id) by Holiq Ibrahim <holiq.ibrahim376@gmail.com>
Currently translated at 15.0% (92 of 612 strings)

Co-authored-by: Holiq Ibrahim <holiq.ibrahim376@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/id/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
bobwww
20b50ff522
Added translation using Weblate: Hebrew (he) by bobwww <noambro199@gmail.com>
Co-authored-by: bobwww <noambro199@gmail.com>
2023-03-09 12:48:31 +01:00
Aleksandar Hadzhivelichkov
4c40ba7664
Added translation using Weblate: Bulgarian (bg) by Aleksandar Hadzhivelichkov <Raphaelo245@gmail.com>
Co-authored-by: Aleksandar Hadzhivelichkov <Raphaelo245@gmail.com>
2023-03-09 12:48:31 +01:00
Саша Петровић
9de082d12a
Added translation using Weblate: Serbian (sr) by Саша Петровић <salepetronije@gmail.com>
Co-authored-by: Саша Петровић <salepetronije@gmail.com>
2023-03-09 12:48:31 +01:00
Hosted Weblate
4edb662b4b
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
Coding Otaku
7b65ce1d1f
Translated using Weblate: Malayalam (ml) by Coding Otaku <contact@codingotaku.com>
Currently translated at 0.6% (4 of 576 strings)

Co-authored-by: Coding Otaku <contact@codingotaku.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ml/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
Amal Benny
0d111732d2
Translated using Weblate: Malayalam (ml) by Amal Benny <amalb1883@gmail.com>
Currently translated at 0.6% (4 of 576 strings)

Co-authored-by: Amal Benny <amalb1883@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ml/
Translation: F-Droid/F-Droid Server
2023-03-09 12:48:31 +01:00
Hans-Christoph Steiner
e9ab9a8981 Merge branch 'download_repo_index_v2' into 'master'
index.download_repo_index_v2() and index.download_repo_index_v1()

See merge request fdroid/fdroidserver!1323
2023-03-09 11:48:24 +00:00
Hans-Christoph Steiner
b1f482009a
tame verbose logging in index tests by default 2023-03-09 12:35:31 +01:00
Hans-Christoph Steiner
f3e49f4bcb
download_repo_index_v2() for verified downloading of index-v2 2023-03-09 12:35:29 +01:00
Hans-Christoph Steiner
a557764b4d
sign tests/repo/index-v1.jar once per index.TestCase run
Signing files is a slow operation, especially with jarsigner. This speeds
up the full test run from 10-12 seconds to 2-3 seconds, which makes it
possible to run the tests interactively again. And it stops signing the
file entirely for tests that do not even touch that file.

In the long run, it would probably make sense to have each test case sign
the file as it needs it, but that's a much bigger change.
2023-03-09 12:34:57 +01:00
Hans-Christoph Steiner
dd16076651
add verify_jar_signature() to verify entry.jar 2023-03-09 12:34:55 +01:00
Hans-Christoph Steiner
cfe399888b
add new test module for the public API 2023-03-09 12:34:54 +01:00
Hans-Christoph Steiner
723873456d
versioned download_repo_index_v1() to be future proof 2023-03-09 12:34:52 +01:00
Hans-Christoph Steiner
f7b8a100c7 Merge branch 'purge_buildozer' into 'master'
Remove support for Buildozer

Closes #642

See merge request fdroid/fdroidserver!1322
2023-03-09 11:28:12 +00:00
FestplattenSchnitzel
2dda9db1f1
Remove support for Buildozer 2023-03-09 12:03:57 +01:00
Jochen Sprickerhof
00fefd35bd Merge branch 'port-lint-job-to-debian' into 'master'
gitlab-ci: port lint_* job to Debian/bookworm for stability

See merge request fdroid/fdroidserver!1324
2023-03-09 10:58:11 +00:00
Hans-Christoph Steiner
4282d34343 gitlab-ci: port lint_* job to Debian/bookworm for stability
This saves us from being surprised by new rules in pylint, pyflakes, etc
like:
https://gitlab.com/FestplattenSchnitzel/fdroidserver/-/jobs/3895256515
2023-03-09 11:45:02 +01:00
Hans-Christoph Steiner
ae2b33dab3 Merge branch 'licaon-kter-master-patch-44056' into 'master'
Gradle 8.0.2

See merge request fdroid/fdroidserver!1320
2023-03-07 19:40:20 +00:00
Licaon_Kter
1449dc88e8 Gradle 8.0.2 2023-03-06 07:44:43 +00:00
Jochen Sprickerhof
12d081fe51 Merge branch 'licaon-kter-master-patch-00517' into 'master'
Gradle 7.6.1

See merge request fdroid/fdroidserver!1318
2023-03-02 08:49:22 +00:00
Licaon_Kter
1f8f31de68 Gradle 7.6.1 2023-02-27 07:36:35 +00:00
Hans-Christoph Steiner
1c589a108c Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v6.9.4

See merge request fdroid/fdroidserver!1317
2023-02-23 20:20:39 +00:00
fdroid-bot
47a14d5302 gradle v8.0.1 2023-02-23 19:59:38 +00:00
Hans-Christoph Steiner
7b2f941f07 Merge branch 'purge-zipalign' into 'master'
purge all references to zipalign, that is delegated to other things

Closes #1078 and #1100

See merge request fdroid/fdroidserver!1316
2023-02-23 19:58:58 +00:00
Hans-Christoph Steiner
98448e0481 purge all references to zipalign, that is delegated to other things
Things like apksigner and @obfusk's tools handle this now.
jarsigner is used in the test, since that's the most common use of
`common.find_sdk_tools_cmd()`.

closes #1100
2023-02-22 14:45:51 +01:00
Hans-Christoph Steiner
f8a186b1d9
Revert locale/hi/LC_MESSAGES/fdroidserver.po conflicting with Weblate
This reverts commit b9b64c7b22.
2023-02-22 14:40:35 +01:00
Hans-Christoph Steiner
4037f4b18f Merge branch 'fix_java_arch' into 'master'
Fix openjdk detection on different architectures

See merge request fdroid/fdroidserver!1315
2023-02-22 11:25:22 +00:00
Jochen Sprickerhof
bae94931b4 Fix openjdk detection on different architectures
The pattern in Debian is:

java-$VERSION-openjdk-$DEB_HOST_ARCH

The regex for $DEB_HOST_ARCH did not match arm64, armel and armhf. As it
can be any string just match anything.
2023-02-22 11:24:39 +00:00
Hans-Christoph Steiner
d5bd2350a2 Merge branch 'translation-sync' into 'master'
Translation sync

See merge request fdroid/fdroidserver!1312
2023-02-22 11:24:18 +00:00
Hans-Christoph Steiner
b9b64c7b22 make -C locale update 2023-02-21 14:57:39 +01:00
Hans-Christoph Steiner
f775734cac remove obsolete source strings, run xgettext without --join-existing 2023-02-21 14:57:39 +01:00
Hans-Christoph Steiner
c78aeb3947 Merge branch 'getvcs-pathlib-fix' into 'master'
handle str and pathlib.Path in getvcs()

See merge request fdroid/fdroidserver!1311
2023-02-21 10:32:50 +00:00
Hans-Christoph Steiner
5af5ed2759 fix test_fill_config_defaults_java for non-amd64 arches 2023-02-21 11:20:16 +01:00
Hans-Christoph Steiner
24df262f6b handle str and pathlib.Path in getvcs() 2023-02-21 11:20:15 +01:00
Hans-Christoph Steiner
d0d15a205f
version 2.2.0 2023-02-20 22:44:41 +01:00
Hans-Christoph Steiner
71a5d33104 update CHANGELOG for 2.2.0; include missing entries 2023-02-20 21:56:22 +01:00
Jochen Sprickerhof
56b5b180aa Merge branch 'fix_path' into 'master'
Fix compare of Path objects

See merge request fdroid/fdroidserver!1309
2023-02-20 11:12:06 +00:00
Jochen Sprickerhof
671d1eba4c
Fix compare of Path objects 2023-02-20 11:59:16 +01:00
Hans-Christoph Steiner
deffe7ced3 Merge branch 'purge-stats' into 'master'
purge all vestiges of the unused `fdroid stats`, closes #839

Closes #839

See merge request fdroid/fdroidserver!1305
2023-02-20 07:21:42 +00:00
Hans-Christoph Steiner
9e9c909380 tests/run-tests: silence err_handler output 2023-02-19 22:54:38 +01:00
Hans-Christoph Steiner
5e812a4af7 set --no-wrap on all translation files 2023-02-19 22:54:38 +01:00
Hans-Christoph Steiner
b8f59097f7 purge all vestiges of the unused fdroid stats, closes #839
* for f in locale/*/LC_MESSAGES/fdroidserver.po; do msgattrib --set-obsolete --no-wrap --ignore-file=locale/fdroidserver.pot -o $f $f; done
* sed -i 's, \.\./fdroidserver/stats\.py,,' locale/*/LC_MESSAGES/fdroidserver.po
2023-02-19 22:54:38 +01:00
Hans-Christoph Steiner
798fe90c67 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1308
2023-02-19 21:30:17 +00:00
Xiang Heng Wei
551bf543ad Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xiang Heng Wei <yylteam@hotmail.com>
Currently translated at 80.0% (499 of 623 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xiang Heng Wei <yylteam@hotmail.com>

Currently translated at 79.2% (494 of 623 strings)

Co-authored-by: Xiang Heng Wei <yylteam@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:47 +01:00
The Cats
d2827e3ed7 Translated using Weblate: Portuguese (Brazil) (pt_BR) by The Cats <philosoph@danwin1210.de>
Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: Portuguese (Brazil) (pt_BR) by The Cats <philosoph@danwin1210.de>

Currently translated at 98.3% (613 of 623 strings)

Co-authored-by: The Cats <philosoph@danwin1210.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:43 +01:00
Ldm Public
995ce3a152 Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>

Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Ldm Public <ldmpub@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:40 +01:00
lilim
5f22f65e7b Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:37 +01:00
gub
d0f998bac3 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>

Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:34 +01:00
ButterflyOfFire
454790003f Translated using Weblate: French (fr) by ButterflyOfFire <ButterflyOfFire@protonmail.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: ButterflyOfFire <ButterflyOfFire@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:29 +01:00
Ldm Public
1b8063117e Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Ldm Public <ldmpub@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:26 +01:00
Deleted User
7b95ddc8ff Translated using Weblate: French (fr) by Deleted User <noreply+22825@weblate.org>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Deleted User <noreply+22825@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:22 +01:00
Besnik Bleta
386a619011 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.4% (607 of 623 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:19 +01:00
Translator
acb6758adb Translated using Weblate: French (fr) by Translator <kvb@tuta.io>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Translator <kvb@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:16 +01:00
gwenderer
c64a5c9896 Translated using Weblate: French (fr) by gwenderer <gwenael.derer@gmail.com>
Currently translated at 98.0% (611 of 623 strings)

Co-authored-by: gwenderer <gwenael.derer@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:13 +01:00
John Donne
bde26db340 Translated using Weblate: French (fr) by John Donne <akheron@zaclys.net>
Currently translated at 97.7% (609 of 623 strings)

Translated using Weblate: French (fr) by John Donne <akheron@zaclys.net>

Currently translated at 98.0% (611 of 623 strings)

Co-authored-by: John Donne <akheron@zaclys.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:08 +01:00
TopFox
130cf94940 Translated using Weblate: French (fr) by TopFox <Arnaud.Savary@etu.unige.ch>
Currently translated at 98.2% (612 of 623 strings)

Co-authored-by: TopFox <Arnaud.Savary@etu.unige.ch>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:05 +01:00
KissPandur
95f1e2957a Translated using Weblate: Hungarian (hu) by KissPandur <zoltankiss.web@gmail.com>
Currently translated at 62.4% (389 of 623 strings)

Co-authored-by: KissPandur <zoltankiss.web@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/hu/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:02 +01:00
ssantos
09f631a2b7 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 99.8% (622 of 623 strings)

Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>

Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 99.8% (622 of 623 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 99.5% (620 of 623 strings)

Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>

Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 93.5% (583 of 623 strings)

Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>

Currently translated at 99.8% (622 of 623 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2023-02-19 22:14:00 +01:00
Licaon Kter
b769cf787d Translated using Weblate: Romanian (ro) by Licaon Kter <licaon.kter@protonmail.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Licaon Kter <licaon.kter@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2023-02-19 22:13:57 +01:00
Oğuz Ersen
d67e3d441a Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguz@ersen.moe>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2023-02-19 22:13:55 +01:00
Hans-Christoph Steiner
16cc863618 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.0.1

See merge request fdroid/fdroidserver!1306
2023-02-19 20:59:09 +00:00
fdroid-bot
dad004a7e4 gradle v8.0.1 2023-02-19 20:57:44 +00:00
Hans-Christoph Steiner
2f3e0b8fb7 Merge branch 'ipfscid' into 'master'
downgrade missing ipfs_cid WARNING to DEBUG

See merge request fdroid/fdroidserver!1307
2023-02-19 20:57:05 +00:00
Izzy
04dc297982 downgrade missing ipfs_cid WARNING to DEBUG 2023-02-19 18:49:24 +00:00
Hans-Christoph Steiner
10802ef00a Merge branch 'rm_failed_sigend' into 'master'
Cleanup upon failing sign_apk (Closes: #1085)

Closes #1085

See merge request fdroid/fdroidserver!1295
2023-02-19 15:02:52 +00:00
Hans-Christoph Steiner
f1f1a873ad gitlab-ci: bump RELEASE_COMMIT_ID to 2.2 beta
This avoid having to write a complicated regex for postbuild:
2023-02-19 15:48:16 +01:00
Hans-Christoph Steiner
58cfce106b add test_sign_apk_fail and test_sign_apk_corrupt 2023-02-19 13:39:48 +01:00
Jochen Sprickerhof
e243983ff8 Cleanup upon failing sign_apk (Closes: #1085) 2023-02-19 10:55:23 +01:00
Hans-Christoph Steiner
e03d71f6c3 Merge branch 'support-java-20' into 'master'
support Java 20, which is already in Debian/unstable, closes #1070

Closes #1070

See merge request fdroid/fdroidserver!1304
2023-02-17 15:48:51 +00:00
Hans-Christoph Steiner
f468270aa8
support Java 20, which is already in Debian/unstable, closes #1070 2023-02-17 16:35:20 +01:00
Jochen Sprickerhof
6c76b8ef87 Merge branch 'signindex-tests' into 'master'
signindex: add JSON check for entry.json

Closes #835

See merge request fdroid/fdroidserver!1303
2023-02-17 14:46:55 +00:00
Hans-Christoph Steiner
0c9f62a5fe signindex: add JSON check for entry.json
Ran this to generate/refresh the test index files:
`cd tests; ../fdroid update --nosign --pretty`

* converts config.py description to a single line, since the values are no
  longer stripped, so this give the same output.

closes #835
2023-02-17 14:34:53 +00:00
Hans-Christoph Steiner
6e2b4f65c2 Merge branch 'apksigcopier-1.1.1' into 'master'
update apksigcopier to upstream v1.1.1

See merge request fdroid/fdroidserver!1302
2023-02-17 13:20:40 +00:00
FC Stegerman
2e080c8170 make F-Droid-specific changes to apksigcopier.py 2023-02-17 13:08:23 +00:00
FC Stegerman
c68e1489bd import apksigcopier v1.1.1 2023-02-17 13:08:23 +00:00
Hans-Christoph Steiner
4de2e3cf04 Merge branch 'windows' into 'master'
gitlab-ci: only run Windows job in branches called "windows

See merge request fdroid/fdroidserver!1301
2023-02-17 09:34:54 +00:00
Hans-Christoph Steiner
5cebb839d4 gitlab-ci: only run Windows job in branches called "windows 2023-02-17 09:34:30 +00:00
Hans-Christoph Steiner
01bddc98f1 Merge branch 'python_dist' into 'master'
Fix l10n broken in venvs, stop packaging makebuildserver script

Closes #1014

See merge request fdroid/fdroidserver!1167
2023-02-16 21:21:38 +00:00
FestplattenSchnitzel
ac9b20f6ab gitlab-ci: check that localization works when installed with pip 2023-02-16 21:07:36 +00:00
FestplattenSchnitzel
beb49eea48 Stop packaging makebuildserver script
makebuildserver requires this repository to be cloned locally.
Fixes #1014.
2023-02-16 21:07:36 +00:00
FestplattenSchnitzel
ada36a3ee5 Fix l10n broken in venvs 2023-02-16 21:07:36 +00:00
Hans-Christoph Steiner
92556e4cd0 Merge branch 'v2_video' into 'master'
v2: move video to translated text (Closes: #1095)

Closes #1095

See merge request fdroid/fdroidserver!1293
2023-02-16 20:59:51 +00:00
Hans-Christoph Steiner
b697845bda add test case for index.package_metadata() 2023-02-16 21:45:39 +01:00
Jochen Sprickerhof
0f151a3779 v2: move video to translated text (Closes: #1095)
It contains a link to the actual video and can be translated.
2023-02-16 21:42:09 +01:00
Jochen Sprickerhof
b1ad5cd4fd Merge branch 'fix_path' into 'master'
common: support PosixPath in log message

See merge request fdroid/fdroidserver!1300
2023-02-16 20:09:56 +00:00
Jochen Sprickerhof
04230dc7c0
common: support PosixPath in log message 2023-02-16 15:17:14 +01:00
Jochen Sprickerhof
7e362a708c Merge branch 'fix_path' into 'master'
build: support PosixPath in log message (Closes #1096)

Closes #1096

See merge request fdroid/fdroidserver!1298
2023-02-16 13:48:24 +00:00
Jochen Sprickerhof
fef42dbc87
build: support PosixPath in log message (Closes: #1096) 2023-02-16 14:29:31 +01:00
Jochen Sprickerhof
c9095134cd Merge branch 'binary' into 'master'
Add build.binary

See merge request fdroid/fdroidserver!1291
2023-02-16 12:30:17 +00:00
linsui
58f167b7e5 Add build.binary 2023-02-16 20:16:52 +08:00
Jochen Sprickerhof
68e27c0a9b Merge branch 'postbuild' into 'master'
Add postbuild

Closes #1069

See merge request fdroid/fdroidserver!1281
2023-02-16 12:11:26 +00:00
linsui
33def096f5 Add postbuild 2023-02-16 12:11:26 +00:00
Hans-Christoph Steiner
2ffb70168a Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v8.0

See merge request fdroid/fdroidserver!1296
2023-02-16 09:05:47 +00:00
fdroid-bot
fd54633f52 gradle v8.0 2023-02-16 08:38:19 +00:00
Jochen Sprickerhof
dc9be512e2 Merge branch 'fix_path' into 'master'
Fix pathlib usage

See merge request fdroid/fdroidserver!1297
2023-02-16 08:37:35 +00:00
Jochen Sprickerhof
ecfbdef60f
Fix pathlib usage
Regression from 4a581bdf.
2023-02-16 09:23:07 +01:00
Jochen Sprickerhof
0e07dd0501 Merge branch 'sbr/python3.6' into 'master'
Remove path workarounds for old python versions

See merge request fdroid/fdroidserver!1276
2023-02-15 19:25:48 +00:00
Simon Brand
4a581bdfb6 Remove path workarounds for old python versions 2023-02-15 19:25:48 +00:00
Hans-Christoph Steiner
c5ba4bc848 Merge branch 'fix_vagrantfile' into 'master'
Set vm_provider in example Vagrantfile.yaml

See merge request fdroid/fdroidserver!1277
2023-02-08 21:17:23 +00:00
Jochen Sprickerhof
629b2650d0 makebuildserver: make sure config is a dict
yaml.safe_load returns None for an empty file.
2023-02-08 21:17:12 +00:00
Hans-Christoph Steiner
84dd97e007 Merge branch 'purge_travis_ci' into 'master'
Remove references to Travis CI, clean up README

See merge request fdroid/fdroidserver!1284
2023-02-08 21:03:17 +00:00
FestplattenSchnitzel
1074b5938d
README: Remove CI/CD status section 2023-02-08 21:49:03 +01:00
FestplattenSchnitzel
406652988a
Remove references to Travis CI
We do not use it any longer.
2023-02-08 21:48:45 +01:00
Hans-Christoph Steiner
375f68480c Merge branch 'fix_fedora_ci' into 'master'
CI: Add missing dependency on Fedora

See merge request fdroid/fdroidserver!1263
2023-02-08 17:34:01 +00:00
Jochen Sprickerhof
6118925387 Skip nightly test on Fedora with pip in $HOME 2023-02-08 18:32:13 +01:00
Hans-Christoph Steiner
b293252029 Merge branch 'rework_unittests' into 'master'
Rework unittests

See merge request fdroid/fdroidserver!1269
2023-02-08 17:29:01 +00:00
Jochen Sprickerhof
5715e377b0 nightly test: cleaup test directory 2023-02-08 18:14:38 +01:00
Jochen Sprickerhof
55c3a28568 run-tests: make mirror test independent of update test 2023-02-08 18:14:38 +01:00
Jochen Sprickerhof
a667074d89 run-tests: make scanner test independent on importer test 2023-02-08 18:14:38 +01:00
Jochen Sprickerhof
b1fca3f722 run-tests: always cleanup testfiles 2023-02-08 18:14:38 +01:00
Jochen Sprickerhof
6ba40b7349 common tests: use patch.dict for os.environ 2023-02-08 18:14:36 +01:00
Jochen Sprickerhof
d29a486e31 tests: use context manager and/or standard setup temp files 2023-02-08 18:12:35 +01:00
Jochen Sprickerhof
1eeb992118
Don't create unused testfiles directory 2023-02-06 14:52:35 +01:00
Jochen Sprickerhof
d5400549f6
update test: set update options 2023-02-06 14:52:35 +01:00
Jochen Sprickerhof
4a6ccae71a
install_ndk: cleanup tempdir 2023-02-06 14:52:32 +01:00
Hans-Christoph Steiner
b285603e43 Merge branch 'destroy_vm' into 'master'
build: close ssh_channel upon timeout

See merge request fdroid/fdroidserver!1287
2023-02-06 11:12:28 +00:00
Jochen Sprickerhof
a6700e65ed build: close ssh_channel upon timeout
The build can get stuck when running into the timeout and paramiko not
noticing it. This can be reproduced by setting a small build timeout for
an app. I tried setting set_keepalive() but it did not help. This
forcefully closes the ssh channel to the VM so the fdroid build will
continue. As we destroy the VM in the next step anyhow I think this is
fine.
2023-02-04 10:14:03 +00:00
Jochen Sprickerhof
5e08187567 build: Rename chan to ssh_channel 2023-02-04 10:14:03 +00:00
Hans-Christoph Steiner
45af14f9a0 Merge branch 'test' into 'master'
CI: fix permissions for git diff --cached

See merge request fdroid/fdroidserver!1292
2023-02-04 10:13:02 +00:00
Jochen Sprickerhof
702f84e920 CI: fix permissions for git diff --cached
fdroid build runs git diff --cached for git_repo.is_dirty(). This does
no longer work without these permissions.
2023-02-04 10:12:48 +00:00
Jochen Sprickerhof
6b9db76c8b Merge branch 'git-tag-docker-tag' into 'master'
gitlab-ci: sanitize git ref names for use as docker tags

See merge request fdroid/fdroidserver!1289
2023-02-03 09:50:43 +00:00
Hans-Christoph Steiner
98aa39a597 gitlab-ci: sanitize git ref names for use as docker tags
git ref names can contain many chars that are not allowed in docker tags.

https://docs.docker.com/engine/reference/commandline/tag/
A tag name must be valid ASCII and may contain lowercase and uppercase
letters, digits, underscores, periods and dashes. A tag name may not start
with a period or a dash and may contain a maximum of 128 characters.

https://gitlab.com/brandsimon/fdroidserver/-/jobs/3705004274
2023-02-03 09:50:31 +00:00
Hans-Christoph Steiner
0cdc2e3f4f Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1290
2023-02-02 20:08:56 +00:00
RainSlide
5c8ab55813 Translated using Weblate: Chinese (Simplified) (zh_Hans) by RainSlide <RainSlide@outlook.com>
Currently translated at 78.8% (491 of 623 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by RainSlide <RainSlide@outlook.com>

Currently translated at 77.2% (481 of 623 strings)

Co-authored-by: RainSlide <RainSlide@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Pixel-Tux
e3e64b8a42 Translated using Weblate: Italian (it) by Pixel-Tux <luis.pardus@gmail.com>
Currently translated at 99.0% (617 of 623 strings)

Translated using Weblate: Italian (it) by Pixel-Tux <luis.pardus@gmail.com>

Currently translated at 98.7% (615 of 623 strings)

Translated using Weblate: Italian (it) by Pixel-Tux <luis.pardus@gmail.com>

Currently translated at 97.5% (608 of 623 strings)

Co-authored-by: Pixel-Tux <luis.pardus@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Ihor Hordiichuk
bf12406b98 Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Sergii Horichenko
136c5bffc6 Translated using Weblate: Ukrainian (uk) by Sergii Horichenko <m@sgg.im>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Sergii Horichenko <m@sgg.im>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Eric
db74db3ccc Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <hamburger1024@duck.com>
Currently translated at 75.9% (473 of 623 strings)

Co-authored-by: Eric <hamburger1024@duck.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
快乐的老鼠宝宝
ca5f402733 Translated using Weblate: Chinese (Simplified) (zh_Hans) by 快乐的老鼠宝宝 <keaitianxinmail@qq.com>
Currently translated at 75.9% (473 of 623 strings)

Co-authored-by: 快乐的老鼠宝宝 <keaitianxinmail@qq.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
ZZY2357
adf039286c Translated using Weblate: Chinese (Simplified) (zh_Hans) by ZZY2357 <ZZY2357@outlook.com>
Currently translated at 75.9% (473 of 623 strings)

Co-authored-by: ZZY2357 <ZZY2357@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Dan
fd9911d41b Translated using Weblate: Ukrainian (uk) by Dan <denqwerta@gmail.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Dan <denqwerta@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
gallegonovato
b26942e0fd Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>

Currently translated at 97.7% (609 of 623 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
nautilusx
46ccddfede Translated using Weblate: German (de) by nautilusx <translate@disroot.org>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: nautilusx <translate@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Xiang Heng Wei
da73550401 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xiang Heng Wei <yylteam@hotmail.com>
Currently translated at 76.8% (479 of 623 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xiang Heng Wei <yylteam@hotmail.com>

Currently translated at 75.7% (472 of 623 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by Xu ZhuoHan <yylteam@hotmail.com>

Currently translated at 74.9% (467 of 623 strings)

Co-authored-by: Xiang Heng Wei <yylteam@hotmail.com>
Co-authored-by: Xu ZhuoHan <yylteam@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
random r
dfe7e1fbd5 Translated using Weblate: Italian (it) by random r <epsilin@yopmail.com>
Currently translated at 96.7% (603 of 623 strings)

Co-authored-by: random r <epsilin@yopmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Fjuro
14c7b8e1b8 Translated using Weblate: Czech (cs) by Fjuro <ifjuro@proton.me>
Currently translated at 100.0% (623 of 623 strings)

Translated using Weblate: Czech (cs) by Fjuro <ifjuro@proton.me>

Currently translated at 98.7% (615 of 623 strings)

Co-authored-by: Fjuro <ifjuro@proton.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Agnieszka C
1f6d1feec9 Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Andrei Stepanov
c915c61ead Translated using Weblate: Russian (ru) by Andrei Stepanov <adem4ik@gmail.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Andrei Stepanov <adem4ik@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:06 +01:00
Ihor Hordiichuk
796f42fe1d Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (623 of 623 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:05 +01:00
Eric
306ff33800 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <hamburger1024@mailbox.org>
Currently translated at 69.8% (435 of 623 strings)

Co-authored-by: Eric <hamburger1024@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2023-02-02 17:36:05 +01:00
Hans-Christoph Steiner
7f1e96fe63 Merge branch 'fix-ci' into 'master'
fix CI

See merge request fdroid/fdroidserver!1288
2023-02-02 15:42:41 +00:00
Hans-Christoph Steiner
497fcfc848 silence new pylint checks that are too much for the current state
Ideally, these would be fixed.  But it'll be a project.

* C0201: Consider iterating the dictionary directly instead of calling .keys() (consider-iterating-dictionary)
* R1705: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it (no-else-return)
* R1720: Unnecessary "elif" after "raise", remove the leading "el" from "elif" (no-else-raise)
* R1720: Unnecessary "else" after "raise", remove the "else" and de-indent the code inside it (no-else-raise)
* R1722: Consider using 'sys.exit' instead (consider-using-sys-exit)
* R1723: Unnecessary "elif" after "break", remove the leading "el" from "elif" (no-else-break)
* R1724: Unnecessary "elif" after "continue", remove the leading "el" from "elif" (no-else-continue)
* R1735: Consider using '{}' instead of a call to 'dict'. (use-dict-literal)
* W0133: Exception statement has no effect (pointless-exception-statement)
* W0718: Catching too general exception Exception (broad-exception-caught)
* W0719: Raising too general exception: Exception (broad-exception-raised)
* W1510: 'subprocess.run' used without explicitly defining the value for 'check'. (subprocess-run-check)
2023-02-02 16:13:54 +01:00
Hans-Christoph Steiner
b152916b49 fix pylint: C1803: 'local_metadata_files != []' can be simplified to 'local_metadata_files' as an empty list is falsey (use-implicit-booleaness-not-comparison) 2023-02-02 16:02:49 +01:00
Hans-Christoph Steiner
75bf953c80 fix pylint: C0104: Disallowed name "bar" (disallowed-name) 2023-02-02 16:02:49 +01:00
Hans-Christoph Steiner
9d2cc1ecc5 fix pylint C1803: 'icons_src == {}' can be simplified to 'not icons_src' as an empty dict is falsey (use-implicit-booleaness-not-comparison) 2023-02-02 16:02:49 +01:00
Hans-Christoph Steiner
176301d831 fix pylint W0715: Exception arguments suggest string formatting might be intended (raising-format-tuple) 2023-02-02 15:49:20 +01:00
Hans-Christoph Steiner
156b3f91cc fix pylint W0404: Reimport 're' (imported line 21) (reimported) 2023-02-02 15:49:20 +01:00
Hans-Christoph Steiner
98769d8405 gitlab-ci: ignore setuptools DoS error from safety 2023-02-02 15:49:20 +01:00
Hans-Christoph Steiner
a27cf3d42d gitlab-ci: use black from Debian for a stable code format
This avoids surprise code format CI breakage when black pushes new rules:
https://gitlab.com/fdroid-bot/fdroidserver/-/jobs/3703868702
2023-02-02 15:49:19 +01:00
Hans-Christoph Steiner
e1d0ff175f Merge branch 'ndk-release-checksums.py' into 'master'
update NDK

See merge request fdroid/fdroidserver!1286
2023-02-02 14:00:49 +00:00
fdroid-bot
e71afa1299 Android NDK None (None) 2023-02-02 13:35:29 +00:00
Hans-Christoph Steiner
c28bb024af Merge branch 'destroy_vm' into 'master'
Distroy VM when running into timeout (Closes: #1094)

Closes #1094

See merge request fdroid/fdroidserver!1285
2023-02-02 13:34:49 +00:00
Jochen Sprickerhof
f8e3356365
Distroy VM when running into timeout (Closes: #1094)
halt results in an Traceback.
2023-02-02 10:03:34 +01:00
Hans-Christoph Steiner
282a7724ef Merge branch 'liberapay' into 'master'
remove liberapayID

Closes #1073

See merge request fdroid/fdroidserver!1266
2023-01-16 17:16:32 +00:00
linsui
5858d8fcb4 remove liberapayID 2023-01-16 17:02:56 +00:00
Jochen Sprickerhof
96d80fbd7c Merge branch 'git' into 'master'
Add codeberg.org

See merge request fdroid/fdroidserver!1280
2023-01-16 14:02:41 +00:00
linsui
a3f760f849 Add codeberg.org 2023-01-16 09:36:05 +00:00
Michael Pöhn
48e682bd80 Merge branch 'yaml_1.2' into 'master'
Use ruamel.yaml in metadata.py and metadata.TestCase

See merge request fdroid/fdroidserver!1238
2023-01-15 12:15:39 +00:00
FestplattenSchnitzel
aa71dd57f6
update.TestCase: Avoid creating metadata with duplicate keys 2023-01-15 12:52:41 +01:00
FestplattenSchnitzel
671a264dfe
Use ruamel.yaml in metadata.py and metadata.TestCase
This is to read metadata based on YAML 1.2 rather than 1.1.
2023-01-15 12:52:41 +01:00
Jochen Sprickerhof
8c10614bf9 Merge branch 'fix-name-int' into 'master'
index.make_v0: ensure name is a str

See merge request fdroid/fdroidserver!1279
2023-01-10 19:25:55 +00:00
FC Stegerman
fc8820ff8e
index.make_v0: ensure name is a str 2023-01-10 19:40:52 +01:00
Jochen Sprickerhof
5075586f7d Merge branch 'ci_doc_debian' into 'master'
CI: Use Debian packages for documenation build

See merge request fdroid/fdroidserver!1278
2023-01-05 18:23:46 +00:00
Jochen Sprickerhof
37dd416aeb
CI: Use Debian packages for documenation build 2023-01-05 19:19:28 +01:00
Jochen Sprickerhof
d3c51f3abd Merge branch 'fix-bullseye-blocklist' into 'master'
checkupdates: only use bullseye_blocklist when openjdk-11 is mentioned

Closes #1076

See merge request fdroid/fdroidserver!1273
2022-12-07 06:58:35 +00:00
FC Stegerman
cefcf432c3
checkupdates: only use bullseye_blocklist when openjdk-11 is mentioned 2022-12-07 03:37:55 +01:00
Jochen Sprickerhof
bc56704eb0 Merge branch 'checkupdates_block_jdk11' into 'master'
checkupdates: Block one more openjdk-11

See merge request fdroid/fdroidserver!1272
2022-12-06 09:07:23 +00:00
Jochen Sprickerhof
a739a262f2
checkupdates: Block one more openjdk-11
See:

e397da7962 (note_1197704481)
2022-12-06 10:06:47 +01:00
Jochen Sprickerhof
393301c9e3 Merge branch 'verify-apks-diff' into 'master'
verify_apks(): compare to unsigned APK if copying fails

See merge request fdroid/fdroidserver!1264
2022-12-01 13:49:53 +00:00
FC Stegerman
c81ad4485c verify_apks(): compare to unsigned APK if copying fails 2022-11-30 10:39:46 +00:00
Hans-Christoph Steiner
159ae4a163 Merge branch 'clean_submodules' into 'master'
clean_repos plugin: also clean submodules

See merge request fdroid/fdroidserver!1268
2022-11-29 10:30:48 +00:00
Jochen Sprickerhof
46e5fa3714 clean_repos plugin: also clean submodules 2022-11-29 10:30:10 +00:00
Hans-Christoph Steiner
07481953ae Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.6

See merge request fdroid/fdroidserver!1271
2022-11-29 10:29:36 +00:00
fdroid-bot
4574728bb4 gradle v7.6 2022-11-28 13:20:41 +00:00
Hans-Christoph Steiner
37ffdd9a2a Merge branch 'linsui-master-patch-50291' into 'master'
gradle 7.6

See merge request fdroid/fdroidserver!1270
2022-11-28 13:19:59 +00:00
linsui
e6bf930fd4 gradle 7.6 2022-11-28 10:13:18 +00:00
Hans-Christoph Steiner
e70ef18d52
examples/fdroid_clean_repos.py: fix typo
!1227
2022-11-22 20:47:09 +01:00
Hans-Christoph Steiner
052c753075 examples/fdroid_clean_repos.py: black code format
!1227
2022-11-22 20:43:19 +01:00
Hans-Christoph Steiner
d7d4c18502 Merge branch 'cleanup_repos' into 'master'
update: make sure VCSs are clean

See merge request fdroid/fdroidserver!1227
2022-11-22 19:37:23 +00:00
Jochen Sprickerhof
1015225a00 Add plugin to cleanup app VCSs 2022-11-22 19:36:33 +00:00
Jochen Sprickerhof
886394c9a4 Merge branch 'index-v2-nightly' into 'master'
nightly bug fixes and tests

See merge request fdroid/fdroidserver!1257
2022-11-16 21:26:40 +00:00
Hans-Christoph Steiner
09b0405eb0
gitlab-ci: apksigner from current build-tools in ubuntu_jammy_pip 2022-11-16 20:16:36 +01:00
Hans-Christoph Steiner
1a30766c24
deploy: GIT_DEPTH=1 so GitLab Pages job runs as quick as possible
* https://docs.gitlab.com/ee/ci/large_repositories/index.html#shallow-cloning
2022-11-16 20:16:34 +01:00
Hans-Christoph Steiner
947d94e0a9
deploy: support GitLab Job Artifacts as a mirror 2022-11-16 20:16:32 +01:00
Hans-Christoph Steiner
d0976a3684
deploy: check repo size before enabling GitLab Pages 2022-11-16 20:16:30 +01:00
Hans-Christoph Steiner
cdce0958f8
deploy: convert .gitlab-ci.yml generation to dict + yaml.dump() 2022-11-16 20:16:27 +01:00
Hans-Christoph Steiner
f24613b701
index: fix git-mirror size check for GitLab Pages
The test case had the wrong folder setup, this was confirmed on a production
repo setup.
2022-11-16 20:16:25 +01:00
Hans-Christoph Steiner
83335437b9
nightly: if repo is too large, set archive_older to 3
If the user has not manually set --archive-older, then this will auto-switch
it from 20 to 3 to shrink the repo down so it fits into GitLab Pages.
2022-11-16 20:16:23 +01:00
Hans-Christoph Steiner
c2567d71d1
nightly: fail if *-nightly git repo is not publicly available 2022-11-16 20:16:21 +01:00
Hans-Christoph Steiner
15bd7057f0 nightly: add tests 2022-11-16 16:50:14 +01:00
Hans-Christoph Steiner
9c0eaac121 nightly: convert to config.yml 2022-11-16 14:40:08 +01:00
Hans-Christoph Steiner
1c5506ae05 nightly: support OpenSSL 3.0 with Paramiko
OpenSSL 3.0 changed the default output format from PKCS#1 to PKCS#8,
which paramiko does not support.

https://www.openssl.org/docs/man3.0/man1/openssl-rsa.html#traditional
https://github.com/paramiko/paramiko/issues/1015
2022-11-16 14:40:08 +01:00
Hans-Christoph Steiner
bf945a3062 nightly: only write SSH key files if ~/.ssh exists on dev's machine 2022-11-16 14:40:08 +01:00
Hans-Christoph Steiner
553c9aa7e7 include tests/nightly.TestCase in dist tarball 2022-11-16 14:40:08 +01:00
Hans-Christoph Steiner
e1793226e0 Merge branch 'robust-vagrant' into 'master'
Make buildserver build more robust and debuggable

See merge request fdroid/fdroidserver!811
2022-11-16 11:50:04 +00:00
Adam Novak
a15fc28982 Point user to Vagrant log if build server failed to build 2022-11-16 12:22:40 +01:00
Hans-Christoph Steiner
df579b2ff6 Merge branch 'reduce_noise' into 'master'
Drop VCS version check on every build

See merge request fdroid/fdroidserver!1214
2022-11-16 10:56:47 +00:00
Jochen Sprickerhof
3eea5f7c09 Don't get_android_tools_version_log for non builds 2022-11-16 10:56:27 +00:00
Jochen Sprickerhof
2cbb5576c7 Drop VCS version check on every build
This was introduced in
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/391

I don't think it is needed anymore.

Also log appid:versionCode
2022-11-16 10:56:27 +00:00
Hans-Christoph Steiner
b54eb946f1 Merge branch 'java-security-tmpdir' into 'master'
verify_old_apk_signature(): use temp dir instead of $PWD/.java.security

See merge request fdroid/fdroidserver!1256
2022-11-15 19:58:57 +00:00
FC Stegerman
e58637374c
verify_deprecated_jar_signature(): use temp dir instead of $PWD/.java.security 2022-11-15 19:10:38 +01:00
Jochen Sprickerhof
88995f71d3 Merge branch 'stop-preinstalling-ndk' into 'master'
stop pre-installing the ndk

See merge request fdroid/fdroidserver!1255
2022-11-15 13:25:55 +00:00
Hans-Christoph Steiner
c1342ab9d6 stop pre-installing the ndk 2022-11-15 13:25:19 +00:00
Jochen Sprickerhof
366dd0e408 Merge branch 'index-v2.jar-is-not-valid' into 'master'
index-v2.jar is not a valid file, remove references

See merge request fdroid/fdroidserver!1261
2022-11-15 13:22:27 +00:00
Hans-Christoph Steiner
01f7dfd0b3 index-v2.jar is not a valid file, remove references
entry.jar is the signed file, it references index-v2.json.
2022-11-15 13:22:09 +00:00
Jochen Sprickerhof
002d9cf333 Merge branch 'archive' into 'master'
Set ArchivePolicy default value based on VercodeOperation

See merge request fdroid/fdroidserver!1237
2022-11-15 13:21:32 +00:00
linsui
d25995c084 Set ArchivePolicy based on VercodeOperation/signature 2022-11-15 18:50:16 +08:00
Hans-Christoph Steiner
9016bb4ca0 Merge branch 'scanner-signature-sources-config' into 'master'
🔍 add `scanner_signature_sources` config option

Closes #732

See merge request fdroid/fdroidserver!1218
2022-11-15 09:33:36 +00:00
Michael Pöhn
4ce2f291e3 remove --exodus cli option from scanner.py 2022-11-15 09:20:26 +00:00
Michael Pöhn
24d88705fa 🔍 add scanner_signature_sources config option
This adds the option to configure which set of signatures `fdroid
scanner` should use, by configuring it in `config.yml`. It allows
fetching signatures in our custom json format. It also adds 3 additional
sources: 'suss', 'exodus', 'etip'
2022-11-15 09:20:26 +00:00
Jochen Sprickerhof
46d077292c Merge branch 'reduce_status_json' into 'master'
status.json: drop logs of failed builds

See merge request fdroid/fdroidserver!1254
2022-11-15 08:25:05 +00:00
Jochen Sprickerhof
e0fa38bab3 status.json: drop logs of failed builds
Those are uploaded separately.
2022-11-15 08:12:51 +00:00
Jochen Sprickerhof
1562975bad Merge branch 'vm-cpu-memory-status' into 'master'
build: read VM CPUs/RAM from builder/Vagrantfile

See merge request fdroid/fdroidserver!1262
2022-11-15 08:11:45 +00:00
Hans-Christoph Steiner
bd51b2e99f build: read VM CPUs/RAM from builder/Vagrantfile
makebuildserver.config.py is no more, builder/Vagrantfile is now where the
CPU and memory is configured for the buildserver VM.  In fact, that was
always the actual place, the makebuildserver.config.py thing was just
confused.

This should have been part of !1222
2022-11-15 08:57:41 +01:00
Hans-Christoph Steiner
5ea8c7da45 Merge branch 'fix_new_jdk' into 'master'
Skip jarsigner test due to weak signatures

See merge request fdroid/fdroidserver!1239
2022-11-15 07:19:19 +00:00
Jochen Sprickerhof
0549535bab
signindex: fix buster workaround
Don't try to remove arg if the old args where used.
2022-11-14 17:59:56 +01:00
Jochen Sprickerhof
1bb963d768
jarsigner: allow weak signatures
openjdk-11 11.0.17 in Debian unstable fails to verify weak signatures:

jarsigner -verbose -strict -verify tests/signindex/guardianproject.jar

         131 Fri Dec 02 20:10:00 CET 2016 META-INF/MANIFEST.MF
         252 Fri Dec 02 20:10:04 CET 2016 META-INF/1.SF
        2299 Fri Dec 02 20:10:04 CET 2016 META-INF/1.RSA
           0 Fri Dec 02 20:09:58 CET 2016 META-INF/
 m  ?  48743 Fri Dec 02 20:09:58 CET 2016 index.xml

  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  ? = unsigned entry

- Signed by "EMAILADDRESS=root@guardianproject.info, CN=guardianproject.info, O=Guardian Project, OU=FDroid Repo, L=New York, ST=New York, C=US"
    Digest algorithm: SHA1 (disabled)
    Signature algorithm: SHA1withRSA (disabled), 4096-bit key

WARNING: The jar will be treated as unsigned, because it is signed with a weak algorithm that is now disabled by the security property:

  jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, DSA keySize < 1024, SHA1 denyAfter 2019-01-01, include jdk.disabled.namedCurves
2022-11-14 17:59:56 +01:00
Jochen Sprickerhof
d4b6e95c4e
init: use provided keyalias 2022-11-14 17:58:37 +01:00
Jochen Sprickerhof
24630dfe68
Drop old getsig.java test
getsig.java was replaced by a Python implementation in 6e2d0a9e (2014)
and the test was only there to compare the results for the transition.

Dropping this as it no longer works starting with 11.0.17+8.
2022-11-14 17:58:37 +01:00
Jochen Sprickerhof
beed746740
Replace custom code by verify_jar_signature() 2022-11-14 17:58:35 +01:00
Hans-Christoph Steiner
623c5b6613 Merge branch 'server_locale' into 'master'
Fix locale on buildserver to C.UTF-8

See merge request fdroid/fdroidserver!1259
2022-11-14 15:40:39 +00:00
Jochen Sprickerhof
5b7c186e4a
Fix locale on buildserver to C.UTF-8
Regression of 817a156ea.
2022-11-14 16:06:31 +01:00
Jochen Sprickerhof
5f891314a2 Merge branch 'apksigcopier-1.1.0' into 'master'
update apksigcopier to upstream v1.1.0 (which adds support for gradle-signed APKs)

Closes #1051

See merge request fdroid/fdroidserver!1249
2022-11-09 21:42:50 +00:00
FC Stegerman
ae23175a6b f-droid modifications: rm do_compare(), main(), ... 2022-11-09 21:42:24 +00:00
FC Stegerman
038697cba5 copy apksigcopier v1.1.0 2022-11-09 21:42:24 +00:00
Jochen Sprickerhof
c30340947a Merge branch 'delete-triple-redundant-img' into 'master'
makebuildserver: delete unused libvirt image after process is complete

See merge request fdroid/fdroidserver!1253
2022-11-09 21:42:07 +00:00
Hans-Christoph Steiner
e395cd4f79
makebuildserver: delete unused libvirt image after process is complete
This process creates three copies of the buildserver image, all of which
are large.  So deleting the unused one is quite helpful:

```
-rw-r--r-- 1 fdroid       fdroid       20G  8. Nov 15:22 /home/fdroid/.vagrant.d/boxes/buildserver/0/libvirt/box.img
-rw------- 1 root         root         19G  8. Nov 14:07 /var/lib/libvirt/images/buildserver_default.img
-rwxr--r-- 1 libvirt-qemu libvirt-qemu 20G  8. Nov 16:08 /var/lib/libvirt/images/buildserver_vagrant_box_image_0_box.img
```
2022-11-09 18:40:26 +01:00
Jochen Sprickerhof
17e30a306c Merge branch 'reduce_status_json' into 'master'
Drop successfulBuilds from build.json

See merge request fdroid/fdroidserver!1211
2022-11-07 07:44:52 +00:00
Jochen Sprickerhof
b73c4b9214 Drop successfulBuilds from build.json
This should reduce the file size from 34MB to 1MB and it is not used by
the monitor.
2022-11-07 07:30:45 +00:00
Jochen Sprickerhof
6d505af6e4 Merge branch 'update_check_data_ints' into 'master'
lint: UpdateCheckData regex must match integers

See merge request fdroid/fdroidserver!1252
2022-11-06 17:14:35 +00:00
Jochen Sprickerhof
dedce2f236
lint: AUM with UCM: HTTP must have a pattern
Closes: #1029
2022-11-05 21:15:00 +01:00
Jochen Sprickerhof
551fca21b3
lint: UpdateCheckData regex must match integers 2022-11-05 21:15:00 +01:00
Jochen Sprickerhof
e76aac414f Merge branch 'checkupdates_block_jdk11' into 'master'
Drop JDK 11 on checkupdates

See merge request fdroid/fdroidserver!1248
2022-11-04 15:39:19 +00:00
Jochen Sprickerhof
b8ea90f252 Drop JDK 11 on checkupdates 2022-11-04 15:38:41 +00:00
Hans-Christoph Steiner
6c845be6b9 Merge branch 'fix-Windows' into 'master'
gitlab-ci: fix Windows job by installing Python 3.10, which has wheels

See merge request fdroid/fdroidserver!1251
2022-11-04 12:34:43 +00:00
Hans-Christoph Steiner
034735a81d
gitlab-ci: fix Windows job by installing Python 3.10, which has wheels
It seems that 3.11 whl packages are not yet always available.  We have other
jobs for testing new Python versions.
2022-11-04 13:34:14 +01:00
Hans-Christoph Steiner
166c28a7e7 Merge branch 'finalize-Vagrantfile.yaml' into 'master'
makebuildserver: stop trying to write to Vagrantfile.yaml

See merge request fdroid/fdroidserver!1250
2022-11-04 10:47:30 +00:00
Hans-Christoph Steiner
6ec7e05c76
makebuildserver: stop trying to write to Vagrantfile.yaml
If Vagrantfile.yaml exists, makebuildserver should no longer try to write
to it.  It is now manully managed now that makebuildserver.config.py no
longer exists.  Also, now that the buildserver is smaller, the workflow is
to always destroy and recreate it rather than ever try to reprovision it.
2022-11-04 11:33:55 +01:00
Hans-Christoph Steiner
b709ce8255 Merge branch 'man_db' into 'master'
Disable man-db auto-update (as done by sbuild)

See merge request fdroid/fdroidserver!1232
2022-11-03 17:21:35 +00:00
Jochen Sprickerhof
a2050a72fa Disable man-db auto-update (as done by sbuild) 2022-11-03 17:21:16 +00:00
Hans-Christoph Steiner
422ce78656 Merge branch 'agp' into 'master'
* agp:
  8.0 Android Gradle Plugin is already listed
  update AGP/Gradle map

fdroid/fdroidserver!1236
2022-11-03 17:34:33 +01:00
Hans-Christoph Steiner
9509707df6
8.0 Android Gradle Plugin is already listed 2022-11-03 17:34:07 +01:00
linsui
29079a4423 update AGP/Gradle map 2022-11-03 16:30:30 +00:00
Michael Pöhn
f8395ffe71 Merge branch 'move-makebuildserver.config.py-to-Vagrantfile.yaml' into 'master'
buildserver: turn ./makebuildserver into a pure helper script, allow standalone vagrant operation

See merge request fdroid/fdroidserver!1222
2022-11-03 13:01:18 +00:00
Hans-Christoph Steiner
2bf706ebe6
buildserver: clean up dirs from purged packages 2022-11-03 13:27:20 +01:00
Hans-Christoph Steiner
d6008cdb2a
convert examples/makebuildserver.config.py to Vagrantfile.yaml
Also, tests/androguard_test.py was removed long ago
2022-11-03 13:27:18 +01:00
Hans-Christoph Steiner
abf535aabe
buildserver: move config to buildserver/Vagrantfile.yaml 2022-11-03 13:27:16 +01:00
Hans-Christoph Steiner
e2fcd633fc
buildserver: hard code basebox name and version
This is not user-configurable, so it should not be setup to be.  This
process is only tested on the one basebox, and devs can just edit
Vagrantfile directly to test other base boxes.

# Conflicts:
#	makebuildserver
2022-11-03 13:27:15 +01:00
Hans-Christoph Steiner
abdd02f33a
makebuildserver: move copy_caches_from_host to command line flag 2022-11-03 13:27:13 +01:00
Hans-Christoph Steiner
21ea1c1c89
makebuildserver: purge apt_package_cache feature
This is unmaintained, lightly used, a tangled mess, and can be replaced by
things like the vagrant-cachier plugin or #418
2022-11-03 13:27:11 +01:00
Michael Pöhn
52849deea0 Merge branch 'set_e' into 'master'
Run shell scripts with -e (Closes: #1035)

Closes #1035

See merge request fdroid/fdroidserver!1185
2022-11-03 12:26:06 +00:00
Jochen Sprickerhof
557fe87d44 Run shell scripts with -e (Closes: #1035)
Make sudo, init prebuild, build and Prepare fields lists and only
concatenate them with '; ' before execution. This allows arbitrary
commands inside the fileds (even && and ';') as we don't need to split
the commands again for rewritemeta.
2022-11-03 12:25:31 +00:00
Michael Pöhn
49d8ba3b9b Merge branch 'fix-buildserver' into 'master'
buildserver: clean up secondary libvirt box image after rebuild

See merge request fdroid/fdroidserver!1247
2022-11-03 12:17:08 +00:00
Hans-Christoph Steiner
6c5ffdc428
buildserver: clean up secondary libvirt box image after rebuild
Boxes are stored in two places when using vagrant-libvirt:

 1. `vagrant box add` -> ~/.vagrant.d/boxes/buildserver/0/libvirt/
 2. `vagrant up` -> /var/lib/libvirt/images/buildserver_vagrant_box_image_0_box.img

If the second box is not cleaned up, then `fdroid build` will continue
to use the one from the second location, thereby ignoring the updated
one at the first location.  This keeps the second one around until the
new box is ready in case `fdroid build` is using it while this script
is running.
2022-11-03 12:58:58 +01:00
Jochen Sprickerhof
938b324e4d Merge branch 'btlog-index-v2' into 'master'
binary transparency log improvements

See merge request fdroid/fdroidserver!1245
2022-11-02 19:24:38 +00:00
Hans-Christoph Steiner
890513fcba index: standardized AntiFeature variable names
This is the only occurance of "anti_features".
2022-11-01 09:54:06 +01:00
Hans-Christoph Steiner
886712026d index: Anti-Features should always be a sorted set
There are diffs in the index caused by unstable order:
* 184cdd9c65 (572d84bb16becb794e10614840972554f333c66e_169259_169353)
* 184cdd9c65 (24c372740761176e67461dbc9136a799b15cfdbf_204154_204185)
2022-11-01 09:53:09 +01:00
Hans-Christoph Steiner
cd0c049b03 btlog: include index-v2 files 2022-11-01 08:47:48 +01:00
Jochen Sprickerhof
eb79769b37 Merge branch 'handle-default-txt-in-fdroid-metadata' into 'master'
handle default.txt changelog in fdroid metadata/

See merge request fdroid/fdroidserver!1243
2022-10-31 12:13:44 +00:00
Hans-Christoph Steiner
ca13325913
gitlab-ci: simplify ubuntu_jammy_pip job, babel is not needed
Babel runs on install now, before it was used to pre-generated the
compiled gettext files.
2022-10-31 12:56:32 +01:00
Hans-Christoph Steiner
ffc3fbe288
handle default.txt changelog in fdroid metadata/
fixup !1240
2022-10-31 12:56:30 +01:00
Hans-Christoph Steiner
10c1089eba Merge branch '1240-fixups' into 'master'
!1240 fixups

See merge request fdroid/fdroidserver!1242
2022-10-31 10:06:49 +00:00
Hans-Christoph Steiner
97f3e78fa8 fixup from 8b484b37bd in !1240 2022-10-31 10:56:02 +01:00
Hans-Christoph Steiner
99e0c28d37 run black on tests/updates.TestCase to fix lint failure 2022-10-31 10:19:43 +01:00
Hans-Christoph Steiner
e799f32d71 set black to format to py38 to support Debian/bullseye package
Debian/bullseye (stable) includes black v20.8b1, which does not yet know
about the py39 target-version.
2022-10-31 10:19:43 +01:00
Hans-Christoph Steiner
ef292d8d6d Merge branch 'obfusk-master-patch-68185' into 'master'
gradlew-fdroid: use curl --retry 3 --retry-all-errors

Closes #1063

See merge request fdroid/fdroidserver!1241
2022-10-31 08:45:55 +00:00
FC Stegerman
f149b8fbe1 gradlew-fdroid: use curl --retry 3 --retry-all-errors 2022-10-31 08:45:41 +00:00
Hans-Christoph Steiner
027a7fb208
Merge branch 'absurdity' into 'master'
* absurdity:
  add tests for Fastlane changelogs including default.txt
  use default.txt as fallback changelog when inserting fastlane metadata

see fdroid/fdroidserver!1240
2022-10-31 09:42:56 +01:00
Hans-Christoph Steiner
8b484b37bd
add tests for Fastlane changelogs including default.txt 2022-10-31 09:42:19 +01:00
Ashutosh Gangwar
afec880c81
use default.txt as fallback changelog when inserting fastlane metadata 2022-10-30 19:07:52 +05:30
Jochen Sprickerhof
a17627bffa Merge branch 'volist' into 'master'
change VercodeOperation to TYPE_LIST

See merge request fdroid/fdroidserver!1233
2022-10-29 06:41:40 +00:00
linsui
618e2c7d72 change VercodeOperation to TYPE_LIST 2022-10-27 19:11:37 +08:00
Jochen Sprickerhof
747fa13591 Merge branch 'licaon-kter-master-patch-87038' into 'master'
buildserver: strip extraneous packages installed by Vagrant base box

See merge request fdroid/fdroidserver!1228
2022-10-25 18:23:06 +00:00
Hans-Christoph Steiner
7976ecc12a buildserver: mark fdroidserver deps as manual
This lets build steps use `apt-get autoremove` and still have a working
fdroidserver.
2022-10-25 19:48:27 +02:00
Hans-Christoph Steiner
817a156ea5 buildserver: strip extraneous packages installed in Vagrant base box
The official Debian Vagrant box seems to be a "batteries included" kind of
thing.  The buildserver should be as small as possible, so this removes all
the extraneous packages I could find in the Vagrant basebox.
2022-10-25 19:47:31 +02:00
Hans-Christoph Steiner
fdeab70c03 Merge branch 'fix_int_field_0' into 'master'
Support 0 as versionCode

See merge request fdroid/fdroidserver!1231
2022-10-25 11:40:15 +00:00
Jochen Sprickerhof
b86d815743
Support 0 as versionCode
See: !1230
2022-10-25 12:55:44 +02:00
Jochen Sprickerhof
8533c9cb4b Merge branch 'fix_ipfs_test' into 'master'
Fix ipfs test config

See merge request fdroid/fdroidserver!1226
2022-10-24 09:58:05 +00:00
Jochen Sprickerhof
5e1bdfc278
Fix ipfs test config 2022-10-24 11:43:47 +02:00
Jochen Sprickerhof
7bd7e5c0db Merge branch 'python_3.9' into 'master'
Require Python 3.9

Closes #1038

See merge request fdroid/fdroidserver!1224
2022-10-24 09:18:04 +00:00
FestplattenSchnitzel
625dc11930 Require Python 3.9 2022-10-24 09:17:27 +00:00
Jochen Sprickerhof
ecaf1fc770 Merge branch 'download-retries' into 'master'
net.download_file(): retry on errors

Closes #1058

See merge request fdroid/fdroidserver!1225
2022-10-24 09:11:49 +00:00
FC Stegerman
d1ddd525c1
net.download_file(): retry on errors 2022-10-22 23:15:13 +02:00
Hans-Christoph Steiner
c61c9f3895 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.5.1

See merge request fdroid/fdroidserver!1223
2022-10-20 16:16:04 +00:00
fdroid-bot
d19d34d944 gradle v7.5.1 2022-10-20 16:03:14 +00:00
Hans-Christoph Steiner
b2a96662b6 Merge branch 'fix-vagrant-package' into 'master'
buildserver: fix `vagrant package` step

Closes #990

See merge request fdroid/fdroidserver!1220
2022-10-20 16:02:31 +00:00
Hans-Christoph Steiner
1dd480405e
buildserver: let vagrant package handle insecure private key
This script was overwriting the provisioning that `vagrant package` does
already, and breaking `vagrant ssh`.  It should have been removed in !1099

closes #990
    fdroid-bootstrap-buildserver#12
    !1012
    !1099
c6f5956537
2022-10-20 17:42:53 +02:00
Hans-Christoph Steiner
1e2e82fbde
makebuildserver: use HTTPS in default debian apt source 2022-10-20 17:42:50 +02:00
Hans-Christoph Steiner
cdee2caa03 Merge branch 'post-bullseye-ci-updates' into 'master'
gitlab-ci: port ubuntu_bionic_pip to Ubuntu/jammy

See merge request fdroid/fdroidserver!1221
2022-10-20 15:36:18 +00:00
Hans-Christoph Steiner
2b5c35829f tests/run-tests: fix "fatal: transport 'file' not allowed"
https://gitlab.com/eighthave/fdroidserver/-/jobs/3202418899
2022-10-20 17:21:43 +02:00
Hans-Christoph Steiner
2bde06a60f gitlab-ci: port ubuntu_bionic_pip to Ubuntu/jammy
This job is here to test using fdroidserver with only depends from pip
and sdkmanager (e.g. not apt-get).  Production is now on bullseye #1038
2022-10-19 14:10:46 +02:00
Hans-Christoph Steiner
eafa7f5e70 gitlab-ci: delete buster_backports job, prod signing is on bullseye
Via private email with @CiaranG
2022-10-19 14:06:59 +02:00
Hans-Christoph Steiner
81f02b8279 gitlab-ci: fix apt.conf syntax for Acquire::Retries 2022-10-19 13:56:28 +02:00
Jochen Sprickerhof
6071ae8f38 Merge branch 'multi' into 'master'
Support autoupdate multi build blocks

See merge request fdroid/fdroidserver!1169
2022-10-16 08:13:02 +00:00
linsui
68b58c043f Change VercodeOperation to list
... so that we can calculate multiple version codes to support multi-arch autoupdate
2022-10-15 17:19:49 +08:00
linsui
0d39169840 checkupdates.TestCase: remove indentation
These assert functions doesn't need to be in the mock context.
2022-10-15 16:09:19 +08:00
Jochen Sprickerhof
e62a2a86fc Merge branch 'vercode' into 'master'
make versionCode an integer

Closes #332

See merge request fdroid/fdroidserver!1176
2022-10-14 09:02:12 +00:00
linsui
5a28f20301 make versionCode/build.timeout an integer
Co-authored-by: Jochen Sprickerhof <git@jochen.sprickerhof.de>
2022-10-14 08:42:26 +00:00
linsui
6f73a87eb1 fix typo: Build -> Builds 2022-10-14 08:42:26 +00:00
Michael Pöhn
44eab1d5d2 Merge branch 'use-vagrant-package' into 'master'
makebuildserver: use `vagrant package` and purge custom code

Closes #990

See merge request fdroid/fdroidserver!1099
2022-10-13 14:10:55 +00:00
Hans-Christoph Steiner
9089750277 buildserver: show informative message if Vagrant is not configed 2022-10-13 13:56:56 +00:00
Hans-Christoph Steiner
b4d25d2834 makebuildserver: use vagrant package; purge custom code
Years ago, vagrant-libvirt did not implement the `vagrant package` command
that we needed, and there were no Ruby people around to implement it for us.
So we hacked a custom version in our Python wrapper.  Now, vagrant-libvirt
v0.7.0 does implement it, so this switches things to just using
`vagrant package`
2022-10-13 13:56:56 +00:00
Hans-Christoph Steiner
380403cb54 Merge branch 'status_json_earlier' into 'master'
Sync status json after every build

See merge request fdroid/fdroidserver!1215
2022-10-13 11:20:25 +00:00
Jochen Sprickerhof
9c0d50a9b2 Sync status json after every build
dfdd2913 the logic to only write the status json upon build but before
the build happens. This makes sure that it is written after a
successful build or exception.
2022-10-13 11:20:15 +00:00
Hans-Christoph Steiner
cd8ded730a Merge branch 'fix-scanner-config-loading' into 'master'
scanner: fix loading config.yml

See merge request fdroid/fdroidserver!1216
2022-10-13 11:12:05 +00:00
Michael Pöhn
06b8150922 scanner: fix loading config.yml
With my last merge request I accidentally intoduced a bug where
scanner.py stopped loading 'config.yml' because the helper functions
from common.py get called in the wrong places. This change fixes this
issue.
2022-10-13 10:53:25 +02:00
Jochen Sprickerhof
c1b665e3f9 Merge branch 'install-buildserver-with-fdroid-sdkmanager' into 'master'
buildserver: install default SDK packages using fdroid/sdkmanager

Closes #927

See merge request fdroid/fdroidserver!1212
2022-10-12 19:13:07 +00:00
Hans-Christoph Steiner
bdc10caa57 add missing build-tools and platforms 2022-10-12 20:57:55 +02:00
Hans-Christoph Steiner
daa5ad152e buildserver: install default SDK packages using fdroid/sdkmanager
fdroid/sdkmanager provides a root of trust to verify all the packages it
downloads, so it fully replaces what makebuildserver was doing.

closes #927
2022-10-12 20:57:55 +02:00
Hans-Christoph Steiner
e4f1066bb1 stop installing ancient plaforms: 2.1 (7), 2.2 (8), 2.3 (9)
fdroid/sdkmanager has bugs with some of these, and some of these have been
taken down. https://dl.google.com/android/repository/android-2.3_r01-linux.zip
gives a 404.
2022-10-12 20:57:55 +02:00
Hans-Christoph Steiner
1d710947b9 buildserver: stop installing 'android;m2repository' by default
It is a huge package, it is rarely used, its not supported by
fdroid/sdkmanager yet, and it is a pain to manage the install.  If this
breaks any app builds, the package can be installed as part of the build
metadata.
2022-10-12 20:57:55 +02:00
Hans-Christoph Steiner
41266f2ac3 Merge branch 'buildserver-docker-apt-mark-manual' into 'master'
Dockerfile: apt-mark manual fdroidserver dependencies

See merge request fdroid/fdroidserver!1213
2022-10-12 18:57:38 +00:00
Jochen Sprickerhof
300278e7c2 remove transitional apt-transport-https package 2022-10-12 18:57:23 +00:00
Hans-Christoph Steiner
fd9b911a42 Dockerfile: apt-mark manual fdroidserver dependencies
Then apt-get does not warn about unneeded deps that could be autoremoved.
2022-10-12 18:57:23 +00:00
Hans-Christoph Steiner
7a40e5f6d5 Merge branch 'status_only_on_build' into 'master'
Write build/status.json only on build

See merge request fdroid/fdroidserver!1210
2022-10-12 16:17:38 +00:00
Jochen Sprickerhof
dfdd29131f
Write build/running.json only on build
This should reduce the runtime.

Also test if it was written.
2022-10-12 15:25:17 +02:00
Jochen Sprickerhof
b3f0f6f77e Merge branch 'pow' into 'master'
Allow pow in VercodeOperation (Closes: #1021)

Closes #1021

See merge request fdroid/fdroidserver!1158
2022-10-12 09:04:59 +00:00
Jochen Sprickerhof
8244ffa0ff Allow pow in VercodeOperation (Closes: #1021) 2022-10-12 08:51:17 +00:00
Jochen Sprickerhof
79be3c1e5d Merge branch 'fix-ipfs_cid-detection' into 'master'
fix ipfs_cid detection logic

See merge request fdroid/fdroidserver!1209
2022-10-12 06:54:02 +00:00
Hans-Christoph Steiner
ade0122d47
fix ipfs_cid detection logic
@obfusk caught this.

I messed up in 02a91cba66 from !1202
2022-10-11 23:31:08 +02:00
Hans-Christoph Steiner
0c8e0abf28 Merge branch 'grab-bag-o-six' into 'master'
Grab bag o' six

See merge request fdroid/fdroidserver!1202
2022-10-11 14:51:55 +00:00
Hans-Christoph Steiner
f97dc0d010
version 2.2 alpha 0 2022-10-11 16:36:13 +02:00
Hans-Christoph Steiner
353ee84a6f
test that get_apk_id throws exceptions (issuebot#60) 2022-10-11 16:36:11 +02:00
Hans-Christoph Steiner
828eb938c3
gradlew-fdroid: Gradle Android Plugin 7.3 needs Gradle 7.4 2022-10-11 16:36:09 +02:00
Hans-Christoph Steiner
02a91cba66
update: only show missing ipfs_cid warning once. 2022-10-11 16:36:08 +02:00
Hans-Christoph Steiner
29838a8bae gitlab-ci: update alpine to supported version 2022-10-11 16:27:05 +02:00
Hans-Christoph Steiner
766ce52ebe
Merge branch 'hgsvn' into 'master
* mergeme:
  buildserver: fix apksigner install
  Pre-install git-svn and mercurial

fdroid/fdroidserver!1206
2022-10-11 16:24:10 +02:00
Hans-Christoph Steiner
759fa3b40a
buildserver: fix apksigner install
Adding /bullseye-backports confuses things apparently.  Without it, apt
will look in bullseye-backports automatically, including for deps.  But it
will not look for deps in bullseye-backports if /bullseye-backports is used.

!1205
2022-10-11 16:23:45 +02:00
linsui
47cbc47346 Pre-install git-svn and mercurial 2022-10-11 13:31:51 +00:00
Jochen Sprickerhof
60be04336f Merge branch 'buildserver-needs-apksigner' into 'master'
buildserver: include apksigner for Binaries: verification

See merge request fdroid/fdroidserver!1205
2022-10-11 12:04:20 +00:00
Hans-Christoph Steiner
b58eaa224b buildserver: include apksigner for Binaries: verification
Verification of Binaries: happens in the buildserver VM first, so it needs
a matching version of apksigner as the rest of the process.  This fixes:
https://gitlab.com/fdroid/fdroidserver/-/jobs/3154772374
2022-10-11 12:03:55 +00:00
Hans-Christoph Steiner
d33907606e
gitlab-ci: install sdkmanager from bullseye-backports 2022-10-11 13:57:38 +02:00
Jochen Sprickerhof
c6f83a58f2 Merge branch 'mvn' into 'master'
remove MVN3

See merge request fdroid/fdroidserver!1203
2022-10-11 11:26:09 +00:00
linsui
e90f03a494 remove MVN3 2022-10-11 09:58:35 +00:00
Hans-Christoph Steiner
98437d88d0 Merge branch 'keep-fdroidserver-dependencies' into 'master'
buildserver: prevent fdroidserver deps from being purged in Docker

See merge request fdroid/fdroidserver!1204
2022-10-11 08:57:08 +00:00
Hans-Christoph Steiner
e192eb4a32
buildserver: prevent fdroidserver deps from being purged in Docker 2022-10-11 10:52:54 +02:00
Hans-Christoph Steiner
b4720d9201
gitlab-ci: fix reversed logic in docker push
I got it backwards in 66d8b783f0 from !1183
2022-10-11 09:53:42 +02:00
Hans-Christoph Steiner
b0124aca1a Merge branch 'upgrade_buildserver_vm' into 'master'
Upgrade Buildserver VM to latest Debian (Bullseye)

See merge request fdroid/fdroidserver!1012
2022-10-11 07:38:44 +00:00
Hans-Christoph Steiner
4e839ac63b switch to latest vagrant boxes 2022-10-10 21:22:59 +02:00
Hans-Christoph Steiner
a0ea27632e buildserver: use HTTPS for security.debian.org
It is now officially supported:
https://guardianproject.info/2021/12/08/debian-over-https/
2022-10-10 21:22:59 +02:00
Hans-Christoph Steiner
4eb189ad2e gitlab-ci: plugin_fetchsrclibs runs in same base OS as fdroiddata 2022-10-10 21:22:59 +02:00
Hans-Christoph Steiner
c6f5956537 install Vagrant insecure_private_key into buildserver box
Vagrant uses the "insecure private key" to establish the first SSH
connection to a new VM based on a clean public box.  In theory, the
`vagrant package` command should do that automatically.  This process
is still using custom code instead of `vagrant package`, hence this
script.

This public key can be generated on any Vagrant install using:
  ssh-keygen -y -f  ~/.vagrant.d/insecure_private_key

https://www.vagrantup.com/docs/vagrantfile/ssh_settings#config-ssh-private_key_path
fdroid-bootstrap-buildserver#12
!1012
!1099
2022-10-10 21:22:59 +02:00
Jochen Sprickerhof
046d3c8dcf Use ssh_config.d 2022-10-10 21:22:59 +02:00
Jochen Sprickerhof
c208582e75 Drop old java_paths 2022-10-10 21:22:59 +02:00
Jochen Sprickerhof
9ddf38b69a Drop vagrant ssh config
Not needed and breaks login with debian/bullseye64 image.
2022-10-10 21:22:59 +02:00
Hans-Christoph Steiner
dbaa3f6ec2 Stop installing ConstraintLayout
sdkmanager does not work anymore with Java 11 and these can be installed in
the app's build metadata.
2022-10-10 21:22:59 +02:00
Jochen Sprickerhof
f03e812a13 Drop obsolete apt-transport-https 2022-10-10 21:22:59 +02:00
Jochen Sprickerhof
d762f423ce Install patch and rsync (required by fdroidserver) 2022-10-10 21:22:59 +02:00
Jochen Sprickerhof
b4f8ab289d Use yaml.safe_* 2022-10-10 21:22:59 +02:00
Jochen Sprickerhof
cb2c3a34bb remove hack to disable GNOME.Accessibility for minimal deps
This is commented out by default on all OpenJDK packages since Java 8.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1012?diff_id=263085985#note_726457435

root@sid:/# grep Accessibility /etc/java-*-openjdk/accessibility.properties
/etc/java-11-openjdk/accessibility.properties:#assistive_technologies=org.GNOME.Accessibility.AtkWrapper
/etc/java-17-openjdk/accessibility.properties:#assistive_technologies=org.GNOME.Accessibility.AtkWrapper
/etc/java-18-openjdk/accessibility.properties:#assistive_technologies=org.GNOME.Accessibility.AtkWrapper
/etc/java-8-openjdk/accessibility.properties:assistive_technologies=org.GNOME.Accessibility.AtkWrapper
2022-10-10 21:22:59 +02:00
FestplattenSchnitzel
be5aefd3ee Install required packages for fdroidserver automatically 2022-10-10 21:22:59 +02:00
FestplattenSchnitzel
cc641b5470 Stop adding i386 architecture to dpkg 2022-10-10 21:22:59 +02:00
FestplattenSchnitzel
df46eb86c3 Upgrade Buildserver VM
Use Vagrant boxes built with cloud-team/debian-vagrant-images instead of fdroid/basebox,
Use Debian Bullseye (11) instead of Debian Stretch (9)
2022-10-10 21:22:59 +02:00
Hans-Christoph Steiner
7accb96b9e Merge branch 'unified-scanner-signatures' into 'master'
cached scanner signatures

Closes #1008

See merge request fdroid/fdroidserver!1198
2022-10-06 14:09:49 +00:00
Hans-Christoph Steiner
9ccf583061 Apply 3 suggestion(s) to 2 file(s) 2022-10-06 13:55:38 +00:00
Michael Pöhn
e967fc61cf scanner: add regression tests for signautre load logic 2022-10-06 14:50:30 +02:00
Michael Pöhn
d815a64fdb scanner: filter urlopen schemes, mute bandit 2022-10-06 12:09:07 +02:00
Michael Pöhn
b7233dfb2e ignore cache write test case on older python versions 2022-10-06 12:09:07 +02:00
Michael Pöhn
59b1899d79 scanner: switch form iso8601 to unix timestamp for python3.5 support 2022-10-06 12:09:07 +02:00
Michael Pöhn
9560ed955c avoid running into native-date object issue
Seem I ran into this issue: https://bugs.python.org/issue47228  This
change tries to fix it by using utcnow insteas of astimezone.
2022-10-06 12:09:07 +02:00
Michael Pöhn
7933623e93 fix pydocstyle lint errors 2022-10-06 12:09:07 +02:00
Michael Pöhn
036b788424 move suss defaults into scanner.py
As discussed with _hc, we're going to keep the default values for
SUSS inside the python code for now. To avoid compilcated packaging
issues. Once fdroidserver does not have to support python verison older
than 3.7 we can utilize to `importlib.resources` for shipping these
defaults as separate file.
2022-10-06 12:09:07 +02:00
Michael Pöhn
0921863fa6 scanner: update suss defaults after removal of allowlisted feature 2022-10-06 12:09:07 +02:00
Michael Pöhn
6899c22f48 scanner: remove allowlisted from scan_source 2022-10-06 12:09:06 +02:00
Michael Pöhn
a8bcaa3d70 scanner: implement caching rules for suss 2022-10-06 12:09:06 +02:00
Michael Pöhn
bfcc30b854 add --refresh to scanner 2022-10-06 12:09:06 +02:00
Michael Pöhn
4a38908bd7 make cachedir subdirectories pick their place correctly based on parent folder 2022-10-06 12:09:06 +02:00
Michael Pöhn
1e6694112a rename to suss 2022-10-06 12:09:06 +02:00
Michael Pöhn
dc1a2db3f4 scanner: use Path.resovle instead of undocumented absolute() 2022-10-06 12:09:06 +02:00
Michael Pöhn
c9b59b525d fix timestamp check; remove dead code 2022-10-06 12:09:05 +02:00
Michael Pöhn
c10633eac5 convert fdroid scanner --exodus to SignatureDataController 2022-10-06 12:08:26 +02:00
Michael Pöhn
d5ef1b2e95 add --clear-cache option to scanner 2022-10-06 12:08:26 +02:00
Michael Pöhn
e4b54fe4a7 move NON_FREE_GRADLE_LINES to signature definition files 2022-10-06 12:08:26 +02:00
Michael Pöhn
9c5b35742d use ScannerTool for basic cacheing and scanning 2022-10-06 12:08:26 +02:00
Michael Pöhn
f56b1f3012 basic downloading for scan_binary signatures 2022-10-06 12:08:23 +02:00
Jochen Sprickerhof
82355b8559 Merge branch 'linsui-master-patch-90027' into 'master'
fix typo

See merge request fdroid/fdroidserver!1201
2022-10-05 06:15:53 +00:00
linsui
5354661fb4 fix typo 2022-10-05 06:15:53 +00:00
Hans-Christoph Steiner
cfd426cc1f Merge branch 'scan_more_binary' into 'master'
Support more file types in get_embedded_classes

Closes #999

See merge request fdroid/fdroidserver!1123
2022-09-30 18:09:32 +00:00
Hans-Christoph Steiner
3de6063a01 scanner: open DEX/ZIP by file magic; throw errors on bad filenames 2022-09-30 17:56:15 +00:00
Hans-Christoph Steiner
aa190d532f scanner.TestCase: manually convert to black code format
I manually changed some code structures to give a decent code format.
2022-09-30 17:56:15 +00:00
Jochen Sprickerhof
4197455436 Support more file types in get_embedded_classes
Closes: #999
2022-09-30 17:56:15 +00:00
Hans-Christoph Steiner
6a4b7ba4c1 Merge branch 'pyproject.toml' into 'master'
Move lint tools configuration to pyproject.toml

See merge request fdroid/fdroidserver!1196
2022-09-30 17:55:42 +00:00
FestplattenSchnitzel
e4d16ec1e8 Move lint tools configuration to pyproject.toml
This commit removes the mypy CI job, since there are no or few type
hints in the codebase and it failed on unrelated changes in the past.
It might be reintroduced when type hints get added.
2022-09-30 17:53:31 +00:00
Hans-Christoph Steiner
42cb31039e Merge branch 'fix_status_deploy' into 'master'
Sync all status files

See merge request fdroid/fdroidserver!1199
2022-09-29 17:54:22 +00:00
Jochen Sprickerhof
96f8284a50
Sync all status files 2022-09-29 19:41:12 +02:00
Hans-Christoph Steiner
244273e58e Merge branch 'clojars' into 'master'
scanner: allow repo.clojars.org

See merge request fdroid/fdroidserver!1197
2022-09-26 18:58:28 +00:00
linsui
ec69be04ce scanner: allow repo.clojars.org 2022-09-26 18:58:15 +00:00
Hans-Christoph Steiner
bd6689a75d Merge branch 'editorconfig' into 'master'
Add .editorconfig

See merge request fdroid/fdroidserver!1194
2022-09-20 15:12:15 +00:00
FestplattenSchnitzel
ecc9ad0e8c Add .editorconfig
See https://editorconfig.org/
2022-09-20 14:08:04 +00:00
Hans-Christoph Steiner
e239a600a3 Merge branch 'fix_v4_signing' into 'master'
Work around old apksigner on f-droid.org publish server

See merge request fdroid/fdroidserver!1192
2022-09-20 13:58:42 +00:00
Jochen Sprickerhof
cf228d35a3 Work around old apksigner on f-droid.org publish server 2022-09-20 13:58:41 +00:00
Michael Pöhn
2b5ac31bf8 Merge branch 'test_getref' into 'master'
Add test for git getref

Closes #1040

See merge request fdroid/fdroidserver!1191
2022-09-15 11:48:00 +00:00
Jochen Sprickerhof
f96f247095
Add test for git getref 2022-09-15 13:32:11 +02:00
Michael Pöhn
603c8c5cd4 Merge branch 'fix_getref' into 'master'
Use old python-git exception API for getref

See merge request fdroid/fdroidserver!1190
2022-09-15 08:35:10 +00:00
Jochen Sprickerhof
0f48294a6e
Use old python-git exception API for getref
The is_valid_object method is not even in Debian bullseye.
2022-09-15 07:44:02 +02:00
Michael Pöhn
2aebc48a65 Merge branch 'linsui-master-patch-61703' into 'master'
scanner: add some rules

See merge request fdroid/fdroidserver!1150
2022-09-14 15:02:38 +00:00
linsui
ac96e43e13 scanner: add some rules 2022-09-14 15:02:37 +00:00
Jochen Sprickerhof
0a157d3f17 Merge branch 'fix_check_updates_expected' into 'master'
[lint] Fix comparisons in check_updates_expected

See merge request fdroid/fdroidserver!1188
2022-09-14 10:10:34 +00:00
FestplattenSchnitzel
580ce85412 [lint] Fix comparisons in check_updates_expected 2022-09-14 10:10:20 +00:00
Jochen Sprickerhof
7d94055830 Merge branch 'Adding-IPFS-CID-to_Index' into 'master'
Addition of IPFS CID onto Index-v2.json file

Closes #976

See merge request fdroid/fdroidserver!1154
2022-09-14 09:28:28 +00:00
pmmayero
0ad45a94a8 Addition of IPFS CIDv1 to Index
IPFS CIDv1 is only generated for APKs and "repo files"
2022-09-14 09:28:02 +00:00
Michael Pöhn
5e31f23a96 Merge branch 'fix_getref' into 'master'
git.getref: use python-git

See merge request fdroid/fdroidserver!1186
2022-09-14 09:25:28 +00:00
Jochen Sprickerhof
7b31535c25 git.getref: use python-git
Fixes a "warning: refname is ambiguous." problem:

$ git clone https://gitlab.com/joshua.tee/wx.git
$ cd wx
$ git rev-parse 55699
warning: refname '55699' is ambiguous.

8760bb0ce7 (note_1090707468)
2022-09-14 09:12:02 +00:00
Jochen Sprickerhof
7aa4b2678b Merge branch 'check_no_updates_expected' into 'master'
[lint] Complain if checking for updates makes no sense

See merge request fdroid/fdroidserver!1187
2022-09-12 13:51:44 +00:00
FestplattenSchnitzel
d32e53798d
[lint] Check if checking for updates makes no sense 2022-09-12 12:27:38 +02:00
Hans-Christoph Steiner
a3b7ba4eed Merge branch 'dump_internal_metadata_format' into 'master'
Cleanup tests/dump_internal_metadata_format.py

See merge request fdroid/fdroidserver!1184
2022-09-08 19:54:20 +00:00
Jochen Sprickerhof
483d6da51c
Cleanup tests/dump_internal_metadata_format.py
- Update usage documentation.
- Use argparse.
- Simplify config handling (similar to readmeta.py).
- Drop code for fdroidserver before 0.7.0.
- Reformat with black.
2022-09-08 21:40:26 +02:00
Jochen Sprickerhof
8eea3a6822 Merge branch 'three-commits-for-things' into 'master'
four random fixes

See merge request fdroid/fdroidserver!1183
2022-09-08 17:19:16 +00:00
Hans-Christoph Steiner
66d8b783f0 gitlab-ci: only display message if not running docker push 2022-09-08 18:55:32 +02:00
Hans-Christoph Steiner
53a507d7c4 buildserver: default to HTTPS for apt sources
Debian Docker images will soon default to HTTPS for apt sources, so force
it now:
https://github.com/debuerreotype/docker-debian-artifacts/issues/15
2022-09-08 18:55:17 +02:00
Hans-Christoph Steiner
b854f3bab7 update: fully isolate testInsertStoreMetadata test
The test was failing due to something on my local filesystem, this
runs the test in a new dir every time.
2022-09-08 18:45:30 +02:00
Hans-Christoph Steiner
e79585b0c0 index: remove unused, confusing args to file_entry() 2022-09-08 18:13:26 +02:00
Hans-Christoph Steiner
21c4c118a1 Merge branch 'ci_bump_release' into 'master'
CI: Bump RELEASE_COMMIT_ID for new release

See merge request fdroid/fdroidserver!1181
2022-09-08 16:13:07 +00:00
Jochen Sprickerhof
da9a12bf5a
CI: Bump RELEASE_COMMIT_ID for new release
Drop old sed hacks.
2022-09-08 17:58:59 +02:00
Jochen Sprickerhof
707753a289 Merge branch 'opt-in-docker-push' into 'master'
gitlab-ci: make push in "docker" job opt-in

See merge request fdroid/fdroidserver!1182
2022-09-08 15:58:39 +00:00
Hans-Christoph Steiner
2d5d98fe32 gitlab-ci: stop tags/branches overwriting buildserver docker image
https://gitlab.com/fdroid/fdroidserver/-/jobs/2988110595
https://gitlab.com/eighthave/fdroidserver/-/jobs/2997738047
2022-09-08 17:51:23 +02:00
Hans-Christoph Steiner
dbe4af7951 gitlab-ci: make push in "docker" job opt-in
gitlab.com has added pretty small quotas to free tier accounts, and this
job pushes a docker image that is nearly 1GB.  And those rarely get used,
so this makes it opt in via a variable that can be set when manually
running a job, or globally in the "CI/CD Variables" Settings.
2022-09-08 11:28:59 +02:00
Hans-Christoph Steiner
4fc9c309c1
make -C locale/ update 2022-09-06 22:28:02 +02:00
Hans-Christoph Steiner
54e84d8770 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1180
2022-09-06 14:53:31 +00:00
Hans-Christoph Steiner
78c552aa0a Translated using Weblate: Chinese (Traditional) (zh_Hant) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 76.3% (467 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
2022-09-06 16:38:23 +02:00
Hans-Christoph Steiner
56e5846dd6 Translated using Weblate: Tibetan (bo) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 61.7% (378 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/bo/
2022-09-06 16:38:10 +02:00
Yang Yulin
8d73bb45ea Translated using Weblate: Chinese (Simplified) (zh_Hans) by Yang Yulin <yylteam@hotmail.com>
Currently translated at 70.4% (431 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
linsui
25a5754c3c Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>
Currently translated at 70.4% (431 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
Yang Yulin
c94a9894cc Translated using Weblate: Chinese (Simplified) (zh_Hans) by Yang Yulin <yylteam@icloud.com>
Currently translated at 67.3% (412 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
Yang Yulin
5497f6e4dd Translated using Weblate: Chinese (Simplified) (zh_Hans) by Yang Yulin <yylteam@icloud.com>
Currently translated at 63.7% (390 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
yangyangdaji
51c730f8e5 Translated using Weblate: Chinese (Simplified) (zh_Hans) by yangyangdaji <1504305527@qq.com>
Currently translated at 61.4% (376 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
Yang Yulin
1fe5d140d3 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Yang Yulin <yylteam@icloud.com>
Currently translated at 61.1% (374 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
JY3
776019964b Translated using Weblate: Chinese (Simplified) (zh_Hans) by JY3 <GeeyunJY3@gmail.com>
Currently translated at 60.6% (371 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
Yang Yulin
977a2661a9 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Yang Yulin <yylteam@icloud.com>
Currently translated at 60.6% (371 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
YangYulin
9816b42373 Translated using Weblate: Chinese (Simplified) (zh_Hans) by YangYulin <yylteam@icloud.com>
Currently translated at 58.0% (355 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
YangYulin
d84b2da77c Translated using Weblate: Chinese (Simplified) (zh_Hans) by YangYulin <yylteam@icloud.com>
Currently translated at 56.3% (345 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
YangYulin
db5fa45728 Translated using Weblate: Chinese (Simplified) (zh_Hans) by YangYulin <yylteam@icloud.com>
Currently translated at 54.7% (335 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
linsui
cf59b2a6d6 Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>
Currently translated at 54.4% (333 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
linsui
831918d8bb Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>
Currently translated at 53.5% (328 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
Eric
558d94c87b Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <alchemillatruth@purelymail.com>
Currently translated at 48.2% (295 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
Trey Yang
41265994e4 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Trey Yang <stevsfy@gmail.com>
Currently translated at 48.0% (294 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
JY3
6f742fa5cc Translated using Weblate: Chinese (Simplified) (zh_Hans) by JY3 <GeeyunJY3@gmail.com>
Currently translated at 44.4% (272 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-09-06 16:37:42 +02:00
shenzhui007
96935e26d5 Translated using Weblate: Chinese (Simplified) (zh_Hans) by shenzhui007 <12231252@bjtu.edu.cn>
Currently translated at 44.4% (272 of 612 strings)

Co-authored-by: shenzhui007 <12231252@bjtu.edu.cn>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-09-06 16:37:42 +02:00
JY3
9557a0ba15 Translated using Weblate: Chinese (Simplified) (zh_Hans) by JY3 <GeeyunJY3@gmail.com>
Currently translated at 44.1% (270 of 612 strings)

Co-authored-by: JY3 <GeeyunJY3@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-09-06 16:37:42 +02:00
Simona Iacob
34d97a6dab Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Simona Iacob <s@zp1.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2022-09-06 16:36:03 +02:00
Hans-Christoph Steiner
2beec6b524 Translated using Weblate: Portuguese (Portugal) (pt_PT) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 94.2% (577 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
2022-09-06 16:35:35 +02:00
SC
3d1b18d65b Translated using Weblate: Portuguese (pt) by SC <lalocas@protonmail.com>
Currently translated at 100.0% (612 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
2022-09-06 16:35:35 +02:00
Flavio F. M
498255b79d Translated using Weblate: Portuguese (Brazil) (pt_BR) by Flavio F. M. <flavius_androiduser@protonmail.com>
Currently translated at 100.0% (612 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
2022-09-06 16:35:35 +02:00
ssantos
480feed204 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 98.3% (602 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
2022-09-06 16:35:35 +02:00
SC
4c9a58fdac Translated using Weblate: Portuguese (pt) by SC <lalocas@protonmail.com>
Currently translated at 98.2% (601 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
2022-09-06 16:35:35 +02:00
ssantos
9c1975d765 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 98.2% (601 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
2022-09-06 16:35:35 +02:00
Flavio F. M
af98452e69 Translated using Weblate: Portuguese (Brazil) (pt_BR) by Flavio F. M. <flavius_androiduser@protonmail.com>
Currently translated at 97.3% (596 of 612 strings)

Translated using Weblate: Portuguese (Brazil) (pt_BR) by Flavio F. M. <flavius_androiduser@protonmail.com>

Currently translated at 96.5% (591 of 612 strings)

Translated using Weblate: Portuguese (Brazil) (pt_BR) by Flavio F. M. <flavius_androiduser@protonmail.com>

Currently translated at 94.4% (578 of 612 strings)

Co-authored-by: Flavio F. M <flavius_androiduser@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2022-09-06 16:35:35 +02:00
Hans-Christoph Steiner
4ec45c4f0f Translated using Weblate: Norwegian Bokmål (nb_NO) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 59.9% (367 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/
2022-09-06 16:34:37 +02:00
Hans-Christoph Steiner
b85caf26f2 Translated using Weblate: Korean (ko) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 36.6% (224 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/
2022-09-06 16:34:15 +02:00
Antonello Pirina
2972605314 Translated using Weblate: Italian (it) by Antonello Pirina <fardeledge@tutanota.com>
Currently translated at 98.0% (600 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2022-09-06 16:33:54 +02:00
random r
e00538a3fa Translated using Weblate: Italian (it) by random r <epsilin@yopmail.com>
Currently translated at 97.7% (598 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2022-09-06 16:33:54 +02:00
random r
5e93bfd14b Translated using Weblate: Italian (it) by random r <epsilin@yopmail.com>
Currently translated at 97.3% (596 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2022-09-06 16:33:54 +02:00
Frankie McEyes
9d4caeefaf Translated using Weblate: Italian (it) by Frankie McEyes <mceyes@protonmail.com>
Currently translated at 95.9% (587 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
2022-09-06 16:33:54 +02:00
Hans-Christoph Steiner
e94a4e7477 Translated using Weblate: Hungarian (hu) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 63.2% (387 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/hu/
2022-09-06 16:33:35 +02:00
Ldm Public
e8e6227752 Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
Translator
9dd7064eaa Translated using Weblate: French (fr) by Translator <kvb@tuta.io>
Currently translated at 100.0% (612 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
Ldm Public
87cbd7c19c Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 100.0% (612 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
Ldm Public
92baf98724 Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 99.1% (607 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
booteille
79547d5131 Translated using Weblate: French (fr) by booteille <booteille@protonmail.com>
Currently translated at 99.1% (607 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
Translator
0b2aa3eb69 Translated using Weblate: French (fr) by Translator <kvb@tuta.io>
Currently translated at 99.1% (607 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
Translator
8287e260ee Translated using Weblate: French (fr) by Translator <kvb@tuta.io>
Currently translated at 97.7% (598 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
translator
020bf8c7c6 Translated using Weblate: French (fr) by translator <kvb@tuta.io>
Currently translated at 97.3% (596 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
Julien Maulny
801b5b4512 Translated using Weblate: French (fr) by Julien Maulny <julien.maulny@protonmail.com>
Currently translated at 96.5% (591 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
translator
8ddc1a52ae Translated using Weblate: French (fr) by translator <kvb@tuta.io>
Currently translated at 95.2% (583 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
2022-09-06 16:33:16 +02:00
ButterflyOfFire
ae81c369d4 Translated using Weblate: French (fr) by ButterflyOfFire <ButterflyOfFire@protonmail.com>
Currently translated at 94.6% (579 of 612 strings)

Co-authored-by: ButterflyOfFire <ButterflyOfFire@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-09-06 16:33:16 +02:00
Hans-Christoph Steiner
f883c1d8e0 Translated using Weblate: Spanish (es) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 99.1% (607 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2022-09-06 16:32:44 +02:00
Iago
ad4cb37bdb Translated using Weblate: Spanish (es) by Iago <translate@delthia.com>
Currently translated at 99.1% (607 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2022-09-06 16:32:44 +02:00
Jaime Marquínez Ferrándiz
5a77a08a0a Translated using Weblate: Spanish (es) by Jaime Marquínez Ferrándiz <weblate@jregistros.fastmail.net>
Currently translated at 99.1% (607 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2022-09-06 16:32:44 +02:00
Iago
dacffbad00 Translated using Weblate: Spanish (es) by Iago <translate@delthia.com>
Currently translated at 98.3% (602 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2022-09-06 16:32:44 +02:00
Iago
f00fa6a36a Translated using Weblate: Spanish (es) by Iago <iagrivmoa@gmail.com>
Currently translated at 96.5% (591 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2022-09-06 16:32:44 +02:00
Iago
fc4c87e4d6 Translated using Weblate: Spanish (es) by Iago <iagrivmoa@gmail.com>
Currently translated at 95.0% (582 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
2022-09-06 16:32:44 +02:00
nautilusx
460d50fc3e Translated using Weblate: German (de) by nautilusx <translate@disroot.org>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: nautilusx <translate@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2022-09-06 16:09:57 +02:00
ssantos
4d77d170f1 Translated using Weblate: German (de) by ssantos <ssantos@web.de>
Currently translated at 99.5% (609 of 612 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2022-09-06 16:09:57 +02:00
C. Rüdinger
df54a01e17 Translated using Weblate: German (de) by C. Rüdinger <Mail-an-CR@web.de>
Currently translated at 98.6% (604 of 612 strings)

Co-authored-by: C. Rüdinger <Mail-an-CR@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2022-09-06 16:09:57 +02:00
Hans-Christoph Steiner
3f6a780723 enable Czech as official language 2022-09-06 16:07:59 +02:00
Fjuro
7a243c1770 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 100.0% (612 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
d8a1e9fdc0 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 83.6% (512 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
0446dd8f11 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 66.0% (404 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
a9ea04380a Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 61.9% (379 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
718e405627 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 54.9% (336 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
b419ca882f Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 54.7% (335 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
17059ae78a Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 41.1% (252 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Filip Klopec
2e8c04115b Translated using Weblate: Czech (cs) by Filip Klopec <filipklopec@gmail.com>
Currently translated at 37.4% (229 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
0ddb947db2 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 36.9% (226 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
09fcd99d08 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 36.9% (226 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
810bf46534 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 34.6% (212 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
3a8248c8b1 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 16.3% (100 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Fjuro
5c7ecd0520 Translated using Weblate: Czech (cs) by Fjuro <fjuro@seznam.cz>
Currently translated at 15.0% (92 of 612 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-09-06 16:07:40 +02:00
Hans-Christoph Steiner
8ef43dee0b Deleted translation using Weblate: English (Middle) (enm)
Deleted translation using Weblate: English (Old) (ang)

Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
2022-09-06 16:06:59 +02:00
Hans-Christoph Steiner
bb7f80b1e1 sort MANIFEST.in 2022-09-06 16:05:48 +02:00
Hans-Christoph Steiner
57c8dddead Merge branch 'timestamp' into 'master'
Fix added type

Closes #1012

See merge request fdroid/fdroidserver!1152
2022-09-06 08:38:02 +00:00
Jochen Sprickerhof
8f24cae3be Fix added type
The added time should be a datetime, not a time.struct_time.

Regression of 290b9050
Closes: #1012
2022-09-05 20:36:41 +00:00
Hans-Christoph Steiner
6394ededa1 Merge branch 'fix_pylint' into 'master'
Fix pylint

See merge request fdroid/fdroidserver!1179
2022-09-05 17:54:38 +00:00
Jochen Sprickerhof
5b79e7aea8
Fix trailing whitespace 2022-09-05 17:50:13 +02:00
Jochen Sprickerhof
c89a9f0e8b
Add timeout argument to requests.(get,post) 2022-09-05 17:50:10 +02:00
Jochen Sprickerhof
cf0100cf11
Merge comparisons with 'in' 2022-09-05 17:14:51 +02:00
Jochen Sprickerhof
f4739ef3c0 Merge branch 'nightly-update-raw-urls' into 'master'
nightly: update Raw URLs to fix breakage and avoid redirects

See merge request fdroid/fdroidserver!1163
2022-08-26 07:18:19 +00:00
Hans-Christoph Steiner
c6cf0468ed nightly: update Raw URLs to fix breakage and avoid redirects 2022-08-26 07:18:19 +00:00
Hans-Christoph Steiner
b352e9a9cc
gitlab-ci: fix Windows job after import rename !1142 2022-08-25 11:10:45 +02:00
Hans-Christoph Steiner
271e0ab232 Merge branch 'status_at_end' into 'master'
Also write status.json when command finished

See merge request fdroid/fdroidserver!1172
2022-08-25 08:54:07 +00:00
Jochen Sprickerhof
153f136e79 Also write status.json when command finished 2022-08-25 08:53:47 +00:00
Hans-Christoph Steiner
10528b832a Merge branch 'remove_import_hack' into 'master'
[import] Rename to import_subcommand internally

See merge request fdroid/fdroidserver!1142
2022-08-24 20:35:42 +00:00
FestplattenSchnitzel
7c89e923f6 Move methods specific to import to it's module 2022-08-24 22:21:37 +02:00
FestplattenSchnitzel
7b7f863c65 [import] Rename to import_subcommand internally
This enables normal import of the module without the need for
workarounds.
2022-08-24 22:21:35 +02:00
Hans-Christoph Steiner
2eb56ae8d4 Merge branch 'linsui-master-patch-66779' into 'master'
scanner: also scan classpath

See merge request fdroid/fdroidserver!1148
2022-08-24 19:49:43 +00:00
linsui
832ed18fca scanner: also scan classpath 2022-08-24 21:34:55 +02:00
Hans-Christoph Steiner
1a71f352cf Merge branch 'sinasdk' into 'master'
scanner: add sinaweibosdk, umeng and exoplayer cast extension

See merge request fdroid/fdroidserver!1147
2022-08-24 19:15:05 +00:00
linsui
b2eb189a3b Apply 1 suggestion(s) to 1 file(s) 2022-08-24 19:14:45 +00:00
linsui
82525dbc4e Apply 1 suggestion(s) to 1 file(s) 2022-08-24 19:14:45 +00:00
linsui
ae79e8b967 scanner: add sinaweibosdk 2022-08-24 19:14:45 +00:00
Hans-Christoph Steiner
114fee3bfd Merge branch 'fix-ci-plugin_fetchsrclibs' into 'master'
gitlab-ci: paramiko from Debian to avoid crypto libs from source

See merge request fdroid/fdroidserver!1175
2022-08-24 19:14:39 +00:00
Hans-Christoph Steiner
22ce23ebe0 gitlab-ci: paramiko from Debian to avoid crypto libs from source
Before it was cryptography, now bcrypt requires a Rust compiler:
https://gitlab.com/fdroid/fdroidserver/-/jobs/2929483724
2022-08-24 19:53:54 +02:00
Hans-Christoph Steiner
30284ed31c Merge branch 'fix-verify-reporting' into 'master'
verify: fix generating JSON reports, as used in verification.f-droid.org

See merge request fdroid/fdroidserver!1168
2022-08-24 17:31:07 +00:00
Hans-Christoph Steiner
ed3622ffff
convert verify.py and verify.TestCase to black code format 2022-08-24 19:16:36 +02:00
Hans-Christoph Steiner
9e58fc8cda
verify: normalize dicts via JSON for reliable comparisons
13016c5d63 in !602 used a set to prevent
duplicate entries, but that worked poorly because it required lots of
data wrapping.  Instead, just normalize to JSON, then equality is easy.
2022-08-24 19:16:33 +02:00
Jochen Sprickerhof
a1286209ad Merge branch 'sortxml' into 'master'
Sort the xml file pathes for consistent result

See merge request fdroid/fdroidserver!1174
2022-08-24 13:51:47 +00:00
linsui
43ea0c35d8 Sort the xml file pathes for consistent result 2022-08-24 13:51:31 +00:00
Hans-Christoph Steiner
dbf667d1f5 Merge branch 'ndk-release-checksums.py' into 'master'
update NDK

See merge request fdroid/fdroidserver!1173
2022-08-24 11:21:11 +00:00
fdroid-bot
53c6dffbce Android NDK None (None) 2022-08-24 11:07:33 +00:00
Jochen Sprickerhof
dea188a790 Merge branch 'checku' into 'master'
Fix tag match

See merge request fdroid/fdroidserver!1072
2022-08-24 11:06:54 +00:00
linsui
516a0c2ce8 Fix tag match with GitPython 2022-08-24 10:50:09 +00:00
Jochen Sprickerhof
737ad53d3c Merge branch 'nopath' into 'master'
Show all unused scanner path at once

See merge request fdroid/fdroidserver!1171
2022-08-23 13:16:15 +00:00
linsui
cf7eb913d9 Show all unused scanner path at once 2022-08-19 18:01:31 +08:00
Jochen Sprickerhof
abd9faf275 Merge branch 'fix_var' into 'master'
Fix variable in exception

See merge request fdroid/fdroidserver!1170
2022-08-17 10:46:41 +00:00
Jochen Sprickerhof
6ce271ac15
Fix variable in exception 2022-08-17 12:33:02 +02:00
Jochen Sprickerhof
f830390873 Merge branch 'stop-checking-build-tools-existence' into 'master'
stop checking existence for build-tools, platform-tools, tools

See merge request fdroid/fdroidserver!1165
2022-08-17 07:59:37 +00:00
proletarius101
8267fb2caf stop checking existence for build-tools, platform-tools, tools 2022-08-17 07:59:36 +00:00
Hans-Christoph Steiner
e7a7f12cae Merge branch 'ktsmaven' into 'master'
scanner: fix maven url check for kts files

See merge request fdroid/fdroidserver!1162
2022-08-08 16:06:54 +00:00
linsui
f99dbec012 scanner: fix maven url check for kts files 2022-08-08 15:52:47 +00:00
Hans-Christoph Steiner
07713af425 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.5.1

See merge request fdroid/fdroidserver!1166
2022-08-08 15:51:16 +00:00
fdroid-bot
e207f45cb6 gradle v7.5.1 2022-08-08 15:37:07 +00:00
Hans-Christoph Steiner
353999146c Merge branch 'licaon-kter-master-patch-51501' into 'master'
Update approved official SPDX license tags

See merge request fdroid/fdroidserver!1164
2022-08-08 15:36:24 +00:00
Licaon_Kter
543c9fc77f Update approved official SPDX license tags 2022-08-04 10:45:41 +00:00
Jochen Sprickerhof
e7e8ad163b Merge branch 'flake8_E275' into 'master'
Fix flake8 E275 missing whitespace after keyword

See merge request fdroid/fdroidserver!1161
2022-07-31 08:02:05 +00:00
Jochen Sprickerhof
eb79522a36 Fix flake8 E275 missing whitespace after keyword 2022-07-31 09:48:14 +02:00
Jochen Sprickerhof
42ef7c3406 Merge branch 'defused_exception' into 'master'
Catch DefusedXmlException (as ValueError)

See merge request fdroid/fdroidserver!1157
2022-07-31 06:53:43 +00:00
Jochen Sprickerhof
7822db2881 Catch DefusedXmlException (as ValueError)
defusedxml can't handle the nbsp in the strings.xml (etree can).
2022-07-25 09:30:25 +02:00
Jochen Sprickerhof
7e1d974351 Reduce try/except block 2022-07-25 08:51:47 +02:00
Michael Pöhn
1151ba298f Merge branch 'exodus_scanner_logging' into 'master'
scan_binary: Log matched class

See merge request fdroid/fdroidserver!1156
2022-07-19 17:12:58 +00:00
Jochen Sprickerhof
f8452c4f0c scan_binary: Log matched class 2022-07-18 15:12:43 +02:00
Michael Pöhn
ffdd038cfa Merge branch 'finish-exodus-scanner' into 'master'
Add tests for fdroid scanner code

Closes #806, #1008, and #566

See merge request fdroid/fdroidserver!1155
2022-07-17 14:07:44 +00:00
Michael Pöhn
ab579be6b5 add some basic tests for scanner.main 2022-07-17 15:52:52 +02:00
Michael Pöhn
42d9ac446c get tests working on ci 2022-07-17 15:50:07 +02:00
Michael Pöhn
66adf4c508 add .ropeproject/ to .gitignore 2022-07-17 15:50:07 +02:00
Michael Pöhn
1c2b084410 🔧 improve scanner.scan_apk tests
Refactor test function it a TestCase and split into separate test cases.
Fix and improve tests for scanning apks with embedded apks.
2022-07-17 15:50:07 +02:00
Michael Pöhn
07a366a4d6 add tests for scanner.load_exodus_trackers_signatures 2022-07-17 15:50:07 +02:00
Michael Pöhn
544772d3ab add missing "or" to scanner cli synopsis 2022-07-17 15:50:07 +02:00
Michael Pöhn
a1677b5cb0 add test case for _exodus_compile_signatures 2022-07-17 15:50:07 +02:00
Michael Pöhn
94c9f0bef9 Merge branch 'exodus_scanner' into 'master'
Integrate Exodus

Closes #806, #1008, and #566

See merge request fdroid/fdroidserver!1137
2022-07-17 12:24:46 +00:00
Jochen Sprickerhof
3bd09ef7f4 Integrate Exodus (Closes: #566, #1008)
Code taken from:

https://github.com/Exodus-Privacy/exodus-core/blob/v1/exodus_core/analysis/static_analysis.py
2022-07-17 12:09:03 +00:00
Jochen Sprickerhof
ea9299f216 Use binary scanner with fdroid scanner path/to.apk
Closes: #806
2022-07-17 12:09:03 +00:00
Hans-Christoph Steiner
dc723e7108 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.5

See merge request fdroid/fdroidserver!1153
2022-07-14 23:26:54 +00:00
fdroid-bot
848e29294c gradle v7.5 2022-07-14 23:10:37 +00:00
Hans-Christoph Steiner
3b1ab74354
gitlab-ci: 'Safety' now needs git to run
Unhandled exception happened: [Errno 2] No such file or directory: 'git'
https://gitlab.com/fdroid/fdroidserver/-/jobs/2724632572
2022-07-14 16:09:28 -07:00
Hans-Christoph Steiner
33f3b5d7a4 Merge branch 'linsui-master-patch-07322' into 'master'
NDK r25

See merge request fdroid/fdroidserver!1151
2022-07-14 21:54:20 +00:00
linsui
534c170615 NDK r25 2022-07-14 06:35:55 +00:00
Hans-Christoph Steiner
15a562e8b9 Merge branch 'ndk' into 'master'
Update preinstalled NDK to r23c

See merge request fdroid/fdroidserver!1145
2022-06-14 11:03:43 +00:00
linsui
5472cf88b8 Update preinstalled NDK to r23c 2022-06-14 11:03:42 +00:00
Jochen Sprickerhof
6f8afd340d Merge branch 'fix-ci-post-1134' into 'master'
fix CI jobs post !1134

See merge request fdroid/fdroidserver!1144
2022-06-10 11:01:45 +00:00
Hans-Christoph Steiner
e2d9dedbb1 build: add test to ensure the flags are passed to the buildserver
!1141
2022-06-08 21:15:51 +02:00
Hans-Christoph Steiner
2bf6848391 test_find_apksigner_system_package_android_home if build_tools is new enough 2022-06-08 20:39:44 +02:00
Hans-Christoph Steiner
f04af445dd gitlab-ci: upgrade 'servergitmirrors' job to Debian/bullseye-backports
apksigner is now a requirement !1134
2022-06-08 20:39:44 +02:00
Hans-Christoph Steiner
09e2c37404 gitlab-ci: port fedora job to fdroid/sdkmanager and Java 17
This is also needed to support _apksigner_ as in !1134
2022-06-08 19:37:29 +02:00
Hans-Christoph Steiner
39c1b11a14 Merge branch 'apksigner-entry-jar' into 'master'
use apksigner to sign index-v2 with modern, supported algorithms

Closes #1005

See merge request fdroid/fdroidserver!1134
2022-06-08 13:41:42 +00:00
Hans-Christoph Steiner
fe22958476
run-tests: skip tests that require apksigner when running on Java8
The buildserver VM has not been upgraded yet to bullseye, so it is still on
Debian/stretch.  The buildserver VM does not need to run `fdroid update`,
`fdroid signindex`, etc. so this new apksigner requirement should not
affect app builds even though they are stuck on Debian/stretch.
2022-06-07 16:56:25 +02:00
Hans-Christoph Steiner
3182b77d18
use apksigner to sign index-v2 with modern, supported algorithms
The current signing method uses apksigner to sign the JAR so that it
will automatically select algorithms that are compatible with Android
SDK 23, which added the most recent algorithms:
https://developer.android.com/reference/java/security/Signature

This signing method uses then inherits the default signing algothim
settings, since Java and Android both maintain those.  That helps
avoid a repeat of being stuck on an old signing algorithm.  That means
specifically that this call to apksigner does not specify any of the
algorithms.

The old indexes must be signed by SHA1withRSA otherwise they will no
longer be compatible with old Androids.

apksigner 30.0.0+ is available in Debian/bullseye, Debian/buster-backports,
Ubuntu 21.10, and Ubuntu 20.04 from the fdroid PPA.  Here's a quick way to
test:

for f in `ls -1 /opt/android-sdk/build-tools/*/apksigner | sort ` /usr/bin/apksigner; do printf "$f : "; $f sign --v4-signing-enabled false; done

closes #1005
2022-06-07 16:56:23 +02:00
Hans-Christoph Steiner
07a6ad6c1e Merge branch 'archive_sigs' into 'master'
Archive _src.tar.gz.asc not .log.gz.asc

See merge request fdroid/fdroidserver!1143
2022-06-07 11:37:54 +00:00
Jochen Sprickerhof
e6c875b77e Archive _src.tar.gz.asc not .log.gz.asc 2022-06-07 11:37:29 +00:00
Hans-Christoph Steiner
759fafd3ff Merge branch 'fix_nosign' into 'master'
Fix --nosign semantics

See merge request fdroid/fdroidserver!1125
2022-06-07 11:36:23 +00:00
Hans-Christoph Steiner
7544761e86
index: add test for --nosign config and file generation 2022-06-07 13:22:06 +02:00
Jochen Sprickerhof
9933f54093 Fix --nosign semantics
This reverts parts of 197ca7e36 as it never triggered the
FDroidException as 'keystore' not in common.config is always False.
2022-06-07 13:22:02 +02:00
Hans-Christoph Steiner
c3243c2cdf Merge branch 'index-v2' into 'master'
Updates for index-v2

See merge request fdroid/fdroidserver!1140
2022-06-07 10:52:12 +00:00
Jochen Sprickerhof
1073dd57f7 Make webBaseUrl configurable 2022-06-04 11:56:04 +02:00
Jochen Sprickerhof
72e3d07acb Simplify primary mirror logic
Assume repo_url/archive_url to be valid URL and mark it as a primary
mirror.
2022-06-04 11:56:04 +02:00
Hans-Christoph Steiner
dc971b39ee Merge branch 'scan_binary_server' into 'master'
Pass --scan-binary to build server

See merge request fdroid/fdroidserver!1141
2022-06-03 14:39:13 +00:00
Jochen Sprickerhof
edc9390628 Pass --scan-binary to build server 2022-06-03 14:27:58 +00:00
Hans-Christoph Steiner
0d1df0564f Merge branch 'archive_sigs' into 'master'
Archive .idsig and .log.gz.asc files as well

See merge request fdroid/fdroidserver!1138
2022-06-03 11:06:44 +00:00
Jochen Sprickerhof
8a2f013508 Archive .idsig and .log.gz.asc files as well 2022-06-03 10:56:22 +00:00
Hans-Christoph Steiner
94faece5ba Merge branch 'fix_pylint' into 'master'
explicitly re-raising exceptions

See merge request fdroid/fdroidserver!1139
2022-06-03 10:53:33 +00:00
Jochen Sprickerhof
4ce79a7eaa explicitly re-raising exceptions
To fix pylint.
2022-06-01 22:52:22 +02:00
Jochen Sprickerhof
2d0645c1c4 Merge branch 'get_apk_id_api_call' into 'master'
allow common.get_apk_id() to be used in the API

See merge request fdroid/fdroidserver!1118
2022-05-31 09:43:51 +00:00
Hans-Christoph Steiner
c6dcc82ca4 allow common.get_apk_id() to be used in the API
If a project uses fdroidserver as a library, then just calls
common.get_apk_id(), it will now work.  Before, that project would have had
to include something like `common.config = {}` to avoid a stacktrace.
2022-05-26 22:18:21 +02:00
Hans-Christoph Steiner
9605d4ecad Merge branch 'fix_issue_1006' into 'master'
[import] Fix crash when no Gradle subdir is found

Closes #1006

See merge request fdroid/fdroidserver!1136
2022-05-26 18:45:54 +00:00
FestplattenSchnitzel
5951a6c2b1 [import] Fix crash when no Gradle subdir is found 2022-05-26 17:59:41 +00:00
Hans-Christoph Steiner
fa14a0005d Merge branch 'ndk-release-checksums.py' into 'master'
update NDK

See merge request fdroid/fdroidserver!1135
2022-05-26 15:11:48 +00:00
fdroid-bot
762c945c42 Android NDK None (None) 2022-05-26 15:10:14 +00:00
Hans-Christoph Steiner
f83003eecf Merge branch 'agp' into 'master'
AGP 7.2.0 requires gradle 7.3.3

See merge request fdroid/fdroidserver!1131
2022-05-26 15:09:03 +00:00
linsui
b75a34241f Apply 2 suggestion(s) to 1 file(s) 2022-05-26 15:08:33 +00:00
linsui
2c1659935a AGP 7.2.0 requires gradle 7.3.3 2022-05-26 15:08:33 +00:00
Hans-Christoph Steiner
bc81237d0c Merge branch 'smartcardoptions-parsing' into 'master'
Fix parsing of smartcardoptions config

See merge request fdroid/fdroidserver!1106
2022-05-26 15:06:01 +00:00
Hans-Christoph Steiner
2639909f90 add test cases for parsing smartcardoptions config field 2022-05-26 16:49:43 +02:00
Danilo Bargen
a4d0698628 Fix parsing of smartcardoptions config
With the previous code, a trailing newline would result in an empty
space being part of the list. When this is passed to keytool, it fails
with "Illegal option: ".

Instead of doing overly complicated regex based string substitution
followed by parametrized splitting, we can simply use `.split()`
without any parameters, and Python will automatically strip any
whitespace.
2022-05-26 16:47:33 +02:00
Jochen Sprickerhof
05e6c293c0 Merge branch 'v2-btlog-sign' into 'master'
update signing and btlog for index-v2

Closes #1005

See merge request fdroid/fdroidserver!1133
2022-05-24 20:28:25 +00:00
Hans-Christoph Steiner
cbd4828561 include index-v2 in signindex tests 2022-05-24 11:35:46 +02:00
Hans-Christoph Steiner
5448fa2a2d
update: hide confusing androguard warning that is irrelevant here
This is related to androguard features that fdroidserver does not use:
WARNING: Requested API level 31 is larger than maximum we have, returning API level 28 instead.
2022-05-23 23:17:42 +02:00
Hans-Christoph Steiner
4ce3da476d
btlog: run black to format code 2022-05-23 23:17:40 +02:00
Hans-Christoph Steiner
7be0ec3572
btlog: include index-v2.json entry.json and entry.jar 2022-05-23 23:17:37 +02:00
Hans-Christoph Steiner
dc3175cc06 Merge branch 'deploy-index-v2' into 'master'
deploy: handle index-v2 files on two pass sync methods

See merge request fdroid/fdroidserver!1132
2022-05-23 13:51:11 +00:00
Hans-Christoph Steiner
2448f070e9 fix tests and docstring error 2022-05-23 15:34:30 +02:00
Hans-Christoph Steiner
293975d081
refactor comment into docstring for update_serverwebroot 2022-05-23 14:41:37 +02:00
Hans-Christoph Steiner
053a64718a
deploy: handle index-v2 files on two pass sync methods
When using rsync or s3cmd, the upload is done in multiple passes. This
reduces the chance of interfering with an existing client-server
interaction.

- rsync: In the first pass, upload without the index files and delay
  the deletion as much as possible.  That keeps the repo functional
  while this update is running.  Then second pass uploads the index
  files.

- s3cmd: In the first pass, only new files are uploaded.  In the
  second pass, changed files are uploaded, overwriting what is on the
  server.  On the third/last pass, the indexes are uploaded, and any
  removed files are deleted from the server.  The last pass is the
  only pass to use a full MD5 checksum of all files to detect changes.
2022-05-23 14:41:34 +02:00
Jochen Sprickerhof
39329b289b Merge branch 'run-tests-in-buildserver' into 'master'
gitlab-ci: run test suite in the buildserver environment

See merge request fdroid/fdroidserver!1129
2022-05-23 12:29:36 +00:00
Hans-Christoph Steiner
e6944ea4c2
gitlab-ci: run test suite in the buildserver environment
Run the whole test suite in an environment that is like the
buildserver guest VM.  This installs python3-babel because that is
only used by the test suite, and not needed in the buildserver.

Some extra packages are required for this test run that are not
provided by the buildserver since they are not needed there:

 * gnupg-agent for the full signing setup
 * python3-babel for compiling localization files
 * python3-clint for fancy progress bars for users

fdroid/ci-images-base is deprecated and archived.
2022-05-23 14:12:06 +02:00
Hans-Christoph Steiner
9eeabddcf0 Merge branch 'skip_apk' into 'master'
Don't include disabled apks in the index

Closes #1002

See merge request fdroid/fdroidserver!1126
2022-05-23 12:05:40 +00:00
Jochen Sprickerhof
b07d23ff5c Don't include disabled apks in the index
This needs a rerun of `fdroid update --clean`.

In case a build is disabled delete_disabled_builds takes care of
deleting it from the repo. But this only works if the apk follows the
normal name pattern. Otherwise it will stay in the folder and be picked
up by process_apks and added to the index.

Closes: #1002
2022-05-23 11:47:53 +00:00
Hans-Christoph Steiner
40f761c482 Merge branch 'index_v2' into 'master'
Index v2

See merge request fdroid/fdroidserver!1092
2022-05-23 10:39:17 +00:00
Jochen Sprickerhof
d70e5c2cd9 Index v2 2022-05-23 10:39:17 +00:00
Hans-Christoph Steiner
45e79b1223 Merge branch 'linsui-master-patch-66548' into 'master'
scanner: add me.pushy

See merge request fdroid/fdroidserver!1130
2022-05-23 07:30:14 +00:00
linsui
13534bf02e scanner: add me.pushy 2022-05-21 12:25:11 +00:00
Jochen Sprickerhof
4babf6fce9 Merge branch 'run-tests-in-buildserver' into 'master'
scanner: include dexdump in buildserver for APK analysis

See merge request fdroid/fdroidserver!1127
2022-05-20 13:30:14 +00:00
Hans-Christoph Steiner
6ef60f0d6b
scanner: include dexdump in buildserver for APK analysis
This scanner feature is not yet ready for the production buildserver but it
is already useful in CI.
2022-05-19 15:45:26 +02:00
Hans-Christoph Steiner
ddcbe23f9e Merge branch 'keep-index-v1.json' into 'master'
signindex: do not remove index-v1.json after signing

Closes #969

See merge request fdroid/fdroidserver!1124
2022-05-17 13:56:32 +00:00
Hans-Christoph Steiner
73c31e6e63
signindex: do not remove index-v1.json after signing
With ~index-v2, the model is changing to offer the plain JSON file for easy
consumption.  Then gpgsign will also provide a detached PGP signature for
systems that would rather verify based on PGP signatures than JAR signatures.

!1080
closes #969
2022-05-17 15:38:06 +02:00
Hans-Christoph Steiner
8f6bc1114a Merge branch 'duplicate_permissions' into 'master'
Fix and merge androguard_test into update.TestCase

See merge request fdroid/fdroidserver!1121
2022-05-10 14:58:11 +00:00
Jochen Sprickerhof
08e3e445fb Merge androguard_test into update.TestCase 2022-05-10 14:40:03 +00:00
Jochen Sprickerhof
e82888837e Fix androguard_test
- SdkToolsPopen expects a list.
- info.guardianproject.urzip.apk is not in the repo.
- scan_apk_aapt was removed in 08931f45 so define output.
2022-05-10 14:40:03 +00:00
Jochen Sprickerhof
1b67af4367 Merge branch 'net-download-file' into 'master'
net: improve parsing filenames from URL

See merge request fdroid/fdroidserver!1122
2022-05-10 11:54:26 +00:00
Hans-Christoph Steiner
107593d3ba net: improve parsing filenames from URL
This is more relevant to issuebot than fdroidserver, but it can't hurt here
also.
2022-05-09 20:59:15 +02:00
Jochen Sprickerhof
f8789f2997 Merge branch 'nonfree' into 'master'
scanner: add kotlinx-coroutines-play-services

See merge request fdroid/fdroidserver!1120
2022-05-08 09:33:35 +00:00
linsui
df1e0e30d5 fix tests 2022-05-07 02:17:26 +00:00
linsui
c16d170f12 scanner: add kotlinx-coroutines-play-services 2022-05-07 01:49:56 +00:00
Jochen Sprickerhof
f4771da597 Merge branch 'kts' into 'master'
scanner: scan gradle.kts

See merge request fdroid/fdroidserver!1119
2022-05-06 19:21:51 +00:00
linsui
90bc8e1e8f scan gradle.kts 2022-05-07 00:43:55 +08:00
Jochen Sprickerhof
0aca165b4e Merge branch 'nonfreelib' into 'master'
scanner: add more nonfree libs

See merge request fdroid/fdroidserver!1116
2022-05-06 10:38:37 +00:00
linsui
4f04bd9200 Update scanner.py 2022-05-05 03:39:49 +00:00
Jochen Sprickerhof
7fabbc9cad Merge branch 'gitlab-ci-fix-job-post-dexdump' into 'master'
gitlab-ci: fix debian_testing and ubuntu_lts_ppa jobs

See merge request fdroid/fdroidserver!1115
2022-05-04 15:05:26 +00:00
Hans-Christoph Steiner
cea192b9fb
gitlab-ci: fix debian_testing and ubuntu_lts_ppa jobs
!1110
These setups did not have dexdump at all.
2022-05-03 22:05:39 +02:00
Hans-Christoph Steiner
1ae6e4e254 Merge branch 'dexdump_nooutput' into 'master'
Silence dexdump output in build --verbose

See merge request fdroid/fdroidserver!1114
2022-05-03 17:57:43 +00:00
Jochen Sprickerhof
50e680be93 Silence dexdump output in build --verbose 2022-05-03 18:30:02 +02:00
Hans-Christoph Steiner
6318bf0f5d Merge branch 'scanner_dexdump' into 'master'
[scanner] replace apkanalyzer by dexdump

See merge request fdroid/fdroidserver!1110
2022-05-03 15:18:21 +00:00
Jochen Sprickerhof
c80fdd5ce8 Handle BadZipFile 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
925cdbe542 Improve recursion warning, thx Hans! 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
94ccd022c4 Add apk.embedded_1.apk test 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
9eaab6050e Fix variable name 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
91320fa10e Rework code 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
7ec3905734 Log zip recursion limit 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
5fc88431f8 Simplify code 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
d0d56173c9 Support nested apks 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
635f12e438 Use latest build-tools version 2022-05-03 14:59:52 +00:00
Jochen Sprickerhof
9c8e128064 [scanner] replace apkanalyzer by dexdump 2022-05-03 14:59:52 +00:00
Hans-Christoph Steiner
23d9f0ed50
mirror-to-mirror.sh: replace mirror.f-droid.org with ftp.agdsn.de
* ftp.agdsn.de is a new official mirror that receives push updates.
* mirror.f-droid.org is no more, it is now a DNS round robin redirector.

admin#247
admin#298

[skip ci]
2022-05-02 14:21:35 +02:00
Hans-Christoph Steiner
cfeeaff4c7 Merge branch 'updatedefaultndks' into 'master'
remove old LTS NDK and only pre-install current LTS

See merge request fdroid/fdroidserver!1098
2022-04-26 08:48:29 +00:00
Hans-Christoph Steiner
189ff9cd7b
build: improve error message when NDK SHA-256 does not match 2022-04-26 10:25:34 +02:00
Licaon_Kter
e678df14ce
buildserver: remove old LTS NDK and only pre-install current LTS 2022-04-26 10:25:31 +02:00
Hans-Christoph Steiner
2d3618b8ee Merge branch 'check_signindex' into 'master'
Test index before signing

See merge request fdroid/fdroidserver!1101
2022-04-25 20:55:43 +00:00
Hans-Christoph Steiner
9f477dee56
signindex: added simple test case 2022-04-25 22:38:34 +02:00
Jochen Sprickerhof
d05bcafe14 Test index before signing 2022-04-25 22:26:59 +02:00
Jochen Sprickerhof
14beedd6e8 Merge branch 'pwd-path-fix' into 'master'
Avoid zero-length prefixes in PATH

See merge request fdroid/fdroidserver!1113
2022-04-25 13:25:25 +00:00
Sergey Bobrenok
46f4205fff Avoid zero-length prefixes in PATH
A zero-length prefix in PATH is a legacy feature that indicates the
current working directory.

https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03

Found in ru.nsu.bobrofon.easysshfs, see:
https://gitlab.com/fdroid/fdroiddata/-/merge_requests/10953#note_921802636
2022-04-24 16:33:33 +03:00
Hans-Christoph Steiner
694050e561 Merge branch 'bump_fdroid_build' into 'master'
[CI] Bump client build to fix CI failure

See merge request fdroid/fdroidserver!1112
2022-04-22 12:44:02 +00:00
Jochen Sprickerhof
483bbecf3e [CI] Bump client build to fix CI failure 2022-04-22 14:26:55 +02:00
Jochen Sprickerhof
764887ea48 Merge branch 'disable-flutter-analytics-in-buildserver' into 'master'
buildserver: disable flutter dev/build analytics globally

See merge request fdroid/fdroidserver!1109
2022-04-22 05:51:16 +00:00
Hans-Christoph Steiner
c6fddebecd buildserver: disable flutter dev/build analytics globally
The Flutter dev tools includes opt-out analytics, with a config option to
opt out.  We can at least try to disable them in the buildserver. That
config option is unfortunately not even guaranteed to work:
https://github.com/flutter/flutter/issues/19304
https://github.com/flutter/flutter/issues/45369

issuebot#21
issuebot!49
https://github.com/flutter/flutter/issues/73657
2022-04-21 15:38:48 +02:00
Hans-Christoph Steiner
5448327277 Merge branch 'copy_scanner' into 'master'
[scanner] Deep copy json structs (Closes: #985)

Closes #985

See merge request fdroid/fdroidserver!1102
2022-04-21 12:58:35 +00:00
Jochen Sprickerhof
253f2e5fef [scanner] Deep copy json structs (Closes: #985)
The lists in the DEFAULT_JSON_PER_BUILD where only initialized and thus
shared between builds resulting in accumulating the entries over all
versions. As per 2f5d780c4 DEFAULT_JSON_PER_BUILD is used as an API, so
use deepcopy to work around it.
2022-04-21 12:58:07 +00:00
Hans-Christoph Steiner
cc59aa9e9f Merge branch 'repo_url' into 'master'
Add check for repo/archive_url

See merge request fdroid/fdroidserver!1108
2022-04-21 10:12:34 +00:00
Jochen Sprickerhof
5f3eb601df Add check for repo/archive_url 2022-04-21 11:16:14 +02:00
Hans-Christoph Steiner
f4cb3bbfb4 Merge branch 'tag-buildserver-image-as-stretch' into 'master'
gitlab-ci: tag docker buildserver image with "stretch"

See merge request fdroid/fdroidserver!1107
2022-04-20 13:31:41 +00:00
Hans-Christoph Steiner
65cd3e3b0a
gitlab-ci: tag docker buildserver image with "stretch"
This should make the migration to bullseye easier because we'll have a
fallback stretch image available as needed.

!1012
2022-04-20 15:14:36 +02:00
Hans-Christoph Steiner
3027dc014e
gitlab-ci: fix sudo test in "fdroid build" job 2022-04-18 14:48:16 +02:00
Hans-Christoph Steiner
8223b5b3ed Merge branch 'CI_build_image' into 'master'
CI: Use buildserver image from fdroidserver

See merge request fdroid/fdroidserver!1086
2022-04-18 12:01:19 +00:00
FestplattenSchnitzel
9721b60d7c
Use buildserver image from fdroidserver
This is derived from the "fdroid build" job in fdroiddata
2022-04-18 13:46:10 +02:00
Jochen Sprickerhof
68b3627a90 Merge branch 'update_unknown' into 'master'
[checkupdates] move gradle var check to parser

Closes #751

See merge request fdroid/fdroidserver!1105
2022-04-18 09:37:13 +00:00
Jochen Sprickerhof
c19f46b706 [checkupdates] move gradle var check to parser
3638acddc added a check if the version name string is actually a
unresolved gradle variable. This moves the check into the
common.parse_androidmanifests() as it is the only where the it could
happen. This also resolves the case where checkupdates returns
"Unknown".

Closes: #751
2022-04-14 17:47:44 +02:00
Jochen Sprickerhof
ea567b0b5a Merge branch 'licaon-kter-master-patch-01504' into 'master'
Import - some fixes for flutter apps

Closes #988 and #987

See merge request fdroid/fdroidserver!1103
2022-04-14 09:37:41 +00:00
Licaon_Kter
1df6b1db90 Import - some fixes for flutter apps 2022-04-12 10:08:13 +00:00
Jochen Sprickerhof
0fa4d64609 Merge branch 'package_namespace' into 'master'
Consider namespace for applicationId

See merge request fdroid/fdroidserver!1100
2022-04-10 18:18:54 +00:00
Jochen Sprickerhof
b6ea0d6acd Consider namespace for applicationId
> If the application ID is not explicitly defined using the
> applicationId property, it automatically takes on the same value as
> the namespace.

https://developer.android.com/studio/build/configure-app-module

Found in com.amanoteam.unalix, see:

https://gitlab.com/fdroid/fdroiddata/-/merge_requests/10895#note_907080341
2022-04-10 09:27:17 +02:00
Sylvia van Os
620c06c377 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.4.2

See merge request fdroid/fdroidserver!1097
2022-04-02 16:05:17 +00:00
fdroid-bot
6b28ce8b32 gradle v7.4.2 2022-04-01 13:02:45 +00:00
Hans-Christoph Steiner
1d98b224e0 Merge branch 'fix_pylint' into 'master'
Fix pylint warnings

See merge request fdroid/fdroidserver!1096
2022-04-01 13:02:02 +00:00
Jochen Sprickerhof
a872d8688d Fix pylint warnings 2022-03-29 15:53:45 +02:00
Hans-Christoph Steiner
ff44488a42 Merge branch 'licaon-kter-master-patch-01751' into 'master'
Add NDK24

See merge request fdroid/fdroidserver!1093
2022-03-23 12:30:29 +00:00
Licaon_Kter
287fe1fb16 Add NDK24 2022-03-23 12:30:28 +00:00
Hans-Christoph Steiner
66d0da3a11 Merge branch 'junrar' into 'master'
Add junrar to blocklist

See merge request fdroid/fdroidserver!1091
2022-03-15 12:07:31 +00:00
linsui
849e671353 Add junrar to blocklist 2022-03-15 12:06:42 +00:00
Hans-Christoph Steiner
14f8e81019 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.4.1

See merge request fdroid/fdroidserver!1089
2022-03-15 12:03:35 +00:00
fdroid-bot
bbb9242428 gradle v7.4.1 2022-03-13 08:50:50 +00:00
Jochen Sprickerhof
a2df6037a3 Merge branch 'handle_xml_ParseError' into 'master'
Handle XML parser errors

See merge request fdroid/fdroidserver!1090
2022-03-13 08:50:13 +00:00
Jochen Sprickerhof
17c7c3948c Handle XML parser errors
Found in checkupdates of com.dar.nclientv2.
2022-03-11 09:03:03 +01:00
Jochen Sprickerhof
c0b9dbddb6 Merge branch 'checkupdates_submodules' into 'master'
[checkupdates] update submodules according to tag

See merge request fdroid/fdroidserver!1088
2022-03-10 12:07:11 +00:00
Jochen Sprickerhof
0c390c943d [checkupdates] update submodules according to tag
In case the version information is inside a submodule we need to
checkout the submodule at the version of the tag we test.

Found with org.courville.nova.

Closes: #622
2022-03-10 12:49:03 +01:00
Hans-Christoph Steiner
f368bd4106 Merge branch 'triple-t-flutter' into 'master'
Add support for Triple-T metadata in Flutter projects

Closes #975

See merge request fdroid/fdroidserver!1087
2022-03-09 12:24:33 +00:00
Simon Ser
757e30ad85 Add test case for Triple-T metadata in a Flutter project 2022-03-07 12:40:37 +01:00
Simon Ser
fdc88650eb Add support for Triple-T metadata in Flutter projects
Closes: https://gitlab.com/fdroid/fdroidserver/-/issues/975
2022-03-06 18:24:45 +01:00
Hans-Christoph Steiner
0212f2c41f Merge branch 'AGP' into 'master'
Fix Gradle version for AGP

See merge request fdroid/fdroidserver!1083
2022-03-02 13:18:12 +00:00
linsui
47ce37888b Fix Gradle version for AGP 2022-03-02 13:17:26 +00:00
Chirayu Desai
a4a6a02d4b Merge branch 'revert_fileextension' into 'master'
Fix detection of binary files without extension

See merge request fdroid/fdroidserver!1085
2022-03-02 09:37:55 +00:00
Jochen Sprickerhof
8fb37445f2 Fix detection of binary files without extension
Regression of fb61168c.
2022-03-02 10:21:20 +01:00
Hans-Christoph Steiner
31d3ac3d79 Merge branch 'CI_docker' into 'master'
Fix CI for users with uppercase letters in username

See merge request fdroid/fdroidserver!1081
2022-02-27 11:55:33 +00:00
FestplattenSchnitzel
14ab546365
Fix CI for users with uppercase letters in username 2022-02-26 18:15:58 +01:00
Hans-Christoph Steiner
d566628ad8
version 2.1 2022-02-22 23:19:19 +01:00
Hans-Christoph Steiner
5bf2c89957
list .po files in the manifest, not .mo !1014 #934 2022-02-22 23:19:17 +01:00
Hans-Christoph Steiner
72c749959a Merge branch 'gpgsign-index-v1' into 'master'
publish index-v1.json and include a gpg signature

See merge request fdroid/fdroidserver!1080
2022-02-22 22:17:42 +00:00
Hans-Christoph Steiner
707cd7addb
publish index-v1.json and include a gpg signature
This gives a more flexible and direct way for many clients to consume the
index file. #969
2022-02-22 22:58:09 +01:00
Hans-Christoph Steiner
8e02c52a45 Merge branch 'nightly-fix-resign' into 'master'
nightly: stop stripping APKs before signing, apksigner handles that

See merge request fdroid/fdroidserver!1078
2022-02-22 21:46:29 +00:00
Hans-Christoph Steiner
e38f7dad68
locale: fix corrupt python formats 2022-02-22 22:29:13 +01:00
Hans-Christoph Steiner
d1fd58681e
nightly: stop stripping APKs before signing, apksigner does it
* https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1033#note_742563869
* https://github.com/wardvl/f-droid-nightly-action/issues/3
2022-02-22 22:29:09 +01:00
Hans-Christoph Steiner
01d1869d59
nightly: fix "deploy key URL" that is printed to log output
GitLab now uses the "/-/" form as the canonical.
2022-02-22 13:34:01 +01:00
Hans-Christoph Steiner
2198811672 Merge branch 'gradlew-fdroid' into 'master'
update required gradle versions for Android Gradle Plugin

See merge request fdroid/fdroidserver!1076
2022-02-22 09:02:55 +00:00
Hans-Christoph Steiner
addc32e4ec update required gradle versions for Android Gradle Plugin
https://developer.android.com/studio/releases/gradle-plugin.html#updating-gradle
2022-02-22 08:46:04 +00:00
Hans-Christoph Steiner
972393fdad Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1079
2022-02-22 08:40:23 +00:00
nautilusx
8451a0b9f7 Translated using Weblate: German (de) by nautilusx <translate@disroot.org>
Currently translated at 97.3% (596 of 612 strings)

Translated using Weblate: German (de) by nautilusx <translate@disroot.org>

Currently translated at 95.7% (586 of 612 strings)

Co-authored-by: nautilusx <translate@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Andrey
92c2717d1d Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Andrey <andrey@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Allan Nordhøy
f03f0515c6 Translated using Weblate: Norwegian Bokmål (nb_NO) by Allan Nordhøy <epost@anotheragency.no>
Currently translated at 59.6% (365 of 612 strings)

Translated using Weblate: Norwegian Bokmål (nb_NO) by Allan Nordhøy <epost@anotheragency.no>

Currently translated at 58.3% (357 of 612 strings)

Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Eric
b7a9a7be85 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <alchemillatruth@purelymail.com>
Currently translated at 44.1% (270 of 612 strings)

Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Agnieszka C
58370dbdc4 Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Ihor Hordiichuk
2123623ae7 Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (612 of 612 strings)

Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>

Currently translated at 98.5% (603 of 612 strings)

Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>

Currently translated at 94.2% (577 of 612 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
marzzzello
a1c56b6686 Translated using Weblate: German (de) by marzzzello <anmeldezeugs@top-email.net>
Currently translated at 97.3% (596 of 612 strings)

Translated using Weblate: German (de) by marzzzello <anmeldezeugs@top-email.net>

Currently translated at 95.7% (586 of 612 strings)

Translated using Weblate: German (de) by marzzzello <anmeldezeugs@top-email.net>

Currently translated at 95.2% (583 of 612 strings)

Co-authored-by: marzzzello <anmeldezeugs@top-email.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Oğuz Ersen
8b4aa4685c Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguzersen@protonmail.com>
Currently translated at 100.0% (612 of 612 strings)

Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Besnik Bleta
3309cb495a Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.7% (563 of 576 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2022-02-22 09:25:31 +01:00
Hans-Christoph Steiner
5eda215d81 Merge branch 'remove-compile_catalog' into 'master'
stop compiling locale files for the sdist tarballs

See merge request fdroid/fdroidserver!1077
2022-02-16 07:40:58 +00:00
Hans-Christoph Steiner
36a7b83be1
version 2.1b0 2022-02-15 23:45:22 +01:00
Hans-Christoph Steiner
421e07db12
stop compiling locale files for the sdist tarballs
!1014 #934
2022-02-15 23:45:21 +01:00
Hans-Christoph Steiner
04242f162b
add Romanian locale 2022-02-15 23:45:18 +01:00
Hans-Christoph Steiner
5ec952ab8a Merge branch 'fix/use_date_from_apk' into 'master'
Fix --use-date-from-apk flag

Closes #947

See merge request fdroid/fdroidserver!1067
2022-02-15 22:39:08 +00:00
Sylvia van Os
1f75090fa2 Fix --use-date-from-apk flag 2022-02-15 22:39:08 +00:00
Hans-Christoph Steiner
e845bfc28b Merge branch 'feature/scanner_so' into 'master'
Also detect versioned so files

See merge request fdroid/fdroidserver!1071
2022-02-15 22:36:44 +00:00
Sylvia van Os
fb61168c38 Also detect versioned so files 2022-02-15 22:36:44 +00:00
Hans-Christoph Steiner
b3e126a3ba
make -C locale update 2022-02-15 20:06:57 +01:00
Hans-Christoph Steiner
d059b2039c Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1075
2022-02-15 16:06:42 +00:00
Petr Novák
3d67e4f073 Translated using Weblate: Czech (cs) by Petr Novák <nit.monkey@gmail.com>
Currently translated at 8.5% (49 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
2022-02-15 16:49:43 +01:00
Allan Nordhøy
1dc82f56af Translated using Weblate: Norwegian Bokmål (nb_NO) by Allan Nordhøy <epost@anotheragency.no>
Currently translated at 59.2% (341 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/
2022-02-15 16:49:43 +01:00
Agnieszka C
53f43fe232 Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (576 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
2022-02-15 16:49:43 +01:00
Kristoffer Grundström
b4692d2618 Translated using Weblate: Swedish (sv) by Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Currently translated at 11.8% (68 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
2022-02-15 16:49:43 +01:00
JY3
96b233b58b Translated using Weblate: Chinese (Simplified) (zh_Hans) by JY3 <GeeyunJY3@gmail.com>
Currently translated at 45.4% (262 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-02-15 16:49:43 +01:00
Agnieszka C
c71a56b03a Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (576 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
2022-02-15 16:49:43 +01:00
Agnieszka C
b4105b037a Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (576 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
2022-02-15 16:49:43 +01:00
Agnieszka C
3cf9d3103f Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (576 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
2022-02-15 16:49:43 +01:00
Eric
52bb905ff5 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <spice2wolf@gmail.com>
Currently translated at 45.4% (262 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
2022-02-15 16:49:43 +01:00
Licaon Kter
157468570f Translated using Weblate: Romanian (ro) by Licaon Kter <licaon.kter@protonmail.com>
Currently translated at 100.0% (576 of 576 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
2022-02-15 16:49:43 +01:00
Liu Wenyuan
7c849a2701 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Liu Wenyuan <15816141883@163.com>
Currently translated at 44.6% (257 of 576 strings)

Co-authored-by: Liu Wenyuan <15816141883@163.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
translator
daec62f57c Translated using Weblate: French (fr) by translator <yasinoc375@advew.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: translator <yasinoc375@advew.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
lilim
eff8d26019 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Allan Nordhøy
8e251e234f Translated using Weblate: Norwegian Bokmål (nb_NO) by Allan Nordhøy <epost@anotheragency.no>
Currently translated at 59.0% (340 of 576 strings)

Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Kaantaja
4cf2cdcec6 Translated using Weblate: Finnish (fi) by Kaantaja <ufdbvgoljrjkrkyyub@ianvvn.com>
Currently translated at 0.1% (1 of 576 strings)

Co-authored-by: Kaantaja <ufdbvgoljrjkrkyyub@ianvvn.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fi/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
ssantos
5652f30520 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Joel A
5b0e5a5f28 Translated using Weblate: Swedish (sv) by Joel A <joeax910@student.liu.se>
Currently translated at 8.8% (51 of 576 strings)

Co-authored-by: Joel A <joeax910@student.liu.se>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Danial Behzadi
a3a20337ea Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>
Currently translated at 4.1% (24 of 576 strings)

Translated using Weblate: Persian (fa) by Danial Behzadi <dani.behzi@ubuntu.com>

Currently translated at 4.1% (24 of 576 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fa/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
privacysimp
4f74fc8a62 Translated using Weblate: Dutch (nl) by privacysimp <contributions.pqy8k@aleeas.com>
Currently translated at 3.4% (20 of 576 strings)

Co-authored-by: privacysimp <contributions.pqy8k@aleeas.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nl/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
translator
c8da25b4ff Translated using Weblate: French (fr) by translator <yasinoc375@advew.com>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: French (fr) by translator <yasinoc375@advew.com>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: translator <yasinoc375@advew.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
hilariousperson
b5dcd3e916 Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Simona Iacob
5014da84c3 Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Simona Iacob <s@zp1.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Myeongjin Lee
473063a7cb Translated using Weblate: Korean (ko) by Myeongjin Lee <aranet100@gmail.com>
Currently translated at 38.7% (223 of 576 strings)

Translated using Weblate: Korean (ko) by Myeongjin Lee <aranet100@gmail.com>

Currently translated at 36.2% (209 of 576 strings)

Co-authored-by: Myeongjin Lee <aranet100@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Agnieszka C
a3710fe265 Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
yahoo~~
e674acbec1 Translated using Weblate: Chinese (Simplified) (zh_Hans) by yahoo~~ <xll520yzl@gmail.com>
Currently translated at 41.4% (239 of 576 strings)

Co-authored-by: yahoo~~ <xll520yzl@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
lilim
2bfc566206 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 99.4% (573 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Jaxom
b8d0bc50dd Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 99.4% (573 of 576 strings)

Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>

Currently translated at 98.6% (568 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
lilim
c9fc162d6e Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 98.6% (568 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Jaxom
c54775ef48 Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 98.2% (566 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
lilim
53018a1b4a Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 98.2% (566 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Jaxom
25c8ad5d6b Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 97.7% (563 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
lilim
6077b07617 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 97.7% (563 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Jaxom
b98a341b5d Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 97.5% (562 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
lilim
86161f1efc Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 97.5% (562 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:43 +01:00
Jaxom
db9f69a130 Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 96.1% (554 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
e8a645c4b6 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 96.1% (554 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Jaxom
bd72a98c94 Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 95.4% (550 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
ButterflyOfFire
47b732635d Translated using Weblate: French (fr) by ButterflyOfFire <ButterflyOfFire@protonmail.com>
Currently translated at 95.4% (550 of 576 strings)

Co-authored-by: ButterflyOfFire <ButterflyOfFire@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
aa876d2c14 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 95.4% (550 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Jaxom
2e6fbad2af Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 94.9% (547 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
50604e6e6e Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 94.9% (547 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Jaxom
34f498896a Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 94.7% (546 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
bd6dcd405b Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 94.7% (546 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
bd2cce972d Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 94.7% (546 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Jaxom
58f5a2fc24 Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 94.0% (542 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
5abbc70351 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 94.0% (542 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
hilariousperson
fdc9eb1925 Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 93.9% (541 of 576 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
booteille
fad47948b8 Translated using Weblate: French (fr) by booteille <booteille@protonmail.com>
Currently translated at 93.9% (541 of 576 strings)

Co-authored-by: booteille <booteille@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Jaxom
41dcb59c4e Translated using Weblate: French (fr) by Jaxom <jaxom+weblate@tchack.xyz>
Currently translated at 93.9% (541 of 576 strings)

Co-authored-by: Jaxom <jaxom+weblate@tchack.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
ac5b117b12 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 93.9% (541 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Чтабс
a508636fe2 Translated using Weblate: Russian (ru) by Чтабс <chtabs2k19@gmail.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Чтабс <chtabs2k19@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Orhan
b600a8cfd4 Translated using Weblate: Turkish (tr) by Orhan <orya@pm.me>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Orhan <orya@pm.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Vancha March
2cf5c883d5 Translated using Weblate: Frisian (fy) by Vancha March <tjipkevdh@gmail.com>
Currently translated at 3.6% (21 of 576 strings)

Added translation using Weblate: Frisian (fy) by Vancha March <tjipkevdh@gmail.com>

Co-authored-by: Vancha March <tjipkevdh@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fy/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
whenwesober
872d2434e0 Translated using Weblate: Indonesian (id) by whenwesober <naomi16i_1298q@cikuh.com>
Currently translated at 13.7% (79 of 576 strings)

Co-authored-by: whenwesober <naomi16i_1298q@cikuh.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/id/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Eric
772ee56888 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <spice2wolf@gmail.com>
Currently translated at 40.6% (234 of 576 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <spice2wolf@gmail.com>

Currently translated at 40.4% (233 of 576 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <spice2wolf@gmail.com>

Currently translated at 40.4% (233 of 576 strings)

Co-authored-by: Eric <spice2wolf@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
ZZY2357
729e14bf63 Translated using Weblate: Chinese (Simplified) (zh_Hans) by ZZY2357 <ZZY2357@outlook.com>
Currently translated at 40.4% (233 of 576 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by ZZY2357 <ZZY2357@outlook.com>

Currently translated at 39.7% (229 of 576 strings)

Co-authored-by: ZZY2357 <ZZY2357@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Balázs Meskó
c264f8e04e Translated using Weblate: Hungarian (hu) by Balázs Meskó <meskobalazs@mailbox.org>
Currently translated at 67.0% (386 of 576 strings)

Translated using Weblate: Hungarian (hu) by Balázs Meskó <meskobalazs@mailbox.org>

Currently translated at 39.4% (227 of 576 strings)

Translated using Weblate: Hungarian (hu) by Balázs Meskó <meskobalazs@mailbox.org>

Currently translated at 37.8% (218 of 576 strings)

Translated using Weblate: Hungarian (hu) by Balázs Meskó <meskobalazs@mailbox.org>

Currently translated at 22.5% (130 of 576 strings)

Translated using Weblate: Hungarian (hu) by Balázs Meskó <meskobalazs@mailbox.org>

Currently translated at 14.7% (85 of 576 strings)

Co-authored-by: Balázs Meskó <meskobalazs@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/hu/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Stiffen
010d318ab4 Translated using Weblate: Chinese (Traditional) (zh_Hant) by Stiffen <wchen01@fisher.edu>
Currently translated at 81.0% (467 of 576 strings)

Translated using Weblate: Chinese (Traditional) (zh_Hant) by Stiffen <wchen01@fisher.edu>

Currently translated at 81.7% (471 of 576 strings)

Translated using Weblate: Chinese (Traditional) (zh_Hant) by Stiffen <wchen01@fisher.edu>

Currently translated at 81.7% (471 of 576 strings)

Translated using Weblate: Chinese (Traditional) (zh_Hant) by Stiffen <wchen01@fisher.edu>

Currently translated at 81.4% (469 of 576 strings)

Co-authored-by: Stiffen <wchen01@fisher.edu>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
ifurther
c0deb87379 Translated using Weblate: Chinese (Traditional) (zh_Hant) by ifurther <i.further.5.4@gmail.com>
Currently translated at 81.2% (468 of 576 strings)

Co-authored-by: ifurther <i.further.5.4@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
mondstern
6851907fbc Translated using Weblate: Norwegian Bokmål (nb_NO) by mondstern <mondstern@snopyta.org>
Currently translated at 59.0% (340 of 576 strings)

Co-authored-by: mondstern <mondstern@snopyta.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Allan Nordhøy
6bea5cd6ed Translated using Weblate: Norwegian Bokmål (nb_NO) by Allan Nordhøy <epost@anotheragency.no>
Currently translated at 58.5% (337 of 576 strings)

Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Germe the fur star
af3ae8a4a3 Translated using Weblate: Spanish (Argentina) (es_AR) by Germe the fur star <FOSSgerme.deb@tuta.io>
Currently translated at 20.4% (118 of 576 strings)

Translated using Weblate: Spanish (es) by Germe the fur star <FOSSgerme.deb@tuta.io>

Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Spanish (Argentina) (es_AR) by Germe the fur star <FOSSgerme.deb@tuta.io>

Currently translated at 20.1% (116 of 576 strings)

Co-authored-by: Germe the fur star <FOSSgerme.deb@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es_AR/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Liu Tao
ee242f2149 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Liu Tao <lyuutau@outlook.com>
Currently translated at 39.0% (225 of 576 strings)

Co-authored-by: Liu Tao <lyuutau@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
04850ace3b Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 91.4% (527 of 576 strings)

Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>

Currently translated at 90.4% (521 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
136465f533 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 90.4% (521 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
4e2df60122 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 90.2% (520 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
ce9a82655e Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 90.2% (520 of 576 strings)

Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>

Currently translated at 89.9% (518 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
23c4b592e1 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 89.7% (517 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
b10e80c341 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 89.7% (517 of 576 strings)

Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>

Currently translated at 89.5% (516 of 576 strings)

Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>

Currently translated at 89.4% (515 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
13d220ffd4 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 89.2% (514 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
fc28ead082 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 89.2% (514 of 576 strings)

Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>

Currently translated at 88.8% (512 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
bbeeaab4ff Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 88.8% (512 of 576 strings)

Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>

Currently translated at 88.0% (507 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
eb3eb5a339 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 88.0% (507 of 576 strings)

Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>

Currently translated at 87.8% (506 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
lilim
5d52d2ee13 Translated using Weblate: French (fr) by lilim <lionel@les-miquelots.net>
Currently translated at 87.6% (505 of 576 strings)

Co-authored-by: lilim <lionel@les-miquelots.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
hilariousperson
dbac5ec5c7 Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 87.6% (505 of 576 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
signz signotorez
c8bbbaae11 Translated using Weblate: Indonesian (id) by signz signotorez <signotorez@gmail.com>
Currently translated at 13.5% (78 of 576 strings)

Co-authored-by: signz signotorez <signotorez@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/id/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Reza Almanda
4737784e53 Translated using Weblate: Indonesian (id) by Reza Almanda <rezaalmanda27@gmail.com>
Currently translated at 13.5% (78 of 576 strings)

Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/id/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
世界
2ae2aed6f3 Translated using Weblate: Chinese (Simplified) (zh_Hans) by 世界 <i@nekox.me>
Currently translated at 37.8% (218 of 576 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by 世界 <i@nekox.me>

Currently translated at 37.8% (218 of 576 strings)

Co-authored-by: 世界 <i@nekox.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Michalis
de66c06bc8 Translated using Weblate: Greek (el) by Michalis <michalisntovas@yahoo.gr>
Currently translated at 13.5% (78 of 576 strings)

Co-authored-by: Michalis <michalisntovas@yahoo.gr>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/el/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Liu Tao
01d3476d89 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Liu Tao <lyuutau@outlook.com>
Currently translated at 35.5% (205 of 576 strings)

Co-authored-by: Liu Tao <lyuutau@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Oymate
44489553eb Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>
Currently translated at 3.4% (20 of 576 strings)

Co-authored-by: Oymate <dhruboadittya96@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/bn/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Gavy
bbc4e2eca0 Translated using Weblate: French (fr) by Gavy <gavy@protonmail.com>
Currently translated at 87.1% (502 of 576 strings)

Co-authored-by: Gavy <gavy@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
gub
ca57bf1b0e Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 87.1% (502 of 576 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2022-02-15 16:49:42 +01:00
Hans-Christoph Steiner
786ee0eabf Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.4

See merge request fdroid/fdroidserver!1074
2022-02-15 11:29:28 +00:00
fdroid-bot
93836f3af8 gradle v7.4 2022-02-15 10:31:09 +00:00
Hans-Christoph Steiner
8093ede8c7 Merge branch 'ndk' into 'master'
update preinstalled ndk to r23

See merge request fdroid/fdroidserver!1027
2022-02-15 10:30:30 +00:00
linsui
3f62e0ebde update preinstalled ndk to r23b 2022-02-10 16:47:03 +08:00
Michael Pöhn
39a25fc191 Merge branch 'fix-ci-servergitmirrors' into 'master'
gitlab-ci: fix servergitmirrors by using Debian packages

See merge request fdroid/fdroidserver!1073
2022-02-03 15:58:44 +00:00
Hans-Christoph Steiner
55b3905951 gitlab-ci: fix servergitmirrors by using Debian packages
this is like:
* ca5ebcb30f
* 972bfe346f
* 23bd62c31c
* !1035
* !1034
* !1029
* !1028
2022-02-03 16:41:57 +01:00
Michael Pöhn
0452d6591d Merge branch 'basic-buildserver-docker-image' into 'master'
basic buildserver docker image

See merge request fdroid/fdroidserver!1069
2022-01-13 21:13:15 +00:00
Hans-Christoph Steiner
ca5ebcb30f
gitlab-ci: fix plugin_fetchsrclibs by using Debian packages
* https://gitlab.com/eighthave/fdroidserver/-/jobs/1961701458

Collecting pynacl>=1.0.1 (from paramiko->fdroidserver==2.1a0)
  Downloading https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz (3.4MB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'error'
  Complete output from command /builds/eighthave/fdroidserver/env/bin/python3 -m pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-xokvr6uk --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools>=40.8.0 wheel "cffi>=1.4.1; python_implementation != 'PyPy'":
  Collecting setuptools>=40.8.0
    Using cached https://files.pythonhosted.org/packages/eb/53/0dd4c7960579da8be13fa9b2c2591643d37f323e3d79f8bc8b1b6c8e6217/setuptools-60.5.0-py3-none-any.whl
  Collecting wheel
    Using cached https://files.pythonhosted.org/packages/27/d6/003e593296a85fd6ed616ed962795b2f87709c3eee2bca4f6d0fe55c6d00/wheel-0.37.1-py2.py3-none-any.whl
  Collecting cffi>=1.4.1
    Downloading https://files.pythonhosted.org/packages/00/9e/92de7e1217ccc3d5f352ba21e52398372525765b2e0c4530e6eb2ba9282a/cffi-1.15.0.tar.gz (484kB)
  Collecting pycparser (from cffi>=1.4.1)
    Downloading https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl (118kB)
  Building wheels for collected packages: cffi
    Running setup.py bdist_wheel for cffi: started
    Running setup.py bdist_wheel for cffi: finished with status 'error'
    Complete output from command /builds/eighthave/fdroidserver/env/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-djg9jc8p/cffi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-d1knhl7l --python-tag cp37:
    unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
    unable to execute 'x86_64-linux-gnu-gcc': No such file or directory

        No working compiler found, or bogus compiler options passed to
        the compiler from Python's standard "distutils" module.  See
        the error messages above.  Likely, the problem is not related
        to CFFI but generic to the setup.py of any Python package that
        tries to compile C code.  (Hints: on OS/X 10.8, for errors about
        -mno-fused-madd see http://stackoverflow.com/questions/22313407/
        Otherwise, see https://wiki.python.org/moin/CompLangPython or
        the IRC channel #python on irc.libera.chat.)

        Trying to continue anyway.  If you are trying to install CFFI from
        a build done in a different context, you can ignore this warning.

    running bdist_wheel
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.7
    creating build/lib.linux-x86_64-3.7/cffi
    copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/vengine_gen.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/pkgconfig.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/lock.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/recompiler.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/__init__.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/cparser.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/ffiplatform.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/verifier.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/api.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/commontypes.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/error.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/model.py -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/_cffi_include.h -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/parse_c_type.h -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/_embedding.h -> build/lib.linux-x86_64-3.7/cffi
    copying cffi/_cffi_errors.h -> build/lib.linux-x86_64-3.7/cffi
    running build_ext
    building '_cffi_backend' extension
    creating build/temp.linux-x86_64-3.7
    creating build/temp.linux-x86_64-3.7/c
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/ffi -I/usr/include/libffi -I/builds/eighthave/fdroidserver/env/include -I/usr/include/python3.7m -c c/_cffi_backend.c -o build/temp.linux-x86_64-3.7/c/_cffi_backend.o
    unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

    ----------------------------------------
    Failed building wheel for cffi
    Running setup.py clean for cffi
  Failed to build cffi
  Installing collected packages: setuptools, wheel, pycparser, cffi
    Running setup.py install for cffi: started
      Running setup.py install for cffi: finished with status 'error'
      Complete output from command /builds/eighthave/fdroidserver/env/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-djg9jc8p/cffi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-ek80c81s/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-xokvr6uk --compile --install-headers /builds/eighthave/fdroidserver/env/include/site/python3.7/cffi:
      unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
      unable to execute 'x86_64-linux-gnu-gcc': No such file or directory

          No working compiler found, or bogus compiler options passed to
          the compiler from Python's standard "distutils" module.  See
          the error messages above.  Likely, the problem is not related
          to CFFI but generic to the setup.py of any Python package that
          tries to compile C code.  (Hints: on OS/X 10.8, for errors about
          -mno-fused-madd see http://stackoverflow.com/questions/22313407/
          Otherwise, see https://wiki.python.org/moin/CompLangPython or
          the IRC channel #python on irc.libera.chat.)

          Trying to continue anyway.  If you are trying to install CFFI from
          a build done in a different context, you can ignore this warning.

      running install
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-3.7
      creating build/lib.linux-x86_64-3.7/cffi
      copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/vengine_gen.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/pkgconfig.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/lock.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/recompiler.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/__init__.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/cparser.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/ffiplatform.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/verifier.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/api.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/commontypes.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/error.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/model.py -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/_cffi_include.h -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/parse_c_type.h -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/_embedding.h -> build/lib.linux-x86_64-3.7/cffi
      copying cffi/_cffi_errors.h -> build/lib.linux-x86_64-3.7/cffi
      running build_ext
      building '_cffi_backend' extension
      creating build/temp.linux-x86_64-3.7
      creating build/temp.linux-x86_64-3.7/c
      x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/ffi -I/usr/include/libffi -I/builds/eighthave/fdroidserver/env/include -I/usr/include/python3.7m -c c/_cffi_backend.c -o build/temp.linux-x86_64-3.7/c/_cffi_backend.o
      unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
      error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

      ----------------------------------------
  Command "/builds/eighthave/fdroidserver/env/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-djg9jc8p/cffi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-ek80c81s/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-xokvr6uk --compile --install-headers /builds/eighthave/fdroidserver/env/include/site/python3.7/cffi" failed with error code 1 in /tmp/pip-install-djg9jc8p/cffi/

  ----------------------------------------
Command "/builds/eighthave/fdroidserver/env/bin/python3 -m pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-xokvr6uk --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools>=40.8.0 wheel "cffi>=1.4.1; python_implementation != 'PyPy'"" failed with error code 1 in None
2022-01-13 21:22:25 +01:00
Hans-Christoph Steiner
5d09e70330
buildserver: give names to all provisioners 2022-01-13 21:22:23 +01:00
Hans-Christoph Steiner
97553c516f
provision-android-ndk: let script work when no NDKs will be installed
The other form of find gave:

# find $NDK_BASE -type f -executable -print0 | xargs -0 chmod a+x
chmod: missing operand after ‘a+x’
Try 'chmod --help' for more information.
2022-01-13 21:22:21 +01:00
Hans-Christoph Steiner
5514000376
buildserver: include packages in Dockerfile that Vagrant boxes have
The goal is to have the Docker base image and the Vagrant base box have the
same setup.
2022-01-13 21:22:20 +01:00
Hans-Christoph Steiner
7535d75b40
buildserver: run provision scripts in Dockerfile
fdroidserver#119
2022-01-13 21:22:15 +01:00
Hans-Christoph Steiner
839f5b109a
gitlab-ci: publish buildserver image to Docker Registry 2022-01-13 21:21:26 +01:00
Hans-Christoph Steiner
f20d3d249a
add Dockerfile to build a docker buildserver image
This is just the first step to getting full Docker support for everywhere
the buildserver is used.  This will at least let us replace the hacks that
are separately maintained in fdroid/ci-images-base and
fdroid/ci-images-client.
2022-01-13 21:21:17 +01:00
Hans-Christoph Steiner
4e310e3a59
buildserver: setup-env-vars: add var for ~vagrant for CI jobs
The CI jobs need to do a little setup based on the 'vagrant' user's $HOME.
2022-01-11 11:23:44 +01:00
Hans-Christoph Steiner
57447f18e1
buildserver: move buildserverid to provisioner
In order to support Docker, this should be able to operate without ssh,
e.g. using vagrant-communicator-docker.  This removes the buildserverid
hack and makes it a provisioner shell script.
2022-01-11 11:23:36 +01:00
Hans-Christoph Steiner
a375bae3c9 Merge branch 'fix_open_mr' into 'master'
Only ignore opening a second MR

See merge request fdroid/fdroidserver!1068
2021-12-30 19:40:22 +00:00
Jochen Sprickerhof
b73663967b Only ignore opening a second MR 2021-12-30 19:23:05 +00:00
Hans-Christoph Steiner
3720afbe5b Merge branch 'fix_open_mr' into 'master'
Don't open second MR for gradle (Closes: #914)

Closes #914

See merge request fdroid/fdroidserver!1066
2021-12-30 18:35:06 +00:00
Jochen Sprickerhof
be7e59e71a Add typing information for mypy 2021-12-30 11:17:57 +01:00
Jochen Sprickerhof
460dffe82b Don't open second MR for gradle (Closes: #914)
Traceback (most recent call last):
  File "/builds/fdroid/fdroidserver/./tests/gradle-release-checksums.py", line 130, in <module>
    mr = project.mergerequests.create({
  File "/usr/lib/python3/dist-packages/gitlab/exceptions.py", line 281, in wrapped_f
    raise error(e.error_message, e.response_code, e.response_body) from e
gitlab.exceptions.GitlabCreateError: 409: ['Another open merge request already exists for this source branch: !1064']
2021-12-30 10:00:46 +01:00
Izzy
5f43fdccd4 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.3.3

See merge request fdroid/fdroidserver!1062
2021-12-25 16:54:07 +00:00
fdroid-bot
56740af3ef gradle v7.3.3 2021-12-23 22:14:18 +00:00
Hans-Christoph Steiner
1388c2d987 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.3.2

See merge request fdroid/fdroidserver!1061
2021-12-23 22:13:39 +00:00
fdroid-bot
1bf39d46e2 gradle v7.3.2 2021-12-16 21:56:33 +00:00
Hans-Christoph Steiner
04a45ae745 Merge branch 'fix_pip_git_installation' into 'master'
Build translation files on install instead of distributing them in sdist

Closes #934

See merge request fdroid/fdroidserver!1014
2021-12-16 21:55:53 +00:00
FestplattenSchnitzel
565d9e4994
Format setup.py with Black 2021-12-16 20:34:38 +01:00
FestplattenSchnitzel
23a4135ccd
Compile translation files on install
Solution based on https://stackoverflow.com/questions/40051076/compile-translation-files-when-calling-setup-py-install
2021-12-16 20:13:24 +01:00
Michael Pöhn
dccfc2f712 Merge branch 'windows-install-fix' into 'master'
Add console_scripts to create .exe file during installation on Windows

See merge request fdroid/fdroidserver!1048
2021-12-09 11:24:58 +00:00
Hans-Christoph Steiner
c900d4a883
remove 'fdroid' from MANIFEST.in 2021-12-09 12:06:53 +01:00
Sergey Zolotarev
bd1f82fac5 Add console_scripts to create .exe file during installation on Windows 2021-12-09 11:02:00 +00:00
Jochen Sprickerhof
4dd9c488d3 Merge branch 'three-little-fixes' into 'master'
three little fixes

See merge request fdroid/fdroidserver!1052
2021-12-07 09:37:54 +00:00
Hans-Christoph Steiner
c54f9ea4ca mirror: make _run_wget() return to the dir it started in
This kind of function should not change the working environment, especially
since so much of the fdroidserver code assumes the current working directory
is the root of an fdroid repo.

It is used in fdroidserver/mirror.py with absolute paths always, so it
shouldn't change any existing use.  I found this issue by using it in a
plugin.
2021-12-07 10:24:27 +01:00
Hans-Christoph Steiner
319bf47a6b enable intel-android-extra-license on buildserver, it is DFSG-free
It is a BSD-3-clause:
38f9564932/android/repository/addon.xml (L568)
2021-12-07 10:24:27 +01:00
Hans-Christoph Steiner
778e600269 gitlab-ci: enable pyjks in lint_mypy job now that it is in backports 2021-12-07 10:24:27 +01:00
Jochen Sprickerhof
b6b3c9272b Merge branch 'fixes/sha256-sum-verify' into 'master'
Fix verify.py use sha256sum from common

See merge request fdroid/fdroidserver!1059
2021-12-06 08:48:53 +00:00
Romain Lebbadi-Breteau
b2eca0fc3b
remove useless import in verify.py 2021-12-04 18:26:26 -05:00
Romain Lebbadi-Breteau
3576d025fe
fix verify.py use sha256sum from common 2021-12-04 18:14:21 -05:00
Hans-Christoph Steiner
b281c4ec82 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.3.1

See merge request fdroid/fdroidserver!1056
2021-12-03 10:22:09 +00:00
fdroid-bot
6db38f3904 gradle v7.3.1 2021-12-03 10:08:22 +00:00
Hans-Christoph Steiner
0fb772fb8c Merge branch 'fix_ndk_not_found' into 'master'
Raise exception if the given NDK was not found

See merge request fdroid/fdroidserver!1054
2021-12-03 10:07:43 +00:00
Jochen Sprickerhof
2933880590 Raise exception if the given NDK was not found
Seen in

https://monitor.f-droid.org/builds/log/io.nekohasekai.sagernet/635#site-footer
2021-12-01 07:45:03 +01:00
Jochen Sprickerhof
60cf72a462 Merge branch 'fix-subdir-regex' into 'master'
Fix subproject regex to allow subdir without colon

See merge request fdroid/fdroidserver!1047
2021-11-30 08:28:17 +00:00
jugendhacker
b236773455 Fix subproject regex to allow subdir without colon 2021-11-30 08:28:17 +00:00
Hans-Christoph Steiner
455b9f7a04 Merge branch 'r23b' into 'master'
add ndk r23b

See merge request fdroid/fdroidserver!1049
2021-11-29 11:46:45 +00:00
linsui
9b0ef544bb add ndk r23b 2021-11-29 11:28:43 +00:00
Hans-Christoph Steiner
a391ac0d0f Merge branch 'fix_human_size' into 'master'
Parse single digit sizes

Closes #946

See merge request fdroid/fdroidserver!1050
2021-11-29 11:20:39 +00:00
Jochen Sprickerhof
a5deaa80d8 Parse single digit sizes
Closes: #946
2021-11-27 21:44:47 +01:00
Hans-Christoph Steiner
cd69692424 Merge branch 'TheLastProject-master-patch-73771' into 'master'
Add NSFW to allowed anti-features

See merge request fdroid/fdroidserver!1000
2021-11-25 13:25:24 +00:00
Sylvia van Os
3779481519 Renamed to NSFW as per https://gitlab.com/fdroid/admin/-/issues/252 2021-11-25 13:10:29 +00:00
Sylvia van Os
ec194ef6e6 Add AdultContent to allowed anti-features 2021-11-25 13:10:29 +00:00
Hans-Christoph Steiner
62e63b600b Merge branch 'drop_wiki' into 'master'
Drop code for the old wiki

See merge request fdroid/fdroidserver!1043
2021-11-24 17:29:57 +00:00
Jochen Sprickerhof
36a7847525 Suppress --wiki in fdroid build
This was already done for fdroid update in 00c2cc969.
2021-11-24 18:16:07 +01:00
Jochen Sprickerhof
32d2330bb5 Always write VM status
Before this the status.json only contained VM information with
fdroid build --wiki --server, after this a fdroid build --server is
enough.
2021-11-24 18:16:07 +01:00
Jochen Sprickerhof
b6f1f4231a Drop code for the old wiki 2021-11-24 18:16:07 +01:00
Hans-Christoph Steiner
6952a23c47 Merge branch 'Add-github-actions' into 'master'
Added Github actions/workflow to the nightly CI

See merge request fdroid/fdroidserver!1032
2021-11-24 07:54:57 +00:00
Ward Vanlerberghe
1c65fd8496 Added Github actions/workflow to the nightly CI 2021-11-24 07:54:57 +00:00
Hans-Christoph Steiner
1031106dee Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.3

See merge request fdroid/fdroidserver!1046
2021-11-22 13:46:10 +00:00
fdroid-bot
9a68c4aefc gradle v7.3 2021-11-22 07:57:10 +00:00
Hans-Christoph Steiner
823a7c6aae Merge branch 'fix_new_html5lib' into 'master'
Simplify index.html for new html5lib

See merge request fdroid/fdroidserver!1044
2021-11-22 07:56:30 +00:00
Jochen Sprickerhof
656c707636 Simplify index.html for new html5lib
Newer html5lib (used in html5print in the test_make_website) strip the
empty value, as it is valid html.
2021-11-19 18:34:23 +01:00
Jochen Sprickerhof
80e608a119 Merge branch 'fix_ci' into 'master'
[CI] install python3-matplotlib from apt

See merge request fdroid/fdroidserver!1045
2021-11-19 17:30:54 +00:00
Jochen Sprickerhof
6756f842e4 [CI] install python3-matplotlib from apt 2021-11-19 18:17:36 +01:00
Hans-Christoph Steiner
5aa12ea50a Merge branch 'fix_ssh' into 'master'
Add newline in ssh_config

See merge request fdroid/fdroidserver!1039
2021-11-04 09:29:27 +00:00
Jochen Sprickerhof
ae9a1df1aa Add newline in ssh_config
Otherwise both options end on the same line and are not used.
2021-11-04 09:10:57 +00:00
Hans-Christoph Steiner
c26345214f Merge branch 'ndk-unzip' into 'master'
NDK-Install: handle symbolic links correctly

See merge request fdroid/fdroidserver!1023
2021-11-03 08:30:33 +00:00
Gaurav Ujjwal
aead3310bd NDK Install: Handle symlinks present in NDK zip 2021-11-03 08:13:21 +00:00
Jochen Sprickerhof
b12ece1eba Merge branch 'ci' into 'master'
[CI] install python3-pil from apt in servergitmirrors

See merge request fdroid/fdroidserver!1035
2021-10-23 13:15:21 +00:00
Jochen Sprickerhof
46abffa0fa [CI] install python3-pil from apt in servergitmirrors
New version would need to be compiled, otherwise.
2021-10-23 15:02:57 +02:00
Jochen Sprickerhof
1033d6e163 Merge branch 'dry_run' into 'master'
Improve rewritemeta --help

See merge request fdroid/fdroidserver!1034
2021-10-23 12:45:57 +00:00
Jochen Sprickerhof
b8285ebd0e [CI] Install python3-pil from apt
New version would need to be compiled, otherwise.
2021-10-23 14:33:06 +02:00
Jochen Sprickerhof
e5dcf532b4 Improve rewritemeta --help 2021-10-23 14:08:07 +02:00
Jochen Sprickerhof
e036f31613 Merge branch 'git_prune' into 'master'
git prune branches in case of failure

See merge request fdroid/fdroidserver!1026
2021-10-14 12:42:38 +00:00
Jochen Sprickerhof
fa3cceb8e8 git prune branches in case of failure
git branches can be namespaces like directories on a filesystem and are
represented like that. Due to that there can't be a branch with the same
name as a namespace, i.e. foo and foo/bar.
If upstream moves from a branch to namespace, we need to prune the old
branch before fetching the new one.
This broke organic maps:

From https://github.com/organicmaps/organicmaps
 * [new branch]            android/huawei       -> origin/android/huawei
error: cannot lock ref 'refs/remotes/origin/fixes/all': 'refs/remotes/origin/fixes' exists; cannot create 'refs/remotes/origin/fixes/all'
 ! [new branch]            fixes/all            -> origin/fixes/all  (unable to update local ref)
   e2ac324b95..320a1db39b  master               -> origin/master
 * [new tag]               2021.10.09-2-android -> 2021.10.09-2-android
error: some local refs could not be updated; try running
 'git remote prune origin' to remove any old, conflicting branches
2021-10-14 12:42:29 +00:00
Jochen Sprickerhof
e8b7a648b7 Merge branch 'fix_ci' into 'master'
Fix servergitmirrors ci

See merge request fdroid/fdroidserver!1029
2021-10-14 12:42:13 +00:00
Jochen Sprickerhof
972bfe346f Fix servergitmirrors ci 2021-10-14 14:40:31 +02:00
Jochen Sprickerhof
724153a587 Merge branch 'tweak_logging' into 'master'
[checkupdates] Tweak logging

See merge request fdroid/fdroidserver!1025
2021-10-14 12:23:26 +00:00
Jochen Sprickerhof
45a20ab365 [checkupdates] Tweak logging
- Increase severity of version mismatch.
- Don't log that the process is done.
2021-10-14 12:11:01 +00:00
Hans-Christoph Steiner
78eb2d94c4 Merge branch 'ignore_windows_ci' into 'master'
Ignore failing Windows CI

See merge request fdroid/fdroidserver!1028
2021-10-14 12:09:44 +00:00
Jochen Sprickerhof
23bd62c31c [CI] fetchsrclibs use apt cffi 2021-10-14 13:55:51 +02:00
Jochen Sprickerhof
60532f0912 Ignore failing Windows CI 2021-10-14 13:40:19 +02:00
Jochen Sprickerhof
8a089691ea Merge branch 'genodeftest-master-patch-82391' into 'master'
Doc: Clarify wording example for config.yml

See merge request fdroid/fdroidserver!1024
2021-10-13 13:44:27 +00:00
Christian Stadelmann
a0a86aa5ec Clarify wording example for config.yml
Note: The old wording was applicable to the python version of this config file only.
2021-10-02 08:13:48 +00:00
Hans-Christoph Steiner
bd079c9311 Merge branch 'NoahAndrews-master-patch-97157' into 'master'
Handle error when parsing WebView icon

Closes #903

See merge request fdroid/fdroidserver!1018
2021-10-01 15:01:21 +00:00
Noah Andrews
75989ff59a
Handle error when parsing WebView icon
Fixes #903
2021-10-01 16:44:28 +02:00
Hans-Christoph Steiner
da10acfe2c
update: add test with APK for icon_id related exceptions 2021-10-01 16:44:14 +02:00
Hans-Christoph Steiner
80d238180b Merge branch 'obfusk-master-patch-85387' into 'master'
scanner: add com.google.mlkit to NON_FREE_GRADLE_LINES

See merge request fdroid/fdroidserver!1021
2021-10-01 13:11:16 +00:00
Felix C. Stegerman
dbfbc4163c scanner: add com.google.mlkit to NON_FREE_GRADLE_LINES 2021-10-01 13:10:45 +00:00
Felix C. Stegerman
5b86242dde Merge branch 'triple-t-flavours' into 'master'
copy_triple_t_store_metadata(): handle subdir + flavor

Closes fdroiddata#2487

See merge request fdroid/fdroidserver!1022
2021-09-29 21:53:26 +00:00
Felix C. Stegerman
c2ed538ea4 copy_triple_t_store_metadata(): handle subdir + flavor 2021-09-29 21:36:11 +00:00
Hans-Christoph Steiner
311e6a14f1 Merge branch 'black' into 'master'
Add CI job "black" for code format checks

See merge request fdroid/fdroidserver!998
2021-09-29 18:00:06 +00:00
FestplattenSchnitzel
ef20e1b329 Add CI job "black" for code format checks
The CI job will fail, if a file needs to be reformatted.
Only files already well formatted will be checked at the moment.
2021-09-25 15:45:37 +00:00
Hans-Christoph Steiner
c71c2465d3
tests: silence the linters 2021-09-20 10:51:54 +02:00
Hans-Christoph Steiner
cc666907a3
Merge 'fix-ndk-long-form-version' into 'master'
* fix-ndk-long-form-version:
  test whether NDK version parsing is working properly
  Fix invalid key error due to NDK versions in "revision" form  (e.g. 21.4.7075529)

fdroid/fdroidserver!1020
2021-09-20 10:20:07 +02:00
Hans-Christoph Steiner
d6fd165444 test whether NDK version parsing is working properly 2021-09-20 10:18:16 +02:00
Gaurav Ujjwal
07856dc0e0 Fix invalid key error due to NDK versions in "revision" form (e.g. 21.4.7075529)
First element in the 'NDKS' array does not have 'revision'  key, which results in 'KeyError' when accessed through subscript operator.
2021-09-19 09:44:37 +00:00
Hans-Christoph Steiner
714ab5622e Merge branch 'new-primary-mirror' into 'master'
mirror-to-mirror.sh: also sync to plug-mirror.rcac.purdue.edu

See merge request fdroid/fdroidserver!1017
2021-09-16 08:15:34 +00:00
Hans-Christoph Steiner
adbd7ba757
mirror-to-mirror.sh: also sync to plug-mirror.rcac.purdue.edu
This is the deployed script for pushing to the primary mirrors.  It starts
with the 'repo' section and runs all the rsyncs in parallel to each primary
mirror.  Once the 'repo' syncs are done, it does the same process for the
'archive' syncs. This adds a new primary push mirror at PLUG. #163

!800 !792
[skip ci]
2021-09-16 10:11:27 +02:00
Hans-Christoph Steiner
5b9fd12150 Merge branch 'fix_ci' into 'master'
Fix get_dir_size call

See merge request fdroid/fdroidserver!1015
2021-09-13 11:35:55 +00:00
Hans-Christoph Steiner
8ea154c125 fix IndexTest.test_gitlab_get_mirror_service_urls
This makes it actually call the method rather than mocking it.
2021-09-13 13:18:21 +02:00
Jochen Sprickerhof
0783f97bed Fix get_dir_size call
Regression of 7987c746.
2021-09-13 11:16:16 +00:00
Hans-Christoph Steiner
04ac629bd2 Merge branch 'obfusk-master-patch-89864' into 'master'
find_sdk_tools_cmd(): s/found/not found/ in error message

See merge request fdroid/fdroidserver!1016
2021-09-13 10:49:33 +00:00
Felix C. Stegerman
6bd8470d55 find_sdk_tools_cmd(): s/found/not found/ in error message 2021-09-12 22:40:50 +00:00
Jochen Sprickerhof
4ef8d1340f Merge branch 'submodules-on-host' into 'master'
build: run vcs.initsubmodules() on host as well

See merge request fdroid/fdroidserver!994
2021-09-11 15:46:56 +00:00
Felix C. Stegerman
53ff7de445 build: run vcs.initsubmodules() on host as well
otherwise, e.g. triple-t metadata in a submodule will not be available
on the host and thus not be used at all
2021-09-11 15:31:27 +00:00
Jochen Sprickerhof
07ddb8a6db Merge branch 'gitlab-pages-fix' into 'master'
index: do not include GitLab Pages mirror if it can't be deployed

See merge request fdroid/fdroidserver!1005
2021-09-11 15:31:12 +00:00
Hans-Christoph Steiner
7987c746de index: do not include GitLab Pages mirror if it can't be deployed
GitLab Pages sites are limited to 1GB on gitlab.com, so the CI/CD job will
fail if the repo is bigger than that.  It should not be included as a
mirror in that case.

https://docs.gitlab.com/ee/user/gitlab_com/#gitlab-pages
2021-09-11 15:30:55 +00:00
Jochen Sprickerhof
eb2fdc5a58 Merge branch 'fix_stretch_ruamel' into 'master'
Support ruamel from Debian stretch

See merge request fdroid/fdroidserver!996
2021-09-11 09:32:05 +00:00
Jochen Sprickerhof
28098c32e3 Support ruamel from Debian stretch 2021-09-11 09:16:15 +00:00
Jochen Sprickerhof
52eeb21763 Merge branch 'verbose_build' into 'master'
Provide verbose output with --verbose

Closes #882

See merge request fdroid/fdroidserver!1013
2021-09-10 17:01:00 +00:00
Jochen Sprickerhof
2b41dffcb2 Provide verbose output with --verbose
23b0b6bc added logging in case of an FDroidException on the build
server. This broke the log of apps that fail to build.

Prior to 23b0b6bc a failing build in the VM triggered a BuildException
on the server side but the build output was written to the log in the
finally part of build_server(). After 23b0b6bc the finally part writs
the build as well but the BuildException is caught in main() and the
build log is overwritten with the empty exception content. This patch
always adds the build log to the exception so it is written to the log.

Closes: #882
2021-09-10 14:10:46 +02:00
Hans-Christoph Steiner
63eaa5469c Merge branch 'missing_logs' into 'master'
Deploy build error log in case of an exception

See merge request fdroid/fdroidserver!1007
2021-08-27 20:09:12 +00:00
Jochen Sprickerhof
72df2639a2 Log traceback with exception 2021-08-27 13:29:07 +02:00
Jochen Sprickerhof
23b0b6bcaf Deploy build error log in case of an exception
This happened with us.spotco.fennec_dos_2912000 where no build log was
saved in the repo but the wiki has an error text. The error text was:

"Command '['rsync', '--recursive', '--perms', '--links', '--quiet', '--rsh=ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=FATAL -o IdentitiesOnly=yes -o PasswordAuthentication=no -p 2222 -i /home/fbuild/.vagrant.d/boxes/buildserver/0/virtualbox/vagrant_private_key', 'build/srclib/MozFennec', 'vagrant@127.0.0.1:/home/vagrant/build/srclib']' returned non-zero exit status 255."

Which is generated by the rsync subprocess call in build_server(). I
assume that it threw an Exception (not an FdroidException, because the
string "Build completed at" is not in the wiki site) that was caught in
main().
2021-08-27 08:05:28 +02:00
Jochen Sprickerhof
7c88bb09a5 Merge branch 'fix-backports' into 'master'
[buildserver] run update again after upgrade

See merge request fdroid/fdroidserver!1006
2021-08-25 12:59:17 +00:00
Felix C. Stegerman
779a592ea0
[buildserver] run update again after upgrade 2021-08-25 14:51:20 +02:00
Jochen Sprickerhof
e80269fb48 Merge branch 'dpkg_confdef' into 'master'
[makebuildserver] run dpkg with --force-confdef

See merge request fdroid/fdroidserver!1004
2021-08-24 07:16:16 +00:00
Jochen Sprickerhof
e1a67c9d97 [makebuildserver] run dpkg with --force-confdef
There has been a whitespace change in the accessibility.properties
configuration file as part of the openjdk-8-jre-headless
8u302-b08-1~deb9u1 version. As we modified the file, this broke
makebuildserver, asking for confirmation.
2021-08-23 22:48:14 +02:00
Hans-Christoph Steiner
4088c3a9ec Merge branch 'readme' into 'master'
Update README.md

See merge request fdroid/fdroidserver!997
2021-08-23 11:47:45 +00:00
FestplattenSchnitzel
83e16422a5 Update README.md
Add F-Droid icon, redesign, misc fixes
2021-08-23 11:44:48 +00:00
Hans-Christoph Steiner
e77e110a64 Merge branch 'using_defaults' into 'master'
Remove waring about no config file

See merge request fdroid/fdroidserver!999
2021-08-23 11:42:19 +00:00
Jochen Sprickerhof
b62124853a Remove waring about no config file
fdroid works fine without a config so there is no reason to warn about
it.
2021-08-23 11:41:44 +00:00
Hans-Christoph Steiner
4cf48cc9c4 Merge branch 'ndk-release-checksums.py' into 'master'
update NDK

See merge request fdroid/fdroidserver!1003
2021-08-23 11:02:17 +00:00
fdroid-bot
54bc6f05de Android NDK None (None) 2021-08-23 10:48:53 +00:00
Hans-Christoph Steiner
9b0de17807 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.2

See merge request fdroid/fdroidserver!1002
2021-08-23 10:48:14 +00:00
fdroid-bot
51d161d69a gradle v7.2 2021-08-21 19:29:30 +00:00
Jochen Sprickerhof
ab785c5ccd Merge branch 'checkupdates_warn_tag' into 'master'
[checkupdates] Warn if no version in latest tag

See merge request fdroid/fdroidserver!1001
2021-08-21 19:28:54 +00:00
Jochen Sprickerhof
fde48a1e77 [checkupdates] Warn if no version in latest tag 2021-08-21 08:23:27 +02:00
Hans-Christoph Steiner
5e35c20d5d Merge branch 'fix-issuebot-48' into 'master'
import: fix error when using python3-git from stretch

Closes #48 and issuebot#48

See merge request fdroid/fdroidserver!993
2021-08-10 07:58:12 +00:00
Hans-Christoph Steiner
3283ce2510
import: fix error when using python3-git from stretch
closes https://gitlab.com/fdroid/issuebot/-/issues/48#note_646592031
closes issuebot#48
2021-08-09 16:27:56 +02:00
Hans-Christoph Steiner
c4d3e075cb Merge branch 'fix_update' into 'master'
Don't fail fdroid update on empty repository

See merge request fdroid/fdroidserver!990
2021-08-05 16:18:22 +00:00
Jochen Sprickerhof
cacbe88b8c Don't fail fdroid update on empty repository
Steps to reproduce:

$ git init
$ fdroid update --create-key
2021-08-05 16:05:28 +00:00
Chirayu Desai
bbda73f6c7 Merge branch 'AllowedSigningKeys' into 'master'
add AllowedSigningKeys metadata for enforcing APK signatures

See merge request fdroid/fdroidserver!984
2021-08-05 15:35:09 +00:00
Hans-Christoph Steiner
a56d377c9e
update: modernize options handling in tests
This moves everything to the Options class, and resets the options between
test runs.
2021-08-05 16:44:40 +02:00
Hans-Christoph Steiner
3b95d3de64
update: AllowedAPKSigningKeys metadata to enforce APK signers
This field lets you specify which signing certificates should be
trusted for APKs in a binary repo.
2021-08-05 16:43:48 +02:00
Hans-Christoph Steiner
074ea8cae3
metadata: remove unused fields and types
BuildVersion and UseBuilt were only ever used in the .txt format, which is
gone.
2021-08-05 14:24:45 +02:00
Hans-Christoph Steiner
0d555a2fe2 Merge branch 'fix-triple-t-some-more' into 'master'
fix copy_triple_t_store_metadata()

See merge request fdroid/fdroidserver!992
2021-08-05 09:30:37 +00:00
Felix C. Stegerman
d518971204
add test_insert_triple_t_anysoftkeyboard() 2021-08-04 17:33:38 +02:00
Felix C. Stegerman
ee18afe8dd
copy_triple_t_store_metadata(): also look in $subdir/*/src/*/play 2021-08-04 00:12:17 +02:00
Felix C. Stegerman
4c4a283ae2
update test_insert_triple_t_multiple_metadata() test data 2021-08-03 20:53:56 +02:00
Felix C. Stegerman
ac2b5cb7de
fix copy_triple_t_store_metadata() 2021-08-03 20:25:23 +02:00
Jochen Sprickerhof
884870e74e Merge branch 'ci_fix' into 'master'
Fix CheckupdatesTest

See merge request fdroid/fdroidserver!988
2021-07-29 10:06:25 +00:00
Jochen Sprickerhof
121e06e4b7 Fix CheckupdatesTest 2021-07-29 11:52:22 +02:00
Jochen Sprickerhof
badc40b816 Merge branch 'checkupdates_disabled' into 'master'
[checkupdates] Don't fail for disabled apps

See merge request fdroid/fdroidserver!987
2021-07-29 09:49:11 +00:00
Jochen Sprickerhof
16f8d50194 [checkupdates] make no version information an error 2021-07-29 11:38:15 +02:00
Jochen Sprickerhof
58dcb4c2a0 [checkupdates] Don't fail for disabled apps 2021-07-29 11:37:34 +02:00
Jochen Sprickerhof
93bf481f8b Merge branch 'checkupdates_exit_code' into 'master'
[checkupdates] Cleanup code

See merge request fdroid/fdroidserver!986
2021-07-28 21:02:44 +00:00
Jochen Sprickerhof
44a0e7e74f [checkupdates] Simplify logic in check_http 2021-07-28 00:09:40 +02:00
Jochen Sprickerhof
8f836b3b01 [checkupdates] Move log messages into method 2021-07-28 00:09:40 +02:00
Jochen Sprickerhof
ae98844943 [checkupdates] Raise exception instead of returning an error 2021-07-28 00:09:40 +02:00
Jochen Sprickerhof
6f7a1ecf01 [checkupdates] Don't catch exceptions
Basically moves all code one level up.
2021-07-28 00:09:40 +02:00
Jochen Sprickerhof
a2db8f4a62 [checkupdates] Exit 1 in case of errors 2021-07-28 00:09:40 +02:00
Hans-Christoph Steiner
e19a66bec6 Merge branch 'checkupdates_flavours' into 'master'
Support multiple flavours in parse_androidmanifests

See merge request fdroid/fdroidserver!985
2021-07-27 15:49:18 +00:00
Jochen Sprickerhof
331b4830dd Support multiple flavours in parse_androidmanifests
Previously only the last flavour was checked.
2021-07-24 21:20:19 +02:00
Hans-Christoph Steiner
1ad0e7689a Merge branch 'sdk31' into 'master'
Add build-tools;31.0.0 and platforms;android-31

See merge request fdroid/fdroidserver!983
2021-07-22 15:18:35 +00:00
linsui
576ca7ad13 Add build-tools;31.0.0 and platforms;android-31 2021-07-22 19:26:32 +08:00
Hans-Christoph Steiner
62149e294c Merge branch 'apkFlavor' into 'master'
New com.jens.automation2 test case

See merge request fdroid/fdroidserver!880
2021-07-06 08:44:10 +00:00
Pierre Rudloff
c227fedb97 Add new test case to manifest 2021-07-06 08:30:08 +00:00
Pierre Rudloff
d04c3f65c2 New com.jens.automation2 test case 2021-07-06 08:30:08 +00:00
Hans-Christoph Steiner
5e5a9b36ec Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.1.1

See merge request fdroid/fdroidserver!982
2021-07-05 17:18:22 +00:00
fdroid-bot
f8f03420ba gradle v7.1.1 2021-07-05 17:04:16 +00:00
Hans-Christoph Steiner
3627a98dca Merge branch 'obfusk-master-patch-63762' into 'master'
fix copy_triple_t_store_metadata() w/ multiple apps in same repo

See merge request fdroid/fdroidserver!981
2021-07-05 17:03:29 +00:00
Felix C. Stegerman
73f28a611c
add test_insert_triple_t_multiple_metadata() 2021-07-03 21:20:18 +02:00
Felix C. Stegerman
051905620d fix copy_triple_t_store_metadata() w/ multiple apps in same repo 2021-07-02 14:34:34 +00:00
Hans-Christoph Steiner
fa4fdd0773
version 2.1a0 2021-07-01 17:21:35 +02:00
Hans-Christoph Steiner
74cb0e3d59
update CHANGELOG 2021-07-01 17:21:26 +02:00
Jochen Sprickerhof
7872a3c8aa Merge branch 'random-fixes-on-my-machine' into 'master'
Random fixes on my machine

See merge request fdroid/fdroidserver!979
2021-07-01 12:59:30 +00:00
Hans-Christoph Steiner
7ed75abc2f
gitlab-ci: use CVC for fdroid build job for more reliably runs 2021-07-01 14:45:39 +02:00
Hans-Christoph Steiner
40c77892a2
do not crash when config.yml is 0 bytes or empty of data 2021-07-01 14:45:35 +02:00
Hans-Christoph Steiner
5267699d81
index: make download_repo_index() handle common URL mistakes 2021-07-01 14:43:58 +02:00
Hans-Christoph Steiner
a71409815e
bash-completion: complete *.apk files for fdroid signatures 2021-07-01 14:43:54 +02:00
Hans-Christoph Steiner
da48e44e56 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!980
2021-07-01 10:32:29 +00:00
DankXylese
f60f73f4a0 Translated using Weblate: Ukrainian (uk) by DankXylese <dankxylese@slapmywang.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: DankXylese <dankxylese@slapmywang.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Ihor Hordiichuk
4df75655f8 Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Tymofij Lytvynenko
15234c77d2 Translated using Weblate: Ukrainian (uk) by Tymofij Lytvynenko <till.svit@gmail.com>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Ukrainian (uk) by Tymofij Lytvynenko <till.svit@gmail.com>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Tymofij Lytvynenko <till.svit@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
mondstern
7c037cffcf Translated using Weblate: Spanish (es) by mondstern <mondstern@snopyta.org>
Currently translated at 99.1% (571 of 576 strings)

Translated using Weblate: Czech (cs) by mondstern <mondstern@snopyta.org>

Currently translated at 8.3% (48 of 576 strings)

Translated using Weblate: Czech (cs) by mondstern <mondstern@snopyta.org>

Currently translated at 7.2% (42 of 576 strings)

Translated using Weblate: Italian (it) by mondstern <mondstern@snopyta.org>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: mondstern <mondstern@snopyta.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Andrey
07a3ddad5f Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Andrey <andrey@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Чтабс
de37dc27f8 Translated using Weblate: Russian (ru) by Чтабс <chtabs2k19@gmail.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Чтабс <chtabs2k19@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
S3aBreeze
69ffe638f0 Translated using Weblate: Russian (ru) by S3aBreeze <paperwork@evilcorp.ltd>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: S3aBreeze <paperwork@evilcorp.ltd>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Simona Iacob
95ef78b693 Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 64.2% (370 of 576 strings)

Co-authored-by: Simona Iacob <s@zp1.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Christian Eichert
a787147f3c Translated using Weblate: Romanian (ro) by Christian Eichert <c@zp1.net>
Currently translated at 11.6% (67 of 576 strings)

Translated using Weblate: Romanian (ro) by Christian Eichert <c@zp1.net>

Currently translated at 9.0% (52 of 576 strings)

Translated using Weblate: Romanian (ro) by Christian Eichert <c@zp1.net>

Currently translated at 8.8% (51 of 576 strings)

Translated using Weblate: Romanian (ro) by Christian Eichert <c@zp1.net>

Currently translated at 5.7% (33 of 576 strings)

Translated using Weblate: Romanian (ro) by Christian Eichert <c@zp1.net>

Currently translated at 5.3% (31 of 576 strings)

Translated using Weblate: Romanian (ro) by Christian Eichert <c@zp1.net>

Currently translated at 5.0% (29 of 576 strings)

Co-authored-by: Christian Eichert <c@zp1.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
ssantos
5b7e79f3d5 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Eduardo Rodrigues
75a9723061 Translated using Weblate: Portuguese (pt) by Eduardo Rodrigues <edu.rodrigues2580@gmail.com>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Portuguese (Brazil) (pt_BR) by Eduardo Rodrigues <edu.rodrigues2580@gmail.com>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Eduardo Rodrigues <edu.rodrigues2580@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
WaldiS
d13c69c5d1 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
x
2703023bea Translated using Weblate: Italian (it) by x <hardwired1.0@protonmail.com>
Currently translated at 71.5% (412 of 576 strings)

Co-authored-by: x <hardwired1.0@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
mondstern
e5ca5a5075 Translated using Weblate: Italian (it) by mondstern <mondstern@snopyta.org>
Currently translated at 71.5% (412 of 576 strings)

Co-authored-by: mondstern <mondstern@snopyta.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
IvanDan
52566818d6 Translated using Weblate: Italian (it) by IvanDan <ivandanza@gmail.com>
Currently translated at 64.4% (371 of 576 strings)

Co-authored-by: IvanDan <ivandanza@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
VfBFan
c08d47c3cc Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Follpvosten
85aed2ca67 Translated using Weblate: German (de) by Follpvosten <wolfi@karpador.xyz>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Follpvosten <wolfi@karpador.xyz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Roman Leo
916a0fd063 Translated using Weblate: German (de) by Roman Leo <roman.leo@gmx.de>
Currently translated at 99.8% (575 of 576 strings)

Co-authored-by: Roman Leo <roman.leo@gmx.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
TobiGr
5b70b65d85 Translated using Weblate: German (de) by TobiGr <tobigr@mail.de>
Currently translated at 99.8% (575 of 576 strings)

Co-authored-by: TobiGr <tobigr@mail.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
forght
6ba354fefa Translated using Weblate: German (de) by forght <forght@posteo.de>
Currently translated at 98.9% (570 of 576 strings)

Co-authored-by: forght <forght@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
VfBFan
94c6072058 Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 98.9% (570 of 576 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Ceeee
c9ce31e416 Translated using Weblate: German (de) by Ceeee <marius.romanus@gmx.de>
Currently translated at 98.9% (570 of 576 strings)

Co-authored-by: Ceeee <marius.romanus@gmx.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
TobiGr
9a5aedf5f2 Translated using Weblate: German (de) by TobiGr <tobigr@mail.de>
Currently translated at 99.8% (575 of 576 strings)

Co-authored-by: TobiGr <tobigr@mail.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
VfBFan
f8cf7c4095 Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 99.8% (575 of 576 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
C. Rüdinger
32ccb81252 Translated using Weblate: German (de) by C. Rüdinger <Mail-an-CR@web.de>
Currently translated at 99.8% (575 of 576 strings)

Co-authored-by: C. Rüdinger <Mail-an-CR@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
Ceeee
a4152e9b9d Translated using Weblate: German (de) by Ceeee <marius.romanus@gmx.de>
Currently translated at 99.8% (575 of 576 strings)

Co-authored-by: Ceeee <marius.romanus@gmx.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:17:28 +02:00
fossdd
e4345ade14 Translated using Weblate: German (de) by fossdd <fossdd@tutanota.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: fossdd <fossdd@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:16:50 +02:00
TobiGr
9b76a2a0a6 Translated using Weblate: German (de) by TobiGr <tobigr@mail.de>
Currently translated at 99.6% (574 of 576 strings)

Co-authored-by: TobiGr <tobigr@mail.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:16:50 +02:00
FW
25474016b1 Translated using Weblate: German (de) by FW <weblate.scordium@slmail.me>
Currently translated at 99.6% (574 of 576 strings)

Co-authored-by: FW <weblate.scordium@slmail.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:16:50 +02:00
TobiGr
f99d464a00 Translated using Weblate: German (de) by TobiGr <tobigr@mail.de>
Currently translated at 96.8% (558 of 576 strings)

Co-authored-by: TobiGr <tobigr@mail.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:16:50 +02:00
FW
de7ffcbe1d Translated using Weblate: German (de) by FW <weblate.scordium@slmail.me>
Currently translated at 96.7% (557 of 576 strings)

Translated using Weblate: German (de) by FW <weblate.scordium@slmail.me>

Currently translated at 95.8% (552 of 576 strings)

Translated using Weblate: German (de) by FW <weblate.scordium@slmail.me>

Currently translated at 95.4% (550 of 576 strings)

Co-authored-by: FW <weblate.scordium@slmail.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:16:50 +02:00
forght
29048fdeec Translated using Weblate: German (de) by forght <forght@posteo.de>
Currently translated at 95.4% (550 of 576 strings)

Co-authored-by: forght <forght@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-07-01 12:16:50 +02:00
Besnik Bleta
a148592243 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.7% (563 of 576 strings)

Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>

Currently translated at 96.5% (556 of 576 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2021-07-01 12:16:50 +02:00
Jochen Sprickerhof
7101cc863a Merge branch 'obfusk-master-patch-58664' into 'master'
has_known_vulnerability(): check .so files with version in filename

Closes #915

See merge request fdroid/fdroidserver!977
2021-06-28 18:53:49 +00:00
Felix C. Stegerman
28740ee036 has_known_vulnerability(): check .so files with version in filename 2021-06-28 18:53:22 +00:00
Jochen Sprickerhof
e90212fb3a Merge branch 'partial-black-reformat' into 'master'
run black to reformat code that does not have WIP merge requests

See merge request fdroid/fdroidserver!978
2021-06-28 18:52:39 +00:00
Hans-Christoph Steiner
307cf8958c
run black to reformat code that does not have WIP merge requests 2021-06-28 18:57:56 +02:00
Jochen Sprickerhof
2e6cad57aa Merge branch 'checkupdates_submodule' into 'master'
[checkupdates] Ignore broken submodule

See merge request fdroid/fdroidserver!976
2021-06-26 07:10:12 +00:00
Jochen Sprickerhof
70a11b3d79 Ignore ~/.gitconfig in tests and drop version test
git version 2.3 was released in 2015.
2021-06-25 13:22:58 +02:00
Jochen Sprickerhof
674786db96 [checkupdates] Ignore broken submodule
In case the app repository has a broken submodule, checkupdates failed
and did not search for any version updates. Ignoring the error let's us
at least find new version in the main repo (which is probably the right
place anyhow) and thus an improvement.
2021-06-25 12:15:41 +02:00
Hans-Christoph Steiner
ecc21489d4
fix pydocstyle 2021-06-25 12:11:50 +02:00
Hans-Christoph Steiner
3e7ce8ce31
merge scan_apk doc string updates 2021-06-25 09:28:48 +02:00
Hans-Christoph Steiner
578ff7069f Merge branch 'master' into 'docs-numpy'
# Conflicts:
#   fdroidserver/update.py
2021-06-25 07:25:10 +00:00
Hans-Christoph Steiner
a8847207aa Merge branch 'scan_apk' into 'master'
add require_signature param to scan_apk

See merge request fdroid/fdroidserver!973
2021-06-25 07:11:53 +00:00
linsui
03c3e45116 add require_signature param to scan_apk 2021-06-25 07:10:18 +00:00
Jochen Sprickerhof
acb123e9f6 Merge branch 'two-fixes' into 'master'
Two fixes

See merge request fdroid/fdroidserver!975
2021-06-25 06:27:34 +00:00
Benedikt Brückmann
675d034ac7 Fix errors from merge and review 2021-06-25 06:42:17 +02:00
Benedikt Brückmann
3d85b91dc4 rewrite docstrings to match numpy style guide 2021-06-25 06:28:47 +02:00
Benedikt Brückmann
9038161b70 apply numpy docstyle 2021-06-25 06:28:47 +02:00
Benedikt Brückmann
01b9fb1549 Fix pep8 whitespace errors 2021-06-25 06:28:47 +02:00
Benedikt Brückmann
1e943a22df rewrite docstrings to match numpy style guide 2021-06-25 06:28:47 +02:00
Benedikt Brückmann
d168b9c05b rewrite docstrings to match numpy style guide 2021-06-25 06:28:43 +02:00
Hans-Christoph Steiner
5e1c322f27
this codebase has started to use things introduced in Python 3.5 2021-06-24 21:34:36 +02:00
Hans-Christoph Steiner
9500b9d2e9
gradle-release-checksums.py: check for GitLab token before committing 2021-06-24 21:34:34 +02:00
Hans-Christoph Steiner
660520e3e1
gitlab-ci: switch ubuntu_lts_ppa job to keyserver.ubuntu.com
fixes:

Executing: /tmp/apt-key-gpghome.ZwePp5ymqm/gpg.1.sh --keyserver hkp://pool.sks-keyservers.net --recv-key 9AAC253193B65D4DF1D0A13EEC4632C79C5E0151
gpg: keyserver receive failed: No name

https://gitlab.com/fdroid/fdroidserver/-/jobs/1374517971
2021-06-24 21:34:29 +02:00
Jochen Sprickerhof
ecadad63f1 Merge branch 'get_release_filename' into 'master'
fix invalid extension of output apk

Closes fdroiddata#2410

See merge request fdroid/fdroidserver!969
2021-06-24 13:42:28 +00:00
linsui
763a2ee80d fix invalid extension of output apk 2021-06-24 13:42:10 +00:00
Hans-Christoph Steiner
ab0fe06343 Merge branch 'format' into 'master'
Make lint work with black

See merge request fdroid/fdroidserver!971
2021-06-24 12:29:02 +00:00
linsui
33137a8516 ignore E203 for black 2021-06-24 12:15:01 +00:00
linsui
e0461ca1bf Make lint max-line-length to 88 for black 2021-06-24 12:15:01 +00:00
linsui
736f244634 fix vscode setting 2021-06-24 12:15:01 +00:00
Jochen Sprickerhof
958fd17232 Merge branch 'version_unknown' into 'master'
[checkupdates] Use tag if version is 'Unknown'

See merge request fdroid/fdroidserver!970
2021-06-20 08:41:58 +00:00
Jochen Sprickerhof
b49c3741bd [checkupdates] Use tag if version is 'Unknown'
Regression from cd405cc9.
Parse_androidmanifests() can return 'Unknown' or 'Ignore' if it did not
find a version name. The check_tags() always returned the tag and
checkupdates_app() replaced the version by the tag in the 'Unknown'
case. Since cd405cc9 the tag is the hash and so the version would become
the hash as well. This patch moves the 'Unknown' check directly after
the Parse_androidmanifests().
2021-06-20 08:49:49 +02:00
Jochen Sprickerhof
63444f8654 Merge branch 'allowlist-blocklist' into 'master'
switch to allow/block list terminology throughout code base

See merge request fdroid/fdroidserver!964
2021-06-18 18:27:45 +00:00
Hans-Christoph Steiner
78d37bb13b switch to allow/block list terminology throughout code base
allowlist and blocklist are much clearer terms with no cultural baggage.
This changes all "whitelist" references to "allowlist", and all "blacklist"
references to "blocklist".
2021-06-18 18:26:50 +00:00
Hans-Christoph Steiner
8667073188 Merge branch 'port-to-windows' into 'master'
some fixes to help port to Windows

See merge request fdroid/fdroidserver!678
2021-06-18 09:26:16 +00:00
Hans-Christoph Steiner
fc989d94b3
gitlab-ci: add Windows job 2021-06-18 11:12:27 +02:00
Hans-Christoph Steiner
1300771bad
'import resource' only where its used, Windows does not have it 2021-06-18 11:12:25 +02:00
Hans-Christoph Steiner
36849b2fba
skip tests on Windows that need bash 2021-06-18 11:12:22 +02:00
Hans-Christoph Steiner
1f5534d060
require config.yml use UTF-8 as encoding
config.yml requires ASCII or UTF-8 encoding because this code does not
auto-detect the file's encoding.  That is left up to the YAML library.
YAML allows ASCII, UTF-8, UTF-16, and UTF-32 encodings.  Since it is a
good idea to manage config.yml (WITHOUT PASSWORDS!) in git, it makes
sense to use a globally standard encoding.
2021-06-18 11:12:20 +02:00
Hans-Christoph Steiner
48c4354629
always open Android source files as UTF-8
Android Studio recommends "you use UTF-8 encoding whenever possible",
so this code assumes the files use UTF-8.  UTF-8 is also the default
encoding on GNU/Linux and macOS.
https://sites.google.com/a/android.com/tools/knownissues/encoding

Windows will probably default to UTF16, since that's the native
encoding for files.  So forcing things to use UTF-8 should help
compatibility.
2021-06-18 11:12:18 +02:00
Gerhard Olsson
0c31c4a5ab
win fixes 2021-06-18 10:30:59 +02:00
Hans-Christoph Steiner
1e1f0db347
stats/known_apks.txt must be in UTF-8 format on all platforms 2021-06-18 10:30:57 +02:00
Hans-Christoph Steiner
a6d35a7ee1
metadata: always open metadata files as UTF-8
Windows seems to require this, otherwise this happens:

Traceback (most recent call last):

  File "tests/update.TestCase", line 737, in test_translate_per_build_anti_features

    apps = fdroidserver.metadata.read_metadata(xref=True)

  File "C:\Users\travis\build\fdroidtravis\fdroidserver\fdroidserver\metadata.py", line 813, in read_metadata

    app = parse_metadata(metadatapath, appid in check_vcs, refresh)

  File "C:\Users\travis\build\fdroidtravis\fdroidserver\fdroidserver\metadata.py", line 1023, in parse_metadata

    parse_yaml_metadata(mf, app)

  File "C:\Users\travis\build\fdroidtravis\fdroidserver\fdroidserver\metadata.py", line 1073, in parse_yaml_metadata

    yamldata = yaml.safe_load(mf)

  File "C:\python37\lib\site-packages\yaml\__init__.py", line 162, in safe_load

    return load(stream, SafeLoader)

  File "C:\python37\lib\site-packages\yaml\__init__.py", line 112, in load

    loader = Loader(stream)

  File "C:\python37\lib\site-packages\yaml\loader.py", line 34, in __init__

    Reader.__init__(self, stream)

  File "C:\python37\lib\site-packages\yaml\reader.py", line 85, in __init__

    self.determine_encoding()

  File "C:\python37\lib\site-packages\yaml\reader.py", line 124, in determine_encoding

    self.update_raw()

  File "C:\python37\lib\site-packages\yaml\reader.py", line 178, in update_raw

    data = self.stream.read(size)

  File "C:\python37\lib\encodings\cp1252.py", line 23, in decode

    return codecs.charmap_decode(input,self.errors,decoding_table)[0]

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 37: character maps to <undefined>
2021-06-18 10:30:55 +02:00
Hans-Christoph Steiner
c12007c260
publish: use platform-neutral newlines 2021-06-18 10:30:52 +02:00
Hans-Christoph Steiner
4514983e58
fix typo 2021-06-18 10:30:50 +02:00
Hans-Christoph Steiner
1abbc9732e
metadata: add test_build_ndk_path 2021-06-18 10:30:44 +02:00
Hans-Christoph Steiner
1236f89896 Merge branch 'vscode' into 'master'
add vscode settings

Closes #909

See merge request fdroid/fdroidserver!965
2021-06-18 06:51:30 +00:00
linsui
466c8a44d7 add vscode settings 2021-06-18 06:50:50 +00:00
Jochen Sprickerhof
0ea4839fbb Merge branch 'billing' into 'master'
NON_FREE_GRADLE_LINES: add com.android.billingclient

See merge request fdroid/fdroidserver!958
2021-06-17 11:53:18 +00:00
linsui
7c831c11dd NON_FREE_GRADLE_LINES: add com.android.billingclient 2021-06-17 11:53:03 +00:00
Jochen Sprickerhof
f44bd8d928 Merge branch 'test_version_update' into 'master'
[checkupdates] Only update if version code is grater

See merge request fdroid/fdroidserver!963
2021-06-17 11:52:48 +00:00
Jochen Sprickerhof
39c55d799b [checkupdates] Only update if version code is grater
Don't change the current versions in case there is an error in the check_* methods or upstream screwed up.
2021-06-17 11:52:37 +00:00
Jochen Sprickerhof
37e3142610 Merge branch 'checkupdates_use_hash' into 'master'
Use hash of tag when adding new version

See merge request fdroid/fdroidserver!956
2021-06-17 11:51:28 +00:00
Jochen Sprickerhof
cd405cc93e Use hash of tag when adding new version
Also extend getref with a refname parameter and implement it for
vcs_git.
2021-06-17 11:51:18 +00:00
Jochen Sprickerhof
35cf7f289e Merge branch 'fix_gotorevisionx' into 'master'
Ignore git submodule failure in gotorevisionx

See merge request fdroid/fdroidserver!955
2021-06-16 09:02:02 +00:00
Jochen Sprickerhof
3809b4d424 Ignore git submodule failure in gotorevisionx
gotorevisionx tries to clean up the git repo before checking out a new
revision. In b848b99ba this was changed to reset and clean any submodule
as well. In case upstream has a broken submodule configuration this
could fail and we can't checkout the new revision. As we are doing a
reset and clean after checking out the new revision anyhow, this change
ignores submodule errors before the checkout and only makes sure that
the main repo is reset and clean.

This broke checkupdates for apps where old versions had broken
submodules. It checkout out the old version and got stuck, not able to
checkout any other version.
2021-06-15 20:39:18 +02:00
Jochen Sprickerhof
02a63a2ec0 Merge branch 'emtpy_checkupdatedata' into 'master'
[checkupdates] UpdateCheckData tag for verocode if no regex

See merge request fdroid/fdroidserver!962
2021-06-15 18:21:53 +00:00
Jochen Sprickerhof
cebdcdd67c [checkupdates] UpdateCheckData tag for verocode if no regex
Use the tag as the version code if no regex was specified. This allows:

UpdateCheckData: '|||'

meaning the tag should be used for version code and name.
2021-06-15 19:27:29 +02:00
Hans-Christoph Steiner
0c484f927e Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.1

See merge request fdroid/fdroidserver!959
2021-06-15 10:45:52 +00:00
fdroid-bot
da820ace2e gradle v7.1 2021-06-15 06:54:38 +00:00
Jochen Sprickerhof
188e163b1a Merge branch 'tag_sort_version' into 'master'
latesttags revert to git log and fix comma handling

See merge request fdroid/fdroidserver!960
2021-06-15 06:53:58 +00:00
Jochen Sprickerhof
4e97b58d8c latesttags revert to git log and fix comma handling
2de34312 tried to fix the comma handling by relying on git tag --sort.
This did not work out so this reverts to the method used before.
2021-06-15 08:39:59 +02:00
Jochen Sprickerhof
09987f1fc7 Merge branch 'git_latesttags' into 'master'
Use git tag in latesttags

See merge request fdroid/fdroidserver!954
2021-06-14 18:56:59 +00:00
Jochen Sprickerhof
2de3431296 Use git tag in latesttags 2021-06-14 18:56:59 +00:00
Hans-Christoph Steiner
89762f4d48 Merge branch 'fix_flavour' into 'master'
Fix matching substring flavour detection

Closes #899 and #912

See merge request fdroid/fdroidserver!957
2021-06-14 12:49:45 +00:00
Jochen Sprickerhof
1e6de7eb34 Support '{' in extra line in parse_androidmanifests
If the flavour group starts in a separate line don't count it as a
second group.

Closes: #899
2021-06-13 07:23:42 +02:00
Jochen Sprickerhof
0fefecde1e Fix matching substring flavour detection
com.github.jameshnsears.quoteunquote defines flavours 'fdroid' and
'fdroidS'. The old code used flavour in line, which matches both and the
wrong one was selected.

Closes: #912
2021-06-13 00:09:02 +02:00
Hans-Christoph Steiner
a21c2c5ff1 Merge branch 'fix_pathlib' into 'master'
[lint] convert path to Path first

See merge request fdroid/fdroidserver!953
2021-06-09 17:08:47 +00:00
Jochen Sprickerhof
46ebdd701a [lint] convert path to Path first
Fixes a lot of undetected extlibs.
Regression of 6bafb036.
2021-06-09 17:49:59 +02:00
Jochen Sprickerhof
14cfa11b68 Merge branch 'tag_UpdateCheckData' into 'master'
[checkupdates] UpdateCheckData use tag as default version

See merge request fdroid/fdroidserver!949
2021-06-09 12:20:15 +00:00
Jochen Sprickerhof
bdec7d8652 [checkupdates] UpdateCheckData use tag by default
Use the tag as version, if no version file was specified:

UpdateCheckData: app/build.gradle|versionCode\s(\d+)||

Extract version from tag, if a regex was specified:

UpdateCheckData: app/build.gradle|versionCode\s(\d+)||Android-([\d.]+)

Use the tag for both if no file was specified:

UpdateCheckData: |\+(\d+)||Android-([\d.]+)
2021-06-09 14:02:02 +02:00
Hans-Christoph Steiner
b7a4883c09 Merge branch 'fix_versioncode_regex' into 'master'
Don't allow '_' in first place of version code

See merge request fdroid/fdroidserver!950
2021-06-09 11:16:32 +00:00
Jochen Sprickerhof
a9a336a12b Don't allow '_' in first place of version code
Fixes a regression of 2cb0ff45. Example:

versionCode project.versionCode_plus

931b0a3087/app/build.gradle (L38)
2021-06-09 11:04:25 +00:00
Hans-Christoph Steiner
a946ae2b44 Merge branch 'as_posix' into 'master'
use .as_posix() to convert to posix path str

See merge request fdroid/fdroidserver!946
2021-06-09 11:03:04 +00:00
linsui
bf9cbc87a9 use .as_posix() 2021-06-09 10:51:28 +00:00
Hans-Christoph Steiner
86b053291d Merge branch 'mypy-from-debian' into 'master'
gitlab-ci: use mypy from Debian/bullseye to prevent random breakage

See merge request fdroid/fdroidserver!952
2021-06-09 10:51:12 +00:00
Hans-Christoph Steiner
ac86a2af89
gitlab-ci: use mypy from Debian/bullseye to prevent random breakage
mypy 0.901 was released and everything broke:
https://gitlab.com/linsui/fdroidserver/-/jobs/1330206567

My point is to reduce the number of false job fails like this one. We
have a lot of checkers running, I really think they need to prove they are
adding value before we invest any time maintaining them. mypy is still
"wait and see" in terms of the adding any value.

!951
2021-06-09 12:35:50 +02:00
Hans-Christoph Steiner
bcd3e89614
gitlab-ci: fix whitespace 2021-06-09 12:25:00 +02:00
Jochen Sprickerhof
799ceda731 Merge branch 'fix_UpdateCheckData' into 'master'
[checkupdates] UpdateCheckData warn if file was not found

See merge request fdroid/fdroidserver!948
2021-06-09 10:09:45 +00:00
Jochen Sprickerhof
69a0a7da39 [checkupdates] UpdateCheckData warn if file was not found
Instead of throwing an exception.
2021-06-09 11:52:11 +02:00
Hans-Christoph Steiner
2bdd569eb0 Merge branch 'lint' into 'master'
lint.py: use pathlib and support Windows

See merge request fdroid/fdroidserver!947
2021-06-09 08:53:38 +00:00
linsui
6bafb036ee lint.py: use pathlib and support Windows 2021-06-09 15:46:52 +08:00
Hans-Christoph Steiner
8b17fbf703 Merge branch 'metadata' into 'master'
metadata.py: use pathlib and support Windows

See merge request fdroid/fdroidserver!939
2021-06-08 15:02:54 +00:00
Hans-Christoph Steiner
490f578d1c remove redundant call to Path() 2021-06-08 16:50:48 +02:00
linsui
8f21f1e510 metadata.py/rewritemeta.py: use pathlib and support Windows 2021-06-08 21:31:55 +08:00
Hans-Christoph Steiner
5635815898 Merge branch 'import' into 'master'
import: use pathlib and support Windows

See merge request fdroid/fdroidserver!938
2021-06-08 11:10:17 +00:00
linsui
d6eece6395 import.py: use pathlib and support Windows 2021-06-08 18:33:22 +08:00
Jochen Sprickerhof
7ddcbb3e80 Merge branch 'lint_tag_UpdateCheckData' into 'master'
[lint] only check for https with UpdateCheckMode HTTP

See merge request fdroid/fdroidserver!944
2021-06-07 17:07:43 +00:00
Jochen Sprickerhof
49248ba3a9 [lint] only check for https with UpdateCheckMode HTTP
With 133b626b UpdateCheckMode is now also allowed with Tags but it uses
the files from the local repo.
2021-06-07 18:55:42 +02:00
Jochen Sprickerhof
b6233fa2ce Merge branch 'fix_check_tags' into 'master'
[checkupdates] handle non matching regex

See merge request fdroid/fdroidserver!943
2021-06-07 16:12:19 +00:00
Jochen Sprickerhof
a74922f56e [checkupdates] handle non matching regex 2021-06-07 17:59:43 +02:00
Jochen Sprickerhof
15a15420f7 Merge branch 'pathlib' into 'master'
fix tests for !935

See merge request fdroid/fdroidserver!942
2021-06-07 15:45:34 +00:00
linsui
84b74d481e fix tests for !935 2021-06-07 15:33:57 +00:00
Jochen Sprickerhof
3acaa7ede5 Merge branch 'pathlib' into 'master'
checkupdates.py: use pathlib and support Windows

See merge request fdroid/fdroidserver!935
2021-06-07 13:38:21 +00:00
linsui
92ec6265a3 checkupdates.py: use pathlib and support Windows 2021-06-07 21:02:03 +08:00
Jochen Sprickerhof
023319efbb Merge branch 'tag_UpdateCheckData' into 'master'
Tag update check data

See merge request fdroid/fdroidserver!937
2021-06-07 12:00:22 +00:00
Jochen Sprickerhof
ed2da42eff Support hex in versionCode with UCM RepoManifest
Same a b83c3c9e.
2021-06-07 13:47:18 +02:00
Jochen Sprickerhof
133b626b22 Support UpdateCheckData in check_tags 2021-06-07 13:47:18 +02:00
Jochen Sprickerhof
ba2b236e7b Drop unused package id check 2021-06-07 13:47:18 +02:00
Hans-Christoph Steiner
d05ff9db1d
easy changes to black code format in test cases
This does not change areas of code that should be manually reformatted.
2021-06-07 11:53:58 +02:00
Hans-Christoph Steiner
d95a3029a8 Merge branch 'master' into 'master'
tests/ndk-release-checksums.py: fix parsing of NDK r10e

See merge request fdroid/fdroidserver!941
2021-06-07 08:10:43 +00:00
Hans-Christoph Steiner
cb09a16133
tests/ndk-release-checksums.py: fix parsing of NDK r10e
This wasn't finding r10e properly, so it would submit merge requests
to remove r10e from _fdroidserver_.

* !940
* !930
2021-06-07 09:58:12 +02:00
Hans-Christoph Steiner
d060a8c691 Merge branch 'yashpalgoyal1304-master-patch-36117' into 'master'
Added missing linebreak

See merge request fdroid/fdroidserver!936
2021-06-07 07:37:46 +00:00
Teen
faa15f336c Added missing linebreak 2021-06-04 17:29:56 +00:00
Hans-Christoph Steiner
2a259552d3 Merge branch 'master' into 'master'
fix broken NDK extraction routine to correctly name resulting dir

See merge request fdroid/fdroidserver!934
2021-06-01 12:46:45 +00:00
Hans-Christoph Steiner
28a4f9481a
provision-android-ndk: do all configuration via args
This makes it so it is easy to reuse this script in other contexts, like
in Docker, GitLab CI, etc.
2021-06-01 14:33:41 +02:00
Hans-Christoph Steiner
d6c8ecc3bc
fix broken NDK extraction routine to correctly name resulting dir
If there were other NDKs installed, this just tried to rename the first
installed NDK.  Now it tries to rename all NDKs that are not named after
the NDK version.

!926
!927
2021-06-01 14:33:39 +02:00
Jochen Sprickerhof
bf4feab877 Merge branch 'mode_version' into 'master'
Support AutoUpdateMode: Version without pattern

See merge request fdroid/fdroidserver!931
2021-06-01 12:11:09 +00:00
Jochen Sprickerhof
185da60d93 Support AutoUpdateMode: Version without pattern
Since 24dd6740 UpdateCheckMode: Tags uses the found tag instead of
regenerating it from the AutoUpdateMode pattern making the pattern
superfluous. This adds support for dropping the pattern and a test case.
2021-06-01 13:59:49 +02:00
Hans-Christoph Steiner
4c339b4ef4 Merge branch 'fix_tests' into 'master'
Fix ruamel round_trip_dump will be removed

See merge request fdroid/fdroidserver!932
2021-06-01 11:57:36 +00:00
Jochen Sprickerhof
19e1e5f438 Fix ruamel round_trip_dump will be removed
https://sourceforge.net/p/ruamel-yaml/code/ci/4b91cd7e820baf97d8d28b1dcf77979530d43c3c/#diff-1
2021-05-30 12:41:20 +02:00
Hans-Christoph Steiner
a6210dd7b4 Merge branch 'basebox-0.6.1' into 'master'
add checksums for basebox 0.6.1

See merge request fdroid/fdroidserver!928
2021-05-28 09:07:22 +00:00
Michael Pöhn
af088c9c91 add checksums for basebox 0.6.1 2021-05-28 08:55:43 +00:00
Hans-Christoph Steiner
0f3c91555e Merge branch 'master' into 'master'
NDK fixups

See merge request fdroid/fdroidserver!929
2021-05-28 08:54:30 +00:00
Hans-Christoph Steiner
52ac0f0176 ndk-release-checksums.py: fix crash, there is no version here 2021-05-28 10:32:09 +02:00
Hans-Christoph Steiner
153b5d4392
stop modifying default_config when running fill_config_defaults()
dicts and lists are passed by reference in assignments, so this needs to
copy them instead.
2021-05-28 10:24:58 +02:00
Hans-Christoph Steiner
45bd89b3a2
build: missing NDK is now a warning not a critical error 2021-05-28 10:24:56 +02:00
Hans-Christoph Steiner
adafd4560c
provision-android-sdk: ensure ANDROID_HOME parent dir is accessible by all
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/926#note_586778883
2021-05-28 10:24:55 +02:00
Hans-Christoph Steiner
6eb895a700
makebuilserver: only install most recent two releases 2021-05-28 10:24:53 +02:00
Hans-Christoph Steiner
22c83c9142 Merge branch 'modernize-ndk-handling' into 'master'
buildserver: standardize SDK install location /opt/android-sdk

Closes #902

See merge request fdroid/fdroidserver!927
2021-05-28 07:35:38 +00:00
Hans-Christoph Steiner
09fa49a7a3
make get_android_tools_versions() search ndk_paths from config 2021-05-28 09:13:38 +02:00
Hans-Christoph Steiner
7a1d236c8d
only support zipballs in NDK provisioning
Since I discovered there is an r10e zipball, this can now get all NDKs
in zipball form.
fdroid/android-sdk-transparency-log@447fea86e7

closes #902
2021-05-28 09:13:36 +02:00
Hans-Christoph Steiner
9f77044d0d
auto-detect NDKs installed in standard paths
'ndk_paths' will be automatically filled out from well known sources
like $ANDROID_HOME/ndk-bundle and $ANDROID_HOME/ndk/*.  If a required
version is missing in the buildserver VM, it will be automatically
downloaded and installed into the standard $ANDROID_HOME/ndk/
directory.  Manually setting it here will override the auto-detected
values.  The keys can either be the "release" (e.g. r21e) or the
"revision" (e.g. 21.4.7075529).

https://developer.android.com/studio/projects/configure-agp-ndk#agp_version_41
* sdkmanager installs "ndk;12.3.4567890" into $ANDROID_SDK_ROOT/ndk/
* sdkmanager installs "ndk-bundle" into $ANDROID_SDK_ROOT/ndk-bundle/
2021-05-28 09:13:34 +02:00
Hans-Christoph Steiner
4686c06f62 metadata: allow ndk: to be str or list of release or revision
There are two version numbers used for NDKs: the "release" and the
"revision".  The "release" is used in the download URL and zipball and the
"revision" is used in the source.properties and the gradle ndkVersion field.

Also, there are some builds which need multiple NDKs installed, so this
makes it possible to have a list of release/revision entries in build.ndk.
This does not yet add full support since _fdroidserver/build.py_ will also
need changes.
2021-05-28 09:13:27 +02:00
Hans-Christoph Steiner
096532dddb Merge branch 'standardize-sdk-ndk-paths' into 'master'
buildserver: standardize SDK and NDK install locations

See merge request fdroid/fdroidserver!926
2021-05-28 06:57:44 +00:00
Hans-Christoph Steiner
93145a43fb buildserver: use standardized paths for the NDKs
This should help with reproducibility since some tools like Python still
include the build paths in the binaries.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/919#note_578180986

The default ANDROID_SDK_ROOT base dir of /opt/android-sdk is hard-coded in
buildserver/Vagrantfile.  The $ANDROID_HOME/ndk subdir is where Android
Studio will install the NDK into versioned subdirs.
https://developer.android.com/studio/projects/configure-agp-ndk#agp_version_41
2021-05-26 09:21:52 +02:00
Hans-Christoph Steiner
bb77d7a6d2 buildserver: standardize SDK install location /opt/android-sdk
_/opt/android-sdk_ was chosen for a number of reasons:
* _/opt_ is [standardized][1] for packages like the Android SDK, which has its own directory layout.
* _android-sdk_ is used rather than the upstream directory name from the ZIP (e.g. _android-sdk-linux_) so that the path is the same on all platforms.
* On platforms without official _/opt_ support ([macOS][2], [Windows][3], [FreeBSD][4], etc.), it does not conflict with any existing system directory.

[1]: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s13.html
[2]: https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW7
[3]: https://en.wikipedia.org/wiki/Directory_structure#Windows_10
[4]: https://www.freebsd.org/cgi/man.cgi?query=hier&sektion=7&format=html
2021-05-25 17:30:32 +02:00
Hans-Christoph Steiner
07da062a34 buildserver: fix ssh BatchMode config 2021-05-25 17:21:26 +02:00
Hans-Christoph Steiner
be9036b1f1 Merge branch 'auto-install-ndk' into 'master'
auto-download missing NDKs if they're known and can be verified

Closes #369 and #717

See merge request fdroid/fdroidserver!919
2021-05-25 15:12:03 +00:00
Hans-Christoph Steiner
9d44fa7919
gitlab-ci: auto-generate merge request when NDK release found
Following the pattern of the gradle bot, this will check the transparency
log for any new NDK release.  If there are any, it will make a merge
request from @fdroid-bot.
2021-05-25 17:06:30 +02:00
Hans-Christoph Steiner
ec2cace222
buildserver: trim pre-installed NDK list down to the bare minimum
This keeps the Long Term Support release and the latest release installed.
r10e was kept in because it needs a special extraction method, since it is
a .bin file, not a .zip.  r12b is kept in because it is the old default.
Here is a survey of the NDK versions used in the most recent Builds entry
in each app that uses the NDK:

{'r10e': 6,
 'r12b': 93,
 'r13b': 4,
 'r14b': 5,
 'r15c': 7,
 'r16b': 14,
 'r17b': 4,
 'r17c': 7,
 'r18b': 9,
 'r19c': 17,
 'r20': 1,
 'r20b': 22,
 'r21': 3,
 'r21d': 56,
 'r21e': 65,
 'r22': 9,
 'r22b': 15,
 'r9b': 1}

#517


import glob
import os
import yaml

try:
    from yaml import CSafeLoader as SafeLoader
except ImportError:
    from yaml import SafeLoader

ndks = dict()
for f in glob.glob('metadata/*.yml'):
    with open(f) as fp:
        app = yaml.load(fp, Loader=SafeLoader)
        if app.get('Disable'):
            continue
        build = app.get('Builds', [])[-1]
        if build.get('disabled'):
            continue
        ndk = build.get('ndk')
        if ndk and ndk[1] == '9':
            print(f, build)
        elif ndk and int(ndk[2:3]) < 18:
            print(f, build)
        if ndk:
            print(f, ndk)
            if ndk not in ndks:
                ndks[ndk] = 0
            ndks[ndk] += 1

import pprint

pprint.pprint(ndks)
2021-05-25 17:06:28 +02:00
Hans-Christoph Steiner
9fc2a23713
build: remove default NDK, closes #717 2021-05-25 17:06:26 +02:00
Hans-Christoph Steiner
69fcd6a024
build: auto-download missing NDKS if they're known and can be verified
refs #517 #717
2021-05-25 17:06:24 +02:00
Hans-Christoph Steiner
7a7ecbf9dc
move sha256sum() and sha256base64() to common 2021-05-25 17:06:23 +02:00
Hans-Christoph Steiner
0fbd04f1c2
remove redundant imports and pointless code 2021-05-25 17:06:19 +02:00
Hans-Christoph Steiner
95af082082 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.0.2

See merge request fdroid/fdroidserver!924
2021-05-17 17:11:02 +00:00
fdroid-bot
927aa95cd8 gradle v7.0.2 2021-05-17 16:59:55 +00:00
Hans-Christoph Steiner
e4a7726033 gitlab-ci: fix archlinux docker image 2021-05-13 17:20:41 +02:00
Hans-Christoph Steiner
72cef85201 Merge branch 'fix_autoname' into 'master'
Don't return Gradle variables as string

See merge request fdroid/fdroidserver!909
2021-05-13 13:05:17 +00:00
Jochen Sprickerhof
84b6617faf Don't return Gradle variables as string
This is used in checkupdates and currently sets the AutoName to
something like ${displayName}:

4ae415f73c
2021-05-13 12:53:19 +00:00
Hans-Christoph Steiner
a1dfd69392 Merge branch 'disabled_needsupdated' into 'master'
[status_json] Don't list disabled builds as needs updated

Closes #898

See merge request fdroid/fdroidserver!917
2021-05-13 12:42:46 +00:00
Jochen Sprickerhof
31c0078b53 [status_json] Add list of archivePolicy0 2021-05-13 12:30:53 +00:00
Jochen Sprickerhof
33fa918a69 [status_json] Don't list disabled builds as needs updated
Closes: #898
2021-05-13 12:30:53 +00:00
Hans-Christoph Steiner
1bad5b5c6c Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.0.1

See merge request fdroid/fdroidserver!918
2021-05-13 12:13:33 +00:00
fdroid-bot
e0f825d636 gradle v7.0.1 2021-05-13 12:02:17 +00:00
Hans-Christoph Steiner
01947e0c30 Merge branch 'disabled_logs' into 'master'
Don't remove logs of disabled builds

See merge request fdroid/fdroidserver!907
2021-05-13 12:01:34 +00:00
Jochen Sprickerhof
22c32752de Don't remove logs of disabled builds
We need them to debug problems.
2021-05-13 11:49:55 +00:00
Hans-Christoph Steiner
58ff81e7b5 Merge branch 'sphinx' into 'master'
set up docs based on docstrings and publish HTML versions

See merge request fdroid/fdroidserver!911
2021-05-10 14:34:59 +00:00
Benedikt Brückmann
6791c3a550 Only publish pages on default branch 2021-05-10 14:31:51 +00:00
Benedikt Brückmann
245aeec972 Publish docu to GL Pages 2021-05-10 14:31:51 +00:00
Benedikt Brückmann
bdcd843d75 Publish docu to GL Pages 2021-05-10 14:31:51 +00:00
Benedikt Brückmann
47cd1dd055 Add missing index.rst 2021-05-10 14:31:51 +00:00
Benedikt Brückmann
a15581faa9 Draft: set up docs based on docstrings and publish HTML versions 2021-05-10 14:31:51 +00:00
Hans-Christoph Steiner
022d0796d8 gitlab-ci: use latest alpine/bandit to fix CVE flagged by safety 2021-05-10 16:05:59 +02:00
fdroid-bot
2b21584b35 gradle v7.0 2021-05-10 06:48:16 +00:00
Jochen Sprickerhof
3c7a135c20 Merge branch 'fix-year-in-changelog' into 'master'
Fix: Changelog.md dates incorrect year

Closes #896

See merge request fdroid/fdroidserver!910
2021-05-10 06:47:32 +00:00
Benedikt Brückmann
b220ddc555 Fix: Changelog.md dates incorrect year
closes fdroid/fdroidserver#896
2021-05-03 09:59:29 +02:00
Jochen Sprickerhof
a99bebbb5e Merge branch 'keep-failed-build-in-test-mode' into 'master'
`fdroid build --test` keeps unsigned APKs in tmp/ that fail to reproduce

See merge request fdroid/fdroidserver!904
2021-04-16 08:18:47 +00:00
Hans-Christoph Steiner
0b0bc803b7 build: --test now keeps unsigned APKs in tmp/ that fail to reproduce
Before, whenever an unsigned APK failed to reproduce, it was just deleted.
That makes debugging hard.  This makes it keep the unsigned APK, which is
written in tmp/ when using --test.

@jspricke this is related to !864
2021-04-16 09:46:23 +02:00
Hans-Christoph Steiner
6097caef91
build: fix typo in regex for Binaries: verification 2021-04-16 09:40:21 +02:00
Hans-Christoph Steiner
3d69e767d8
common: test abs and rel paths in get_all_gradle_and_manifests() 2021-04-16 09:40:19 +02:00
Hans-Christoph Steiner
634864f206
gitlab-ci: document jobs 2021-04-16 09:40:12 +02:00
Hans-Christoph Steiner
184d2f97d2
jenkins-build-all: stop deleting previous builds results 2021-04-15 16:52:54 +02:00
Hans-Christoph Steiner
760fdf3bd2
jenkins-build-all: fix failure when trying to rm a dir
+ for f in metadata/*/signatures/*
++++ dirname metadata/de.schildbach.wallet/signatures/370
+++ dirname metadata/de.schildbach.wallet/signatures
++ basename metadata/de.schildbach.wallet
Wed 14 Apr 2021 11:50:34 PM UTC - cleanup in progress...
Wed 14 Apr 2021 11:50:34 PM UTC - cleanup done.
+ appid=de.schildbach.wallet
++ basename metadata/de.schildbach.wallet/signatures/370
+ versionCode=370
+ rm -f repo/de.schildbach.wallet_427.apk repo/de.schildbach.wallet_427.apk.asc repo/de.schildbach.wallet_427.log.gz repo/de.schildbach.wallet_test repo/de.schildbach.wallet_test_427.apk repo/de.schildbach.wallet_test_427.apk.asc repo/de.schildbach.wallet_test_427.log.gz 'archive/de.schildbach.wallet_*' 'unsigned/de.schildbach.wallet_*'
rm: cannot remove 'repo/de.schildbach.wallet_test': Is a directory
2021-04-15 09:22:11 +02:00
Jochen Sprickerhof
f149be7296 Merge branch 'bump_metadata' into 'master'
Bump METADATA_VERSION for apksigner transition

See merge request fdroid/fdroidserver!905
2021-04-14 22:21:16 +00:00
Jochen Sprickerhof
f01a3caf77 Bump METADATA_VERSION for apksigner transition
We switched to apksigner in 50f0534d but old apks where still verified
with jarsigner (or an old apksigner version). Bumping the
METADATA_VERSION to force a rebuild of apkcache.
Hopefully this resolves de.chagemann.regexcrossword getting the
KnownVuln, DisabledAlgorithm tags.
2021-04-14 22:08:26 +00:00
Jochen Sprickerhof
e2214ebc4b Merge branch 'fix-metadata_find_signing_files' into 'master'
fix metadata_find_signing_files()

See merge request fdroid/fdroidserver!906
2021-04-14 22:04:46 +00:00
Felix C. Stegerman
b08d54cb90
fix metadata_find_signing_files() 2021-04-14 23:52:13 +02:00
Hans-Christoph Steiner
c43581eb82
Merge branch 'apksigcopier' into 'master'
* origin/master:
  gitlab-ci: prevent dualing linters: pyflakes vs mypy
  jenkins-build-all: refocus on building reproducible apps first
  publish: rename vars to match naming in JAR Signature docs
  common.py: update copyrights
  apksigcopier: remove exclude_all_meta logic
  apksigcopier: purge main() to avoid confusion
  force apksigcopier "AUTO"  to select sigs by available files
  publish: add test for reproduble builds with signatures
  vendor & use apksigcopier v0.4.0-12-g93d8e14
  use subclass hack for better ZIP cloning

fdroid/fdroidserver!893
2021-04-14 23:28:07 +02:00
Hans-Christoph Steiner
5346ea3c19 gitlab-ci: prevent dualing linters: pyflakes vs mypy
* pyflakes says: "typing.Dict' imported but unused"
* mypy says: "Name 'Dict' is not defined"
2021-04-14 23:18:05 +02:00
Hans-Christoph Steiner
0c807275a2 jenkins-build-all: refocus on building reproducible apps first
This also deletes the reproducible APKs each time to test that they are
still being built reproducibly.

!893
fdroidserver#891
2021-04-14 23:01:47 +02:00
Hans-Christoph Steiner
2946c90dd4 publish: rename vars to match naming in JAR Signature docs
https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html

closes #892
2021-04-14 23:01:47 +02:00
Hans-Christoph Steiner
416790306f common.py: update copyrights 2021-04-14 23:01:47 +02:00
Hans-Christoph Steiner
4308a48717 apksigcopier: remove exclude_all_meta logic
This option is unneeded and unused in fdroidserver, and confusing.

https://github.com/obfusk/apksigcopier/pull/36

# Conflicts:
#	fdroidserver/apksigcopier.py
#	fdroidserver/common.py
2021-04-14 23:01:47 +02:00
Hans-Christoph Steiner
f5792d4f49 apksigcopier: purge main() to avoid confusion 2021-04-14 23:01:47 +02:00
Hans-Christoph Steiner
d28c1c0441 force apksigcopier "AUTO" to select sigs by available files 2021-04-14 23:01:47 +02:00
Hans-Christoph Steiner
44d481768f publish: add test for reproduble builds with signatures 2021-04-14 23:01:47 +02:00
Felix C. Stegerman
202fd8b25a
vendor & use apksigcopier v0.4.0-12-g93d8e14 2021-04-14 21:06:20 +02:00
Felix C. Stegerman
67a0f3ae5b
use subclass hack for better ZIP cloning
See https://bugs.python.org/issue43547 for more info on the details.

thanks to @obfusk for the technique
2021-04-14 15:17:56 +02:00
Hans-Christoph Steiner
3d6345a595 Merge branch 'fetchsrclibs' into 'master'
fetchsrclibs: disable preparation

Closes #888

See merge request fdroid/fdroidserver!903
2021-04-12 20:32:47 +00:00
FestplattenSchnitzel
e6c186c566
fetchsrclibs: disable preparation 2021-04-12 22:11:07 +02:00
Hans-Christoph Steiner
edc8c88223 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v7.0

See merge request fdroid/fdroidserver!902
2021-04-12 17:36:40 +00:00
fdroid-bot
0298eef46f gradle v7.0 2021-04-12 07:15:28 +00:00
Hans-Christoph Steiner
b9435d3113
Merge 'obfusk-master-patch-83286' into 'master'
* read_pkg_args:
  common: add test case for read_pkg_args()
  read_pkg_args(): allow appid_vercode.apk in addition to appid:vercode

fdroid/fdroidserver!901
2021-04-12 09:13:19 +02:00
Hans-Christoph Steiner
cff575f402 common: add test case for read_pkg_args() 2021-04-12 09:11:58 +02:00
Felix C. Stegerman
0a4995cd3b read_pkg_args(): allow appid_vercode.apk in addition to appid:vercode 2021-04-10 07:18:28 +00:00
Hans-Christoph Steiner
67757a3978 Merge branch 'obfusk-master-patch-46047' into 'master'
check for invalid appids passed to commands

See merge request fdroid/fdroidserver!894
2021-04-08 20:15:06 +00:00
Felix C. Stegerman
3e557a1a8a
check for invalid appids passed to commands 2021-04-08 10:31:33 +02:00
Hans-Christoph Steiner
380f3b2e9f Merge branch 'fix/checkupdateCommit' into 'master'
Use tag if known

See merge request fdroid/fdroidserver!872
2021-04-07 09:53:42 +00:00
Sylvia van Os
24dd6740e1 Use tag if known
This ensures that we actually use the tag someone created when a new tag
is detected.
2021-04-07 09:41:03 +00:00
Hans-Christoph Steiner
234dc9b402 Merge branch 'ndk-r22b' into 'master'
makebuildserver: upgrade NDK r22 to r22b

See merge request fdroid/fdroidserver!899
2021-04-07 09:38:17 +00:00
relan
6d9410597b Upgrade NDK r22 to r22b 2021-04-07 12:12:04 +03:00
Hans-Christoph Steiner
38c18d42f8 Merge branch 'log_vcs_exception' into 'master'
Create log file for VCSException

See merge request fdroid/fdroidserver!895
2021-04-06 12:57:39 +00:00
Jochen Sprickerhof
df3b6ea65c Create log file for VCSException
In case there is a VCS error (git tag not found), create a log file in
the F-Droid repo so it is shown on the monitor (currently 404).
2021-04-06 12:45:41 +00:00
Hans-Christoph Steiner
81fb9d4d63 Merge branch 'disabled_failed' into 'master'
Excluded disabled metadata in failedBuilds

See merge request fdroid/fdroidserver!897
2021-04-06 09:56:39 +00:00
Jochen Sprickerhof
49a593ac5f Excluded disabled metadata in failedBuilds 2021-04-06 09:44:11 +00:00
Hans-Christoph Steiner
1b7f9d86b6 Merge branch 'fix-gitlab-url' into 'master'
gitlab-ci: fix broken download link for fdroiddata tarball

See merge request fdroid/fdroidserver!898
2021-04-06 08:54:07 +00:00
Hans-Christoph Steiner
9f60516fcb gitlab-ci: fix broken download link for fdroiddata tarball
fdroiddata!8730
fdroiddata!8732
rfp@f49178ea0aed808607f8d6d753285b101e53f0be
2021-04-06 10:41:59 +02:00
Hans-Christoph Steiner
cf1fa84c77
gitlab-ci: rm HTML index gen test from job, fails on stretch
```console
  Downloading https://files.pythonhosted.org/packages/61/cf/0d6598b1ceb463a46b75a716fbb23d2d5ccc5738aba8ddceeec3fa59997f/slimit-0.8.1.zip (88kB)
Collecting tinycss2>=0.4 (from html5print->fdroidserver==2.1a0.dev0)
  Downloading https://files.pythonhosted.org/packages/65/f7/63bf697a7c7257d304269b49f1be3dfe429856889e93963d6f5790d77d82/tinycss2-1.1.0-py3-none-any.whl
tinycss2 requires Python '>=3.6' but the running Python is 3.5.3
```
2021-04-06 10:23:17 +02:00
Hans-Christoph Steiner
2e1d11242e Merge branch 'mypy' into 'master'
Add a mypy run to the pipeline

See merge request fdroid/fdroidserver!884
2021-04-02 09:54:32 +00:00
Benedikt Brückmann
8f0712e89b Add a mypy run to the pipeline 2021-04-02 08:57:56 +00:00
Hans-Christoph Steiner
7e60acb259 Merge branch 'fix-fetchlibs-common-config-is-None' into 'master'
Fix common.config is None in fetchlibs

Closes #881

See merge request fdroid/fdroidserver!892
2021-04-01 10:32:52 +00:00
proletarius101
c70cc33d1d Fix common.config is None in fetchlibs 2021-03-26 14:52:29 +00:00
Hans-Christoph Steiner
20c299358d gitlab-ci: modernize ubuntu_lts_ppa job using updates to PPA
The PPA now provides apksigner that does not need binfmt, and defusedxml is
a hard Depends:.
2021-03-24 11:20:00 +01:00
Hans-Christoph Steiner
b5485ded64
skip test_find_apksigner_system_package_android_home if no apksigner 2021-03-23 23:29:50 +01:00
Hans-Christoph Steiner
d106f9988e Merge branch 'master' into 'master'
bug fix collection

See merge request fdroid/fdroidserver!890
2021-03-23 20:41:16 +00:00
Hans-Christoph Steiner
f811d44f06 jenkins-build-all: use $WORKSPACE var to find correct file to modify 2021-03-23 21:01:56 +01:00
Hans-Christoph Steiner
b69b95103e add complete tests for finding apksigner; fix minor detection bug
find_apksigner() was preferring the oldest valid version rather than the
newest.
2021-03-23 21:01:53 +01:00
Hans-Christoph Steiner
9135dfbeed verify: include diffoscope setup info in output JSON 2021-03-23 11:01:40 +01:00
Hans-Christoph Steiner
8b393189c1 include /etc/issue.net in status JSON to identify the base system 2021-03-23 11:01:40 +01:00
Hans-Christoph Steiner
ee84eb762c buildserver: SharedFoldersEnableSymlinksCreate: false 2021-03-23 11:01:40 +01:00
Hans-Christoph Steiner
4a8f3ebf55
jenkins-build-all: force-limit fdroid build to 6 hours
The jenkins admins have requested that the jobs have much shorter run
times.  Otherwise they will just force restart jenkins or reboot the box
when updates come, without waiting for the jobs to finish.
2021-03-23 10:44:47 +01:00
Hans-Christoph Steiner
6daf9197c2
jenkins-test: remove checkupdates; jenkins admins need short jobs 2021-03-23 10:44:30 +01:00
Hans-Christoph Steiner
2b6d9c185e Merge branch 'apksigner-first' into 'master'
switch to using apksigner by default, as much as possible

Closes #880 and admin#202

See merge request fdroid/fdroidserver!889
2021-03-22 22:55:40 +00:00
Hans-Christoph Steiner
67e65ce2ea purge complete-ci-tests, those are better covered in .gitlab-ci.yml 2021-03-22 23:36:04 +01:00
Hans-Christoph Steiner
93ca13fa16 run-tests: remove broken test that never ran due to a syntax error 2021-03-22 22:31:29 +01:00
Hans-Christoph Steiner
7ec2a8ebb3 add apksigner, jarsigner, and keytool to relevant status JSON 2021-03-22 22:31:29 +01:00
Hans-Christoph Steiner
903a7396b1 switch to preferring apksigner, requiring for fdroid publish 2021-03-22 22:30:49 +01:00
Hans-Christoph Steiner
8a9852209b update: do not die when androguard files to extract icon
https://jenkins.debian.net/job/reproducible_fdroid_test/422
https://jenkins.debian.net/job/reproducible_fdroid_test/423

```
Traceback (most recent call last):
  File "../fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/__main__.py", line 227, in main
    raise e
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/__main__.py", line 208, in main
    mod.main()
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 2316, in main
    apks, cachechanged = process_apks(apkcache, repodirs[0], knownapks, options.use_date_from_apk)
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 1746, in process_apks
    use_date_from_apk, ada, True)
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 1619, in process_apk
    apk = scan_apk(apkfile)
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 1385, in scan_apk
    scan_apk_androguard(apk, apk_file)
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 1527, in scan_apk_androguard
    resource_id = arsc.get_id(apk['packageName'], icon_id)
  File "/usr/lib/python3/dist-packages/androguard/core/bytecodes/axml/__init__.py", line 1668, in get_id
    self._analyse()
  File "/usr/lib/python3/dist-packages/androguard/core/bytecodes/axml/__init__.py", line 1321, in _analyse
    ate = self.packages[package_name][nb + 3 + nb_i]
IndexError: list index out of range

```
2021-03-22 18:16:34 +01:00
Hans-Christoph Steiner
50f0534d87 publish: always use apksigner to sign APKs, closes #880 2021-03-22 18:16:34 +01:00
Hans-Christoph Steiner
08cde5c2e6 code formatting: black --skip-string-normalization --line-length 100 2021-03-22 18:16:34 +01:00
Hans-Christoph Steiner
7f458f8f8c Merge branch 'vercode_bracket' into 'master'
Support versionCode in brackets

Closes fdroiddata#2338

See merge request fdroid/fdroidserver!888
2021-03-22 16:55:42 +00:00
Jochen Sprickerhof
ea9f917ddc Support versionCode and versionName in brackets
Example: versionCode(29)
https://github.com/florisboard/florisboard/blob/v0.3.9/app/build.gradle.kts#L24
2021-03-19 13:58:02 +01:00
Hans-Christoph Steiner
6ba647baec Merge branch 'fix-update-py-triple-t' into 'master'
update: take build subdir into account when looking for triple-t data

Closes fdroiddata#2295

See merge request fdroid/fdroidserver!883
2021-03-17 13:40:53 +00:00
Christian Beier
553daf8552 update: take build subdir into account when looking for triple-t data
Implemented as a fallback solution when parsing settings.gradle
and globbing the build dir with "'*', 'src', '*', 'play'" did not
yield results.

Before, the logic would not find triple-t metadata in projects where
settings.gradle is in a subdirectory or 'src' is found at a directory
depth != 2.

Closes fdroid/fdroiddata#2295
2021-03-17 13:19:44 +00:00
Hans-Christoph Steiner
dbf80ad771
metadata: remove git repo handling from metadata parsing
This is a vestige of implementing builds from a .fdroid.yml file directly
in the app's source repo.  It was never fully complete and seems to not be
used in any apps in fdroiddata.  This makes `fdroid build --all` runs much
faster since it does not need to do any git handling for apps that do not
have any new builds to run.

4e8e29794
948689281
a4e431080
e37be9b06
e775d330c
2021-03-17 13:44:24 +01:00
Hans-Christoph Steiner
598c87c78f set development version
https://www.python.org/dev/peps/pep-0440/#developmental-releases
2021-03-17 11:53:04 +01:00
Sylvia van Os
d5a3182ce9 Merge branch 'bug-fixes' into 'master'
status JSON and --scan-binary should not exit with error when apkanalyzer fails

Closes #825

See merge request fdroid/fdroidserver!886
2021-03-15 10:33:31 +00:00
Hans-Christoph Steiner
78842e9cc2 scanner: should not exit with error when apkanalyzer fails
apkanalyzer produces useful output when it can run, but it does not
support all recent JDK versions, and also some DEX versions, so this
cannot count on it to always produce useful output or even to run
without exiting with an error.

211dd65ff0 was based on false
assumptions that apkanalyzer can always produce output.

fdroiddata!8585
fdroiddata!8584
2021-03-15 10:54:29 +01:00
Hans-Christoph Steiner
fc368dc291 makebuildserver: print message before rsyncing caches
This process can take a very long time if the caches are large, so at least
print something about what it is doing.
2021-03-15 10:29:08 +01:00
Hans-Christoph Steiner
5695993521 build: include useful successful build IDs in status JSON, closes #825 2021-03-11 18:52:31 +01:00
Hans-Christoph Steiner
a3d828ea48
update CHANGELOG 2021-03-11 08:43:57 +01:00
Hans-Christoph Steiner
cc3b88ab30 gradlew-fdroid: use gradle zipballs from local cachedir, if present 2021-03-11 08:40:34 +01:00
Hans-Christoph Steiner
4b05854ffc buildserver: only install the latest gradle version
gradle checksums are now handled by gradlew-fdroid

refs #370 #517 #737
2021-03-11 08:40:34 +01:00
Hans-Christoph Steiner
e6f5e68e02 Merge branch 'ndk21e' into 'master'
Add NDK 21e

Closes #875

See merge request fdroid/fdroidserver!882
2021-03-11 07:38:17 +00:00
Licaon_Kter
d683a40f96 Add NDK 21e 2021-03-10 16:36:14 +02:00
Hans-Christoph Steiner
757d423c07 Merge branch 'obfusk-master-patch-10564' into 'master'
use vagrantfile instead of 'builder/Vagrantfile' in get_clean_builder()

See merge request fdroid/fdroidserver!881
2021-03-10 09:34:34 +00:00
Felix C. Stegerman
259ca51001 use vagrantfile instead of 'builder/Vagrantfile' in get_clean_builder() 2021-03-10 09:12:52 +00:00
Hans-Christoph Steiner
77c0c8bc5a Merge branch 'bug-fix-grab-bag' into 'master'
bug fix grab bag; and, complete 'build' JSON status

Closes #344

See merge request fdroid/fdroidserver!875
2021-03-09 20:33:20 +00:00
Hans-Christoph Steiner
65836d9e9b run-tests: fix local_copy_dir test, it broke when /tmp/fdroid existed 2021-03-09 17:55:10 +01:00
Hans-Christoph Steiner
8bb2c7d4b1 metadata: stop setting up source repo when running lint/rewritemeta
broken in 54e8867a7e
2021-03-09 17:55:07 +01:00
Hans-Christoph Steiner
211dd65ff0 scanner: show error if scan_binary fails to run apkanalyzer 2021-03-09 15:55:45 +01:00
Hans-Christoph Steiner
649347dcd4 common: properly parse version from NDK's source.properties 2021-03-09 15:55:45 +01:00
Hans-Christoph Steiner
6a875a1821 update: stop extracting and storing XML icons, they're useless
APKs that only have XML icons in them should include an icon.png in the
metadata or fastlane/triple-t

closes #344
2021-03-09 15:40:30 +01:00
Hans-Christoph Steiner
e6b499a56b ignore repo/archive index HTML and related files in test repo 2021-03-09 15:40:30 +01:00
Hans-Christoph Steiner
850e244526 index: rename vars to match the dict key 'signer'
'sig' matches the old deprecated entry for the signer fingerprint that
uses the custom fingerprint algorithm.
2021-03-09 15:40:30 +01:00
Hans-Christoph Steiner
544a45c16a index: raise error rather than crash on bad repo file
If a non-APK is added with the appid/packageName that matches some APKs, it
should through an error.

Traceback (most recent call last):
  File "/home/hans/code/fdroid/server/fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/home/hans/code/fdroid/server/fdroidserver/__main__.py", line 211, in main
    mod.main()
  File "/home/hans/code/fdroid/server/fdroidserver/update.py", line 2343, in main
    index.make(apps, sortedids, apks, repodirs[0], False)
  File "/home/hans/code/fdroid/server/fdroidserver/index.py", line 142, in make
    fdroid_signing_key_fingerprints)
  File "/home/hans/code/fdroid/server/fdroidserver/index.py", line 166, in make_v1
    v1_sort_packages(packages, fdroid_signing_key_fingerprints)
  File "/home/hans/code/fdroid/server/fdroidserver/index.py", line 292, in v1_sort_packages
    packages.sort(key=v1_sort_keys)
  File "/home/hans/code/fdroid/server/fdroidserver/index.py", line 288, in v1_sort_keys
    .format(apkfilename=package['apkName']))
fdroidserver.exception.FDroidException: at.roteskreuz.stopcorona_8.jobf does not have a valid signature!
2021-03-09 15:40:30 +01:00
Hans-Christoph Steiner
b5c941938a update: reuse local_copy_dir to provide auto-copying with --nosign
When using `fdroid update --nosign` in combo with `fdroid signindex`, the
unsigned index files have to be copied to a thumb drive or something in
order to be brought to the offline signing server.  This reuses the config
option local_copy_dir as the destination for those unsigned index files.
2021-03-09 15:40:30 +01:00
Hans-Christoph Steiner
a2f0356d84 build: include all wiki data in the JSON status output 2021-03-09 15:40:30 +01:00
Hans-Christoph Steiner
c1b83c24d1 Merge branch 'obfusk-master-patch-47191' into 'master'
fix "vritualbox" typo in BASEBOX_CHECKSUMS

See merge request fdroid/fdroidserver!879
2021-03-09 13:03:35 +00:00
Felix C. Stegerman
7fa7270589 fix "vritualbox" typo in BASEBOX_CHECKSUMS 2021-03-09 12:42:43 +00:00
Hans-Christoph Steiner
e2467a2e02 Merge branch 'build-72h' into 'master'
build: set overall timeout to 72 hours

See merge request fdroid/fdroidserver!878
2021-03-08 13:37:13 +00:00
relan
56b84251f6 build: set overall timeout to 72 hours
Some builds are pending for weeks now because of the global time limit.
Give them a chance to be built.
2021-03-08 11:41:30 +03:00
Sylvia van Os
fc3906aad3 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v6.8.3

See merge request fdroid/fdroidserver!874
2021-03-01 21:54:56 +00:00
fdroid-bot
898b5dbb4a gradle v6.8.3 2021-03-01 21:34:31 +00:00
Hans-Christoph Steiner
834307a9f6 Merge branch 'monitor_version' into 'master'
Add needsUpdate and noUpdateCheck to update.json

See merge request fdroid/fdroidserver!870
2021-02-12 11:24:14 +00:00
Jochen Sprickerhof
933eea149a Add needsUpdate and noUpdateCheck to update.json
As done in update_wiki.
2021-02-12 11:04:24 +00:00
Hans-Christoph Steiner
cb5ebfc8f0 Merge branch 'publish_unsigned' into 'master'
Publish unsigned builds

See merge request fdroid/fdroidserver!864
2021-02-12 10:40:18 +00:00
Jochen Sprickerhof
7f2cbd1876 Fix serverwebroot test 2021-02-12 10:20:30 +00:00
Jochen Sprickerhof
33bff6b298 Publish unsigned builds
This should make debugging reproducible builds easier.
2021-02-12 10:20:30 +00:00
Hans-Christoph Steiner
0d836751e5
code format cleanup 2021-02-12 10:58:07 +01:00
Hans-Christoph Steiner
007c62065d
pylint flags "_" as bad variable name, its the gettext function
Throughout the fdroidserver code base, "_()" is used for localizing
strings.  So it should not be used as an ignored variable name.  Those
should be called "_ignored".
2021-02-12 10:56:31 +01:00
Ciaran Gultnieks
fb877c8b81 Merge branch 'licaon-kter-master-patch-25160' into 'master'
Add python3-qrcode to buildserver

See merge request fdroid/fdroidserver!871
2021-02-12 09:48:11 +00:00
Licaon_Kter
5396b79da7 Fix after https://gitlab.com/fdroid/fdroidserver/-/merge_requests/853 2021-02-12 09:14:27 +00:00
Ciaran Gultnieks
a36572dd98 Merge branch 'fix-contact-website.txt' into 'master'
update: handle large, corrupt, or inaccessible fastlane/triple-t files

See merge request fdroid/fdroidserver!869
2021-02-11 21:38:37 +00:00
Hans-Christoph Steiner
525dcb8f98 update: handle large, corrupt, or inaccessible fastlane/triple-t files
```
Traceback (most recent call last):
  File "../fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/__main__.py", line 227, in main
    raise e
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/__main__.py", line 208, in main
    mod.main()
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 2340, in main
    repoapps = prepare_apps(apps, apks, repodirs[0])
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 2176, in prepare_apps
    copy_triple_t_store_metadata(apps_with_packages)
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 1076, in copy_triple_t_store_metadata
    _set_author_entry(app, 'authorWebSite', os.path.join(root, f))
  File "/var/lib/jenkins/userContent/reproducible/reproducible_fdroid_build_apps/fdroidserver/update.py", line 784, in _set_author_entry
    with open(f, errors='replace') as fp:
FileNotFoundError: [Errno 2] No such file or directory: 'build/player.efis.cfd/pfd/src/main/play/contact-website.txt'
```
2021-02-11 17:42:13 +01:00
Hans-Christoph Steiner
14e9bffedb Merge branch 'fossdd-spdx-revert-removing-licenses' into 'master'
Revert removing Licenses

See merge request fdroid/fdroidserver!868
2021-02-10 20:09:01 +00:00
fossdd
bcdefccb31 Revert removing Licenses 2021-02-10 19:10:14 +00:00
Hans-Christoph Steiner
d75ba81be0
gitlab-ci: arch job needs to build python-cryptography 2021-02-09 09:26:07 +01:00
Hans-Christoph Steiner
267d7a4eac Merge branch 'fossdd-update-spdx' into 'master'
Update SPDX License List

See merge request fdroid/fdroidserver!867
2021-02-08 21:42:30 +00:00
fossdd
8371a2e07a Update SPDX License List 2021-02-08 15:14:28 +00:00
Hans-Christoph Steiner
0a4c5afd52 Merge branch 'generate-index' into 'master'
Generate index.html and qrcode.png

Closes #688

See merge request fdroid/fdroidserver!853
2021-02-08 14:30:40 +00:00
Benedikt Brückmann
9c609aa361 Fix copy-paste error 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
23931e6818 Install [test] dependencies when running complete-ci-tests 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
b1bde9e407 * Skip tidy check if html5print is not available
* install test dependencies on arch
2021-02-08 12:25:02 +01:00
Benedikt Brückmann
d5a90ed60e add html5print as test dependency 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
022d73b3b6 Add HTML/CSS tidy test
and tidy up the content
2021-02-08 12:25:02 +01:00
Benedikt Brückmann
0936051c7b Fix pep8 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
96854be84a Only overwrite index.html/css files which were created by fdroid update
Further changes:
* use real value for icon instead of hard coded value
* Move qrcode.make() to top
* fix identation of css file generation
2021-02-08 12:25:02 +01:00
Benedikt Brückmann
8d51566a70 * Change image name
* add fingerprint
2021-02-08 12:25:02 +01:00
Benedikt Brückmann
4d464051ff Fix pycodestlye errors 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
997f5d267b Properly add css 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
44ee531426 Add QR code and css 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
788333991d move code to own method 2021-02-08 12:25:02 +01:00
Benedikt Brückmann
12682f063d First draft of index.html generation 2021-02-08 12:25:02 +01:00
Hans-Christoph Steiner
7c5672a47a Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v6.8.2

See merge request fdroid/fdroidserver!866
2021-02-08 11:00:34 +00:00
fdroid-bot
59a4ec79b3 gradle v6.8.2 2021-02-08 10:42:22 +00:00
Hans-Christoph Steiner
c887c14be1 gitlab-ci: use python3-cryptography to avoid building rust sources 2021-02-08 11:40:41 +01:00
Hans-Christoph Steiner
3d536d4515
gitlab-ci: use python3-cryptography to avoid building rust sources 2021-02-08 10:59:48 +01:00
Hans-Christoph Steiner
fc7f9204b6 checkupdates: set User-Agent to make gitlab.com happy
closes #863
2021-02-02 21:37:53 +01:00
Hans-Christoph Steiner
682761e75d
setup changelog and version for development 2021-02-02 13:54:22 +01:00
Hans-Christoph Steiner
f3097e142d fix broken GitLab CI badge on README 2021-02-02 11:37:00 +01:00
Hans-Christoph Steiner
57017fa373 Merge branch 'transparency_once' into 'master'
Run push_binary_transparency only once

See merge request fdroid/fdroidserver!865
2021-02-02 09:53:52 +00:00
Jochen Sprickerhof
2103569958 Run push_binary_transparency only once 2021-02-02 09:07:28 +01:00
Hans-Christoph Steiner
fa186c40c4 version 2.0 2021-02-01 22:50:36 +01:00
Hans-Christoph Steiner
65ef6f33e3 make -C locale/ update 2021-02-01 22:50:03 +01:00
Golubev Alexander
e67cb8a1fa Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Golubev Alexander <fatzer2@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2021-02-01 22:44:33 +01:00
Peter J. Mello
58d23d17e6 Translated using Weblate: Portuguese (pt) by Peter J. Mello <admin@petermello.net>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by Peter J. Mello <admin@petermello.net>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Peter J. Mello <admin@petermello.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2021-02-01 22:44:33 +01:00
Eric
acba6b4a88 Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <spice2wolf@gmail.com>
Currently translated at 34.7% (200 of 576 strings)

Co-authored-by: Eric <spice2wolf@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2021-02-01 22:44:33 +01:00
Oğuz Ersen
8fcbfd1403 Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguzersen@protonmail.com>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2021-02-01 22:44:33 +01:00
WaldiS
81ef8055de Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2021-02-01 22:44:33 +01:00
Ihor Hordiichuk
382fba151e Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (576 of 576 strings)

Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>

Currently translated at 100.0% (576 of 576 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2021-02-01 22:44:33 +01:00
Hans-Christoph Steiner
31c29f2fb3 support official ANDROID_SDK_ROOT env var when running CLI tools
ANDROID_HOME is deprecated:
https://developer.android.com/studio/command-line/variables#android_sdk_root

!816 #547
2021-01-29 16:34:36 +01:00
Hans-Christoph Steiner
4900c426e9 locale: remove "obsolete" translations from .po files 2021-01-29 16:20:42 +01:00
Hans-Christoph Steiner
19e2ea8adf locale: remove duplicate strings as part of the update 2021-01-29 16:13:52 +01:00
Hans-Christoph Steiner
3e7c55d91d purge all references to dscanner 2021-01-29 15:40:59 +01:00
Hans-Christoph Steiner
63be6f6347 standardize naming in strings and comments on all caps APK 2021-01-29 15:40:59 +01:00
Hans-Christoph Steiner
97d5933a05 change config.py to config.yml everywhere it is needed 2021-01-29 13:24:17 +01:00
Hans-Christoph Steiner
f48ea06adb add final release language list 2021-01-29 13:22:34 +01:00
Isrg Rajan
a10e55e40f Translated using Weblate: Hindi (hi) by Isrg Rajan <isrgrajan@outlook.com>
Currently translated at 2.5% (15 of 588 strings)

Added translation using Weblate: Hindi (hi) by Isrg Rajan <isrgrajan@outlook.com>

Co-authored-by: Isrg Rajan <isrgrajan@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/hi/
Translation: F-Droid/F-Droid Server
2021-01-29 13:04:07 +01:00
Aled Powell
a334f24a7b Translated using Weblate: Welsh (cy) by Aled Powell <aled@aledpowell.cymru>
Currently translated at 6.4% (38 of 588 strings)

Translated using Weblate: Welsh (cy) by Aled Powell <aled@aledpowell.cymru>

Currently translated at 5.1% (30 of 588 strings)

Translated using Weblate: Welsh (cy) by Aled Powell <aled@aledpowell.cymru>

Currently translated at 3.7% (22 of 588 strings)

Added translation using Weblate: Welsh (cy) by Aled Powell <aled@aledpowell.cymru>

Co-authored-by: Aled Powell <aled@aledpowell.cymru>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cy/
Translation: F-Droid/F-Droid Server
2021-01-29 13:04:07 +01:00
Elias Mårtenson
7794f9a645 Translated using Weblate: Swedish (sv) by Elias Mårtenson <elias@dhsdevelopments.com>
Currently translated at 8.1% (48 of 588 strings)

Co-authored-by: Elias Mårtenson <elias@dhsdevelopments.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sv/
Translation: F-Droid/F-Droid Server
2021-01-29 13:04:07 +01:00
jace
5f48626fd9 Added translation using Weblate: English (Middle) (enm) by jace <jace4411@outlook.com>
Co-authored-by: jace <jace4411@outlook.com>
2021-01-29 13:04:07 +01:00
Lilian Sosa
cc159b57b6 Translated using Weblate: Spanish (Argentina) (es_AR) by Lilian Sosa <liliancsosa@gmail.com>
Currently translated at 20.0% (118 of 588 strings)

Translated using Weblate: Spanish (Argentina) (es_AR) by Lilian Sosa <liliancsosa@gmail.com>

Currently translated at 17.8% (105 of 588 strings)

Co-authored-by: Lilian Sosa <liliancsosa@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es_AR/
Translation: F-Droid/F-Droid Server
2021-01-29 13:04:07 +01:00
Oymate
dc114f6c6d Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>
Currently translated at 3.0% (18 of 588 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 1.1% (7 of 588 strings)

Co-authored-by: Oymate <dhruboadittya96@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/bn/
Translation: F-Droid/F-Droid Server
2021-01-29 13:04:07 +01:00
Francesco Esposito
48a20801af Translated using Weblate: Italian (it) by Francesco Esposito <email@francescoesposito.org>
Currently translated at 65.1% (383 of 588 strings)

Co-authored-by: Francesco Esposito <email@francescoesposito.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-01-29 13:04:07 +01:00
Daniel Șerbănescu
b04b59dfc5 Translated using Weblate: Romanian (ro) by Daniel Șerbănescu <daniel@serbanescu.dk>
Currently translated at 2.8% (17 of 588 strings)

Added translation using Weblate: Romanian (ro) by Daniel Șerbănescu <daniel@serbanescu.dk>

Co-authored-by: Daniel Șerbănescu <daniel@serbanescu.dk>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2021-01-29 13:04:07 +01:00
Besnik Bleta
2a21de2b39 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 96.0% (565 of 588 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:27 +01:00
Hans-Christoph Steiner
e6bcafdb51 fixed checks in Weblate
Translated using Weblate: Albanian (sq) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 95.0% (559 of 588 strings)

Translated using Weblate: Polish (pl) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 99.6% (586 of 588 strings)

Translated using Weblate: Korean (ko) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 35.3% (208 of 588 strings)

Translated using Weblate: French (fr) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 87.9% (517 of 588 strings)

Translated using Weblate: Spanish (es) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 99.8% (587 of 588 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 36.2% (213 of 588 strings)

Translated using Weblate: Chinese (Traditional) (zh_Hant) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 80.9% (476 of 588 strings)

Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:15 +01:00
Ihor Hordiichuk
6616b1cec2 Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (588 of 588 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:15 +01:00
hilariousperson
5d61429d1f Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 87.9% (517 of 588 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:15 +01:00
gub
79e641a535 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 87.9% (517 of 588 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:15 +01:00
Vincent Finance
c1a08e4ba6 Translated using Weblate: French (fr) by Vincent Finance <linuxmario@linuxmario.net>
Currently translated at 87.9% (517 of 588 strings)

Co-authored-by: Vincent Finance <linuxmario@linuxmario.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:15 +01:00
WaldiS
d630fac735 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 99.4% (585 of 588 strings)

Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>

Currently translated at 99.4% (585 of 588 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:15 +01:00
Adolfo Jayme Barrientos
5c33010997 Translated using Weblate: Spanish (es) by Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Currently translated at 99.8% (587 of 588 strings)

Co-authored-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
TobiGr
9dbf53aede Translated using Weblate: German (de) by TobiGr <tobigr@mail.de>
Currently translated at 95.2% (560 of 588 strings)

Co-authored-by: TobiGr <tobigr@mail.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
forght
2590691c8a Translated using Weblate: German (de) by forght <forght@posteo.de>
Currently translated at 92.0% (541 of 588 strings)

Co-authored-by: forght <forght@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
ssantos
52a817c0af Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (588 of 588 strings)

Translated using Weblate: Portuguese (Portugal) (pt_PT) by ssantos <ssantos@web.de>

Currently translated at 100.0% (588 of 588 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
nautilusx
abd25fdbb6 Translated using Weblate: German (de) by nautilusx <translate@disroot.org>
Currently translated at 91.3% (537 of 588 strings)

Co-authored-by: nautilusx <translate@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Aleph Null
5a4824927b Translated using Weblate: German (de) by Aleph Null <atzeje@web.de>
Currently translated at 91.3% (537 of 588 strings)

Co-authored-by: Aleph Null <atzeje@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
ButterflyOfFire
9caebf1123 Translated using Weblate: French (fr) by ButterflyOfFire <ButterflyOfFire@protonmail.com>
Currently translated at 86.0% (506 of 588 strings)

Co-authored-by: ButterflyOfFire <ButterflyOfFire@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
gub
b1745598f2 Translated using Weblate: French (fr) by gub <gub.gub@laposte.net>
Currently translated at 86.0% (506 of 588 strings)

Co-authored-by: gub <gub.gub@laposte.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Adrien le Maire
7cb148a5aa Translated using Weblate: French (fr) by Adrien le Maire <adrien@alemaire.be>
Currently translated at 85.0% (500 of 588 strings)

Co-authored-by: Adrien le Maire <adrien@alemaire.be>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
hilariousperson
f7e13957f2 Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 85.0% (500 of 588 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Madeorsk
d36dcdfb67 Translated using Weblate: French (fr) by Madeorsk <madeorsk@protonmail.com>
Currently translated at 85.0% (500 of 588 strings)

Co-authored-by: Madeorsk <madeorsk@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Fioddor Superconcentrado
a9d45671c7 Translated using Weblate: Spanish (es) by Fioddor Superconcentrado <fioddor@gmail.com>
Currently translated at 99.8% (587 of 588 strings)

Co-authored-by: Fioddor Superconcentrado <fioddor@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Eric
dcf035bb0b Translated using Weblate: Chinese (Simplified) (zh_Hans) by Eric <spice2wolf@gmail.com>
Currently translated at 36.0% (212 of 588 strings)

Co-authored-by: Eric <spice2wolf@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
R_SACI
c8d1ffa9ea Translated using Weblate: Kabyle (kab) by R_SACI <rgebbid@gmail.com>
Currently translated at 12.0% (71 of 588 strings)

Translated using Weblate: Kabyle (kab) by R_SACI <rgebbid@gmail.com>

Currently translated at 9.6% (57 of 588 strings)

Co-authored-by: R_SACI <rgebbid@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/kab/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
cheese1
b9d737aa5e Translated using Weblate: German (de) by cheese1 <cheese@nosuchhost.net>
Currently translated at 90.4% (532 of 588 strings)

Co-authored-by: cheese1 <cheese@nosuchhost.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Carlos
8828fbd18a Translated using Weblate: Chinese (Simplified) (zh_Hans) by Carlos <linghao.zhang@protonmail.com>
Currently translated at 34.5% (203 of 588 strings)

Co-authored-by: Carlos <linghao.zhang@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Éfrit
bc52f9fd34 Translated using Weblate: French (fr) by Éfrit <efrit@posteo.net>
Currently translated at 82.9% (488 of 588 strings)

Translated using Weblate: French (fr) by Éfrit <efrit@posteo.net>

Currently translated at 82.9% (488 of 588 strings)

Co-authored-by: Éfrit <efrit@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
hilariousperson
83e1d88e83 Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 82.9% (488 of 588 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Éfrit
ba7e31628c Translated using Weblate: French (fr) by Éfrit <efrit@posteo.net>
Currently translated at 82.8% (487 of 588 strings)

Co-authored-by: Éfrit <efrit@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
hilariousperson
65c202870d Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 82.8% (487 of 588 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
DGO
ac05799dff Translated using Weblate: French (fr) by DGO <d@geon.fr>
Currently translated at 81.4% (479 of 588 strings)

Co-authored-by: DGO <d@geon.fr>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
hilariousperson
059e298e97 Translated using Weblate: French (fr) by hilariousperson <gobelpepite+github@gmail.com>
Currently translated at 81.4% (479 of 588 strings)

Co-authored-by: hilariousperson <gobelpepite+github@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Éfrit
7885c2a2c9 Translated using Weblate: French (fr) by Éfrit <efrit@posteo.net>
Currently translated at 81.4% (479 of 588 strings)

Co-authored-by: Éfrit <efrit@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translation: F-Droid/F-Droid Server
2021-01-29 12:44:14 +01:00
Hosted Weblate
c10918c1e3
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/
Translation: F-Droid/F-Droid Server
2021-01-29 11:51:59 +01:00
Coding Otaku
165ceaa345
Translated using Weblate: Malayalam (ml) by Coding Otaku <contact@codingotaku.com>
Currently translated at 0.0% (0 of 573 strings)

Co-authored-by: Coding Otaku <contact@codingotaku.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ml/
Translation: F-Droid/F-Droid Server
2021-01-29 11:51:59 +01:00
mondstern
f7480316df
Translated using Weblate: Polish (pl) by mondstern <mondstern@snopyta.org>
Currently translated at 95.6% (548 of 573 strings)

Co-authored-by: mondstern <mondstern@snopyta.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2021-01-29 11:51:58 +01:00
Hans-Christoph Steiner
5cd9a8e396
tests: make init apksigner test use existing test keystore
This test does not need to generate a keystore, so using the existing one
reduces the run time from 4 seconds to 0.040 seconds.  Also, if makes this
mystery error on macOS go away:

```
Traceback (most recent call last):
  File "/Users/travis/build/fdroidtravis/fdroidserver/tests/init.TestCase", line 66, in test_main_in_empty_dir
    fdroidserver.init.main()
  File "/Users/travis/build/fdroidtravis/fdroidserver/fdroidserver/init.py", line 231, in main
    common.genkeystore(c)
  File "/Users/travis/build/fdroidtravis/fdroidserver/fdroidserver/common.py", line 3434, in genkeystore
    cmd = [config['keytool'], '-genkey',
KeyError: 'keytool'

```
2021-01-29 09:06:21 +01:00
Hans-Christoph Steiner
5edb5d354a Merge branch 'two-fixes' into 'master'
two fixes around the signing process

See merge request fdroid/fdroidserver!863
2021-01-28 21:45:14 +00:00
Hans-Christoph Steiner
e4087f1798 gitlab-ci: hide massively verbose messages from sdkmanager 2021-01-28 22:25:33 +01:00
Hans-Christoph Steiner
32a0c61010 init: enable apksigner by default if it is found 2021-01-28 22:25:33 +01:00
Hans-Christoph Steiner
197ca7e36f update: warn with --nosign if keystore/repo_pubkey are not present
This should also make it easier to use index.make() as an API function
since this changes whether the instance var exists before checking the
value.
2021-01-28 22:25:33 +01:00
Hans-Christoph Steiner
303c6aa247 Merge branch 'gradle-release-checksums.py' into 'master'
update to gradle v6.8.1

See merge request fdroid/fdroidserver!861
2021-01-28 21:24:38 +00:00
fdroid-bot
d89dea63c3 gradle v6.8.1 2021-01-25 10:36:37 +00:00
Hans-Christoph Steiner
dedc47a3a8 Merge branch 'fixup-gradle-release-checksums' into 'master'
Fixup gradle release checksums

See merge request fdroid/fdroidserver!860
2021-01-25 10:35:34 +00:00
Hans-Christoph Steiner
87477cd910
gitlab-ci: gradle job needs git history to find what changed 2021-01-25 11:05:22 +01:00
Hans-Christoph Steiner
0af157244a
gradle-release-checksums: runs after commits push to fdroid/fdroidserver 2021-01-25 11:05:20 +01:00
Hans-Christoph Steiner
669ce10d9a
enable complete lint/CI checking on gradle-release-checksums.py 2021-01-25 11:05:16 +01:00
Hans-Christoph Steiner
2efab0f8ec Merge branch 'gradle-fdroid-bot' into 'master'
fdroid-bot creates merge requests for gradle updates

See merge request fdroid/fdroidserver!859
2021-01-24 23:46:35 +00:00
Hans-Christoph Steiner
d133b38f22 fdroid-bot creates merge request when new gradle versions are found 2021-01-25 00:26:14 +01:00
Hans-Christoph Steiner
eec0d3a336 gitlab-ci: gradle job generates required changes for new versions 2021-01-24 16:58:38 +01:00
Hans-Christoph Steiner
b8cd4396f4 Merge branch 'no-error-without-examples-dir' into 'master'
overhaul repo_icon so there is no error if examples/ dir cannot be found, e.g. with `fdroid init`

See merge request fdroid/fdroidserver!854
2021-01-24 08:48:48 +00:00
Hans-Christoph Steiner
f527b17715 sync repo examples with defaults and comment out example repo settings
!359
2021-01-24 09:26:11 +01:00
Hans-Christoph Steiner
aebf70a763 tests: run pip tests using fdroid that pip installed 2021-01-23 20:13:17 +01:00
Hans-Christoph Steiner
f6b5f74ec6 gitlab-ci: drop support for Ubuntu/xenial, test on bionic now
xenial will become obsolete in April
2021-01-23 13:36:23 +01:00
Hans-Christoph Steiner
5ae2703477 init: no error if examples/ dir cannot be found; overhaul repo_icon
There are so many possible installation paths for Python modules, it has
been very hard to even find and test them all.  This adds a fallback option
if the examples dir cannot be found.  A repo can work without an icon or
the example config.py.

This removes the fake assumption that the icon can be a full path in the
config.py.  While the path was being properly passed through to the index
file, the file was never copied properly into place nor rsynced to the web
server.
2021-01-18 14:07:20 +01:00
Hans-Christoph Steiner
b655d20d6b
locale/pick-complete-translations.py: run sort without shell
Static code analyzers flag such things as security errors.
2021-01-16 22:01:56 +01:00
Hans-Christoph Steiner
a304ae95fa
version 2.0b1 2021-01-16 21:57:02 +01:00
Hans-Christoph Steiner
a8feeee1c5 Merge 'update_manifest' into 'master'
* update_manifest:
  Fix checks in Weblate by Hans-Christoph Steiner <hans@guardianproject.info>
  Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
  script to set the completed locales based on Weblate data
  Add missing test files

fdroid/fdroidserver!851
2021-01-16 21:53:39 +01:00
Hans-Christoph Steiner
8c9b2d9862 Fix checks in Weblate by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 97.2% (557 of 573 strings)

Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2021-01-16 21:53:09 +01:00
Besnik Bleta
d8f32b5c80 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.2% (557 of 573 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2021-01-16 21:53:09 +01:00
Hans-Christoph Steiner
5837c36219 script to set the completed locales based on Weblate data 2021-01-16 21:53:05 +01:00
Jochen Sprickerhof
527b1caa90 Add missing test files 2021-01-16 10:40:40 +01:00
Hans-Christoph Steiner
ca8f19ed99 Merge branch 'test_tar' into 'master'
Run test from sdist source

See merge request fdroid/fdroidserver!852
2021-01-16 09:19:24 +00:00
Jochen Sprickerhof
7cf64ea48f Run test from sdist source 2021-01-15 19:57:32 +01:00
Hans-Christoph Steiner
41709c142f
version 2.0b0
(2.0b is not valid)
2021-01-15 16:37:05 +01:00
Hans-Christoph Steiner
776ff8c596 Merge branch 'finalize-2.0b-release' into 'master'
Finalize 2.0b release

See merge request fdroid/fdroidserver!850
2021-01-15 14:53:13 +00:00
Hans-Christoph Steiner
c8f21bf0e0 add some example plugins for repo key extraction and migration 2021-01-15 15:25:50 +01:00
Hans-Christoph Steiner
d16ccc6d6c version 2.0b 2021-01-15 15:11:50 +01:00
Hans-Christoph Steiner
097b77ee2b update CHANGELOG
https://gitlab.com/fdroid/fdroidserver/-/milestones/10
2021-01-15 15:11:26 +01:00
Hans-Christoph Steiner
94cb19f571 set METADATA_VERSION to 20000 to leave room for 1.1.x changes 2021-01-15 14:33:21 +01:00
Golubev Alexander
5d75d4491f Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>
Currently translated at 100.0% (588 of 588 strings)

Co-authored-by: Golubev Alexander <fatzer2@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2021-01-15 14:29:27 +01:00
Ihor Hordiichuk
47f4b3509e Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (588 of 588 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2021-01-15 14:29:16 +01:00
Rafael Fontenelle
d9545973c3 Translated using Weblate: Portuguese (Brazil) (pt_BR) by Rafael Fontenelle <rafaelff@gnome.org>
Currently translated at 100.0% (588 of 588 strings)

Co-authored-by: Rafael Fontenelle <rafaelff@gnome.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/
Translation: F-Droid/F-Droid Server
2021-01-15 14:28:52 +01:00
Oğuz Ersen
69dbb83bc3 Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguzersen@protonmail.com>
Currently translated at 100.0% (588 of 588 strings)

Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2021-01-15 14:28:37 +01:00
Hans-Christoph Steiner
6ec23388ce Merge branch 'autoname-only-in-checkupdates' into 'master'
AutoName: only in checkupdates

Closes #654

See merge request fdroid/fdroidserver!759
2021-01-15 13:24:19 +00:00
Hans-Christoph Steiner
fff59e5197 only use AutoName: in checkupdates
AutoName: is only needed for the commit messages generated by checkupdates,
and it makes the logic for localized names confusing.

closes #654
refs #304
2021-01-14 20:36:09 +01:00
Hans-Christoph Steiner
0f6b638986 common.get_app_display_name() for finding app names 2021-01-14 20:34:15 +01:00
Hans-Christoph Steiner
c7fcfe3bfa update: fix setting current_version_file for make_current_version_link
Before, it would never set current_version_file to the current APK since it
first set current_version_code, then tested against CurrentVersionCode. So
if there is only a single APK and its the CurrentVersionCode, then
current_version_file would not get set.

refs #772
2021-01-14 17:09:44 +01:00
Hans-Christoph Steiner
0a1793ab7f update: write out cache as soon as possible
When working or testing with large APK collections, oftentimes it can take
hours to scan all the APKs.  If there is a failure before the apkcache is
written out, then all that work is lost since no cache is written out. This
moves the final cache writing before writing the index and knownapks to
make it more likely that the apkcache is successfully written.
2021-01-14 17:09:44 +01:00
Hans-Christoph Steiner
b5c8ecd3da Merge branch 'weblate' into 'master'
Weblate

See merge request fdroid/fdroidserver!849
2021-01-14 14:58:43 +00:00
Hans-Christoph Steiner
4d14179732 make -C locale/ clean update 2021-01-14 14:56:20 +01:00
Besnik Bleta
f24eae0f6f Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 96.8% (555 of 573 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:46 +01:00
Michal L
b0ef3c4006 Translated using Weblate: Polish (pl) by Michal L <michalrmsmi@wp.pl>
Currently translated at 91.6% (525 of 573 strings)

Co-authored-by: Michal L <michalrmsmi@wp.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:46 +01:00
Jennifer Kitts
7086a6ce4f Added translation using Weblate: English (Old) (ang) by Jennifer Kitts <kittsjennifer44@gmail.com>
Co-authored-by: Jennifer Kitts <kittsjennifer44@gmail.com>
2021-01-14 14:52:46 +01:00
Predatorix Phoenix
33d762607a Translated using Weblate: German (de) by Predatorix Phoenix <predatorix@web.de>
Currently translated at 91.4% (524 of 573 strings)

Co-authored-by: Predatorix Phoenix <predatorix@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:46 +01:00
random r
4087990125 Translated using Weblate: Italian (it) by random r <epsilin@yopmail.com>
Currently translated at 62.1% (356 of 573 strings)

Co-authored-by: random r <epsilin@yopmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:46 +01:00
fresh
38d368d7df Translated using Weblate: Greek (el) by fresh <fresh190@protonmail.com>
Currently translated at 5.5% (32 of 573 strings)

Translated using Weblate: Greek (el) by fresh <fresh190@protonmail.com>

Currently translated at 5.0% (29 of 573 strings)

Co-authored-by: fresh <fresh190@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/el/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:46 +01:00
Gontzal Manuel Pujana Onaindia
984f827eb3 Added translation using Weblate: Basque (eu) by Gontzal Manuel Pujana Onaindia <thadahdenyse@gmail.com>
Co-authored-by: Gontzal Manuel Pujana Onaindia <thadahdenyse@gmail.com>
2021-01-14 14:52:46 +01:00
THANOS SIOURDAKIS
02203ce02e Added translation using Weblate: Greek (el) by THANOS SIOURDAKIS <siourdakisthanos@gmail.com>
Co-authored-by: THANOS SIOURDAKIS <siourdakisthanos@gmail.com>
2021-01-14 14:52:46 +01:00
melusine
c4131d4429 Translated using Weblate: German (de) by melusine <melusine@mailbox.org>
Currently translated at 86.9% (498 of 573 strings)

Co-authored-by: melusine <melusine@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:46 +01:00
Eduardo Rodrigues
305ef53ec9 Translated using Weblate: Spanish (Argentina) (es_AR) by Eduardo Rodrigues <edu.rodrigues2580@gmail.com>
Currently translated at 18.3% (105 of 573 strings)

Co-authored-by: Eduardo Rodrigues <edu.rodrigues2580@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es_AR/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
A
84027d6d94 Added translation using Weblate: Finnish (fi) by A <ville.mourujarvi@hostedweblate.mail.kapsi.fi>
Co-authored-by: A <ville.mourujarvi@hostedweblate.mail.kapsi.fi>
2021-01-14 14:52:45 +01:00
Golubev Alexander
3b7736df6c Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>
Currently translated at 100.0% (573 of 573 strings)

Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>

Currently translated at 93.8% (538 of 573 strings)

Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>

Currently translated at 88.6% (508 of 573 strings)

Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>

Currently translated at 87.7% (503 of 573 strings)

Translated using Weblate: Russian (ru) by Golubev Alexander <fatzer2@gmail.com>

Currently translated at 84.8% (486 of 573 strings)

Co-authored-by: Golubev Alexander <fatzer2@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
Ihor Hordiichuk
f3dea070a7 Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (573 of 573 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
Francesco Saltori
268746896b Translated using Weblate: Italian (it) by Francesco Saltori <francescosaltori@gmail.com>
Currently translated at 60.0% (344 of 573 strings)

Co-authored-by: Francesco Saltori <francescosaltori@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
WaldiS
09c5ac9db5 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 91.2% (523 of 573 strings)

Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>

Currently translated at 90.2% (517 of 573 strings)

Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>

Currently translated at 90.0% (516 of 573 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
x
c5abf33210 Translated using Weblate: Italian (it) by x <hardwired1.0@protonmail.com>
Currently translated at 60.0% (344 of 573 strings)

Translated using Weblate: Italian (it) by x <hardwired1.0@protonmail.com>

Currently translated at 42.2% (242 of 573 strings)

Translated using Weblate: Italian (it) by x <hardwired1.0@protonmail.com>

Currently translated at 40.3% (231 of 573 strings)

Co-authored-by: x <hardwired1.0@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
Hans-Christoph Steiner
3ed8f5b505 Translated using Weblate: Italian (it) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 40.3% (231 of 573 strings)

Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
x
6dd86c5ec2 Translated using Weblate: Italian (it) by x <hardwired1.0@protonmail.com>
Currently translated at 38.5% (221 of 573 strings)

Co-authored-by: x <hardwired1.0@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
Hakim Oubouali
bfa49e9217 Translated using Weblate: Central Atlas Tamazight (tzm) by Hakim Oubouali <hakim.oubouali.skr@gmail.com>
Currently translated at 0.6% (4 of 573 strings)

Co-authored-by: Hakim Oubouali <hakim.oubouali.skr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tzm/
Translation: F-Droid/F-Droid Server
2021-01-14 14:52:45 +01:00
Hans-Christoph Steiner
08a1bd39d6 Merge branch 'fetchsrclibs' into 'master'
make fetchsrclibs plugin work without any Android SDK; add test

See merge request fdroid/fdroidserver!848
2021-01-14 13:52:39 +00:00
Hans-Christoph Steiner
40197295ae gitlab-ci: remove refs: section to hopefully get reliable job starts
"fdroid build" and "plugin_fetchsrclibs" totally failed to run here:
https://gitlab.com/eighthave/fdroidserver/-/pipelines/240160903
2021-01-11 22:13:51 +01:00
Hans-Christoph Steiner
d36f71e048 make config optional when using common.set_FDroidPopen_env()
common.set_FDroidPopen_env() is used to call git and other tools that
are not part of the Android SDK nor require Java, so the items that
are being set from the config are optional.  This lets plugins do
quite a bit without ever setting up a config.
2021-01-11 20:58:50 +01:00
Hans-Christoph Steiner
4b7d29097d gitlab-ci: new job to test plugins API + fdroid fetchsrclibs 2021-01-11 20:58:50 +01:00
Hans-Christoph Steiner
9552d3ed2e Merge branch 'gradle68' into 'master'
Gradle 6.8

See merge request fdroid/fdroidserver!847
2021-01-11 16:08:35 +00:00
Hans-Christoph Steiner
f3a5987677 Merge branch 'scanner' into 'master'
Add androidx.work:work-gcm to non-free dependencies

See merge request fdroid/fdroidserver!846
2021-01-11 12:20:07 +00:00
Licaon_Kter
67ae164293 Gradle 6.8 2021-01-11 14:10:52 +02:00
mimi89999
01699db376
Add androidx.work:work-gcm to non-free dependencies 2021-01-11 10:44:48 +01:00
Hans-Christoph Steiner
d5464fab34
release 2.0a5 2021-01-07 17:12:06 +01:00
Hans-Christoph Steiner
81b55e0d8f
tests: use wc -m to support BSD and macOS 2021-01-07 17:09:44 +01:00
Hans-Christoph Steiner
16d3f89b5c
travis-ci: Calling brew cask install is disabled! Use brew install [--cask] instead 2021-01-06 09:12:03 +01:00
Hans-Christoph Steiner
e878c6f902 Merge branch 'test_strip_path' into 'master'
Ignore src/test only in path_in_build_dir

See merge request fdroid/fdroidserver!845
2021-01-05 06:33:04 +00:00
Jochen Sprickerhof
a9c380b2b8 Ignore src/test only in path_in_build_dir
Found while debugging Debian autopkgtests.
2021-01-04 21:20:31 +01:00
Hans-Christoph Steiner
c1186f1b45 Merge branch 'playcore' into 'master'
add Google Play Core to non-free/proprietary dependencies

See merge request fdroid/fdroidserver!844
2021-01-04 17:35:07 +00:00
Izzy
434a23f822
add Google Play Core to non-free/proprietary dependencies 2021-01-04 17:39:57 +01:00
Hans-Christoph Steiner
1e4697cef9
Merge 'missing_manifest' into master
* origin/missing_manifest:
  add missing test files
  Drop deleted files from MANIFEST.in
  Sort MANIFEST.in
  Add missing test files for scanner

fdroid/fdroidserver!842
2021-01-04 16:45:09 +01:00
Jochen Sprickerhof
0e312a928b add missing test files
sorted using UNIX `sort`

https://gitlab.com/fdroid/fdroidserver/-/merge_requests/842#note_476969121
2021-01-04 16:24:55 +01:00
Jochen Sprickerhof
ffcf9e7a64 Drop deleted files from MANIFEST.in 2021-01-03 09:04:48 +01:00
Jochen Sprickerhof
e789dc4554 Sort MANIFEST.in 2021-01-03 09:04:13 +01:00
Jochen Sprickerhof
30f1f15814 Add missing test files for scanner 2021-01-03 09:04:04 +01:00
Hans-Christoph Steiner
7b94303760 Merge branch 'master' into 'master'
Update NDK to r22 and add buildtools 30.0.3

See merge request fdroid/fdroidserver!840
2020-12-28 15:52:41 +00:00
TacoTheDank
c88a3f56a1 Update NDK to r22 and add buildtools 30.0.3 2020-12-26 19:51:22 -05:00
Hans-Christoph Steiner
330ca2319c
example plugin for fetching srclibs
This is used in _fdroiddata_'s `fdroid build` CI job, and _issuebot_.
This uses @uniqx's awesome new 'plugin' feature to create a 'fetchsrclibs`
command.  The 'fdroid build' gitlab-ci job uses --on-server, which does not
set up the srclibs.  This plugin does the missing setup.

This is moved from _fdroiddata_ where it was _tools/fdroid_fetchsrclibs.py_.
2020-12-22 16:59:02 +01:00
Hans-Christoph Steiner
03aba988b2 Merge branch 'api-fixes' into 'master'
API fixes to work with plain dicts read by any YAML parser

Closes #851

See merge request fdroid/fdroidserver!838
2020-12-15 16:26:36 +00:00
Hans-Christoph Steiner
21b0a6b463 gitlab-ci: update metadata_v0 test for parsing change
`Builds:` is directly in the .yml metadata, and the internal representation
now uses the same "Builds" name.  Reading in .txt metadata files used the
name "builds" for that.  So this test now uses "Builds" as canonical.
2020-12-15 08:55:05 +01:00
Hans-Christoph Steiner
0b879f18e5 use dict syntax for app instances to allow API usage with plain dicts
Since metadata files are now YAML, programs should be able to just read in
the .yml files, then use them with fdroidserver methods without having to
know about the App class.  The App class just provides syntactic sugar by
allowing dict keys to be accessed as attributes.
2020-12-15 08:55:05 +01:00
Hans-Christoph Steiner
e93acf7964 metadata: work with dicts generated by standard YAML parsers
Now that the mismatch between 'builds' and 'Builds' has been fixed, it is
now possible to read metadata/*.yml files with a standard YAML parser like
PyYAML, then output them using `metadata.write_metadata()`.  Other API
functions in fdroidserver should also work in this case.

I did this as I was working on fdroiddata!7860
2020-12-15 08:55:05 +01:00
Hans-Christoph Steiner
bf25b4ca03 eliminate app.builds everywhere, it should be app['Builds']
The .txt format was the last place where the lowercase "builds" was used,
this converts references everywhere to be "Builds".  This makes it possible
to load metadata YAML files with any YAML parser, then have it possible to
use fdroidserver methods on that data, like metadata.write_metadata().

The test files in tests/metadata/dump/*.yaml were manually edited by cutting
the builds: block and putting it the sort order for Builds: so the contents
should be unchanged.

```
sed -i \
 -e 's/app\.builds/app.get('Builds', \[\])/g' \
 -e "s/app\.get(Builds, \[\]) =/app\['Builds'] =/g" \
 -e "s/app\.get(Builds, \[\]) =/app\['Builds'] =/g" \
 -e "s/app\.get(Builds, \[\])/app.get('Builds', \[\])/g" \
 -e "s/app\.get('Builds', \[\])\.append/app\['Builds'\].append/g" \
 -e "s/app\['builds'\]/app.get('Builds', [])/g" \
 */*.*
```
2020-12-15 08:55:05 +01:00
Hans-Christoph Steiner
877779195f Merge branch 'logging-and-two-bug-fixes' into 'master'
Logging and two bug fixes

Closes #851

See merge request fdroid/fdroidserver!837
2020-12-15 07:53:52 +00:00
Hans-Christoph Steiner
cfec25d33a update: tame androguard debug logs when --verbose is set 2020-12-15 08:30:48 +01:00
Hans-Christoph Steiner
40cd51ed59 build: include commit ID in build log 2020-12-15 08:30:48 +01:00
Hans-Christoph Steiner
fb628c2cb2 include modified and untracked files in status JSON
Ideally, an fdroid repo should be running from a clean git repo, so that
all changes are tracked in git.  This change is useful in seeing which
changes and/or files are not in git.  If there are modified files, the
dirty flag will be set, so this info can help debugging that.
2020-12-15 08:30:48 +01:00
Hans-Christoph Steiner
384922118f index: sanitize fingerprint arg, extract_pubkey() returns with spaces
The key fingerprint should be only hex digits, everything else can be
discarded.  That makes it easy to use this function various fingerprint
formats, including the common, human-readable forms spaces between pairs or
quartets.
2020-12-15 08:30:48 +01:00
Hans-Christoph Steiner
d9171f11e0 update: improve logging when exiting due to bad APK file
closes #851
2020-12-15 08:30:48 +01:00
Hans-Christoph Steiner
ba854cbc0f index: fix GitLab Raw URLs with gitlab.com and recent versions
GitLab seems to be moving to always having "-" as the first path segment in
all the project URLs.  So the URL without a "-" is now a redirect.
2020-12-15 08:30:48 +01:00
Hans-Christoph Steiner
531c36f310
fix typo in ac3eb0e641 2020-12-14 23:08:32 +01:00
360 changed files with 135443 additions and 49080 deletions

3
.bandit Normal file
View file

@ -0,0 +1,3 @@
[bandit]
skips: B110,B404,B408,B603,B607,B322
targets: .

15
.editorconfig Normal file
View file

@ -0,0 +1,15 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[**.py]
indent_style = space
indent_size = 4
[.gitlab-ci.yml]
indent_style = space
indent_size = 2

29
.gitignore vendored
View file

@ -4,13 +4,14 @@
*.box
TAGS
.idea
.ropeproject/
# files generated by build
build/
dist/
/build/
/dist/
env/
ENV/
fdroidserver.egg-info/
/fdroidserver.egg-info/
pylint.parseable
/.testfiles/
README.rst
@ -18,6 +19,7 @@ README.rst
# editor tmp files
.*.swp
.ropeproject/
# files generated by tests
tmp/
@ -25,7 +27,6 @@ tmp/
/tests/repo/status
# files used in manual testing
/config.py
/config.yml
/tmp/
/logs/
@ -40,14 +41,25 @@ makebuildserver.config.py
/tests/OBBMainPatchCurrent.apk
/tests/OBBMainTwoVersions.apk
/tests/archive/categories.txt
/tests/archive/diff/[1-9]*.json
/tests/archive/entry.jar
/tests/archive/entry.json
/tests/archive/icons*
/tests/archive/index.jar
/tests/archive/index_unsigned.jar
/tests/archive/index.xml
/tests/archive/index-v1.jar
/tests/archive/index-v1.json
/tests/archive/index-v2.json
/tests/archive/index.css
/tests/archive/index.html
/tests/archive/index.jar
/tests/archive/index.png
/tests/archive/index.xml
/tests/archive/index_unsigned.jar
/tests/metadata/org.videolan.vlc/en-US/icon*.png
/tests/repo/diff/[1-9]*.json
/tests/repo/index.css
/tests/repo/index.html
/tests/repo/index.jar
/tests/repo/index.png
/tests/repo/index_unsigned.jar
/tests/repo/index-v1.jar
/tests/repo/info.guardianproject.urzip/
@ -62,3 +74,6 @@ makebuildserver.config.py
# generated by gettext
locale/*/LC_MESSAGES/fdroidserver.mo
# sphinx
public/

View file

@ -1,18 +1,52 @@
---
# Use merge request pipelines when a merge request is open for the branch.
# Use branch pipelines when a merge request is not open for the branch.
# https://docs.gitlab.com/ci/yaml/workflow/#switch-between-branch-pipelines-and-merge-request-pipelines
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: never
- if: $CI_COMMIT_BRANCH
stages:
- lint
- test # default for jobs that do not specify stage:
- deploy
variables:
pip: pip3 --timeout 100 --retries 10
# speed up git checkout phase
# speed up git checkout phase
GIT_DEPTH: 1
test:
image: registry.gitlab.com/fdroid/ci-images-base
# Run the whole test suite in an environment that is like the
# buildserver guest VM. This installs python3-babel because that is
# only used by the test suite, and not needed in the buildserver.
#
# Some extra packages are required for this test run that are not
# provided by the buildserver since they are not needed there:
# * python3-babel for compiling localization files
# * gnupg-agent for the full signing setup
# * python3-clint for fancy progress bars for users
# * python3-pycountry for linting config/mirrors.yml
buildserver run-tests:
image: registry.gitlab.com/fdroid/fdroidserver:buildserver
script:
- $pip install -e .[test]
# the `fdroid build` test in tests/run-tests needs android-23
- echo y | $ANDROID_HOME/tools/bin/sdkmanager "platforms;android-23"
- cd tests
- ./complete-ci-tests
- apt-get update
- apt-get install gnupg-agent python3-babel python3-biplist python3-clint python3-pycountry
- ./tests/run-tests
# make sure that translations do not cause stacktraces
- cd $CI_PROJECT_DIR/locale
- for locale in *; do
test -d $locale || continue;
for cmd in `sed -n 's/.*("\(.*\)", *_.*/\1/p' $CI_PROJECT_DIR/fdroid`; do
LANGUAGE=$locale $CI_PROJECT_DIR/fdroid $cmd --help > /dev/null;
done
done
# Test that the parsing of the .yml metadata format didn't change from last
# released version. This uses the commit ID of the release tags,
@ -22,17 +56,18 @@ test:
# The COMMIT_ID should be bumped after each release, so that the list
# of sed hacks needed does not continuously grow.
metadata_v0:
image: registry.gitlab.com/fdroid/ci-images-base
image: registry.gitlab.com/fdroid/fdroidserver:buildserver
variables:
GIT_DEPTH: 1000
RELEASE_COMMIT_ID: 37f37ebd88e79ebe93239b72ed5503d5bde13f4b # 2.0a~
RELEASE_COMMIT_ID: 50aa35772b058e76b950c01e16019c072c191b73 # after switching to `git rev-parse`
script:
- git fetch https://gitlab.com/fdroid/fdroidserver.git $RELEASE_COMMIT_ID
- cd tests
- export GITCOMMIT=`git describe`
- export GITCOMMIT=$(git rev-parse HEAD)
- git checkout $RELEASE_COMMIT_ID
- cd ..
- git clone --depth 1 https://gitlab.com/fdroid/fdroiddata.git
- rm -f fdroiddata/config.yml # ignore config for this test
- cd fdroiddata
- ../tests/dump_internal_metadata_format.py
- cd ..
@ -41,8 +76,9 @@ metadata_v0:
- cd fdroiddata
- ../tests/dump_internal_metadata_format.py
- sed -i
-e '/Liberapay:/d'
-e '/OpenCollective/d'
-e '/ArchivePolicy:/d'
-e '/FlattrID:/d'
-e '/RequiresRoot:/d'
metadata/dump_*/*.yaml
- diff -uw metadata/dump_*
@ -54,132 +90,326 @@ metadata_v0:
- echo Etc/UTC > /etc/timezone
- echo 'APT::Install-Recommends "0";'
'APT::Install-Suggests "0";'
'APT::Acquire::Retries "20";'
'APT::Get::Assume-Yes "true";'
'Acquire::Retries "20";'
'Dpkg::Use-Pty "0";'
'quiet "1";'
>> /etc/apt/apt.conf.d/99gitlab
# Ubuntu and other distros often lack https:// support
- grep Debian /etc/issue.net
&& { find /etc/apt/sources.list* -type f | xargs sed -i s,http:,https:, ; }
# The official Debian docker images ship without ca-certificates,
# TLS certificates cannot be verified until that is installed. The
# following code turns off TLS verification, and enables HTTPS, so
# at least unverified TLS is used for apt-get instead of plain
# HTTP. Once ca-certificates is installed, the CA verification is
# enabled by removing this config. This set up makes the initial
# `apt-get update` and `apt-get install` look the same as verified
# TLS to the network observer and hides the metadata.
- echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates
- apt-get update
- apt-get install ca-certificates
- rm /etc/apt/apt.conf.d/99nocacertificates
- apt-get dist-upgrade
# For jobs that only need to run when there are changes to Python files.
.python-rules-changes: &python-rules-changes
rules:
- changes:
- .gitlab-ci.yml
- fdroid
- makebuildserver
- setup.py
- fdroidserver/*.py
- tests/*.py
# Since F-Droid uses Debian as its default platform, from production
# servers to CI to contributor machines, it is important to know when
# changes in Debian break our stuff. This tests against the latest
# dependencies as they are included in Debian.
debian_testing:
image: debian:testing
<<: *apt-template
only:
- master@fdroid/fdroidserver
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver"
script:
- apt-get install
aapt
androguard
apksigner
dexdump
fdroidserver
git
gnupg
ipfs-cid
python3-biplist
python3-defusedxml
python3-libcloud
python3-pycountry
python3-setuptools
zipalign
sdkmanager
- python3 -c 'import fdroidserver'
- python3 -c 'import androguard'
- python3 -c 'import sdkmanager'
- cd tests
- ./run-tests
# Test using latest LTS set up with the PPA, including Recommends.
# bionic's apksigner, which comes from Recommends:, requires binfmt
# support in the kernel.
ubuntu_lts_ppa:
image: ubuntu:latest
<<: *apt-template
only:
- master@fdroid/fdroidserver
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver"
script:
- export ANDROID_HOME=/usr/lib/android-sdk
- apt-get install gnupg
- while ! apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 9AAC253193B65D4DF1D0A13EEC4632C79C5E0151; do sleep 15; done
- export RELEASE=`sed -n 's,^deb [^ ][^ ]* \([a-z]*\).*,\1,p' /etc/apt/sources.list | head -1`
- while ! apt-key adv --keyserver keyserver.ubuntu.com --recv-key 9AAC253193B65D4DF1D0A13EEC4632C79C5E0151; do sleep 15; done
- export RELEASE=$(sed -n 's,^Suites\x3a \([a-z]*\).*,\1,p' /etc/apt/sources.list.d/*.sources | head -1)
- echo "deb http://ppa.launchpad.net/fdroid/fdroidserver/ubuntu $RELEASE main" >> /etc/apt/sources.list
- apt-get update
- apt-get dist-upgrade
- mount | grep binfmt_misc || mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
- apt-get install --install-recommends binfmt-support fdroidserver git python3-defusedxml python3-setuptools
- ls -l /proc/sys/fs/binfmt_misc || true
- test -e /proc/sys/fs/binfmt_misc/jarwrapper || apt -qy purge apksigner
- apt-get install --install-recommends
dexdump
fdroidserver
git
python3-biplist
python3-pycountry
python3-setuptools
sdkmanager
# Test things work with a default branch other than 'master'
- git config --global init.defaultBranch thisisnotmasterormain
- cd tests
- ./run-tests
# Test using Xenial LTS with all depends from pypi. The venv is used
# to isolate the dist tarball generation environment from the clean
# install environment. Xenial's pip is too old to install all the
# dependencies, so this has to uppgrade pip and setuptools in order to
# run the install.
ubuntu_xenial_pip:
image: ubuntu:xenial
# Test to see how rclone works with S3
test_deploy_to_s3_with_rclone:
image: debian:bookworm-slim
<<: *apt-template
services:
- name: docker:dind
command: ["--tls=false"]
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
before_script:
# ensure minio is up before executing tests
- apt-get update
- apt-get install -y
androguard
apksigner
curl
docker.io
git
python3-venv
rclone
- python3 -m venv --system-site-packages test-venv
- . test-venv/bin/activate
- pip install testcontainers[minio]
- pip install .
script:
- python3 -m unittest -k test_update_remote_storage_with_rclone --verbose
rules:
- changes:
- .gitlab-ci.yml
- fdroidserver/deploy.py
- tests/test_deploy.py
- tests/test_integration.py
# Test using Ubuntu/jammy LTS (supported til April, 2027) with depends
# from pypi and sdkmanager. The venv is used to isolate the dist
# tarball generation environment from the clean install environment.
ubuntu_jammy_pip:
image: ubuntu:jammy
<<: *apt-template
script:
- apt-get install git default-jdk-headless python3-pip python3-venv rsync zipalign libarchive13
- rm -rf env
- pyvenv env
- . env/bin/activate
- $pip install --upgrade babel pip setuptools
- apt-get install git default-jdk-headless python3-pip python3-venv rsync
# setup venv to act as release build machine
- python -m venv sdist-env
- python3 -m venv sdist-env
- . sdist-env/bin/activate
- ./setup.py compile_catalog sdist
- ./setup.py sdist
- deactivate
- tar tzf dist/fdroidserver-*.tar.gz | grep locale/de/LC_MESSAGES/fdroidserver.mo
- tar tzf dist/fdroidserver-*.tar.gz
# back to bare machine to act as user's install machine
- $pip install --upgrade pip setuptools
- export ANDROID_HOME=/opt/android-sdk
- $pip install sdkmanager
- sdkmanager 'build-tools;35.0.0'
# Install extras_require.optional from setup.py
- $pip install biplist pycountry
- $pip install dist/fdroidserver-*.tar.gz
- test -e /usr/share/locale/de/LC_MESSAGES/fdroidserver.mo
- ./tests/run-tests
- tar xzf dist/fdroidserver-*.tar.gz
- cd fdroidserver-*
- export PATH=$PATH:$ANDROID_HOME/build-tools/35.0.0
- fdroid=`which fdroid` ./tests/run-tests
# test install process on a bleeding edge distro with pip
arch_pip_install:
image: archlinux/base
only:
- master@fdroid/fdroidserver
script:
- pacman --sync --sysupgrade --refresh --noconfirm git grep python-pip python-virtualenv tar
- pip install -e .
- fdroid
- fdroid readmeta
- fdroid update --help
# check localization was properly installed
- LANGUAGE='de' fdroid --help | grep 'Gültige Befehle sind'
lint_format_safety_bandit_checks:
image: alpine:3.10 # cannot upgrade until bandit supports Python 3.8
# Run all the various linters and static analysis tools.
hooks/pre-commit:
stage: lint
image: debian:bookworm-slim
variables:
LANG: C.UTF-8
script:
- apk add --no-cache bash build-base dash ca-certificates gcc python3 python3-dev
- python3 -m ensurepip
- $pip install Babel 'bandit<1.6.0' pycodestyle pyflakes pylint safety
- export EXITVALUE=0
- function set_error() { export EXITVALUE=1; printf "\x1b[31mERROR `history|tail -2|head -1|cut -b 6-500`\x1b[0m\n"; }
- ./hooks/pre-commit || set_error
- ./tests/test-gradlew-fdroid || set_error
- bandit
-ii
-s B110,B322,B404,B408,B410,B603,B607
-r $CI_PROJECT_DIR fdroid
|| set_error
- safety check --full-report || set_error
- pylint --rcfile=.pylint-rcfile --output-format=colorized --reports=n
- apt-get update
- apt-get -y install --no-install-recommends
bash
ca-certificates
dash
gcc
git
make
pycodestyle
pyflakes3
python3-dev
python3-git
python3-nose
python3-pip
python3-yaml
- ./hooks/pre-commit
bandit:
image: debian:bookworm-slim
<<: *python-rules-changes
<<: *apt-template
script:
- apt-get install python3-pip
- $pip install --break-system-packages bandit
- bandit -r -ii --ini .bandit
pylint:
stage: lint
image: debian:bookworm-slim
<<: *python-rules-changes
<<: *apt-template
script:
- apt-get install pylint python3-pip
- $pip install --break-system-packages pylint-gitlab
- pylint --output-format=colorized,pylint_gitlab.GitlabCodeClimateReporter:pylint-report.json
fdroid
makebuildserver
setup.py
fdroidserver/*.py
tests/*.py
tests/*.TestCase
|| set_error
- apk add --no-cache gettext make
artifacts:
reports:
codequality: pylint-report.json
when: always
shellcheck:
stage: lint
image: debian:bookworm-slim
rules:
- changes:
- .gitlab-ci.yml
- hooks/install-hooks.sh
- hooks/pre-commit
- tests/run-tests
<<: *apt-template
script:
- apt-get install shellcheck
# TODO GitLab Code Quality report https://github.com/koalaman/shellcheck/issues/3155
- shellcheck --exclude SC2046,SC2090 --severity=warning --color
hooks/install-hooks.sh
hooks/pre-commit
tests/run-tests
# Check all the dependencies in Debian to mirror production. CVEs are
# generally fixed in the latest versions in pip/pypi.org, so it isn't
# so important to scan that kind of install in CI.
# https://docs.safetycli.com/safety-docs/installation/gitlab
safety:
image: debian:bookworm-slim
rules:
- if: $SAFETY_API_KEY
changes:
- .gitlab-ci.yml
- .safety-policy.yml
- pyproject.toml
- setup.py
<<: *apt-template
variables:
LANG: C.UTF-8
script:
- apt-get install
fdroidserver
python3-biplist
python3-pip
python3-pycountry
- $pip install --break-system-packages .
- $pip install --break-system-packages safety
- python3 -m safety --key "$SAFETY_API_KEY" --stage cicd scan
# TODO tests/*/*/*.yaml are not covered
yamllint:
stage: lint
image: debian:bookworm-slim
rules:
- changes:
- .gitlab-ci.yml
- .safety-policy.yml
- .yamllint
- tests/*.yml
- tests/*/*.yml
- tests/*/*/.*.yml
<<: *apt-template
variables:
LANG: C.UTF-8
script:
- apt-get install yamllint
- yamllint
.gitlab-ci.yml
.safety-policy.yml
.yamllint
tests/*.yml
tests/*/*.yml
tests/*/*/.*.yml
locales:
stage: lint
image: debian:bookworm-slim
variables:
LANG: C.UTF-8
script:
- apt-get update
- apt-get -y install --no-install-recommends
gettext
make
python3-babel
- export EXITVALUE=0
- function set_error() { export EXITVALUE=1; printf "\x1b[31mERROR `history|tail -2|head -1|cut -b 6-500`\x1b[0m\n"; }
- make -C locale compile || set_error
- rm -f locale/*/*/*.mo
- pybabel compile --domain=fdroidserver --directory locale 2>&1 | (grep -F "error:" && exit 1) || true
- pybabel compile --domain=fdroidserver --directory locale 2>&1 | { grep -F "error:" && exit 1; } || true
- exit $EXITVALUE
black:
stage: lint
image: debian:bookworm-slim
<<: *apt-template
script:
- apt-get install black
- black --check --diff --color $CI_PROJECT_DIR
fedora_latest:
image: fedora:latest
only:
- master@fdroid/fdroidserver
image: fedora:39 # support ends on 2024-11-12
script:
# tricks to hopefully make runs more reliable
- echo "timeout=600" >> /etc/dnf/dnf.conf
@ -192,102 +422,429 @@ fedora_latest:
findutils
git
gnupg
java-1.8.0-openjdk-devel
java-17-openjdk-devel
openssl
python3
python3-babel
python3-matplotlib
python3-pip
python3-pycountry
rsync
unzip
wget
which
- ./setup.py compile_catalog sdist
- $pip install sdkmanager
- ./setup.py sdist
- useradd -m -c "test account" --password "fakepassword" testuser
- su testuser --login --command "cd `pwd`; $pip install --user dist/fdroidserver-*.tar.gz"
- test -e ~testuser/.local/share/locale/de/LC_MESSAGES/fdroidserver.mo
- wget --no-verbose -O tools.zip https://dl.google.com/android/repository/tools_r25.2.5-linux.zip
- unzip -q tools.zip
- rm tools.zip
- export BUILD_TOOLS_VERSION=`sed -n "s,^MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION\s*=\s*['\"]\(.*\)[['\"],\1,p" fdroidserver/common.py`
- export JAVA_HOME=/etc/alternatives/jre
- export ANDROID_HOME=`pwd`/android-sdk
- mkdir $ANDROID_HOME
- mv tools $ANDROID_HOME/
- mkdir -p $ANDROID_HOME/licenses/
- printf "\n8933bad161af4178b1185d1a37fbf41ea5269c55\nd56f5187479451eabf01fb78af6dfcb131a6481e\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > $ANDROID_HOME/licenses/android-sdk-license
- printf "\n84831b9409646a918e30573bab4c9c91346d8abd" > $ANDROID_HOME/licenses/android-sdk-preview-license
- printf "\n79120722343a6f314e0719f863036c702b0e6b2a\n84831b9409646a918e30573bab4c9c91346d8abd" > $ANDROID_HOME/licenses/android-sdk-preview-license-old
- mkdir ~/.android
- touch ~/.android/repositories.cfg
- echo y | $ANDROID_HOME/tools/bin/sdkmanager "platform-tools"
- echo y | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;$BUILD_TOOLS_VERSION"
- sdkmanager "platform-tools" "build-tools;$BUILD_TOOLS_VERSION"
- chown -R testuser .
- cd tests
- su testuser --login --command
"cd `pwd`; export ANDROID_HOME=$ANDROID_HOME; fdroid=~testuser/.local/bin/fdroid ./run-tests"
"cd `pwd`; export CI=$CI ANDROID_HOME=$ANDROID_HOME; fdroid=~testuser/.local/bin/fdroid ./run-tests"
macOS:
tags:
- saas-macos-medium-m1
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver"
script:
- export HOMEBREW_CURL_RETRIES=10
- brew update > /dev/null
- brew upgrade
- brew install fdroidserver
# Android SDK and Java JDK
- brew install --cask android-commandlinetools temurin # temurin is a JDK
# test suite dependencies
- brew install bash coreutils gnu-sed
# TODO port tests/run-tests to POSIX and gsed, it has a couple GNU-isms like du --bytes
- export PATH="$(brew --prefix fdroidserver)/libexec/bin:$(brew --prefix coreutils)/libexec/gnubin:$PATH"
- brew autoremove
- brew info fdroidserver
- export BUILD_TOOLS_VERSION=`gsed -n "s,^MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION\s*=\s*['\"]\(.*\)[['\"],\1,p" fdroidserver/common.py`
- export ANDROID_HOME="$(brew --prefix)/share/android-commandlinetools"
- mkdir -p "$ANDROID_HOME/licenses"
- echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
- echo -e "\nd56f5187479451eabf01fb78af6dfcb131a6481e" >> "$ANDROID_HOME/licenses/android-sdk-license"
- echo -e "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" >> "$ANDROID_HOME/licenses/android-sdk-license"
- $(brew --prefix)/bin/sdkmanager "build-tools;$BUILD_TOOLS_VERSION"
- echo "macOS sticks with bash 3.x because of licenses, so avoid new bash syntax"
- /bin/bash --version
- /bin/bash -n tests/run-tests
# test fdroidserver from git with current package's dependencies
- fdroid="$(brew --prefix fdroidserver)/libexec/bin/python3 $PWD/fdroid" ./tests/run-tests
gradle:
image: alpine:3.7
variables:
LANG: C.UTF-8
image: debian:trixie-slim
<<: *apt-template
rules:
- changes:
- .gitlab-ci.yml
- makebuildserver
script:
- apk add --no-cache ca-certificates git python3
# if this is a merge request fork, then only check if makebuildserver changed
- if [ "$CI_PROJECT_NAMESPACE" != "fdroid" ]; then
git fetch https://gitlab.com/fdroid/fdroidserver.git;
for f in `git diff --name-only --diff-filter=d FETCH_HEAD...HEAD`; do
test "$f" == "makebuildserver" && export CHANGED="yes";
done;
test -z "$CHANGED" && exit;
fi
- python3 -m ensurepip
- $pip install beautifulsoup4 requests
- apt-get install
ca-certificates
git
python3-colorama
python3-packaging
python3-requests
- ./tests/gradle-release-checksums.py
# Run an actual build in a simple, faked version of the buildserver guest VM.
fdroid build:
image: registry.gitlab.com/fdroid/ci-images-client
only:
refs:
- branches
- pipelines
changes:
- .gitlab-ci.yml
- buildserver/provision-apt-get-install
- fdroidserver/build.py
- fdroidserver/common.py
- fdroidserver/exception.py
- fdroidserver/metadata.py
- fdroidserver/net.py
- fdroidserver/scanner.py
- fdroidserver/vmtools.py
image: registry.gitlab.com/fdroid/fdroidserver:buildserver
rules:
- changes:
- .gitlab-ci.yml
- fdroidserver/build.py
- fdroidserver/common.py
- fdroidserver/exception.py
- fdroidserver/metadata.py
- fdroidserver/net.py
- fdroidserver/scanner.py
- fdroidserver/vmtools.py
# for the docker: job which depends on this one
- makebuildserver
- buildserver/*
cache:
key: "$CI_JOB_NAME"
paths:
- .gradle
script:
- bash buildserver/provision-apt-get-install http://deb.debian.org/debian
- apt-get update
- apt-get dist-upgrade
- apt-get install -t stretch-backports
python3-asn1crypto
python3-pip
python3-ruamel.yaml
python3-setuptools
python3-venv
- apt-get purge fdroidserver
- pyvenv env --system-site-packages
- . env/bin/activate
- $pip install -e .
- export PATH="$CI_PROJECT_DIR:$PATH"
- export PYTHONPATH=$CI_PROJECT_DIR
- export PYTHONUNBUFFERED=true
- apt-get clean
- git clone https://gitlab.com/fdroid/fdroiddata.git --depth 1
- test -n "$fdroidserver" || source /etc/profile.d/bsenv.sh
- ln -fsv "$CI_PROJECT_DIR" "$fdroidserver"
# TODO remove sdkmanager install once it is included in the buildserver image
- apt-get install sdkmanager
- rm -rf "$ANDROID_HOME/tools" # TODO remove once sdkmanager can upgrade installed packages
- sdkmanager "tools" "platform-tools" "build-tools;31.0.0"
- git ls-remote https://gitlab.com/fdroid/fdroiddata.git master
- git clone --depth 1 https://gitlab.com/fdroid/fdroiddata.git
- cd fdroiddata
- test -d build || mkdir build
- for d in build logs repo tmp unsigned $home_vagrant/.android; do
test -d $d || mkdir $d;
chown -R vagrant $d;
done
- export GRADLE_USER_HOME=$home_vagrant/.gradle
- export fdroid="sudo --preserve-env --user vagrant
env PATH=$fdroidserver:$PATH
env PYTHONPATH=$fdroidserver:$fdroidserver/examples
env PYTHONUNBUFFERED=true
env TERM=$TERM
env HOME=$home_vagrant
fdroid"
- git -C $home_vagrant/gradlew-fdroid pull
- chown -R vagrant $home_vagrant
- chown -R vagrant $fdroidserver/.git
- chown vagrant $fdroidserver/
- chown -R vagrant .git
- chown vagrant .
# try user build
- $fdroid build --verbose --latest org.fdroid.fdroid.privileged
# try on-server build
- $fdroid build --verbose --on-server --no-tarball --latest org.fdroid.fdroid
- export GRADLE_USER_HOME=$CI_PROJECT_DIR/.gradle
# try a user build first
- fdroid build --verbose --latest org.fdroid.fdroid.privileged
# each `fdroid build --on-server` run expects sudo, then uninstalls it
- apt-get install sudo
- fdroid build --verbose --on-server --no-tarball --latest org.fdroid.fdroid
- if dpkg --list sudo; then echo "sudo should not be still there"; exit 1; fi
- 'if [ ! -f repo/status/running.json ]; then echo "ERROR: running.json does not exist!"; exit 1; fi'
- 'if [ ! -f repo/status/build.json ]; then echo "ERROR: build.json does not exist!"; exit 1; fi'
# test the plugin API and specifically the fetchsrclibs plugin, which
# is used by the `fdroid build` job. This uses a fixed commit from
# fdroiddata because that one is known to work, and this is a CI job,
# so it should be isolated from the normal churn of fdroiddata.
plugin_fetchsrclibs:
image: debian:bookworm-slim
<<: *apt-template
rules:
- changes:
- .gitlab-ci.yml
- examples/fdroid_fetchsrclibs.py
- fdroidserver/__main__.py
script:
- apt-get install
curl
git
python3-cffi
python3-matplotlib
python3-nacl
python3-paramiko
python3-pil
python3-pip
python3-pycparser
python3-venv
- python3 -m venv --system-site-packages env
- . env/bin/activate
- export PATH="$CI_PROJECT_DIR:$PATH"
- export PYTHONPATH="$CI_PROJECT_DIR/examples"
# workaround https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003252
- export SETUPTOOLS_USE_DISTUTILS=stdlib
- $pip install -e .
- fdroid | grep fetchsrclibs
- mkdir fdroiddata
- commitid=b9e9a077d720c86ff6fff4dbb341254cc4370b1a
- curl https://gitlab.com/fdroid/fdroiddata/-/archive/${commitid}/fdroiddata-${commitid}.tar.gz
| tar -xz --directory=fdroiddata --strip-components=1
- cd fdroiddata
- fdroid fetchsrclibs freemap.opentrail:4 --verbose
- test -d build/freemap.opentrail/.git
- test -d build/srclib/andromaps/.git
- test -d build/srclib/freemaplib/.git
- test -d build/srclib/freemaplibProj/.git
- test -d build/srclib/JCoord/.git
- test -d build/srclib/javaproj/.git
# test a full update and deploy cycle to gitlab.com
servergitmirrors:
image: debian:bookworm-slim
<<: *apt-template
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver"
script:
- apt-get install
default-jdk-headless
git
openssh-client
openssl
python3-cffi
python3-cryptography
python3-matplotlib
python3-nacl
python3-pil
python3-pip
python3-pycparser
python3-setuptools
python3-venv
rsync
wget
- apt-get install apksigner
- python3 -m venv --system-site-packages env
- . env/bin/activate
- export PYTHONPATH=`pwd`
- export SETUPTOOLS_USE_DISTUTILS=stdlib # https://github.com/pypa/setuptools/issues/2956
- $pip install -e .
- mkdir /root/.ssh/
- ./tests/key-tricks.py
- ssh-keyscan gitlab.com >> /root/.ssh/known_hosts
- test -d /tmp/fdroid/repo || mkdir -p /tmp/fdroid/repo
- cp tests/config.yml tests/keystore.jks /tmp/fdroid/
- cp tests/repo/com.politedroid_6.apk /tmp/fdroid/repo/
- cd /tmp/fdroid
- touch fdroid-icon.png
- printf "\nservergitmirrors\x3a 'git@gitlab.com:fdroid/ci-test-servergitmirrors-repo.git'\n" >> config.yml
- $PYTHONPATH/fdroid update --verbose --create-metadata
- $PYTHONPATH/fdroid deploy --verbose
- export DLURL=`grep -Eo 'https://gitlab.com/fdroid/ci-test-servergitmirrors-repo[^"]+' repo/index-v1.json`
- echo $DLURL
- wget $DLURL/index-v1.jar
- diff repo/index-v1.jar index-v1.jar
Build documentation:
image: debian:bookworm-slim
<<: *python-rules-changes
<<: *apt-template
script:
- apt-get install make python3-sphinx python3-numpydoc python3-pydata-sphinx-theme pydocstyle fdroidserver
- apt purge fdroidserver
# ignore vendored files
- pydocstyle --verbose --match='(?!apksigcopier|looseversion|setup|test_).*\.py' fdroidserver
- cd docs
- sphinx-apidoc -o ./source ../fdroidserver -M -e
- PYTHONPATH=.. sphinx-autogen -o generated source/*.rst
- PYTHONPATH=.. make html
artifacts:
paths:
- docs/build/html/
# this job will only run in branches called "windows" until the Windows port is complete
Windows:
tags:
- windows
rules:
- if: $CI_COMMIT_BRANCH == "windows"
script:
- Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
- choco install --no-progress -y git --force --params "/GitAndUnixToolsOnPath"
- choco install --no-progress -y python3 --version=3.10
- choco install --no-progress -y jdk8
- choco install --no-progress -y rsync
- refreshenv
- python -m pip install --upgrade babel pip setuptools
- python -m pip install -e .
- $files = @(Get-ChildItem tests\test_*.py)
- foreach ($f in $files) {
write-output $f;
python -m unittest $f;
if( $LASTEXITCODE -eq 0 ) {
write-output "SUCCESS $f";
} else {
write-output "ERROR $f failed";
}
}
# these are the tests that must pass
- python -m unittest -k
checkupdates
exception
import_subcommand
test_lint
test_metadata
test_rewritemeta
test_vcs
tests.test_init
tests.test_main
after_script:
- Copy-Item C:\ProgramData\chocolatey\logs\chocolatey.log
artifacts:
when: always
paths:
- "*.log"
allow_failure:
exit_codes: 1
pages:
image: alpine:latest
stage: deploy
script:
- cp docs/build/html public -r # GL Pages needs the files in a directory named "public"
artifacts:
paths:
- public
needs:
- job: "Build documentation"
optional: true
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # only publish pages on default (master) branch
# This job pushes the official CI docker image based on the master
# branch, so in fdroid/fdroidserver, it should only run on the master
# branch. Otherwise, tags or other branches will overwrite the docker
# image which is supposed to be what is in master.
docker:
dependencies:
- fdroid build
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver"
changes:
- .gitlab-ci.yml
- makebuildserver
- buildserver/*
image: docker:dind
services:
- docker:dind
variables:
RELEASE_IMAGE: $CI_REGISTRY_IMAGE:buildserver
script:
# git ref names can contain many chars that are not allowed in docker tags
- export TEST_IMAGE=$CI_REGISTRY_IMAGE:$(printf $CI_COMMIT_REF_NAME | sed 's,[^a-zA-Z0-9_.-],_,g')
- cd buildserver
- docker build -t $TEST_IMAGE --build-arg GIT_REV_PARSE_HEAD=$(git rev-parse HEAD) .
- docker tag $TEST_IMAGE $RELEASE_IMAGE
- docker tag $TEST_IMAGE ${RELEASE_IMAGE}-bookworm
- echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin registry.gitlab.com
# This avoids filling up gitlab.com free tier accounts with unused docker images.
- if test -z "$FDROID_PUSH_DOCKER_IMAGE"; then
echo "Skipping docker push to save quota on your gitlab namespace.";
echo "If you want to enable the push, set FDROID_PUSH_DOCKER_IMAGE in";
echo "https://gitlab.com/$CI_PROJECT_NAMESPACE/fdroidserver/-/settings/ci_cd#js-cicd-variables-settings";
exit 0;
fi
- docker push $RELEASE_IMAGE
- docker push $RELEASE_IMAGE-bookworm
# PUBLISH is the signing server. It has a very minimal manual setup.
PUBLISH:
image: debian:bookworm-backports
<<: *python-rules-changes
script:
- apt-get update
- apt-get -qy upgrade
- apt-get -qy install --no-install-recommends -t bookworm-backports
androguard
apksigner
curl
default-jdk-headless
git
gpg
gpg-agent
python3-asn1crypto
python3-defusedxml
python3-git
python3-ruamel.yaml
python3-yaml
rsync
# Run only relevant parts of the test suite, other parts will fail
# because of this minimal base setup.
- python3 -m unittest
tests/test_gpgsign.py
tests/test_metadata.py
tests/test_publish.py
tests/test_signatures.py
tests/test_signindex.py
- cd tests
- mkdir archive
- mkdir unsigned
- cp urzip-release-unsigned.apk unsigned/info.guardianproject.urzip_100.apk
- grep '^key.*pass' config.yml | sed 's,\x3a ,=,' > $CI_PROJECT_DIR/variables
- sed -Ei 's,^(key.*pass|keystore)\x3a.*,\1\x3a {env\x3a \1},' config.yml
- printf '\ngpghome\x3a {env\x3a gpghome}\n' >> config.yml
- |
tee --append $CI_PROJECT_DIR/variables <<EOF
gpghome=$CI_PROJECT_DIR/tests/gnupghome
keystore=$CI_PROJECT_DIR/tests/keystore.jks
serverwebroot=/tmp
export gpghome keypass keystorepass keystore serverwebroot
EOF
- source $CI_PROJECT_DIR/variables
# silence warnings
- chmod 0600 config.yml config/*.yml config/*/*.yml
- chmod 0700 $gpghome
- export PATH=$CI_PROJECT_DIR:$PATH
# run signpkg.sh
- fdroid publish --verbose
- fdroid gpgsign --verbose
- rsync --progress repo/* $serverwebroot/
# run signindex.sh
- fdroid gpgsign --verbose
- fdroid signindex --verbose
- rsync --stats repo/* $serverwebroot/

2
.mailmap Normal file
View file

@ -0,0 +1,2 @@
Gregor Düster <git@gdstr.eu> FestplattenSchnitzel <festplatte.schnitzel@posteo.de>
Hans-Christoph Steiner <hans@eds.org> <hans@guardianproject.info>

View file

@ -1,45 +0,0 @@
[MASTER]
# Use multiple processes to speed up Pylint.
jobs=4
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels. Leave empty to show
# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
confidence=HIGH,INFERENCE
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once).You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
disable=invalid-name,missing-docstring,no-member
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,XXX,TODO
[BASIC]
# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_,e,f,fp
[ELIF]
# Maximum number of nested blocks for function / method body
max-nested-blocks=5

55
.safety-policy.yml Normal file
View file

@ -0,0 +1,55 @@
---
version: '3.0'
scanning-settings:
max-depth: 6
exclude:
report:
dependency-vulnerabilities:
enabled: true
auto-ignore-in-report:
vulnerabilities:
52495:
reason: setuptools comes from Debian
expires: '2025-01-31'
60350:
reason: GitPython comes from Debian https://security-tracker.debian.org/tracker/CVE-2023-40267
expires: '2025-01-31'
60789:
reason: GitPython comes from Debian https://security-tracker.debian.org/tracker/CVE-2023-40590
expires: '2025-01-31'
60841:
reason: GitPython comes from Debian https://security-tracker.debian.org/tracker/CVE-2023-41040
expires: '2025-01-31'
62044:
reason: "F-Droid doesn't fetch pip dependencies directly from hg/mercurial repositories: https://data.safetycli.com/v/62044/f17/"
expires: '2025-01-31'
63687:
reason: Only affects Windows https://security-tracker.debian.org/tracker/CVE-2024-22190
expires: '2026-01-31'
67599:
reason: Only affects pip when using --extra-index-url, which is never the case in fdroidserver CI.
expires: '2026-05-31'
70612:
reason: jinja2 is not used by fdroidserver, nor any dependencies I could find via debtree and pipdeptree.
expires: '2026-05-31'
72132:
reason: We get these packages from Debian, zipp is not used in production, and its only a DoS.
expires: '2026-08-31'
72236:
reason: setuptools is not used in production to download or install packages, they come from Debian.
expires: '2026-08-31'
fail-scan-with-exit-code:
dependency-vulnerabilities:
enabled: true
fail-on-any-of:
cvss-severity:
- critical
- high
- medium
security-updates:
dependency-vulnerabilities:

View file

@ -1,91 +0,0 @@
# Use the Android base system since it provides the SDK, etc.
language: java
matrix:
include:
- os: osx
osx_image: xcode12
env: ANDROID_SDK_ROOT=/usr/local/share/android-sdk
env: ANDROID_HOME=/usr/local/share/android-sdk
- os: osx
osx_image: xcode10.3
env: ANDROID_SDK_ROOT=/usr/local/share/android-sdk
env: ANDROID_HOME=/usr/local/share/android-sdk
android:
components:
- android-23 # required for `fdroid build` test
- build-tools-28.0.3 # required for `fdroid build` test
licenses:
- 'android-sdk-preview-.+'
- 'android-sdk-license-.+'
# * ensure java8 is installed since Android SDK doesn't work with Java9
# * Java needs to be at least 1.8.0_131 to have MD5 properly disabled
# https://blogs.oracle.com/java-platform-group/oracle-jre-will-no-longer-trust-md5-signed-code-by-default
# https://opsech.io/posts/2017/Jun/09/openjdk-april-2017-security-update-131-8u131-and-md5-signed-jars.html
# * mercurial is unused and requires Python 2.x
install:
- export HOMEBREW_CURL_RETRIES=10
- brew update > /dev/null
- if [ "`sw_vers -productVersion | sed 's,10\.\([0-9]*\).*,\1,'`" -ge 14 ]; then
python3 --version;
elif [ "`sw_vers -productVersion | sed 's,10\.\([0-9]*\).*,\1,'`" -gt 10 ]; then
brew uninstall mercurial --force;
brew upgrade python;
else
brew install python3;
fi
- brew install dash bash gnu-sed gradle jenv
- export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
- brew uninstall java --force || true
- brew cask uninstall java --force || true
- brew tap adoptopenjdk/openjdk
- travis_retry brew cask install adoptopenjdk8
- travis_retry brew cask install android-sdk
- export AAPT_VERSION=`sed -n "s,^MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION\s*=\s*['\"]\(.*\)[['\"],\1,p" fdroidserver/common.py`
- mkdir -p "$ANDROID_HOME/licenses"
- echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
- echo -e "\nd56f5187479451eabf01fb78af6dfcb131a6481e" >> "$ANDROID_HOME/licenses/android-sdk-license"
- echo -e "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" >> "$ANDROID_HOME/licenses/android-sdk-license"
- echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
- echo y | travis_retry $ANDROID_HOME/tools/bin/sdkmanager "platform-tools" > /dev/null
- echo y | travis_retry $ANDROID_HOME/tools/bin/sdkmanager "build-tools;$AAPT_VERSION" > /dev/null
- echo y | travis_retry $ANDROID_HOME/tools/bin/sdkmanager "platforms;android-23" > /dev/null
- travis_retry sudo pip3 install --progress-bar off babel
- travis_retry sudo pip3 install --quiet --progress-bar off --editable .
- sudo rm -rf fdroidserver.egg-info
- ls -l /System/Library/Java/JavaVirtualMachines || true
- ls -l /Library/Java/JavaVirtualMachines || true
- for f in /Library/Java/JavaVirtualMachines/*.jdk; do jenv add $f; done
- echo $PATH
- echo $JAVA_HOME
- jenv versions
- /usr/libexec/java_home
- java -version
- which java
- javac -version
- which javac
- jarsigner -help
- which jarsigner
- keytool -help
- which keytool
- sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_1*.jdk || true
# The OSX tests seem to run slower, they often timeout. So only run
# the test suite with the installed version of fdroid.
#
# macOS sticks with bash 3.x because of licenses, so avoid use new bash syntax
script:
- /bin/bash --version
- /bin/bash -n gradlew-fdroid tests/run-tests
- ./tests/run-tests
after_failure:
- cd $TRAVIS_BUILD_DIR
- ls -lR | curl -F 'clbin=<-' https://clbin.com

5
.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1,5 @@
{
"recommendations": [
"ms-python.python",
]
}

21
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,21 @@
{
"python.formatting.blackArgs": [
"--config=pyproject.toml"
],
"python.formatting.provider": "black",
"python.linting.banditEnabled": true,
"python.linting.banditArgs": [
"-ii",
"--ini=.bandit",
],
"python.linting.enabled": true,
"python.linting.mypyArgs": [
"--config-file=mypy.ini"
],
"python.linting.mypyEnabled": true,
"python.linting.flake8Enabled": true,
"python.linting.pylintArgs": [
"--rcfile=.pylint-rcfile"
],
"python.linting.pylintEnabled": true,
}

View file

@ -0,0 +1 @@
https://f-droid.org/funding.json

7
.yamllint Normal file
View file

@ -0,0 +1,7 @@
---
extends: default
rules:
document-start: disable
line-length: disable
truthy: disable

View file

@ -4,20 +4,375 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
## [Unreleased]
### Added
* makebuildserver: added ndk r20
([!663](https://gitlab.com/fdroid/fdroidserver/merge_requests/663))
* added support for gradle 5.5.1
([!656](https://gitlab.com/fdroid/fdroidserver/merge_requests/656))
* add SHA256 to filename of repo graphics
([!669](https://gitlab.com/fdroid/fdroidserver/merge_requests/669))
* support for srclibs metadata in YAML format
([!700](https://gitlab.com/fdroid/fdroidserver/merge_requests/700))
* check srclibs and app-metadata files with yamllint
([!721](https://gitlab.com/fdroid/fdroidserver/merge_requests/721))
## [2.5.0] - NEXT
### Removed
* deploy: `awsaccesskeyid:` and `awssecretkey:` config items removed, use the
standard env vars: `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`.
## [2.4.2] - 2025-06-24
### Fixed
* nightly: fix bug that clones nightly repo to wrong location
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1672
* Sync translations for all supported languages: es pl ru
## [2.4.1] - 2025-06-23
### Added
* build: Clearer error messages when working with Git.
* verify: generate <appid>.json files that list all reports
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1632
### Fixed
* deploy: use master branch when working complete git-mirror repo
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1666
* update: use ctime/mtime to control _strip_and_copy_image runs
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1665
* update: If categories.yml only has icon:, then add name:
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1659
* update: fix handling of Triple-T 1.0.0 graphics
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1652
* update: never execute any VCS e.g. git
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1630
* config: lazyload environment variables in config.yml
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1645
* config: make localized name/description/icon optional
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1649
* lint: add repo_key_sha256 to list of valid config keys
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1643
* build: calculate all combinations of gradle flavors
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1638
* build: set SOURCE_DATE_EPOCH from app's git otherwise fdroiddata metadata file
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1653
* Sync translations for all supported languages: ca cs de fr ga ja pl pt pt_BR
pt_PT ru sq tr uk zh_Hans
### Removed
## [2.4.0] - 2025-03-25
### Added
* lint: support the base _config.yml_.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1606
### Fixed
* Expand {env: foo} config syntax to be allowed any place a string is.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1610
* Only show "unsafe permissions on config.yml" when secrets are present.
* Standardized config files on ruamel.yaml with a YAML 1.2 data format.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1611
* Brought back error when a package has multiple package types (e.g. xapk and
apk). https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1602
* Reworked test suite to be entirely based on Python unittest (thanks @mindston).
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1587
* publish/signindex/gpgsign no longer load the _qrcode_ and _requests_ modules,
and can operate without them installed.
* scanner: add bun.lock as lock file of package.json
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1615
* index: fail if user sets mirrors:isPrimary wrong
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1617
https://gitlab.com/fdroid/fdroidserver/-/issues/1125
* Sync translations for all supported languages: bo ca cs de es fr ga hu it ja
ko nb_NO pl pt pt_BR pt_PT ro ru sq sr sw tr uk zh_Hans zh_Hant
### Removed
* checkupdates: remove auto_author: config, it is no longer used.
* Purge support for the long-deprecated _config.py_ config file.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1607
## [2.3.5] - 2025-01-20
### Fixed
* Fix issue where APKs with v1-only signatures and targetSdkVersion < 30 could
be maliciously crafted to bypass AllowedAPKSigningKeys
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1588
* Ignore apksigner v33.x, it has bugs verifying APKs with v3/v3.1 sigs.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1593
* Sync translations for: ca cs de es fr ga ja pt_BR pt_PT ru sq sr uk zh_Hans
## [2.3.4] - 2024-12-12
### Fixed
* Fix localhost network tests on systems with IPv6.
* lint: only error out on missing extlib on versions not archived.
## [2.3.3] - 2024-12-11
### Added
* verify: `--clean-up-verified` to delete files used when verifying an APK if
the verification was successful.
### Fixed
* Support Python 3.13 in the full test suite.
* Sync translations for: ca de fr ja pl ro ru sr ta
* update: only generate _index.png_ when making _index.html_, allowing the repo
operator to set a different repo icon, e.g. not the QR Code.
## [2.3.2] - 2024-11-26
### Fixed
* install: fix downloading from GitHub Releases and Maven Central.
* Sync translations for: ca fa fr pt ru sr ta zh_Hant
## [2.3.1] - 2024-11-25
### Fixed
* Sync all translations for: cs de es fr ga pt_BR ru sq zh_Hans.
* Drop use of deprecated imghdr library to support Python 3.13.
* Install biplist and pycountry by default on macOS.
* Fixed running test suite out of dist tarball.
## [2.3.0] - 2024-11-21
### Added
* YAML 1.2 as native format for all _.yml_ files, including metadata and config.
* install: will now fetch _F-Droid.apk_ and install it via `adb`.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1546
* scanner: scan APK Signing Block for known block types like Google Play
Signature aka "Frosting".
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1555
* Support Rclone for deploying to many different cloud services.
* deploy: support deploying to GitHub Releases.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1471
* scanner: support libs.versions.toml
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1526
* Consider subdir for triple-t metadata discovery in Flutter apps.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1541
* deploy: added `index_only:` mode for mirroring the index to small hosting
locations. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1420
* Support publishing repos in AltStore format.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1465
* Support indexing iOS IPA app files.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1413
* deploy: _config/mirrors.yml_ file with support for adding per-mirror metadata,
like `countryCode:`.
* Repo's categories are now set in the config files.
* lint: check syntax of config files.
* publish: `--error-on-failed` to exit when signing/verifying fails.
* scanner: `--refresh` and `refresh_config:` to control triggering a refresh of
the rule sets.
* Terminal output colorization and `--color` argument to control it.
* New languages: Catalan (ca), Irish (ga), Japanese (ja), Serbian (sr), and
Swahili (sw).
* Support donation links from `community_bridge`, `buy_me_a_coffee`.
### Fixed
* Use last modified time and file size for caching data about scanned APKs
instead of SHA-256 checksum.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1542
* `repo_web_base_url:` config for generating per-app URLs for viewing in
browsers. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1178
* `fdroid scanner` flags WebAssembly binary _.wasm_ files.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1562
* Test suite as standard Python `unittest` setup (thanks @ghost.adh).
* scanner: error on dependency files without lock file.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1504
* nightly: finding APKs in the wrong directory. (thanks @WrenIX)
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1512
* `AllowedAPKSigningKeys` works with all single-signer APK signatures.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1466
* Sync all translations for: cs de it ko pl pt pt_BR pt_PT ro ru sq tr uk
zh_Hans zh_Hant.
* Support Androguard 4.x.
* Support Python 3.12.
### Removed
* Drop all uses of _stats/known_apks.txt_ and the `update_stats:` config key.
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1547
* The `maven:` field is now always a string, with `yes` as a legacy special
value. It is no longer treated like a boolean in any case.
* scanner: jcenter is no longer an allowed Maven repo.
* build: `--reset-server` removed (thanks @gotmi1k).
## [2.2.2] - 2024-04-24
### Added
* Include sdkmanager as dep in setup.py for Homebrew package.
https://github.com/Homebrew/homebrew-core/pull/164510
## [2.2.1] - 2023-03-09
### Added
* `download_repo_index_v2()` and `download_repo_index_v2()` API functions
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1323
### Fixed
* Fix OpenJDK detection on different CPU architectures
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1315
### Removed
* Purge all references to `zipalign`, that is delegated to other things
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1316
* Remove obsolete, unused `buildozer` build type
https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1322
## [2.2.0] - 2023-02-20
### Added
* Support index-v2 format, localizable Anti-Features, Categories
* New entry point for repos, entry.jar, signed with modern algorithms
* New config/ subdirectory for localizable configuration
* Script entries in metadata files (init, prebuild, build, etc) now handled as
lists so they now support using && or ; in the script, and behave like
.gitlab-ci.yml and other CI YAML.
* GPG signatures for index-v1.json and index-v2.json
* Use default.txt as fallback changelog when inserting fastlane metadata
* scanner: F-Droid signatures now maintained in fdroid/suss
* scanner: maintain signature sources in config.yml, including Exodus Privacy
* scanner: use dexdump for class names
* scanner: directly scan APK files when given a path
* scanner: recursively scan APKs for DEX and ZIP using file magic
* signindex: validate index files before signing
* update: set ArchivePolicy based on VercodeOperation/signature
* Include IPFS CIDv1 in index-v2.json for hosting repos on IPFS
* Per-repo beta channel configuration
* Add Czech translation
### Fixed
* apksigner v30 or higher now required for verifying and signing APKs
* 3.9 as minimum supported Python version
* Lots of translation updates
* Better pip packaging
* nightly: big overhaul for reliable operation on all Debian/Ubuntu versions
* Improved logging, fewer confusing verbose messages
* scanner: fix detection of binary files without extension
* import: more reliable operation, including Flutter apps
* Support Java 20 and up
### Removed
* Remove obsolete `fdroid stats` command
## [2.1.1] - 2022-09-06
* gradlew-fdroid: Include latest versions and checksums
* nightly: update Raw URLs to fix breakage and avoid redirects
* signindex: gpg-sign index-v1.json and deploy it
* update: fix --use-date-from-apk when used with files (#1012)
## [2.1] - 2022-02-22
For a more complete overview, see the [2.1
milestone](https://gitlab.com/fdroid/fdroidserver/-/milestones/11)
## [2.0.5] - 2022-09-06
### Fixed
* gradlew-fdroid: Include latest versions and checksums
* nightly: add support for GitHub Actions
* nightly: update Raw URLs to fix breakage and avoid redirects
* update: fix --use-date-from-apk when used with files (#1012)
* Fix GitLab CI
## [2.0.4] - 2022-06-29
### Fixed
* deploy: ensure progress is instantiated before trying to use it
* signindex: gpg-sign index-v1.json and deploy it
[1080](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1080)
[1124](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1124)
## [2.0.3] - 2021-07-01
### Fixed
* Support AutoUpdateMode: Version without pattern
[931](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/931)
## [2.0.2] - 2021-06-01
### Fixed
* fix "ruamel round_trip_dump will be removed"
[932](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/932)
## [2.0.1] - 2021-03-09
### Fixed
* metadata: stop setting up source repo when running lint/rewritemeta
* scanner: show error if scan_binary fails to run apkanalyzer
* common: properly parse version from NDK's source.properties
* update: stop extracting and storing XML icons, they're useless
* index: raise error rather than crash on bad repo file
* update: handle large, corrupt, or inaccessible fastlane/triple-t files
* Update SPDX License List
* checkupdates: set User-Agent to make gitlab.com happy
* Run push_binary_transparency only once
## [2.0] - 2021-01-31
For a more complete overview, see the [2.0
milestone](https://gitlab.com/fdroid/fdroidserver/-/milestones/10)
### Added
* `fdroid update` inserts donation links based on upstream's _FUNDING.yml_
([!754](https://gitlab.com/fdroid/fdroidserver/merge_requests/754))
* Stable, public API for most useful functions
([!798](https://gitlab.com/fdroid/fdroidserver/merge_requests/798))
* Load with any YAML lib and use with the API, no more custom parser needed
([!826](https://gitlab.com/fdroid/fdroidserver/merge_requests/826))
([!838](https://gitlab.com/fdroid/fdroidserver/merge_requests/838))
* _config.yml_ for a safe, easy, standard configuration format
([!663](https://gitlab.com/fdroid/fdroidserver/merge_requests/663))
* Config options can be set from environment variables using this syntax:
`keystorepass: {env: keystorepass}`
([!669](https://gitlab.com/fdroid/fdroidserver/merge_requests/669))
* Add SHA256 to filename of repo graphics
([!669](https://gitlab.com/fdroid/fdroidserver/merge_requests/669))
* Support for srclibs metadata in YAML format
([!700](https://gitlab.com/fdroid/fdroidserver/merge_requests/700))
* Check srclibs and app-metadata files with yamllint
([!721](https://gitlab.com/fdroid/fdroidserver/merge_requests/721))
* Added plugin system for adding subcommands to `fdroid`
([!709](https://gitlab.com/fdroid/fdroidserver/merge_requests/709))
* `fdroid update`, `fdroid publish`, and `fdroid signindex` now work
with SmartCard HSMs, specifically the NitroKey HSM
([!779](https://gitlab.com/fdroid/fdroidserver/merge_requests/779))
([!782](https://gitlab.com/fdroid/fdroidserver/merge_requests/782))
* `fdroid update` support for Triple-T Gradle Play Publisher v2.x
([!683](https://gitlab.com/fdroid/fdroidserver/merge_requests/683))
* Translated into: bo de es fr hu it ko nb_NO pl pt pt_BR pt_PT ru sq tr uk
zh_Hans zh_Hant
### Fixed
* Smoother process for signing APKs with `apksigner`
([!736](https://gitlab.com/fdroid/fdroidserver/merge_requests/736))
([!821](https://gitlab.com/fdroid/fdroidserver/merge_requests/821))
* `apksigner` is used by default on new repos
* All parts except _build_ and _publish_ work without the Android SDK
([!821](https://gitlab.com/fdroid/fdroidserver/merge_requests/821))
* Description: is now passed to clients unchanged, no HTML conversion
([!828](https://gitlab.com/fdroid/fdroidserver/merge_requests/828))
* Lots of improvements for scanning for proprietary code and trackers
([!748](https://gitlab.com/fdroid/fdroidserver/merge_requests/748))
([!REPLACE](https://gitlab.com/fdroid/fdroidserver/merge_requests/REPLACE))
([!844](https://gitlab.com/fdroid/fdroidserver/merge_requests/844))
* `fdroid mirror` now generates complete, working local mirror repos
* fix build-logs dissapearing when deploying
([!685](https://gitlab.com/fdroid/fdroidserver/merge_requests/685))
* do not crash when system encoding can not be retrieved
@ -33,11 +388,31 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
([!651](https://gitlab.com/fdroid/fdroidserver/merge_requests/651))
* `fdroid init` generates PKCS12 keystores, drop Java < 8 support
([!801](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/801))
* Parse Version Codes specified in hex
([!692](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/692))
* Major refactoring on core parts of code to be more Pythonic
([!756](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/756))
* `fdroid init` now works when installed with pip
### Removed
* removed support for txt and json metadata
* Removed all support for _.txt_ and _.json_ metadata
([!772](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/772))
* dropped support for Debian 8 _jessie_ and 9 _stretch_
* dropped support for Ubuntu releases older than bionic 18.04
* dropped `fdroid server update` and `fdroid server init`,
use `fdroid deploy`
* `fdroid dscanner` was removed.
([!711](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/711))
* `make_current_version_link` is now off by default
* Dropped `force_build_tools` config option
([!797](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/797))
* Dropped `accepted_formats` config option, there is only _.yml_ now
([!818](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/818))
* `Provides:` was removed as a metadata field
([!654](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/654))
* Remove unused `latestapps.dat`
([!794](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/794))
## [1.1.4] - 2019-08-15
### Fixed

66
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,66 @@
There are many ways to contribute, you can find out all the ways on our
[Contribute](https://f-droid.org/contribute/) page. Find out how to get
involved, including as a translator, data analyst, tester, helping others, and
much more!
## Contributing Code
We want more contributors and want different points of view represented. Some
parts of the code make contributing quick and easy. Other parts make it
difficult and slow, so we ask that contributors have patience.
To submit a patch, please open a merge request on GitLab. If you are thinking of
making a large contribution, open an issue or merge request before starting
work, to get comments from the community. Someone may be already working on the
same thing, or there may be reasons why that feature isn't implemented. Once
there is agreement, then the work might need to proceed asynchronously with the
core team towards the solution.
To make it easier to review and accept your merge request, please follow these
guidelines:
* When at all possible, include tests. These can either be added to an existing
test, or completely new. Practicing test-driven development will make it
easiest to get merged. That usually means starting your work by writing tests.
* See [help-wanted](https://gitlab.com/fdroid/fdroidserver/-/issues/?sort=updated_desc&state=opened&label_name%5B%5D=help-wanted)
tags for things that maintainers have marked as things they want to see
merged.
* The amount of technical debt varies widely in this code base. There are some
parts where the code is nicely isolated with good test coverage. There are
other parts that are tangled and complicated, full of technical debt, and
difficult to test.
* The general approach is to treat the tangled and complicated parts as an
external API (albeit a bad one). That means it needs to stay unchanged as much
as possible. Changes to those parts of the code will trigger a migration,
which can require a lot of time and coordination. When there is time for large
development efforts, we refactor the code to get rid of those areas of
technical debt.
* We use [_black_](https://black.readthedocs.io/) code format, run `black .` to
format the code. Whenever editing code in any file, the new code should be
formatted as _black_. Some files are not yet fully in _black_ format (see
_pyproject.toml_), our goal is to opportunistically convert the code whenever
possible. As of the time of this writing, forcing the code format on all files
would be too disruptive. The officially supported _black_ version is the one
in Debian/stable.
* Many of the tests run very fast and can be run interactively in isolation.
Some of the essential test cases run slowly because they do things like
signing files and generating signing keys.
* Some parts of the code are difficult to test, and currently require a
relatively complete production setup in order to effectively test them. That
is mostly the code around building packages, managing the disposable VM, and
scheduling build jobs to run.
* For user visible changes (API changes, behaviour changes, etc.), consider
adding a note in _CHANGELOG.md_. This could be a summarizing description of
the change, and could explain the grander details. Have a look through
existing entries for inspiration. Please note that this is NOT simply a copy
of git-log one-liners. Also note that security fixes get an entry in
_CHANGELOG.md_. This file helps users get more in-depth information of what
comes with a specific release without having to sift through the higher noise
ratio in git-log.

View file

@ -9,35 +9,48 @@ include buildserver/Vagrantfile
include CHANGELOG.md
include completion/bash-completion
include examples/config.yml
include examples/fdroid-icon.png
include examples/makebuildserver.config.py
include examples/fdroid_exportkeystore.py
include examples/fdroid_export_keystore_to_nitrokey.py
include examples/fdroid_extract_repo_pubkey.py
include examples/fdroid_fetchsrclibs.py
include examples/fdroid_nitrokeyimport.py
include examples/opensc-fdroid.cfg
include examples/public-read-only-s3-bucket-policy.json
include examples/template.yml
include fdroid
include examples/Vagrantfile.yaml
include gradlew-fdroid
include LICENSE
include locale/bo/LC_MESSAGES/fdroidserver.mo
include locale/de/LC_MESSAGES/fdroidserver.mo
include locale/es/LC_MESSAGES/fdroidserver.mo
include locale/fr/LC_MESSAGES/fdroidserver.mo
include locale/hu/LC_MESSAGES/fdroidserver.mo
include locale/it/LC_MESSAGES/fdroidserver.mo
include locale/ko/LC_MESSAGES/fdroidserver.mo
include locale/nb_NO/LC_MESSAGES/fdroidserver.mo
include locale/pl/LC_MESSAGES/fdroidserver.mo
include locale/pt_BR/LC_MESSAGES/fdroidserver.mo
include locale/pt_PT/LC_MESSAGES/fdroidserver.mo
include locale/ru/LC_MESSAGES/fdroidserver.mo
include locale/tr/LC_MESSAGES/fdroidserver.mo
include locale/uk/LC_MESSAGES/fdroidserver.mo
include locale/zh_Hans/LC_MESSAGES/fdroidserver.mo
include locale/zh_Hant/LC_MESSAGES/fdroidserver.mo
include locale/ba/LC_MESSAGES/fdroidserver.po
include locale/bo/LC_MESSAGES/fdroidserver.po
include locale/ca/LC_MESSAGES/fdroidserver.po
include locale/cs/LC_MESSAGES/fdroidserver.po
include locale/de/LC_MESSAGES/fdroidserver.po
include locale/es/LC_MESSAGES/fdroidserver.po
include locale/fr/LC_MESSAGES/fdroidserver.po
include locale/ga/LC_MESSAGES/fdroidserver.po
include locale/hu/LC_MESSAGES/fdroidserver.po
include locale/it/LC_MESSAGES/fdroidserver.po
include locale/ja/LC_MESSAGES/fdroidserver.po
include locale/ko/LC_MESSAGES/fdroidserver.po
include locale/nb_NO/LC_MESSAGES/fdroidserver.po
include locale/pl/LC_MESSAGES/fdroidserver.po
include locale/pt/LC_MESSAGES/fdroidserver.po
include locale/pt_BR/LC_MESSAGES/fdroidserver.po
include locale/pt_PT/LC_MESSAGES/fdroidserver.po
include locale/ro/LC_MESSAGES/fdroidserver.po
include locale/ru/LC_MESSAGES/fdroidserver.po
include locale/sq/LC_MESSAGES/fdroidserver.po
include locale/sr/LC_MESSAGES/fdroidserver.po
include locale/sw/LC_MESSAGES/fdroidserver.po
include locale/tr/LC_MESSAGES/fdroidserver.po
include locale/uk/LC_MESSAGES/fdroidserver.po
include locale/zh_Hans/LC_MESSAGES/fdroidserver.po
include locale/zh_Hant/LC_MESSAGES/fdroidserver.po
include makebuildserver
include README.md
include tests/androguard_test.py
include tests/aosp_testkey_debug.keystore
include tests/apk.embedded_1.apk
include tests/bad-unicode-*.apk
include tests/build.TestCase
include tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/17.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/17.0.0/aapt-output-com.politedroid_4.txt
@ -47,10 +60,10 @@ include tests/build-tools/17.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/17.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/17.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/17.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/17.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/18.1.1/aapt-output-com.moez.QKSMS_182.txt
@ -62,10 +75,10 @@ include tests/build-tools/18.1.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/18.1.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/18.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/18.1.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/18.1.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/19.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -77,10 +90,10 @@ include tests/build-tools/19.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/19.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/19.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/19.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/19.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/19.1.0/aapt-output-com.moez.QKSMS_182.txt
@ -92,10 +105,10 @@ include tests/build-tools/19.1.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/19.1.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/19.1.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/19.1.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/19.1.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/20.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -107,10 +120,10 @@ include tests/build-tools/20.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/20.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/20.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/20.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/20.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/21.1.1/aapt-output-com.moez.QKSMS_182.txt
@ -122,10 +135,10 @@ include tests/build-tools/21.1.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/21.1.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/21.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/21.1.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/21.1.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/21.1.2/aapt-output-com.moez.QKSMS_182.txt
@ -137,10 +150,10 @@ include tests/build-tools/21.1.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/21.1.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/21.1.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/21.1.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/21.1.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/22.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -152,10 +165,10 @@ include tests/build-tools/22.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/22.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/22.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/22.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/22.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/22.0.1/aapt-output-com.moez.QKSMS_182.txt
@ -167,10 +180,10 @@ include tests/build-tools/22.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/22.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/22.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/22.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/22.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -182,10 +195,10 @@ include tests/build-tools/23.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.1/aapt-output-com.moez.QKSMS_182.txt
@ -197,10 +210,10 @@ include tests/build-tools/23.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.2/aapt-output-com.moez.QKSMS_182.txt
@ -212,10 +225,10 @@ include tests/build-tools/23.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.3/aapt-output-com.moez.QKSMS_182.txt
@ -227,10 +240,10 @@ include tests/build-tools/23.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -242,10 +255,10 @@ include tests/build-tools/24.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.1/aapt-output-com.moez.QKSMS_182.txt
@ -257,10 +270,10 @@ include tests/build-tools/24.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.2/aapt-output-com.moez.QKSMS_182.txt
@ -272,10 +285,10 @@ include tests/build-tools/24.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.3/aapt-output-com.moez.QKSMS_182.txt
@ -287,10 +300,10 @@ include tests/build-tools/24.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -302,10 +315,10 @@ include tests/build-tools/25.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.1/aapt-output-com.moez.QKSMS_182.txt
@ -317,10 +330,10 @@ include tests/build-tools/25.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.2/aapt-output-com.moez.QKSMS_182.txt
@ -332,10 +345,10 @@ include tests/build-tools/25.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.3/aapt-output-com.moez.QKSMS_182.txt
@ -347,10 +360,10 @@ include tests/build-tools/25.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -362,10 +375,10 @@ include tests/build-tools/26.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.1/aapt-output-com.moez.QKSMS_182.txt
@ -377,10 +390,10 @@ include tests/build-tools/26.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.2/aapt-output-com.moez.QKSMS_182.txt
@ -392,10 +405,10 @@ include tests/build-tools/26.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.3/aapt-output-com.moez.QKSMS_182.txt
@ -407,10 +420,10 @@ include tests/build-tools/26.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -422,10 +435,10 @@ include tests/build-tools/27.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.1/aapt-output-com.moez.QKSMS_182.txt
@ -437,10 +450,10 @@ include tests/build-tools/27.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.2/aapt-output-com.moez.QKSMS_182.txt
@ -452,10 +465,10 @@ include tests/build-tools/27.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.3/aapt-output-com.moez.QKSMS_182.txt
@ -467,10 +480,10 @@ include tests/build-tools/27.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.0/aapt-output-com.moez.QKSMS_182.txt
@ -482,10 +495,10 @@ include tests/build-tools/28.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/28.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/28.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.1/aapt-output-com.moez.QKSMS_182.txt
@ -497,10 +510,10 @@ include tests/build-tools/28.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/28.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/28.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.2/aapt-output-com.politedroid_3.txt
@ -511,10 +524,10 @@ include tests/build-tools/28.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/28.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/28.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.3/aapt-output-com.example.test.helloworld_1.txt
@ -527,85 +540,119 @@ include tests/build-tools/28.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.3/aapt-output-no.min.target.sdk_987.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/generate.sh
include tests/check-fdroid-apk
include tests/common.TestCase
include tests/complete-ci-tests
include tests/config.py
include tests/deploy.TestCase
include tests/description-parsing.py
include tests/com.fake.IpaApp_1000000000001.ipa
include tests/config.yml
include tests/config/antiFeatures.yml
include tests/config/categories.yml
include tests/config/de/antiFeatures.yml
include tests/config/fa/antiFeatures.yml
include tests/config/ic_antifeature_ads.xml
include tests/config/ic_antifeature_disabledalgorithm.xml
include tests/config/ic_antifeature_knownvuln.xml
include tests/config/ic_antifeature_nonfreeadd.xml
include tests/config/ic_antifeature_nonfreeassets.xml
include tests/config/ic_antifeature_nonfreedep.xml
include tests/config/ic_antifeature_nonfreenet.xml
include tests/config/ic_antifeature_nosourcesince.xml
include tests/config/ic_antifeature_nsfw.xml
include tests/config/ic_antifeature_tracking.xml
include tests/config/ic_antifeature_upstreamnonfree.xml
include tests/config/ro/antiFeatures.yml
include tests/config/zh-rCN/antiFeatures.yml
include tests/corrupt-featureGraphic.png
include tests/dummy-keystore.jks
include tests/dump_internal_metadata_format.py
include tests/exception.TestCase
include tests/extra/manual-vmtools-test.py
include tests/funding-usernames.yaml
include tests/getsig/getsig.java
include tests/getsig/make.sh
include tests/getsig/run.sh
include tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT
include tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml
include tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties
include tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties
include tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties
include tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties
include tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties
include tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties
include tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties
include tests/get_android_tools_versions/android-sdk/tools/source.properties
include tests/gnupghome/pubring.gpg
include tests/gnupghome/random_seed
include tests/gnupghome/secring.gpg
include tests/gnupghome/trustdb.gpg
include tests/gradle-maven-blocks.yaml
include tests/import_proxy.py
include tests/import.TestCase
include tests/index.TestCase
include tests/install.TestCase
include tests/gradle-release-checksums.py
include tests/IsMD5Disabled.java
include tests/issue-1128-min-sdk-30-poc.apk
include tests/issue-1128-poc1.apk
include tests/issue-1128-poc2.apk
include tests/issue-1128-poc3a.apk
include tests/issue-1128-poc3b.apk
include tests/janus.apk
include tests/key-tricks.py
include tests/keystore.jks
include tests/lint.TestCase
include tests/metadata-rewrite-yml/app.with.special.build.params.yml
include tests/metadata-rewrite-yml/fake.ota.update.yml
include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml
include tests/metadata/apk/info.guardianproject.urzip.yaml
include tests/metadata/apk/org.dyndns.fules.ck.yaml
include tests/metadata/app.with.special.build.params.yml
include tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Ads.txt
include tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Tracking.txt
include tests/metadata/app.with.special.build.params/en-US/antifeatures/Ads.txt
include tests/metadata/app.with.special.build.params/en-US/antifeatures/NoSourceSince.txt
include tests/metadata/app.with.special.build.params/zh-CN/antifeatures/49_Tracking.txt
include tests/metadata/app.with.special.build.params/zh-CN/antifeatures/50_Ads.txt
include tests/metadata/com.politedroid.yml
include tests/metadata/dump/app.with.special.build.params.yaml
include tests/metadata/dump/com.politedroid.yaml
include tests/metadata/dump/org.adaway.yaml
include tests/metadata/dump/org.smssecure.smssecure.yaml
include tests/metadata/dump/org.videolan.vlc.yaml
include tests/metadata/duplicate.permisssions.yml
include tests/metadata/fake.ota.update.yml
include tests/metadata/info.guardianproject.checkey.yml
include tests/metadata/info.guardianproject.checkey/en-US/description.txt
include tests/metadata/info.guardianproject.checkey/en-US/name.txt
include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png
include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey.png
include tests/metadata/info.guardianproject.checkey/en-US/summary.txt
include tests/metadata/info.guardianproject.checkey.yml
include tests/metadata/info.guardianproject.checkey/ja-JP/name.txt
include tests/metadata/info.guardianproject.urzip.yml
include tests/metadata/info.guardianproject.urzip/en-US/changelogs/100.txt
include tests/metadata/info.guardianproject.urzip/en-US/changelogs/default.txt
include tests/metadata/info.guardianproject.urzip/en-US/full_description.txt
include tests/metadata/info.guardianproject.urzip/en-US/images/featureGraphic.png
include tests/metadata/info.guardianproject.urzip/en-US/images/icon.png
include tests/metadata/info.guardianproject.urzip/en-US/short_description.txt
include tests/metadata/info.guardianproject.urzip/en-US/title.txt
include tests/metadata/info.guardianproject.urzip/en-US/video.txt
include tests/metadata/info.guardianproject.urzip.yml
include tests/metadata/info.zwanenburg.caffeinetile.yml
include tests/metadata/no.min.target.sdk.yml
include tests/metadata/obb.main.oldversion.yml
include tests/metadata/obb.mainpatch.current.yml
include tests/metadata/obb.main.twoversions.yml
include tests/metadata/obb.mainpatch.current.yml
include tests/metadata/org.adaway.yml
include tests/metadata/org.fdroid.ci.test.app.yml
include tests/metadata/org.fdroid.fdroid.yml
include tests/metadata/org.maxsdkversion.yml
include tests/metadata/org.smssecure.smssecure.yml
include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.RSA
include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.SF
include tests/metadata/org.smssecure.smssecure/signatures/134/MANIFEST.MF
include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.RSA
include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.SF
include tests/metadata/org.smssecure.smssecure/signatures/135/MANIFEST.MF
include tests/metadata/org.smssecure.smssecure.yml
include tests/metadata/org.videolan.vlc.yml
include tests/metadata/raw.template.yml
include tests/metadata-rewrite-yml/app.with.special.build.params.yml
include tests/metadata-rewrite-yml/fake.ota.update.yml
include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml
include tests/metadata/souch.smsbypass.yml
include tests/metadata.TestCase
include tests/minimal_targetsdk_30_unsigned.apk
include tests/Norway_bouvet_europe_2.obf.zip
include tests/no_targetsdk_minsdk1_unsigned.apk
include tests/no_targetsdk_minsdk30_unsigned.apk
include tests/openssl-version-check-test.py
@ -614,16 +661,17 @@ include tests/org.bitbucket.tickytacky.mirrormirror_2.apk
include tests/org.bitbucket.tickytacky.mirrormirror_3.apk
include tests/org.bitbucket.tickytacky.mirrormirror_4.apk
include tests/org.dyndns.fules.ck_20.apk
include tests/publish.TestCase
include tests/repo/categories.txt
include tests/org.sajeg.fallingblocks_3.apk
include tests/repo/com.example.test.helloworld_1.apk
include tests/repo/com.politedroid_3.apk
include tests/repo/com.politedroid_4.apk
include tests/repo/com.politedroid_5.apk
include tests/repo/com.politedroid_6.apk
include tests/repo/duplicate.permisssions_9999999.apk
include tests/repo/entry.json
include tests/repo/fake.ota.update_1234.zip
include tests/repo/index-v1.json
include tests/repo/index-v2.json
include tests/repo/index.xml
include tests/repo/info.zwanenburg.caffeinetile_4.apk
include tests/repo/main.1101613.obb.main.twoversions.obb
@ -632,16 +680,17 @@ include tests/repo/main.1434483388.obb.main.oldversion.obb
include tests/repo/main.1619.obb.mainpatch.current.obb
include tests/repo/no.min.target.sdk_987.apk
include tests/repo/obb.main.oldversion_1444412523.apk
include tests/repo/obb.mainpatch.current_1619_another-release-key.apk
include tests/repo/obb.mainpatch.current_1619.apk
include tests/repo/obb.mainpatch.current/en-US/featureGraphic.png
include tests/repo/obb.mainpatch.current/en-US/icon.png
include tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png
include tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png
include tests/repo/obb.main.twoversions_1101613.apk
include tests/repo/obb.main.twoversions_1101615.apk
include tests/repo/obb.main.twoversions_1101617.apk
include tests/repo/obb.main.twoversions_1101617_src.tar.gz
include tests/repo/obb.mainpatch.current/en-US/featureGraphic.png
include tests/repo/obb.mainpatch.current/en-US/icon.png
include tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png
include tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png
include tests/repo/obb.mainpatch.current_1619.apk
include tests/repo/obb.mainpatch.current_1619_another-release-key.apk
include tests/repo/org.maxsdkversion_4.apk
include tests/repo/org.videolan.vlc/en-US/icon.png
include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot10.png
include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot12.png
@ -653,16 +702,16 @@ include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot4.png
include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot7.png
include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot9.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot0.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot1.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot11.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot13.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot14.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot16.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot17.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot19.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot1.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot2.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot21.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot23.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot2.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot3.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot5.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot6.png
@ -672,13 +721,24 @@ include tests/repo/souch.smsbypass_9.apk
include tests/repo/urzip-*.apk
include tests/repo/v1.v2.sig_1020.apk
include tests/run-tests
include tests/scanner.TestCase
include tests/signatures.TestCase
include tests/signindex/guardianproject.jar
include tests/SANAPPSI.RSA
include tests/SANAPPSI.SF
include tests/shared_test_code.py
include tests/signindex/guardianproject-v1.jar
include tests/signindex/guardianproject.jar
include tests/signindex/testy.jar
include tests/signindex/unsigned.jar
include tests/source-files/at.bitfire.davdroid/build.gradle
include tests/source-files/catalog.test/app/build.gradle
include tests/source-files/catalog.test/build.gradle.kts
include tests/source-files/catalog.test/buildSrc/build.gradle.kts
include tests/source-files/catalog.test/buildSrc/settings.gradle.kts
include tests/source-files/catalog.test/buildSrc2/build.gradle.kts
include tests/source-files/catalog.test/buildSrc2/settings.gradle.kts
include tests/source-files/catalog.test/core/build.gradle
include tests/source-files/catalog.test/gradle/libs.versions.toml
include tests/source-files/catalog.test/libs.versions.toml
include tests/source-files/catalog.test/settings.gradle.kts
include tests/source-files/cn.wildfirechat.chat/avenginekit/build.gradle
include tests/source-files/cn.wildfirechat.chat/build.gradle
include tests/source-files/cn.wildfirechat.chat/chat/build.gradle
@ -694,6 +754,12 @@ include tests/source-files/com.anpmech.launcher/app/build.gradle
include tests/source-files/com.anpmech.launcher/app/src/main/AndroidManifest.xml
include tests/source-files/com.anpmech.launcher/build.gradle
include tests/source-files/com.anpmech.launcher/settings.gradle
include tests/source-files/com.github.jameshnsears.quoteunquote/build.gradle
include tests/source-files/com.github.shadowsocks/core/build.gradle.kts
include tests/source-files/com.github.shadowsocks/mobile/build.gradle.kts
include tests/source-files/com.infomaniak.mail/Core/gradle/core.versions.toml
include tests/source-files/com.infomaniak.mail/gradle/libs.versions.toml
include tests/source-files/com.infomaniak.mail/settings.gradle
include tests/source-files/com.integreight.onesheeld/build.gradle
include tests/source-files/com.integreight.onesheeld/gradle/wrapper/gradle-wrapper.properties
include tests/source-files/com.integreight.onesheeld/localeapi/build.gradle
@ -707,37 +773,69 @@ include tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/ma
include tests/source-files/com.integreight.onesheeld/quickReturnHeader/build.gradle
include tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/main/AndroidManifest.xml
include tests/source-files/com.integreight.onesheeld/settings.gradle
include tests/source-files/com.jens.automation2/app/build.gradle
include tests/source-files/com.jens.automation2/build.gradle
include tests/source-files/com.kunzisoft.testcase/build.gradle
include tests/source-files/com.nextcloud.client/build.gradle
include tests/source-files/com.lolo.io.onelist/app/build.gradle.kts
include tests/source-files/com.lolo.io.onelist/build.gradle.kts
include tests/source-files/com.lolo.io.onelist/gradle/libs.versions.toml
include tests/source-files/com.lolo.io.onelist/gradle/wrapper/gradle-wrapper.properties
include tests/source-files/com.lolo.io.onelist/settings.gradle
include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/title.txt
include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/title.txt
include tests/source-files/com.nextcloud.client/build.gradle
include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/title.txt
include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/title.txt
include tests/source-files/com.seafile.seadroid2/app/build.gradle
include tests/source-files/com.ubergeek42.WeechatAndroid/app/build.gradle.kts
include tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/values/strings.xml
include tests/source-files/de.varengold.activeTAN/build.gradle
include tests/source-files/dev.patrickgold.florisboard/app/build.gradle.kts
include tests/source-files/eu.siacs.conversations/build.gradle
include tests/source-files/eu.siacs.conversations/metadata/en-US/name.txt
include tests/source-files/fdroid/fdroidclient/AndroidManifest.xml
include tests/source-files/fdroid/fdroidclient/build.gradle
include tests/source-files/firebase-allowlisted/app/build.gradle
include tests/source-files/firebase-allowlisted/build.gradle
include tests/source-files/firebase-suspect/app/build.gradle
include tests/source-files/firebase-suspect/build.gradle
include tests/source-files/firebase-whitelisted/app/build.gradle
include tests/source-files/firebase-whitelisted/build.gradle
include tests/source-files/flavor.test/build.gradle
include tests/source-files/info.guardianproject.ripple/build.gradle
include tests/source-files/lockfile.test/flutter/.dart_tool/flutter_gen/pubspec.yaml
include tests/source-files/lockfile.test/flutter/pubspec.lock
include tests/source-files/lockfile.test/flutter/pubspec.yaml
include tests/source-files/lockfile.test/javascript/package.json
include tests/source-files/lockfile.test/javascript/yarn.lock
include tests/source-files/lockfile.test/rust/subdir/Cargo.lock
include tests/source-files/lockfile.test/rust/subdir/Cargo.toml
include tests/source-files/lockfile.test/rust/subdir/subdir/subdir/Cargo.toml
include tests/source-files/lockfile.test/rust/subdir2/Cargo.toml
include tests/source-files/open-keychain/open-keychain/build.gradle
include tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle
include tests/source-files/org.mozilla.rocket/app/build.gradle
include tests/source-files/org.noise_planet.noisecapture/app/build.gradle
include tests/source-files/org.noise_planet.noisecapture/settings.gradle
include tests/source-files/org.noise_planet.noisecapture/sosfilter/build.gradle
include tests/source-files/org.piepmeyer.gauguin/build.gradle.kts
include tests/source-files/org.piepmeyer.gauguin/libs.versions.toml
include tests/source-files/org.piepmeyer.gauguin/settings.gradle.kts
include tests/source-files/org.tasks/app/build.gradle.kts
include tests/source-files/org.tasks/build.gradle
include tests/source-files/org.tasks/build.gradle.kts
include tests/source-files/org.tasks/buildSrc/build.gradle.kts
include tests/source-files/org.tasks/settings.gradle.kts
include tests/source-files/osmandapp/osmand/build.gradle
include tests/source-files/osmandapp/osmand/gradle/wrapper/gradle-wrapper.properties
include tests/source-files/OtakuWorld/build.gradle
include tests/source-files/realm/react-native/android/build.gradle
include tests/source-files/se.manyver/android/app/build.gradle
include tests/source-files/se.manyver/android/build.gradle
include tests/source-files/se.manyver/android/gradle.properties
@ -751,12 +849,36 @@ include tests/source-files/ut.ewh.audiometrytest/app/build.gradle
include tests/source-files/ut.ewh.audiometrytest/app/src/main/AndroidManifest.xml
include tests/source-files/ut.ewh.audiometrytest/build.gradle
include tests/source-files/ut.ewh.audiometrytest/settings.gradle
include tests/source-files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties
include tests/source-files/Zillode/syncthing-silk/build.gradle
include tests/SpeedoMeterApp.main_1.apk
include tests/stats/known_apks.txt
include tests/testcommon.py
include tests/triple-t-2/build/org.piwigo.android/app/build.gradle
include tests/test_build.py
include tests/test_checkupdates.py
include tests/test_common.py
include tests/test_deploy.py
include tests/test_exception.py
include tests/test_gradlew-fdroid
include tests/test_import_subcommand.py
include tests/test_index.py
include tests/test_init.py
include tests/test_install.py
include tests/test_lint.py
include tests/test_main.py
include tests/test_metadata.py
include tests/test_nightly.py
include tests/test_publish.py
include tests/test_rewritemeta.py
include tests/test_scanner.py
include tests/test_signatures.py
include tests/test_signindex.py
include tests/test_update.py
include tests/test_vcs.py
include tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/featureGraphic/play_store_feature_graphic.png
include tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/icon/icon.png
include tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/phoneScreenshots/1.png
include tests/triple-t-1-graphics/metadata/de.wivewa.dialer.yml
include tests/triple-t-2/build/org.piwigo.android/app/.gitignore
include tests/triple-t-2/build/org.piwigo.android/app/build.gradle
include tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/constants.xml
include tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/strings.xml
include tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/piwigo/PiwigoApplication.java
@ -790,17 +912,34 @@ include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-note
include tests/triple-t-2/build/org.piwigo.android/build.gradle
include tests/triple-t-2/build/org.piwigo.android/settings.gradle
include tests/triple-t-2/metadata/org.piwigo.android.yml
include tests/update.TestCase
include tests/urzip.apk
include tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/addons/languages/dutch/apk/src/main/play/listings/en-US/title.txt
include tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/ime/app/src/main/play/listings/en-US/title.txt
include tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/settings.gradle
include tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/addons/languages/dutch/apk/src/main/play/listings/en-US/title.txt
include tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/ime/app/src/main/play/listings/en-US/title.txt
include tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/settings.gradle
include tests/triple-t-anysoftkeyboard/metadata/com.anysoftkeyboard.languagepack.dutch.yml
include tests/triple-t-anysoftkeyboard/metadata/com.menny.android.anysoftkeyboard.yml
include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/contact-website.txt
include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/full-description.txt
include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/short-description.txt
include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/title.txt
include tests/triple-t-flutter/metadata/fr.emersion.goguma.yml
include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/settings.gradle
include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/play/listings/en-US/title.txt
include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/play/listings/en-US/title.txt
include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/settings.gradle
include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/play/listings/en-US/title.txt
include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/listings/en-US/title.txt
include tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.verifier.yml
include tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.wallet.yml
include tests/urzip-badcert.apk
include tests/urzip-badsig.apk
include tests/urzip-release.apk
include tests/urzip-release-unsigned.apk
include tests/urzip-release.apk
include tests/urzip.apk
include tests/v2.only.sig_2.apk
include tests/valid-package-names/random-package-names
include tests/valid-package-names/RandomPackageNames.java
include tests/valid-package-names/test.py
include tests/Norway_bouvet_europe_2.obf.zip
include tests/xref/metadata/aarddict.android.yml
include tests/xref/metadata/org.coolreader.yml
include tests/xref/metadata/org.geometerplus.zlibrary.ui.android.yml
include tests/__init__.py

162
README.md
View file

@ -1,88 +1,116 @@
<a name="build-status"></a>
| CI Builds | fdroidserver | buildserver | fdroid build --all | publishing tools |
|--------------------------|:-------------:|:-----------:|:------------------:|:----------------:|
| GNU/Linux | [![fdroidserver status on GNU/Linux](https://gitlab.com/fdroid/fdroidserver/badges/master/build.svg)](https://gitlab.com/fdroid/fdroidserver/builds) | [![buildserver status](https://jenkins.debian.net/job/reproducible_setup_fdroid_build_environment/badge/icon)](https://jenkins.debian.net/job/reproducible_setup_fdroid_build_environment) | [![fdroid build all status](https://jenkins.debian.net/job/reproducible_fdroid_build_apps/badge/icon)](https://jenkins.debian.net/job/reproducible_fdroid_build_apps/) | [![fdroid test status](https://jenkins.debian.net/job/reproducible_fdroid_test/badge/icon)](https://jenkins.debian.net/job/reproducible_fdroid_test/) |
| macOS | [![fdroidserver status on macOS](https://travis-ci.org/f-droid/fdroidserver.svg?branch=master)](https://travis-ci.org/f-droid/fdroidserver) | | | |
<div align="center">
<p><img src="https://gitlab.com/fdroid/artwork/-/raw/master/fdroid-logo-2015/fdroid-logo.svg" width="200"></p>
# F-Droid Server
### Tools for maintaining an F-Droid repository system.
Server for [F-Droid](https://f-droid.org), the Free Software repository system
for Android.
</div>
The F-Droid server tools provide various scripts and tools that are
used to maintain the main
[F-Droid application repository](https://f-droid.org/packages). You
can use these same tools to create your own additional or alternative
repository for publishing, or to assist in creating, testing and
submitting metadata to the main repository.
---
For documentation, please see <https://f-droid.org/docs/>, or you can
find the source for the documentation in
[fdroid/fdroid-website](https://gitlab.com/fdroid/fdroid-website).
## What is F-Droid Server?
_fdroidserver_ is a suite of tools to publish and work with collections of
Android apps (APK files) and other kinds of packages. It is used to maintain
the [f-droid.org application repository](https://f-droid.org/packages). These
same tools can be used to create additional or alternative repositories for
publishing, or to assist in creating, testing and submitting metadata to the
f-droid.org repository, also known as
[_fdroiddata_](https://gitlab.com/fdroid/fdroiddata).
For documentation, please see <https://f-droid.org/docs>.
In the beginning, _fdroidserver_ was the complete server-side setup that ran
f-droid.org. Since then, the website and other parts have been split out into
their own projects. The name for this suite of tooling has stayed
_fdroidserver_ even though it no longer contains any proper server component.
### What is F-Droid?
## Installing
F-Droid is an installable catalogue of FOSS (Free and Open Source Software)
applications for the Android platform. The client makes it easy to browse,
install, and keep track of updates on your device.
### Installing
There are many ways to install _fdroidserver_, they are documented on
the website:
There are many ways to install _fdroidserver_, including using a range of
package managers. All of the options are documented on the website:
https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools
All sorts of other documentation lives there as well.
## Releases
The production setup of _fdroidserver_ for f-droid.org is run directly from the
_master_ branch. This is put into production on an schedule (currently weekly).
So development and testing happens in the branches. We track branches using
merge requests. Therefore, there are many WIP and long-lived merge requests.
There are also stable releases of _fdroidserver_. This is mostly intended for
running custom repositories, where the build process is separate. It can also
be useful as a simple way to get started contributing packages to _fdroiddata_,
since the stable releases are available in package managers.
### Tests
## Tests
There are many components to all of the tests for the components in
this git repo. The most commonly used parts of well tested, while
some parts still lack tests. This test suite has built over time a
bit haphazardly, so it is not as clean, organized, or complete as it
could be. We welcome contributions. Before rearchitecting any parts
of it, be sure to [contact us](https://f-droid.org/about) to discuss
the changes beforehand.
To run the full test suite:
tests/run-tests
To run the tests for individual Python modules, see the `tests/test_*.py` files, e.g.:
python -m unittest tests/test_metadata.py
It is also possible to run individual tests:
python -m unittest tests.test_metadata.MetadataTest.test_rewrite_yaml_special_build_params
There is a growing test suite that has good coverage on a number of key parts of
this code base. It does not yet cover all the code, and there are some parts
where the technical debt makes it difficult to write unit tests. New tests
should be standard Python _unittest_ test cases. Whenever possible, the old
tests written in _bash_ in _tests/run-tests_ should be ported to Python.
This test suite has built over time a bit haphazardly, so it is not as clean,
organized, or complete as it could be. We welcome contributions. The goal is
to move towards standard Python testing patterns and to expand the unit test
coverage. Before rearchitecting any parts of it, be sure to [contact
us](https://f-droid.org/about) to discuss the changes beforehand.
#### `fdroid` commands
### Additional tests for different linux distributions
The test suite for all of the `fdroid` commands is in the _tests/_
subdir. _.gitlab-ci.yml_ and _.travis.yml_ run this test suite on
various configurations.
* _tests/complete-ci-tests_ runs _pylint_ and all tests on two
different pyvenvs
* _tests/run-tests_ runs the whole test suite
* _tests/*.TestCase_ are individual unit tests for all of the `fdroid`
commands, which can be run separately, e.g. `./update.TestCase`.
#### Additional tests for different linux distributions
These tests are also run on various distributions through GitLab CI. This is
only enabled for `master@fdroid/fdroidserver` because it'll take longer to
These tests are also run on various configurations through GitLab CI. This is
only enabled for `master@fdroid/fdroidserver` because it takes longer to
complete than the regular CI tests. Most of the time you won't need to worry
about them but sometimes it might make sense to also run them for your merge
request. In that case you need to remove [these lines from
.gitlab-ci.yml](https://gitlab.com/fdroid/fdroidserver/blob/master/.gitlab-ci.yml#L34-35)
about them, but sometimes it might make sense to also run them for your merge
request. In that case you need to remove [these lines from .gitlab-ci.yml](https://gitlab.com/fdroid/fdroidserver/-/blob/0124b9dde99f9cab19c034cbc7d8cc6005a99b48/.gitlab-ci.yml#L90-91)
and push this to a new branch of your fork.
Alternatively [run them
locally](https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-exec)
like this: `gitlab-runner exec docker ubuntu_lts`
#### buildserver
The tests for the whole build server setup are entirely separate
because they require at least 200GB of disk space, and 8GB of
RAM. These test scripts are in the root of the project, all starting
with _jenkins-_ since they are run on https://jenkins.debian.net.
## Documentation
The API documentation based on the docstrings gets automatically
published [here](https://fdroid.gitlab.io/fdroidserver) on every commit
on the `master` branch.
It can be built locally via
```bash
pip install -e .[docs]
cd docs
sphinx-apidoc -o ./source ../fdroidserver -M -e
sphinx-autogen -o generated source/*.rst
make html
```
To additionally lint the code call
```bash
pydocstyle fdroidserver --count
```
When writing docstrings you should follow the
[numpy style guide](https://numpydoc.readthedocs.io/en/latest/format.html).
## Translation
@ -90,4 +118,16 @@ with _jenkins-_ since they are run on https://jenkins.debian.net.
Everything can be translated. See
[Translation and Localization](https://f-droid.org/docs/Translation_and_Localization)
for more info.
[![translation status](https://hosted.weblate.org/widgets/f-droid/-/fdroidserver/multi-auto.svg)](https://hosted.weblate.org/engage/f-droid/?utm_source=widget)
<div align="center">
[![](https://hosted.weblate.org/widgets/f-droid/-/287x66-white.png)](https://hosted.weblate.org/engage/f-droid)
<details>
<summary>View translation status for all languages.</summary>
[![](https://hosted.weblate.org/widgets/f-droid/-/fdroidserver/multi-auto.svg)](https://hosted.weblate.org/engage/f-droid/?utm_source=widget)
</details>
</div>

74
buildserver/Dockerfile Normal file
View file

@ -0,0 +1,74 @@
FROM debian:bookworm
ENV LANG=C.UTF-8 \
DEBIAN_FRONTEND=noninteractive
RUN echo Etc/UTC > /etc/timezone \
&& echo 'Acquire::Retries "20";' \
'APT::Get::Assume-Yes "true";' \
'APT::Install-Recommends "0";' \
'APT::Install-Suggests "0";' \
'Dpkg::Use-Pty "0";' \
'quiet "1";' \
>> /etc/apt/apt.conf.d/99gitlab
# provision-apt-proxy was deliberately omitted, its not relevant in Docker
COPY provision-android-ndk \
provision-android-sdk \
provision-apt-get-install \
provision-buildserverid \
provision-gradle \
setup-env-vars \
/opt/buildserver/
ARG GIT_REV_PARSE_HEAD=unspecified
LABEL org.opencontainers.image.revision=$GIT_REV_PARSE_HEAD
# setup 'vagrant' user for compatibility
RUN useradd --create-home -s /bin/bash vagrant && echo -n 'vagrant:vagrant' | chpasswd
# The provision scripts must be run in the same order as in Vagrantfile
# - vagrant needs openssh-client iproute2 ssh sudo
# - ansible needs python3
#
# Debian Docker images will soon default to HTTPS for apt sources, so force it.
# https://github.com/debuerreotype/docker-debian-artifacts/issues/15
#
# Ensure fdroidserver's dependencies are marked manual before purging
# unneeded packages, otherwise, all its dependencies get purged.
#
# The official Debian docker images ship without ca-certificates, so
# TLS certificates cannot be verified until that is installed. The
# following code temporarily turns off TLS verification, and enables
# HTTPS, so at least unverified TLS is used for apt-get instead of
# plain HTTP. Once ca-certificates is installed, the CA verification
# is enabled by removing the newly created config file. This set up
# makes the initial `apt-get update` and `apt-get install` look the
# same as verified TLS to the network observer and hides the metadata.
RUN printf "path-exclude=/usr/share/locale/*\npath-exclude=/usr/share/man/*\npath-exclude=/usr/share/doc/*\npath-include=/usr/share/doc/*/copyright\n" >/etc/dpkg/dpkg.cfg.d/01_nodoc \
&& mkdir -p /usr/share/man/man1 \
&& echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates \
&& find /etc/apt/sources.list* -type f -exec sed -i s,http:,https:, {} \; \
&& apt-get update \
&& apt-get install ca-certificates \
&& rm /etc/apt/apt.conf.d/99nocacertificates \
&& apt-get upgrade \
&& apt-get dist-upgrade \
&& apt-get install openssh-client iproute2 python3 openssh-server sudo \
&& bash /opt/buildserver/setup-env-vars /opt/android-sdk \
&& . /etc/profile.d/bsenv.sh \
&& bash /opt/buildserver/provision-apt-get-install https://deb.debian.org/debian \
&& bash /opt/buildserver/provision-android-sdk "tools;25.2.5" \
&& bash /opt/buildserver/provision-android-ndk /opt/android-sdk/ndk \
&& bash /opt/buildserver/provision-gradle \
&& bash /opt/buildserver/provision-buildserverid $GIT_REV_PARSE_HEAD \
&& rm -rf /vagrant/cache \
&& apt-get autoremove --purge \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Vagrant sudo setup for compatibility
RUN echo 'vagrant ALL = NOPASSWD: ALL' > /etc/sudoers.d/vagrant \
&& chmod 440 /etc/sudoers.d/vagrant \
&& sed -i -e 's/Defaults.*requiretty/#&/' /etc/sudoers

View file

@ -1,24 +1,41 @@
require 'yaml'
require 'pathname'
require 'fileutils'
configfile = {
'boot_timeout' => 600,
'cachedir' => File.join(ENV['HOME'], '.cache', 'fdroidserver'),
'cpus' => 1,
'debian_mirror' => 'https://deb.debian.org/debian/',
'hwvirtex' => 'on',
'memory' => 2048,
'vm_provider' => 'virtualbox',
}
srvpath = Pathname.new(File.dirname(__FILE__)).realpath
configfile = YAML.load_file(File.join(srvpath, "/Vagrantfile.yaml"))
configpath = File.join(srvpath, "/Vagrantfile.yaml")
if File.exist? configpath
c = YAML.load_file(configpath)
if c and not c.empty?
c.each do |k,v|
configfile[k] = v
end
end
else
puts "Copying example file to #{configpath}"
FileUtils.cp('../examples/Vagrantfile.yaml', configpath)
end
Vagrant.configure("2") do |config|
# these two caching methods conflict, so only use one at a time
if Vagrant.has_plugin?("vagrant-cachier") and not configfile.has_key? "aptcachedir"
if Vagrant.has_plugin?("vagrant-cachier")
config.cache.scope = :box
config.cache.auto_detect = false
config.cache.enable :apt
config.cache.enable :chef
end
config.vm.box = configfile['basebox']
if configfile.has_key? "basebox_version"
config.vm.box_version = configfile['basebox_version']
end
config.vm.box = "debian/bookworm64"
if not configfile.has_key? "vm_provider" or configfile["vm_provider"] == "virtualbox"
# default to VirtualBox if not set
@ -36,6 +53,8 @@ Vagrant.configure("2") do |config|
libvirt.uri = "qemu:///system"
libvirt.cpus = configfile["cpus"]
libvirt.memory = configfile["memory"]
# Debian Vagrant image is only 20G, so allocate more
libvirt.machine_virtual_size = 1024
if configfile.has_key? "libvirt_disk_bus"
libvirt.disk_bus = configfile["libvirt_disk_bus"]
end
@ -48,7 +67,8 @@ Vagrant.configure("2") do |config|
else
synced_folder_type = '9p'
end
config.vm.synced_folder './', '/vagrant', type: synced_folder_type
config.vm.synced_folder './', '/vagrant', type: synced_folder_type,
SharedFoldersEnableSymlinksCreate: false
else
abort("No supported VM Provider found, set vm_provider in Vagrantfile.yaml!")
end
@ -60,30 +80,30 @@ Vagrant.configure("2") do |config|
args: [configfile["aptproxy"]]
end
# buildserver/ is shared to the VM's /vagrant by default so the old
# default does not need a custom mount
if configfile["cachedir"] != "buildserver/cache"
config.vm.synced_folder configfile["cachedir"], '/vagrant/cache',
create: true, type: synced_folder_type
end
config.vm.synced_folder configfile["cachedir"], '/vagrant/cache',
create: true, type: synced_folder_type
# Make sure dir exists to mount to, since buildserver/ is
# automatically mounted as /vagrant in the guest VM. This is more
# necessary with 9p synced folders
Dir.mkdir('cache') unless File.exists?('cache')
Dir.mkdir('cache') unless File.exist?('cache')
# cache .deb packages on the host via a mount trick
if configfile.has_key? "aptcachedir"
config.vm.synced_folder configfile["aptcachedir"], "/var/cache/apt/archives",
owner: 'root', group: 'root', create: true
end
# Root partition needs to be resized to the new allocated space
config.vm.provision "shell", inline: <<-SHELL
growpart -v -u auto /dev/vda 1
resize2fs /dev/vda1
SHELL
config.vm.provision "shell", path: "setup-env-vars",
args: ["/home/vagrant/android-sdk"]
config.vm.provision "shell", path: "provision-apt-get-install",
config.vm.provision "shell", name: "setup-env-vars", path: "setup-env-vars",
args: ["/opt/android-sdk"]
config.vm.provision "shell", name: "apt-get-install", path: "provision-apt-get-install",
args: [configfile['debian_mirror']]
config.vm.provision "shell", path: "provision-android-sdk"
config.vm.provision "shell", path: "provision-android-ndk",
args: ["/home/vagrant/android-ndk"]
config.vm.provision "shell", path: "provision-gradle"
config.vm.provision "shell", name: "android-sdk", path: "provision-android-sdk"
config.vm.provision "shell", name: "android-ndk", path: "provision-android-ndk",
args: ["/opt/android-sdk/ndk"]
config.vm.provision "shell", name: "gradle", path: "provision-gradle"
config.vm.provision "shell", name: "disable-analytics", path: "provision-disable-analytics"
config.vm.provision "shell", name: "buildserverid", path: "provision-buildserverid",
args: [`git rev-parse HEAD`]
end

View file

@ -1,19 +1,2 @@
sdk_path: /home/vagrant/android-sdk
ndk_paths:
r10e: /home/vagrant/android-ndk/r10e
r11c: /home/vagrant/android-ndk/r11c
r12b: /home/vagrant/android-ndk/r12b
r13b: /home/vagrant/android-ndk/r13b
r14b: /home/vagrant/android-ndk/r14b
r15c: /home/vagrant/android-ndk/r15c
r16b: /home/vagrant/android-ndk/r16b
r17c: /home/vagrant/android-ndk/r17c
r18b: /home/vagrant/android-ndk/r18b
r19c: /home/vagrant/android-ndk/r19c
r20b: /home/vagrant/android-ndk/r20b
r21d: /home/vagrant/android-ndk/r21d
java_paths:
8: /usr/lib/jvm/java-8-openjdk-amd64
sdk_path: /opt/android-sdk
gradle_version_dir: /opt/gradle/versions

View file

@ -1,26 +1,30 @@
#!/bin/bash
#
# $1 is the root dir to install the NDKs into
# $2 and after are the NDK releases to install
echo $0
set -e
set -x
NDK_BASE=$1
shift
test -e $NDK_BASE || mkdir -p $NDK_BASE
cd $NDK_BASE
if [ ! -e $NDK_BASE/r10e ]; then
7zr x /vagrant/cache/android-ndk-r10e-linux-x86_64.bin > /dev/null
mv android-ndk-r10e r10e
fi
for version in r11c r12b r13b r14b r15c r16b r17c r18b r19c r20b r21d; do
for version in $@; do
if [ ! -e ${NDK_BASE}/${version} ]; then
unzip /vagrant/cache/android-ndk-${version}-linux-x86_64.zip > /dev/null
mv android-ndk-${version} ${version}
unzip /vagrant/cache/android-ndk-${version}-linux*.zip > /dev/null
mv android-ndk-${version} \
`sed -En 's,^Pkg.Revision *= *(.+),\1,p' android-ndk-${version}/source.properties`
fi
done
# allow gradle/etc to install missing NDK versions
chgrp vagrant $NDK_BASE
chmod g+w $NDK_BASE
# ensure all users can read and execute the NDK
chmod -R a+rX $NDK_BASE/
find $NDK_BASE/ -type f -executable -print0 | xargs -0 chmod a+x
find $NDK_BASE/ -type f -executable -exec chmod a+x -- {} +

View file

@ -1,5 +1,4 @@
#!/bin/bash
#
echo $0
set -e
@ -10,19 +9,6 @@ if [ -z $ANDROID_HOME ]; then
exit 1
fi
# TODO remove the rm, this should work with an existing ANDROID_HOME
if [ ! -x $ANDROID_HOME/tools/android ]; then
rm -rf $ANDROID_HOME
mkdir ${ANDROID_HOME}
mkdir ${ANDROID_HOME}/temp
mkdir ${ANDROID_HOME}/platforms
mkdir ${ANDROID_HOME}/build-tools
cd $ANDROID_HOME
tools=`ls -1 /vagrant/cache/tools_*.zip | sort -n | tail -1`
unzip -qq $tools
fi
# disable the repositories of proprietary stuff
disabled="
@version@=1
@ -40,59 +26,96 @@ for line in $disabled; do
echo $line >> ${HOME}/.android/sites-settings.cfg
done
cd /vagrant/cache
# make links for `android update sdk` to use and delete
blacklist="build-tools_r17-linux.zip
build-tools_r18.0.1-linux.zip
build-tools_r18.1-linux.zip
build-tools_r18.1.1-linux.zip
build-tools_r19-linux.zip
build-tools_r19.0.1-linux.zip
build-tools_r19.0.2-linux.zip
build-tools_r19.0.3-linux.zip
build-tools_r21-linux.zip
build-tools_r21.0.1-linux.zip
build-tools_r21.0.2-linux.zip
build-tools_r21.1-linux.zip
build-tools_r21.1.1-linux.zip
build-tools_r22-linux.zip
build-tools_r23-linux.zip
android-1.5_r04-linux.zip
android-1.6_r03-linux.zip
android-2.0_r01-linux.zip
android-2.0.1_r01-linux.zip"
latestm2=`ls -1 android_m2repository*.zip | sort -n | tail -1`
for f in $latestm2 android-[0-9]*.zip platform-[0-9]*.zip build-tools_r*-linux.zip; do
rm -f ${ANDROID_HOME}/temp/$f
if [[ $blacklist != *$f* ]]; then
ln -s /vagrant/cache/$f ${ANDROID_HOME}/temp/
fi
# Include old makebuildserver cache that is a Vagrant synced_folder
# for sdkmanager to use.
cachedir=$HOME/.cache/sdkmanager
mkdir -p $cachedir
pushd $cachedir
for f in /vagrant/cache/*.zip; do
test -e $f && ln -s $f
done
popd
# install all cached platforms
cached=""
for f in `ls -1 android-[0-9]*.zip platform-[0-9]*.zip`; do
sdk=`unzip -c $f "*/build.prop" | sed -n 's,^ro.build.version.sdk=,,p'`
cached=,android-${sdk}${cached}
done
# TODO do not preinstall 'tools' or 'platform-tools' at all, app builds don't need them
packages="
tools;25.2.5
platform-tools
build-tools;19.1.0
build-tools;20.0.0
build-tools;21.1.2
build-tools;22.0.1
build-tools;23.0.1
build-tools;23.0.2
build-tools;23.0.3
build-tools;24.0.0
build-tools;24.0.1
build-tools;24.0.2
build-tools;24.0.3
build-tools;25.0.0
build-tools;25.0.1
build-tools;25.0.2
build-tools;25.0.3
build-tools;26.0.0
build-tools;26.0.1
build-tools;26.0.2
build-tools;26.0.3
build-tools;27.0.0
build-tools;27.0.1
build-tools;27.0.2
build-tools;27.0.3
build-tools;28.0.0
build-tools;28.0.1
build-tools;28.0.2
build-tools;28.0.3
build-tools;29.0.2
build-tools;29.0.3
build-tools;30.0.0
build-tools;30.0.1
build-tools;30.0.2
build-tools;30.0.3
build-tools;31.0.0
build-tools;32.0.0
build-tools;33.0.0
platforms;android-10
platforms;android-11
platforms;android-12
platforms;android-13
platforms;android-14
platforms;android-15
platforms;android-16
platforms;android-17
platforms;android-18
platforms;android-19
platforms;android-20
platforms;android-21
platforms;android-22
platforms;android-23
platforms;android-24
platforms;android-25
platforms;android-26
platforms;android-27
platforms;android-28
platforms;android-29
platforms;android-30
platforms;android-31
platforms;android-32
platforms;android-33
"
# install all cached build-tools
for f in `ls -1 build-tools*.zip`; do
ver=`unzip -c $f "*/source.properties" | sed -n 's,^Pkg.Revision=,,p'`
if [[ $ver == 24.0.0 ]] && [[ $f =~ .*r24\.0\.1.* ]]; then
# 24.0.1 has the wrong revision in the zip
ver=24.0.1
fi
cached=,build-tools-${ver}${cached}
done
if [ $# -gt 0 ]; then
echo found args
packages=$@
fi
${ANDROID_HOME}/tools/android update sdk --no-ui --all \
--filter platform-tools,extra-android-m2repository${cached} <<EOH
y
# temporary test of whether this script ran. It will change once
# 'tools' is no longer installed by default.
if [ ! -x $ANDROID_HOME/tools/bin/sdkmanager ]; then
mkdir -p ${ANDROID_HOME}/
sdkmanager $packages
fi
EOH
# this hacked cache should not end up in the Vagrant box or Docker image
rm -rf $cachedir
mkdir -p $ANDROID_HOME/licenses/
@ -117,17 +140,19 @@ cat <<EOF > $ANDROID_HOME/licenses/android-sdk-preview-license-old
84831b9409646a918e30573bab4c9c91346d8abd
EOF
echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1"
echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1"
echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2"
echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2"
cat <<EOF > $ANDROID_HOME/licenses/intel-android-extra-license
d975f751698a77b662f1254ddbeed3901e976f5a
EOF
chmod a+X $(dirname $ANDROID_HOME/)
chmod -R a+rX $ANDROID_HOME/
chgrp vagrant $ANDROID_HOME
chmod g+w $ANDROID_HOME
find $ANDROID_HOME/ -type f -executable -print0 | xargs -0 chmod a+x
# allow gradle to install newer build-tools and platforms
mkdir -p $ANDROID_HOME/{build-tools,platforms}
chgrp vagrant $ANDROID_HOME/{build-tools,platforms}
chmod g+w $ANDROID_HOME/{build-tools,platforms}
@ -135,3 +160,8 @@ chmod g+w $ANDROID_HOME/{build-tools,platforms}
test -d $ANDROID_HOME/extras/m2repository || mkdir -p $ANDROID_HOME/extras/m2repository
find $ANDROID_HOME/extras/m2repository -type d | xargs chgrp vagrant
find $ANDROID_HOME/extras/m2repository -type d | xargs chmod g+w
# allow gradle/sdkmanager to install extras;android;m2repository
test -d $ANDROID_HOME/extras/android || mkdir -p $ANDROID_HOME/extras/android
find $ANDROID_HOME/extras/android -type d | xargs chgrp vagrant
find $ANDROID_HOME/extras/android -type d | xargs chmod g+w

View file

@ -10,7 +10,7 @@ export DEBIAN_FRONTEND=noninteractive
printf 'APT::Install-Recommends "0";\nAPT::Install-Suggests "0";\n' \
> /etc/apt/apt.conf.d/99no-install-recommends
printf 'APT::Acquire::Retries "20";\n' \
printf 'Acquire::Retries "20";\n' \
> /etc/apt/apt.conf.d/99acquire-retries
cat <<EOF > /etc/apt/apt.conf.d/99no-auto-updates
@ -27,115 +27,113 @@ Dpkg::Use-Pty "0";
quiet "1";
EOF
cat <<EOF > /etc/apt/apt.conf.d/99confdef
Dpkg::Options { "--force-confdef"; };
EOF
echo "man-db man-db/auto-update boolean false" | debconf-set-selections
if echo $debian_mirror | grep '^https' 2>&1 > /dev/null; then
apt-get update || apt-get update
apt-get install apt-transport-https ca-certificates
apt-get install ca-certificates
fi
cat << EOF > /etc/apt/sources.list
deb ${debian_mirror} stretch main
deb http://security.debian.org/debian-security stretch/updates main
deb ${debian_mirror} stretch-updates main
deb ${debian_mirror} bookworm main
deb https://security.debian.org/debian-security bookworm-security main
deb ${debian_mirror} bookworm-updates main
EOF
echo "deb ${debian_mirror} stretch-backports main" > /etc/apt/sources.list.d/stretch-backports.list
echo "deb ${debian_mirror} stretch-backports-sloppy main" > /etc/apt/sources.list.d/stretch-backports-sloppy.list
echo "deb ${debian_mirror} testing main" > /etc/apt/sources.list.d/testing.list
printf "Package: *\nPin: release o=Debian,a=testing\nPin-Priority: -300\n" > /etc/apt/preferences.d/debian-testing
dpkg --add-architecture i386
echo "deb ${debian_mirror} bookworm-backports main" > /etc/apt/sources.list.d/backports.list
apt-get update || apt-get update
# purge things that might come from the base box, but we don't want
# https://salsa.debian.org/cloud-team/debian-vagrant-images/-/tree/master/config_space/package_config
# cat config_space/package_config/* | sort -u | grep -v '[A-Z#]'
purge="
apt-listchanges
apt-utils
bash-completion
bind9-*
bsdextrautils
bzip2
chrony
cloud-utils
cron
cron-daemon-common
dbus
debconf-i18n
debian-faq
dmidecode
doc-debian
fdisk
file
groff-base
inetutils-telnet
krb5-locales
less
locales
logrotate
lsof
manpages
nano
ncurses-term
netcat-traditional
pciutils
reportbug
rsyslog
tasksel
traceroute
unattended-upgrades
usrmerge
vim-*
wamerican
wget
whiptail
xz-utils
"
# clean up files packages to be purged, then purge the packages
rm -rf /var/run/dbus /var/log/unattended-upgrades
apt-get purge $purge
apt-get upgrade --download-only
apt-get upgrade
# again after upgrade in case of keyring changes
apt-get update || apt-get update
packages="
androguard/stretch-backports
ant
asn1c
ant-contrib
autoconf
autoconf2.13
automake
automake1.11
autopoint
bison
bzr
ca-certificates-java
cmake
androguard/bookworm-backports
apksigner
default-jdk-headless
default-jre-headless
curl
disorderfs
expect
faketime
flex
gettext
gettext-base
git-core
dexdump
fdroidserver
git-svn
gperf
gpg/stretch-backports-sloppy
gpgconf/stretch-backports-sloppy
libassuan0/stretch-backports
libgpg-error0/stretch-backports
javacc
libarchive-zip-perl
libexpat1-dev
libgcc1:i386
libglib2.0-dev
liblzma-dev
libncurses5:i386
librsvg2-bin
libsaxonb-java
libssl-dev
libstdc++6:i386
libtool
libtool-bin
make
maven
gnupg
mercurial
nasm
openjdk-8-jre-headless
openjdk-8-jdk-headless
optipng
p7zip
pkg-config
python-gnupg
python-lxml
python-magic
python-pip
python-setuptools
python3-asn1crypto/stretch-backports
python3-defusedxml
python3-git
python3-gitdb
python3-gnupg
python3-pip
python3-pyasn1
python3-pyasn1-modules
python3-requests
python3-setuptools
python3-smmap
python3-yaml
python3-ruamel.yaml
python3-pil
python3-paramiko
quilt
patch
python3-magic
python3-packaging
rsync
scons
sqlite3
subversion
sdkmanager/bookworm-backports
sudo
swig
unzip
xsltproc
yasm
zip
zlib1g:i386
"
apt-get install $packages --download-only
apt-get install $packages
# fdroidserver comes from git, it was installed just for dependencies
apt-mark manual `apt-cache depends fdroidserver | sed -nE 's,^[| ]*Depends: ([a-z0-9 -]+),\1,p'`
apt-get purge fdroidserver
# clean up things that will become outdated anyway
apt-get autoremove --purge
apt-get clean
rm -rf /var/lib/apt/lists/*
highestjava=`update-java-alternatives --list | sort -n | tail -1 | cut -d ' ' -f 1`
update-java-alternatives --set $highestjava
# configure headless openjdk to work without gtk accessability dependencies
sed -i -e 's@\(assistive_technologies=org.GNOME.Accessibility.AtkWrapper\)@#\1@' /etc/java-8-openjdk/accessibility.properties

View file

@ -0,0 +1,9 @@
#!/bin/bash -e
test -n "$1"
echo "Writing buildserver ID ...ID is $1"
set -x
echo "$1" > /home/vagrant/buildserverid
# sync data before we halt() the machine, we had an empty buildserverid otherwise
sync

View file

@ -0,0 +1,15 @@
#!/bin/bash
set -ex
# Flutter
# https://github.com/flutter/flutter/issues/73657
flutter_conf=/home/vagrant/.flutter
cat <<EOF > $flutter_conf
{
"enabled": false
}
EOF
chown -R vagrant:vagrant $flutter_conf
chmod -R 0644 $flutter_conf

View file

@ -10,21 +10,29 @@ vergte() {
test -e /opt/gradle/versions || mkdir -p /opt/gradle/versions
cd /opt/gradle/versions
for f in /vagrant/cache/gradle-*.zip; do
glob="/vagrant/cache/gradle-*.zip"
if compgen -G $glob; then # test if glob matches anything
f=$(ls -1 --sort=version --group-directories-first $glob | tail -1)
ver=`echo $f | sed 's,.*gradle-\([0-9][0-9.]*\).*\.zip,\1,'`
# only use versions greater or equal 2.2.1
if vergte $ver 2.2.1 && [ ! -d /opt/gradle/versions/${ver} ]; then
unzip -qq $f
mv gradle-${ver} /opt/gradle/versions/${ver}
fi
done
fi
chmod -R a+rX /opt/gradle
test -e /opt/gradle/bin || mkdir -p /opt/gradle/bin
ln -fs /home/vagrant/fdroidserver/gradlew-fdroid /opt/gradle/bin/gradle
chown -h vagrant.vagrant /opt/gradle/bin/gradle
chown vagrant.vagrant /opt/gradle/versions
git clone --depth 1 https://gitlab.com/fdroid/gradlew-fdroid.git /home/vagrant/gradlew-fdroid/
chmod 0755 /home/vagrant/gradlew-fdroid/gradlew-fdroid
chmod -R u+rwX,a+rX,go-w /home/vagrant/gradlew-fdroid/
ln -fs /home/vagrant/gradlew-fdroid/gradlew-fdroid /opt/gradle/bin/gradle
ln -fs /home/vagrant/gradlew-fdroid/gradlew-fdroid /usr/local/bin/
chown -h vagrant:vagrant /opt/gradle/bin/gradle
chown vagrant:vagrant /opt/gradle/versions
chmod 0755 /opt/gradle/versions
GRADLE_HOME=/home/vagrant/.gradle
@ -41,5 +49,5 @@ systemProp.org.gradle.internal.http.connectionTimeout=600000
systemProp.org.gradle.internal.http.socketTimeout=600000
EOF
chown -R vagrant.vagrant $GRADLE_HOME/
chown -R vagrant:vagrant $GRADLE_HOME/
chmod -R a+rX $GRADLE_HOME/

View file

@ -12,9 +12,16 @@ echo "# generated on "`date` > $bsenv
echo export ANDROID_HOME=$1 >> $bsenv
echo 'export PATH=$PATH:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/opt/gradle/bin' >> $bsenv
echo "export DEBIAN_FRONTEND=noninteractive" >> $bsenv
echo 'export home_vagrant=/home/vagrant' >> $bsenv
echo 'export fdroidserver=$home_vagrant/fdroidserver' >> $bsenv
echo 'export LC_ALL=C.UTF-8' >> $bsenv
chmod 0644 $bsenv
# make sure that SSH never hangs at a password or key prompt
printf ' StrictHostKeyChecking yes' >> /etc/ssh/ssh_config
printf ' BatchMode yes' >> /etc/ssh/config
mkdir -p /etc/ssh/ssh_config.d/
cat << EOF >> /etc/ssh/ssh_config.d/fdroid
Host *
StrictHostKeyChecking yes
BatchMode yes
EOF

View file

@ -83,7 +83,7 @@ __complete_options() {
__complete_build() {
opts="-v -q -l -s -t -f -a"
lopts="--verbose --quiet --latest --stop --test --server --reset-server --skip-scan --scan-binary --no-tarball --force --all --no-refresh"
lopts="--verbose --quiet --latest --stop --test --server --skip-scan --scan-binary --no-tarball --force --all --no-refresh"
case "${prev}" in
:)
__vercode
@ -109,8 +109,8 @@ __complete_gpgsign() {
}
__complete_install() {
opts="-v -q"
lopts="--verbose --quiet --all"
opts="-v -q -a -p -n -y"
lopts="--verbose --quiet --all --color --no-color --privacy-mode --no-privacy-mode --no --yes"
case "${cur}" in
-*)
__complete_options
@ -155,7 +155,7 @@ __complete_publish() {
__complete_checkupdates() {
opts="-v -q"
lopts="--verbose --quiet --auto --autoonly --commit --gplay --allow-dirty"
lopts="--verbose --quiet --auto --autoonly --commit --allow-dirty"
case "${cur}" in
-*)
__complete_options
@ -251,7 +251,7 @@ __complete_btlog() {
__complete_mirror() {
opts="-v"
lopts="--all --archive --build-logs --pgp-signatures --src-tarballs --output-dir"
lopts="--all --archive --build-logs --color --no-color --pgp-signatures --src-tarballs --output-dir"
__complete_options
}
@ -261,12 +261,6 @@ __complete_nightly() {
__complete_options
}
__complete_stats() {
opts="-v -q -d"
lopts="--verbose --quiet --download"
__complete_options
}
__complete_deploy() {
opts="-i -v -q"
lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir
@ -276,12 +270,14 @@ __complete_deploy() {
__complete_signatures() {
opts="-v -q"
lopts="--verbose --no-check-https"
lopts="--verbose --color --no-color --no-check-https"
case "${cur}" in
-*)
__complete_options
return 0;;
esac
_filedir 'apk'
return 0
}
__complete_signindex() {
@ -293,7 +289,7 @@ __complete_signindex() {
__complete_init() {
opts="-v -q -d"
lopts="--verbose --quiet --distinguished-name --keystore
--repo-keyalias --android-home --no-prompt"
--repo-keyalias --android-home --no-prompt --color --no-color"
__complete_options
}
@ -302,7 +298,6 @@ btlog \
build \
checkupdates \
deploy \
dscanner \
gpgsign \
import \
init \
@ -316,7 +311,6 @@ rewritemeta \
scanner \
signatures \
signindex \
stats \
update \
verify \
"

20
docs/Makefile Normal file
View file

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

35
docs/make.bat Normal file
View file

@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

78
docs/source/conf.py Normal file
View file

@ -0,0 +1,78 @@
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys
sys.path.insert(0, os.path.abspath('../../fdroidserver'))
# -- Project information -----------------------------------------------------
project = 'fdroidserver'
copyright = '2021, The F-Droid Project'
author = 'The F-Droid Project'
# -- General configuration ---------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'numpydoc',
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
"sphinx.ext.intersphinx",
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = []
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = "pydata_sphinx_theme"
html_theme_options = {
"gitlab_url": "https://gitlab.com/fdroid/fdroidserver",
"show_prev_next": False,
"navbar_end": ["search-field.html", "navbar-icon-links.html"],
}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
html_sidebars = {
"**": [],
}
#html_sidebars = {
# '**': ['globaltoc.html', 'sourcelink.html', 'searchbox.html'],
# 'using/windows': ['windowssidebar.html', 'searchbox.html'],
#}
html_split_index = True
#numpydoc_validation_checks = {"all"}
intersphinx_mapping = {
"python": ("https://docs.python.org/3/", None),
}

20
docs/source/index.rst Normal file
View file

@ -0,0 +1,20 @@
.. fdroidserver documentation master file, created by
sphinx-quickstart on Mon May 3 10:06:52 2021.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to fdroidserver's documentation!
========================================
.. toctree::
:maxdepth: 2
:caption: Contents:
These pages contain the autogenerated module docu based on the current `sources <https://gitlab.com/fdroid/fdroidserver/-/tree/master/fdroidserver>`_.
Indices and tables
==================
* Under :ref:`modindex` the different fdroidserver modules are listed.
* In :ref:`genindex` you'll find all methods sorted alphabetically.

54
examples/Vagrantfile.yaml Normal file
View file

@ -0,0 +1,54 @@
---
# You may want to alter these before running ./makebuildserver
# In the process of setting up the build server, many gigs of files
# are downloaded (Android SDK components, gradle, etc). These are
# cached so that they are not redownloaded each time. By default,
# these are stored in ~/.cache/fdroidserver
#
# cachedir: buildserver/cache
# To specify which Debian mirror the build server VM should use, by
# default it uses http.debian.net, which auto-detects which is the
# best mirror to use.
#
# debian_mirror: https://debian.osuosl.org/debian/
# The amount of RAM the build server will have (default: 2048)
# memory: 3584
# The number of CPUs the build server will have
# cpus: 1
# Debian package proxy server - if you have one
# aptproxy: http://192.168.0.19:8000
# If this is running on an older machine or on a virtualized system,
# it can run a lot slower. If the provisioning fails with a warning
# about the timeout, extend the timeout here. (default: 600 seconds)
#
# boot_timeout: 1200
# By default, this whole process uses VirtualBox as the provider, but
# QEMU+KVM is also supported via the libvirt plugin to vagrant. If
# this is run within a KVM guest, then libvirt's QEMU+KVM will be used
# automatically. It can also be manually enabled by uncommenting
# below:
#
# vm_provider: libvirt
# By default libvirt uses 'virtio' for both network and disk drivers.
# Some systems (eg. nesting VMware ESXi) do not support virtio. As a
# workaround for such rare cases, this setting allows to configure
# KVM/libvirt to emulate hardware rather than using virtio.
#
# libvirt_disk_bus: sata
# libvirt_nic_model_type: rtl8139
# Sometimes, it is not possible to use the 9p synced folder type with
# libvirt, like if running a KVM buildserver instance inside of a
# VMware ESXi guest. In that case, using NFS or another method is
# required.
#
# synced_folder_type: nfs

View file

@ -5,23 +5,20 @@
# Custom path to the Android SDK, defaults to $ANDROID_HOME
# sdk_path: $ANDROID_HOME
# Custom paths to various versions of the Android NDK, defaults to 'r12b' set
# to $ANDROID_NDK. Most users will have the latest at $ANDROID_NDK, which is
# used by default. If a version is missing or assigned to None, it is assumed
# not installed.
# Paths to installed versions of the Android NDK. This will be
# automatically filled out from well known sources like
# $ANDROID_HOME/ndk-bundle and $ANDROID_HOME/ndk/*. If a required
# version is missing in the buildserver VM, it will be automatically
# downloaded and installed into the standard $ANDROID_HOME/ndk/
# directory. Manually setting it here will override the auto-detected
# values. The keys can either be the "release" (e.g. r21e) or the
# "revision" (e.g. 21.4.7075529).
#
# ndk_paths:
# r10e: None
# r11c: None
# r12b: $ANDROID_NDK
# r13b: None
# r14b: None
# r15c: None
# r16b: None
# r17c: None
# r18b: None
# r19c: None
# r20b: None
# r21d: None
# r10e: $ANDROID_HOME/android-ndk-r10e
# r17: ""
# 21.4.7075529: ~/Android/Ndk
# r22b: null
# Directory to store downloaded tools in (i.e. gradle versions)
# By default, these are stored in ~/.cache/fdroidserver
@ -51,25 +48,46 @@
# The same policy is applied to the archive repo, if there is one.
# repo_maxage: 0
repo_url: https://MyFirstFDroidRepo.org/fdroid/repo
repo_name: My First F-Droid Repo Demo
repo_icon: fdroid-icon.png
repo_description: >-
This is a repository of apps to be used with F-Droid. Applications in this
repository are either official binaries built by the original application
developers, or are binaries built from source by the admin of f-droid.org
using the tools on https://gitlab.com/u/fdroid.
# Canonical URL of the repositoy, needs to end in /repo. Is is used to identity
# the repo in the client, as well.
# repo_url: https://MyFirstFDroidRepo.org/fdroid/repo
#
# Base URL for per-package pages on the website of this repo,
# i.e. https://f-droid.org/packages/<appid>/ This should be accessible
# with a browser. Setting it to null or not setting this disables the
# feature.
# repo_web_base_url: https://MyFirstFDroidRepo.org/packages/
#
# repo_name: My First F-Droid Repo Demo
# repo_description: >-
# This is a repository of apps to be used with F-Droid. Applications
# in this repository are either official binaries built by the
# original application developers, or are binaries built from source
# by the admin of f-droid.org using the tools on
# https://gitlab.com/fdroid.
# As above, but for the archive repo.
#
# archive_url: https://f-droid.org/archive
# archive_web_base_url:
# archive_name: My First F-Droid Archive Demo
# archive_description: >-
# The repository of older versions of packages from the main demo repository.
# archive_older sets the number of versions kept in the main repo, with all
# older ones going to the archive. Set it to 0, and there will be no archive
# repository, and no need to define the other archive_ values.
archive_older: 3
archive_url: https://f-droid.org/archive
archive_name: My First F-Droid Archive Demo
archive_icon: fdroid-icon.png
archive_description: >-
The repository of older versions of packages from the main demo repository.
#
# archive_older: 3
# The repo's icon defaults to a file called 'icon.png' in the 'icons'
# folder for each section, e.g. repo/icons/icon.png and
# archive/icons/icon.png. To use a different filename for the icons,
# set the filename here. You must still copy it into place in
# repo/icons/ and/or archive/icons/.
#
# repo_icon: myicon.png
# archive_icon: myicon.png
# This allows a specific kind of insecure APK to be included in the
# 'repo' section. Since April 2017, APK signatures that use MD5 are
@ -99,7 +117,7 @@ archive_description: >-
# Optionally, override home directory for gpg
# gpghome: /home/fdroid/somewhere/else/.gnupg
# The ID of a GPG key for making detached signatures for apks. Optional.
# The ID of a GPG key for making detached signatures for APKs. Optional.
# gpgkey: 1DBA2E89
# The key (from the keystore defined below) to be used for signing the
@ -168,6 +186,12 @@ archive_description: >-
# serverwebroot:
# - foo.com:/usr/share/nginx/www/fdroid
# - bar.info:/var/www/fdroid
#
# There is a special mode to only deploy the index file:
#
# serverwebroot:
# - url: 'me@b.az:/srv/fdroid'
# index_only: true
# When running fdroid processes on a remote server, it is possible to
@ -182,14 +206,49 @@ archive_description: >-
# deploy_process_logs: true
# The full URL to a git remote repository. You can include
# multiple servers to mirror to by wrapping the whole thing in {} or [], and
# including the servergitmirrors strings in a comma-separated list.
# multiple servers to mirror to by adding strings to a YAML list or map.
# Servers listed here will also be automatically inserted in the mirrors list.
#
# servergitmirrors: https://github.com/user/repo
# servergitmirrors:
# - https://github.com/user/repo
# - https://gitlab.com/user/repo
#
# servergitmirrors:
# - url: https://github.com/user/repo
# - url: https://gitlab.com/user/repo
# index_only: true
# These settings allow using `fdroid deploy` for publishing APK files from
# your repository to GitHub Releases. (You should also run `fdroid update`
# every time before deploying to GitHub releases to update index files.) Here's
# an example for this deployment automation:
# https://github.com/f-droid/fdroidclient/releases/
#
# Currently, versions which are assigned to a release channel (e.g. alpha or
# beta releases) are ignored.
#
# In the example below, tokens are read from environment variables. Putting
# tokens directly into the config file is also supported but discouraged. It is
# highly recommended to use a "Fine-grained personal access token", which is
# restricted to the minimum required permissions, which are:
# * Metadata - read
# * Contents - read/write
# (https://github.com/settings/personal-access-tokens/new)
#
# github_token: {env: GITHUB_TOKEN}
# github_releases:
# - projectUrl: https://github.com/f-droid/fdroidclient
# packageNames:
# - org.fdroid.basic
# - org.fdroid.fdroid
# release_notes_prepend: |
# Re-post of official F-Droid App release from https://f-droid.org
# - projectUrl: https://github.com/example/app
# packageNames: com.example.app
# token: {env: GITHUB_TOKEN_EXAMPLE}
# Most git hosting services have hard size limits for each git repo.
# `fdroid deploy` will delete the git history when the git mirror repo
@ -210,6 +269,18 @@ archive_description: >-
# mirrors:
# - https://foo.bar/fdroid
# - http://foobarfoobarfoobar.onion/fdroid
#
# Or additional metadata can also be included by adding key/value pairs:
#
# mirrors:
# - url: https://foo.bar/fdroid
# countryCode: BA
# - url: http://foobarfoobarfoobar.onion/fdroid
#
# The list of mirrors can also be maintained in config/mirrors.yml, a
# standalone YAML file in the optional configuration directory. In
# that case, mirrors: should be removed from this file (config.yml).
# optionally specify which identity file to use when using rsync or git over SSH
#
@ -234,19 +305,33 @@ archive_description: >-
#
# sync_from_local_copy_dir: true
# To upload the repo to an Amazon S3 bucket using `fdroid server
# update`. Warning, this deletes and recreates the whole fdroid/
# directory each time. This prefers s3cmd, but can also use
# apache-libcloud. To customize how s3cmd interacts with the cloud
# provider, create a 's3cfg' file next to this file (config.yml), and
# those settings will be used instead of any 'aws' variable below.
# Secrets can be fetched from environment variables to ensure that
# they are not leaked as part of this file.
# To deploy to an AWS S3 "bucket" in the US East region, set the
# bucket name in the config, then set the environment variables
# AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY using the values from
# the AWS Management Console. See
# https://rclone.org/s3/#authentication
#
# awsbucket: myawsfdroid
# awsaccesskeyid: SEE0CHAITHEIMAUR2USA
# awssecretkey: {env: awssecretkey}
# awsbucket: myawsfdroidbucket
# For extended options for syncing to cloud drive and object store
# services, `fdroid deploy' wraps Rclone. Rclone is a full featured
# sync tool for a huge variety of cloud services. Set up your services
# using `rclone config`, then specify each config name to deploy the
# awsbucket: to. Using rclone_config: overrides the default AWS S3 US
# East setup, and will only sync to the services actually specified.
#
# awsbucket: myawsfdroidbucket
# rclone_config:
# - aws-sample-config
# - rclone-supported-service-config
# By default Rclone uses the user's default configuration file at
# ~/.config/rclone/rclone.conf To specify a custom configuration file,
# please add the full path to the configuration file as below.
#
# path_to_custom_rclone_config: /home/mycomputer/somedir/example.conf
# If you want to force 'fdroid server' to use a non-standard serverwebroot.
@ -257,12 +342,12 @@ archive_description: >-
# nonstandardwebroot: false
# If you want to upload the release apk file to androidobservatory.org
# If you want to upload the release APK file to androidobservatory.org
#
# androidobservatory: false
# If you want to upload the release apk file to virustotal.com
# If you want to upload the release APK file to virustotal.com
# You have to enter your profile apikey to enable the upload.
#
# virustotal_apikey: 9872987234982734
@ -272,13 +357,6 @@ archive_description: >-
# virustotal_apikey: {env: virustotal_apikey}
# The build logs can be posted to a mediawiki instance, like on f-droid.org.
# wiki_protocol: http
# wiki_server: server
# wiki_path: /wiki/
# wiki_user: login
# wiki_password: 1234
# Keep a log of all generated index files in a git repo to provide a
# "binary transparency" log for anyone to check the history of the
# binaries that are published. This is in the form of a "git remote",
@ -286,27 +364,6 @@ archive_description: >-
# configured to allow push access (e.g. ssh key, username/password, etc)
# binary_transparency_remote: git@gitlab.com:fdroid/binary-transparency-log.git
# Only set this to true when running a repository where you want to generate
# stats, and only then on the master build servers, not a development
# machine. If you want to keep the "added" and "last updated" dates for each
# app and APK in your repo, then you should enable this.
# update_stats: true
# When used with stats, this is a list of IP addresses that are ignored for
# calculation purposes.
# stats_ignore: []
# Server stats logs are retrieved from. Required when update_stats is True.
# stats_server: example.com
# User stats logs are retrieved from. Required when update_stats is True.
# stats_user: bob
# Use the following to push stats to a Carbon instance:
# stats_to_carbon: false
# carbon_host: 0.0.0.0
# carbon_port: 2003
# Set this to true to always use a build server. This saves specifying the
# --server option on dedicated secure build server hosts.
# build_server_always: true
@ -346,9 +403,31 @@ archive_description: >-
# generating our default list. (https://pypi.org/project/spdx-license-list)
#
# You can override our default list of allowed licenes by setting this option.
# Just supply a custom list of licene names you would like to allow. Setting
# this to `None` disables this lint check.
# Just supply a custom list of licene names you would like to allow. To disable
# checking licenses by the linter, assign an empty value to lint_licenses.
#
# lint_licenses:
# - Custom-License-A
# - Another-License
# `fdroid scanner` can scan for signatures from various sources. By default
# it's configured to only use F-Droids official SUSS collection. We have
# support for these special collections:
# * 'exodus' - official exodus-privacy.org signatures
# * 'etip' - exodus privacy investigation platfrom community contributed
# signatures
# * 'suss' - official F-Droid: Suspicious or Unwanted Software Signatures
# You can also configure scanner to use custom collections of signatures here.
# They have to follow the format specified in the SUSS readme.
# (https://gitlab.com/fdroid/fdroid-suss/#cache-file-data-format)
#
# scanner_signature_sources:
# - suss
# - exodus
# - https://example.com/signatures.json
# The scanner can use signature sources from the internet. These are
# cached locally. To force them to be refreshed from the network on
# every run, set this to true:
#
# refresh_scanner: true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,46 @@
#!/usr/bin/env python3
#
# an fdroid plugin for resetting app VCSs to the latest version for the metadata
import argparse
import logging
from fdroidserver import _, common, metadata
from fdroidserver.exception import VCSException
fdroid_summary = 'reset app VCSs to the latest version'
def main():
parser = argparse.ArgumentParser(
usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]"
)
common.setup_global_opts(parser)
parser.add_argument(
"appid",
nargs='*',
help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"),
)
metadata.add_metadata_arguments(parser)
options = common.parse_args(parser)
apps = common.read_app_args(
options.appid, allow_version_codes=True, sort_by_time=True
)
common.read_config()
for appid, app in apps.items():
if "Builds" in app and len(app["Builds"]) > 0:
build = app.get('Builds')[-1]
logging.info(_("Cleaning up '{appid}' VCS").format(appid=appid))
try:
vcs, build_dir = common.setup_vcs(app)
vcs.gotorevision(build.commit)
if build.submodules:
vcs.initsubmodules()
except VCSException:
pass
if __name__ == "__main__":
main()

View file

@ -0,0 +1,62 @@
#!/usr/bin/env python3
#
# an fdroid plugin for exporting a repo's keystore in standard PEM format
import os
from argparse import ArgumentParser
from fdroidserver import common
from fdroidserver.common import FDroidPopen
from fdroidserver.exception import BuildException
fdroid_summary = "export the repo's keystore file to a NitroKey HSM"
def run(cmd, error):
envs = {'LC_ALL': 'C.UTF-8',
'PIN': config['smartcard_pin'],
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config['keypass']}
p = FDroidPopen(cmd, envs=envs)
if p.returncode != 0:
raise BuildException(error, p.output)
def main():
global config
parser = ArgumentParser()
common.setup_global_opts(parser)
common.parse_args(parser)
config = common.read_config()
destkeystore = config['keystore'].replace('.jks', '.p12').replace('/', '_')
exportkeystore = config['keystore'].replace('.jks', '.pem').replace('/', '_')
if os.path.exists(destkeystore) or os.path.exists(exportkeystore):
raise BuildException('%s exists!' % exportkeystore)
run([config['keytool'], '-importkeystore',
'-srckeystore', config['keystore'],
'-srcalias', config['repo_keyalias'],
'-srcstorepass:env', 'FDROID_KEY_STORE_PASS',
'-srckeypass:env', 'FDROID_KEY_PASS',
'-destkeystore', destkeystore,
'-deststorepass:env', 'FDROID_KEY_STORE_PASS',
'-deststoretype', 'PKCS12'],
'Failed to convert to PKCS12!')
# run(['openssl', 'pkcs12', '-in', destkeystore,
# '-passin', 'env:FDROID_KEY_STORE_PASS', '-nokeys',
# '-out', exportkeystore,
# '-passout', 'env:FDROID_KEY_STORE_PASS'],
# 'Failed to convert to PEM!')
run(['pkcs15-init', '--delete-objects', 'privkey,pubkey',
'--id', '3', '--store-private-key', destkeystore,
'--format', 'pkcs12', '--auth-id', '3',
'--verify-pin', '--pin', 'env:PIN'],
'')
run(['pkcs15-init', '--delete-objects', 'privkey,pubkey',
'--id', '2', '--store-private-key', destkeystore,
'--format', 'pkcs12', '--auth-id', '3',
'--verify-pin', '--pin', 'env:PIN'],
'')
if __name__ == "__main__":
main()

View file

@ -0,0 +1,49 @@
#!/usr/bin/env python3
#
# an fdroid plugin for exporting a repo's keystore in standard PEM format
import os
from argparse import ArgumentParser
from fdroidserver import common
from fdroidserver.common import FDroidPopen
from fdroidserver.exception import BuildException
fdroid_summary = 'export the keystore in standard PEM format'
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
common.parse_args(parser)
config = common.read_config()
env_vars = {'LC_ALL': 'C.UTF-8',
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config['keypass']}
destkeystore = config['keystore'].replace('.jks', '.p12').replace('/', '_')
exportkeystore = config['keystore'].replace('.jks', '.pem').replace('/', '_')
if os.path.exists(destkeystore) or os.path.exists(exportkeystore):
raise BuildException('%s exists!' % exportkeystore)
p = FDroidPopen([config['keytool'], '-importkeystore',
'-srckeystore', config['keystore'],
'-srcalias', config['repo_keyalias'],
'-srcstorepass:env', 'FDROID_KEY_STORE_PASS',
'-srckeypass:env', 'FDROID_KEY_PASS',
'-destkeystore', destkeystore,
'-deststoretype', 'PKCS12',
'-deststorepass:env', 'FDROID_KEY_STORE_PASS',
'-destkeypass:env', 'FDROID_KEY_PASS'],
envs=env_vars)
if p.returncode != 0:
raise BuildException("Failed to convert to PKCS12!", p.output)
p = FDroidPopen(['openssl', 'pkcs12', '-in', destkeystore,
'-passin', 'env:FDROID_KEY_STORE_PASS', '-nokeys',
'-out', exportkeystore,
'-passout', 'env:FDROID_KEY_STORE_PASS'],
envs=env_vars)
if p.returncode != 0:
raise BuildException("Failed to convert to PEM!", p.output)
if __name__ == "__main__":
main()

View file

@ -0,0 +1,23 @@
#!/usr/bin/env python3
#
# an fdroid plugin print the repo_pubkey from a repo's keystore
#
from argparse import ArgumentParser
from fdroidserver import common, index
fdroid_summary = 'export the keystore in standard PEM format'
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
common.parse_args(parser)
common.read_config()
pubkey, repo_pubkey_fingerprint = index.extract_pubkey()
print('repo_pubkey = "%s"' % pubkey.decode())
if __name__ == "__main__":
main()

View file

@ -0,0 +1,43 @@
#!/usr/bin/env python3
#
# an fdroid plugin for setting up srclibs
#
# The 'fdroid build' gitlab-ci job uses --on-server, which does not
# set up the srclibs. This plugin does the missing setup.
import argparse
import os
import pprint
from fdroidserver import _, common, metadata
fdroid_summary = 'prepare the srclibs for `fdroid build --on-server`'
def main():
parser = argparse.ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]")
common.setup_global_opts(parser)
parser.add_argument("appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"))
metadata.add_metadata_arguments(parser)
options = common.parse_args(parser)
apps = common.read_app_args(options.appid, allow_version_codes=True, sort_by_time=True)
common.read_config()
srclib_dir = os.path.join('build', 'srclib')
os.makedirs(srclib_dir, exist_ok=True)
srclibpaths = []
for appid, app in apps.items():
vcs, _ignored = common.setup_vcs(app)
for build in app.get('Builds', []):
vcs.gotorevision(build.commit, refresh=False)
if build.submodules:
vcs.initsubmodules()
else:
vcs.deinitsubmodules()
for lib in build.srclibs:
srclibpaths.append(common.getsrclib(lib, srclib_dir, prepare=False, build=build))
print('Set up srclibs:')
pprint.pprint(srclibpaths)
if __name__ == "__main__":
main()

View file

@ -0,0 +1,42 @@
#!/usr/bin/env python3
from argparse import ArgumentParser
from fdroidserver import common
from fdroidserver.common import FDroidPopen
from fdroidserver.exception import BuildException
fdroid_summary = 'import the local keystore into a SmartCard HSM'
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
common.parse_args(parser)
config = common.read_config()
env_vars = {
'LC_ALL': 'C.UTF-8',
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config['keypass'],
'SMARTCARD_PIN': str(config['smartcard_pin']),
}
p = FDroidPopen([config['keytool'], '-importkeystore',
'-srcalias', config['repo_keyalias'],
'-srckeystore', config['keystore'],
'-srcstorepass:env', 'FDROID_KEY_STORE_PASS',
'-srckeypass:env', 'FDROID_KEY_PASS',
'-destalias', config['repo_keyalias'],
'-destkeystore', 'NONE',
'-deststoretype', 'PKCS11',
'-providerName', 'SunPKCS11-OpenSC',
'-providerClass', 'sun.security.pkcs11.SunPKCS11',
'-providerArg', 'opensc-fdroid.cfg',
'-deststorepass:env', 'SMARTCARD_PIN',
'-J-Djava.security.debug=sunpkcs11'],
envs=env_vars)
if p.returncode != 0:
raise BuildException("Failed to import into HSM!", p.output)
if __name__ == "__main__":
main()

View file

@ -1,94 +0,0 @@
#!/usr/bin/env python3
#
# You may want to alter these before running ./makebuildserver
# Name of the Vagrant basebox to use, by default it will be downloaded
# from Vagrant Cloud. For release builds setup, generate the basebox
# locally using https://gitlab.com/fdroid/basebox, add it to Vagrant,
# then set this to the local basebox name.
# This defaults to "fdroid/basebox-stretch64" which will download a
# prebuilt basebox from https://app.vagrantup.com/fdroid.
#
# (If you change this value you have to supply the `--clean` option on
# your next `makebuildserver` run.)
#
# basebox = "basebox-stretch64"
# This allows you to pin your basebox to a specific versions. It defaults
# the most recent basebox version which can be aumotaically verifyed by
# `makebuildserver`.
# Please note that vagrant does not support versioning of locally added
# boxes, so we can't support that either.
#
# (If you change this value you have to supply the `--clean` option on
# your next `makebuildserver` run.)
#
# basebox_version = "0.1"
# In the process of setting up the build server, many gigs of files
# are downloaded (Android SDK components, gradle, etc). These are
# cached so that they are not redownloaded each time. By default,
# these are stored in ~/.cache/fdroidserver
#
# cachedir = 'buildserver/cache'
# A big part of creating a new instance is downloading packages from Debian.
# This setups up a folder in ~/.cache/fdroidserver to cache the downloaded
# packages when rebuilding the build server from scratch. This requires
# that virtualbox-guest-utils is installed.
#
# apt_package_cache = True
# The buildserver can use some local caches to speed up builds,
# especially when the internet connection is slow and/or expensive.
# If enabled, the buildserver setup will look for standard caches in
# your HOME dir and copy them to the buildserver VM. Be aware: this
# will reduce the isolation of the buildserver from your host machine,
# so the buildserver will provide an environment only as trustworthy
# as the host machine's environment.
#
# copy_caches_from_host = True
# To specify which Debian mirror the build server VM should use, by
# default it uses http.debian.net, which auto-detects which is the
# best mirror to use.
#
# debian_mirror = 'http://ftp.uk.debian.org/debian/'
# The amount of RAM the build server will have (default: 2048)
# memory = 3584
# The number of CPUs the build server will have
# cpus = 1
# Debian package proxy server - if you have one
# aptproxy = "http://192.168.0.19:8000"
# If this is running on an older machine or on a virtualized system,
# it can run a lot slower. If the provisioning fails with a warning
# about the timeout, extend the timeout here. (default: 600 seconds)
#
# boot_timeout = 1200
# By default, this whole process uses VirtualBox as the provider, but
# QEMU+KVM is also supported via the libvirt plugin to vagrant. If
# this is run within a KVM guest, then libvirt's QEMU+KVM will be used
# automatically. It can also be manually enabled by uncommenting
# below:
#
# vm_provider = 'libvirt'
# By default libvirt uses 'virtio' for both network and disk drivers.
# Some systems (eg. nesting VMware ESXi) do not support virtio. As a
# workaround for such rare cases, this setting allows to configure
# KVM/libvirt to emulate hardware rather than using virtio.
#
# libvirt_disk_bus = 'sata'
# libvirt_nic_model_type = 'rtl8139'
# Sometimes, it is not possible to use the 9p synced folder type with
# libvirt, like if running a KVM buildserver instance inside of a
# VMware ESXi guest. In that case, using NFS or another method is
# required.
#
# synced_folder_type = 'nfs'

View file

@ -1,28 +0,0 @@
#!/bin/bash
#
# This script syncs the entire repo to the primary mirrors. It is
# meant to run in a cronjob quite frequently, as often as there are
# files to send.
#
# This script expects the receiving side to have the following
# preceeding the ssh key entry in ~/.ssh/authorized_keys:
# command="rsync --server -logDtpre.iLsfx --log-format=X --delete --delay-updates . /path/to/htdocs/fdroid/",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
#
set -e
(
flock -n 200
set -e
cd /home/fdroid
for section in repo archive; do
echo "Started $section at `date`:"
for host in fdroid@mirror.f-droid.org fdroid@ftp-push.lysator.liu.se; do
set -x
# be super careful with the trailing slashes here! if one is wrong, it'll delete the entire section!
rsync --archive --delay-updates --progress --delete \
/home/fdroid/public_html/${section} \
${host}:/srv/fdroid-mirror.at.or.at/htdocs/fdroid/ &
set +x
done
wait
done
) 200>/var/lock/root_fdroidmirrortomirror

View file

@ -1,20 +1,23 @@
import gettext
import glob
import os
import sys
# support running straight from git and standard installs
rootpaths = [
os.path.realpath(os.path.join(os.path.dirname(__file__), '..')),
os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', 'share')),
os.path.realpath(
os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', 'share')
),
os.path.join(sys.prefix, 'share'),
]
localedir = None
for rootpath in rootpaths:
if len(glob.glob(os.path.join(rootpath, 'locale', '*', 'LC_MESSAGES', 'fdroidserver.mo'))) > 0:
found_mo = glob.glob(
os.path.join(rootpath, 'locale', '*', 'LC_MESSAGES', 'fdroidserver.mo')
)
if len(found_mo) > 0:
localedir = os.path.join(rootpath, 'locale')
break
@ -23,34 +26,53 @@ gettext.textdomain('fdroidserver')
_ = gettext.gettext
from fdroidserver.exception import (FDroidException,
MetaDataException,
VerificationException) # NOQA: E402
from fdroidserver.exception import (
FDroidException,
MetaDataException,
VerificationException, # NOQA: E402
)
FDroidException # NOQA: B101
MetaDataException # NOQA: B101
VerificationException # NOQA: B101
from fdroidserver.common import (verify_apk_signature,
genkeystore as generate_keystore) # NOQA: E402
from fdroidserver.common import genkeystore as generate_keystore # NOQA: E402
from fdroidserver.common import verify_apk_signature
verify_apk_signature # NOQA: B101
generate_keystore # NOQA: B101
from fdroidserver.index import (download_repo_index,
get_mirror_service_urls,
make as make_index) # NOQA: E402
from fdroidserver.index import (
download_repo_index,
download_repo_index_v1,
download_repo_index_v2,
get_mirror_service_urls,
)
from fdroidserver.index import make as make_index # NOQA: E402
download_repo_index # NOQA: B101
download_repo_index_v1 # NOQA: B101
download_repo_index_v2 # NOQA: B101
get_mirror_service_urls # NOQA: B101
make_index # NOQA: B101
from fdroidserver.update import (process_apk,
process_apks,
scan_apk,
scan_repo_files) # NOQA: E402
from fdroidserver.update import (
process_apk,
process_apks,
scan_apk,
scan_repo_files, # NOQA: E402
)
process_apk # NOQA: B101
process_apks # NOQA: B101
scan_apk # NOQA: B101
scan_repo_files # NOQA: B101
from fdroidserver.deploy import (update_awsbucket,
update_servergitmirrors,
update_serverwebroot) # NOQA: E402
from fdroidserver.deploy import (
update_awsbucket,
update_servergitmirrors,
update_serverwebroot, # NOQA: E402
update_serverwebroots,
)
update_awsbucket # NOQA: B101
update_servergitmirrors # NOQA: B101
update_serverwebroots # NOQA: B101
update_serverwebroot # NOQA: B101

View file

@ -18,19 +18,20 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import importlib.metadata
import logging
import os
import pkgutil
import re
import sys
import os
import locale
import pkgutil
import logging
from argparse import ArgumentError
from collections import OrderedDict
import git
import fdroidserver.common
import fdroidserver.metadata
from fdroidserver import _
from argparse import ArgumentError
from collections import OrderedDict
COMMANDS = OrderedDict([
("build", _("Build a package from source")),
@ -41,13 +42,12 @@ COMMANDS = OrderedDict([
("deploy", _("Interact with the repo HTTP server")),
("verify", _("Verify the integrity of downloaded packages")),
("checkupdates", _("Check for updates to applications")),
("import", _("Add a new application from its source code")),
("import", _("Extract application metadata from a source repository")),
("install", _("Install built packages on devices")),
("readmeta", _("Read all the metadata files and exit")),
("rewritemeta", _("Rewrite all the metadata files")),
("lint", _("Warn about possible metadata errors")),
("scanner", _("Scan the source code of a package")),
("stats", _("Update the stats of the repo")),
("signindex", _("Sign indexes created using update --nosign")),
("btlog", _("Update the binary transparency log for a URL")),
("signatures", _("Extract signatures from APKs")),
@ -70,9 +70,13 @@ def print_help(available_plugins=None):
def preparse_plugin(module_name, module_dir):
"""simple regex based parsing for plugin scripts,
so we don't have to import them when we just need the summary,
but not plan on executing this particular plugin."""
"""No summary.
Simple regex based parsing for plugin scripts.
So we don't have to import them when we just need the summary,
but not plan on executing this particular plugin.
"""
if '.' in module_name:
raise ValueError("No '.' allowed in fdroid plugin modules: '{}'"
.format(module_name))
@ -132,7 +136,7 @@ def main():
sys.exit(0)
command = sys.argv[1]
if command not in COMMANDS and command not in available_plugins.keys():
if command not in COMMANDS and command not in available_plugins:
if command in ('-h', '--help'):
print_help(available_plugins=available_plugins)
sys.exit(0)
@ -140,32 +144,21 @@ def main():
print(_("""ERROR: The "server" subcommand has been removed, use "deploy"!"""))
sys.exit(1)
elif command == '--version':
output = _('no version info found!')
cmddir = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
moduledir = os.path.realpath(os.path.dirname(fdroidserver.common.__file__) + '/..')
if cmddir == moduledir:
# running from git
os.chdir(cmddir)
if os.path.isdir('.git'):
import subprocess
try:
output = subprocess.check_output(['git', 'describe'],
stderr=subprocess.STDOUT,
universal_newlines=True)
except subprocess.CalledProcessError:
output = 'git commit ' + subprocess.check_output(['git', 'rev-parse', 'HEAD'],
universal_newlines=True)
elif os.path.exists('setup.py'):
import re
m = re.search(r'''.*[\s,\(]+version\s*=\s*["']([0-9a-z.]+)["'].*''',
open('setup.py').read(), flags=re.MULTILINE)
if m:
output = m.group(1) + '\n'
else:
from pkg_resources import get_distribution
output = get_distribution('fdroidserver').version + '\n'
print(output)
sys.exit(0)
try:
print(importlib.metadata.version("fdroidserver"))
sys.exit(0)
except importlib.metadata.PackageNotFoundError:
pass
try:
print(
git.repo.Repo(
os.path.dirname(os.path.dirname(__file__))
).git.describe(always=True, tags=True)
)
sys.exit(0)
except git.exc.InvalidGitRepositoryError:
print(_('No version information could be found.'))
sys.exit(1)
else:
print(_("Command '%s' not recognised.\n" % command))
print_help(available_plugins=available_plugins)
@ -189,16 +182,18 @@ def main():
"can not be specified at the same time."))
sys.exit(1)
# Trick optparse into displaying the right usage when --help is used.
# Trick argparse into displaying the right usage when --help is used.
sys.argv[0] += ' ' + command
del sys.argv[1]
if command in COMMANDS.keys():
# import is named import_subcommand internally b/c import is reserved by Python
command = 'import_subcommand' if command == 'import' else command
mod = __import__('fdroidserver.' + command, None, None, [command])
else:
mod = __import__(available_plugins[command]['name'], None, None, [command])
system_langcode, system_encoding = locale.getdefaultlocale()
system_encoding = sys.getdefaultencoding()
if system_encoding is None or system_encoding.lower() not in ('utf-8', 'utf8'):
logging.warning(_("Encoding is set to '{enc}' fdroid might run "
"into encoding issues. Please set it to 'UTF-8' "

64
fdroidserver/_yaml.py Normal file
View file

@ -0,0 +1,64 @@
# Copyright (C) 2025, Hans-Christoph Steiner <hans@eds.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Standard YAML parsing and dumping.
YAML 1.2 is the preferred format for all data files. When loading
F-Droid formats like config.yml and <Application ID>.yml, YAML 1.2 is
forced, and older YAML constructs should be considered an error.
It is OK to load and dump files in other YAML versions if they are
externally defined formats, like FUNDING.yml. In those cases, these
common instances might not be appropriate to use.
There is a separate instance for dumping based on the "round trip" aka
"rt" mode. The "rt" mode maintains order while the "safe" mode sorts
the output. Also, yaml.version is not forced in the dumper because that
makes it write out a "%YAML 1.2" header. F-Droid's formats are
explicitly defined as YAML 1.2 and meant to be human-editable. So that
header gets in the way.
"""
import ruamel.yaml
yaml = ruamel.yaml.YAML(typ='safe')
yaml.version = (1, 2)
yaml_dumper = ruamel.yaml.YAML(typ='rt')
def config_dump(config, fp=None):
"""Dump config data in YAML 1.2 format without headers.
This outputs YAML in a string that is suitable for use in regexps
and string replacements, as well as complete files. It is therefore
explicitly set up to avoid writing out headers and footers.
This is modeled after PyYAML's yaml.dump(), which can dump to a file
or return a string.
https://yaml.dev/doc/ruamel.yaml/example/#Output_of_%60dump()%60_as_a_string
"""
dumper = ruamel.yaml.YAML(typ='rt')
dumper.default_flow_style = False
dumper.explicit_start = False
dumper.explicit_end = False
if fp is None:
with ruamel.yaml.compat.StringIO() as fp:
dumper.dump(config, fp)
return fp.getvalue()
dumper.dump(config, fp)

1019
fdroidserver/apksigcopier.py Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,8 @@
"""
"""Simple thread based asynchronous file reader for Python.
AsynchronousFileReader
======================
Simple thread based asynchronous file reader for Python.
see https://github.com/soxofaan/asynchronousfilereader
MIT License
@ -13,6 +12,7 @@ Copyright (c) 2014 Stefaan Lippens
__version__ = '0.2.1'
import threading
try:
# Python 2
from Queue import Queue
@ -22,10 +22,9 @@ except ImportError:
class AsynchronousFileReader(threading.Thread):
"""
Helper class to implement asynchronous reading of a file
in a separate thread. Pushes read lines on a queue to
be consumed in another thread.
"""Helper class to implement asynchronous reading of a file in a separate thread.
Pushes read lines on a queue to be consumed in another thread.
"""
def __init__(self, fd, queue=None, autostart=True):
@ -40,9 +39,7 @@ class AsynchronousFileReader(threading.Thread):
self.start()
def run(self):
"""
The body of the tread: read lines and put them on the queue.
"""
"""Read lines and put them on the queue (the body of the tread)."""
while True:
line = self._fd.readline()
if not line:
@ -50,15 +47,10 @@ class AsynchronousFileReader(threading.Thread):
self.queue.put(line)
def eof(self):
"""
Check whether there is no more content to expect.
"""
"""Check whether there is no more content to expect."""
return not self.is_alive() and self.queue.empty()
def readlines(self):
"""
Get currently available lines.
"""
"""Get currently available lines."""
while not self.queue.empty():
yield self.queue.get()

View file

@ -1,4 +1,5 @@
#!/usr/bin/env python3
"""Update the binary transparency log for a URL."""
#
# btlog.py - part of the FDroid server tools
# Copyright (C) 2017, Hans-Christoph Steiner <hans@eds.org>
@ -26,51 +27,64 @@
# client app so its not easy for the server to distinguish this from
# the F-Droid client.
import collections
import defusedxml.minidom
import git
import glob
import os
import json
import logging
import requests
import os
import shutil
import tempfile
import zipfile
from argparse import ArgumentParser
from typing import Optional
from . import _
from . import common
from . import deploy
import defusedxml.minidom
import git
import requests
from . import _, common, deploy
from .exception import FDroidException
options = None
def make_binary_transparency_log(
repodirs: collections.abc.Iterable,
btrepo: str = 'binary_transparency',
url: Optional[str] = None,
commit_title: str = 'fdroid update',
):
"""Log the indexes in a standalone git repo to serve as a "binary transparency" log.
Parameters
----------
repodirs
The directories of the F-Droid repository to generate the binary
transparency log for.
btrepo
The path to the Git repository of the binary transparency log.
url
The URL of the F-Droid repository to generate the binary transparency
log for.
commit_title
The commit title for commits in the binary transparency log Git
repository.
def make_binary_transparency_log(repodirs, btrepo='binary_transparency',
url=None,
commit_title='fdroid update'):
'''Log the indexes in a standalone git repo to serve as a "binary
transparency" log.
see: https://www.eff.org/deeplinks/2014/02/open-letter-to-tech-companies
'''
Notes
-----
Also see https://www.eff.org/deeplinks/2014/02/open-letter-to-tech-companies .
"""
logging.info('Committing indexes to ' + btrepo)
if os.path.exists(os.path.join(btrepo, '.git')):
gitrepo = git.Repo(btrepo)
else:
if not os.path.exists(btrepo):
os.mkdir(btrepo)
gitrepo = git.Repo.init(btrepo)
gitrepo = git.Repo.init(btrepo, initial_branch=deploy.GIT_BRANCH)
if not url:
url = common.config['repo_url'].rstrip('/')
with open(os.path.join(btrepo, 'README.md'), 'w') as fp:
fp.write("""
fp.write(
"""
# Binary Transparency Log for %s
This is a log of the signed app index metadata. This is stored in a
@ -80,15 +94,17 @@ F-Droid repository was a publicly released file.
For more info on this idea:
* https://wiki.mozilla.org/Security/Binary_Transparency
""" % url[:url.rindex('/')]) # strip '/repo'
gitrepo.index.add(['README.md', ])
"""
% url[: url.rindex('/')] # strip '/repo'
)
gitrepo.index.add(['README.md'])
gitrepo.index.commit('add README')
for repodir in repodirs:
cpdir = os.path.join(btrepo, repodir)
if not os.path.exists(cpdir):
os.mkdir(cpdir)
for f in ('index.xml', 'index-v1.json'):
for f in ('index.xml', 'index-v1.json', 'index-v2.json', 'entry.json'):
repof = os.path.join(repodir, f)
if not os.path.exists(repof):
continue
@ -103,8 +119,8 @@ For more info on this idea:
output = json.load(fp, object_pairs_hook=collections.OrderedDict)
with open(dest, 'w') as fp:
json.dump(output, fp, indent=2)
gitrepo.index.add([repof, ])
for f in ('index.jar', 'index-v1.jar'):
gitrepo.index.add([repof])
for f in ('index.jar', 'index-v1.jar', 'entry.jar'):
repof = os.path.join(repodir, f)
if not os.path.exists(repof):
continue
@ -116,7 +132,7 @@ For more info on this idea:
jarout.writestr(info, jarin.read(info.filename))
jarout.close()
jarin.close()
gitrepo.index.add([repof, ])
gitrepo.index.add([repof])
output_files = []
for root, dirs, files in os.walk(repodir):
@ -137,27 +153,45 @@ For more info on this idea:
fslogfile = os.path.join(cpdir, 'filesystemlog.json')
with open(fslogfile, 'w') as fp:
json.dump(output, fp, indent=2)
gitrepo.index.add([os.path.join(repodir, 'filesystemlog.json'), ])
gitrepo.index.add([os.path.join(repodir, 'filesystemlog.json')])
for f in glob.glob(os.path.join(cpdir, '*.HTTP-headers.json')):
gitrepo.index.add([os.path.join(repodir, os.path.basename(f)), ])
gitrepo.index.add([os.path.join(repodir, os.path.basename(f))])
gitrepo.index.commit(commit_title)
def main():
global options
"""Generate or update a binary transparency log for a F-Droid repository.
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
Raises
------
:exc:`~fdroidserver.exception.FDroidException`
If the specified or default Git repository does not exist.
"""
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("--git-repo",
default=os.path.join(os.getcwd(), 'binary_transparency'),
help=_("Path to the git repo to use as the log"))
parser.add_argument("-u", "--url", default='https://f-droid.org',
help=_("The base URL for the repo to log (default: https://f-droid.org)"))
parser.add_argument("--git-remote", default=None,
help=_("Push the log to this git remote repository"))
options = parser.parse_args()
parser.add_argument(
"--git-repo",
default=os.path.join(os.getcwd(), 'binary_transparency'),
help=_("Path to the git repo to use as the log"),
)
parser.add_argument(
"-u",
"--url",
default='https://f-droid.org',
help=_("The base URL for the repo to log (default: https://f-droid.org)"),
)
parser.add_argument(
"--git-remote",
default=None,
help=_("Push the log to this git remote repository"),
)
options = common.parse_args(parser)
if options.verbose:
logging.getLogger("requests").setLevel(logging.INFO)
@ -168,7 +202,8 @@ def main():
if not os.path.exists(options.git_repo):
raise FDroidException(
'"%s" does not exist! Create it, or use --git-repo' % options.git_repo)
'"%s" does not exist! Create it, or use --git-repo' % options.git_repo
)
session = requests.Session()
@ -181,14 +216,20 @@ def main():
os.makedirs(tempdir, exist_ok=True)
gitrepodir = os.path.join(options.git_repo, repodir)
os.makedirs(gitrepodir, exist_ok=True)
for f in ('index.jar', 'index.xml', 'index-v1.jar', 'index-v1.json'):
for f in (
'entry.jar',
'entry.json',
'index-v1.jar',
'index-v1.json',
'index-v2.json',
'index.jar',
'index.xml',
):
dlfile = os.path.join(tempdir, f)
dlurl = options.url + '/' + repodir + '/' + f
http_headers_file = os.path.join(gitrepodir, f + '.HTTP-headers.json')
headers = {
'User-Agent': 'F-Droid 0.102.3'
}
headers = {'User-Agent': 'F-Droid 0.102.3'}
etag = None
if os.path.exists(http_headers_file):
with open(http_headers_file) as fp:
@ -196,7 +237,9 @@ def main():
r = session.head(dlurl, headers=headers, allow_redirects=False)
if r.status_code != 200:
logging.debug('HTTP Response (' + str(r.status_code) + '), did not download ' + dlurl)
logging.debug(
'HTTP Response (%d), did not download %s' % (r.status_code, dlurl)
)
continue
if etag and etag == r.headers.get('ETag'):
logging.debug('ETag matches, did not download ' + dlurl)
@ -217,7 +260,9 @@ def main():
if new_files:
os.chdir(tempdirbase)
make_binary_transparency_log(repodirs, options.git_repo, options.url, 'fdroid btlog')
make_binary_transparency_log(
repodirs, options.git_repo, options.url, 'fdroid btlog'
)
if options.git_remote:
deploy.push_binary_transparency(options.git_repo, options.git_remote)
shutil.rmtree(tempdirbase, ignore_errors=True)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
class FDroidException(Exception):
def __init__(self, value=None, detail=None):
super().__init__()
self.value = value
self.detail = detail
@ -9,26 +9,22 @@ class FDroidException(Exception):
return self.detail
return '[...]\n' + self.detail[-16000:]
def get_wikitext(self):
ret = repr(self.value) + "\n"
if self.detail:
ret += "=detail=\n"
ret += "<pre>\n" + self.shortened_detail() + "</pre>\n"
return ret
def __str__(self):
if self.value is None:
ret = __name__
else:
ret = str(self.value)
if self.detail:
ret += "\n==== detail begin ====\n%s\n==== detail end ====" % ''.join(self.detail).strip()
ret += (
"\n==== detail begin ====\n%s\n==== detail end ===="
% ''.join(self.detail).strip()
)
return ret
class MetaDataException(Exception):
def __init__(self, value):
super().__init__()
self.value = value
def __str__(self):
@ -39,6 +35,10 @@ class VCSException(FDroidException):
pass
class NoVersionCodeException(FDroidException):
pass
class NoSubmodulesException(VCSException):
pass
@ -49,3 +49,10 @@ class BuildException(FDroidException):
class VerificationException(FDroidException):
pass
class ConfigurationException(FDroidException):
def __init__(self, value=None, detail=None):
super().__init__()
self.value = value
self.detail = detail

178
fdroidserver/github.py Normal file
View file

@ -0,0 +1,178 @@
#!/usr/bin/env python3
#
# github.py - part of the FDroid server tools
# Copyright (C) 2024, Michael Pöhn, michael@poehn.at
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import pathlib
import urllib.parse
import urllib.request
class GithubApi:
"""Wrapper for some select calls to GitHub Json/REST API.
This class wraps some calls to api.github.com. This is not intended to be a
general API wrapper. Instead it's purpose is to return pre-filtered and
transformed data that's playing well with other fdroidserver functions.
With the GitHub API, the token is optional, but it has pretty
severe rate limiting.
"""
def __init__(self, api_token, repo_path):
self._api_token = api_token
if repo_path.startswith("https://github.com/"):
self._repo_path = repo_path[19:]
else:
self._repo_path = repo_path
def _req(self, url, data=None):
h = {
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
}
if self._api_token:
h["Authorization"] = f"Bearer {self._api_token}"
return urllib.request.Request(
url,
headers=h,
data=data,
)
def list_released_tags(self):
"""List of all tags that are associated with a release for this repo on GitHub."""
names = []
req = self._req(f"https://api.github.com/repos/{self._repo_path}/releases")
with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning
releases = json.load(resp)
for release in releases:
names.append(release['tag_name'])
return names
def list_unreleased_tags(self):
all_tags = self.list_all_tags()
released_tags = self.list_released_tags()
return [x for x in all_tags if x not in released_tags]
def get_latest_apk(self):
req = self._req(
f"https://api.github.com/repos/{self._repo_path}/releases/latest"
)
with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning
assets = json.load(resp)['assets']
for asset in assets:
url = asset.get('browser_download_url')
if url and url.endswith('.apk'):
return url
def tag_exists(self, tag):
"""
Check if git tag is present on github.
https://docs.github.com/en/rest/git/refs?apiVersion=2022-11-28#list-matching-references--fine-grained-access-tokens
"""
req = self._req(
f"https://api.github.com/repos/{self._repo_path}/git/matching-refs/tags/{tag}"
)
with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning
rd = json.load(resp)
return len(rd) == 1 and rd[0].get("ref", False) == f"refs/tags/{tag}"
return False
def list_all_tags(self):
"""Get list of all tags for this repo on GitHub."""
tags = []
req = self._req(
f"https://api.github.com/repos/{self._repo_path}/git/matching-refs/tags/"
)
with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning
refs = json.load(resp)
for ref in refs:
r = ref.get('ref', '')
if r.startswith('refs/tags/'):
tags.append(r[10:])
return tags
def create_release(self, tag, files, body=''):
"""
Create a new release on github.
also see: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#create-a-release
:returns: True if release was created, False if release already exists
:raises: urllib exceptions in case of network or api errors, also
raises an exception when the tag doesn't exists.
"""
# Querying github to create a new release for a non-existent tag, will
# also create that tag on github. So we need an additional check to
# prevent this behavior.
if not self.tag_exists(tag):
raise Exception(
f"can't create github release for {self._repo_path} {tag}, tag doesn't exists"
)
# create the relase on github
req = self._req(
f"https://api.github.com/repos/{self._repo_path}/releases",
data=json.dumps(
{
"tag_name": tag,
"body": body,
}
).encode("utf-8"),
)
try:
with urllib.request.urlopen( # nosec CWE-22 disable bandit warning
req
) as resp:
release_id = json.load(resp)['id']
except urllib.error.HTTPError as e:
if e.status == 422:
codes = [x['code'] for x in json.load(e).get('errors', [])]
if "already_exists" in codes:
return False
raise e
# attach / upload all files for the relase
for file in files:
self._create_release_asset(release_id, file)
return True
def _create_release_asset(self, release_id, file):
"""
Attach a file to a release on GitHub.
This uploads a file to github relases, it will be attached to the supplied release
also see: https://docs.github.com/en/rest/releases/assets?apiVersion=2022-11-28#upload-a-release-asset
"""
file = pathlib.Path(file)
with open(file, 'rb') as f:
req = urllib.request.Request(
f"https://uploads.github.com/repos/{self._repo_path}/releases/{release_id}/assets?name={file.name}",
headers={
"Accept": "application/vnd.github+json",
"Authorization": f"Bearer {self._api_token}",
"X-GitHub-Api-Version": "2022-11-28",
"Content-Type": "application/octet-stream",
},
data=f.read(),
)
with urllib.request.urlopen(req): # nosec CWE-22 disable bandit warning
return True
return False

View file

@ -16,25 +16,22 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import glob
from argparse import ArgumentParser
import logging
import os
import time
from argparse import ArgumentParser
from . import _
from . import common
from . import _, common
from .common import FDroidPopen
from .exception import FDroidException
config = None
options = None
start_timestamp = time.gmtime()
def status_update_json(signed):
"""Output a JSON file with metadata about this run"""
"""Output a JSON file with metadata about this run."""
logging.debug(_('Outputting JSON'))
output = common.setup_status_output(start_timestamp)
if signed:
@ -43,15 +40,14 @@ def status_update_json(signed):
def main():
global config, options
global config
# Parse command line...
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
common.parse_args(parser)
config = common.read_config(options)
config = common.read_config()
repodirs = ['repo']
if config['archive_older'] != 0:
@ -60,22 +56,20 @@ def main():
signed = []
for output_dir in repodirs:
if not os.path.isdir(output_dir):
raise FDroidException(_("Missing output directory") + " '" + output_dir + "'")
raise FDroidException(
_("Missing output directory") + " '" + output_dir + "'"
)
# Process any apks that are waiting to be signed...
for f in sorted(glob.glob(os.path.join(output_dir, '*.*'))):
if common.get_file_extension(f) == 'asc':
continue
if not common.is_repo_file(f):
if not common.is_repo_file(f, for_gpg_signing=True):
continue
filename = os.path.basename(f)
sigfilename = filename + ".asc"
sigpath = os.path.join(output_dir, sigfilename)
if not os.path.exists(sigpath):
gpgargs = ['gpg', '-a',
'--output', sigpath,
'--detach-sig']
gpgargs = ['gpg', '-a', '--output', sigpath, '--detach-sig']
if 'gpghome' in config:
gpgargs.extend(['--homedir', config['gpghome']])
if 'gpgkey' in config:

View file

@ -1,265 +0,0 @@
#!/usr/bin/env python3
#
# import.py - part of the FDroid server tools
# Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com
# Copyright (C) 2013-2014 Daniel Martí <mvdan@mvdan.cc>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import configparser
import git
import json
import os
import shutil
import sys
import yaml
from argparse import ArgumentParser
import logging
try:
from yaml import CSafeLoader as SafeLoader
except ImportError:
from yaml import SafeLoader
from . import _
from . import common
from . import metadata
from .exception import FDroidException
config = None
options = None
# WARNING! This cannot be imported as a Python module, so reuseable functions need to go into common.py!
def clone_to_tmp_dir(app):
tmp_dir = 'tmp'
if not os.path.isdir(tmp_dir):
logging.info(_("Creating temporary directory"))
os.makedirs(tmp_dir)
tmp_dir = os.path.join(tmp_dir, 'importer')
if os.path.exists(tmp_dir):
shutil.rmtree(tmp_dir)
vcs = common.getvcs(app.RepoType, app.Repo, tmp_dir)
vcs.gotorevision(options.rev)
return tmp_dir
def check_for_kivy_buildozer(tmp_importer_dir, app, build):
versionCode = None
buildozer_spec = os.path.join(tmp_importer_dir, 'buildozer.spec')
if os.path.exists(buildozer_spec):
config = configparser.ConfigParser()
config.read(buildozer_spec)
import pprint
pprint.pprint(sorted(config['app'].keys()))
app.id = config['app'].get('package.domain')
print(app.id)
app.AutoName = config['app'].get('package.name', app.AutoName)
app.License = config['app'].get('license', app.License)
app.Description = config['app'].get('description', app.Description)
build.versionName = config['app'].get('version')
build.output = 'bin/%s-$$VERSION$$-release-unsigned.apk' % app.AutoName
build.ndk = 'r17c'
build.srclibs = [
'buildozer@586152c',
'python-for-android@ccb0f8e1',
]
build.sudo = [
'apt-get update',
'apt-get install -y build-essential libffi-dev libltdl-dev',
]
build.prebuild = [
'sed -iE "/^[# ]*android\\.(ant|ndk|sdk)_path[ =]/d" buildozer.spec',
'sed -iE "/^[# ]*android.accept_sdk_license[ =]+.*/d" buildozer.spec',
'sed -iE "/^[# ]*android.skip_update[ =]+.*/d" buildozer.spec',
'sed -iE "/^[# ]*p4a.source_dir[ =]+.*/d" buildozer.spec',
'sed -i "s,\\[app\\],[app]\\n\\nandroid.sdk_path = $$SDK$$\\nandroid.ndk_path = $$NDK$$\\np4a.source_dir = $$python-for-android$$\\nandroid.accept_sdk_license = False\\nandroid.skip_update = True\\nandroid.ant_path = /usr/bin/ant\\n," buildozer.spec',
'pip3 install --user --upgrade $$buildozer$$ Cython==0.28.6',
]
build.build = [
'PATH="$HOME/.local/bin:$PATH" buildozer android release',
]
return build.get('versionName'), versionCode, app.get('id')
def main():
global config, options
# Parse command line...
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("-u", "--url", default=None,
help=_("Project URL to import from."))
parser.add_argument("-s", "--subdir", default=None,
help=_("Path to main Android project subdirectory, if not in root."))
parser.add_argument("-c", "--categories", default=None,
help=_("Comma separated list of categories."))
parser.add_argument("-l", "--license", default=None,
help=_("Overall license of the project."))
parser.add_argument("--omit-disable", action="store_true", default=False,
help=_("Do not add 'disable:' to the generated build entries"))
parser.add_argument("--rev", default=None,
help=_("Allows a different revision (or git branch) to be specified for the initial import"))
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
metadata.warnings_action = options.W
config = common.read_config(options)
apps = metadata.read_metadata()
app = None
tmp_importer_dir = None
local_metadata_files = common.get_local_metadata_files()
if local_metadata_files != []:
raise FDroidException(_("This repo already has local metadata: %s") % local_metadata_files[0])
build = metadata.Build()
if options.url is None and os.path.isdir('.git'):
app = metadata.App()
app.AutoName = os.path.basename(os.getcwd())
app.RepoType = 'git'
if os.path.exists('build.gradle') or os.path.exists('build.gradle.kts'):
build.gradle = ['yes']
git_repo = git.repo.Repo(os.getcwd())
for remote in git.Remote.iter_items(git_repo):
if remote.name == 'origin':
url = git_repo.remotes.origin.url
if url.startswith('https://git'): # github, gitlab
app.SourceCode = url.rstrip('.git')
app.Repo = url
break
write_local_file = True
elif options.url:
app = common.get_app_from_url(options.url)
tmp_importer_dir = clone_to_tmp_dir(app)
git_repo = git.repo.Repo(tmp_importer_dir)
if not options.omit_disable:
build.disable = 'Generated by import.py - check/set version fields and commit id'
write_local_file = False
else:
raise FDroidException("Specify project url.")
app.UpdateCheckMode = 'Tags'
build.commit = common.get_head_commit_id(git_repo)
versionName, versionCode, appid = check_for_kivy_buildozer(tmp_importer_dir, app, build)
# Extract some information...
paths = common.get_all_gradle_and_manifests(tmp_importer_dir)
subdir = common.get_gradle_subdir(tmp_importer_dir, paths)
if paths:
versionName, versionCode, appid = common.parse_androidmanifests(paths, app)
if not appid:
raise FDroidException(_("Couldn't find Application ID"))
if not versionName:
logging.warning(_('Could not find latest version name'))
if not versionCode:
logging.warning(_('Could not find latest version code'))
elif not appid:
raise FDroidException(_("No gradle project could be found. Specify --subdir?"))
# Make sure it's actually new...
if appid in apps:
raise FDroidException(_('Package "{appid}" already exists').format(appid=appid))
# Create a build line...
build.versionName = versionName or 'Unknown'
build.versionCode = versionCode or '0' # TODO heinous but this is still a str
if options.subdir:
build.subdir = options.subdir
build.gradle = ['yes']
elif subdir:
build.subdir = subdir
build.gradle = ['yes']
if options.license:
app.License = options.license
if options.categories:
app.Categories = options.categories.split(',')
if os.path.exists(os.path.join(subdir, 'jni')):
build.buildjni = ['yes']
if os.path.exists(os.path.join(subdir, 'build.gradle')) \
or os.path.exists(os.path.join(subdir, 'build.gradle')):
build.gradle = ['yes']
package_json = os.path.join(tmp_importer_dir, 'package.json') # react-native
pubspec_yaml = os.path.join(tmp_importer_dir, 'pubspec.yaml') # flutter
if os.path.exists(package_json):
build.sudo = ['apt-get update || apt-get update', 'apt-get install -t stretch-backports npm', 'npm install -g react-native-cli']
build.init = ['npm install']
with open(package_json) as fp:
data = json.load(fp)
app.AutoName = data.get('name', app.AutoName)
app.License = data.get('license', app.License)
app.Description = data.get('description', app.Description)
app.WebSite = data.get('homepage', app.WebSite)
app_json = os.path.join(tmp_importer_dir, 'app.json')
if os.path.exists(app_json):
with open(app_json) as fp:
data = json.load(fp)
app.AutoName = data.get('name', app.AutoName)
if os.path.exists(pubspec_yaml):
with open(pubspec_yaml) as fp:
data = yaml.load(fp, Loader=SafeLoader)
app.AutoName = data.get('name', app.AutoName)
app.License = data.get('license', app.License)
app.Description = data.get('description', app.Description)
build.srclibs = ['flutter@stable']
build.output = 'build/app/outputs/apk/release/app-release.apk'
build.build = [
'$$flutter$$/bin/flutter config --no-analytics',
'$$flutter$$/bin/flutter packages pub get',
'$$flutter$$/bin/flutter build apk',
]
git_modules = os.path.join(tmp_importer_dir, '.gitmodules')
if os.path.exists(git_modules):
build.submodules = True
metadata.post_metadata_parse(app)
app.builds.append(build)
if write_local_file:
metadata.write_metadata('.fdroid.yml', app)
else:
# Keep the repo directory to save bandwidth...
if not os.path.exists('build'):
os.mkdir('build')
build_dir = os.path.join('build', appid)
if os.path.exists(build_dir):
logging.warning(_('{path} already exists, ignoring import results!')
.format(path=build_dir))
sys.exit(1)
elif tmp_importer_dir is not None:
shutil.move(tmp_importer_dir, build_dir)
with open('build/.fdroidvcs-' + appid, 'w') as f:
f.write(app.RepoType + ' ' + app.Repo)
metadatapath = os.path.join('metadata', appid + '.yml')
metadata.write_metadata(metadatapath, app)
logging.info("Wrote " + metadatapath)
if __name__ == "__main__":
main()

View file

@ -0,0 +1,470 @@
#!/usr/bin/env python3
"""Extract application metadata from a source repository."""
#
# import_subcommand.py - part of the FDroid server tools
# Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com
# Copyright (C) 2013-2014 Daniel Martí <mvdan@mvdan.cc>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import logging
import os
import re
import shutil
import stat
import sys
import urllib
from argparse import ArgumentParser
from pathlib import Path
from typing import Optional
import git
import yaml
try:
from yaml import CSafeLoader as SafeLoader
except ImportError:
from yaml import SafeLoader
from . import _, common, metadata
from .exception import FDroidException
config = None
SETTINGS_GRADLE_REGEX = re.compile(r'settings\.gradle(?:\.kts)?')
GRADLE_SUBPROJECT_REGEX = re.compile(r'''['"]:?([^'"]+)['"]''')
APPLICATION_ID_REGEX = re.compile(r'''\s*applicationId\s=?\s?['"].*['"]''')
def get_all_gradle_and_manifests(build_dir):
paths = []
for root, dirs, files in os.walk(build_dir):
for f in sorted(files):
if f == 'AndroidManifest.xml' or f.endswith(('.gradle', '.gradle.kts')):
full = Path(root) / f
paths.append(full)
return paths
def get_gradle_subdir(build_dir, paths):
"""Get the subdir where the gradle build is based."""
first_gradle_dir = None
for path in paths:
if not first_gradle_dir:
first_gradle_dir = path.parent.relative_to(build_dir)
if path.exists() and SETTINGS_GRADLE_REGEX.match(path.name):
for m in GRADLE_SUBPROJECT_REGEX.finditer(path.read_text(encoding='utf-8')):
for f in (path.parent / m.group(1)).glob('build.gradle*'):
with f.open(encoding='utf-8') as fp:
for line in fp:
if common.ANDROID_PLUGIN_REGEX.match(
line
) or APPLICATION_ID_REGEX.match(line):
return f.parent.relative_to(build_dir)
if first_gradle_dir and first_gradle_dir != Path('.'):
return first_gradle_dir
def handle_retree_error_on_windows(function, path, excinfo):
"""Python can't remove a readonly file on Windows so chmod first."""
if function in (os.unlink, os.rmdir, os.remove) and excinfo[0] == PermissionError:
os.chmod(path, stat.S_IWRITE)
function(path)
def clone_to_tmp_dir(app: metadata.App, rev=None) -> Path:
"""Clone the source repository of an app to a temporary directory for further processing.
Parameters
----------
app
The App instance to clone the source of.
Returns
-------
tmp_dir
The (temporary) directory the apps source has been cloned into.
"""
tmp_dir = Path('tmp')
tmp_dir.mkdir(exist_ok=True)
tmp_dir = tmp_dir / 'importer'
if tmp_dir.exists():
shutil.rmtree(str(tmp_dir), onerror=handle_retree_error_on_windows)
vcs = common.getvcs(app.RepoType, app.Repo, tmp_dir)
vcs.gotorevision(rev)
return tmp_dir
def getrepofrompage(url: str) -> tuple[Optional[str], str]:
"""Get the repo type and address from the given web page.
The page is scanned in a rather naive manner for 'git clone xxxx',
'hg clone xxxx', etc, and when one of these is found it's assumed
that's the information we want. Returns repotype, address, or
None, reason
Parameters
----------
url
The url to look for repository information at.
Returns
-------
repotype_or_none
The found repository type or None if an error occured.
address_or_reason
The address to the found repository or the reason if an error occured.
"""
if not url.startswith('http'):
return (None, _('{url} does not start with "http"!'.format(url=url)))
req = urllib.request.urlopen(url) # nosec B310 non-http URLs are filtered out
if req.getcode() != 200:
return (None, 'Unable to get ' + url + ' - return code ' + str(req.getcode()))
page = req.read().decode(req.headers.get_content_charset())
# Works for BitBucket
m = re.search('data-fetch-url="(.*)"', page)
if m is not None:
repo = m.group(1)
if repo.endswith('.git'):
return ('git', repo)
return ('hg', repo)
# Works for BitBucket (obsolete)
index = page.find('hg clone')
if index != -1:
repotype = 'hg'
repo = page[index + 9 :]
index = repo.find('<')
if index == -1:
return (None, _("Error while getting repo address"))
repo = repo[:index]
repo = repo.split('"')[0]
return (repotype, repo)
# Works for BitBucket (obsolete)
index = page.find('git clone')
if index != -1:
repotype = 'git'
repo = page[index + 10 :]
index = repo.find('<')
if index == -1:
return (None, _("Error while getting repo address"))
repo = repo[:index]
repo = repo.split('"')[0]
return (repotype, repo)
return (None, _("No information found.") + page)
def get_app_from_url(url: str) -> metadata.App:
"""Guess basic app metadata from the URL.
The URL must include a network hostname, unless it is an lp:,
file:, or git/ssh URL. This throws ValueError on bad URLs to
match urlparse().
Parameters
----------
url
The URL to look to look for app metadata at.
Returns
-------
app
App instance with the found metadata.
Raises
------
:exc:`~fdroidserver.exception.FDroidException`
If the VCS type could not be determined.
:exc:`ValueError`
If the URL is invalid.
"""
parsed = urllib.parse.urlparse(url)
invalid_url = False
if not parsed.scheme or not parsed.path:
invalid_url = True
app = metadata.App()
app.Repo = url
if url.startswith('git://') or url.startswith('git@'):
app.RepoType = 'git'
elif parsed.netloc == 'github.com':
app.RepoType = 'git'
app.SourceCode = url
app.IssueTracker = url + '/issues'
elif parsed.netloc in ('gitlab.com', 'framagit.org'):
# git can be fussy with gitlab URLs unless they end in .git
if url.endswith('.git'):
url = url[:-4]
app.Repo = url + '.git'
app.RepoType = 'git'
app.SourceCode = url
app.IssueTracker = url + '/issues'
elif parsed.netloc == 'notabug.org':
if url.endswith('.git'):
url = url[:-4]
app.Repo = url + '.git'
app.RepoType = 'git'
app.SourceCode = url
app.IssueTracker = url + '/issues'
elif parsed.netloc == 'bitbucket.org':
if url.endswith('/'):
url = url[:-1]
app.SourceCode = url + '/src'
app.IssueTracker = url + '/issues'
# Figure out the repo type and adddress...
app.RepoType, app.Repo = getrepofrompage(url)
elif parsed.netloc == 'codeberg.org':
app.RepoType = 'git'
app.SourceCode = url
app.IssueTracker = url + '/issues'
elif url.startswith('https://') and url.endswith('.git'):
app.RepoType = 'git'
if not parsed.netloc and parsed.scheme in ('git', 'http', 'https', 'ssh'):
invalid_url = True
if invalid_url:
raise ValueError(_('"{url}" is not a valid URL!'.format(url=url)))
if not app.RepoType:
raise FDroidException("Unable to determine vcs type. " + app.Repo)
return app
def main():
"""Extract app metadata and write it to a file.
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
Raises
------
:exc:`~fdroidserver.exception.FDroidException`
If the repository already has local metadata, no URL is specified and
the current directory is not a Git repository, no application ID could
be found, no Gradle project could be found or there is already metadata
for the found application ID.
"""
global config
# Parse command line...
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("-u", "--url", help=_("Project URL to import from."))
parser.add_argument(
"-s",
"--subdir",
help=_("Path to main Android project subdirectory, if not in root."),
)
parser.add_argument(
"-c",
"--categories",
help=_("Comma separated list of categories."),
)
parser.add_argument("-l", "--license", help=_("Overall license of the project."))
parser.add_argument(
"--omit-disable",
action="store_true",
help=_("Do not add 'disable:' to the generated build entries"),
)
parser.add_argument(
"--rev",
help=_(
"Allows a different revision (or git branch) to be specified for the initial import"
),
)
metadata.add_metadata_arguments(parser)
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config()
apps = metadata.read_metadata()
app = None
tmp_importer_dir = None
local_metadata_files = common.get_local_metadata_files()
if local_metadata_files:
raise FDroidException(
_("This repo already has local metadata: %s") % local_metadata_files[0]
)
build = metadata.Build()
app = metadata.App()
if options.url is None and Path('.git').is_dir():
app.RepoType = 'git'
tmp_importer_dir = Path.cwd()
git_repo = git.Repo(tmp_importer_dir)
for remote in git.Remote.iter_items(git_repo):
if remote.name == 'origin':
url = git_repo.remotes.origin.url
app = get_app_from_url(url)
break
write_local_file = True
elif options.url:
app = get_app_from_url(options.url)
tmp_importer_dir = clone_to_tmp_dir(app, options.rev)
git_repo = git.Repo(tmp_importer_dir)
if not options.omit_disable:
build.disable = (
'Generated by `fdroid import` - check version fields and commitid'
)
write_local_file = False
else:
raise FDroidException("Specify project url.")
app.AutoUpdateMode = 'Version'
app.UpdateCheckMode = 'Tags'
build.commit = common.get_head_commit_id(tmp_importer_dir)
# Extract some information...
paths = get_all_gradle_and_manifests(tmp_importer_dir)
gradle_subdir = get_gradle_subdir(tmp_importer_dir, paths)
if paths:
versionName, versionCode, appid = common.parse_androidmanifests(paths, app)
if not appid:
raise FDroidException(_("Couldn't find Application ID"))
if not versionName:
logging.warning(_('Could not find latest versionName'))
if not versionCode:
logging.warning(_('Could not find latest versionCode'))
else:
raise FDroidException(_("No gradle project could be found. Specify --subdir?"))
# Make sure it's actually new...
if appid in apps:
raise FDroidException(_('Package "{appid}" already exists').format(appid=appid))
# Create a build line...
build.versionName = versionName or 'Unknown'
app.CurrentVersion = build.versionName
build.versionCode = versionCode or 0
app.CurrentVersionCode = build.versionCode
if options.subdir:
build.subdir = options.subdir
elif gradle_subdir:
build.subdir = gradle_subdir.as_posix()
# subdir might be None
subdir = Path(tmp_importer_dir / build.subdir) if build.subdir else tmp_importer_dir
if options.license:
app.License = options.license
if options.categories:
app.Categories = options.categories.split(',')
if (subdir / 'jni').exists():
build.buildjni = ['yes']
if (subdir / 'build.gradle').exists() or (subdir / 'build.gradle.kts').exists():
build.gradle = ['yes']
app.AutoName = common.fetch_real_name(subdir, build.gradle)
package_json = tmp_importer_dir / 'package.json' # react-native
pubspec_yaml = tmp_importer_dir / 'pubspec.yaml' # flutter
if package_json.exists():
build.sudo = [
'sysctl fs.inotify.max_user_watches=524288 || true',
'apt-get update',
'apt-get install -y npm',
]
build.init = ['npm install --build-from-source']
with package_json.open() as fp:
data = json.load(fp)
app.AutoName = app.AutoName or data.get('name')
app.License = data.get('license', app.License)
app.Description = data.get('description', app.Description)
app.WebSite = data.get('homepage', app.WebSite)
app_json = tmp_importer_dir / 'app.json'
build.scanignore = ['android/build.gradle']
build.scandelete = ['node_modules']
if app_json.exists():
with app_json.open() as fp:
data = json.load(fp)
app.AutoName = app.AutoName or data.get('name')
if pubspec_yaml.exists():
with pubspec_yaml.open() as fp:
data = yaml.load(fp, Loader=SafeLoader)
app.AutoName = app.AutoName or data.get('name')
app.License = data.get('license', app.License)
app.Description = data.get('description', app.Description)
app.UpdateCheckData = 'pubspec.yaml|version:\\s.+\\+(\\d+)|.|version:\\s(.+)\\+'
build.srclibs = ['flutter@stable']
build.output = 'build/app/outputs/flutter-apk/app-release.apk'
build.subdir = None
build.gradle = None
build.prebuild = [
'export PUB_CACHE=$(pwd)/.pub-cache',
'$$flutter$$/bin/flutter config --no-analytics',
'$$flutter$$/bin/flutter packages pub get',
]
build.scandelete = [
'.pub-cache',
]
build.build = [
'export PUB_CACHE=$(pwd)/.pub-cache',
'$$flutter$$/bin/flutter build apk',
]
git_modules = tmp_importer_dir / '.gitmodules'
if git_modules.exists():
build.submodules = True
metadata.post_parse_yaml_metadata(app)
app['Builds'].append(build)
if write_local_file:
metadata.write_metadata(Path('.fdroid.yml'), app)
else:
# Keep the repo directory to save bandwidth...
Path('build').mkdir(exist_ok=True)
build_dir = Path('build') / appid
if build_dir.exists():
logging.warning(
_('{path} already exists, ignoring import results!').format(
path=build_dir
)
)
sys.exit(1)
elif tmp_importer_dir:
# For Windows: Close the repo or a git.exe instance holds handles to repo
try:
git_repo.close()
except AttributeError: # Debian/stretch's version does not have close()
pass
shutil.move(tmp_importer_dir, build_dir)
Path('build/.fdroidvcs-' + appid).write_text(app.RepoType + ' ' + app.Repo)
metadatapath = Path('metadata') / (appid + '.yml')
metadata.write_metadata(metadatapath, app)
logging.info("Wrote " + str(metadatapath))
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load diff

View file

@ -19,54 +19,70 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import glob
import logging
import os
import re
import shutil
import socket
import sys
from argparse import ArgumentParser
import logging
from . import _
from . import common
from . import _, common
from .exception import FDroidException
config = {}
options = None
def disable_in_config(key, value):
'''write a key/value to the local config.yml, then comment it out'''
"""Write a key/value to the local config.yml, then comment it out."""
import yaml
with open('config.yml') as f:
data = f.read()
with open(common.CONFIG_FILE) as fp:
data = fp.read()
pattern = r'\n[\s#]*' + key + r':.*'
repl = '\n#' + yaml.dump({key: value}, default_flow_style=False)
data = re.sub(pattern, repl, data)
with open('config.yml', 'w') as f:
f.writelines(data)
with open(common.CONFIG_FILE, 'w') as fp:
fp.writelines(data)
def main():
global options, config
global config
# Parse command line...
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("-d", "--distinguished-name", default=None,
help=_("X.509 'Distinguished Name' used when generating keys"))
parser.add_argument("--keystore", default=None,
help=_("Path to the keystore for the repo signing key"))
parser.add_argument("--repo-keyalias", default=None,
help=_("Alias of the repo signing key in the keystore"))
parser.add_argument("--android-home", default=None,
help=_("Path to the Android SDK (sometimes set in ANDROID_HOME)"))
parser.add_argument("--no-prompt", action="store_true", default=False,
help=_("Do not prompt for Android SDK path, just fail"))
options = parser.parse_args()
parser.add_argument(
"-d",
"--distinguished-name",
default=None,
help=_("X.509 'Distinguished Name' used when generating keys"),
)
parser.add_argument(
"--keystore",
default=None,
help=_("Path to the keystore for the repo signing key"),
)
parser.add_argument(
"--repo-keyalias",
default=None,
help=_("Alias of the repo signing key in the keystore"),
)
parser.add_argument(
"--android-home",
default=None,
help=_("Path to the Android SDK (sometimes set in ANDROID_HOME)"),
)
parser.add_argument(
"--no-prompt",
action="store_true",
default=False,
help=_("Do not prompt for Android SDK path, just fail"),
)
options = common.parse_args(parser)
common.set_console_logging(options.verbose, options.color)
aapt = None
fdroiddir = os.getcwd()
test_config = dict()
examplesdir = common.get_examples_dir()
@ -81,9 +97,10 @@ def main():
# exist, prompt the user using platform-specific default
# and if the user leaves it blank, ignore and move on.
default_sdk_path = ''
if sys.platform == 'win32' or sys.platform == 'cygwin':
p = os.path.join(os.getenv('USERPROFILE'),
'AppData', 'Local', 'Android', 'android-sdk')
if sys.platform in ('win32', 'cygwin'):
p = os.path.join(
os.getenv('USERPROFILE'), 'AppData', 'Local', 'Android', 'android-sdk'
)
elif sys.platform == 'darwin':
# on OSX, Homebrew is common and has an easy path to detect
p = '/usr/local/opt/android-sdk'
@ -97,10 +114,13 @@ def main():
test_config['sdk_path'] = default_sdk_path
if not common.test_sdk_exists(test_config):
del(test_config['sdk_path'])
del test_config['sdk_path']
while not options.no_prompt:
try:
s = input(_('Enter the path to the Android SDK (%s) here:\n> ') % default_sdk_path)
s = input(
_('Enter the path to the Android SDK (%s) here:\n> ')
% default_sdk_path
)
except KeyboardInterrupt:
print('')
sys.exit(1)
@ -113,16 +133,28 @@ def main():
default_sdk_path = ''
if test_config.get('sdk_path') and not common.test_sdk_exists(test_config):
raise FDroidException(_("Android SDK not found at {path}!")
.format(path=test_config['sdk_path']))
raise FDroidException(
_("Android SDK not found at {path}!").format(path=test_config['sdk_path'])
)
if not os.path.exists('config.yml') and not os.path.exists('config.py'):
if not os.path.exists(common.CONFIG_FILE):
# 'metadata' and 'tmp' are created in fdroid
if not os.path.exists('repo'):
os.mkdir('repo')
shutil.copy(os.path.join(examplesdir, 'fdroid-icon.png'), fdroiddir)
shutil.copyfile(os.path.join(examplesdir, 'config.yml'), 'config.yml')
os.chmod('config.yml', 0o0600)
example_config_yml = os.path.join(examplesdir, common.CONFIG_FILE)
if os.path.exists(example_config_yml):
shutil.copyfile(example_config_yml, common.CONFIG_FILE)
else:
from pkg_resources import get_distribution
versionstr = get_distribution('fdroidserver').version
if not versionstr:
versionstr = 'master'
with open(common.CONFIG_FILE, 'w') as fp:
fp.write('# see https://gitlab.com/fdroid/fdroidserver/blob/')
fp.write(versionstr)
fp.write(f'/examples/{common.CONFIG_FILE}\n')
os.chmod(common.CONFIG_FILE, 0o0600)
# If android_home is None, test_config['sdk_path'] will be used and
# "$ANDROID_HOME" may be used if the env var is set up correctly.
# If android_home is not None, the path given from the command line
@ -130,16 +162,14 @@ def main():
if 'sdk_path' in test_config:
common.write_to_config(test_config, 'sdk_path', options.android_home)
else:
logging.warning('Looks like this is already an F-Droid repo, cowardly refusing to overwrite it...')
logging.warning(
'Looks like this is already an F-Droid repo, cowardly refusing to overwrite it...'
)
logging.info('Try running `fdroid init` in an empty directory.')
raise FDroidException('Repository already exists.')
# now that we have a local config.yml, read configuration...
config = common.read_config(options)
# enable apksigner by default so v2/v3 APK signatures validate
if common.find_apksigner() is not None:
test_config['apksigner'] = common.find_apksigner()
config = common.read_config()
# the NDK is optional and there may be multiple versions of it, so it's
# left for the user to configure
@ -158,8 +188,9 @@ def main():
else:
keystore = os.path.abspath(options.keystore)
if not os.path.exists(keystore):
logging.info('"' + keystore
+ '" does not exist, creating a new keystore there.')
logging.info(
'"' + keystore + '" does not exist, creating a new keystore there.'
)
common.write_to_config(test_config, 'keystore', keystore)
repo_keyalias = None
keydname = None
@ -170,12 +201,19 @@ def main():
keydname = options.distinguished_name
common.write_to_config(test_config, 'keydname', keydname)
if keystore == 'NONE': # we're using a smartcard
common.write_to_config(test_config, 'repo_keyalias', '1') # seems to be the default
common.write_to_config(
test_config, 'repo_keyalias', '1'
) # seems to be the default
disable_in_config('keypass', 'never used with smartcard')
common.write_to_config(test_config, 'smartcardoptions',
('-storetype PKCS11 '
+ '-providerClass sun.security.pkcs11.SunPKCS11 '
+ '-providerArg opensc-fdroid.cfg'))
common.write_to_config(
test_config,
'smartcardoptions',
(
'-storetype PKCS11 '
+ '-providerClass sun.security.pkcs11.SunPKCS11 '
+ '-providerArg opensc-fdroid.cfg'
),
)
# find opensc-pkcs11.so
if not os.path.exists('opensc-fdroid.cfg'):
if os.path.exists('/usr/lib/opensc-pkcs11.so'):
@ -183,35 +221,49 @@ def main():
elif os.path.exists('/usr/lib64/opensc-pkcs11.so'):
opensc_so = '/usr/lib64/opensc-pkcs11.so'
else:
files = glob.glob('/usr/lib/' + os.uname()[4] + '-*-gnu/opensc-pkcs11.so')
files = glob.glob(
'/usr/lib/' + os.uname()[4] + '-*-gnu/opensc-pkcs11.so'
)
if len(files) > 0:
opensc_so = files[0]
else:
opensc_so = '/usr/lib/opensc-pkcs11.so'
logging.warning('No OpenSC PKCS#11 module found, '
+ 'install OpenSC then edit "opensc-fdroid.cfg"!')
logging.warning(
'No OpenSC PKCS#11 module found, '
+ 'install OpenSC then edit "opensc-fdroid.cfg"!'
)
with open('opensc-fdroid.cfg', 'w') as f:
f.write('name = OpenSC\nlibrary = ')
f.write(opensc_so)
f.write('\n')
logging.info("Repo setup using a smartcard HSM. Please edit keystorepass and repo_keyalias in config.yml.")
logging.info("If you want to generate a new repo signing key in the HSM you can do that with 'fdroid update "
"--create-key'.")
logging.info(
"Repo setup using a smartcard HSM. Please edit keystorepass and repo_keyalias in config.yml."
)
logging.info(
"If you want to generate a new repo signing key in the HSM you can do that with 'fdroid update "
"--create-key'."
)
elif os.path.exists(keystore):
to_set = ['keystorepass', 'keypass', 'repo_keyalias', 'keydname']
if repo_keyalias:
to_set.remove('repo_keyalias')
if keydname:
to_set.remove('keydname')
logging.warning('\n' + _('Using existing keystore "{path}"').format(path=keystore)
+ '\n' + _('Now set these in config.yml:') + ' '
+ ', '.join(to_set) + '\n')
logging.warning(
'\n'
+ _('Using existing keystore "{path}"').format(path=keystore)
+ '\n'
+ _('Now set these in config.yml:')
+ ' '
+ ', '.join(to_set)
+ '\n'
)
else:
password = common.genpassword()
c = dict(test_config)
c['keystorepass'] = password
c['keypass'] = password
c['repo_keyalias'] = socket.getfqdn()
c['repo_keyalias'] = repo_keyalias or socket.getfqdn()
c['keydname'] = 'CN=' + c['repo_keyalias'] + ', OU=F-Droid'
common.write_to_config(test_config, 'keystorepass', password)
common.write_to_config(test_config, 'keypass', password)
@ -222,17 +274,25 @@ def main():
msg = '\n'
msg += _('Built repo based in "%s" with this config:') % fdroiddir
msg += '\n\n Android SDK:\t\t\t' + config['sdk_path']
if aapt:
msg += '\n Android SDK Build Tools:\t' + os.path.dirname(aapt)
msg += '\n Android NDK r12b (optional):\t$ANDROID_NDK'
msg += '\n ' + _('Keystore for signing key:\t') + keystore
if repo_keyalias is not None:
msg += '\n Alias for key in store:\t' + repo_keyalias
msg += '\n\n' + '''To complete the setup, add your APKs to "%s"
msg += '\n\n'
msg += (
_(
"""To complete the setup, add your APKs to "%s"
then run "fdroid update -c; fdroid update". You might also want to edit
"config.yml" to set the URL, repo name, and more. You should also set up
a signing key (a temporary one might have been automatically generated).
For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo
and https://f-droid.org/docs/Signing_Process''' % os.path.join(fdroiddir, 'repo')
logging.info(msg)
and https://f-droid.org/docs/Signing_Process"""
)
% os.path.join(fdroiddir, 'repo')
)
if not options.quiet:
# normally, INFO is only shown with --verbose, but show this unless --quiet
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info(msg)
logging.shutdown()

View file

@ -17,62 +17,372 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import os
import glob
from argparse import ArgumentParser
import locale
import logging
import os
import sys
import termios
import tty
from argparse import ArgumentParser, BooleanOptionalAction
from pathlib import Path
from urllib.parse import urlencode, urlparse, urlunparse
from . import _
from . import common
from .common import SdkToolsPopen
import defusedxml.ElementTree as XMLElementTree
from . import _, common, github, index, net
from .exception import FDroidException
options = None
config = None
DEFAULT_IPFS_GATEWAYS = ("https://gateway.ipfs.io/ipfs/",)
MAVEN_CENTRAL_MIRRORS = [
{
"url": "https://repo1.maven.org/maven2/",
"dnsA": ["199.232.16.209"],
"worksWithoutSNI": True,
},
{
"url": "https://repo.maven.apache.org/maven2/",
"dnsA": ["199.232.16.215"],
"worksWithoutSNI": True,
},
{
"url": "https://maven-central-asia.storage-download.googleapis.com/maven2/",
},
{
"url": "https://maven-central-eu.storage-download.googleapis.com/maven2/",
},
{
"url": "https://maven-central.storage-download.googleapis.com/maven2/",
},
]
# pylint: disable=unused-argument
def download_apk(appid='org.fdroid.fdroid', privacy_mode=False):
"""Download an APK from F-Droid via the first mirror that works."""
url = urlunparse(
urlparse(common.FDROIDORG_MIRRORS[0]['url'])._replace(
query=urlencode({'fingerprint': common.FDROIDORG_FINGERPRINT})
)
)
data, _ignored = index.download_repo_index_v2(url)
app = data.get('packages', dict()).get(appid)
preferred_version = None
for version in app['versions'].values():
if not preferred_version:
# if all else fails, use the first one
preferred_version = version
if not version.get('releaseChannels'):
# prefer APK in default release channel
preferred_version = version
break
mirrors = common.append_filename_to_mirrors(
preferred_version['file']['name'][1:], common.FDROIDORG_MIRRORS
)
ipfsCIDv1 = preferred_version['file'].get('ipfsCIDv1')
if ipfsCIDv1:
for gateway in DEFAULT_IPFS_GATEWAYS:
mirrors.append({'url': os.path.join(gateway, ipfsCIDv1)})
f = net.download_using_mirrors(mirrors)
if f and os.path.exists(f):
versionCode = preferred_version['manifest']['versionCode']
f = Path(f)
return str(f.rename(f.with_stem(f'{appid}_{versionCode}')).resolve())
def download_fdroid_apk(privacy_mode=False): # pylint: disable=unused-argument
"""Directly download the current F-Droid APK and verify it.
This downloads the "download button" link, which is the version
that is best tested for new installs.
"""
mirror = common.FDROIDORG_MIRRORS[0]
mirror['url'] = urlunparse(urlparse(mirror['url'])._replace(path='F-Droid.apk'))
return net.download_using_mirrors([mirror])
def download_fdroid_apk_from_github(privacy_mode=False):
"""Download F-Droid.apk from F-Droid's GitHub Releases."""
if common.config and not privacy_mode:
token = common.config.get('github_token')
else:
token = None
gh = github.GithubApi(token, 'https://github.com/f-droid/fdroidclient')
latest_apk = gh.get_latest_apk()
filename = os.path.basename(latest_apk)
return net.download_file(latest_apk, os.path.join(common.get_cachedir(), filename))
def download_fdroid_apk_from_ipns(privacy_mode=False):
"""Download the F-Droid APK from an IPNS repo."""
cid = 'k51qzi5uqu5dl4hbcksbdmplanu9n4hivnqsupqe6vzve1pdbeh418ssptldd3'
mirrors = [
{"url": f"https://ipfs.io/ipns/{cid}/F-Droid.apk"},
]
if not privacy_mode:
mirrors.append({"url": f"https://{cid}.ipns.dweb.link/F-Droid.apk"})
return net.download_using_mirrors(mirrors)
def download_fdroid_apk_from_maven(privacy_mode=False):
"""Download F-Droid.apk from Maven Central and official mirrors."""
path = 'org/fdroid/fdroid/F-Droid'
if privacy_mode:
mirrors = MAVEN_CENTRAL_MIRRORS[:2] # skip the Google servers
else:
mirrors = MAVEN_CENTRAL_MIRRORS
metadata = net.download_using_mirrors(
common.append_filename_to_mirrors(
os.path.join(path, 'maven-metadata.xml'), mirrors
)
)
version = XMLElementTree.parse(metadata).getroot().findall('*.//latest')[0].text
mirrors = common.append_filename_to_mirrors(
os.path.join(path, version, f'F-Droid-{version}.apk'), mirrors
)
return net.download_using_mirrors(mirrors)
def install_fdroid_apk(privacy_mode=False):
"""Download and install F-Droid.apk using all tricks we can muster.
By default, this first tries to fetch the official install APK
which is offered when someone clicks the "download" button on
https://f-droid.org/. Then it will try all the mirrors and
methods until it gets something successful, or runs out of
options.
There is privacy_mode which tries to download from mirrors first,
so that this downloads from a mirror that has many different kinds
of files available, thereby breaking the clear link to F-Droid.
Returns
-------
None for success or the error message.
"""
country_code = locale.getlocale()[0].split('_')[-1]
if privacy_mode is None and country_code in ('CN', 'HK', 'IR', 'TM'):
logging.warning(
_('Privacy mode was enabled based on your locale ({country_code}).').format(
country_code=country_code
)
)
privacy_mode = True
if privacy_mode or not (common.config and common.config.get('jarsigner')):
download_methods = [
download_fdroid_apk_from_maven,
download_fdroid_apk_from_ipns,
download_fdroid_apk_from_github,
]
else:
download_methods = [
download_apk,
download_fdroid_apk_from_maven,
download_fdroid_apk_from_github,
download_fdroid_apk_from_ipns,
download_fdroid_apk,
]
for method in download_methods:
try:
f = method(privacy_mode=privacy_mode)
break
except Exception as e:
logging.info(e)
else:
return _('F-Droid.apk could not be downloaded from any known source!')
fingerprint = common.apk_signer_fingerprint(f)
if fingerprint.upper() != common.FDROIDORG_FINGERPRINT:
return _('{path} has the wrong fingerprint ({fingerprint})!').format(
path=f, fingerprint=fingerprint
)
install_apk(f)
def install_apk(f):
if common.config and common.config.get('apksigner'):
# TODO this should always verify, but that requires APK sig verification in Python #94
logging.info(_('Verifying package {path} with apksigner.').format(path=f))
common.verify_apk_signature(f)
if common.config and common.config.get('adb'):
if devices():
install_apks_to_devices([f])
os.remove(f)
else:
os.remove(f)
return _('No devices found for `adb install`! Please plug one in.')
def devices():
p = SdkToolsPopen(['adb', "devices"])
"""Get the list of device serials for use with adb commands."""
p = common.SdkToolsPopen(['adb', "devices"])
if p.returncode != 0:
raise FDroidException("An error occured when finding devices: %s" % p.output)
lines = [line for line in p.output.splitlines() if not line.startswith('* ')]
if len(lines) < 3:
return []
lines = lines[1:-1]
return [line.split()[0] for line in lines]
serials = list()
for line in p.output.splitlines():
columns = line.strip().split("\t", maxsplit=1)
if len(columns) == 2:
serial, status = columns
if status == 'device':
serials.append(serial)
else:
d = {'serial': serial, 'status': status}
logging.warning(_('adb reports {serial} is "{status}"!'.format(**d)))
return serials
def install_apks_to_devices(apks):
"""Install the list of APKs to all Android devices reported by `adb devices`."""
for apk in apks:
# Get device list each time to avoid device not found errors
devs = devices()
if not devs:
raise FDroidException(_("No attached devices found"))
logging.info(_("Installing %s...") % apk)
for dev in devs:
logging.info(
_("Installing '{apkfilename}' on {dev}...").format(
apkfilename=apk, dev=dev
)
)
p = common.SdkToolsPopen(['adb', "-s", dev, "install", apk])
fail = ""
for line in p.output.splitlines():
if line.startswith("Failure"):
fail = line[9:-1]
if not fail:
continue
if fail == "INSTALL_FAILED_ALREADY_EXISTS":
logging.warning(
_('"{apkfilename}" is already installed on {dev}.').format(
apkfilename=apk, dev=dev
)
)
else:
raise FDroidException(
_("Failed to install '{apkfilename}' on {dev}: {error}").format(
apkfilename=apk, dev=dev, error=fail
)
)
def read_char():
"""Read input from the terminal prompt one char at a time."""
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def strtobool(val):
"""Convert a localized string representation of truth to True or False."""
return val.lower() in ('', 'y', 'yes', _('yes'), _('true')) # '' is pressing Enter
def prompt_user(yes, msg):
"""Prompt user for yes/no, supporting Enter and Esc as accepted answers."""
run_install = yes
if yes is None and sys.stdout.isatty():
print(msg, end=' ', flush=True)
answer = ''
while True:
in_char = read_char()
if in_char == '\r': # Enter key
break
if not in_char.isprintable():
sys.exit(1)
print(in_char, end='', flush=True)
answer += in_char
run_install = strtobool(answer)
print()
return run_install
def main():
global options, config
# Parse command line...
parser = ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]")
parser = ArgumentParser(
usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]"
)
common.setup_global_opts(parser)
parser.add_argument("appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"))
parser.add_argument("-a", "--all", action="store_true", default=False,
help=_("Install all signed applications available"))
options = parser.parse_args()
parser.add_argument(
"appid",
nargs='*',
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"),
)
parser.add_argument(
"-a",
"--all",
action="store_true",
default=False,
help=_("Install all signed applications available"),
)
parser.add_argument(
"-p",
"--privacy-mode",
action=BooleanOptionalAction,
default=None,
help=_("Download F-Droid.apk using mirrors that leak less to the network"),
)
parser.add_argument(
"-y",
"--yes",
action="store_true",
default=None,
help=_("Automatic yes to all prompts."),
)
parser.add_argument(
"-n",
"--no",
action="store_false",
dest='yes',
help=_("Automatic no to all prompts."),
)
options = common.parse_args(parser)
common.set_console_logging(options.verbose, options.color)
logging.captureWarnings(True) # for SNIMissingWarning
common.get_config()
if not options.appid and not options.all:
parser.error(_("option %s: If you really want to install all the signed apps, use --all") % "all")
config = common.read_config(options)
run_install = prompt_user(
options.yes,
_('Would you like to download and install F-Droid.apk via adb? (YES/no)'),
)
if run_install:
sys.exit(install_fdroid_apk(options.privacy_mode))
sys.exit(1)
output_dir = 'repo'
if not os.path.isdir(output_dir):
logging.info(_("No signed output directory - nothing to do"))
sys.exit(0)
if (options.appid or options.all) and not os.path.isdir(output_dir):
logging.error(_("No signed output directory - nothing to do"))
run_install = prompt_user(
options.yes,
_('Would you like to download the app(s) from f-droid.org? (YES/no)'),
)
if run_install:
for appid in options.appid:
f = download_apk(appid)
install_apk(f)
sys.exit(install_fdroid_apk(options.privacy_mode))
sys.exit(1)
if options.appid:
vercodes = common.read_pkg_args(options.appid, True)
common.get_metadata_files(vercodes) # only check appids
apks = {appid: None for appid in vercodes}
# Get the signed apk with the highest vercode
# Get the signed APK with the highest vercode
for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk'))):
try:
appid, vercode = common.publishednameinfo(apkfile)
except FDroidException:
@ -85,35 +395,15 @@ def main():
for appid, apk in apks.items():
if not apk:
raise FDroidException(_("No signed apk available for %s") % appid)
raise FDroidException(_("No signed APK available for %s") % appid)
install_apks_to_devices(apks.values())
else:
apks = {common.publishednameinfo(apkfile)[0]: apkfile for apkfile in
sorted(glob.glob(os.path.join(output_dir, '*.apk')))}
for appid, apk in apks.items():
# Get device list each time to avoid device not found errors
devs = devices()
if not devs:
raise FDroidException(_("No attached devices found"))
logging.info(_("Installing %s...") % apk)
for dev in devs:
logging.info(_("Installing '{apkfilename}' on {dev}...").format(apkfilename=apk, dev=dev))
p = SdkToolsPopen(['adb', "-s", dev, "install", apk])
fail = ""
for line in p.output.splitlines():
if line.startswith("Failure"):
fail = line[9:-1]
if not fail:
continue
if fail == "INSTALL_FAILED_ALREADY_EXISTS":
logging.warning(_('"{apkfilename}" is already installed on {dev}.')
.format(apkfilename=apk, dev=dev))
else:
raise FDroidException(_("Failed to install '{apkfilename}' on {dev}: {error}")
.format(apkfilename=apk, dev=dev, error=fail))
elif options.all:
apks = {
common.publishednameinfo(apkfile)[0]: apkfile
for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk')))
}
install_apks_to_devices(apks.values())
logging.info('\n' + _('Finished'))

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,300 @@
# PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
# --------------------------------------------
#
# 1. This LICENSE AGREEMENT is between the Python Software Foundation
# ("PSF"), and the Individual or Organization ("Licensee") accessing and
# otherwise using this software ("Python") in source or binary form and
# its associated documentation.
#
# 2. Subject to the terms and conditions of this License Agreement, PSF hereby
# grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
# analyze, test, perform and/or display publicly, prepare derivative works,
# distribute, and otherwise use Python alone or in any derivative version,
# provided, however, that PSF's License Agreement and PSF's notice of copyright,
# i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation;
# All Rights Reserved" are retained in Python alone or in any derivative version
# prepared by Licensee.
#
# 3. In the event Licensee prepares a derivative work that is based on
# or incorporates Python or any part thereof, and wants to make
# the derivative work available to others as provided herein, then
# Licensee hereby agrees to include in any such work a brief summary of
# the changes made to Python.
#
# 4. PSF is making Python available to Licensee on an "AS IS"
# basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
# IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
# DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
# FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
# INFRINGE ANY THIRD PARTY RIGHTS.
#
# 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
# FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
# A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
# OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
#
# 6. This License Agreement will automatically terminate upon a material
# breach of its terms and conditions.
#
# 7. Nothing in this License Agreement shall be deemed to create any
# relationship of agency, partnership, or joint venture between PSF and
# Licensee. This License Agreement does not grant permission to use PSF
# trademarks or trade name in a trademark sense to endorse or promote
# products or services of Licensee, or any third party.
#
# 8. By copying, installing or otherwise using Python, Licensee
# agrees to be bound by the terms and conditions of this License
# Agreement.
#
# SPDX-License-Identifier: Python-2.0
#
# downloaded from:
# https://github.com/effigies/looseversion/blob/e1a5a176a92dc6825deda4205c1be6d05e9ed352/src/looseversion/__init__.py
"""Provides classes to represent module version numbers (one class for
each style of version numbering). There are currently two such classes
implemented: StrictVersion and LooseVersion.
Every version number class implements the following interface:
* the 'parse' method takes a string and parses it to some internal
representation; if the string is an invalid version number,
'parse' raises a ValueError exception
* the class constructor takes an optional string argument which,
if supplied, is passed to 'parse'
* __str__ reconstructs the string that was passed to 'parse' (or
an equivalent string -- ie. one that will generate an equivalent
version number instance)
* __repr__ generates Python code to recreate the version number instance
* _cmp compares the current instance with either another instance
of the same class or a string (which will be parsed to an instance
of the same class, thus must follow the same rules)
"""
import re
import sys
__license__ = "Python License 2.0"
# The rules according to Greg Stein:
# 1) a version number has 1 or more numbers separated by a period or by
# sequences of letters. If only periods, then these are compared
# left-to-right to determine an ordering.
# 2) sequences of letters are part of the tuple for comparison and are
# compared lexicographically
# 3) recognize the numeric components may have leading zeroes
#
# The LooseVersion class below implements these rules: a version number
# string is split up into a tuple of integer and string components, and
# comparison is a simple tuple comparison. This means that version
# numbers behave in a predictable and obvious way, but a way that might
# not necessarily be how people *want* version numbers to behave. There
# wouldn't be a problem if people could stick to purely numeric version
# numbers: just split on period and compare the numbers as tuples.
# However, people insist on putting letters into their version numbers;
# the most common purpose seems to be:
# - indicating a "pre-release" version
# ('alpha', 'beta', 'a', 'b', 'pre', 'p')
# - indicating a post-release patch ('p', 'pl', 'patch')
# but of course this can't cover all version number schemes, and there's
# no way to know what a programmer means without asking him.
#
# The problem is what to do with letters (and other non-numeric
# characters) in a version number. The current implementation does the
# obvious and predictable thing: keep them as strings and compare
# lexically within a tuple comparison. This has the desired effect if
# an appended letter sequence implies something "post-release":
# eg. "0.99" < "0.99pl14" < "1.0", and "5.001" < "5.001m" < "5.002".
#
# However, if letters in a version number imply a pre-release version,
# the "obvious" thing isn't correct. Eg. you would expect that
# "1.5.1" < "1.5.2a2" < "1.5.2", but under the tuple/lexical comparison
# implemented here, this just isn't so.
#
# Two possible solutions come to mind. The first is to tie the
# comparison algorithm to a particular set of semantic rules, as has
# been done in the StrictVersion class above. This works great as long
# as everyone can go along with bondage and discipline. Hopefully a
# (large) subset of Python module programmers will agree that the
# particular flavor of bondage and discipline provided by StrictVersion
# provides enough benefit to be worth using, and will submit their
# version numbering scheme to its domination. The free-thinking
# anarchists in the lot will never give in, though, and something needs
# to be done to accommodate them.
#
# Perhaps a "moderately strict" version class could be implemented that
# lets almost anything slide (syntactically), and makes some heuristic
# assumptions about non-digits in version number strings. This could
# sink into special-case-hell, though; if I was as talented and
# idiosyncratic as Larry Wall, I'd go ahead and implement a class that
# somehow knows that "1.2.1" < "1.2.2a2" < "1.2.2" < "1.2.2pl3", and is
# just as happy dealing with things like "2g6" and "1.13++". I don't
# think I'm smart enough to do it right though.
#
# In any case, I've coded the test suite for this module (see
# ../test/test_version.py) specifically to fail on things like comparing
# "1.2a2" and "1.2". That's not because the *code* is doing anything
# wrong, it's because the simple, obvious design doesn't match my
# complicated, hairy expectations for real-world version numbers. It
# would be a snap to fix the test suite to say, "Yep, LooseVersion does
# the Right Thing" (ie. the code matches the conception). But I'd rather
# have a conception that matches common notions about version numbers.
if sys.version_info >= (3,):
class _Py2Int(int):
"""Integer object that compares < any string"""
def __gt__(self, other):
if isinstance(other, str):
return False
return super().__gt__(other)
def __lt__(self, other):
if isinstance(other, str):
return True
return super().__lt__(other)
else:
_Py2Int = int
class LooseVersion(object):
"""Version numbering for anarchists and software realists.
Implements the standard interface for version number classes as
described above. A version number consists of a series of numbers,
separated by either periods or strings of letters. When comparing
version numbers, the numeric components will be compared
numerically, and the alphabetic components lexically. The following
are all valid version numbers, in no particular order:
1.5.1
1.5.2b2
161
3.10a
8.02
3.4j
1996.07.12
3.2.pl0
3.1.1.6
2g6
11g
0.960923
2.2beta29
1.13++
5.5.kw
2.0b1pl0
In fact, there is no such thing as an invalid version number under
this scheme; the rules for comparison are simple and predictable,
but may not always give the results you want (for some definition
of "want").
"""
component_re = re.compile(r"(\d+ | [a-z]+ | \.)", re.VERBOSE)
def __init__(self, vstring=None):
if vstring:
self.parse(vstring)
def __eq__(self, other):
c = self._cmp(other)
if c is NotImplemented:
return NotImplemented
return c == 0
def __lt__(self, other):
c = self._cmp(other)
if c is NotImplemented:
return NotImplemented
return c < 0
def __le__(self, other):
c = self._cmp(other)
if c is NotImplemented:
return NotImplemented
return c <= 0
def __gt__(self, other):
c = self._cmp(other)
if c is NotImplemented:
return NotImplemented
return c > 0
def __ge__(self, other):
c = self._cmp(other)
if c is NotImplemented:
return NotImplemented
return c >= 0
def parse(self, vstring):
# I've given up on thinking I can reconstruct the version string
# from the parsed tuple -- so I just store the string here for
# use by __str__
self.vstring = vstring
components = [x for x in self.component_re.split(vstring) if x and x != "."]
for i, obj in enumerate(components):
try:
components[i] = int(obj)
except ValueError:
pass
self.version = components
def __str__(self):
return self.vstring
def __repr__(self):
return "LooseVersion ('%s')" % str(self)
def _cmp(self, other):
other = self._coerce(other)
if other is NotImplemented:
return NotImplemented
if self.version == other.version:
return 0
if self.version < other.version:
return -1
if self.version > other.version:
return 1
return NotImplemented
@classmethod
def _coerce(cls, other):
if isinstance(other, cls):
return other
elif isinstance(other, str):
return cls(other)
elif "distutils" in sys.modules:
# Using this check to avoid importing distutils and suppressing the warning
try:
from distutils.version import LooseVersion as deprecated
except ImportError:
return NotImplemented
if isinstance(other, deprecated):
return cls(str(other))
return NotImplemented
class LooseVersion2(LooseVersion):
"""LooseVersion variant that restores Python 2 semantics
In Python 2, comparing LooseVersions where paired components could be string
and int always resulted in the string being "greater". In Python 3, this produced
a TypeError.
"""
def parse(self, vstring):
# I've given up on thinking I can reconstruct the version string
# from the parsed tuple -- so I just store the string here for
# use by __str__
self.vstring = vstring
components = [x for x in self.component_re.split(vstring) if x and x != "."]
for i, obj in enumerate(components):
try:
components[i] = _Py2Int(obj)
except ValueError:
pass
self.version = components

File diff suppressed because it is too large Load diff

View file

@ -7,19 +7,14 @@ import posixpath
import socket
import subprocess
import sys
from argparse import ArgumentParser
import urllib.parse
from argparse import ArgumentParser
from . import _
from . import common
from . import index
from . import update
options = None
from . import _, common, index, update
def _run_wget(path, urls):
if options.verbose:
def _run_wget(path, urls, verbose=False):
if verbose:
verbose = '--verbose'
else:
verbose = '--no-verbose'
@ -27,38 +22,73 @@ def _run_wget(path, urls):
if not urls:
return
logging.debug(_('Running wget in {path}').format(path=path))
cwd = os.getcwd()
os.makedirs(path, exist_ok=True)
os.chdir(path)
urls_file = '.fdroid-mirror-wget-input-file'
with open(urls_file, 'w') as fp:
for url in urls:
fp.write(url.split('?')[0] + '\n') # wget puts query string in the filename
subprocess.call(['wget', verbose, '--continue', '--user-agent="fdroid mirror"',
'--input-file=' + urls_file])
subprocess.call(
[
'wget',
verbose,
'--continue',
'--user-agent="fdroid mirror"',
'--input-file=' + urls_file,
]
)
os.remove(urls_file)
os.chdir(cwd) # leave the working env the way we found it
def main():
global options
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("url", nargs='?',
help=_('Base URL to mirror, can include the index signing key '
+ 'using the query string: ?fingerprint='))
parser.add_argument("--all", action='store_true', default=False,
help=_("Mirror the full repo and archive, all file types."))
parser.add_argument("--archive", action='store_true', default=False,
help=_("Also mirror the full archive section"))
parser.add_argument("--build-logs", action='store_true', default=False,
help=_("Include the build logs in the mirror"))
parser.add_argument("--pgp-signatures", action='store_true', default=False,
help=_("Include the PGP signature .asc files in the mirror"))
parser.add_argument("--src-tarballs", action='store_true', default=False,
help=_("Include the source tarballs in the mirror"))
parser.add_argument("--output-dir", default=None,
help=_("The directory to write the mirror to"))
options = parser.parse_args()
parser.add_argument(
"url",
nargs='?',
help=_(
'Base URL to mirror, can include the index signing key '
+ 'using the query string: ?fingerprint='
),
)
parser.add_argument(
"--all",
action='store_true',
default=False,
help=_("Mirror the full repo and archive, all file types."),
)
parser.add_argument(
"--archive",
action='store_true',
default=False,
help=_("Also mirror the full archive section"),
)
parser.add_argument(
"--build-logs",
action='store_true',
default=False,
help=_("Include the build logs in the mirror"),
)
parser.add_argument(
"--pgp-signatures",
action='store_true',
default=False,
help=_("Include the PGP signature .asc files in the mirror"),
)
parser.add_argument(
"--src-tarballs",
action='store_true',
default=False,
help=_("Include the source tarballs in the mirror"),
)
parser.add_argument(
"--output-dir", default=None, help=_("The directory to write the mirror to")
)
options = common.parse_args(parser)
common.set_console_logging(options.verbose, options.color)
if options.all:
options.archive = True
@ -75,26 +105,34 @@ def main():
fingerprint = urllib.parse.parse_qs(query).get('fingerprint')
def _append_to_url_path(*args):
'''Append the list of path components to URL, keeping the rest the same'''
"""Append the list of path components to URL, keeping the rest the same."""
newpath = posixpath.join(path, *args)
return urllib.parse.urlunparse((scheme, hostname, newpath, params, query, fragment))
return urllib.parse.urlunparse(
(scheme, hostname, newpath, params, query, fragment)
)
if fingerprint:
config = common.read_config(options)
config = common.read_config()
if not ('jarsigner' in config or 'apksigner' in config):
logging.error(_('Java JDK not found! Install in standard location or set java_paths!'))
logging.error(
_('Java JDK not found! Install in standard location or set java_paths!')
)
sys.exit(1)
def _get_index(section, etag=None):
url = _append_to_url_path(section)
data, etag = index.download_repo_index(url, etag=etag)
return data, etag, _append_to_url_path(section, 'index-v1.jar')
else:
def _get_index(section, etag=None):
import io
import json
import zipfile
from . import net
url = _append_to_url_path(section, 'index-v1.jar')
content, etag = net.http_get(url)
with zipfile.ZipFile(io.BytesIO(content)) as zip:
@ -107,21 +145,30 @@ def main():
ip = ipaddress.ip_address(hostname)
except ValueError:
pass
if hostname == 'f-droid.org' \
or (ip is not None and hostname in socket.gethostbyname_ex('f-droid.org')[2]):
print(_('ERROR: this command should never be used to mirror f-droid.org!\n'
'A full mirror of f-droid.org requires more than 200GB.'))
if hostname == 'f-droid.org' or (
ip is not None and hostname in socket.gethostbyname_ex('f-droid.org')[2]
):
logging.error(
_(
'This command should never be used to mirror f-droid.org! '
'A full copy requires more than 600GB.'
)
)
sys.exit(1)
path = path.rstrip('/')
if path.endswith('repo') or path.endswith('archive'):
logging.warning(_('Do not include "{path}" in URL!')
.format(path=path.split('/')[-1]))
logging.warning(
_('Do not include "{path}" in URL!').format(path=path.split('/')[-1])
)
elif not path.endswith('fdroid'):
logging.warning(_('{url} does not end with "fdroid", check the URL path!')
.format(url=options.url))
logging.warning(
_('{url} does not end with "fdroid", check the URL path!').format(
url=options.url
)
)
icondirs = ['icons', ]
icondirs = ['icons']
for density in update.screen_densities:
icondirs.append('icons-' + density)
@ -134,7 +181,7 @@ def main():
if options.archive:
sections = ('repo', 'archive')
else:
sections = ('repo', )
sections = ('repo',)
for section in sections:
sectiondir = os.path.join(basedir, section)
@ -152,25 +199,31 @@ def main():
for packageName, packageList in data['packages'].items():
for package in packageList:
to_fetch = []
keys = ['apkName', ]
keys = ['apkName']
if options.src_tarballs:
keys.append('srcname')
for k in keys:
if k in package:
to_fetch.append(package[k])
elif k == 'apkName':
logging.error(_('{appid} is missing {name}')
.format(appid=package['packageName'], name=k))
logging.error(
_('{appid} is missing {name}').format(
appid=package['packageName'], name=k
)
)
for f in to_fetch:
if not os.path.exists(f) \
or (f.endswith('.apk') and os.path.getsize(f) != package['size']):
if not os.path.exists(f) or (
f.endswith('.apk') and os.path.getsize(f) != package['size']
):
urls.append(_append_to_url_path(section, f))
if options.pgp_signatures:
urls.append(_append_to_url_path(section, f + '.asc'))
if options.build_logs and f.endswith('.apk'):
urls.append(_append_to_url_path(section, f[:-4] + '.log.gz'))
urls.append(
_append_to_url_path(section, f[:-4] + '.log.gz')
)
_run_wget(sectiondir, urls)
_run_wget(sectiondir, urls, options.verbose)
for app in data['apps']:
localized = app.get('localized')
@ -181,23 +234,29 @@ def main():
for k in update.GRAPHIC_NAMES:
f = d.get(k)
if f:
filepath_tuple = components + (f, )
filepath_tuple = components + (f,)
urls.append(_append_to_url_path(*filepath_tuple))
_run_wget(os.path.join(basedir, *components), urls)
_run_wget(os.path.join(basedir, *components), urls, options.verbose)
for k in update.SCREENSHOT_DIRS:
urls = []
filelist = d.get(k)
if filelist:
components = (section, app['packageName'], locale, k)
for f in filelist:
filepath_tuple = components + (f, )
filepath_tuple = components + (f,)
urls.append(_append_to_url_path(*filepath_tuple))
_run_wget(os.path.join(basedir, *components), urls)
_run_wget(
os.path.join(basedir, *components),
urls,
options.verbose,
)
urls = dict()
for app in data['apps']:
if 'icon' not in app:
logging.error(_('no "icon" in {appid}').format(appid=app['packageName']))
logging.error(
_('no "icon" in {appid}').format(appid=app['packageName'])
)
continue
icon = app['icon']
for icondir in icondirs:
@ -207,7 +266,12 @@ def main():
urls[icondir].append(url)
for icondir in icondirs:
_run_wget(os.path.join(basedir, section, icondir), urls[icondir])
if icondir in urls:
_run_wget(
os.path.join(basedir, section, icondir),
urls[icondir],
options.verbose,
)
if __name__ == "__main__":

View file

@ -2,6 +2,7 @@
#
# net.py - part of the FDroid server tools
# Copyright (C) 2015 Hans-Christoph Steiner <hans@eds.org>
# Copyright (C) 2022 FC Stegerman <flx@obfusk.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@ -16,38 +17,160 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import copy
import logging
import os
import random
import tempfile
import time
import urllib
import requests
import urllib3
from requests.adapters import HTTPAdapter, Retry
from . import _, common
logger = logging.getLogger(__name__)
HEADERS = {'User-Agent': 'F-Droid'}
def download_file(url, local_filename=None, dldir='tmp'):
filename = url.split('/')[-1]
def download_file(url, local_filename=None, dldir='tmp', retries=3, backoff_factor=0.1):
"""Try hard to download the file, including retrying on failures.
This has two retry cycles, one inside of the requests session, the
other provided by this function. The requests retry logic applies
to failed DNS lookups, socket connections and connection timeouts,
never to requests where data has made it to the server. This
handles ChunkedEncodingError during transfer in its own retry
loop. This can result in more retries than are specified in the
retries parameter.
"""
filename = urllib.parse.urlparse(url).path.split('/')[-1]
if local_filename is None:
local_filename = os.path.join(dldir, filename)
# the stream=True parameter keeps memory usage low
r = requests.get(url, stream=True, allow_redirects=True, headers=HEADERS)
r.raise_for_status()
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
return local_filename
for i in range(retries + 1):
if retries:
max_retries = Retry(total=retries - i, backoff_factor=backoff_factor)
adapter = HTTPAdapter(max_retries=max_retries)
session = requests.Session()
session.mount('http://', adapter)
session.mount('https://', adapter)
else:
session = requests
# the stream=True parameter keeps memory usage low
r = session.get(
url, stream=True, allow_redirects=True, headers=HEADERS, timeout=300
)
r.raise_for_status()
try:
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
return local_filename
except requests.exceptions.ChunkedEncodingError as err:
if i == retries:
raise err
logger.warning('Download interrupted, retrying...')
time.sleep(backoff_factor * 2**i)
raise ValueError("retries must be >= 0")
def download_using_mirrors(mirrors, local_filename=None):
"""Try to download the file from any working mirror.
Download the file that all URLs in the mirrors list point to,
trying all the tricks, starting with the most private methods
first. The list of mirrors is converted into a list of mirror
configurations to try, in order that the should be attempted.
This builds mirror_configs_to_try using all possible combos to
try. If a mirror is marked with worksWithoutSNI: True, then this
logic will try it twice: first without SNI, then again with SNI.
"""
mirrors = common.parse_list_of_dicts(mirrors)
mirror_configs_to_try = []
for mirror in mirrors:
mirror_configs_to_try.append(mirror)
if mirror.get('worksWithoutSNI'):
m = copy.deepcopy(mirror)
del m['worksWithoutSNI']
mirror_configs_to_try.append(m)
if not local_filename:
for mirror in mirrors:
filename = urllib.parse.urlparse(mirror['url']).path.split('/')[-1]
if filename:
break
if filename:
local_filename = os.path.join(common.get_cachedir(), filename)
else:
local_filename = tempfile.mkstemp(prefix='fdroid-')
timeouts = (2, 10, 100)
last_exception = None
for timeout in timeouts:
for mirror in mirror_configs_to_try:
last_exception = None
urllib3.util.ssl_.HAS_SNI = not mirror.get('worksWithoutSNI')
try:
# the stream=True parameter keeps memory usage low
r = requests.get(
mirror['url'],
stream=True,
allow_redirects=False,
headers=HEADERS,
# add jitter to the timeout to be less predictable
timeout=timeout + random.randint(0, timeout), # nosec B311
)
if r.status_code != 200:
raise requests.exceptions.HTTPError(r.status_code, response=r)
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
return local_filename
except (
ConnectionError,
requests.exceptions.ChunkedEncodingError,
requests.exceptions.ConnectionError,
requests.exceptions.ContentDecodingError,
requests.exceptions.HTTPError,
requests.exceptions.SSLError,
requests.exceptions.StreamConsumedError,
requests.exceptions.Timeout,
requests.exceptions.UnrewindableBodyError,
) as e:
last_exception = e
logger.debug(_('Retrying failed download: %s') % str(e))
# if it hasn't succeeded by now, then give up and raise last exception
if last_exception:
raise last_exception
def http_get(url, etag=None, timeout=600):
"""
Downloads the content from the given URL by making a GET request.
"""Download the content from the given URL by making a GET request.
If an ETag is given, it will do a HEAD request first, to see if the content changed.
:param url: The URL to download from.
:param etag: The last ETag to be used for the request (optional).
:return: A tuple consisting of:
- The raw content that was downloaded or None if it did not change
- The new eTag as returned by the HTTP request
Parameters
----------
url
The URL to download from.
etag
The last ETag to be used for the request (optional).
Returns
-------
A tuple consisting of:
- The raw content that was downloaded or None if it did not change
- The new eTag as returned by the HTTP request
"""
# TODO disable TLS Session IDs and TLS Session Tickets
# (plain text cookie visible to anyone who can see the network traffic)

View file

@ -1,4 +1,5 @@
#!/usr/bin/env python3
"""Set up an app build for a nightly build repo."""
#
# nightly.py - part of the FDroid server tools
# Copyright (C) 2017 Hans-Christoph Steiner <hans@eds.org>
@ -18,23 +19,26 @@
import base64
import datetime
import git
import hashlib
import inspect
import logging
import os
import paramiko
import platform
import shutil
import ssl
import subprocess
import sys
import tempfile
import yaml
from urllib.parse import urlparse
from argparse import ArgumentParser
from typing import Optional
from urllib.parse import urlparse
from . import _
from . import common
import git
import paramiko
import yaml
from . import _, common
from .exception import VCSException
# hard coded defaults for Android ~/.android/debug.keystore files
# https://developers.google.com/android/guides/client-auth
@ -47,34 +51,121 @@ DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US'
NIGHTLY = '-nightly'
def _ssh_key_from_debug_keystore(keystore=KEYSTORE_FILE):
def _get_keystore_secret_var(keystore: str) -> str:
"""Get keystore secret as base64.
Parameters
----------
keystore
The path of the keystore.
Returns
-------
base64_secret
The keystore secret as base64 string.
"""
with open(keystore, 'rb') as fp:
return base64.standard_b64encode(fp.read()).decode('ascii')
def _ssh_key_from_debug_keystore(keystore: Optional[str] = None) -> str:
"""Convert a debug keystore to an SSH private key.
This leaves the original keystore file in place.
Parameters
----------
keystore
The keystore to convert to a SSH private key.
Returns
-------
key_path
The SSH private key file path in the temporary directory.
"""
if keystore is None:
# set this here so it can be overridden in the tests
# TODO convert this to a class to get rid of this nonsense
keystore = KEYSTORE_FILE
tmp_dir = tempfile.mkdtemp(prefix='.')
privkey = os.path.join(tmp_dir, '.privkey')
key_pem = os.path.join(tmp_dir, '.key.pem')
p12 = os.path.join(tmp_dir, '.keystore.p12')
_config = dict()
common.fill_config_defaults(_config)
subprocess.check_call([_config['keytool'], '-importkeystore',
'-srckeystore', keystore, '-srcalias', KEY_ALIAS,
'-srcstorepass', PASSWORD, '-srckeypass', PASSWORD,
'-destkeystore', p12, '-destalias', KEY_ALIAS,
'-deststorepass', PASSWORD, '-destkeypass', PASSWORD,
'-deststoretype', 'PKCS12'],
env={'LC_ALL': 'C.UTF-8'})
subprocess.check_call(['openssl', 'pkcs12', '-in', p12, '-out', key_pem,
'-passin', 'pass:' + PASSWORD, '-passout', 'pass:' + PASSWORD],
env={'LC_ALL': 'C.UTF-8'})
subprocess.check_call(['openssl', 'rsa', '-in', key_pem, '-out', privkey,
'-passin', 'pass:' + PASSWORD],
env={'LC_ALL': 'C.UTF-8'})
subprocess.check_call(
[
_config['keytool'],
'-importkeystore',
'-srckeystore',
keystore,
'-srcalias',
KEY_ALIAS,
'-srcstorepass',
PASSWORD,
'-srckeypass',
PASSWORD,
'-destkeystore',
p12,
'-destalias',
KEY_ALIAS,
'-deststorepass',
PASSWORD,
'-destkeypass',
PASSWORD,
'-deststoretype',
'PKCS12',
],
env={'LC_ALL': 'C.UTF-8'},
)
subprocess.check_call(
[
'openssl',
'pkcs12',
'-in',
p12,
'-out',
key_pem,
'-passin',
'pass:' + PASSWORD,
'-passout',
'pass:' + PASSWORD,
],
env={'LC_ALL': 'C.UTF-8'},
)
# OpenSSL 3.0 changed the default output format from PKCS#1 to
# PKCS#8, which paramiko does not support.
# https://www.openssl.org/docs/man3.0/man1/openssl-rsa.html#traditional
# https://github.com/paramiko/paramiko/issues/1015
openssl_rsa_cmd = ['openssl', 'rsa']
if ssl.OPENSSL_VERSION_INFO[0] >= 3:
openssl_rsa_cmd += ['-traditional']
subprocess.check_call(
openssl_rsa_cmd
+ [
'-in',
key_pem,
'-out',
privkey,
'-passin',
'pass:' + PASSWORD,
],
env={'LC_ALL': 'C.UTF-8'},
)
os.remove(key_pem)
os.remove(p12)
os.chmod(privkey, 0o600) # os.umask() should cover this, but just in case
rsakey = paramiko.RSAKey.from_private_key_file(privkey)
fingerprint = base64.b64encode(hashlib.sha256(rsakey.asbytes()).digest()).decode('ascii').rstrip('=')
ssh_private_key_file = os.path.join(tmp_dir, 'debug_keystore_'
+ fingerprint.replace('/', '_') + '_id_rsa')
fingerprint = (
base64.b64encode(hashlib.sha256(rsakey.asbytes()).digest())
.decode('ascii')
.rstrip('=')
)
ssh_private_key_file = os.path.join(
tmp_dir, 'debug_keystore_' + fingerprint.replace('/', '_') + '_id_rsa'
)
shutil.move(privkey, ssh_private_key_file)
pub = rsakey.get_name() + ' ' + rsakey.get_base64() + ' ' + ssh_private_key_file
@ -86,26 +177,127 @@ def _ssh_key_from_debug_keystore(keystore=KEYSTORE_FILE):
return ssh_private_key_file
def main():
def get_repo_base_url(
clone_url: str, repo_git_base: str, force_type: Optional[str] = None
) -> str:
"""Generate the base URL for the F-Droid repository.
Parameters
----------
clone_url
The URL to clone the Git repository.
repo_git_base
The project path of the Git repository at the Git forge.
force_type
The Git forge of the project.
Returns
-------
repo_base_url
The base URL of the F-Droid repository.
"""
if force_type is None:
force_type = urlparse(clone_url).netloc
if force_type == 'gitlab.com':
return clone_url + '/-/raw/master/fdroid'
if force_type == 'github.com':
return 'https://raw.githubusercontent.com/%s/master/fdroid' % repo_git_base
print(_('ERROR: unsupported git host "%s", patches welcome!') % force_type)
sys.exit(1)
def clone_git_repo(clone_url, git_mirror_path):
"""Clone a git repo into the given path, failing if a password is required.
If GitPython's safe mode is present, this will use that. Otherwise,
this includes a very limited version of the safe mode just to ensure
this won't hang on password prompts.
https://github.com/gitpython-developers/GitPython/pull/2029
"""
logging.debug(_('cloning {url}').format(url=clone_url))
try:
sig = inspect.signature(git.Repo.clone_from)
if 'safe' in sig.parameters:
git.Repo.clone_from(clone_url, git_mirror_path, safe=True)
else:
git.Repo.clone_from(
clone_url,
git_mirror_path,
env={
'GIT_ASKPASS': '/bin/true',
'SSH_ASKPASS': '/bin/true',
'GIT_USERNAME': 'u',
'GIT_PASSWORD': 'p',
'GIT_HTTP_USERNAME': 'u',
'GIT_HTTP_PASSWORD': 'p',
'GIT_SSH': '/bin/false', # for git < 2.3
'GIT_TERMINAL_PROMPT': '0',
},
)
except git.exc.GitCommandError as e:
logging.warning(_('WARNING: only public git repos are supported!'))
raise VCSException(f'git clone {clone_url} failed:', str(e)) from e
def main():
"""Deploy to F-Droid repository or generate SSH private key from keystore.
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
Raises
------
:exc:`~fdroidserver.exception.VCSException`
If the nightly Git repository could not be cloned during an attempt to
deploy.
"""
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("--keystore", default=KEYSTORE_FILE,
help=_("Specify which debug keystore file to use."))
parser.add_argument("--show-secret-var", action="store_true", default=False,
help=_("Print the secret variable to the terminal for easy copy/paste"))
parser.add_argument("--keep-private-keys", action="store_true", default=False,
help=_("Do not remove the private keys generated from the keystore"))
parser.add_argument("--no-deploy", action="store_true", default=False,
help=_("Do not deploy the new files to the repo"))
parser.add_argument("--file", default='app/build/outputs/apk/*.apk',
help=_('The file to be included in the repo (path or glob)'))
parser.add_argument("--no-checksum", action="store_true", default=False,
help=_("Don't use rsync checksums"))
parser.add_argument("--archive-older", type=int, default=20,
help=_("Set maximum releases in repo before older ones are archived"))
parser.add_argument(
"--keystore",
default=KEYSTORE_FILE,
help=_("Specify which debug keystore file to use."),
)
parser.add_argument(
"--show-secret-var",
action="store_true",
default=False,
help=_("Print the secret variable to the terminal for easy copy/paste"),
)
parser.add_argument(
"--keep-private-keys",
action="store_true",
default=False,
help=_("Do not remove the private keys generated from the keystore"),
)
parser.add_argument(
"--no-deploy",
action="store_true",
default=False,
help=_("Do not deploy the new files to the repo"),
)
parser.add_argument(
"--file",
default='app/build/outputs/apk/*.apk',
help=_('The file to be included in the repo (path or glob)'),
)
parser.add_argument(
"--no-checksum",
action="store_true",
default=False,
help=_("Don't use rsync checksums"),
)
archive_older_unset = -1
parser.add_argument(
"--archive-older",
type=int,
default=archive_older_unset,
help=_("Set maximum releases in repo before older ones are archived"),
)
# TODO add --with-btlog
options = parser.parse_args()
options = common.parse_args(parser)
# force a tighter umask since this writes private key material
umask = os.umask(0o077)
@ -129,56 +321,86 @@ def main():
cibase = os.getcwd()
os.makedirs(repodir, exist_ok=True)
# the 'master' branch is hardcoded in fdroidserver/deploy.py
if 'CI_PROJECT_PATH' in os.environ and 'CI_PROJECT_URL' in os.environ:
# we are in GitLab CI
repo_git_base = os.getenv('CI_PROJECT_PATH') + NIGHTLY
clone_url = os.getenv('CI_PROJECT_URL') + NIGHTLY
repo_base = clone_url + '/raw/master/fdroid'
repo_base = get_repo_base_url(
clone_url, repo_git_base, force_type='gitlab.com'
)
servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base
deploy_key_url = clone_url + '/settings/repository'
deploy_key_url = (
f'{clone_url}/-/settings/repository#js-deploy-keys-settings'
)
git_user_name = os.getenv('GITLAB_USER_NAME')
git_user_email = os.getenv('GITLAB_USER_EMAIL')
elif 'TRAVIS_REPO_SLUG' in os.environ:
# we are in Travis CI
repo_git_base = os.getenv('TRAVIS_REPO_SLUG') + NIGHTLY
clone_url = 'https://github.com/' + repo_git_base
_branch = os.getenv('TRAVIS_BRANCH')
repo_base = 'https://raw.githubusercontent.com/' + repo_git_base + '/' + _branch + '/fdroid'
repo_base = get_repo_base_url(
clone_url, repo_git_base, force_type='github.com'
)
servergitmirror = 'git@github.com:' + repo_git_base
deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys'
+ '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys')
deploy_key_url = (
f'https://github.com/{repo_git_base}/settings/keys'
+ '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys'
)
git_user_name = repo_git_base
git_user_email = os.getenv('USER') + '@' + platform.node()
elif 'CIRCLE_REPOSITORY_URL' in os.environ \
and 'CIRCLE_PROJECT_USERNAME' in os.environ \
and 'CIRCLE_PROJECT_REPONAME' in os.environ:
elif (
'CIRCLE_REPOSITORY_URL' in os.environ
and 'CIRCLE_PROJECT_USERNAME' in os.environ
and 'CIRCLE_PROJECT_REPONAME' in os.environ
):
# we are in Circle CI
repo_git_base = (os.getenv('CIRCLE_PROJECT_USERNAME')
+ '/' + os.getenv('CIRCLE_PROJECT_REPONAME') + NIGHTLY)
repo_git_base = (
os.getenv('CIRCLE_PROJECT_USERNAME')
+ '/'
+ os.getenv('CIRCLE_PROJECT_REPONAME')
+ NIGHTLY
)
clone_url = os.getenv('CIRCLE_REPOSITORY_URL') + NIGHTLY
repo_base = clone_url + '/raw/master/fdroid'
repo_base = get_repo_base_url(
clone_url, repo_git_base, force_type='github.com'
)
servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base
deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys'
+ '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys')
deploy_key_url = (
f'https://github.com/{repo_git_base}/settings/keys'
+ '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys'
)
git_user_name = os.getenv('CIRCLE_USERNAME')
git_user_email = git_user_name + '@' + platform.node()
elif 'GITHUB_ACTIONS' in os.environ:
# we are in Github actions
repo_git_base = os.getenv('GITHUB_REPOSITORY') + NIGHTLY
clone_url = os.getenv('GITHUB_SERVER_URL') + '/' + repo_git_base
repo_base = get_repo_base_url(
clone_url, repo_git_base, force_type='github.com'
)
servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base
deploy_key_url = (
f'https://github.com/{repo_git_base}/settings/keys'
+ '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys'
)
git_user_name = os.getenv('GITHUB_ACTOR')
git_user_email = git_user_name + '@' + platform.node()
else:
print(_('ERROR: unsupported CI type, patches welcome!'))
sys.exit(1)
repo_url = repo_base + '/repo'
git_mirror_path = os.path.join(repo_basedir, 'git-mirror')
git_mirror_repodir = os.path.join(git_mirror_path, 'fdroid', 'repo')
git_mirror_metadatadir = os.path.join(git_mirror_path, 'fdroid', 'metadata')
git_mirror_statsdir = os.path.join(git_mirror_path, 'fdroid', 'stats')
git_mirror_fdroiddir = os.path.join(git_mirror_path, 'fdroid')
git_mirror_repodir = os.path.join(git_mirror_fdroiddir, 'repo')
git_mirror_metadatadir = os.path.join(git_mirror_fdroiddir, 'metadata')
if not os.path.isdir(git_mirror_repodir):
logging.debug(_('cloning {url}').format(url=clone_url))
try:
git.Repo.clone_from(clone_url, git_mirror_path)
except Exception:
pass
clone_git_repo(clone_url, git_mirror_path)
if not os.path.isdir(git_mirror_repodir):
os.makedirs(git_mirror_repodir, mode=0o755)
if os.path.exists('LICENSE'):
shutil.copy2('LICENSE', git_mirror_path)
mirror_git_repo = git.Repo.init(git_mirror_path)
writer = mirror_git_repo.config_writer()
@ -192,34 +414,31 @@ def main():
readme = '''
# {repo_git_base}
[![{repo_url}](icon.png)]({repo_url})
This is an app repository for nightly versions.
You can use it with the [F-Droid](https://f-droid.org/) Android app.
Last updated: {date}'''.format(repo_git_base=repo_git_base,
repo_url=repo_url,
date=datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S UTC'))
[![{repo_url}]({repo_url}/icons/icon.png)](https://fdroid.link/#{repo_url})
Last updated: {date}'''.format(
repo_git_base=repo_git_base,
repo_url=repo_url,
date=datetime.datetime.now(datetime.timezone.utc).strftime(
'%Y-%m-%d %H:%M:%S UTC'
),
)
with open(readme_path, 'w') as fp:
fp.write(readme)
mirror_git_repo.git.add(all=True)
mirror_git_repo.index.commit("update README")
icon_path = os.path.join(git_mirror_path, 'icon.png')
try:
import qrcode
qrcode.make(repo_url).save(icon_path)
except Exception:
exampleicon = os.path.join(common.get_examples_dir(), 'fdroid-icon.png')
shutil.copy(exampleicon, icon_path)
mirror_git_repo.git.add(all=True)
mirror_git_repo.index.commit("update repo/website icon")
shutil.copy(icon_path, repo_basedir)
os.chdir(repo_basedir)
if os.path.isdir(git_mirror_repodir):
common.local_rsync(options, git_mirror_repodir + '/', 'repo/')
common.local_rsync(options, [git_mirror_repodir + '/'], 'repo/')
if os.path.isdir(git_mirror_metadatadir):
common.local_rsync(options, git_mirror_metadatadir + '/', 'metadata/')
if os.path.isdir(git_mirror_statsdir):
common.local_rsync(options, git_mirror_statsdir + '/', 'stats/')
common.local_rsync(options, [git_mirror_metadatadir + '/'], 'metadata/')
ssh_private_key_file = _ssh_key_from_debug_keystore()
# this is needed for GitPython to find the SSH key
@ -230,57 +449,89 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
with open(ssh_config, 'a') as fp:
fp.write('\n\nHost *\n\tIdentityFile %s\n' % ssh_private_key_file)
config = ''
config += "identity_file = '%s'\n" % ssh_private_key_file
config += "repo_name = '%s'\n" % repo_git_base
config += "repo_url = '%s'\n" % repo_url
config += "repo_icon = 'icon.png'\n"
config += "repo_description = 'Nightly builds from %s'\n" % git_user_email
config += "archive_name = '%s'\n" % (repo_git_base + ' archive')
config += "archive_url = '%s'\n" % (repo_base + '/archive')
config += "archive_icon = 'icon.png'\n"
config += "archive_description = 'Old nightly builds that have been archived.'\n"
config += "archive_older = %i\n" % options.archive_older
config += "servergitmirrors = '%s'\n" % servergitmirror
config += "keystore = '%s'\n" % KEYSTORE_FILE
config += "repo_keyalias = '%s'\n" % KEY_ALIAS
config += "keystorepass = '%s'\n" % PASSWORD
config += "keypass = '%s'\n" % PASSWORD
config += "keydname = '%s'\n" % DISTINGUISHED_NAME
config += "make_current_version_link = False\n"
config += "update_stats = True\n"
with open('config.py', 'w') as fp:
fp.write(config)
os.chmod('config.py', 0o600)
config = common.read_config(options)
if options.archive_older == archive_older_unset:
fdroid_size = common.get_dir_size(git_mirror_fdroiddir)
max_size = common.GITLAB_COM_PAGES_MAX_SIZE
if fdroid_size < max_size:
options.archive_older = 20
else:
options.archive_older = 3
print(
'WARNING: repo is %s over the GitLab Pages limit (%s)'
% (fdroid_size - max_size, max_size)
)
print('Setting --archive-older to 3')
config = {
'identity_file': ssh_private_key_file,
'repo_name': repo_git_base,
'repo_url': repo_url,
'repo_description': 'Nightly builds from %s' % git_user_email,
'archive_name': repo_git_base + ' archive',
'archive_url': repo_base + '/archive',
'archive_description': 'Old nightly builds that have been archived.',
'archive_older': options.archive_older,
'servergitmirrors': [{"url": servergitmirror}],
'keystore': KEYSTORE_FILE,
'repo_keyalias': KEY_ALIAS,
'keystorepass': PASSWORD,
'keypass': PASSWORD,
'keydname': DISTINGUISHED_NAME,
'make_current_version_link': False,
}
with open(common.CONFIG_FILE, 'w', encoding='utf-8') as fp:
yaml.dump(config, fp, default_flow_style=False)
os.chmod(common.CONFIG_FILE, 0o600)
config = common.read_config()
common.assert_config_keystore(config)
logging.debug(
_(
'Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}'
).format(cibase=cibase, repo_basedir=repo_basedir)
)
for root, dirs, files in os.walk(cibase):
for d in dirs:
if d == '.git' or d == '.gradle' or (d == 'fdroid' and root == cibase):
for d in ('.git', '.gradle'):
if d in dirs:
dirs.remove(d)
if root == cibase and 'fdroid' in dirs:
dirs.remove('fdroid')
for f in files:
if f.endswith('-debug.apk'):
apkfilename = os.path.join(root, f)
logging.debug(_('Stripping mystery signature from {apkfilename}')
.format(apkfilename=apkfilename))
logging.debug(
_('Stripping mystery signature from {apkfilename}').format(
apkfilename=apkfilename
)
)
destapk = os.path.join(repodir, os.path.basename(f))
os.chmod(apkfilename, 0o644)
logging.debug(_('Resigning {apkfilename} with provided debug.keystore')
.format(apkfilename=os.path.basename(apkfilename)))
common.apk_strip_v1_signatures(apkfilename, strip_manifest=True)
logging.debug(
_(
'Resigning {apkfilename} with provided debug.keystore'
).format(apkfilename=os.path.basename(apkfilename))
)
common.sign_apk(apkfilename, destapk, KEY_ALIAS)
if options.verbose:
logging.debug(_('attempting bare SSH connection to test deploy key:'))
try:
subprocess.check_call(['ssh', '-Tvi', ssh_private_key_file,
'-oIdentitiesOnly=yes', '-oStrictHostKeyChecking=no',
servergitmirror.split(':')[0]])
subprocess.check_call(
[
'ssh',
'-Tvi',
ssh_private_key_file,
'-oIdentitiesOnly=yes',
'-oStrictHostKeyChecking=no',
servergitmirror.split(':')[0],
]
)
except subprocess.CalledProcessError:
pass
app_url = clone_url[:-len(NIGHTLY)]
app_url = clone_url[: -len(NIGHTLY)]
template = dict()
template['AuthorName'] = clone_url.split('/')[4]
template['AuthorWebSite'] = '/'.join(clone_url.split('/')[:4])
@ -292,10 +543,13 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
with open('template.yml', 'w') as fp:
yaml.dump(template, fp)
subprocess.check_call(['fdroid', 'update', '--rename-apks', '--create-metadata', '--verbose'],
cwd=repo_basedir)
common.local_rsync(options, repo_basedir + '/metadata/', git_mirror_metadatadir + '/')
common.local_rsync(options, repo_basedir + '/stats/', git_mirror_statsdir + '/')
subprocess.check_call(
['fdroid', 'update', '--rename-apks', '--create-metadata', '--verbose'],
cwd=repo_basedir,
)
common.local_rsync(
options, [repo_basedir + '/metadata/'], git_mirror_metadatadir + '/'
)
mirror_git_repo.git.add(all=True)
mirror_git_repo.index.commit("update app metadata")
@ -304,8 +558,11 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
cmd = ['fdroid', 'deploy', '--verbose', '--no-keep-git-mirror-archive']
subprocess.check_call(cmd, cwd=repo_basedir)
except subprocess.CalledProcessError:
logging.error(_('cannot publish update, did you set the deploy key?')
+ '\n' + deploy_key_url)
logging.error(
_('cannot publish update, did you set the deploy key?')
+ '\n'
+ deploy_key_url
)
sys.exit(1)
if not options.keep_private_keys:
@ -319,25 +576,33 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
if not os.path.exists(androiddir):
os.mkdir(androiddir)
logging.info(_('created {path}').format(path=androiddir))
logging.error(_('{path} does not exist! Create it by running:').format(path=options.keystore)
+ '\n keytool -genkey -v -keystore ' + options.keystore + ' -storepass android \\'
+ '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\'
+ '\n -dname "CN=Android Debug,O=Android,C=US"')
logging.error(
_('{path} does not exist! Create it by running:').format(
path=options.keystore
)
+ '\n keytool -genkey -v -keystore '
+ options.keystore
+ ' -storepass android \\'
+ '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\'
+ '\n -dname "CN=Android Debug,O=Android,C=US"'
)
sys.exit(1)
ssh_dir = os.path.join(os.getenv('HOME'), '.ssh')
os.makedirs(os.path.dirname(ssh_dir), exist_ok=True)
privkey = _ssh_key_from_debug_keystore(options.keystore)
ssh_private_key_file = os.path.join(ssh_dir, os.path.basename(privkey))
shutil.move(privkey, ssh_private_key_file)
shutil.move(privkey + '.pub', ssh_private_key_file + '.pub')
if os.path.exists(ssh_dir):
ssh_private_key_file = os.path.join(ssh_dir, os.path.basename(privkey))
shutil.move(privkey, ssh_private_key_file)
shutil.move(privkey + '.pub', ssh_private_key_file + '.pub')
if shutil.rmtree.avoids_symlink_attacks:
shutil.rmtree(os.path.dirname(privkey))
if options.show_secret_var:
with open(options.keystore, 'rb') as fp:
debug_keystore = base64.standard_b64encode(fp.read()).decode('ascii')
print(_('\n{path} encoded for the DEBUG_KEYSTORE secret variable:')
.format(path=options.keystore))
debug_keystore = _get_keystore_secret_var(options.keystore)
print(
_('\n{path} encoded for the DEBUG_KEYSTORE secret variable:').format(
path=options.keystore
)
)
print(debug_keystore)
os.umask(umask)

View file

@ -3,6 +3,7 @@
# publish.py - part of the FDroid server tools
# Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com
# Copyright (C) 2013-2014 Daniel Martí <mvdan@mvdan.cc>
# Copyright (C) 2021 Felix C. Stegerman <flx@obfusk.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@ -17,34 +18,40 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
"""Sign APKs using keys or via reproducible builds signature copying.
This command takes unsigned APKs and signs them. It looks for
unsigned APKs in the unsigned/ directory and puts successfully signed
APKs into the repo/ directory. The default is to run in a kind of
batch mode, where it will only quit on certain kinds of errors. It
mostly reports success by moving an APK from unsigned/ to repo/
"""
import glob
import hashlib
import json
import logging
import os
import re
import shutil
import glob
import hashlib
from argparse import ArgumentParser
from collections import OrderedDict
import logging
from gettext import ngettext
import json
import sys
import time
import zipfile
from argparse import ArgumentParser
from collections import OrderedDict
from gettext import ngettext
from . import _
from . import common
from . import metadata
from . import _, common, metadata
from .common import FDroidPopen
from .exception import BuildException, FDroidException
config = None
options = None
start_timestamp = time.gmtime()
def publish_source_tarball(apkfilename, unsigned_dir, output_dir):
"""Move the source tarball into the output directory..."""
tarfilename = apkfilename[:-4] + '_src.tar.gz'
tarfile = os.path.join(unsigned_dir, tarfilename)
if os.path.exists(tarfile):
@ -55,7 +62,9 @@ def publish_source_tarball(apkfilename, unsigned_dir, output_dir):
def key_alias(appid):
"""Get the alias which F-Droid uses to indentify the singing key
"""No summary.
Get the alias which F-Droid uses to indentify the singing key
for this App in F-Droids keystore.
"""
if config and 'keyaliases' in config and appid in config['keyaliases']:
@ -73,24 +82,27 @@ def key_alias(appid):
def read_fingerprints_from_keystore():
"""Obtain a dictionary containing all singning-key fingerprints which
are managed by F-Droid, grouped by appid.
"""
env_vars = {'LC_ALL': 'C.UTF-8',
'FDROID_KEY_STORE_PASS': config['keystorepass']}
cmd = [config['keytool'], '-list',
'-v', '-keystore', config['keystore'],
'-storepass:env', 'FDROID_KEY_STORE_PASS']
"""Obtain a dictionary containing all singning-key fingerprints which are managed by F-Droid, grouped by appid."""
env_vars = {'LC_ALL': 'C.UTF-8', 'FDROID_KEY_STORE_PASS': config['keystorepass']}
cmd = [
config['keytool'],
'-list',
'-v',
'-keystore',
config['keystore'],
'-storepass:env',
'FDROID_KEY_STORE_PASS',
]
if config['keystore'] == 'NONE':
cmd += config['smartcardoptions']
p = FDroidPopen(cmd, envs=env_vars, output=False)
if p.returncode != 0:
raise FDroidException('could not read keystore {}'.format(config['keystore']))
realias = re.compile('Alias name: (?P<alias>.+)\n')
resha256 = re.compile(r'\s+SHA256: (?P<sha256>[:0-9A-F]{95})\n')
realias = re.compile('Alias name: (?P<alias>.+)' + os.linesep)
resha256 = re.compile(r'\s+SHA256: (?P<sha256>[:0-9A-F]{95})' + os.linesep)
fps = {}
for block in p.output.split(('*' * 43) + '\n' + '*' * 43):
for block in p.output.split(('*' * 43) + os.linesep + '*' * 43):
s_alias = realias.search(block)
s_sha256 = resha256.search(block)
if s_alias and s_sha256:
@ -100,8 +112,9 @@ def read_fingerprints_from_keystore():
def sign_sig_key_fingerprint_list(jar_file):
"""sign the list of app-signing key fingerprints which is
used primaryily by fdroid update to determine which APKs
"""Sign the list of app-signing key fingerprints.
This is used primaryily by fdroid update to determine which APKs
where built and signed by F-Droid and which ones were
manually added by users.
"""
@ -115,19 +128,22 @@ def sign_sig_key_fingerprint_list(jar_file):
cmd += config['smartcardoptions']
else: # smardcards never use -keypass
cmd += '-keypass:env', 'FDROID_KEY_PASS'
env_vars = {'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config.get('keypass', "")}
env_vars = {
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config.get('keypass', ""),
}
p = common.FDroidPopen(cmd, envs=env_vars)
if p.returncode != 0:
raise FDroidException("Failed to sign '{}'!".format(jar_file))
def store_stats_fdroid_signing_key_fingerprints(appids, indent=None):
def store_publish_signer_fingerprints(appids, indent=None):
"""Store list of all signing-key fingerprints for given appids to HD.
This list will later on be needed by fdroid update.
"""
if not os.path.exists('stats'):
os.makedirs('stats')
if not os.path.exists('repo'):
os.makedirs('repo')
data = OrderedDict()
fps = read_fingerprints_from_keystore()
for appid in sorted(appids):
@ -135,17 +151,22 @@ def store_stats_fdroid_signing_key_fingerprints(appids, indent=None):
if alias in fps:
data[appid] = {'signer': fps[key_alias(appid)]}
jar_file = os.path.join('stats', 'publishsigkeys.jar')
jar_file = os.path.join('repo', 'signer-index.jar')
output = json.dumps(data, indent=indent)
with zipfile.ZipFile(jar_file, 'w', zipfile.ZIP_DEFLATED) as jar:
jar.writestr('publishsigkeys.json', json.dumps(data, indent=indent))
jar.writestr('signer-index.json', output)
with open(os.path.join('repo', 'signer-index.json'), 'w') as fp:
fp.write(output)
sign_sig_key_fingerprint_list(jar_file)
def status_update_json(generatedKeys, signedApks):
"""Output a JSON file with metadata about this run"""
"""Output a JSON file with metadata about this run."""
logging.debug(_('Outputting JSON'))
output = common.setup_status_output(start_timestamp)
output['apksigner'] = shutil.which(config.get('apksigner', ''))
output['jarsigner'] = shutil.which(config.get('jarsigner', ''))
output['keytool'] = shutil.which(config.get('keytool', ''))
if generatedKeys:
output['generatedKeys'] = generatedKeys
if signedApks:
@ -154,8 +175,8 @@ def status_update_json(generatedKeys, signedApks):
def check_for_key_collisions(allapps):
"""
Make sure there's no collision in keyaliases from apps.
"""Make sure there's no collision in keyaliases from apps.
It was suggested at
https://dev.guardianproject.info/projects/bazaar/wiki/FDroid_Audit
that a package could be crafted, such that it would use the same signing
@ -164,9 +185,16 @@ def check_for_key_collisions(allapps):
the colliding ID would be something that would be a) a valid package ID,
and b) a sane-looking ID that would make its way into the repo.
Nonetheless, to be sure, before publishing we check that there are no
collisions, and refuse to do any publishing if that's the case...
:param allapps a dict of all apps to process
:return: a list of all aliases corresponding to allapps
collisions, and refuse to do any publishing if that's the case.
Parameters
----------
allapps
a dict of all apps to process
Returns
-------
a list of all aliases corresponding to allapps
"""
allaliases = []
for appid in allapps:
@ -181,30 +209,53 @@ def check_for_key_collisions(allapps):
def create_key_if_not_existing(keyalias):
"""
Ensures a signing key with the given keyalias exists
:return: boolean, True if a new key was created, false otherwise
"""Ensure a signing key with the given keyalias exists.
Returns
-------
boolean
True if a new key was created, False otherwise
"""
# See if we already have a key for this application, and
# if not generate one...
env_vars = {'LC_ALL': 'C.UTF-8',
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config.get('keypass', "")}
cmd = [config['keytool'], '-list',
'-alias', keyalias, '-keystore', config['keystore'],
'-storepass:env', 'FDROID_KEY_STORE_PASS']
env_vars = {
'LC_ALL': 'C.UTF-8',
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config.get('keypass', ""),
}
cmd = [
config['keytool'],
'-list',
'-alias',
keyalias,
'-keystore',
config['keystore'],
'-storepass:env',
'FDROID_KEY_STORE_PASS',
]
if config['keystore'] == 'NONE':
cmd += config['smartcardoptions']
p = FDroidPopen(cmd, envs=env_vars)
if p.returncode != 0:
logging.info("Key does not exist - generating...")
cmd = [config['keytool'], '-genkey',
'-keystore', config['keystore'],
'-alias', keyalias,
'-keyalg', 'RSA', '-keysize', '2048',
'-validity', '10000',
'-storepass:env', 'FDROID_KEY_STORE_PASS',
'-dname', config['keydname']]
cmd = [
config['keytool'],
'-genkey',
'-keystore',
config['keystore'],
'-alias',
keyalias,
'-keyalg',
'RSA',
'-keysize',
'2048',
'-validity',
'10000',
'-storepass:env',
'FDROID_KEY_STORE_PASS',
'-dname',
config['keydname'],
]
if config['keystore'] == 'NONE':
cmd += config['smartcardoptions']
else:
@ -218,22 +269,35 @@ def create_key_if_not_existing(keyalias):
def main():
global config, options
global config
# Parse command line...
parser = ArgumentParser(usage="%(prog)s [options] "
"[APPID[:VERCODE] [APPID[:VERCODE] ...]]")
parser = ArgumentParser(
usage="%(prog)s [options] " "[APPID[:VERCODE] [APPID[:VERCODE] ...]]"
)
common.setup_global_opts(parser)
parser.add_argument("appid", nargs='*',
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"))
parser.add_argument(
"-e",
"--error-on-failed",
action="store_true",
default=False,
help=_("When signing or verifying fails, exit with an error code."),
)
parser.add_argument(
"appid",
nargs='*',
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"),
)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
if not ('jarsigner' in config and 'keytool' in config):
logging.critical(_('Java JDK not found! Install in standard location or set java_paths!'))
logging.critical(
_('Java JDK not found! Install in standard location or set java_paths!')
)
sys.exit(1)
common.assert_config_keystore(config)
@ -265,16 +329,22 @@ def main():
allapps = metadata.read_metadata()
vercodes = common.read_pkg_args(options.appid, True)
common.get_metadata_files(vercodes) # only check appids
signed_apks = dict()
generated_keys = dict()
allaliases = check_for_key_collisions(allapps)
logging.info(ngettext('{0} app, {1} key aliases',
'{0} apps, {1} key aliases', len(allapps)).format(len(allapps), len(allaliases)))
logging.info(
ngettext(
'{0} app, {1} key aliases', '{0} apps, {1} key aliases', len(allapps)
).format(len(allapps), len(allaliases))
)
failed = 0
# Process any APKs or ZIPs that are waiting to be signed...
for apkfile in sorted(glob.glob(os.path.join(unsigned_dir, '*.apk'))
+ glob.glob(os.path.join(unsigned_dir, '*.zip'))):
for apkfile in sorted(
glob.glob(os.path.join(unsigned_dir, '*.apk'))
+ glob.glob(os.path.join(unsigned_dir, '*.zip'))
):
appid, vercode = common.publishednameinfo(apkfile)
apkfilename = os.path.basename(apkfile)
if vercodes and appid not in vercodes:
@ -287,13 +357,17 @@ def main():
# There ought to be valid metadata for this app, otherwise why are we
# trying to publish it?
if appid not in allapps:
logging.error("Unexpected {0} found in unsigned directory"
.format(apkfilename))
logging.error(
"Unexpected {0} found in unsigned directory".format(apkfilename)
)
sys.exit(1)
app = allapps[appid]
if app.Binaries:
build = None
for b in app.get("Builds", ()):
if b.get("versionCode") == vercode:
build = b
if app.Binaries or (build and build.binary):
# It's an app where we build from source, and verify the apk
# contents against a developer's binary, and then publish their
# version if everything checks out.
@ -304,14 +378,22 @@ def main():
srcapk = srcapk.replace(unsigned_dir, binaries_dir)
if not os.path.isfile(srcapk):
logging.error("...reference binary missing - publish skipped: "
"'{refpath}'".format(refpath=srcapk))
logging.error(
"...reference binary missing - publish skipped: '{refpath}'".format(
refpath=srcapk
)
)
failed += 1
else:
# Compare our unsigned one with the downloaded one...
compare_result = common.verify_apks(srcapk, apkfile, tmp_dir)
if compare_result:
logging.error("...verification failed - publish skipped : "
"{result}".format(result=compare_result))
logging.error(
"...verification failed - publish skipped : {result}".format(
result=compare_result
)
)
failed += 1
else:
# Success! So move the downloaded file to the repo, and remove
# our built version.
@ -322,7 +404,6 @@ def main():
logging.info('Published ' + apkfilename)
elif apkfile.endswith('.zip'):
# OTA ZIPs built by fdroid do not need to be signed by jarsigner,
# just to be moved into place in the repo
shutil.move(apkfile, os.path.join(output_dir, apkfilename))
@ -330,7 +411,6 @@ def main():
logging.info('Published ' + apkfilename)
else:
# It's a 'normal' app, i.e. we sign and publish it...
skipsigning = False
@ -341,22 +421,23 @@ def main():
# metadata. This means we're going to prepare both a locally
# signed APK and a version signed with the developers key.
signaturefile, signedfile, manifest = signingfiles
signature_file, _ignored, manifest, v2_files = signingfiles
with open(signaturefile, 'rb') as f:
devfp = common.signer_fingerprint_short(common.get_certificate(f.read()))
with open(signature_file, 'rb') as f:
devfp = common.signer_fingerprint_short(
common.get_certificate(f.read())
)
devsigned = '{}_{}_{}.apk'.format(appid, vercode, devfp)
devsignedtmp = os.path.join(tmp_dir, devsigned)
shutil.copy(apkfile, devsignedtmp)
common.apk_implant_signatures(devsignedtmp, signaturefile,
signedfile, manifest)
common.apk_implant_signatures(apkfile, devsignedtmp, manifest=manifest)
if common.verify_apk_signature(devsignedtmp):
shutil.move(devsignedtmp, os.path.join(output_dir, devsigned))
else:
os.remove(devsignedtmp)
logging.error('...verification failed - skipping: %s', devsigned)
skipsigning = True
failed += 1
# Now we sign with the F-Droid key.
if not skipsigning:
@ -368,25 +449,30 @@ def main():
signed_apk_path = os.path.join(output_dir, apkfilename)
if os.path.exists(signed_apk_path):
raise BuildException("Refusing to sign '{0}' file exists in both "
"{1} and {2} folder.".format(apkfilename,
unsigned_dir,
output_dir))
raise BuildException(
_(
"Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder."
).format(path=apkfilename, dir1=unsigned_dir, dir2=output_dir)
)
# Sign and zipalign the application...
# Sign the application...
common.sign_apk(apkfile, signed_apk_path, keyalias)
if appid not in signed_apks:
signed_apks[appid] = []
signed_apks[appid].append({"keyalias": keyalias,
"filename": apkfile})
signed_apks[appid].append({"keyalias": keyalias, "filename": apkfile})
publish_source_tarball(apkfilename, unsigned_dir, output_dir)
logging.info('Published ' + apkfilename)
store_stats_fdroid_signing_key_fingerprints(allapps.keys())
store_publish_signer_fingerprints(allapps.keys())
status_update_json(generated_keys, signed_apks)
logging.info('published list signing-key fingerprints')
if failed:
logging.error(_('%d APKs failed to be signed or verified!') % failed)
if options.error_on_failed:
sys.exit(failed)
if __name__ == "__main__":
main()

View file

@ -17,20 +17,17 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from argparse import ArgumentParser
from . import common
from . import metadata
options = None
from . import common, metadata
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
metadata.warnings_action = options.W
common.read_config(None)
common.read_config()
metadata.read_metadata()

View file

@ -17,56 +17,73 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from argparse import ArgumentParser
import os
import logging
import io
import tempfile
import logging
import shutil
import tempfile
from argparse import ArgumentParser
from pathlib import Path
from . import _
from . import common
from . import metadata
from . import _, common, metadata
config = None
options = None
def proper_format(app):
s = io.StringIO()
# TODO: currently reading entire file again, should reuse first
# read in metadata.py
with open(app.metadatapath, 'r') as f:
cur_content = f.read()
if app.metadatapath.endswith('.yml'):
cur_content = Path(app.metadatapath).read_text(encoding='utf-8')
if Path(app.metadatapath).suffix == '.yml':
metadata.write_yaml(s, app)
content = s.getvalue()
s.close()
return content == cur_content
def main():
def remove_blank_flags_from_builds(builds):
"""Remove unset entries from Builds so they are not written out."""
if not builds:
return list()
newbuilds = list()
for build in builds:
new = dict()
for k in metadata.build_flags:
v = build.get(k)
# 0 is valid value, it should not be stripped
if v is None or v is False or v == '' or v == dict() or v == list():
continue
new[k] = v
newbuilds.append(new)
return newbuilds
global config, options
def main():
global config
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("-l", "--list", action="store_true", default=False,
help=_("List files that would be reformatted"))
parser.add_argument("appid", nargs='*', help=_("application ID of file to operate on"))
parser.add_argument(
"-l",
"--list",
action="store_true",
default=False,
help=_("List files that would be reformatted (dry run)"),
)
parser.add_argument(
"appid", nargs='*', help=_("application ID of file to operate on")
)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
# Get all apps...
allapps = metadata.read_metadata(options.appid)
apps = common.read_app_args(options.appid, allapps, False)
apps = common.read_app_args(options.appid)
for appid, app in apps.items():
path = app.metadatapath
if path.endswith('.yml'):
path = Path(app.metadatapath)
if path.suffix == '.yml':
logging.info(_("Rewriting '{appid}'").format(appid=appid))
else:
logging.warning(_('Cannot rewrite "{path}"').format(path=path))
@ -77,21 +94,15 @@ def main():
print(path)
continue
newbuilds = []
for build in app.builds:
new = metadata.Build()
for k in metadata.build_flags:
v = build[k]
if v is None or v is False or v == [] or v == '':
continue
new[k] = v
newbuilds.append(new)
app.builds = newbuilds
# TODO these should be moved to metadata.write_yaml()
builds = remove_blank_flags_from_builds(app.get('Builds'))
if builds:
app['Builds'] = builds
# rewrite to temporary file before overwriting existsing
# rewrite to temporary file before overwriting existing
# file in case there's a bug in write_metadata
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = os.path.join(tmpdir, os.path.basename(path))
tmp_path = Path(tmpdir) / path.name
metadata.write_metadata(tmp_path, app)
shutil.move(tmp_path, path)

File diff suppressed because it is too large Load diff

View file

@ -15,21 +15,17 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import logging
import os
import re
import sys
from argparse import ArgumentParser
import re
import os
import sys
import logging
from . import _
from . import common
from . import net
from . import _, common
from .exception import FDroidException
def extract_signature(apkpath):
if not os.path.exists(apkpath):
raise FDroidException("file APK does not exists '{}'".format(apkpath))
if not common.verify_apk_signature(apkpath):
@ -46,7 +42,6 @@ def extract_signature(apkpath):
def extract(options):
# Create tmp dir if missing…
tmp_dir = 'tmp'
if not os.path.exists(tmp_dir):
@ -62,26 +57,40 @@ def extract(options):
try:
if os.path.isfile(apk):
sigdir = extract_signature(apk)
logging.info(_("Fetched signatures for '{apkfilename}' -> '{sigdir}'")
.format(apkfilename=apk, sigdir=sigdir))
logging.info(
_("Fetched signatures for '{apkfilename}' -> '{sigdir}'").format(
apkfilename=apk, sigdir=sigdir
)
)
elif httpre.match(apk):
if apk.startswith('https') or options.no_check_https:
try:
from . import net
tmp_apk = os.path.join(tmp_dir, 'signed.apk')
net.download_file(apk, tmp_apk)
sigdir = extract_signature(tmp_apk)
logging.info(_("Fetched signatures for '{apkfilename}' -> '{sigdir}'")
.format(apkfilename=apk, sigdir=sigdir))
logging.info(
_(
"Fetched signatures for '{apkfilename}' -> '{sigdir}'"
).format(apkfilename=apk, sigdir=sigdir)
)
finally:
if tmp_apk and os.path.exists(tmp_apk):
os.remove(tmp_apk)
else:
logging.warning(_('refuse downloading via insecure HTTP connection '
'(use HTTPS or specify --no-https-check): {apkfilename}')
.format(apkfilename=apk))
logging.warning(
_(
'refuse downloading via insecure HTTP connection '
'(use HTTPS or specify --no-https-check): {apkfilename}'
).format(apkfilename=apk)
)
except FDroidException as e:
logging.warning(_("Failed fetching signatures for '{apkfilename}': {error}")
.format(apkfilename=apk, error=e))
logging.warning(
_("Failed fetching signatures for '{apkfilename}': {error}").format(
apkfilename=apk, error=e
)
)
if e.detail:
logging.debug(e.detail)
@ -89,12 +98,12 @@ def extract(options):
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("APK", nargs='*',
help=_("signed APK, either a file-path or HTTPS URL."))
parser.add_argument(
"APK", nargs='*', help=_("signed APK, either a file-path or HTTPS URL.")
)
parser.add_argument("--no-check-https", action="store_true", default=False)
options = parser.parse_args()
# Read config.py...
common.read_config(options)
options = common.parse_args(parser)
common.set_console_logging(options.verbose, options.color)
common.read_config()
extract(options)

View file

@ -16,70 +16,154 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import logging
import os
import time
import zipfile
from argparse import ArgumentParser
import logging
from . import _
from . import common
from . import _, common, metadata
from .exception import FDroidException
config = None
options = None
start_timestamp = time.gmtime()
def sign_jar(jar):
"""
Sign a JAR file with Java's jarsigner.
def sign_jar(jar, use_old_algs=False):
"""Sign a JAR file with the best available algorithm.
The current signing method uses apksigner to sign the JAR so that
it will automatically select algorithms that are compatible with
Android SDK 23, which added the most recent algorithms:
https://developer.android.com/reference/java/security/Signature
This signing method uses then inherits the default signing
algothim settings, since Java and Android both maintain those.
That helps avoid a repeat of being stuck on an old signing
algorithm. That means specifically that this call to apksigner
does not specify any of the algorithms.
The old indexes must be signed by SHA1withRSA otherwise they will
no longer be compatible with old Androids.
This method requires a properly initialized config object.
This does use old hashing algorithms, i.e. SHA1, but that's not
broken yet for file verification. This could be set to SHA256,
but then Android < 4.3 would not be able to verify it.
https://code.google.com/p/android/issues/detail?id=38321
"""
args = [config['jarsigner'], '-keystore', config['keystore'],
'-storepass:env', 'FDROID_KEY_STORE_PASS',
'-digestalg', 'SHA1', '-sigalg', 'SHA1withRSA',
jar, config['repo_keyalias']]
if config['keystore'] == 'NONE':
args += config['smartcardoptions']
else: # smardcards never use -keypass
args += ['-keypass:env', 'FDROID_KEY_PASS']
if use_old_algs:
# This does use old hashing algorithms, i.e. SHA1, but that's not
# broken yet for file verification. This could be set to SHA256,
# but then Android < 4.3 would not be able to verify it.
# https://code.google.com/p/android/issues/detail?id=38321
args = [
config['jarsigner'],
'-keystore',
config['keystore'],
'-storepass:env',
'FDROID_KEY_STORE_PASS',
'-digestalg',
'SHA1',
'-sigalg',
'SHA1withRSA',
jar,
config['repo_keyalias'],
]
if config['keystore'] == 'NONE':
args += config['smartcardoptions']
else: # smardcards never use -keypass
args += ['-keypass:env', 'FDROID_KEY_PASS']
else:
# https://developer.android.com/studio/command-line/apksigner
args = [
config['apksigner'],
'sign',
'--min-sdk-version',
'23', # enable all current algorithms
'--max-sdk-version',
'24', # avoid future incompatible algorithms
# disable all APK signature types, only use JAR sigs aka v1
'--v1-signing-enabled',
'true',
'--v2-signing-enabled',
'false',
'--v3-signing-enabled',
'false',
'--v4-signing-enabled',
'false',
'--ks',
config['keystore'],
'--ks-pass',
'env:FDROID_KEY_STORE_PASS',
'--ks-key-alias',
config['repo_keyalias'],
]
if config['keystore'] == 'NONE':
args += common.get_apksigner_smartcardoptions(config['smartcardoptions'])
else: # smardcards never use --key-pass
args += ['--key-pass', 'env:FDROID_KEY_PASS']
args += [jar]
env_vars = {
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config.get('keypass', ""),
}
p = common.FDroidPopen(args, envs=env_vars)
if p.returncode != 0:
raise FDroidException("Failed to sign %s!" % jar)
if not use_old_algs and p.returncode != 0:
# workaround for apksigner v30 on f-droid.org publish server
v4 = args.index("--v4-signing-enabled")
del args[v4 + 1]
del args[v4]
p = common.FDroidPopen(args, envs=env_vars)
if p.returncode != 0:
raise FDroidException("Failed to sign %s: %s" % (jar, p.output))
def sign_index_v1(repodir, json_name):
def sign_index(repodir, json_name):
"""Sign data file like entry.json to make a signed JAR like entry.jar.
The data file like index-v1.json means that there is unsigned
data. That file is then stuck into a jar and signed by the
signing process. This is a bit different than sign_jar, which is
used for index.jar: that creates index.xml then puts that in a
index_unsigned.jar, then that file is signed.
This also checks to make sure that the JSON files are intact
before signing them. Broken JSON files should never be signed, so
taking some extra time and failing hard is the preferred
option. This signing process can happen on an entirely separate
machine and file tree, so this ensures that nothing got broken
during transfer.
"""
Sign index-v1.json to make index-v1.jar
json_file = os.path.join(repodir, json_name)
with open(json_file, encoding="utf-8") as fp:
data = json.load(fp)
if json_name == 'entry.json':
index_file = os.path.join(repodir, data['index']['name'].lstrip('/'))
sha256 = common.sha256sum(index_file)
if sha256 != data['index']['sha256']:
raise FDroidException(
_('%s has bad SHA-256: %s') % (index_file, sha256)
)
with open(index_file) as fp:
index = json.load(fp)
if not isinstance(index, dict):
raise FDroidException(_('%s did not produce a dict!') % index_file)
elif json_name == 'index-v1.json':
[metadata.App(app) for app in data["apps"]]
This is a bit different than index.jar: instead of their being index.xml
and index_unsigned.jar, the presence of index-v1.json means that there is
unsigned data. That file is then stuck into a jar and signed by the
signing process. index-v1.json is never published to the repo. It is
included in the binary transparency log, if that is enabled.
"""
name, ext = common.get_extension(json_name)
index_file = os.path.join(repodir, json_name)
jar_file = os.path.join(repodir, name + '.jar')
with zipfile.ZipFile(jar_file, 'w', zipfile.ZIP_DEFLATED) as jar:
jar.write(index_file, json_name)
sign_jar(jar_file)
jar.write(json_file, json_name)
if json_name in ('index.xml', 'index-v1.json'):
sign_jar(jar_file, use_old_algs=True)
else:
sign_jar(jar_file)
def status_update_json(signed):
"""Output a JSON file with metadata about this run"""
"""Output a JSON file with metadata about this run."""
logging.debug(_('Outputting JSON'))
output = common.setup_status_output(start_timestamp)
if signed:
@ -88,18 +172,20 @@ def status_update_json(signed):
def main():
global config, options
global config
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
common.parse_args(parser)
config = common.read_config(options)
config = common.read_config()
if 'jarsigner' not in config:
raise FDroidException(
_('Java jarsigner not found! Install in standard location or set java_paths!'))
_(
'Java jarsigner not found! Install in standard location or set java_paths!'
)
)
repodirs = ['repo']
if config['archive_older'] != 0:
@ -121,8 +207,14 @@ def main():
json_name = 'index-v1.json'
index_file = os.path.join(output_dir, json_name)
if os.path.exists(index_file):
sign_index_v1(output_dir, json_name)
os.remove(index_file)
sign_index(output_dir, json_name)
logging.info('Signed ' + index_file)
signed.append(index_file)
json_name = 'entry.json'
index_file = os.path.join(output_dir, json_name)
if os.path.exists(index_file):
sign_index(output_dir, json_name)
logging.info('Signed ' + index_file)
signed.append(index_file)

View file

@ -1,306 +0,0 @@
#!/usr/bin/env python3
#
# stats.py - part of the FDroid server tools
# Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import os
import re
import time
import traceback
import glob
import json
from argparse import ArgumentParser
import paramiko
import socket
import logging
import subprocess
from collections import Counter
from . import _
from . import common
from . import metadata
def carbon_send(key, value):
s = socket.socket()
s.connect((config['carbon_host'], config['carbon_port']))
msg = '%s %d %d\n' % (key, value, int(time.time()))
s.sendall(msg)
s.close()
options = None
config = None
def most_common_stable(counts):
pairs = []
for s in counts:
pairs.append((s, counts[s]))
return sorted(pairs, key=lambda t: (-t[1], t[0]))
def main():
global options, config
# Parse command line...
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("-d", "--download", action="store_true", default=False,
help=_("Download logs we don't have"))
parser.add_argument("--recalc", action="store_true", default=False,
help=_("Recalculate aggregate stats - use when changes "
"have been made that would invalidate old cached data."))
parser.add_argument("--nologs", action="store_true", default=False,
help=_("Don't do anything logs-related"))
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
metadata.warnings_action = options.W
config = common.read_config(options)
if not config['update_stats']:
logging.info("Stats are disabled - set \"update_stats = True\" in your config.py")
sys.exit(1)
# Get all metadata-defined apps...
allmetaapps = [app for app in metadata.read_metadata().values()]
metaapps = [app for app in allmetaapps if not app.Disabled]
statsdir = 'stats'
logsdir = os.path.join(statsdir, 'logs')
datadir = os.path.join(statsdir, 'data')
if not os.path.exists(statsdir):
os.mkdir(statsdir)
if not os.path.exists(logsdir):
os.mkdir(logsdir)
if not os.path.exists(datadir):
os.mkdir(datadir)
if options.download:
# Get any access logs we don't have...
ssh = None
ftp = None
try:
logging.info('Retrieving logs')
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(config['stats_server'], username=config['stats_user'],
timeout=10, key_filename=config['webserver_keyfile'])
ftp = ssh.open_sftp()
ftp.get_channel().settimeout(60)
logging.info("...connected")
ftp.chdir('logs')
files = ftp.listdir()
for f in files:
if f.startswith('access-') and f.endswith('.log.gz'):
destpath = os.path.join(logsdir, f)
destsize = ftp.stat(f).st_size
if not os.path.exists(destpath) \
or os.path.getsize(destpath) != destsize:
logging.debug("...retrieving " + f)
ftp.get(f, destpath)
except Exception:
traceback.print_exc()
sys.exit(1)
finally:
# Disconnect
if ftp is not None:
ftp.close()
if ssh is not None:
ssh.close()
knownapks = common.KnownApks()
unknownapks = []
if not options.nologs:
# Process logs
logging.info('Processing logs...')
appscount = Counter()
appsvercount = Counter()
logexpr = r'(?P<ip>[.:0-9a-fA-F]+) - - \[(?P<time>.*?)\] ' \
+ r'"GET (?P<uri>.*?) HTTP/1.\d" (?P<statuscode>\d+) ' \
+ r'\d+ "(?P<referral>.*?)" "(?P<useragent>.*?)"'
logsearch = re.compile(logexpr).search
for logfile in glob.glob(os.path.join(logsdir, 'access-*.log.gz')):
logging.debug('...' + logfile)
# Get the date for this log - e.g. 2012-02-28
thisdate = os.path.basename(logfile)[7:-7]
agg_path = os.path.join(datadir, thisdate + '.json')
if not options.recalc and os.path.exists(agg_path):
# Use previously calculated aggregate data
with open(agg_path, 'r') as f:
today = json.load(f)
else:
# Calculate from logs...
today = {
'apps': Counter(),
'appsver': Counter(),
'unknown': []
}
p = subprocess.Popen(["zcat", logfile], stdout=subprocess.PIPE)
matches = (logsearch(line) for line in p.stdout)
for match in matches:
if not match:
continue
if match.group('statuscode') != '200':
continue
if match.group('ip') in config['stats_ignore']:
continue
uri = match.group('uri')
if not uri.endswith('.apk'):
continue
_ignored, apkname = os.path.split(uri)
app = knownapks.getapp(apkname)
if app:
appid, _ignored = app
today['apps'][appid] += 1
# Strip the '.apk' from apkname
appver = apkname[:-4]
today['appsver'][appver] += 1
else:
if apkname not in today['unknown']:
today['unknown'].append(apkname)
# Save calculated aggregate data for today to cache
with open(agg_path, 'w') as f:
json.dump(today, f)
# Add today's stats (whether cached or recalculated) to the total
for appid in today['apps']:
appscount[appid] += today['apps'][appid]
for appid in today['appsver']:
appsvercount[appid] += today['appsver'][appid]
for uk in today['unknown']:
if uk not in unknownapks:
unknownapks.append(uk)
# Calculate and write stats for total downloads...
lst = []
alldownloads = 0
for appid in appscount:
count = appscount[appid]
lst.append(appid + " " + str(count))
if config['stats_to_carbon']:
carbon_send('fdroid.download.' + appid.replace('.', '_'),
count)
alldownloads += count
lst.append("ALL " + str(alldownloads))
with open(os.path.join(statsdir, 'total_downloads_app.txt'), 'w') as f:
f.write('# Total downloads by application, since October 2011\n')
for line in sorted(lst):
f.write(line + '\n')
lst = []
for appver in appsvercount:
count = appsvercount[appver]
lst.append(appver + " " + str(count))
with open(os.path.join(statsdir, 'total_downloads_app_version.txt'), 'w') as f:
f.write('# Total downloads by application and version, '
'since October 2011\n')
for line in sorted(lst):
f.write(line + "\n")
# Calculate and write stats for repo types...
logging.info("Processing repo types...")
repotypes = Counter()
for app in metaapps:
rtype = app.RepoType or 'none'
if rtype == 'srclib':
rtype = common.getsrclibvcs(app.Repo)
repotypes[rtype] += 1
with open(os.path.join(statsdir, 'repotypes.txt'), 'w') as f:
for rtype, count in most_common_stable(repotypes):
f.write(rtype + ' ' + str(count) + '\n')
# Calculate and write stats for update check modes...
logging.info("Processing update check modes...")
ucms = Counter()
for app in metaapps:
checkmode = app.UpdateCheckMode
if checkmode.startswith('RepoManifest/'):
checkmode = checkmode[:12]
if checkmode.startswith('Tags '):
checkmode = checkmode[:4]
ucms[checkmode] += 1
with open(os.path.join(statsdir, 'update_check_modes.txt'), 'w') as f:
for checkmode, count in most_common_stable(ucms):
f.write(checkmode + ' ' + str(count) + '\n')
logging.info("Processing categories...")
ctgs = Counter()
for app in metaapps:
for category in app.Categories:
ctgs[category] += 1
with open(os.path.join(statsdir, 'categories.txt'), 'w') as f:
for category, count in most_common_stable(ctgs):
f.write(category + ' ' + str(count) + '\n')
logging.info("Processing antifeatures...")
afs = Counter()
for app in metaapps:
if app.AntiFeatures is None:
continue
for antifeature in app.AntiFeatures:
afs[antifeature] += 1
with open(os.path.join(statsdir, 'antifeatures.txt'), 'w') as f:
for antifeature, count in most_common_stable(afs):
f.write(antifeature + ' ' + str(count) + '\n')
# Calculate and write stats for licenses...
logging.info("Processing licenses...")
licenses = Counter()
for app in metaapps:
license = app.License
licenses[license] += 1
with open(os.path.join(statsdir, 'licenses.txt'), 'w') as f:
for license, count in most_common_stable(licenses):
f.write(license + ' ' + str(count) + '\n')
# Write list of disabled apps...
logging.info("Processing disabled apps...")
disabled = [app.id for app in allmetaapps if app.Disabled]
with open(os.path.join(statsdir, 'disabled_apps.txt'), 'w') as f:
for appid in sorted(disabled):
f.write(appid + '\n')
# Write list of latest apps added to the repo...
logging.info("Processing latest apps...")
latest = knownapks.getlatest(10)
with open(os.path.join(statsdir, 'latestapps.txt'), 'w') as f:
for appid in latest:
f.write(appid + '\n')
if unknownapks:
logging.info('\nUnknown apks:')
for apk in unknownapks:
logging.info(apk)
logging.info(_("Finished"))
if __name__ == "__main__":
main()

View file

@ -1,23 +1,24 @@
#!/usr/bin/env python
'''
Python-Tail - Unix tail follow implementation in Python.
"""Python-Tail - Unix tail follow implementation in Python.
python-tail can be used to monitor changes to a file.
Example:
import tail
# Create a tail instance
t = tail.Tail('file-to-be-followed')
# Register a callback function to be called when a new line is found in the followed file.
# If no callback function is registerd, new lines would be printed to standard out.
t.register_callback(callback_function)
# Follow the file with 5 seconds as sleep time between iterations.
# If sleep time is not provided 1 second is used as the default time.
t.follow(s=5) '''
Example
-------
>>> import tail
>>>
>>> # Create a tail instance
>>> t = tail.Tail('file-to-be-followed')
>>>
>>> # Register a callback function to be called when a new line is found in the followed file.
>>> # If no callback function is registerd, new lines would be printed to standard out.
>>> t.register_callback(callback_function)
>>>
>>> # Follow the file with 5 seconds as sleep time between iterations.
>>> # If sleep time is not provided 1 second is used as the default time.
>>> t.follow(s=5)
"""
# Author - Kasun Herath <kasunh01 at gmail.com>
# Source - https://github.com/kasun/python-tail
@ -27,46 +28,54 @@ Example:
import os
import sys
import time
import threading
import time
class Tail(object):
''' Represents a tail command. '''
"""Represents a tail command."""
def __init__(self, tailed_file):
''' Initiate a Tail instance.
Check for file validity, assigns callback function to standard out.
"""Initialize a Tail instance.
Arguments:
tailed_file - File to be followed. '''
Check for file validity, assigns callback function to standard out.
Parameters
----------
tailed_file
File to be followed.
"""
self.check_file_validity(tailed_file)
self.tailed_file = tailed_file
self.callback = sys.stdout.write
self.t_stop = threading.Event()
def start(self, s=1):
'''Start tailing a file in a background thread.
Arguments:
s - Number of seconds to wait between each iteration; Defaults to 3.
'''
"""Start tailing a file in a background thread.
Parameters
----------
s
Number of seconds to wait between each iteration; Defaults to 3.
"""
t = threading.Thread(target=self.follow, args=(s,))
t.start()
def stop(self):
'''Stop a background tail.
'''
"""Stop a background tail."""
self.t_stop.set()
def follow(self, s=1):
''' Do a tail follow. If a callback function is registered it is called with every new line.
"""Do a tail follow.
If a callback function is registered it is called with every new line.
Else printed to standard out.
Arguments:
s - Number of seconds to wait between each iteration; Defaults to 1. '''
Parameters
----------
s
Number of seconds to wait between each iteration; Defaults to 1.
"""
with open(self.tailed_file) as file_:
# Go to the end of file
file_.seek(0, 2)
@ -81,11 +90,11 @@ class Tail(object):
time.sleep(s)
def register_callback(self, func):
''' Overrides default callback function to provided function. '''
"""Override default callback function to provided function."""
self.callback = func
def check_file_validity(self, file_):
''' Check whether the a given file exists, readable and is a file '''
"""Check whether the a given file exists, readable and is a file."""
if not os.access(file_, os.F_OK):
raise TailError("File '%s' does not exist" % (file_))
if not os.access(file_, os.R_OK):
@ -95,8 +104,8 @@ class Tail(object):
class TailError(Exception):
def __init__(self, msg):
super().__init__()
self.message = msg
def __str__(self):

File diff suppressed because it is too large Load diff

View file

@ -16,119 +16,207 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import os
import glob
import json
import logging
import requests
import os
import sys
from argparse import ArgumentParser
from collections import OrderedDict
from . import _
from . import common
from . import net
from . import update
import requests
from . import _, common, net
from .exception import FDroidException
options = None
config = None
class hashabledict(OrderedDict):
def __key(self):
return tuple((k, self[k]) for k in sorted(self))
def _add_diffoscope_info(d):
"""Add diffoscope setup metadata to provided dict under 'diffoscope' key.
def __hash__(self):
return hash(self.__key())
The imports are broken out at stages since various versions of
diffoscope support various parts of these.
def __eq__(self, other):
return self.__key() == other.__key()
"""
try:
import diffoscope
def __lt__(self, other):
return self.__key() < other.__key()
d['diffoscope'] = dict()
d['diffoscope']['VERSION'] = diffoscope.VERSION
def __qt__(self, other):
return self.__key() > other.__key()
from diffoscope.comparators import ComparatorManager
ComparatorManager().reload()
from diffoscope.tools import tool_check_installed, tool_required
external_tools = sorted(tool_required.all)
external_tools = [
tool for tool in external_tools if not tool_check_installed(tool)
]
d['diffoscope']['External-Tools-Required'] = external_tools
from diffoscope.external_tools import EXTERNAL_TOOLS
from diffoscope.tools import OS_NAMES, get_current_os
current_os = get_current_os()
os_list = [current_os] if (current_os in OS_NAMES) else iter(OS_NAMES)
for os_ in os_list:
tools = set()
for x in external_tools:
try:
tools.add(EXTERNAL_TOOLS[x][os_])
except KeyError:
pass
tools = sorted(tools)
d['diffoscope']['Available-in-{}-packages'.format(OS_NAMES[os_])] = tools
from diffoscope.tools import python_module_missing as pmm
d['diffoscope']['Missing-Python-Modules'] = sorted(pmm.modules)
except ImportError:
pass
class Decoder(json.JSONDecoder):
def __init__(self, **kwargs):
json.JSONDecoder.__init__(self, **kwargs)
self.parse_array = self.JSONArray
# Use the python implemenation of the scanner
self.scan_once = json.scanner.py_make_scanner(self)
def get_verified_json(path):
"""Get the full collection of reports that is written out to verified.json."""
if os.path.exists(path):
try:
with open(path) as fp:
return json.load(fp)
except Exception as e:
logging.info(f'{path}: {e}')
def JSONArray(self, s_and_end, scan_once, **kwargs):
values, end = json.decoder.JSONArray(s_and_end, scan_once, **kwargs)
return set(values), end
data = OrderedDict()
data['packages'] = OrderedDict()
for f in glob.glob(os.path.join(os.path.dirname(path), '*.apk.json')):
with open(f) as fp:
reports = json.load(fp)
for report in reports.values():
packageName = report['local']['packageName']
if packageName not in data['packages']:
data['packages'][packageName] = []
data['packages'][packageName].append(report)
return data
def write_json_report(url, remote_apk, unsigned_apk, compare_result):
"""write out the results of the verify run to JSON
"""Write out the results of the verify run to JSON.
This builds up reports on the repeated runs of `fdroid verify` on
a set of apps. It uses the timestamps on the compared files to
ensure that there is only one report per file, even when run
repeatedly.
"""
The output is run through JSON to normalize things like tuples vs
lists.
"""
jsonfile = unsigned_apk + '.json'
if os.path.exists(jsonfile):
with open(jsonfile) as fp:
data = json.load(fp, object_pairs_hook=OrderedDict)
else:
data = OrderedDict()
output = hashabledict()
output = dict()
_add_diffoscope_info(output)
output['url'] = url
for key, filename in (('local', unsigned_apk), ('remote', remote_apk)):
d = hashabledict()
d = dict()
output[key] = d
d['file'] = filename
d['sha256'] = update.sha256sum(filename)
d['sha256'] = common.sha256sum(filename)
d['timestamp'] = os.stat(filename).st_ctime
d['packageName'], d['versionCode'], d['versionName'] = common.get_apk_id(filename)
d['packageName'], d['versionCode'], d['versionName'] = common.get_apk_id(
filename
)
if compare_result:
output['verified'] = False
output['result'] = compare_result
else:
output['verified'] = True
data[str(output['local']['timestamp'])] = output # str makes better dict keys than float
# str makes better dict keys than float
data[str(output['local']['timestamp'])] = output
with open(jsonfile, 'w') as fp:
json.dump(data, fp, sort_keys=True)
appid, version_code = os.path.basename(unsigned_apk[:-4]).rsplit('_', 1)
appid_base = unsigned_apk.rsplit('_', 1)[0]
apkReports = sorted(
glob.glob(f'{appid_base}_[0-9]*.json'), # don't include <appid>.json
key=lambda s: int(s[:-9].rsplit('_', 1)[1]), # numeric sort by versionCode
)
with open(apkReports[-1]) as fp:
reports = json.load(fp)
appid_output = {'apkReports': apkReports}
most_recent = 0
for report_time, run in reports.items():
if float(report_time) > most_recent:
most_recent = float(report_time)
appid_output['lastRunVerified'] = run['verified']
with open(f'{appid_base}.json', 'w') as fp:
json.dump(appid_output, fp, cls=common.Encoder, sort_keys=True)
if output['verified']:
jsonfile = 'unsigned/verified.json'
if os.path.exists(jsonfile):
with open(jsonfile) as fp:
data = json.load(fp, cls=Decoder, object_pairs_hook=hashabledict)
else:
data = OrderedDict()
data['packages'] = OrderedDict()
packageName = output['local']['packageName']
if packageName not in data['packages']:
data['packages'][packageName] = set()
data['packages'][packageName].add(output)
with open(jsonfile, 'w') as fp:
json.dump(data, fp, cls=common.Encoder, sort_keys=True)
write_verified_json(output)
def write_verified_json(output):
jsonfile = 'unsigned/verified.json'
data = get_verified_json(jsonfile)
packageName = output['local']['packageName']
if packageName not in data['packages']:
data['packages'][packageName] = []
found = False
output_dump = json.dumps(output, sort_keys=True)
for p in data['packages'][packageName]:
if output_dump == json.dumps(p, sort_keys=True):
found = True
break
if not found:
data['packages'][packageName].insert(0, json.loads(output_dump))
with open(jsonfile, 'w') as fp:
json.dump(data, fp, cls=common.Encoder, sort_keys=True)
def main():
global options, config
global config
# Parse command line...
parser = ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]")
parser = ArgumentParser(
usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]"
)
common.setup_global_opts(parser)
parser.add_argument("appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"))
parser.add_argument("--reuse-remote-apk", action="store_true", default=False,
help=_("Verify against locally cached copy rather than redownloading."))
parser.add_argument("--output-json", action="store_true", default=False,
help=_("Output JSON report to file named after APK."))
options = parser.parse_args()
parser.add_argument(
"appid",
nargs='*',
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"),
)
parser.add_argument(
"--clean-up-verified",
action="store_true",
default=False,
help=_("Remove source tarball and any APKs if successfully verified."),
)
parser.add_argument(
"--reuse-remote-apk",
action="store_true",
default=False,
help=_("Verify against locally cached copy rather than redownloading."),
)
parser.add_argument(
"--output-json",
action="store_true",
default=False,
help=_("Output JSON report to file named after APK."),
)
options = common.parse_args(parser)
config = common.read_config(options)
config = common.read_config()
tmp_dir = 'tmp'
if not os.path.isdir(tmp_dir):
@ -140,13 +228,13 @@ def main():
logging.error(_("No unsigned directory - nothing to do"))
sys.exit(0)
processed = set()
verified = 0
notverified = 0
vercodes = common.read_pkg_args(options.appid, True)
for apkfile in sorted(glob.glob(os.path.join(unsigned_dir, '*.apk'))):
apkfilename = os.path.basename(apkfile)
url = 'https://f-droid.org/repo/' + apkfilename
appid, vercode = common.publishednameinfo(apkfile)
@ -156,8 +244,9 @@ def main():
if vercodes[appid] and vercode not in vercodes[appid]:
continue
try:
processed.add(appid)
try:
logging.info("Processing {apkfilename}".format(apkfilename=apkfilename))
remote_apk = os.path.join(tmp_dir, apkfilename)
@ -169,18 +258,37 @@ def main():
net.download_file(url, dldir=tmp_dir)
except requests.exceptions.HTTPError:
try:
net.download_file(url.replace('/repo', '/archive'), dldir=tmp_dir)
net.download_file(
url.replace('/repo', '/archive'), dldir=tmp_dir
)
except requests.exceptions.HTTPError as e:
raise FDroidException(_('Downloading {url} failed. {error}')
.format(url=url, error=e))
raise FDroidException(
_('Downloading {url} failed. {error}').format(
url=url, error=e
)
) from e
unsigned_apk = os.path.join(unsigned_dir, apkfilename)
compare_result = common.verify_apks(remote_apk, unsigned_apk, tmp_dir)
compare_result = common.verify_apks(
remote_apk,
unsigned_apk,
tmp_dir,
clean_up_verified=options.clean_up_verified,
)
if options.output_json:
write_json_report(url, remote_apk, unsigned_apk, compare_result)
if compare_result:
raise FDroidException(compare_result)
if options.clean_up_verified:
src_tarball = os.path.join(
unsigned_dir, common.get_src_tarball_name(appid, vercode)
)
for f in (remote_apk, unsigned_apk, src_tarball):
if os.path.exists(f):
logging.info(f"...cleaned up {f} after successful verification")
os.remove(f)
logging.info("...successfully verified")
verified += 1
@ -188,6 +296,12 @@ def main():
logging.info("...NOT verified - {0}".format(e))
notverified += 1
for appid in options.appid:
package = appid.split(":")[0]
if package not in processed:
logging.critical(_("No APK for package: %s") % package)
notverified += 1
if verified > 0:
logging.info("{0} successfully verified".format(verified))
if notverified > 0:

View file

@ -16,19 +16,16 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from os.path import isdir, isfile, basename, abspath, expanduser
import os
import math
import json
import tarfile
import logging
import os
import shutil
import subprocess
import textwrap
import logging
from .common import FDroidException
from fdroidserver import _
import threading
from os.path import abspath, basename, expanduser, isdir, isfile
from .common import FDroidException
lock = threading.Lock()
@ -41,15 +38,19 @@ def get_clean_builder(serverdir):
os.makedirs(serverdir)
vagrantfile = os.path.join(serverdir, 'Vagrantfile')
if not os.path.isfile(vagrantfile):
with open(os.path.join('builder', 'Vagrantfile'), 'w') as f:
f.write(textwrap.dedent("""\
with open(vagrantfile, 'w') as f:
f.write(
textwrap.dedent(
"""\
# generated file, do not change.
Vagrant.configure("2") do |config|
config.vm.box = "buildserver"
config.vm.synced_folder ".", "/vagrant", disabled: true
end
"""))
"""
)
)
vm = get_build_vm(serverdir)
logging.info('destroying buildserver before build')
vm.destroy()
@ -79,15 +80,24 @@ def _check_output(cmd, cwd=None):
def get_build_vm(srvdir, provider=None):
"""Factory function for getting FDroidBuildVm instances.
"""No summary.
Factory function for getting FDroidBuildVm instances.
This function tries to figure out what hypervisor should be used
and creates an object for controlling a build VM.
:param srvdir: path to a directory which contains a Vagrantfile
:param provider: optionally this parameter allows specifiying an
specific vagrant provider.
:returns: FDroidBuildVm instance.
Parameters
----------
srvdir
path to a directory which contains a Vagrantfile
provider
optionally this parameter allows specifiying an
specific vagrant provider.
Returns
-------
FDroidBuildVm instance.
"""
abssrvdir = abspath(srvdir)
@ -110,25 +120,37 @@ def get_build_vm(srvdir, provider=None):
if kvm_installed and vbox_installed:
logging.debug('both kvm and vbox are installed.')
elif kvm_installed:
logging.debug('libvirt is the sole installed and supported vagrant provider, selecting \'libvirt\'')
logging.debug(
'libvirt is the sole installed and supported vagrant provider, selecting \'libvirt\''
)
return LibvirtBuildVm(abssrvdir)
elif vbox_installed:
logging.debug('virtualbox is the sole installed and supported vagrant provider, selecting \'virtualbox\'')
logging.debug(
'virtualbox is the sole installed and supported vagrant provider, selecting \'virtualbox\''
)
return VirtualboxBuildVm(abssrvdir)
else:
logging.debug('could not confirm that either virtualbox or kvm/libvirt are installed')
logging.debug(
'could not confirm that either virtualbox or kvm/libvirt are installed'
)
# try guessing provider from .../srvdir/.vagrant internals
vagrant_libvirt_path = os.path.join(abssrvdir, '.vagrant', 'machines',
'default', 'libvirt')
has_libvirt_machine = isdir(vagrant_libvirt_path) \
and len(os.listdir(vagrant_libvirt_path)) > 0
vagrant_virtualbox_path = os.path.join(abssrvdir, '.vagrant', 'machines',
'default', 'virtualbox')
has_vbox_machine = isdir(vagrant_virtualbox_path) \
and len(os.listdir(vagrant_virtualbox_path)) > 0
vagrant_libvirt_path = os.path.join(
abssrvdir, '.vagrant', 'machines', 'default', 'libvirt'
)
has_libvirt_machine = (
isdir(vagrant_libvirt_path) and len(os.listdir(vagrant_libvirt_path)) > 0
)
vagrant_virtualbox_path = os.path.join(
abssrvdir, '.vagrant', 'machines', 'default', 'virtualbox'
)
has_vbox_machine = (
isdir(vagrant_virtualbox_path) and len(os.listdir(vagrant_virtualbox_path)) > 0
)
if has_libvirt_machine and has_vbox_machine:
logging.info('build vm provider lookup found virtualbox and libvirt, defaulting to \'virtualbox\'')
logging.info(
'build vm provider lookup found virtualbox and libvirt, defaulting to \'virtualbox\''
)
return VirtualboxBuildVm(abssrvdir)
elif has_libvirt_machine:
logging.debug('build vm provider lookup found \'libvirt\'')
@ -140,12 +162,15 @@ def get_build_vm(srvdir, provider=None):
# try guessing provider from available buildserver boxes
available_boxes = []
import vagrant
boxes = vagrant.Vagrant().box_list()
for box in boxes:
if box.name == "buildserver":
available_boxes.append(box.provider)
if "libvirt" in available_boxes and "virtualbox" in available_boxes:
logging.info('basebox lookup found virtualbox and libvirt boxes, defaulting to \'virtualbox\'')
logging.info(
'basebox lookup found virtualbox and libvirt boxes, defaulting to \'virtualbox\''
)
return VirtualboxBuildVm(abssrvdir)
elif "libvirt" in available_boxes:
logging.info('\'libvirt\' buildserver box available, using that')
@ -162,7 +187,7 @@ class FDroidBuildVmException(FDroidException):
pass
class FDroidBuildVm():
class FDroidBuildVm:
"""Abstract base class for working with FDroids build-servers.
Use the factory method `fdroidserver.vmtools.get_build_vm()` for
@ -171,19 +196,27 @@ class FDroidBuildVm():
This is intended to be a hypervisor independent, fault tolerant
wrapper around the vagrant functions we use.
"""
def __init__(self, srvdir):
"""Create new server class.
"""
def __init__(self, srvdir, provider=None):
"""Create new server class."""
self.provider = provider
self.srvdir = srvdir
self.srvname = basename(srvdir) + '_default'
self.vgrntfile = os.path.join(srvdir, 'Vagrantfile')
self.srvuuid = self._vagrant_fetch_uuid()
if not isdir(srvdir):
raise FDroidBuildVmException("Can not init vagrant, directory %s not present" % (srvdir))
raise FDroidBuildVmException(
"Can not init vagrant, directory %s not present" % (srvdir)
)
if not isfile(self.vgrntfile):
raise FDroidBuildVmException("Can not init vagrant, '%s' not present" % (self.vgrntfile))
raise FDroidBuildVmException(
"Can not init vagrant, '%s' not present" % (self.vgrntfile)
)
import vagrant
self.vgrnt = vagrant.Vagrant(root=srvdir, out_cm=vagrant.stdout_cm, err_cm=vagrant.stdout_cm)
self.vgrnt = vagrant.Vagrant(
root=srvdir, out_cm=vagrant.stdout_cm, err_cm=vagrant.stdout_cm
)
def up(self, provision=True):
global lock
@ -248,11 +281,8 @@ class FDroidBuildVm():
except subprocess.CalledProcessError as e:
logging.debug('pruning global vagrant status failed: %s', e)
def package(self, output=None):
self.vgrnt.package(output=output)
def vagrant_uuid_okay(self):
'''Having an uuid means that vagrant up has run successfully.'''
"""Having an uuid means that vagrant up has run successfully."""
if self.srvuuid is None:
return False
return True
@ -282,13 +312,20 @@ class FDroidBuildVm():
def box_add(self, boxname, boxfile, force=True):
"""Add vagrant box to vagrant.
:param boxname: name assigned to local deployment of box
:param boxfile: path to box file
:param force: overwrite existing box image (default: True)
Parameters
----------
boxname
name assigned to local deployment of box
boxfile
path to box file
force
overwrite existing box image (default: True)
"""
boxfile = abspath(boxfile)
if not isfile(boxfile):
raise FDroidBuildVmException('supplied boxfile \'%s\' does not exist', boxfile)
raise FDroidBuildVmException(
'supplied boxfile \'%s\' does not exist' % boxfile
)
self.vgrnt.box_add(boxname, abspath(boxfile), force=force)
def box_remove(self, boxname):
@ -296,25 +333,28 @@ class FDroidBuildVm():
_check_call(['vagrant', 'box', 'remove', '--all', '--force', boxname])
except subprocess.CalledProcessError as e:
logging.debug('tried removing box %s, but is did not exist: %s', boxname, e)
boxpath = os.path.join(expanduser('~'), '.vagrant',
self._vagrant_file_name(boxname))
boxpath = os.path.join(
expanduser('~'), '.vagrant', self._vagrant_file_name(boxname)
)
if isdir(boxpath):
logging.info("attempting to remove box '%s' by deleting: %s",
boxname, boxpath)
logging.info(
"attempting to remove box '%s' by deleting: %s", boxname, boxpath
)
shutil.rmtree(boxpath)
def sshinfo(self):
"""Get ssh connection info for a vagrant VM
"""Get ssh connection info for a vagrant VM.
:returns: A dictionary containing 'hostname', 'port', 'user'
and 'idfile'
Returns
-------
A dictionary containing 'hostname', 'port', 'user' and 'idfile'
"""
import paramiko
try:
sshconfig_path = os.path.join(self.srvdir, 'sshconfig')
with open(sshconfig_path, 'wb') as fp:
fp.write(_check_output(['vagrant', 'ssh-config'],
cwd=self.srvdir))
fp.write(_check_output(['vagrant', 'ssh-config'], cwd=self.srvdir))
vagranthost = 'default' # Host in ssh config file
sshconfig = paramiko.SSHConfig()
with open(sshconfig_path, 'r') as f:
@ -325,36 +365,25 @@ class FDroidBuildVm():
idfile = idfile[0]
elif idfile.startswith('"') and idfile.endswith('"'):
idfile = idfile[1:-1]
return {'hostname': sshconfig['hostname'],
'port': int(sshconfig['port']),
'user': sshconfig['user'],
'idfile': idfile}
return {
'hostname': sshconfig['hostname'],
'port': int(sshconfig['port']),
'user': sshconfig['user'],
'idfile': idfile,
}
except subprocess.CalledProcessError as e:
raise FDroidBuildVmException("Error getting ssh config") from e
def snapshot_create(self, snapshot_name):
raise NotImplementedError('not implemented, please use a sub-type instance')
def snapshot_list(self):
raise NotImplementedError('not implemented, please use a sub-type instance')
def snapshot_exists(self, snapshot_name):
raise NotImplementedError('not implemented, please use a sub-type instance')
def snapshot_revert(self, snapshot_name):
raise NotImplementedError('not implemented, please use a sub-type instance')
class LibvirtBuildVm(FDroidBuildVm):
def __init__(self, srvdir):
self.provider = 'libvirt'
super().__init__(srvdir)
super().__init__(srvdir, 'libvirt')
import libvirt
try:
self.conn = libvirt.open('qemu:///system')
except libvirt.libvirtError as e:
raise FDroidBuildVmException('could not connect to libvirtd: %s' % (e))
raise FDroidBuildVmException('could not connect to libvirtd: %s' % (e)) from e
def destroy(self):
@ -374,84 +403,6 @@ class LibvirtBuildVm(FDroidBuildVm):
except subprocess.CalledProcessError as e:
logging.info("could not undefine libvirt domain '%s': %s", self.srvname, e)
def package(self, output=None, keep_box_file=False):
if not output:
output = "buildserver.box"
logging.debug("no output name set for packaging '%s', "
"defaulting to %s", self.srvname, output)
storagePool = self.conn.storagePoolLookupByName('default')
domainInfo = self.conn.lookupByName(self.srvname).info()
if storagePool:
if isfile('metadata.json'):
os.remove('metadata.json')
if isfile('Vagrantfile'):
os.remove('Vagrantfile')
if isfile('box.img'):
os.remove('box.img')
logging.debug('preparing box.img for box %s', output)
vol = storagePool.storageVolLookupByName(self.srvname + '.img')
imagepath = vol.path()
# TODO use a libvirt storage pool to ensure the img file is readable
if not os.access(imagepath, os.R_OK):
logging.warning(_('Cannot read "{path}"!').format(path=imagepath))
_check_call(['sudo', '/bin/chmod', '-R', 'a+rX', '/var/lib/libvirt/images'])
shutil.copy2(imagepath, 'box.img')
_check_call(['qemu-img', 'rebase', '-p', '-b', '', 'box.img'])
img_info_raw = _check_output(['qemu-img', 'info', '--output=json', 'box.img'])
img_info = json.loads(img_info_raw.decode('utf-8'))
metadata = {"provider": "libvirt",
"format": img_info['format'],
"virtual_size": math.ceil(img_info['virtual-size'] / (1024. ** 3)),
}
logging.debug('preparing metadata.json for box %s', output)
with open('metadata.json', 'w') as fp:
fp.write(json.dumps(metadata))
logging.debug('preparing Vagrantfile for box %s', output)
vagrantfile = textwrap.dedent("""\
Vagrant.configure("2") do |config|
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
config.vm.provider :libvirt do |libvirt|
libvirt.driver = "kvm"
libvirt.host = ""
libvirt.connect_via_ssh = false
libvirt.storage_pool_name = "default"
libvirt.cpus = {cpus}
libvirt.memory = {memory}
end
end""".format_map({'memory': str(int(domainInfo[1] / 1024)), 'cpus': str(domainInfo[3])}))
with open('Vagrantfile', 'w') as fp:
fp.write(vagrantfile)
try:
import libarchive
with libarchive.file_writer(output, 'gnutar', 'gzip') as tar:
logging.debug('adding files to box %s ...', output)
tar.add_files('metadata.json', 'Vagrantfile', 'box.img')
except (ImportError, AttributeError):
with tarfile.open(output, 'w:gz') as tar:
logging.debug('adding metadata.json to box %s ...', output)
tar.add('metadata.json')
logging.debug('adding Vagrantfile to box %s ...', output)
tar.add('Vagrantfile')
logging.debug('adding box.img to box %s ...', output)
tar.add('box.img')
if not keep_box_file:
logging.debug('box packaging complete, removing temporary files.')
os.remove('metadata.json')
os.remove('Vagrantfile')
os.remove('box.img')
else:
logging.warning("could not connect to storage-pool 'default', "
"skip packaging buildserver box")
def box_add(self, boxname, boxfile, force=True):
boximg = '%s_vagrant_box_image_0.img' % (boxname)
if force:
@ -472,82 +423,8 @@ class LibvirtBuildVm(FDroidBuildVm):
except subprocess.CalledProcessError as e:
logging.debug("tried removing '%s', file was not present in first place", boxname, exc_info=e)
def snapshot_create(self, snapshot_name):
logging.info("creating snapshot '%s' for vm '%s'", snapshot_name, self.srvname)
try:
_check_call(['virsh', '-c', 'qemu:///system', 'snapshot-create-as', self.srvname, snapshot_name])
except subprocess.CalledProcessError as e:
raise FDroidBuildVmException("could not create snapshot '%s' "
"of libvirt vm '%s'"
% (snapshot_name, self.srvname)) from e
def snapshot_list(self):
import libvirt
try:
dom = self.conn.lookupByName(self.srvname)
return dom.listAllSnapshots()
except libvirt.libvirtError as e:
raise FDroidBuildVmException('could not list snapshots for domain \'%s\'' % self.srvname) from e
def snapshot_exists(self, snapshot_name):
import libvirt
try:
dom = self.conn.lookupByName(self.srvname)
return dom.snapshotLookupByName(snapshot_name) is not None
except libvirt.libvirtError:
return False
def snapshot_revert(self, snapshot_name):
logging.info("reverting vm '%s' to snapshot '%s'", self.srvname, snapshot_name)
import libvirt
try:
dom = self.conn.lookupByName(self.srvname)
snap = dom.snapshotLookupByName(snapshot_name)
dom.revertToSnapshot(snap)
except libvirt.libvirtError as e:
raise FDroidBuildVmException('could not revert domain \'%s\' to snapshot \'%s\''
% (self.srvname, snapshot_name)) from e
class VirtualboxBuildVm(FDroidBuildVm):
def __init__(self, srvdir):
self.provider = 'virtualbox'
super().__init__(srvdir)
def snapshot_create(self, snapshot_name):
logging.info("creating snapshot '%s' for vm '%s'", snapshot_name, self.srvname)
try:
_check_call(['VBoxManage', 'snapshot', self.srvuuid, 'take', 'fdroidclean'], cwd=self.srvdir)
except subprocess.CalledProcessError as e:
raise FDroidBuildVmException('could not cerate snapshot '
'of virtualbox vm %s'
% self.srvname) from e
def snapshot_list(self):
try:
o = _check_output(['VBoxManage', 'snapshot',
self.srvuuid, 'list',
'--details'], cwd=self.srvdir)
return o
except subprocess.CalledProcessError as e:
raise FDroidBuildVmException("could not list snapshots "
"of virtualbox vm '%s'"
% (self.srvname)) from e
def snapshot_exists(self, snapshot_name):
try:
return str(snapshot_name) in str(self.snapshot_list())
except FDroidBuildVmException:
return False
def snapshot_revert(self, snapshot_name):
logging.info("reverting vm '%s' to snapshot '%s'",
self.srvname, snapshot_name)
try:
_check_call(['VBoxManage', 'snapshot', self.srvuuid,
'restore', 'fdroidclean'], cwd=self.srvdir)
except subprocess.CalledProcessError as e:
raise FDroidBuildVmException("could not load snapshot "
"'fdroidclean' for vm '%s'"
% (self.srvname)) from e
super().__init__(srvdir, 'virtualbox')

View file

@ -1,240 +0,0 @@
#!/bin/bash
bindir="$(dirname $0)"
basedir="$(dirname $bindir)"
# Check if GRADLE_VERSION_DIR/CACHEDIR is set from environment
if [ -z "$GRADLE_VERSION_DIR" ]; then
gradle_version_dir="${basedir}/versions"
else
gradle_version_dir="$GRADLE_VERSION_DIR"
fi
if [ -n "$CACHEDIR" ]; then
cachedir="$CACHEDIR"
fi
args=("$@")
run_gradle() {
if [ ! -d "${gradle_version_dir}/${v_found}" ]; then
download_gradle ${v_found}
fi
echo "Running ${gradle_version_dir}/${v_found}/bin/gradle ${args[@]}"
"${gradle_version_dir}/${v_found}/bin/gradle" "${args[@]}"
exit $?
}
download_gradle() {
URL="https://downloads.gradle.org/distributions/gradle-${1}-bin.zip"
shasum=$(get_sha $1)
if [ $? != 0 ]; then
echo "No hash for gradle version $1! Exiting..."
exit 1
fi
if [ -n "${cachedir}" ] && [ -e "${cachedir}/gradle-$1-bin.zip" ]; then
echo "Using cached ${cachedir}/gradle-$1-bin.zip ..."
gradle_zip="${cachedir}/gradle-$1-bin.zip"
else
echo "Downloading missing gradle version $1"
if [ -n "${cachedir}" ]; then
tmpdir="${cachedir}"
if [ ! -d ${tmpdir} ]; then
mkdir -p "${cachedir}"
fi
else
tmpdir=$(mktemp -d)
fi
curl -o "${tmpdir}/gradle-$1-bin.zip" --silent --fail --show-error --location "${URL}"
gradle_zip="${tmpdir}/gradle-$1-bin.zip"
fi
echo "${shasum} ${gradle_zip}" | sha256sum -c -
if [ $? != 0 ]; then
echo "gradle download checksum mismatch! Exiting..."
exit 1
fi
mkdir -p "${gradle_version_dir}/"
unzip -q -d "${gradle_version_dir}" "${gradle_zip}"
mv "${gradle_version_dir}/gradle-$1" "${gradle_version_dir}/${v_found}"
}
get_sha() {
case $1 in
'1.4') echo 'cd99e85fbcd0ae8b99e81c9992a2f10cceb7b5f009c3720ef3a0078f4f92e94e' ;;
'1.6') echo 'de3e89d2113923dcc2e0def62d69be0947ceac910abd38b75ec333230183fac4' ;;
'1.7') echo '360c97d51621b5a1ecf66748c718594e5f790ae4fbc1499543e0c006033c9d30' ;;
'1.8') echo 'a342bbfa15fd18e2482287da4959588f45a41b60910970a16e6d97959aea5703' ;;
'1.9') echo '097ddc2bcbc9da2bb08cbf6bf8079585e35ad088bafd42e8716bc96405db98e9' ;;
'1.10') echo '6e6db4fc595f27ceda059d23693b6f6848583950606112b37dfd0e97a0a0a4fe' ;;
'1.11') echo '07e235df824964f0e19e73ea2327ce345c44bcd06d44a0123d29ab287fc34091' ;;
'1.12') echo '8734b13a401f4311ee418173ed6ca8662d2b0a535be8ff2a43ecb1c13cd406ea' ;;
'2.1') echo '3eee4f9ea2ab0221b89f8e4747a96d4554d00ae46d8d633f11cfda60988bf878' ;;
'2.2') echo '91e5655fe11ef414449f218c4fa2985b3a49b7903c57556da109c84fa26e1dfb' ;;
'2.2.1') echo '420aa50738299327b611c10b8304b749e8d3a579407ee9e755b15921d95ff418' ;;
'2.3') echo '010dd9f31849abc3d5644e282943b1c1c355f8e2635c5789833979ce590a3774' ;;
'2.4') echo 'c4eaecc621a81f567ded1aede4a5ddb281cc02a03a6a87c4f5502add8fc2f16f' ;;
'2.5') echo '3f953e0cb14bb3f9ebbe11946e84071547bf5dfd575d90cfe9cc4e788da38555' ;;
'2.6') echo '18a98c560af231dfa0d3f8e0802c20103ae986f12428bb0a6f5396e8f14e9c83' ;;
'2.7') echo 'cde43b90945b5304c43ee36e58aab4cc6fb3a3d5f9bd9449bb1709a68371cb06' ;;
'2.8') echo 'a88db9c2f104defdaa8011c58cf6cda6c114298ae3695ecfb8beb30da3a903cb' ;;
'2.9') echo 'c9159ec4362284c0a38d73237e224deae6139cbde0db4f0f44e1c7691dd3de2f' ;;
'2.10') echo '66406247f745fc6f05ab382d3f8d3e120c339f34ef54b86f6dc5f6efc18fbb13' ;;
'2.11') echo '8d7437082356c9fd6309a4479c8db307673965546daea445c6c72759cd6b1ed6' ;;
'2.12') echo 'e77064981906cd0476ff1e0de3e6fef747bd18e140960f1915cca8ff6c33ab5c' ;;
'2.13') echo '0f665ec6a5a67865faf7ba0d825afb19c26705ea0597cec80dd191b0f2cbb664' ;;
'2.14') echo '993b4f33b652c689e9721917d8e021cab6bbd3eae81b39ab2fd46fdb19a928d5' ;;
'2.14.1') echo 'cfc61eda71f2d12a572822644ce13d2919407595c2aec3e3566d2aab6f97ef39' ;;
'3.0') echo '39c906941a474444afbddc38144ed44166825acb0a57b0551dddb04bbf157f80' ;;
'3.1') echo 'c7de3442432253525902f7e8d7eac8b5fd6ce1623f96d76916af6d0e383010fc' ;;
'3.2') echo '5321b36837226dc0377047a328f12010f42c7bf88ee4a3b1cee0c11040082935' ;;
'3.2.1') echo '9843a3654d3e57dce54db06d05f18b664b95c22bf90c6becccb61fc63ce60689' ;;
'3.3') echo 'c58650c278d8cf0696cab65108ae3c8d95eea9c1938e0eb8b997095d5ca9a292' ;;
'3.4') echo '72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205' ;;
'3.4.1') echo 'db1db193d479cc1202be843f17e4526660cfb0b21b57d62f3a87f88c878af9b2' ;;
'3.5') echo '0b7450798c190ff76b9f9a3d02e18b33d94553f708ebc08ebe09bdf99111d110' ;;
'3.5.1') echo '8dce35f52d4c7b4a4946df73aa2830e76ba7148850753d8b5e94c5dc325ceef8' ;;
'4.0') echo '56bd2dde29ba2a93903c557da1745cafd72cdd8b6b0b83c05a40ed7896b79dfe' ;;
'4.0.1') echo 'd717e46200d1359893f891dab047fdab98784143ac76861b53c50dbd03b44fd4' ;;
'4.0.2') echo '79ac421342bd11f6a4f404e0988baa9c1f5fabf07e3c6fa65b0c15c1c31dda22' ;;
'4.1') echo 'd55dfa9cfb5a3da86a1c9e75bb0b9507f9a8c8c100793ccec7beb6e259f9ed43' ;;
'4.2') echo '515dd63d32e55a9c05667809c5e40a947529de3054444ad274b3b75af5582eae' ;;
'4.2.1') echo 'b551cc04f2ca51c78dd14edb060621f0e5439bdfafa6fd167032a09ac708fbc0' ;;
'4.3') echo '8dcbf44eef92575b475dcb1ce12b5f19d38dc79e84c662670248dc8b8247654c' ;;
'4.3.1') echo '15ebe098ce0392a2d06d252bff24143cc88c4e963346582c8d88814758d93ac7' ;;
'4.4') echo 'fa4873ae2c7f5e8c02ec6948ba95848cedced6134772a0169718eadcb39e0a2f' ;;
'4.4.1') echo 'e7cf7d1853dfc30c1c44f571d3919eeeedef002823b66b6a988d27e919686389' ;;
'4.5') echo '03f2a43a314ff0fb843a85ef68078e06d181c4549c1e5fb983f289382b59b5e3' ;;
'4.5.1') echo '3e2ea0d8b96605b7c528768f646e0975bd9822f06df1f04a64fd279b1a17805e' ;;
'4.6') echo '98bd5fd2b30e070517e03c51cbb32beee3e2ee1a84003a5a5d748996d4b1b915' ;;
'4.7') echo 'fca5087dc8b50c64655c000989635664a73b11b9bd3703c7d6cabd31b7dcdb04' ;;
'4.8') echo 'f3e29692a8faa94eb0b02ebf36fa263a642b3ae8694ef806c45c345b8683f1ba' ;;
'4.8.1') echo 'af334d994b5e69e439ab55b5d2b7d086da5ea6763d78054f49f147b06370ed71' ;;
'4.9') echo 'e66e69dce8173dd2004b39ba93586a184628bc6c28461bc771d6835f7f9b0d28' ;;
'4.10') echo '248cfd92104ce12c5431ddb8309cf713fe58de8e330c63176543320022f59f18' ;;
'4.10.1') echo 'e53ce3a01cf016b5d294eef20977ad4e3c13e761ac1e475f1ffad4c6141a92bd' ;;
'4.10.2') echo 'b49c6da1b2cb67a0caf6c7480630b51c70a11ca2016ff2f555eaeda863143a29' ;;
'4.10.3') echo '8626cbf206b4e201ade7b87779090690447054bc93f052954c78480fa6ed186e' ;;
'5.0') echo '6157ac9f3410bc63644625b3b3e9e96c963afd7910ae0697792db57813ee79a6' ;;
'5.1') echo '7506638a380092a0406364c79d6c87d03d23017fc25a5770379d1ce23c3fcd4d' ;;
'5.1.1') echo '4953323605c5d7b89e97d0dc7779e275bccedefcdac090aec123375eae0cc798' ;;
'5.2') echo 'ff322863250159595e93b5a4d17a6f0d21c59a1a0497c1e1cf1d53826485503f' ;;
'5.2.1') echo '748c33ff8d216736723be4037085b8dc342c6a0f309081acf682c9803e407357' ;;
'5.3') echo 'bed2bdd3955be5a09ca7e0201e9d131f194f7f6c466e1795a733733ccfb09f25' ;;
'5.3.1') echo '1c59a17a054e9c82f0dd881871c9646e943ec4c71dd52ebc6137d17f82337436' ;;
'5.4') echo 'c8c17574245ecee9ed7fe4f6b593b696d1692d1adbfef425bef9b333e3a0e8de' ;;
'5.4.1') echo '7bdbad1e4f54f13c8a78abc00c26d44dd8709d4aedb704d913fb1bb78ac025dc' ;;
'5.5') echo '8d78b2ed63e7f07ad169c1186d119761c4773e681f332cfe1901045b1b0141bc' ;;
'5.5.1') echo '222a03fcf2fcaf3691767ce9549f78ebd4a77e73f9e23a396899fb70b420cd00' ;;
'5.6') echo '15c02ef5dd3631ec02ac52e8725703e0285d9a7eecbf4e5939aa9e924604d01d' ;;
'5.6.1') echo '0986244820e4a35d32d91df2ec4b768b5ba5d6c8246753794f85159f9963ec12' ;;
'5.6.2') echo '32fce6628848f799b0ad3205ae8db67d0d828c10ffe62b748a7c0d9f4a5d9ee0' ;;
'5.6.3') echo '60a6d8f687e3e7a4bc901cc6bc3db190efae0f02f0cc697e323e0f9336f224a3' ;;
'5.6.4') echo '1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d' ;;
'6.0') echo '5a3578b9f0bb162f5e08cf119f447dfb8fa950cedebb4d2a977e912a11a74b91' ;;
'6.0.1') echo 'd364b7098b9f2e58579a3603dc0a12a1991353ac58ed339316e6762b21efba44' ;;
'6.1') echo 'd0c43d14e1c70a48b82442f435d06186351a2d290d72afd5b8866f15e6d7038a' ;;
'6.1.1') echo '9d94e6e4a28ad328072ef6e56bce79a810494ae756751fdcedffdeaf27c093b1' ;;
'6.2') echo 'b93a5f30d01195ec201e240f029c8b42d59c24086b8d1864112c83558e23cf8a' ;;
'6.2.1') echo 'a68ca7ba57f3404c3f6fc1f70a02d3a7d78652e6b46bbfaff83fc9a17168c279' ;;
'6.2.2') echo '0f6ba231b986276d8221d7a870b4d98e0df76e6daf1f42e7c0baec5032fb7d17' ;;
'6.3') echo '038794feef1f4745c6347107b6726279d1c824f3fc634b60f86ace1e9fbd1768' ;;
'6.4') echo 'b888659f637887e759749f6226ddfcb1cb04f828c58c41279de73c463fdbacc9' ;;
'6.4.1') echo 'e58cdff0cee6d9b422dcd08ebeb3177bc44eaa09bd9a2e838ff74c408fe1cbcd' ;;
'6.5') echo '23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f' ;;
'6.5.1') echo '50a7d30529fa939721fe9268a0205142f3f2302bcac5fb45b27a3902e58db54a' ;;
'6.6') echo 'e6f83508f0970452f56197f610d13c5f593baaf43c0e3c6a571e5967be754025' ;;
'6.6.1') echo '7873ed5287f47ca03549ab8dcb6dc877ac7f0e3d7b1eb12685161d10080910ac' ;;
'6.7') echo '8ad57759019a9233dc7dc4d1a530cefe109dc122000d57f7e623f8cf4ba9dfc4' ;;
'6.7.1') echo '3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d' ;;
*) exit 1
esac
}
contains() {
local e
for e in $2; do
[[ $e == $1 ]] && return 0;
done
return 1
}
# key-value pairs of what gradle version (value) each gradle plugin version
# (key) should accept. plugin versions are actually prefixes and catch sub-
# versions as well. Pairs are taken from:
# https://developer.android.com/studio/releases/gradle-plugin.html#updating-gradle
d_plugin_k=(4.1 4.0 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.3 2.2 2.1.3 2.1 2.0 1.5 1.3 1.2 1.1 1.0 0.14 0.13 0.12 0.11 0.10 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2)
d_plugin_v=(6.5 6.1.1 5.6.4 5.4.1 5.1.1 4.10.1 4.6 4.4 4.1 3.3 2.14.1 2.14.1 2.12 2.12 2.4 2.4 2.3 2.2.1 2.2.1 2.1 2.1 1.12 1.12 1.12 1.11 1.10 1.9 1.8 1.6 1.6 1.4 1.4)
# All gradle versions we know about
plugin_v=(6.7.1 6.7 6.6.1 6.6 6.5.1 6.5 6.4.1 6.4 6.3 6.2.2 6.2.1 6.2 6.1.1 6.1 6.0.1 6.0 5.6.4 5.6.3 5.6.2 5.6.1 5.6 5.5.1 5.5 5.4.1 5.4 5.3.1 5.3 5.2.1 5.2 5.1.1 5.1 5.0 4.10.3 4.10.2 4.10.1 4.10 4.9 4.8.1 4.8 4.7 4.6 4.5.1 4.5 4.4.1 4.4 4.3.1 4.3 4.2.1 4.2 4.1 4.0.2 4.0.1 4.0 3.5.1 3.5 3.4.1 3.4 3.3 3.2.1 3.2 3.1 3.0 2.14.1 2.14 2.13 2.12 2.11 2.10 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2.1 2.2 2.1 1.12 1.11 1.10 1.9 1.8 1.7 1.6 1.4)
v_all=${plugin_v[@]}
# Earliest takes priority
for f in {.,..}/gradle/wrapper/gradle-wrapper.properties; do
[[ -f $f ]] || continue
while IFS='' read -r line || [ -n "$line" ]; do
line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds
if [[ $line == 'distributionUrl='* ]]; then
wrapper_ver=${line#*/gradle-}
wrapper_ver=${wrapper_ver%-*.zip}
break 2
fi
done < $f
done
if [[ -n $wrapper_ver ]]; then
v_found=$wrapper_ver
echo "Found $v_found via distributionUrl"
run_gradle
fi
# Earliest takes priority
for f in {.,..}/build.gradle{,.kts}; do
[[ -f $f ]] || continue
while IFS='' read -r line || [ -n "$line" ]; do
line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds
if [[ -z "$plugin_pver" && $line == *'com.android.tools.build:gradle:'* ]]; then
plugin_pver=${line#*[\'\"]com.android.tools.build:gradle:}
plugin_pver=${plugin_pver%[\'\"]*}
elif [[ -z "$wrapper_ver" && $line == *'gradleVersion = '* ]]; then
wrapper_ver=${line#*gradleVersion*=*[\'\"]}
wrapper_ver=${wrapper_ver%[\'\"]*}
fi
done < $f
done
if [[ -n $wrapper_ver ]]; then
v_found=$wrapper_ver
echo "Found $v_found via gradleVersion"
run_gradle
fi
if [[ -n $plugin_pver ]]; then
i=0
match=false
for k in ${d_plugin_k[@]}; do
if [[ $plugin_pver == ${k}* ]]; then
plugin_ver=${d_plugin_v[$i]}
match=true
break
fi
let i++
done
if $match; then
v_found=$plugin_ver
echo "Found $v_found via gradle plugin version $k"
fi
fi
# Find the highest version available
for v in ${plugin_v[*]}; do
if contains $v "${v_all[*]}"; then
v_def=$v
break
fi
done
if [[ -z $v_found ]]; then
echo "No suitable gradle version found - defaulting to $v_def"
v_found=$v_def
fi
run_gradle

View file

@ -2,7 +2,7 @@
#
# Install all the client hooks
BASE_DIR="$(cd $(dirname $0); pwd -P)"
BASE_DIR="$(cd $(dirname $0) || exit; pwd -P)"
HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc"
HOOK_DIR="$(git rev-parse --show-toplevel)/.git/hooks"

View file

@ -8,12 +8,12 @@ exec 1>&2
files=`git diff-index --cached HEAD 2>&1 | sed 's/^:.* //' | uniq | cut -b100-500`
if [ -z "$files" ]; then
PY_FILES="fdroid makebuildserver setup.py fdroidserver/*.py"
PY_TEST_FILES="tests/*.TestCase"
PY_FILES="fdroid makebuildserver setup.py fdroidserver/*.py examples/*.py tests/*-release-checksums.py"
PY_TEST_FILES="tests/test_*.py"
SH_FILES="hooks/pre-commit"
BASH_FILES="gradlew-fdroid jenkins-build-all jenkins-setup-build-environment jenkins-test completion/bash-completion buildserver/provision-*"
BASH_FILES="jenkins-build-all jenkins-setup-build-environment jenkins-test completion/bash-completion buildserver/provision-*"
RB_FILES="buildserver/Vagrantfile"
YML_FILES="buildserver/*.yml examples/*.yml"
YML_FILES=".*.yml .yamllint */*.yml */*.yaml"
else
# if actually committing right now, then only run on the files
# that are going to be committed at this moment
@ -27,16 +27,16 @@ else
for f in $files; do
test -e $f || continue
case $f in
test_*.py)
PY_TEST_FILES+=" $f"
;;
*.py)
PY_FILES+=" $f"
;;
*.TestCase)
PY_TEST_FILES+=" $f"
;;
*.rb)
RB_FILES+=" $f"
;;
*.yml)
*.yml|*.yaml|.yamllint)
YML_FILES+=" $f"
;;
*)
@ -52,17 +52,6 @@ else
done
fi
# We ignore the following PEP8 warnings
# * E123: closing bracket does not match indentation of opening bracket's line
# - Broken if multiple indentation levels start on a single line
# * E501: line too long (82 > 79 characters)
# - Recommended for readability but not enforced
# - Some lines are awkward to wrap around a char limit
# * W503: line break before binary operator
# - Quite pedantic
PEP8_IGNORE="E123,E501,W503"
err() {
echo >&2 ERROR: "$@"
exit 1
@ -77,7 +66,7 @@ cmd_exists() {
}
find_command() {
for name in $@; do
for name in "$@"; do
for suff in "3" "-3" "-python3" ""; do
cmd=${name}${suff}
if cmd_exists $cmd; then
@ -91,8 +80,9 @@ find_command() {
}
DASH=$(find_command dash)
PYDOCSTYLE=$(find_command pydocstyle)
PYFLAKES=$(find_command pyflakes)
PEP8=$(find_command pycodestyle pep8)
PYCODESTYLE=$(find_command pycodestyle pep8)
RUBY=$(find_command ruby)
YAMLLINT=$(find_command yamllint)
@ -100,19 +90,20 @@ if [ "$PY_FILES $PY_TEST_FILES" != " " ]; then
if ! $PYFLAKES $PY_FILES $PY_TEST_FILES; then
err "pyflakes tests failed!"
fi
# ignore vendored files
if ! $PYDOCSTYLE --match='(?!apksigcopier|looseversion|setup|test_).*\.py' $PY_FILES $PY_TEST_FILES; then
err "pydocstyle tests failed!"
fi
fi
if [ "$PY_FILES" != "" ]; then
if ! $PEP8 --ignore=$PEP8_IGNORE $PY_FILES; then
if ! $PYCODESTYLE $PY_FILES; then
err "pep8 tests failed!"
fi
fi
# The tests use a little hack in order to cleanly import the fdroidserver
# package locally like a regular package. pep8 doesn't see that, so this
# makes pep8 skip E402 on the test files that need that hack.
if [ "$PY_TEST_FILES" != "" ]; then
if ! $PEP8 --ignore=$PEP8_IGNORE,E402 $PY_TEST_FILES; then
if ! $PYCODESTYLE $PY_TEST_FILES; then
err "pep8 tests failed!"
fi
fi
@ -136,7 +127,7 @@ for f in $RB_FILES; do
done
for f in $YML_FILES; do
if ! $YAMLLINT $f 1>/dev/null; then
if ! $YAMLLINT $f; then
err ".yml tests failed on $f!"
fi
done

View file

@ -62,7 +62,7 @@ vagrant global-status \
# so we need to "manually" clone the git repo here…
cd $WORKSPACE
# set up Android SDK to use the Debian packages in stretch
# set up Android SDK to use the Debian packages
export ANDROID_HOME=/usr/lib/android-sdk
# now build the whole archive
@ -83,19 +83,27 @@ fi
echo "build_server_always: true" > config.yml
echo "deploy_process_logs: true" >> config.yml
# if the local mediawiki is available, then use it
if nc -z -w1 localhost 32445; then
wikiflag="--wiki"
echo "wiki_protocol: http" >> config.yml
echo "wiki_server: localhost:32445" >> config.yml
echo "wiki_path: /mediawiki/" >> config.yml
echo "wiki_user: fdroid" >> config.yml
echo "wiki_password: update.TestCase" >> config.yml
else
sed -i '/^wiki_/d' config.yml
fi
$WORKSPACE/fdroid build --verbose --latest --no-tarball --all $wikiflag
printf '\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nbuild all with reproducible signatures\n'
for f in metadata/*/signatures/*; do
appid=$(basename $(dirname $(dirname $f)))
versionCode=$(basename $f)
rm -f repo/${appid}_${versionCode}*.* archive/${appid}_${versionCode}*.* unsigned/${appid}_${versionCode}*.*
$WORKSPACE/fdroid build --verbose --latest --no-tarball ${appid}:$versionCode
done
printf '\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nbuild all with Binaries:\n'
for appid in `grep '^Binaries: ' metadata/*.yml --files-with-match | sed 's,^metadata/\(.*\)\.yml$,\1,'`; do
rm -f repo/${appid}_*.* archive/${appid}_*.* unsigned/${appid}_*.*
$WORKSPACE/fdroid build --verbose --latest --no-tarball ${appid}
done
# force global timeout to 6 hours
sed -Ei 's,^(\s+endtime\s*=\s*time\.time\(\))\s*.*,\1 + 6 * 60 * 60 # 6 hours,' \
$WORKSPACE/fdroidserver/build.py
printf '\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nbuild all\n'
$WORKSPACE/fdroid build --verbose --latest --no-tarball --all
vagrant global-status
if [ -d builder ]; then

View file

@ -66,13 +66,11 @@ if [ `nproc` -le 6 ]; then
else
cpus=6
fi
cat <<EOF > $WORKSPACE/makebuildserver.config.py
debian_mirror = 'http://deb.debian.org/debian/'
boot_timeout = 1200
apt_package_cache = True
copy_caches_from_host = True
memory = $memory
cpus = $cpus
cat <<EOF > $WORKSPACE/buildserver/Vagrantfile.yaml
debian_mirror: https://deb.debian.org/debian/
boot_timeout: 1200
memory: $memory
cpus: $cpus
EOF
cd $WORKSPACE

View file

@ -29,7 +29,7 @@ fi
set -e
set -x
# set up Android SDK to use the Debian packages in stretch
# set up Android SDK to use the Debian packages
export ANDROID_HOME=/usr/lib/android-sdk
rm -rf "$WORKSPACE/.testfiles"
@ -76,5 +76,3 @@ echo "repo_pubkey: 308204e1308202c9a003020102020434597643300d06092a864886f70d010
sed -i '/^repo_pubkey: /d' config.yml
# when everything is copied over to run on SIGN machine
../fdroid signindex --verbose
../fdroid checkupdates --auto --autoonly --commit

View file

@ -1,11 +1,10 @@
FILES = ../fdroid $(wildcard ../fdroidserver/*.py) \
FILES = $(wildcard ../fdroidserver/*.py) \
$(wildcard /usr/lib/python3.*/argparse.py) \
$(wildcard /usr/lib/python3.*/optparse.py) \
$(wildcard /usr/lib/python3.*/getopt.py)
../fdroid
# these are the supported languages
ALL_LINGUAS = bo de es fr hu it ko nb_NO pl pt_BR pt_PT ru tr uk zh_Hans zh_Hant
ALL_LINGUAS = $(shell sed -En 's,include locale/([^/]+)/.*,\1,p' ../MANIFEST.in)
POFILES = $(wildcard */LC_MESSAGES/fdroidserver.po)
MOFILES = $(ALL_LINGUAS:=/LC_MESSAGES/fdroidserver.mo)
@ -13,6 +12,8 @@ TEMPLATE = fdroidserver.pot
VERSION = $(shell git describe)
OPTS = --no-wrap --sort-output --add-location=file
default:
@printf "Build the translation files using: ./setup.py compile_catalog\n\n"
@ -29,18 +30,24 @@ clean:
-rm -f -- $(MOFILES)
-rm -f -- $(POFILES:=~)
# to remove obsolete source strings, run xgettext without --join-existing
$(TEMPLATE): $(FILES)
xgettext --join-existing --from-code=UTF-8 \
--language=Python --keyword=_ \
--no-wrap --sort-output --add-location=file --output=$(TEMPLATE) \
$(OPTS) --output=$(TEMPLATE) \
--package-name="fdroidserver" --package-version=$(VERSION) \
--foreign-user \
--msgid-bugs-address=https://gitlab.com/fdroid/fdroidserver/issues \
$(FILES)
msguniq $(OPTS) --use-first \
--output-file=$(TEMPLATE) $(TEMPLATE)
sed -i 's,CHARSET,UTF-8,' $(TEMPLATE)
%.po: $(TEMPLATE)
msgmerge --no-wrap --sort-output --add-location=file --update $@ $(TEMPLATE)
msgattrib --set-obsolete --ignore-file=$(TEMPLATE) -o $@ $@
msgattrib $(OPTS) --no-obsolete --output-file=$@ $@
msguniq $(OPTS) --use-first --output-file=$@ $@
msgmerge $(OPTS) --update $@ $(TEMPLATE)
%/LC_MESSAGES/fdroidserver.mo: %/LC_MESSAGES/fdroidserver.po
msgfmt --check -o $@ $(@:mo=po)

View file

@ -1,17 +0,0 @@
fdroid
fdroidserver/btlog.py
fdroidserver/build.py
fdroidserver/checkupdates.py
fdroidserver/common.py
fdroidserver/deploy.py
fdroidserver/import.py
fdroidserver/init.py
fdroidserver/install.py
fdroidserver/lint.py
fdroidserver/metadata.py
fdroidserver/publish.py
fdroidserver/rewritemeta.py
fdroidserver/scanner.py
fdroidserver/stats.py
fdroidserver/update.py
fdroidserver/verify.py

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more