mirror of
https://github.com/gradle/gradle-build-action.git
synced 2024-11-22 17:12:51 +00:00
Extract init scripts into resource files
This commit is contained in:
parent
bdf9736c53
commit
d95713bd5d
3 changed files with 71 additions and 63 deletions
|
@ -169,72 +169,18 @@ export class GradleStateCache {
|
||||||
const propertiesFile = path.resolve(gradleUserHome, 'gradle.properties')
|
const propertiesFile = path.resolve(gradleUserHome, 'gradle.properties')
|
||||||
fs.appendFileSync(propertiesFile, 'org.gradle.daemon=false')
|
fs.appendFileSync(propertiesFile, 'org.gradle.daemon=false')
|
||||||
|
|
||||||
const buildScanCapture = path.resolve(initScriptsDir, 'build-scan-capture.init.gradle')
|
const initScriptFilenames = ['build-result-capture.init.gradle', 'project-root-capture.init.gradle']
|
||||||
fs.writeFileSync(
|
for (const initScriptFilename of initScriptFilenames) {
|
||||||
buildScanCapture,
|
const initScriptContent = this.readResourceAsString(initScriptFilename)
|
||||||
`import org.gradle.util.GradleVersion
|
const initScriptPath = path.resolve(initScriptsDir, initScriptFilename)
|
||||||
|
fs.writeFileSync(initScriptPath, initScriptContent)
|
||||||
// Only run against root build. Do not run against included builds.
|
|
||||||
def isTopLevelBuild = gradle.getParent() == null
|
|
||||||
if (isTopLevelBuild) {
|
|
||||||
def version = GradleVersion.current().baseVersion
|
|
||||||
def atLeastGradle4 = version >= GradleVersion.version("4.0")
|
|
||||||
def atLeastGradle6 = version >= GradleVersion.version("6.0")
|
|
||||||
|
|
||||||
if (atLeastGradle6) {
|
|
||||||
settingsEvaluated { settings ->
|
|
||||||
if (settings.pluginManager.hasPlugin("com.gradle.enterprise")) {
|
|
||||||
registerCallbacks(settings.extensions["gradleEnterprise"].buildScan, settings.rootProject.name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (atLeastGradle4) {
|
|
||||||
projectsEvaluated { gradle ->
|
|
||||||
if (gradle.rootProject.pluginManager.hasPlugin("com.gradle.build-scan")) {
|
|
||||||
registerCallbacks(gradle.rootProject.extensions["buildScan"], gradle.rootProject.name)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
def registerCallbacks(buildScanExtension, rootProjectName) {
|
private readResourceAsString(resource: string): string {
|
||||||
buildScanExtension.with {
|
// Resolving relative to __dirname will force the compiler to inline the content in the distribution
|
||||||
def buildFailed = false
|
const absolutePath = path.resolve(__dirname, '..', '..', 'src', 'resources', resource)
|
||||||
buildFinished { result ->
|
return fs.readFileSync(absolutePath, 'utf8')
|
||||||
buildFailed = (result.failure != null)
|
|
||||||
}
|
|
||||||
|
|
||||||
buildScanPublished { buildScan ->
|
|
||||||
// Send commands directly to GitHub Actions via STDOUT.
|
|
||||||
def gradleCommand = rootProjectName + " " + gradle.startParameter.taskNames.join(" ")
|
|
||||||
|
|
||||||
def githubSummaryFile = new File(System.getenv("GITHUB_STEP_SUMMARY"))
|
|
||||||
if (buildFailed) {
|
|
||||||
githubSummaryFile << ":x: Gradle Build \`\${gradleCommand}\` [![Gradle Enterprise Build Scan](https://img.shields.io/badge/Gradle%20Enterprise%20Build%20Scan%E2%84%A2-FAILED-red?logo=Gradle)](\${buildScan.buildScanUri})"
|
|
||||||
} else {
|
|
||||||
githubSummaryFile << ":white_check_mark: Gradle Build \`\${gradleCommand}\` [![Gradle Enterprise Build Scan](https://img.shields.io/badge/Gradle%20Enterprise%20Build%20Scan%E2%84%A2-SUCCESS-brightgreen?logo=Gradle)](\${buildScan.buildScanUri})"
|
|
||||||
}
|
|
||||||
println("::set-output name=build-scan-url::\${buildScan.buildScanUri}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`
|
|
||||||
)
|
|
||||||
|
|
||||||
const projectRootCapture = path.resolve(initScriptsDir, 'project-root-capture.init.gradle')
|
|
||||||
fs.writeFileSync(
|
|
||||||
projectRootCapture,
|
|
||||||
`
|
|
||||||
// Only run against root build. Do not run against included builds.
|
|
||||||
def isTopLevelBuild = gradle.getParent() == null
|
|
||||||
if (isTopLevelBuild) {
|
|
||||||
settingsEvaluated { settings ->
|
|
||||||
def projectRootEntry = settings.rootDir.absolutePath + "\\n"
|
|
||||||
def projectRootList = new File(settings.gradle.gradleUserHomeDir, "${PROJECT_ROOTS_FILE}")
|
|
||||||
if (!projectRootList.exists() || !projectRootList.text.contains(projectRootEntry)) {
|
|
||||||
projectRootList << projectRootEntry
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
50
src/resources/build-result-capture.init.gradle
Normal file
50
src/resources/build-result-capture.init.gradle
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* Capture information for each executed Gradle build to display in the job summary.
|
||||||
|
*/
|
||||||
|
import org.gradle.util.GradleVersion
|
||||||
|
|
||||||
|
// Only run against root build. Do not run against included builds.
|
||||||
|
def isTopLevelBuild = gradle.getParent() == null
|
||||||
|
if (isTopLevelBuild) {
|
||||||
|
def version = GradleVersion.current().baseVersion
|
||||||
|
def atLeastGradle4 = version >= GradleVersion.version("4.0")
|
||||||
|
def atLeastGradle6 = version >= GradleVersion.version("6.0")
|
||||||
|
|
||||||
|
if (atLeastGradle6) {
|
||||||
|
settingsEvaluated { settings ->
|
||||||
|
if (settings.pluginManager.hasPlugin("com.gradle.enterprise")) {
|
||||||
|
registerCallbacks(settings.extensions["gradleEnterprise"].buildScan, settings.rootProject.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (atLeastGradle4) {
|
||||||
|
projectsEvaluated { gradle ->
|
||||||
|
if (gradle.rootProject.pluginManager.hasPlugin("com.gradle.build-scan")) {
|
||||||
|
registerCallbacks(gradle.rootProject.extensions["buildScan"], gradle.rootProject.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def registerCallbacks(buildScanExtension, rootProjectName) {
|
||||||
|
buildScanExtension.with {
|
||||||
|
def buildFailed = false
|
||||||
|
buildFinished { result ->
|
||||||
|
buildFailed = (result.failure != null)
|
||||||
|
}
|
||||||
|
|
||||||
|
buildScanPublished { buildScan ->
|
||||||
|
def gradleCommand = rootProjectName + " " + gradle.startParameter.taskNames.join(" ")
|
||||||
|
|
||||||
|
// Write job summary to magic file defined by GitHub Actions.
|
||||||
|
def githubSummaryFile = new File(System.getenv("GITHUB_STEP_SUMMARY"))
|
||||||
|
if (buildFailed) {
|
||||||
|
githubSummaryFile << ":x: Gradle Build `${gradleCommand}` [![Gradle Enterprise Build Scan](https://img.shields.io/badge/Gradle%20Enterprise%20Build%20Scan%E2%84%A2-FAILED-red?logo=Gradle)](${buildScan.buildScanUri})"
|
||||||
|
} else {
|
||||||
|
githubSummaryFile << ":white_check_mark: Gradle Build `${gradleCommand}` [![Gradle Enterprise Build Scan](https://img.shields.io/badge/Gradle%20Enterprise%20Build%20Scan%E2%84%A2-SUCCESS-brightgreen?logo=Gradle)](${buildScan.buildScanUri})"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send 'set-output' command directly to GitHub Actions via STDOUT.
|
||||||
|
println("::set-output name=build-scan-url::${buildScan.buildScanUri}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
src/resources/project-root-capture.init.gradle
Normal file
12
src/resources/project-root-capture.init.gradle
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// Capture the build root directory for each executed Gradle build.
|
||||||
|
// Only run against root build. Do not run against included builds.
|
||||||
|
def isTopLevelBuild = gradle.getParent() == null
|
||||||
|
if (isTopLevelBuild) {
|
||||||
|
settingsEvaluated { settings ->
|
||||||
|
def projectRootEntry = settings.rootDir.absolutePath + '\n'
|
||||||
|
def projectRootList = new File(settings.gradle.gradleUserHomeDir, "project-roots.txt")
|
||||||
|
if (!projectRootList.exists() || !projectRootList.text.contains(projectRootEntry)) {
|
||||||
|
projectRootList << projectRootEntry
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue