gradle/sources/src/build-results.ts
2024-07-17 20:35:14 -06:00

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, '')
}