diff --git a/CHANGELOG.md b/CHANGELOG.md index d0abe629..51b12c64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## 8.0.1 (2023-05-02) + +### Bug Fixes + +* Removed `git --version` run from the configuration phase, improving compatibility with Gradle configuration caching + [#524](https://github.com/bugsnag/bugsnag-android-gradle-plugin/pull/524) +* Fixed a Version parse bug which blocked the use of Gradle Nightly builds + [#525](https://github.com/bugsnag/bugsnag-android-gradle-plugin/pull/525) + ## 8.0.0 (2023-04-24) ### Enhancements diff --git a/gradle.properties b/gradle.properties index 878fea5f..e3cb05fb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ POM_ARTIFACT_ID=bugsnag-android-gradle-plugin POM_PACKAGING=jar GROUP=com.bugsnag -VERSION_NAME=8.0.0 +VERSION_NAME=8.0.1 POM_DESCRIPTION=Gradle plugin to automatically upload ProGuard mapping files to Bugsnag. POM_URL=https://github.com/bugsnag/bugsnag-android-gradle-plugin/ diff --git a/src/main/kotlin/com/bugsnag/android/gradle/BugsnagReleasesTask.kt b/src/main/kotlin/com/bugsnag/android/gradle/BugsnagReleasesTask.kt index 6b480aff..7e4b85bf 100644 --- a/src/main/kotlin/com/bugsnag/android/gradle/BugsnagReleasesTask.kt +++ b/src/main/kotlin/com/bugsnag/android/gradle/BugsnagReleasesTask.kt @@ -1,12 +1,12 @@ package com.bugsnag.android.gradle import com.bugsnag.android.gradle.internal.BugsnagHttpClientHelper +import com.bugsnag.android.gradle.internal.GitVersionValueSource import com.bugsnag.android.gradle.internal.UploadRequestClient import com.bugsnag.android.gradle.internal.mapProperty import com.bugsnag.android.gradle.internal.property import com.bugsnag.android.gradle.internal.register import com.bugsnag.android.gradle.internal.runRequestWithRetries -import com.bugsnag.android.gradle.internal.systemPropertyCompat import com.squareup.moshi.JsonClass import okhttp3.OkHttpClient import org.gradle.api.DefaultTask @@ -30,7 +30,6 @@ import org.gradle.process.ExecOperations import org.gradle.process.ExecResult import org.gradle.process.ExecSpec import org.gradle.process.internal.ExecException -import org.semver.Version import retrofit2.Response import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory @@ -268,22 +267,19 @@ open class BugsnagReleasesTask @Inject constructor( execSpec.standardOutput = baos logging.captureStandardError(LogLevel.INFO) } - String(baos.toByteArray(), Charset.forName(CHARSET_UTF8)).trim { it <= ' ' } + + baos.toString(Charset.defaultCharset()).trim { it <= ' ' } } catch (ignored: ExecException) { null } } internal fun configureMetadata() { - val gradleVersionNumber = gradleVersion.orNull?.let { - gradleVersion.set(it) - Version.parse(it) - } - gitVersion.set(providerFactory.provider { runCmd(VCS_COMMAND, "--version") }) - osArch.set(providerFactory.systemPropertyCompat(MK_OS_ARCH, gradleVersionNumber)) - osName.set(providerFactory.systemPropertyCompat(MK_OS_NAME, gradleVersionNumber)) - osVersion.set(providerFactory.systemPropertyCompat(MK_OS_VERSION, gradleVersionNumber)) - javaVersion.set(providerFactory.systemPropertyCompat(MK_JAVA_VERSION, gradleVersionNumber)) + gitVersion.set(providerFactory.of(GitVersionValueSource::class.java) {}) + osArch.set(providerFactory.systemProperty(MK_OS_ARCH)) + osName.set(providerFactory.systemProperty(MK_OS_NAME)) + osVersion.set(providerFactory.systemProperty(MK_OS_VERSION)) + javaVersion.set(providerFactory.systemProperty(MK_JAVA_VERSION)) } companion object { @@ -300,7 +296,6 @@ open class BugsnagReleasesTask @Inject constructor( private const val MK_OS_VERSION = "os.version" private const val MK_JAVA_VERSION = "java.version" private const val VCS_COMMAND = "git" - private const val CHARSET_UTF8 = "UTF-8" @JvmStatic fun isValidVcsProvider(provider: String?): Boolean { diff --git a/src/main/kotlin/com/bugsnag/android/gradle/internal/GitVersionValueSource.kt b/src/main/kotlin/com/bugsnag/android/gradle/internal/GitVersionValueSource.kt new file mode 100644 index 00000000..ce55a6a3 --- /dev/null +++ b/src/main/kotlin/com/bugsnag/android/gradle/internal/GitVersionValueSource.kt @@ -0,0 +1,22 @@ +package com.bugsnag.android.gradle.internal + +import org.gradle.api.provider.ValueSource +import org.gradle.api.provider.ValueSourceParameters +import org.gradle.process.ExecOperations +import java.io.ByteArrayOutputStream +import java.nio.charset.Charset +import javax.inject.Inject + +abstract class GitVersionValueSource : ValueSource { + @get:Inject + abstract val execOperations: ExecOperations + + override fun obtain(): String { + val output = ByteArrayOutputStream() + execOperations.exec { + it.commandLine("git", "--version") + it.standardOutput = output + } + return output.toString(Charset.defaultCharset()) + } +} diff --git a/src/main/kotlin/com/bugsnag/android/gradle/internal/GradleUtil.kt b/src/main/kotlin/com/bugsnag/android/gradle/internal/GradleUtil.kt index 1be05a73..90681782 100644 --- a/src/main/kotlin/com/bugsnag/android/gradle/internal/GradleUtil.kt +++ b/src/main/kotlin/com/bugsnag/android/gradle/internal/GradleUtil.kt @@ -20,20 +20,14 @@ import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.ListProperty import org.gradle.api.provider.MapProperty import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.provider.ProviderFactory import org.gradle.api.provider.SetProperty import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskProvider import org.semver.Version import java.io.File -internal object GradleVersions { - val VERSION_6_1: Version = Version.parse("6.1") -} - internal object AgpVersions { - // Use baseVersion to avoid any qualifiers like `-alpha06` + // Use releaseVersion to avoid any qualifiers like `-alpha06` val CURRENT: Version = Version.parse(ANDROID_GRADLE_PLUGIN_VERSION).toReleaseVersion() val VERSION_8_0: Version = Version.parse("8.0.0") val VERSION_9_0: Version = Version.parse("9.0.0") @@ -114,18 +108,6 @@ internal fun ApkVariantOutput.includesAbi(abi: String): Boolean { return splitArch == null || abi == splitArch } -/** Returns a String provider for a system property. */ -internal fun ProviderFactory.systemPropertyCompat( - name: String, - gradleVersion: Version? -): Provider { - return if (gradleVersion != null && gradleVersion >= GradleVersions.VERSION_6_1) { - systemProperty(name) - } else { - provider { System.getProperty(name) } - } -} - /** * Clears a directory of any files it contains. */