mirror of
https://github.com/softprops/action-gh-release.git
synced 2025-11-02 04:53:48 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aec2ec56f9 | ||
|
|
4db716b167 | ||
|
|
14820f2cee |
@@ -1,3 +1,11 @@
|
||||
## 2.4.0
|
||||
|
||||
## What's Changed
|
||||
|
||||
### Exciting New Features 🎉
|
||||
|
||||
* feat(action): respect working_directory for files globs by @stephenway in https://github.com/softprops/action-gh-release/pull/667
|
||||
|
||||
## 2.3.4
|
||||
|
||||
## What's Changed
|
||||
|
||||
@@ -128,6 +128,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: '',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -156,6 +157,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: '',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -183,6 +185,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: '',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -211,6 +214,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: '',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -243,6 +247,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: 'env-token',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -272,6 +277,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: 'input-token',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -300,6 +306,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: '',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -327,6 +334,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: '',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: false,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -354,6 +362,7 @@ describe('util', () => {
|
||||
github_ref: '',
|
||||
github_repository: '',
|
||||
github_token: '',
|
||||
input_working_directory: undefined,
|
||||
input_append_body: true,
|
||||
input_body: undefined,
|
||||
input_body_path: undefined,
|
||||
@@ -388,6 +397,10 @@ describe('util', () => {
|
||||
'tests/data/foo/bar.txt',
|
||||
]);
|
||||
});
|
||||
|
||||
it('resolves files relative to working_directory', async () => {
|
||||
assert.deepStrictEqual(paths(['data/**/*'], 'tests'), ['tests/data/foo/bar.txt']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('unmatchedPatterns', () => {
|
||||
@@ -397,6 +410,12 @@ describe('util', () => {
|
||||
['tests/data/does/not/exist/*'],
|
||||
);
|
||||
});
|
||||
|
||||
it('resolves unmatched relative to working_directory', async () => {
|
||||
assert.deepStrictEqual(unmatchedPatterns(['data/does/not/exist/*'], 'tests'), [
|
||||
'data/does/not/exist/*',
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('replaceSpacesWithDots', () => {
|
||||
|
||||
@@ -27,6 +27,9 @@ inputs:
|
||||
files:
|
||||
description: "Newline-delimited list of path globs for asset files to upload"
|
||||
required: false
|
||||
working_directory:
|
||||
description: "Base directory to resolve 'files' globs against (defaults to job working-directory)"
|
||||
required: false
|
||||
overwrite_files:
|
||||
description: "Overwrite existing files with the same name. Defaults to true"
|
||||
required: false
|
||||
|
||||
2
dist/index.js
vendored
2
dist/index.js
vendored
File diff suppressed because one or more lines are too long
20
package-lock.json
generated
20
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "action-gh-release",
|
||||
"version": "2.3.4",
|
||||
"version": "2.4.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "action-gh-release",
|
||||
"version": "2.3.4",
|
||||
"version": "2.4.0",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.11.1",
|
||||
"@actions/github": "^6.0.1",
|
||||
@@ -18,12 +18,12 @@
|
||||
"devDependencies": {
|
||||
"@types/glob": "^9.0.0",
|
||||
"@types/mime-types": "^3.0.1",
|
||||
"@types/node": "^20.19.18",
|
||||
"@types/node": "^20.19.19",
|
||||
"@vercel/ncc": "^0.38.4",
|
||||
"@vitest/coverage-v8": "^3.2.4",
|
||||
"prettier": "3.6.2",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.9.2",
|
||||
"typescript": "^5.9.3",
|
||||
"typescript-formatter": "^7.2.2",
|
||||
"vitest": "^3.1.4"
|
||||
}
|
||||
@@ -1482,9 +1482,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.19.18",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.18.tgz",
|
||||
"integrity": "sha512-KeYVbfnbsBCyKG8e3gmUqAfyZNcoj/qpEbHRkQkfZdKOBrU7QQ+BsTdfqLSWX9/m1ytYreMhpKvp+EZi3UFYAg==",
|
||||
"version": "20.19.19",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.19.tgz",
|
||||
"integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -2817,9 +2817,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.9.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
|
||||
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
|
||||
"version": "5.9.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "action-gh-release",
|
||||
"version": "2.3.4",
|
||||
"version": "2.4.0",
|
||||
"private": true,
|
||||
"description": "GitHub Action for creating GitHub Releases",
|
||||
"main": "lib/main.js",
|
||||
@@ -32,12 +32,12 @@
|
||||
"devDependencies": {
|
||||
"@types/glob": "^9.0.0",
|
||||
"@types/mime-types": "^3.0.1",
|
||||
"@types/node": "^20.19.18",
|
||||
"@types/node": "^20.19.19",
|
||||
"@vercel/ncc": "^0.38.4",
|
||||
"@vitest/coverage-v8": "^3.2.4",
|
||||
"prettier": "3.6.2",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.9.2",
|
||||
"typescript": "^5.9.3",
|
||||
"typescript-formatter": "^7.2.2",
|
||||
"vitest": "^3.1.4"
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ async function run() {
|
||||
throw new Error(`⚠️ GitHub Releases requires a tag`);
|
||||
}
|
||||
if (config.input_files) {
|
||||
const patterns = unmatchedPatterns(config.input_files);
|
||||
const patterns = unmatchedPatterns(config.input_files, config.input_working_directory);
|
||||
patterns.forEach((pattern) => {
|
||||
if (config.input_fail_on_unmatched_files) {
|
||||
throw new Error(`⚠️ Pattern '${pattern}' does not match any files.`);
|
||||
@@ -50,7 +50,7 @@ async function run() {
|
||||
//);
|
||||
const rel = await release(config, new GitHubReleaser(gh));
|
||||
if (config.input_files && config.input_files.length > 0) {
|
||||
const files = paths(config.input_files);
|
||||
const files = paths(config.input_files, config.input_working_directory);
|
||||
if (files.length == 0) {
|
||||
if (config.input_fail_on_unmatched_files) {
|
||||
throw new Error(`⚠️ ${config.input_files} does not include a valid file.`);
|
||||
|
||||
32
src/util.ts
32
src/util.ts
@@ -1,5 +1,6 @@
|
||||
import * as glob from 'glob';
|
||||
import { statSync, readFileSync } from 'fs';
|
||||
import * as pathLib from 'path';
|
||||
|
||||
export interface Config {
|
||||
github_token: string;
|
||||
@@ -12,6 +13,7 @@ export interface Config {
|
||||
input_body?: string;
|
||||
input_body_path?: string;
|
||||
input_files?: string[];
|
||||
input_working_directory?: string;
|
||||
input_overwrite_files?: boolean;
|
||||
input_draft?: boolean;
|
||||
input_preserve_order?: boolean;
|
||||
@@ -62,6 +64,7 @@ export const parseConfig = (env: Env): Config => {
|
||||
input_body: env.INPUT_BODY,
|
||||
input_body_path: env.INPUT_BODY_PATH,
|
||||
input_files: parseInputFiles(env.INPUT_FILES || ''),
|
||||
input_working_directory: env.INPUT_WORKING_DIRECTORY || undefined,
|
||||
input_overwrite_files: env.INPUT_OVERWRITE_FILES
|
||||
? env.INPUT_OVERWRITE_FILES == 'true'
|
||||
: undefined,
|
||||
@@ -84,17 +87,34 @@ const parseMakeLatest = (value: string | undefined): 'true' | 'false' | 'legacy'
|
||||
return undefined;
|
||||
};
|
||||
|
||||
export const paths = (patterns: string[]): string[] => {
|
||||
export const paths = (patterns: string[], cwd?: string): string[] => {
|
||||
return patterns.reduce((acc: string[], pattern: string): string[] => {
|
||||
return acc.concat(glob.sync(pattern).filter((path) => statSync(path).isFile()));
|
||||
const matches = glob.sync(pattern, { cwd, dot: true, absolute: false });
|
||||
const resolved = matches
|
||||
.map((p) => (cwd ? pathLib.join(cwd, p) : p))
|
||||
.filter((p) => {
|
||||
try {
|
||||
return statSync(p).isFile();
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return acc.concat(resolved);
|
||||
}, []);
|
||||
};
|
||||
|
||||
export const unmatchedPatterns = (patterns: string[]): string[] => {
|
||||
export const unmatchedPatterns = (patterns: string[], cwd?: string): string[] => {
|
||||
return patterns.reduce((acc: string[], pattern: string): string[] => {
|
||||
return acc.concat(
|
||||
glob.sync(pattern).filter((path) => statSync(path).isFile()).length == 0 ? [pattern] : [],
|
||||
);
|
||||
const matches = glob.sync(pattern, { cwd, dot: true, absolute: false });
|
||||
const files = matches.filter((p) => {
|
||||
try {
|
||||
const full = cwd ? pathLib.join(cwd, p) : p;
|
||||
return statSync(full).isFile();
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return acc.concat(files.length == 0 ? [pattern] : []);
|
||||
}, []);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user