diff --git a/__tests__/util.test.ts b/__tests__/util.test.ts index 87e0ad3..4491066 100644 --- a/__tests__/util.test.ts +++ b/__tests__/util.test.ts @@ -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'), ]); }); }); diff --git a/src/github.ts b/src/github.ts index 9fc103d..d40e2a0 100644 --- a/src/github.ts +++ b/src/github.ts @@ -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; -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) { diff --git a/src/interfaces/configInterface.ts b/src/interfaces/configInterface.ts new file mode 100644 index 0000000..f5590bc --- /dev/null +++ b/src/interfaces/configInterface.ts @@ -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; +} diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts new file mode 100644 index 0000000..ce1fa6b --- /dev/null +++ b/src/interfaces/index.ts @@ -0,0 +1,4 @@ +export * from './configInterface'; +export * from './releaserInterface'; +export * from './releaseAssetInterface'; +export * from './releaseInterface'; diff --git a/src/interfaces/releaseAssetInterface.ts b/src/interfaces/releaseAssetInterface.ts new file mode 100644 index 0000000..0c569d5 --- /dev/null +++ b/src/interfaces/releaseAssetInterface.ts @@ -0,0 +1,5 @@ +export interface ReleaseAsset { + name: string; + mime: string; + size: number; +} diff --git a/src/interfaces/releaseInterface.ts b/src/interfaces/releaseInterface.ts new file mode 100644 index 0000000..e654dee --- /dev/null +++ b/src/interfaces/releaseInterface.ts @@ -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 }>; +} diff --git a/src/interfaces/releaserInterface.ts b/src/interfaces/releaserInterface.ts new file mode 100644 index 0000000..1c39dfe --- /dev/null +++ b/src/interfaces/releaserInterface.ts @@ -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[] }>; +} diff --git a/src/util.ts b/src/util.ts index c6e2b4d..315e088 100644 --- a/src/util.ts +++ b/src/util.ts @@ -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('{');