android - Gradle 任务可自动执行来自 Firebase App Distribution 开发版本的 gradle 中提交消息的发行说明

标签 android git gradle travis-ci firebase-app-distribution

我们使用 Travis CI 并持续部署开发和 QA 构建 - 最近还设置了 Firebase App Distribution。我希望能够使用 git 提交消息作为开发和 QA 构建的“发行说明”,并在 firebaseAppDistribution 所在的 gradle 中实现自动化。例如:

构建.Gradle:

 generateGitCommitMessage() {
// get last commit message after > Task :app:assemble and before > Task :app:appDistributionUpload
return commitMessage
    }

firebaseAppDistribution {
            groups = "Android"
            // Automate capturing commit message in a string (or txt file) for dev builds
            releaseNotes="${generateGitCommitMessage()}"
        }

是否可以在 Gradle 中捕获推送提交时输入的当前提交消息? Travis 中的 AppDistribution 发生在最后,就在上传 apk 之前,在 > Task :app:assemble 之后,所以我希望是这样。

我研究了一些类似的脚本,例如 https://kapie.com/2016/gradle-generate-release-notes/https://medium.com/@lowcarbrob/android-pro-tip-generating-your-apps-changelog-from-git-inside-build-gradle-19a07533eec4但我们不标记构建,所以这些并不适合我的情况,而且我对 groovy 不是很熟悉。

提前致谢。

最佳答案

自从我弄清楚以来,我正在回答我自己的问题。我在 build.gradle 应用程序级别创建了一个任务,然后通过创建 env 变量从 travis.yml 文件中调用该任务。

在应用程序级别的 build.gradle 中: 首先确保您正确添加了 firebase appDistribution 代码块:

firebaseAppDistribution {
            groups = "Android"
            releaseNotesFile="./release-notes.txt"
        }

task getCommitMessage {
doLast ( {
    println "Generating release notes (release-notes.txt)"
    def releaseNotes = new File('release-notes.txt')
    releaseNotes.delete()
    releaseNotes << "[[ Commit message for this build: ]]\n"
    def cmdLine = "git log --format=%B -n 1"
    def procCommit = cmdLine.execute()
    procCommit.in.eachLine { line -> releaseNotes << line + "\n" }
    releaseNotes << "\n\n\n"
});

}

在 travis.yml 中:

env:
    - RELEASE_NOTES="getCommitMessage"
...

script:
    - free -m
    - ./gradlew $RELEASE_NOTES

关于android - Gradle 任务可自动执行来自 Firebase App Distribution 开发版本的 gradle 中提交消息的发行说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58916454/

相关文章:

java - Gradle 子项目设置、git 子模块

java - Android 密码字段 - 输入始终隐藏

android - 在android中设置推送通知

Android:发布一个应用程序,不同的屏幕截图对应不同的语言?

javascript - Cordova Android 推荐人

git:为什么在我执行 'git push' 之后我在 X 提交之前领先于 origin/master ?

gradle - Kotlin DSL : Import a versions. gradle.kts 进入另一个 build.gradle.kts

docker - 在Jenkins声明式管道中的代理设置期间,如何运行某些内容?

java - 从另一个 APK 加载具有布局的 fragment

git - git pull 的输出实际上意味着什么?