Skip to content

Commit 99d7f1d

Browse files
committed
update
1 parent 51cdf87 commit 99d7f1d

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed

main.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,18 @@ const main = async () => {
88
const primaryKey = core.getInput(`key`, { required: true })
99
const restoreKeys = core.getInput(`restore-keys`, { required: false }).split(`\n`).filter(key => key !== ``)
1010

11-
core.saveState(`already-existing-images`, JSON.stringify(await new ImageDetector().getExistingImages()))
11+
const imageDetector = new ImageDetector()
12+
13+
const alreadyExistingImages = await imageDetector.getExistingImages()
1214

1315
const layerCache = new LayerCache([])
1416
layerCache.concurrency = parseInt(core.getInput(`concurrency`, { required: true }), 10)
1517
const restoredKey = await layerCache.restore(primaryKey, restoreKeys)
1618
await layerCache.cleanUp()
1719

1820
core.saveState(`restored-key`, JSON.stringify(restoredKey !== undefined ? restoredKey : ''))
21+
core.saveState(`already-existing-images`, JSON.stringify(alreadyExistingImages))
22+
core.saveState(`restored-images`, JSON.stringify(imageDetector.getImagesShouldSave(alreadyExistingImages)))
1923
}
2024

2125
main().catch(e => {

post.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,24 @@ const main = async () => {
1212
}
1313

1414
const primaryKey = core.getInput('key', { required: true })
15-
const restoredKey = JSON.parse(core.getState(`restored-key`)) as string
1615

17-
const rawAlreadyExistingImages = core.getState(`already-existing-images`)
18-
assertType<string>(rawAlreadyExistingImages)
19-
const alreadyExistingImages = JSON.parse(rawAlreadyExistingImages)
16+
const restoredKey = JSON.parse(core.getState(`restored-key`))
17+
const alreadyExistingImages = JSON.parse(core.getState(`already-existing-images`))
18+
const restoredImages = JSON.parse(core.getState(`restored-images`))
19+
20+
assertType<string>(restoredKey)
2021
assertType<string[]>(alreadyExistingImages)
22+
assertType<string[]>(restoredImages)
2123

2224
const imageDetector = new ImageDetector()
23-
imageDetector.registerAlreadyExistedImages(alreadyExistingImages)
24-
await imageDetector.getExistingImages()
25-
core.debug(JSON.stringify({ imageIdsToSave: imageDetector.getImagesShouldSave() }))
26-
const layerCache = new LayerCache(imageDetector.getImagesShouldSave())
27-
layerCache.concurrency = parseInt(core.getInput(`concurrency`, { required: true }), 10)
28-
29-
layerCache.unformattedOrigianlKey = primaryKey
30-
core.debug(JSON.stringify({ restoredKey, formattedOriginalCacheKey: layerCache.getFormattedOriginalCacheKey()}))
31-
if (restoredKey !== `` && restoredKey === layerCache.getFormattedOriginalCacheKey()) {
32-
core.info(`Key ${restoredKey} already exists, skip storing.`)
25+
if (await imageDetector.checkIfImageHasAdded(restoredImages)) {
26+
core.info(`Key ${restoredKey} already exists, not saving cache.`)
3327
return
3428
}
29+
30+
const layerCache = new LayerCache(await imageDetector.getImagesShouldSave(alreadyExistingImages))
31+
layerCache.concurrency = parseInt(core.getInput(`concurrency`, { required: true }), 10)
32+
3533
await layerCache.store(primaryKey)
3634
await layerCache.cleanUp()
3735
}

src/ImageDetector.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,24 @@ import exec from 'actions-exec-listener'
22
import * as core from '@actions/core'
33

44
export class ImageDetector {
5-
alreadyExistedImages: Set<string> = new Set([])
6-
existingImages: Set<string> = new Set([])
7-
registerAlreadyExistedImages(images: string[]) {
8-
images.forEach(image => this.alreadyExistedImages.add(image))
9-
}
10-
115
async getExistingImages(): Promise<string[]> {
6+
const existingSet = new Set<string>([])
127
const ids = (await exec.exec(`docker image ls -q`, [], { silent: true })).stdoutStr.split(`\n`).filter(id => id !== ``)
138
const repotags = (await exec.exec(`sh -c "docker image ls --format '{{ .Repository }}:{{ .Tag }}' --filter 'dangling=false'"`, [], { silent: true })).stdoutStr.split(`\n`).filter(id => id !== ``);
149
core.debug(JSON.stringify({ log: "getExistingImages", ids, repotags }));
15-
([...ids, ...repotags]).forEach(image => this.existingImages.add(image))
16-
core.debug(JSON.stringify({ existingImages: this.existingImages }))
17-
return Array.from(this.existingImages)
10+
([...ids, ...repotags]).forEach(image => existingSet.add(image))
11+
core.debug(JSON.stringify({ existingSet }))
12+
return Array.from(existingSet)
1813
}
1914

20-
getImagesShouldSave(): string[] {
21-
const resultSet = new Set(this.existingImages.values())
22-
this.alreadyExistedImages.forEach(image => resultSet.delete(image))
15+
async getImagesShouldSave(alreadRegisteredImages: string[]): Promise<string[]> {
16+
const resultSet = new Set(await this.getExistingImages())
17+
alreadRegisteredImages.forEach(image => resultSet.delete(image))
2318
return Array.from(resultSet)
2419
}
20+
21+
async checkIfImageHasAdded(restoredImages: string[]): Promise<boolean> {
22+
const existing = await this.getExistingImages()
23+
return JSON.stringify(restoredImages) === JSON.stringify(existing)
24+
}
2525
}

0 commit comments

Comments
 (0)