Compare commits

...

6 commits

Author SHA1 Message Date
Taj
babd6e61fe
Merge 1fa29582bb into 19cd0bcd2b 2025-09-16 11:31:57 +00:00
Taj
1fa29582bb
Merge branch 'softprops:master' into master 2025-09-16 17:01:54 +05:30
Taj
1e7fd8c9f7 fix: Make util.paths test platform-agnostic
This commit fixes the `util.paths` test in `__tests__/util.test.ts` to be platform-agnostic by using `path.join` for constructing expected file paths. This resolves the test failure on Windows due to differences in path separators.
2025-08-24 03:07:26 +05:30
Taj
c9fa1ee1e1 fix: update import path for Config interface 2025-08-24 03:01:33 +05:30
Taj
1080adb44e
Merge branch 'softprops:master' into master 2025-08-24 02:55:24 +05:30
Taj
bd82c38418 feat: Separate interfaces into dedicated files and folder 2025-08-24 02:54:48 +05:30
8 changed files with 84 additions and 78 deletions

View file

@ -10,6 +10,7 @@ import {
} from '../src/util';
import { assert, describe, expect, it } from 'vitest';
import * as path from 'path';
describe('util', () => {
describe('uploadUrl', () => {
@ -385,7 +386,7 @@ describe('util', () => {
describe('paths', () => {
it('resolves files given a set of paths', async () => {
assert.deepStrictEqual(paths(['tests/data/**/*', 'tests/data/does/not/exist/*']), [
'tests/data/foo/bar.txt',
path.join('tests', 'data', 'foo', 'bar.txt'),
]);
});
});

View file

@ -3,64 +3,11 @@ import { statSync } from 'fs';
import { open } from 'fs/promises';
import { lookup } from 'mime-types';
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>;
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 {
github: GitHub;
constructor(github: GitHub) {

View 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
View file

@ -0,0 +1,4 @@
export * from './configInterface';
export * from './releaserInterface';
export * from './releaseAssetInterface';
export * from './releaseInterface';

View file

@ -0,0 +1,5 @@
export interface ReleaseAsset {
name: string;
mime: string;
size: number;
}

View 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 }>;
}

View 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[] }>;
}

View file

@ -1,28 +1,7 @@
import * as glob from 'glob';
import { statSync, readFileSync } from 'fs';
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;
}
import { Config } from './interfaces';
export const uploadUrl = (url: string): string => {
const templateMarkerPos = url.indexOf('{');