mirror of
https://github.com/gradle/actions.git
synced 2026-03-26 06:14:31 +08:00
With this change, the caching functionality of `setup-gradle` and `dependency-submission` is now provided by `gradle-actions-caching`, a closed-source library distributed under our [Terms of Use](https://gradle.com/legal/terms-of-use/). The rest of the action implementation remains open source. Using `setup-gradle` or `dependency-submission` with caching enabled involves loading and using the `gradle-actions-caching` component, requiring acceptance of the [Terms of Use](https://gradle.com/legal/terms-of-use/). There are no functional changes to caching provided by these actions: all workflows will continue to function as before. The non-caching aspects of action implementation remain open source. By running these actions with caching disabled they can be used without ever loading `gradle-actions-caching` or accepting the license terms. Supporting the caching infrastructure in this project requires a substantial engineering investment by Gradle Technologies, which we can sustain thanks to Develocity, our commercial offering. Caching technologies are a core part of the Develocity offering, and the caching in `setup-gradle` fits squarely in that space. This licensing change lets us continue to build advanced capabilities that go beyond what we would offer as open source. Proper production-ready Configuration Cache support will be the first capability. Improving build performance for self-hosted runners will follow. We may introduce functionality restrictions in future updates. However, caching functionality will remain free for public repositories. We have a long-standing commitment to open source, as maintainers of Gradle Build Tool, and by [sponsoring the open source community](https://gradle.com/oss-sponsored-by-develocity/) with free Develocity licenses. Public repositories are primarily used by open source projects, and we remain committed to supporting them. - Implementation of caching logic to save and restore Gradle User Home content has been removed, replaced by the `gradle-actions-caching` component. - The `@actions/caching` library is still used to cache Gradle distributions that are downloaded and provisioned by `setup-gradle`. This PR updates to the latest version of `@actions/caching`, and removes the patch that is no longer required. - License notices are now displayed in documentation, logs and the generated Job Summary.
71 lines
2.1 KiB
TypeScript
71 lines
2.1 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 configCacheHit(): boolean
|
|
get buildScanUri(): string
|
|
get buildScanFailed(): boolean
|
|
}
|
|
|
|
export function loadBuildResults(): BuildResult[] {
|
|
const results = getUnprocessedResults().map(filePath => {
|
|
const content = fs.readFileSync(filePath, 'utf8')
|
|
const buildResult = JSON.parse(content) as BuildResult
|
|
addScanResults(filePath, buildResult)
|
|
return buildResult
|
|
})
|
|
return results
|
|
}
|
|
|
|
export function markBuildResultsProcessed(): void {
|
|
getUnprocessedResults().forEach(markProcessed)
|
|
}
|
|
|
|
function getUnprocessedResults(): string[] {
|
|
const buildResultsDir = path.resolve(process.env['RUNNER_TEMP']!, '.gradle-actions', '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 addScanResults(buildResultsFile: string, buildResult: BuildResult): void {
|
|
const buildScansDir = path.resolve(process.env['RUNNER_TEMP']!, '.gradle-actions', 'build-scans')
|
|
if (!fs.existsSync(buildScansDir)) {
|
|
return
|
|
}
|
|
|
|
const buildScanResults = path.resolve(buildScansDir, path.basename(buildResultsFile))
|
|
if (fs.existsSync(buildScanResults)) {
|
|
const content = fs.readFileSync(buildScanResults, 'utf8')
|
|
const scanResults = JSON.parse(content)
|
|
Object.assign(buildResult, scanResults)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
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, '')
|
|
}
|