syncstuff/syncthing/build.gradle
Catfriend1 b4240a2e94
Move version-code, version-name to libs.versions.toml (#1544)
Add gradle task to verify if versionCode matches versionName.
2025-07-14 17:14:34 +02:00

61 lines
2.2 KiB
Groovy

plugins {
alias libs.plugins.vyarus.use.python
}
def getSyncthingNativeVersion() {
def syncthingSubmoduleDir = new File(project.rootDir, "syncthing/src/github.com/syncthing/syncthing")
def gitDescribe = "git describe --always".execute([], syncthingSubmoduleDir).text.trim()
// Take "(versionMajor).(versionMinor).(versionPatch)" without leading "v" and ignore what follows after.
def matcher = gitDescribe =~ /v?(\d+)\.(\d+)\.(\d+)(?:-.+)?/
if (matcher.matches()) {
return "${matcher[0][1]}.${matcher[0][2]}.${matcher[0][3]}"
} else {
throw new GradleException("getSyncthingNativeVersion: FAILED to extract from '${gitDescribe}'.")
}
}
def getSourceDateEpoch() {
def syncthingSubmoduleDir = new File(project.rootDir, "syncthing/src/github.com/syncthing/syncthing")
def sourceDateEpoch = "git log -1 --format=%ct".execute([], syncthingSubmoduleDir).text.trim()
return sourceDateEpoch
}
def verifySyncthingNativeVersionMatchesApp() {
def syncthingNativeVersion = getSyncthingNativeVersion()
def syncthingAppVersion = libs.versions.version.name
.get()
.split("\\.")
.toList()
.subList(0, 3)
.join(".")
if (syncthingNativeVersion != syncthingAppVersion) {
throw new GradleException("Checked out SyncthingNative version (${syncthingNativeVersion}) differs from App version (${syncthingAppVersion}). Please verify that the submodule refers to the correct commit.")
}
}
task buildNative(type: PythonTask) {
environment "NDK_VERSION", "$ndkVersionShared"
// Required to get reproducible builds, see https://github.com/Catfriend1/syncthing-android/issues/1383
environment "SOURCE_DATE_EPOCH", getSourceDateEpoch()
environment "BUILD_HOST", "Catfriend1-syncthing-android"
environment "BUILD_USER", "reproducible-build"
verifySyncthingNativeVersionMatchesApp();
inputs.dir("$projectDir/src/")
outputs.dir("$projectDir/../app/src/main/jniLibs/")
command = "-u ./build-syncthing.py"
}
/**
* Use separate task instead of standard clean(), so these folders aren't deleted by `gradle clean`.
*/
task cleanNative(type: Delete) {
delete "$projectDir/../app/src/main/jniLibs/"
delete "gobuild"
delete "go"
delete "mingit"
}