Use node to set file timestamps

Using `find` and `touch` will not work on windows, so this provides a
cross-platform mechanism.
This commit is contained in:
Daz DeBoer 2022-08-26 07:04:11 -06:00
parent 82bc72e1e7
commit 0e4b100458
No known key found for this signature in database
GPG key ID: DD6B9F0B06683D5D

View file

@ -1,4 +1,6 @@
import * as core from '@actions/core'
import * as exec from '@actions/exec' import * as exec from '@actions/exec'
import * as glob from '@actions/glob'
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
@ -46,14 +48,21 @@ export class CacheCleaner {
} }
private async ageAllFiles(fileName = '*'): Promise<void> { private async ageAllFiles(fileName = '*'): Promise<void> {
await exec.exec( core.debug(`Aging all files in Gradle User Homee with name ${fileName}`)
'find', await this.setUtimes(`${this.gradleUserHome}/**/${fileName}`, new Date(0))
[this.gradleUserHome, '-name', fileName, '-exec', 'touch', '-m', '-t', '197001010000', '{}', '+'],
{}
)
} }
private async touchAllFiles(fileName = '*'): Promise<void> { private async touchAllFiles(fileName = '*'): Promise<void> {
await exec.exec('find', [this.gradleUserHome, '-name', fileName, '-exec', 'touch', '-m', '{}', '+'], {}) core.debug(`Touching all files in Gradle User Home with name ${fileName}`)
await this.setUtimes(`${this.gradleUserHome}/**/${fileName}`, new Date())
}
private async setUtimes(pattern: string, timestamp: Date): Promise<void> {
const globber = await glob.create(pattern, {
implicitDescendants: false
})
for await (const file of globber.globGenerator()) {
fs.utimesSync(file, timestamp, timestamp)
}
} }
} }