Skip to content

Commit

Permalink
Fix Licensee copy tasks (#1619)
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisbanes committed Nov 2, 2023
1 parent b6d3236 commit 9f959b8
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ package app.tivi.gradle

import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import org.gradle.api.Project
import org.gradle.api.tasks.Copy
import org.gradle.configurationcache.extensions.capitalized
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.register
Expand All @@ -15,21 +14,20 @@ fun Project.configureAndroidLicensesTasks() {
onVariants { variant ->
val capitalizedVariantName = variant.name.capitalized()

val outputDir = objects.directoryProperty()

val copyArtifactsTask = tasks.register<Copy>(
val copyArtifactsTask = tasks.register<AssetCopyTask>(
"copy${capitalizedVariantName}LicenseeOutputToAndroidAssets",
) {
from(
inputFile.set(
layout.buildDirectory
.file("reports/licensee/android$capitalizedVariantName/artifacts.json"),
)
into(outputDir.file("licenses.json"))
outputFilename.set("licenses.json")

dependsOn("licenseeAndroid$capitalizedVariantName")
}

variant.sources.assets?.addGeneratedSourceDirectory(copyArtifactsTask) { outputDir }
variant.sources.assets
?.addGeneratedSourceDirectory(copyArtifactsTask, AssetCopyTask::outputDirectory)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright 2023, Christopher Banes and the Tivi project contributors
// SPDX-License-Identifier: Apache-2.0

package app.tivi.gradle

import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.logging.LogLevel
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction

@CacheableTask
abstract class AssetCopyTask : DefaultTask() {
@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty

@get:PathSensitive(PathSensitivity.RELATIVE)
@get:InputFile
abstract val inputFile: RegularFileProperty

@get:Input
abstract val outputFilename: Property<String>

@TaskAction
fun action() {
val input = inputFile.get().asFile
val output = outputDirectory.get()
.file(outputFilename.get())
.asFile

logger.log(LogLevel.WARN, "Copying ${input.canonicalPath} to ${output.canonicalPath}")

input.copyTo(target = output, overwrite = true)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ package app.tivi.gradle

import java.io.File
import org.gradle.api.Project
import org.gradle.api.tasks.Copy
import org.gradle.configurationcache.extensions.capitalized
import org.gradle.kotlin.dsl.register
import org.jetbrains.kotlin.konan.target.KonanTarget
Expand All @@ -16,35 +15,27 @@ fun Project.configureIosLicensesTasks() {
.map { arch -> arch.split(",", " ").filter { it.isNotBlank() } }
.orElse(emptyList())

tasks.register<Copy>("copyLicenseeOutputToIosBundle") {
tasks.register<AssetCopyTask>("copyLicenseeOutputToIosBundle") {
val targetName = xcodeTargetPlatform.zip(xcodeTargetArchs, ::Pair)
.map { (targetPlatform, targetArchs) ->
determineIosKonanTargetsFromEnv(targetPlatform, targetArchs)
.mapTo(HashSet()) { it.presetName }
}
.map { it.firstOrNull().orEmpty() }
.get()

if (targetName.isEmpty()) {
// If we don't have a target, disable the test and skip the rest of setup
enabled = false
return@register
}

from(layout.buildDirectory.file("reports/licensee/$targetName/artifacts.json"))
inputFile.set(
layout.buildDirectory.zip(targetName) { buildDir, target ->
buildDir.file("reports/licensee/$target/artifacts.json")
},
)

into(
providers.environmentVariable("BUILT_PRODUCTS_DIR")
.zip(providers.environmentVariable("CONTENTS_FOLDER_PATH")) { builtProductsDir, contentsFolderPath ->
File(builtProductsDir)
.resolve(contentsFolderPath)
.resolve("licenses.json")
}.flatMap {
objects.fileProperty().apply { set(it) }
},
outputDirectory.set(
File(System.getenv("BUILT_PRODUCTS_DIR"))
.resolve(System.getenv("CONTENTS_FOLDER_PATH")),
)
outputFilename.set("licenses.json")

dependsOn("licensee${targetName.capitalized()}")
dependsOn("licensee${targetName.get().capitalized()}")
}

tasks.named("embedAndSignAppleFrameworkForXcode") {
Expand Down

0 comments on commit 9f959b8

Please sign in to comment.