Skip to content

Commit a32153f

Browse files
committed
fix indentation
1 parent 2754010 commit a32153f

File tree

1 file changed

+98
-98
lines changed

1 file changed

+98
-98
lines changed

dev-packages/clear-cache-gh-action/index.mjs

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -32,105 +32,105 @@ async function run() {
3232
* @param {{repo: string, owner: string, clearDevelop: boolean, clearPending: boolean, clearBranches: boolean, workflowName: string}} options
3333
*/
3434
async function clearGithubCaches(octokit, { repo, owner, clearDevelop, clearPending, clearBranches, workflowName }) {
35+
let deletedCaches = 0;
36+
let remainingCaches = 0;
37+
38+
let deletedSize = 0;
39+
let remainingSize = 0;
40+
41+
/** @type {Map<number, ReturnType<typeof octokit.rest.pulls.get>>} */
42+
const cachedPrs = new Map();
43+
/** @type {Map<string, ReturnType<typeof octokit.rest.actions.listWorkflowRunsForRepo>>} */
44+
const cachedWorkflows = new Map();
45+
46+
/**
47+
* Clear caches.
48+
*
49+
* @param {{ref: string}} options
50+
*/
51+
const shouldClearCache = async ({ ref }) => {
52+
// Do not clear develop caches if clearDevelop is false.
53+
if (!clearDevelop && ref === 'refs/heads/develop') {
54+
core.info('> Keeping cache because it is on develop.');
55+
return false;
56+
}
57+
58+
// There are two fundamental paths here:
59+
// If the cache belongs to a PR, we need to check if the PR has any pending workflows.
60+
// Else, we assume the cache belongs to a branch, where we do not check for pending workflows
61+
const pullNumber = /^refs\/pull\/(\d+)\/merge$/.exec(ref)?.[1];
62+
const isPr = !!pullNumber;
63+
64+
// Case 1: This is a PR, and we do not want to clear pending PRs
65+
// In this case, we need to fetch all PRs and workflow runs to check them
66+
if (isPr && !clearPending) {
67+
const pr =
68+
cachedPrs.get(pullNumber) ||
69+
(await octokit.rest.pulls.get({
70+
owner,
71+
repo,
72+
pull_number: pullNumber,
73+
}));
74+
cachedPrs.set(pullNumber, pr);
75+
76+
const prBranch = pr.data.head.ref;
77+
78+
// Check if PR has any pending workflows
79+
const workflowRuns =
80+
cachedWorkflows.get(prBranch) ||
81+
(await octokit.rest.actions.listWorkflowRunsForRepo({
82+
repo,
83+
owner,
84+
branch: prBranch,
85+
}));
86+
cachedWorkflows.set(prBranch, workflowRuns);
87+
88+
// We only care about the relevant workflow
89+
const relevantWorkflowRuns = workflowRuns.data.workflow_runs.filter(workflow => workflow.name === workflowName);
90+
91+
const latestWorkflowRun = relevantWorkflowRuns[0];
92+
93+
core.info(`> Latest relevant workflow run: ${latestWorkflowRun.html_url}`);
94+
95+
// No relevant workflow? Clear caches!
96+
if (!latestWorkflowRun) {
97+
core.info('> Clearing cache because no relevant workflow was found.');
98+
return true;
99+
}
100+
101+
// If the latest run was not successful, keep caches
102+
// as either the run may be in progress,
103+
// or failed - in which case we may want to re-run the workflow
104+
if (latestWorkflowRun.conclusion !== 'success') {
105+
core.info(`> Keeping cache because latest workflow is ${latestWorkflowRun.conclusion}.`);
106+
return false;
107+
}
108+
109+
core.info(`> Clearing cache because latest workflow run is ${latestWorkflowRun.conclusion}.`);
110+
} else if (isPr) {
111+
// Case 2: This is a PR, but we do not want to clear pending PRs
112+
// In this case, this cache should never be cleared
113+
core.info('> Keeping cache of every PR workflow run.');
114+
return false;
115+
} else if (clearBranches) {
116+
// Case 3: This is not a PR, and we want to clean branches
117+
core.info('> Clearing cache because it is not a PR.');
118+
return true;
119+
} else {
120+
// Case 4: This is not a PR, and we do not want to clean branches
121+
core.info('> Keeping cache for non-PR workflow run.');
122+
return false;
123+
}
124+
};
125+
35126
for await (const response of octokit.paginate.iterator(octokit.rest.actions.getActionsCacheList, {
36127
owner,
37128
repo,
38129
})) {
39-
/** @type {Map<number, ReturnType<typeof octokit.rest.pulls.get>>} */
40-
const cachedPrs = new Map();
41-
/** @type {Map<string, ReturnType<typeof octokit.rest.actions.listWorkflowRunsForRepo>>} */
42-
const cachedWorkflows = new Map();
43-
44-
let deletedCaches = 0;
45-
let remainingCaches = 0;
46-
47-
let deletedSize = 0;
48-
let remainingSize = 0;
49-
50130
if (!response.data.length) {
51131
break;
52132
}
53133

54-
/**
55-
* Clear caches.
56-
*
57-
* @param {{ref: string}} options
58-
*/
59-
const shouldClearCache = async ({ ref }) => {
60-
// Do not clear develop caches if clearDevelop is false.
61-
if (!clearDevelop && ref === 'refs/heads/develop') {
62-
core.info('> Keeping cache because it is on develop.');
63-
return false;
64-
}
65-
66-
// There are two fundamental paths here:
67-
// If the cache belongs to a PR, we need to check if the PR has any pending workflows.
68-
// Else, we assume the cache belongs to a branch, where we do not check for pending workflows
69-
const pullNumber = /^refs\/pull\/(\d+)\/merge$/.exec(ref)?.[1];
70-
const isPr = !!pullNumber;
71-
72-
// Case 1: This is a PR, and we do not want to clear pending PRs
73-
// In this case, we need to fetch all PRs and workflow runs to check them
74-
if (isPr && !clearPending) {
75-
const pr =
76-
cachedPrs.get(pullNumber) ||
77-
(await octokit.rest.pulls.get({
78-
owner,
79-
repo,
80-
pull_number: pullNumber,
81-
}));
82-
cachedPrs.set(pullNumber, pr);
83-
84-
const prBranch = pr.data.head.ref;
85-
86-
// Check if PR has any pending workflows
87-
const workflowRuns =
88-
cachedWorkflows.get(prBranch) ||
89-
(await octokit.rest.actions.listWorkflowRunsForRepo({
90-
repo,
91-
owner,
92-
branch: prBranch,
93-
}));
94-
cachedWorkflows.set(prBranch, workflowRuns);
95-
96-
// We only care about the relevant workflow
97-
const relevantWorkflowRuns = workflowRuns.data.workflow_runs.filter(workflow => workflow.name === workflowName);
98-
99-
const latestWorkflowRun = relevantWorkflowRuns[0];
100-
101-
core.info(`> Latest relevant workflow run: ${latestWorkflowRun.html_url}`);
102-
103-
// No relevant workflow? Clear caches!
104-
if (!latestWorkflowRun) {
105-
core.info('> Clearing cache because no relevant workflow was found.');
106-
return true;
107-
}
108-
109-
// If the latest run was not successful, keep caches
110-
// as either the run may be in progress,
111-
// or failed - in which case we may want to re-run the workflow
112-
if (latestWorkflowRun.conclusion !== 'success') {
113-
core.info(`> Keeping cache because latest workflow is ${latestWorkflowRun.conclusion}.`);
114-
return false;
115-
}
116-
117-
core.info(`> Clearing cache because latest workflow run is ${latestWorkflowRun.conclusion}.`);
118-
} else if (isPr) {
119-
// Case 2: This is a PR, but we do not want to clear pending PRs
120-
// In this case, this cache should never be cleared
121-
core.info('> Keeping cache of every PR workflow run.');
122-
return false;
123-
} else if (clearBranches) {
124-
// Case 3: This is not a PR, and we want to clean branches
125-
core.info('> Clearing cache because it is not a PR.');
126-
return true;
127-
} else {
128-
// Case 4: This is not a PR, and we do not want to clean branches
129-
core.info('> Keeping cache for non-PR workflow run.');
130-
return false;
131-
}
132-
};
133-
134134
for (const { id, ref, size_in_bytes } of response.data) {
135135
core.info(`Checking cache ${id} for ${ref}...`);
136136

@@ -152,15 +152,15 @@ async function clearGithubCaches(octokit, { repo, owner, clearDevelop, clearPend
152152
remainingSize += size_in_bytes;
153153
}
154154
}
155+
}
155156

156-
const format = new Intl.NumberFormat('en-US', {
157-
style: 'decimal',
158-
});
157+
const format = new Intl.NumberFormat('en-US', {
158+
style: 'decimal',
159+
});
159160

160-
core.info('Summary:');
161-
core.info(`Deleted ${deletedCaches} caches, freeing up ~${format.format(deletedSize / 1000 / 1000)} mb.`);
162-
core.info(`Remaining ${remainingCaches} caches, using ~${format.format(remainingSize / 1000 / 1000)} mb.`);
163-
}
161+
core.info('Summary:');
162+
core.info(`Deleted ${deletedCaches} caches, freeing up ~${format.format(deletedSize / 1000 / 1000)} mb.`);
163+
core.info(`Remaining ${remainingCaches} caches, using ~${format.format(remainingSize / 1000 / 1000)} mb.`);
164164
}
165165

166166
run();

0 commit comments

Comments
 (0)