build: allow the build to proceed if the directory is not a git repo

This commit is contained in:
Akash Yadav
2024-05-27 17:00:18 +05:30
parent 4097d4181f
commit 1fd27e8029
6 changed files with 65 additions and 25 deletions
+2 -3
View File
@@ -15,7 +15,6 @@
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
import com.android.SdkConstants
import com.itsaky.androidide.build.config.AGP_VERSION_MINIMUM
import com.itsaky.androidide.build.config.BuildConfig
import com.itsaky.androidide.build.config.CI
@@ -65,8 +64,8 @@ tasks.create("generateBuildInfo") {
"FDROID_BUILD_VERSION_CODE" to (FDroidConfig.fDroidVersionCode ?: -1).toString(),
"CI_BUILD" to CI.isCiBuild.toString(),
"CI_GIT_BRANCH" to CI.branchName,
"CI_COMMIT_HASH" to CI.commitHash,
"CI_GIT_BRANCH" to if (CI.isGitRepo) CI.branchName else "NOT-A-GIT-REPO",
"CI_COMMIT_HASH" to if (CI.isGitRepo) CI.commitHash else "NOT-A-GIT-REPO",
"REPO_HOST" to ProjectConfig.REPO_HOST,
"REPO_OWNER" to ProjectConfig.REPO_OWNER,
@@ -43,14 +43,29 @@ object CI {
/** The short commit hash. */
val commitHash by lazy {
check(isGitRepo) {
"This build is not a Git repository."
}
val sha = System.getenv("GITHUB_SHA") ?: "HEAD"
cmdOutput("git", "rev-parse", "--short", sha)
}
/** Name of the current branch. */
val branchName by lazy {
System.getenv("GITHUB_REF_NAME") ?: cmdOutput("git", "rev-parse", "--abbrev-ref",
"HEAD") // by default, 'main'
check(isGitRepo) {
"This build is not a Git repository."
}
System.getenv("GITHUB_REF_NAME") ?: cmdOutput(
"git", "rev-parse", "--abbrev-ref",
"HEAD"
) // by default, 'main'
}
/**
* Whether the current build is a Git repository.
*/
val isGitRepo by lazy {
cmdOutput("git", "rev-parse", "--is-inside-work-tree").trim() == "true"
}
/** Whether the current build is a CI build. */
@@ -34,6 +34,7 @@ object ProjectConfig {
const val PROJECT_SITE = "https://m.androidide.com"
}
private var shouldPrintNotAGitRepoWarning = true
private var shouldPrintVersionName = true
/**
@@ -41,8 +42,8 @@ private var shouldPrintVersionName = true
*/
val Project.isFDroidBuild: Boolean
get() {
if (!com.itsaky.androidide.build.config.FDroidConfig.hasRead) {
com.itsaky.androidide.build.config.FDroidConfig.load(this)
if (!FDroidConfig.hasRead) {
FDroidConfig.load(this)
}
return com.itsaky.androidide.build.config.FDroidConfig.isFDroidBuild
}
@@ -50,23 +51,33 @@ val Project.isFDroidBuild: Boolean
val Project.simpleVersionName: String
get() {
if (!CI.isGitRepo) {
if (shouldPrintNotAGitRepoWarning) {
logger.warn("Unable to infer version name. The build is not running on a git repository.")
shouldPrintNotAGitRepoWarning = false
}
return "1.0.0-beta"
}
val version = rootProject.version.toString()
val regex = Regex("^v\\d+\\.?\\d+\\.?\\d+-\\w+")
val simpleVersion = regex.find(version)?.value?.substring(1)?.also {
if (com.itsaky.androidide.build.config.shouldPrintVersionName) {
if (shouldPrintVersionName) {
logger.warn("Simple version name is '$it' (from version $version)")
com.itsaky.androidide.build.config.shouldPrintVersionName = false
shouldPrintVersionName = false
}
}
if (simpleVersion == null) {
if (com.itsaky.androidide.build.config.CI.isTestEnv) {
if (CI.isTestEnv) {
return "1.0.0-beta"
}
throw IllegalStateException(
"Cannot extract simple version name. Invalid version string '$version'. Version names must be SEMVER with 'v' prefix")
"Cannot extract simple version name. Invalid version string '$version'. Version names must be SEMVER with 'v' prefix"
)
}
return simpleVersion
@@ -80,13 +91,14 @@ val Project.projectVersionCode: Int
val regex = Regex("^\\d+\\.?\\d+\\.?\\d+")
val versionCode = regex.find(version)?.value?.replace(".", "")?.toInt()?.also {
if (com.itsaky.androidide.build.config.shouldPrintVersionCode) {
if (shouldPrintVersionCode) {
logger.warn("Version code is '$it' (from version ${version}).")
com.itsaky.androidide.build.config.shouldPrintVersionCode = false
shouldPrintVersionCode = false
}
}
?: throw IllegalStateException(
"Cannot extract version code. Invalid version string '$version'. Version names must be SEMVER with 'v' prefix")
"Cannot extract version code. Invalid version string '$version'. Version names must be SEMVER with 'v' prefix"
)
return versionCode
}
@@ -102,8 +114,8 @@ val Project.publishingVersion: String
return publishing
}
if (com.itsaky.androidide.build.config.CI.isCiBuild && com.itsaky.androidide.build.config.CI.branchName != "main") {
publishing += "-${com.itsaky.androidide.build.config.CI.commitHash}-SNAPSHOT"
if (CI.isCiBuild && CI.isGitRepo && CI.branchName != "main") {
publishing += "-${CI.commitHash}-SNAPSHOT"
}
return publishing
@@ -118,11 +130,11 @@ val Project.publishingVersion: String
*/
val Project.downloadVersion: String
get() {
return if (com.itsaky.androidide.build.config.CI.isCiBuild || isFDroidBuild) {
return if (CI.isCiBuild || isFDroidBuild) {
publishingVersion
} else {
// sometimes, when working locally, Gradle fails to download the latest snapshot version
// this may cause issues while initializing the project in AndroidIDE
com.itsaky.androidide.build.config.VersionUtils.getLatestSnapshotVersion("gradle-plugin")
VersionUtils.getLatestSnapshotVersion("gradle-plugin")
}
}
@@ -19,7 +19,6 @@ package com.itsaky.androidide.build.config
import java.io.File
/** @author Akash Yadav */
private const val generatedWarning = "DO NOT EDIT - Automatically generated file"
/**
@@ -43,8 +43,11 @@ class SigningConfigPlugin : Plugin<Project> {
return
}
// Download the signing key
downloadSigningKey()
val signingKey = signingKey.get().asFile
if (!signingKey.exists()) {
logger.warn("Signing key not found. Debug signing will be used.")
return
}
// Create and apply the signing config
extensions.getByType(BaseExtension::class.java).let { extension ->
@@ -53,8 +56,6 @@ class SigningConfigPlugin : Plugin<Project> {
val storePass = getEnvOrProp(KEY_STORE_PASS)
val keyPass = getEnvOrProp(KEY_PASS)
val signingKey = signingKey.get().asFile
if (alias != null && storePass != null && keyPass != null && signingKey.exists()) {
val config = extension.signingConfigs.create("common") {
storeFile = signingKey
@@ -70,7 +71,6 @@ class SigningConfigPlugin : Plugin<Project> {
logger.warn(
"Signing info not configured. keystoreFile=$signingKey[exists=${signingKey.exists()}]"
)
null
}
}
+16 -1
View File
@@ -84,6 +84,21 @@ buildscript {
}
}
val isGitRepo by lazy {
cmdOutput("git", "rev-parse", "--is-inside-work-tree").trim() == "true"
}
private fun cmdOutput(vararg args: String): String {
return ProcessBuilder(*args)
.directory(File("."))
.redirectErrorStream(true)
.start()
.inputStream
.bufferedReader()
.readText()
.trim()
}
FDroidConfig.load(rootDir)
if (FDroidConfig.hasRead && FDroidConfig.isFDroidBuild) {
@@ -95,7 +110,7 @@ if (FDroidConfig.hasRead && FDroidConfig.isFDroidBuild) {
project.setProperty("version", simpleVersion)
}
} else {
} else if(isGitRepo) {
apply {
plugin("com.mooltiverse.oss.nyx")
}