Bug 443489

Summary: Daily releases in the stable KDE F-Droid Repo
Product: [Applications] KDE Itinerary Reporter: Gerion <gerion.entrup>
Component: generalAssignee: Volker Krause <vkrause>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version First Reported In: unspecified   
Target Milestone: ---   
Platform: Other   
OS: Android 9.x   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Gerion 2021-10-08 18:19:27 UTC
SUMMARY

For KDE Itinerary the KDE F-Droid Repo seems necessary. I have added the one for stable versions. However, with that repo I get daily updates for KDE Itinerary with always the same version.

STEPS TO REPRODUCE
1. Activate auto-update in F-Droid.
1. Install KDE Stable F-Droid Repo.
2. Install KDE Iinerary.

OBSERVED RESULT

KDE Itinerary is downloaded and "updated" every day. Every day, the same version is newly installed.

EXPECTED RESULT

An update is only done, when the app is updated.


SOFTWARE/OS VERSIONS
F-Droid: 1.14-alpha2

ADDITIONAL INFORMATION

(I would love, if the app would be directly in F-Droid ;))
Comment 1 Volker Krause 2021-10-13 15:25:35 UTC
Right, this is a limitation of binary-factory.kde.org does Android builds for the F-Droid repos at the moment, and affects all our Android apps. The builds happen unconditionally every 24h with whatever changes are available by then (which can include updates to underlying components as well, not just the application itself).

Having this in the F-Droid mainline repository would solve this (as updates there are a manual process), but getting in there is non-trivial unfortunately.
Comment 2 Gerion 2021-10-13 22:10:07 UTC
Is it possible to enable a conditional build (as a workaround)?

I have digged around a little bit in the binary-factory-tooling git and saw the pipeline which I assume is executed (craft/pipeline-templates/android.pipeline). According to the jenkins doc a stage can have an additional "when" directive that would enable a build only under certain conditions (https://www.jenkins.io/doc/book/pipeline/syntax/#when). However, there is no "steps" in the KDE receipt, so I'm not sure, if this the correct documentation.

A possible way to get the last deployed version is to query the F-Droid-Repo itself (for example `curl -s https://cdn.kde.org/android/stable-releases/fdroid/repo/index.xml | xmllint --format --xpath '/fdroid/application[@id="org.kde.itinerary"]/package/version/text()' - | head -n 1`). Maybe one stage in the pipeline can execute this, query the current version, set an ENVIRONMENT_VARIABLE that is evaluated by the later stages in a when directive.

The versioncode is really high. Is it updated every build? If yes, I understand, why F-Droid thinks that the package is new every time.
If you want a daily build, it may also be enough to produce the same version code.
Comment 3 Volker Krause 2021-10-14 15:25:36 UTC
The F-Droid part of the Jenkins pipeline is here: https://invent.kde.org/sysadmin/binary-factory-tooling/-/blob/master/craft/pipeline-templates/android.pipeline

The version code update is here: https://invent.kde.org/pim/itinerary/-/blob/master/src/app/android/build.gradle#L27

It's quite possible there are ways to do this better :)
Comment 4 Volker Krause 2024-08-24 10:37:57 UTC
Solved since some time with the switch to the Gitlab CI pipeline.