mirror of
https://github.com/softprops/action-gh-release
synced 2025-09-22 11:47:58 +00:00
Compare commits
7 commits
7a8c73ad30
...
8e369029f5
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8e369029f5 | ||
![]() |
5d1b0b1164 | ||
![]() |
f6021cf9a4 | ||
![]() |
1e7fd8c9f7 | ||
![]() |
c9fa1ee1e1 | ||
![]() |
1080adb44e | ||
![]() |
bd82c38418 |
11 changed files with 90 additions and 84 deletions
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
|
@ -10,7 +10,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||||
|
|
||||||
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v4
|
||||||
with:
|
with:
|
||||||
node-version-file: ".tool-versions"
|
node-version-file: ".tool-versions"
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
} from '../src/util';
|
} from '../src/util';
|
||||||
|
|
||||||
import { assert, describe, expect, it } from 'vitest';
|
import { assert, describe, expect, it } from 'vitest';
|
||||||
|
import * as path from 'path';
|
||||||
|
|
||||||
describe('util', () => {
|
describe('util', () => {
|
||||||
describe('uploadUrl', () => {
|
describe('uploadUrl', () => {
|
||||||
|
@ -385,7 +386,7 @@ describe('util', () => {
|
||||||
describe('paths', () => {
|
describe('paths', () => {
|
||||||
it('resolves files given a set of paths', async () => {
|
it('resolves files given a set of paths', async () => {
|
||||||
assert.deepStrictEqual(paths(['tests/data/**/*', 'tests/data/does/not/exist/*']), [
|
assert.deepStrictEqual(paths(['tests/data/**/*', 'tests/data/does/not/exist/*']), [
|
||||||
'tests/data/foo/bar.txt',
|
path.join('tests', 'data', 'foo', 'bar.txt'),
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
8
package-lock.json
generated
8
package-lock.json
generated
|
@ -18,7 +18,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/glob": "^9.0.0",
|
"@types/glob": "^9.0.0",
|
||||||
"@types/mime-types": "^3.0.1",
|
"@types/mime-types": "^3.0.1",
|
||||||
"@types/node": "^20.19.11",
|
"@types/node": "^20.19.13",
|
||||||
"@vercel/ncc": "^0.38.3",
|
"@vercel/ncc": "^0.38.3",
|
||||||
"@vitest/coverage-v8": "^3.2.4",
|
"@vitest/coverage-v8": "^3.2.4",
|
||||||
"prettier": "3.6.2",
|
"prettier": "3.6.2",
|
||||||
|
@ -1482,9 +1482,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.19.11",
|
"version": "20.19.13",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.11.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.13.tgz",
|
||||||
"integrity": "sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==",
|
"integrity": "sha512-yCAeZl7a0DxgNVteXFHt9+uyFbqXGy/ShC4BlcHkoE0AfGXYv/BUiplV72DjMYXHDBXFjhvr6DD1NiRVfB4j8g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/glob": "^9.0.0",
|
"@types/glob": "^9.0.0",
|
||||||
"@types/mime-types": "^3.0.1",
|
"@types/mime-types": "^3.0.1",
|
||||||
"@types/node": "^20.19.11",
|
"@types/node": "^20.19.13",
|
||||||
"@vercel/ncc": "^0.38.3",
|
"@vercel/ncc": "^0.38.3",
|
||||||
"@vitest/coverage-v8": "^3.2.4",
|
"@vitest/coverage-v8": "^3.2.4",
|
||||||
"prettier": "3.6.2",
|
"prettier": "3.6.2",
|
||||||
|
|
|
@ -3,64 +3,11 @@ import { statSync } from 'fs';
|
||||||
import { open } from 'fs/promises';
|
import { open } from 'fs/promises';
|
||||||
import { lookup } from 'mime-types';
|
import { lookup } from 'mime-types';
|
||||||
import { basename } from 'path';
|
import { basename } from 'path';
|
||||||
import { alignAssetName, Config, isTag, releaseBody } from './util';
|
import { alignAssetName, isTag, releaseBody } from './util';
|
||||||
|
import { ReleaseAsset, Config, Releaser, Release } from './interfaces';
|
||||||
|
|
||||||
type GitHub = InstanceType<typeof GitHub>;
|
type GitHub = InstanceType<typeof GitHub>;
|
||||||
|
|
||||||
export interface ReleaseAsset {
|
|
||||||
name: string;
|
|
||||||
mime: string;
|
|
||||||
size: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Release {
|
|
||||||
id: number;
|
|
||||||
upload_url: string;
|
|
||||||
html_url: string;
|
|
||||||
tag_name: string;
|
|
||||||
name: string | null;
|
|
||||||
body?: string | null | undefined;
|
|
||||||
target_commitish: string;
|
|
||||||
draft: boolean;
|
|
||||||
prerelease: boolean;
|
|
||||||
assets: Array<{ id: number; name: string }>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Releaser {
|
|
||||||
getReleaseByTag(params: { owner: string; repo: string; tag: string }): Promise<{ data: Release }>;
|
|
||||||
|
|
||||||
createRelease(params: {
|
|
||||||
owner: string;
|
|
||||||
repo: string;
|
|
||||||
tag_name: string;
|
|
||||||
name: string;
|
|
||||||
body: string | undefined;
|
|
||||||
draft: boolean | undefined;
|
|
||||||
prerelease: boolean | undefined;
|
|
||||||
target_commitish: string | undefined;
|
|
||||||
discussion_category_name: string | undefined;
|
|
||||||
generate_release_notes: boolean | undefined;
|
|
||||||
make_latest: 'true' | 'false' | 'legacy' | undefined;
|
|
||||||
}): Promise<{ data: Release }>;
|
|
||||||
|
|
||||||
updateRelease(params: {
|
|
||||||
owner: string;
|
|
||||||
repo: string;
|
|
||||||
release_id: number;
|
|
||||||
tag_name: string;
|
|
||||||
target_commitish: string;
|
|
||||||
name: string;
|
|
||||||
body: string | undefined;
|
|
||||||
draft: boolean | undefined;
|
|
||||||
prerelease: boolean | undefined;
|
|
||||||
discussion_category_name: string | undefined;
|
|
||||||
generate_release_notes: boolean | undefined;
|
|
||||||
make_latest: 'true' | 'false' | 'legacy' | undefined;
|
|
||||||
}): Promise<{ data: Release }>;
|
|
||||||
|
|
||||||
allReleases(params: { owner: string; repo: string }): AsyncIterableIterator<{ data: Release[] }>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class GitHubReleaser implements Releaser {
|
export class GitHubReleaser implements Releaser {
|
||||||
github: GitHub;
|
github: GitHub;
|
||||||
constructor(github: GitHub) {
|
constructor(github: GitHub) {
|
||||||
|
|
22
src/interfaces/configInterface.ts
Normal file
22
src/interfaces/configInterface.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
export interface Config {
|
||||||
|
github_token: string;
|
||||||
|
github_ref: string;
|
||||||
|
github_repository: string;
|
||||||
|
// user provided
|
||||||
|
input_name?: string;
|
||||||
|
input_tag_name?: string;
|
||||||
|
input_repository?: string;
|
||||||
|
input_body?: string;
|
||||||
|
input_body_path?: string;
|
||||||
|
input_files?: string[];
|
||||||
|
input_overwrite_files?: boolean;
|
||||||
|
input_draft?: boolean;
|
||||||
|
input_preserve_order?: boolean;
|
||||||
|
input_prerelease?: boolean;
|
||||||
|
input_fail_on_unmatched_files?: boolean;
|
||||||
|
input_target_commitish?: string;
|
||||||
|
input_discussion_category_name?: string;
|
||||||
|
input_generate_release_notes?: boolean;
|
||||||
|
input_append_body?: boolean;
|
||||||
|
input_make_latest: 'true' | 'false' | 'legacy' | undefined;
|
||||||
|
}
|
4
src/interfaces/index.ts
Normal file
4
src/interfaces/index.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
export * from './configInterface';
|
||||||
|
export * from './releaserInterface';
|
||||||
|
export * from './releaseAssetInterface';
|
||||||
|
export * from './releaseInterface';
|
5
src/interfaces/releaseAssetInterface.ts
Normal file
5
src/interfaces/releaseAssetInterface.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
export interface ReleaseAsset {
|
||||||
|
name: string;
|
||||||
|
mime: string;
|
||||||
|
size: number;
|
||||||
|
}
|
12
src/interfaces/releaseInterface.ts
Normal file
12
src/interfaces/releaseInterface.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
export interface Release {
|
||||||
|
id: number;
|
||||||
|
upload_url: string;
|
||||||
|
html_url: string;
|
||||||
|
tag_name: string;
|
||||||
|
name: string | null;
|
||||||
|
body?: string | null | undefined;
|
||||||
|
target_commitish: string;
|
||||||
|
draft: boolean;
|
||||||
|
prerelease: boolean;
|
||||||
|
assets: Array<{ id: number; name: string }>;
|
||||||
|
}
|
36
src/interfaces/releaserInterface.ts
Normal file
36
src/interfaces/releaserInterface.ts
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
import { Release } from './releaseInterface';
|
||||||
|
|
||||||
|
export interface Releaser {
|
||||||
|
getReleaseByTag(params: { owner: string; repo: string; tag: string }): Promise<{ data: Release }>;
|
||||||
|
|
||||||
|
createRelease(params: {
|
||||||
|
owner: string;
|
||||||
|
repo: string;
|
||||||
|
tag_name: string;
|
||||||
|
name: string;
|
||||||
|
body: string | undefined;
|
||||||
|
draft: boolean | undefined;
|
||||||
|
prerelease: boolean | undefined;
|
||||||
|
target_commitish: string | undefined;
|
||||||
|
discussion_category_name: string | undefined;
|
||||||
|
generate_release_notes: boolean | undefined;
|
||||||
|
make_latest: 'true' | 'false' | 'legacy' | undefined;
|
||||||
|
}): Promise<{ data: Release }>;
|
||||||
|
|
||||||
|
updateRelease(params: {
|
||||||
|
owner: string;
|
||||||
|
repo: string;
|
||||||
|
release_id: number;
|
||||||
|
tag_name: string;
|
||||||
|
target_commitish: string;
|
||||||
|
name: string;
|
||||||
|
body: string | undefined;
|
||||||
|
draft: boolean | undefined;
|
||||||
|
prerelease: boolean | undefined;
|
||||||
|
discussion_category_name: string | undefined;
|
||||||
|
generate_release_notes: boolean | undefined;
|
||||||
|
make_latest: 'true' | 'false' | 'legacy' | undefined;
|
||||||
|
}): Promise<{ data: Release }>;
|
||||||
|
|
||||||
|
allReleases(params: { owner: string; repo: string }): AsyncIterableIterator<{ data: Release[] }>;
|
||||||
|
}
|
23
src/util.ts
23
src/util.ts
|
@ -1,28 +1,7 @@
|
||||||
import * as glob from 'glob';
|
import * as glob from 'glob';
|
||||||
import { statSync, readFileSync } from 'fs';
|
import { statSync, readFileSync } from 'fs';
|
||||||
|
|
||||||
export interface Config {
|
import { Config } from './interfaces';
|
||||||
github_token: string;
|
|
||||||
github_ref: string;
|
|
||||||
github_repository: string;
|
|
||||||
// user provided
|
|
||||||
input_name?: string;
|
|
||||||
input_tag_name?: string;
|
|
||||||
input_repository?: string;
|
|
||||||
input_body?: string;
|
|
||||||
input_body_path?: string;
|
|
||||||
input_files?: string[];
|
|
||||||
input_overwrite_files?: boolean;
|
|
||||||
input_draft?: boolean;
|
|
||||||
input_preserve_order?: boolean;
|
|
||||||
input_prerelease?: boolean;
|
|
||||||
input_fail_on_unmatched_files?: boolean;
|
|
||||||
input_target_commitish?: string;
|
|
||||||
input_discussion_category_name?: string;
|
|
||||||
input_generate_release_notes?: boolean;
|
|
||||||
input_append_body?: boolean;
|
|
||||||
input_make_latest: 'true' | 'false' | 'legacy' | undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const uploadUrl = (url: string): string => {
|
export const uploadUrl = (url: string): string => {
|
||||||
const templateMarkerPos = url.indexOf('{');
|
const templateMarkerPos = url.indexOf('{');
|
||||||
|
|
Loading…
Reference in a new issue