1
0
Fork 0
mirror of https://code.forgejo.org/actions/cache.git synced 2025-05-10 19:19:54 +02:00

Use @actions/glob for pattern matching

This commit is contained in:
Ethan Dennis 2020-03-05 12:12:12 -08:00
parent 1e233443e8
commit db235cfc56
No known key found for this signature in database
GPG key ID: 32E74B75DB4065DD
12 changed files with 4427 additions and 176 deletions

View file

@ -4,7 +4,6 @@ import * as cacheHttpClient from "./cacheHttpClient";
import { Events, Inputs, State } from "./constants";
import { createTar } from "./tar";
import * as utils from "./utils/actionUtils";
import * as pathUtils from "./utils/pathUtils";
async function run(): Promise<void> {
try {
@ -44,7 +43,7 @@ async function run(): Promise<void> {
return;
}
core.debug(`Cache ID: ${cacheId}`);
const cachePaths = pathUtils.expandPaths(
const cachePaths = await utils.expandPaths(
core
.getInput(Inputs.Path)
.split("\n")

View file

@ -1,5 +1,6 @@
import * as core from "@actions/core";
import * as io from "@actions/io";
import * as glob from "@actions/glob";
import * as fs from "fs";
import * as path from "path";
import * as uuidV4 from "uuid/v4";
@ -81,6 +82,19 @@ export function logWarning(message: string): void {
core.info(`${warningPrefix}${message}`);
}
export async function expandPaths(patterns: string[]): Promise<string[]> {
const paths: string[] = [];
const workspace = process.env["GITHUB_WORKSPACE"] ?? process.cwd();
const globber = await glob.create(patterns.join("\n"));
const files = await globber.glob();
paths.push(...files);
// Convert paths to relative paths here?
return paths.map(x => path.relative(workspace, x));
}
export function getSupportedEvents(): string[] {
return [Events.Push, Events.PullRequest];
}

View file

@ -1,63 +0,0 @@
import * as os from "os";
import * as path from "path";
import { readdirSync } from "fs";
import { IOptions, Minimatch } from "minimatch";
const globCharacters: string[] = ["*", "?", "[", "]"];
const options: IOptions = {
nocase: true,
dot: true,
nobrace: true
};
// export function resolvePath(filePath: string): string {
// if (filePath[0] === "~") {
// const home = os.homedir();
// if (!home) {
// throw new Error("Unable to resolve `~` to HOME");
// }
// return path.join(home, filePath.slice(1));
// }
// return path.resolve(filePath);
// }
export function isMinimatchPattern(pattern: string): boolean {
if (globCharacters.some(x => pattern.includes(x))) {
return true;
}
return false;
}
export function matchDirectories(pattern: string, workspace: string): string[] {
const directories = readdirSync(workspace, { withFileTypes: true })
.filter(dirent => dirent.isDirectory())
.map(dirent => dirent.name);
const minimatch = new Minimatch(pattern, options);
const matches = directories.filter(x => minimatch.match(x));
return matches;
}
export function expandPaths(filePaths: string[]): string[] {
const paths: string[] = [];
const workspace = process.env["GITHUB_WORKSPACE"] ?? process.cwd();
for (const filePath of filePaths) {
if (isMinimatchPattern(filePath)) {
paths.push(...matchDirectories(filePath, workspace));
} else if (filePath[0] === "~") {
const home = os.homedir();
if (!home) {
throw new Error("Unable to resolve `~` to HOME");
}
paths.push(path.join(home, filePath.slice(1)));
} else {
paths.push(path.resolve(filePath));
}
}
return paths;
}