`fdroid checkupdate` fails with "Couldn't find any version information" and "serverwebroot: has blank value!"

Hello, all. I am building my first app to push to F-Droid, following the guide here. Everything works fine up until the fdroid checkupdates --allow-dirty command.

Two errors are given:

First, it says that serverwebroot: has blank value! This error goes away when I run export serverwebroot="/build", but I’d like to not have it in the first place.

Second, fdroid cannot find the package out of my build.gradle file. The build.gradle file was auto-generated by Android Studio, with updates by me to put it in line with the .yml config file. When running checkupdates, it can find the version and version code, but not package:

2025-08-20 23:55:18,498 DEBUG: Parsing manifest at 'build/com.alexseltzer.uscodereader/app/build.gradle.kts'
2025-08-20 23:55:18,498 DEBUG: ..got package=None, version=1.0, vercode=1

Why would either of there errors happen, and how could I fix them? I’ve read all the relevant questions already on this website about the two errors, but none of them helped.

Thanks in advance.

Here’s some relevant files:

Verbose output of fdroid checkupdates command:

vagrant@7ef57b6358d4:/build$ fdroid checkupdates --verbose --allow-dirty com.alexseltzer.uscodereader
2025-08-20 23:41:00,580 DEBUG: Reading 'config.yml'
2025-08-20 23:41:00,585 WARNING: unsafe permissions on 'config.yml' (should be 0600)!
2025-08-20 23:41:00,728 INFO: Processing com.alexseltzer.uscodereader
2025-08-20 23:41:00,728 DEBUG: > git -c core.askpass=/bin/true -c core.sshCommand=/bin/false -c url.https://.insteadOf=ssh:// -c url.https://u:p@bitbucket.org/.insteadOf=git@bitbucket.org: -c url.https://u:p@bitbucket.org.insteadOf=git://bitbucket.org -c url.https://u:p@bitbucket.org.insteadOf=https://bitbucket.org -c url.https://u:p@github.com/.insteadOf=git@github.com: -c url.https://u:p@github.com.insteadOf=git://github.com -c url.https://u:p@github.com.insteadOf=https://github.com -c url.https://u:p@gitlab.com/.insteadOf=git@gitlab.com: -c url.https://u:p@gitlab.com.insteadOf=git://gitlab.com -c url.https://u:p@gitlab.com.insteadOf=https://gitlab.com -c url.https://u:p@codeberg.org/.insteadOf=git@codeberg.org: -c url.https://u:p@codeberg.org.insteadOf=git://codeberg.org -c url.https://u:p@codeberg.org.insteadOf=https://codeberg.org clone -- https://github.com/Maimas2/USCodeReader.git build/com.alexseltzer.uscodereader
Cloning into 'build/com.alexseltzer.uscodereader'...
2025-08-20 23:41:07,336 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:07,336 DEBUG: > git rev-parse --show-toplevel
2025-08-20 23:41:07,538 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:07,538 DEBUG: > git checkout -f origin/HEAD
2025-08-20 23:41:08,542 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:08,542 DEBUG: > git clean -dffx
2025-08-20 23:41:08,644 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:08,644 DEBUG: > git rev-parse --show-toplevel
2025-08-20 23:41:08,848 DEBUG: Popen(['git', 'cat-file', '--batch-check'], cwd=/build/build/com.alexseltzer.uscodereader, universal_newlines=False, shell=None, istream=<valid stream>)
2025-08-20 23:41:08,850 DEBUG: Popen(['git', 'cat-file', '--batch'], cwd=/build/build/com.alexseltzer.uscodereader, universal_newlines=False, shell=None, istream=<valid stream>)
2025-08-20 23:41:08,852 DEBUG: All tags: TagName
2025-08-20 23:41:08,852 DEBUG: Check tag: 'TagName'
2025-08-20 23:41:08,852 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:08,852 DEBUG: > git rev-parse --show-toplevel
2025-08-20 23:41:09,054 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:09,054 DEBUG: > git submodule foreach --recursive git reset --hard
2025-08-20 23:41:09,156 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:09,156 DEBUG: > git reset --hard
2025-08-20 23:41:09,358 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:09,358 DEBUG: > git submodule foreach --recursive git clean -dffx
2025-08-20 23:41:09,459 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:09,459 DEBUG: > git clean -dffx
2025-08-20 23:41:09,561 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:09,561 DEBUG: > git -c core.askpass=/bin/true -c core.sshCommand=/bin/false -c url.https://.insteadOf=ssh:// -c url.https://u:p@bitbucket.org/.insteadOf=git@bitbucket.org: -c url.https://u:p@bitbucket.org.insteadOf=git://bitbucket.org -c url.https://u:p@bitbucket.org.insteadOf=https://bitbucket.org -c url.https://u:p@github.com/.insteadOf=git@github.com: -c url.https://u:p@github.com.insteadOf=git://github.com -c url.https://u:p@github.com.insteadOf=https://github.com -c url.https://u:p@gitlab.com/.insteadOf=git@gitlab.com: -c url.https://u:p@gitlab.com.insteadOf=git://gitlab.com -c url.https://u:p@gitlab.com.insteadOf=https://gitlab.com -c url.https://u:p@codeberg.org/.insteadOf=git@codeberg.org: -c url.https://u:p@codeberg.org.insteadOf=git://codeberg.org -c url.https://u:p@codeberg.org.insteadOf=https://codeberg.org fetch --prune --prune-tags --force origin
2025-08-20 23:41:09,963 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:09,963 DEBUG: > git -c core.askpass=/bin/true -c core.sshCommand=/bin/false -c url.https://.insteadOf=ssh:// -c url.https://u:p@bitbucket.org/.insteadOf=git@bitbucket.org: -c url.https://u:p@bitbucket.org.insteadOf=git://bitbucket.org -c url.https://u:p@bitbucket.org.insteadOf=https://bitbucket.org -c url.https://u:p@github.com/.insteadOf=git@github.com: -c url.https://u:p@github.com.insteadOf=git://github.com -c url.https://u:p@github.com.insteadOf=https://github.com -c url.https://u:p@gitlab.com/.insteadOf=git@gitlab.com: -c url.https://u:p@gitlab.com.insteadOf=git://gitlab.com -c url.https://u:p@gitlab.com.insteadOf=https://gitlab.com -c url.https://u:p@codeberg.org/.insteadOf=git@codeberg.org: -c url.https://u:p@codeberg.org.insteadOf=git://codeberg.org -c url.https://u:p@codeberg.org.insteadOf=https://codeberg.org fetch --prune --tags --force origin
2025-08-20 23:41:10,365 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:10,365 DEBUG: > git remote set-head origin --auto
2025-08-20 23:41:10,767 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:10,767 DEBUG: > git checkout -f TagName
2025-08-20 23:41:10,969 DEBUG: Directory: build/com.alexseltzer.uscodereader
2025-08-20 23:41:10,969 DEBUG: > git clean -dffx
2025-08-20 23:41:11,072 DEBUG: Parsing manifest at 'build/com.alexseltzer.uscodereader/build.gradle.kts'
2025-08-20 23:41:11,072 DEBUG: ..got package=None, version=None, vercode=None
2025-08-20 23:41:11,074 DEBUG: Parsing manifest at 'build/com.alexseltzer.uscodereader/app/src/main/AndroidManifest.xml'
2025-08-20 23:41:11,075 DEBUG: ..got package=None, version=None, vercode=None
2025-08-20 23:41:11,075 DEBUG: Parsing manifest at 'build/com.alexseltzer.uscodereader/app/build.gradle.kts'
2025-08-20 23:41:11,076 DEBUG: ..got package=None, version=1.0, vercode=1
2025-08-20 23:41:11,077 DEBUG: Parsing manifest at 'build/com.alexseltzer.uscodereader/app/src/main/AndroidManifest.xml'
2025-08-20 23:41:11,078 DEBUG: ..got package=None, version=None, vercode=None
2025-08-20 23:41:11,088 ERROR: ...checkupdate failed for com.alexseltzer.uscodereader : Couldn't find any version information
2025-08-20 23:41:11,090 DEBUG: Traceback (most recent call last):
  File "/home/vagrant/fdroidserver/fdroidserver/checkupdates.py", line 945, in main
    checkupdates_app(app, options.auto, options.commit or options.merge_request)
  File "/home/vagrant/fdroidserver/fdroidserver/checkupdates.py", line 546, in checkupdates_app
    (version, vercode, tag) = check_tags(app, pattern)
                              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vagrant/fdroidserver/fdroidserver/checkupdates.py", line 278, in check_tags
    raise FDroidException(_("Couldn't find any version information"))
fdroidserver.exception.FDroidException: Couldn't find any version information

2025-08-20 23:41:11,090 DEBUG: Outputting JSON
2025-08-20 23:41:11,091 DEBUG: Popen(['git', 'diff', '--cached', '--abbrev=40', '--full-index', '--raw'], cwd=/build, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:11,122 DEBUG: Popen(['git', 'diff', '--abbrev=40', '--full-index', '--raw'], cwd=/build, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:11,226 DEBUG: Popen(['git', 'ls-files', '--modified'], cwd=/build, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:11,445 DEBUG: Popen(['git', 'status', '--porcelain', '--untracked-files'], cwd=/build, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:12,209 DEBUG: Popen(['git', 'diff', '--cached', '--abbrev=40', '--full-index', '--raw'], cwd=/home/vagrant/fdroidserver, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:12,211 DEBUG: Popen(['git', 'diff', '--abbrev=40', '--full-index', '--raw'], cwd=/home/vagrant/fdroidserver, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:12,216 DEBUG: Popen(['git', 'ls-files', '--modified'], cwd=/home/vagrant/fdroidserver, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:12,221 DEBUG: Popen(['git', 'status', '--porcelain', '--untracked-files'], cwd=/home/vagrant/fdroidserver, universal_newlines=False, shell=None, istream=None)
2025-08-20 23:41:12,233 ERROR: Environment variable {env: serverwebroot} is not set!
2025-08-20 23:41:12,233 ERROR: serverwebroot: has blank value!

build.gradle:

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.kotlin.compose)
    id("org.jetbrains.kotlin.plugin.serialization")
}

android {
    namespace = "com.alexseltzer.uscodereader"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.alexseltzer.uscodereader"
        minSdk = 24
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = "11"
    }
    buildFeatures {
        compose = true
    }
}

dependencies {
    [ excluded ]
}

F-Droid .yml metadata file:

Categories:
  - Reading
License: MIT
SourceCode: https://github.com/Maimas2/USCodeReader

RepoType: git
Repo: https://github.com/Maimas2/USCodeReader.git

Builds:
  - versionName: '1.0'
    versionCode: 1
    commit: 8ef69a9a249c86f2e7f2bdc9730b45ec289ac958
    subdir: app
    gradle:
      - yes

AutoUpdateMode: Version
UpdateCheckMode: Tags
CurrentVersion: '1.0'
CurrentVersionCode: 1

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.