mirror of
https://github.com/softprops/action-gh-release.git
synced 2024-09-11 20:27:22 +03:00
372 lines
12 KiB
TypeScript
372 lines
12 KiB
TypeScript
import {
|
|
releaseBody,
|
|
isTag,
|
|
paths,
|
|
parseConfig,
|
|
parseInputFiles,
|
|
unmatchedPatterns,
|
|
uploadUrl,
|
|
} from "../src/util";
|
|
import * as assert from "assert";
|
|
|
|
describe("util", () => {
|
|
describe("uploadUrl", () => {
|
|
it("strips template", () => {
|
|
assert.equal(
|
|
uploadUrl(
|
|
"https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}"
|
|
),
|
|
"https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets"
|
|
);
|
|
});
|
|
});
|
|
describe("parseInputFiles", () => {
|
|
it("parses empty strings", () => {
|
|
assert.deepStrictEqual(parseInputFiles(""), []);
|
|
});
|
|
it("parses comma-delimited strings", () => {
|
|
assert.deepStrictEqual(parseInputFiles("foo,bar"), ["foo", "bar"]);
|
|
});
|
|
it("parses newline and comma-delimited (and then some)", () => {
|
|
assert.deepStrictEqual(
|
|
parseInputFiles("foo,bar\nbaz,boom,\n\ndoom,loom "),
|
|
["foo", "bar", "baz", "boom", "doom", "loom"]
|
|
);
|
|
});
|
|
});
|
|
describe("releaseBody", () => {
|
|
it("uses input body", () => {
|
|
assert.equal(
|
|
"foo",
|
|
releaseBody({
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_body: "foo",
|
|
input_body_path: undefined,
|
|
input_draft: false,
|
|
input_prerelease: false,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
})
|
|
);
|
|
});
|
|
it("uses input body path", () => {
|
|
assert.equal(
|
|
"bar",
|
|
releaseBody({
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_body: undefined,
|
|
input_body_path: "__tests__/release.txt",
|
|
input_draft: false,
|
|
input_prerelease: false,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
})
|
|
);
|
|
});
|
|
it("defaults to body path when both body and body path are provided", () => {
|
|
assert.equal(
|
|
"bar",
|
|
releaseBody({
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_body: "foo",
|
|
input_body_path: "__tests__/release.txt",
|
|
input_draft: false,
|
|
input_prerelease: false,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
})
|
|
);
|
|
});
|
|
});
|
|
describe("parseConfig", () => {
|
|
it("parses basic config", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
// note: inputs declared in actions.yml, even when declared not required,
|
|
// are still provided by the actions runtime env as empty strings instead of
|
|
// the normal absent env value one would expect. this breaks things
|
|
// as an empty string !== undefined in terms of what we pass to the api
|
|
// so we cover that in a test case here to ensure undefined values are actually
|
|
// resolved as undefined and not empty strings
|
|
INPUT_TARGET_COMMITISH: "",
|
|
INPUT_DISCUSSION_CATEGORY_NAME: "",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: undefined,
|
|
input_prerelease: undefined,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
|
|
it("parses basic config with commitish", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_TARGET_COMMITISH: "affa18ef97bc9db20076945705aba8c516139abd",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: undefined,
|
|
input_prerelease: undefined,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: "affa18ef97bc9db20076945705aba8c516139abd",
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
it("supports discussion category names", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_DISCUSSION_CATEGORY_NAME: "releases",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: undefined,
|
|
input_prerelease: undefined,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: "releases",
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
|
|
it("supports generating release notes", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_GENERATE_RELEASE_NOTES: "true",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: undefined,
|
|
input_prerelease: undefined,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: true,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
|
|
it("prefers GITHUB_TOKEN over token input for backwards compatibility", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_DRAFT: "false",
|
|
INPUT_PRERELEASE: "true",
|
|
GITHUB_TOKEN: "env-token",
|
|
INPUT_TOKEN: "input-token",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "env-token",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: false,
|
|
input_prerelease: true,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
it("uses input token as the source of GITHUB_TOKEN by default", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_DRAFT: "false",
|
|
INPUT_PRERELEASE: "true",
|
|
INPUT_TOKEN: "input-token",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "input-token",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: false,
|
|
input_prerelease: true,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
it("parses basic config with draft and prerelease", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_DRAFT: "false",
|
|
INPUT_PRERELEASE: "true",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: false,
|
|
input_prerelease: true,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
it("parses basic config where make_latest is passed", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_MAKE_LATEST: "false",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_append_body: false,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: undefined,
|
|
input_prerelease: undefined,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: "false",
|
|
}
|
|
);
|
|
});
|
|
it("parses basic config with append_body", () => {
|
|
assert.deepStrictEqual(
|
|
parseConfig({
|
|
INPUT_APPEND_BODY: "true",
|
|
}),
|
|
{
|
|
github_ref: "",
|
|
github_repository: "",
|
|
github_token: "",
|
|
input_append_body: true,
|
|
input_body: undefined,
|
|
input_body_path: undefined,
|
|
input_draft: undefined,
|
|
input_prerelease: undefined,
|
|
input_files: [],
|
|
input_name: undefined,
|
|
input_tag_name: undefined,
|
|
input_fail_on_unmatched_files: false,
|
|
input_target_commitish: undefined,
|
|
input_discussion_category_name: undefined,
|
|
input_generate_release_notes: false,
|
|
input_make_latest: undefined,
|
|
}
|
|
);
|
|
});
|
|
});
|
|
describe("isTag", () => {
|
|
it("returns true for tags", async () => {
|
|
assert.equal(isTag("refs/tags/foo"), true);
|
|
});
|
|
it("returns false for other kinds of refs", async () => {
|
|
assert.equal(isTag("refs/heads/master"), false);
|
|
});
|
|
});
|
|
|
|
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"]
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("unmatchedPatterns", () => {
|
|
it("returns the patterns that don't match any files", async () => {
|
|
assert.deepStrictEqual(
|
|
unmatchedPatterns(["tests/data/**/*", "tests/data/does/not/exist/*"]),
|
|
["tests/data/does/not/exist/*"]
|
|
);
|
|
});
|
|
});
|
|
});
|