Android overhaul: one CopyCategoryKeywords task in build-logic instead of a copy in :data and :core:fakes
The task class and its wiring were duplicated verbatim in both build scripts; bundleCategoryKeywords(resourcePath) registers it once per module. Resource paths and inputs are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
import se.hagstedt.kvitt.buildlogic.bundleCategoryKeywords
|
||||
import se.hagstedt.kvitt.buildlogic.categoryKeywordsTable
|
||||
|
||||
// :data — Room database, Ktor client, token store, sync engine, WorkManager workers, the real repositories and the APK
|
||||
// updater (SPEC §6.2, §14.2, §14.4; owned by M5). Hilt modules here provide the implementations; :app (M8) binds the
|
||||
// :core:model interfaces to them.
|
||||
// updater (SPEC §6.2, §14.2, §14.4). Hilt modules here provide the implementations; :app binds the :core:model
|
||||
// interfaces to them.
|
||||
plugins {
|
||||
id("kvitt.android.library")
|
||||
id("kvitt.android.hilt")
|
||||
@@ -41,48 +44,16 @@ dependencies {
|
||||
// so a changed contract file re-runs the tests.
|
||||
val contractsExamples = rootProject.layout.projectDirectory.dir("../contracts/examples")
|
||||
val roomSchemas = layout.projectDirectory.dir("schemas")
|
||||
val categoryKeywordsTable = rootProject.layout.projectDirectory.file("../contracts/category-keywords.csv")
|
||||
val keywordsTable = categoryKeywordsTable()
|
||||
tasks.withType<Test>().configureEach {
|
||||
inputs.dir(contractsExamples).withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName("contractsExamples")
|
||||
inputs.dir(roomSchemas).withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName("roomSchemas")
|
||||
systemProperty("kvitt.contracts.examples", contractsExamples.asFile.absolutePath)
|
||||
systemProperty("kvitt.room.schemas", roomSchemas.asFile.absolutePath)
|
||||
inputs.file(categoryKeywordsTable).withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName("categoryKeywords")
|
||||
systemProperty("kvitt.contracts.keywords", categoryKeywordsTable.asFile.absolutePath)
|
||||
inputs.file(keywordsTable).withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName("categoryKeywords")
|
||||
systemProperty("kvitt.contracts.keywords", keywordsTable.asFile.absolutePath)
|
||||
}
|
||||
|
||||
// The keyword table of the category suggestion (UX-3, SPEC §9.11 CS-6) is bundled as the Java resource
|
||||
// se/hagstedt/kvitt/data/category-keywords.csv, copied from contracts/category-keywords.csv at build time (never
|
||||
// hand-copied). A missing table fails the build: the task's input file must exist.
|
||||
abstract class CopyCategoryKeywords : DefaultTask() {
|
||||
@get:InputFile
|
||||
@get:PathSensitive(PathSensitivity.NONE)
|
||||
abstract val table: RegularFileProperty
|
||||
|
||||
@get:Input
|
||||
abstract val resourcePath: Property<String>
|
||||
|
||||
@get:OutputDirectory
|
||||
abstract val outputDir: DirectoryProperty
|
||||
|
||||
@TaskAction
|
||||
fun copy() {
|
||||
val source = table.get().asFile
|
||||
if (!source.isFile) throw GradleException("missing ${source.path}")
|
||||
val root = outputDir.get().asFile
|
||||
root.deleteRecursively()
|
||||
val target = root.resolve(resourcePath.get())
|
||||
target.parentFile.mkdirs()
|
||||
source.copyTo(target)
|
||||
}
|
||||
}
|
||||
|
||||
val copyCategoryKeywords = tasks.register<CopyCategoryKeywords>("copyCategoryKeywords") {
|
||||
description = "Copies contracts/category-keywords.csv into the main Java resources."
|
||||
table.set(categoryKeywordsTable)
|
||||
resourcePath.set("se/hagstedt/kvitt/data/category-keywords.csv")
|
||||
outputDir.set(layout.buildDirectory.dir("generated/category-keywords"))
|
||||
}
|
||||
androidComponents {
|
||||
onVariants { variant -> variant.sources.resources?.addGeneratedSourceDirectory(copyCategoryKeywords, CopyCategoryKeywords::outputDir) }
|
||||
}
|
||||
// The keyword table of the category suggestion (UX-3, SPEC §9.11 CS-6), bundled as the Java resource
|
||||
// se/hagstedt/kvitt/data/category-keywords.csv.
|
||||
bundleCategoryKeywords("se/hagstedt/kvitt/data/category-keywords.csv")
|
||||
|
||||
Reference in New Issue
Block a user