mirror of
https://github.com/gradle/actions.git
synced 2025-08-23 18:31:28 +08:00
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
import * as fs from 'fs'
|
|
import * as path from 'path'
|
|
|
|
export interface BuildResult {
|
|
get rootProjectName(): string
|
|
get rootProjectDir(): string
|
|
get requestedTasks(): string
|
|
get gradleVersion(): string
|
|
get gradleHomeDir(): string
|
|
get buildFailed(): boolean
|
|
get buildScanUri(): string
|
|
get buildScanFailed(): boolean
|
|
}
|
|
|
|
export class BuildResults {
|
|
results: BuildResult[]
|
|
|
|
constructor(results: BuildResult[]) {
|
|
this.results = results
|
|
}
|
|
|
|
anyFailed(): boolean {
|
|
return this.results.some(result => result.buildFailed)
|
|
}
|
|
|
|
uniqueGradleHomes(): string[] {
|
|
const allHomes = this.results.map(buildResult => buildResult.gradleHomeDir)
|
|
return Array.from(new Set(allHomes))
|
|
}
|
|
}
|
|
|
|
export function loadBuildResults(): BuildResults {
|
|
const results = getUnprocessedResults().map(filePath => {
|
|
const content = fs.readFileSync(filePath, 'utf8')
|
|
return JSON.parse(content) as BuildResult
|
|
})
|
|
return new BuildResults(results)
|
|
}
|
|
|
|
export function markBuildResultsProcessed(): void {
|
|
getUnprocessedResults().forEach(markProcessed)
|
|
}
|
|
|
|
function getUnprocessedResults(): string[] {
|
|
const buildResultsDir = path.resolve(process.env['RUNNER_TEMP']!, '.build-results')
|
|
if (!fs.existsSync(buildResultsDir)) {
|
|
return []
|
|
}
|
|
|
|
return fs
|
|
.readdirSync(buildResultsDir)
|
|
.map(file => {
|
|
return path.resolve(buildResultsDir, file)
|
|
})
|
|
.filter(filePath => {
|
|
return path.extname(filePath) === '.json' && !isProcessed(filePath)
|
|
})
|
|
}
|
|
|
|
function isProcessed(resultFile: string): boolean {
|
|
const markerFile = `${resultFile}.processed`
|
|
return fs.existsSync(markerFile)
|
|
}
|
|
|
|
function markProcessed(resultFile: string): void {
|
|
const markerFile = `${resultFile}.processed`
|
|
fs.writeFileSync(markerFile, '')
|
|
}
|