Begin rework for configuration cache compatibility (#1709)

This commit is contained in:
Harsh Shandilya 2022-02-05 01:57:41 +05:30 committed by GitHub
parent 2b293e5805
commit 664e1fbba0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 132 additions and 161 deletions

View file

@ -188,57 +188,3 @@ jobs:
uses: gradle/gradle-build-action@v2.1.3 uses: gradle/gradle-build-action@v2.1.3
with: with:
arguments: lintDebug arguments: lintDebug
code-coverage:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2.4.0
with:
fetch-depth: 0
- name: Check if relevant files have changed
uses: actions/github-script@v5.1.0
id: service-changed
with:
result-encoding: string
script: |
const script = require('.github/check-changed-files.js')
return await script({github, context})
- name: Set up JDK
if: ${{ steps.service-changed.outputs.result == 'true' }}
uses : actions/setup-java@v2.4.0
with :
distribution : 'zulu'
java-version : '17'
cache: 'gradle'
- name: Copy CI gradle.properties
if: ${{ steps.service-changed.outputs.result == 'true' }}
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
- name: Generate coverage reports with kotlinx-kover
if: ${{ steps.service-changed.outputs.result == 'true' }}
uses: gradle/gradle-build-action@v2.1.3
with:
arguments: koverXmlReport
- name: Export coverage XMLs
if: ${{ steps.service-changed.outputs.result == 'true' }}
id: coverage-export
shell: bash
run: |
REPORTS="$(find ./build/coverage-reports/ -maxdepth 1 -type f -printf "${GITHUB_WORKSPACE}/%p," -name "*.xml")"
REPORTS="${REPORTS::${#REPORTS}-1}"
echo ::set-output name=REPORT_PATHS::${REPORTS}
- name: Publish JaCoCo report to PR
if: false
uses: madrapps/jacoco-report@v1.2
with:
paths: ${{ steps.coverage-export.outputs.REPORT_PATHS }}
token: ${{ secrets.GITHUB_TOKEN }}
min-coverage-overall: 0
min-coverage-changed-files: 40
title: Code Coverage

View file

@ -1,11 +1,5 @@
#
# Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
# SPDX-License-Identifier: GPL-3.0-only
#
# #
# This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY. # This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY.
# #
#Sun Jan 17 12:32:03 IST 2021
versioning-plugin.versionCode=20000 versioning-plugin.versionCode=20000
versioning-plugin.versionName=2.0.0-SNAPSHOT versioning-plugin.versionName=2.0.0-SNAPSHOT

View file

@ -0,0 +1,14 @@
/*
* Copyright © 2014-2022 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package versioning
const val VERSIONING_PROP_FILE = "version.properties"
const val VERSIONING_PROP_VERSION_NAME = "versioning-plugin.versionName"
const val VERSIONING_PROP_VERSION_CODE = "versioning-plugin.versionCode"
const val VERSIONING_PROP_COMMENT =
"""#
# This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY.
#"""

View file

@ -7,18 +7,10 @@ package versioning
import com.android.build.gradle.internal.plugins.AppPlugin import com.android.build.gradle.internal.plugins.AppPlugin
import com.vdurmont.semver4j.Semver import com.vdurmont.semver4j.Semver
import java.io.OutputStream
import java.util.Properties import java.util.Properties
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.register
private const val VERSIONING_PROP_FILE = "version.properties"
private const val VERSIONING_PROP_VERSION_NAME = "versioning-plugin.versionName"
private const val VERSIONING_PROP_VERSION_CODE = "versioning-plugin.versionCode"
private const val VERSIONING_PROP_COMMENT =
"""
This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY.
"""
/** /**
* A Gradle [Plugin] that takes a [Project] with the [AppPlugin] applied and dynamically sets the * A Gradle [Plugin] that takes a [Project] with the [AppPlugin] applied and dynamically sets the
@ -26,23 +18,9 @@ This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUAL
* the [Project.getBuildDir] directory. It also adds Gradle tasks to bump the major, minor, and * the [Project.getBuildDir] directory. It also adds Gradle tasks to bump the major, minor, and
* patch versions along with one to prepare the next snapshot. * patch versions along with one to prepare the next snapshot.
*/ */
@Suppress("UnstableApiUsage", "NAME_SHADOWING") @Suppress("UnstableApiUsage", "NAME_SHADOWING", "Unused")
class VersioningPlugin : Plugin<Project> { class VersioningPlugin : Plugin<Project> {
/** Generate the Android 'versionCode' property */
private fun Semver.androidCode(): Int {
return major * 1_00_00 + minor * 1_00 + patch
}
/** Write an Android-specific variant of [this] to [stream] */
private fun Semver.writeForAndroid(stream: OutputStream) {
val newVersionCode = androidCode()
val props = Properties()
props.setProperty(VERSIONING_PROP_VERSION_CODE, "$newVersionCode")
props.setProperty(VERSIONING_PROP_VERSION_NAME, toString())
props.store(stream, VERSIONING_PROP_COMMENT)
}
override fun apply(project: Project) { override fun apply(project: Project) {
with(project) { with(project) {
val appPlugin = val appPlugin =
@ -67,40 +45,25 @@ class VersioningPlugin : Plugin<Project> {
appPlugin.extension.defaultConfig.versionCode = versionCode appPlugin.extension.defaultConfig.versionCode = versionCode
afterEvaluate { afterEvaluate {
val version = Semver(versionName) val version = Semver(versionName)
tasks.register("clearPreRelease") { tasks.register<VersioningTask>("clearPreRelease") {
doLast { version.withClearedSuffix().writeForAndroid(propFile.asFile.outputStream()) } semverString.set(version.withClearedSuffix().toString())
propertyFile.set(propFile)
} }
tasks.register("bumpMajor") { tasks.register<VersioningTask>("bumpMajor") {
doLast { semverString.set(version.withIncMajor().withClearedSuffix().toString())
version propertyFile.set(propFile)
.withIncMajor()
.withClearedSuffix()
.writeForAndroid(propFile.asFile.outputStream())
} }
tasks.register<VersioningTask>("bumpMinor") {
semverString.set(version.withIncMinor().withClearedSuffix().toString())
propertyFile.set(propFile)
} }
tasks.register("bumpMinor") { tasks.register<VersioningTask>("bumpPatch") {
doLast { semverString.set(version.withIncPatch().withClearedSuffix().toString())
version propertyFile.set(propFile)
.withIncMinor()
.withClearedSuffix()
.writeForAndroid(propFile.asFile.outputStream())
}
}
tasks.register("bumpPatch") {
doLast {
version
.withIncPatch()
.withClearedSuffix()
.writeForAndroid(propFile.asFile.outputStream())
}
}
tasks.register("bumpSnapshot") {
doLast {
version
.withIncMinor()
.withSuffix("SNAPSHOT")
.writeForAndroid(propFile.asFile.outputStream())
} }
tasks.register<VersioningTask>("bumpSnapshot") {
semverString.set(version.withIncMinor().withSuffix("SNAPSHOT").toString())
propertyFile.set(propFile)
} }
} }
} }

View file

@ -0,0 +1,46 @@
/*
* Copyright © 2014-2022 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package versioning
import com.vdurmont.semver4j.Semver
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
@CacheableTask
abstract class VersioningTask : DefaultTask() {
@get:Input abstract val semverString: Property<String>
@get:OutputFile abstract val propertyFile: RegularFileProperty
/** Generate the Android 'versionCode' property */
private fun Semver.androidCode(): Int {
return major * 1_00_00 + minor * 1_00 + patch
}
private fun Semver.toPropFileText(): String {
val newVersionCode = androidCode()
val newVersionName = toString()
return buildString {
appendLine(VERSIONING_PROP_COMMENT)
append(VERSIONING_PROP_VERSION_CODE)
append('=')
appendLine(newVersionCode)
append(VERSIONING_PROP_VERSION_NAME)
append('=')
appendLine(newVersionName)
}
}
@TaskAction
fun execute() {
propertyFile.get().asFile.writeText(Semver(semverString.get()).toPropFileText())
}
}

View file

@ -0,0 +1,46 @@
/*
* Copyright © 2014-2022 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package psl
import okio.buffer
import okio.sink
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFile
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
@CacheableTask
abstract class PSLUpdateTask : DefaultTask() {
@get:Input abstract val pslData: Property<PublicSuffixListData>
@get:OutputFile abstract val outputFile: RegularFileProperty
@TaskAction
fun updatePSL() {
writeListToDisk(outputFile.get(), pslData.get())
}
private fun writeListToDisk(destination: RegularFile, data: PublicSuffixListData) {
val fileSink = destination.asFile.sink()
fileSink.buffer().use { sink ->
sink.writeInt(data.totalRuleBytes)
for (domain in data.sortedRules) {
sink.write(domain).writeByte('\n'.toInt())
}
sink.writeInt(data.totalExceptionRuleBytes)
for (domain in data.sortedExceptionRules) {
sink.write(domain).writeByte('\n'.toInt())
}
}
}
}

View file

@ -4,16 +4,15 @@
package psl package psl
import java.io.File import java.io.Serializable
import java.util.TreeSet import java.util.TreeSet
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okio.ByteString import okio.ByteString
import okio.ByteString.Companion.encodeUtf8 import okio.ByteString.Companion.encodeUtf8
import okio.buffer
import okio.sink
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.register
/** /**
* Gradle plugin to update the public suffix list used by the `lib-publicsuffixlist` component. * Gradle plugin to update the public suffix list used by the `lib-publicsuffixlist` component.
@ -23,34 +22,10 @@ import org.gradle.api.Project
*/ */
class PublicSuffixListPlugin : Plugin<Project> { class PublicSuffixListPlugin : Plugin<Project> {
override fun apply(project: Project) { override fun apply(project: Project) {
project.tasks.register("updatePSL") { project.tasks.register<PSLUpdateTask>("updatePSL") {
doLast {
val filename = project.projectDir.absolutePath + "/src/main/assets/publicsuffixes"
updatePublicSuffixList(filename)
}
}
}
private fun updatePublicSuffixList(destination: String) {
val list = fetchPublicSuffixList() val list = fetchPublicSuffixList()
writeListToDisk(destination, list) pslData.set(list)
} outputFile.set(project.layout.projectDirectory.file("src/main/assets/publicsuffixes"))
private fun writeListToDisk(destination: String, data: PublicSuffixListData) {
val fileSink = File(destination).sink()
fileSink.buffer().use { sink ->
sink.writeInt(data.totalRuleBytes)
for (domain in data.sortedRules) {
sink.write(domain).writeByte('\n'.toInt())
}
sink.writeInt(data.totalExceptionRuleBytes)
for (domain in data.sortedExceptionRules) {
sink.write(domain).writeByte('\n'.toInt())
}
} }
} }
@ -119,4 +94,4 @@ data class PublicSuffixListData(
var totalExceptionRuleBytes: Int = 0, var totalExceptionRuleBytes: Int = 0,
val sortedRules: TreeSet<ByteString> = TreeSet(), val sortedRules: TreeSet<ByteString> = TreeSet(),
val sortedExceptionRules: TreeSet<ByteString> = TreeSet() val sortedExceptionRules: TreeSet<ByteString> = TreeSet()
) ) : Serializable

View file

@ -24,7 +24,6 @@ afterEvaluate {
dependencies { dependencies {
implementation(libs.build.agp) implementation(libs.build.agp)
implementation(libs.build.binarycompat) implementation(libs.build.binarycompat)
implementation(libs.build.kover)
implementation(libs.build.kotlin) implementation(libs.build.kotlin)
implementation(libs.build.spotless) implementation(libs.build.spotless)
} }

View file

@ -6,10 +6,7 @@
import org.gradle.kotlin.dsl.withType import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins { plugins { id("com.github.android-password-store.kotlin-common") }
id("com.github.android-password-store.kotlin-common")
id("org.jetbrains.kotlinx.kover")
}
tasks.withType<KotlinCompile>().configureEach { tasks.withType<KotlinCompile>().configureEach {
kotlinOptions { kotlinOptions {
@ -18,11 +15,3 @@ tasks.withType<KotlinCompile>().configureEach {
} }
} }
} }
tasks.koverXmlReport {
xmlReportFile.set(rootProject.layout.buildDirectory.file("coverage-reports/${project.name}.xml"))
}
tasks.koverHtmlReport {
htmlReportDir.set(rootProject.layout.buildDirectory.dir("coverage-reports/${project.name}"))
}

View file

@ -40,7 +40,6 @@ aps-zxingAndroidEmbedded = "com.github.android-password-store:zxing-android-embe
build-agp = "com.android.tools.build:gradle:7.1.0" build-agp = "com.android.tools.build:gradle:7.1.0"
build-binarycompat = "org.jetbrains.kotlinx:binary-compatibility-validator:0.8.0" build-binarycompat = "org.jetbrains.kotlinx:binary-compatibility-validator:0.8.0"
build-kover = "org.jetbrains.kotlinx:kover:0.5.0"
build-dokka = "org.jetbrains.dokka:dokka-gradle-plugin:1.6.10" build-dokka = "org.jetbrains.dokka:dokka-gradle-plugin:1.6.10"
build-download = "de.undercouch:gradle-download-task:5.0.1" build-download = "de.undercouch:gradle-download-task:5.0.1"
build-hilt = "com.google.dagger:hilt-android-gradle-plugin:2.40.5" build-hilt = "com.google.dagger:hilt-android-gradle-plugin:2.40.5"