Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support custom target_commitish value #76

Merged
merged 12 commits into from May 3, 2021
21 changes: 11 additions & 10 deletions README.md
Expand Up @@ -173,16 +173,17 @@ jobs:

The following are optional as `step.with` keys

| Name | Type | Description |
|---------------------------|---------|-----------------------------------------------------------------------|
| `body` | String | Text communicating notable changes in this release |
| `body_path` | String | Path to load text communicating notable changes in this release |
| `draft` | Boolean | Indicator of whether or not this release is a draft |
| `prerelease` | Boolean | Indicator of whether or not is a prerelease |
| `files` | String | Newline-delimited globs of paths to assets to upload for release |
| `name` | String | Name of the release. defaults to tag name |
| `tag_name` | String | Name of a tag. defaults to `github.ref` |
| `fail_on_unmatched_files` | Boolean | Indicator of whether to fail if any of the `files` globs match nothing|
| Name | Type | Description |
|---------------------------|---------|-----------------------------------------------------------------------------------------------------|
| `body` | String | Text communicating notable changes in this release |
| `body_path` | String | Path to load text communicating notable changes in this release |
| `draft` | Boolean | Indicator of whether or not this release is a draft |
| `prerelease` | Boolean | Indicator of whether or not is a prerelease |
| `files` | String | Newline-delimited globs of paths to assets to upload for release |
| `name` | String | Name of the release. defaults to tag name |
| `tag_name` | String | Name of a tag. defaults to `github.ref` |
| `fail_on_unmatched_files` | Boolean | Indicator of whether to fail if any of the `files` globs match nothing |
| `target_commitish` | String | Commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. |

💡When providing a `body` and `body_path` at the same time, `body_path` will be attempted first, then falling back on `body` if the path can not be read from.

Expand Down
35 changes: 31 additions & 4 deletions __tests__/util.test.ts
Expand Up @@ -37,7 +37,8 @@ describe("util", () => {
input_prerelease: false,
input_files: [],
input_name: undefined,
input_tag_name: undefined
input_tag_name: undefined,
input_target_commitish: undefined
})
);
});
Expand All @@ -54,7 +55,8 @@ describe("util", () => {
input_prerelease: false,
input_files: [],
input_name: undefined,
input_tag_name: undefined
input_tag_name: undefined,
input_target_commitish: undefined
})
);
});
Expand All @@ -71,7 +73,8 @@ describe("util", () => {
input_prerelease: false,
input_files: [],
input_name: undefined,
input_tag_name: undefined
input_tag_name: undefined,
input_target_commitish: undefined
})
);
});
Expand All @@ -89,10 +92,34 @@ describe("util", () => {
input_files: [],
input_name: undefined,
input_tag_name: undefined,
input_fail_on_unmatched_files: false
input_fail_on_unmatched_files: false,
input_target_commitish: undefined
});
});
});
describe("parseConfig", () => {
it("parses basic config with commitish", () => {
assert.deepStrictEqual(
parseConfig({
INPUT_TARGET_COMMITISH: "affa18ef97bc9db20076945705aba8c516139abd"
}),
{
github_ref: "",
github_repository: "",
github_token: "",
input_body: undefined,
input_body_path: undefined,
input_draft: false,
input_prerelease: false,
input_files: [],
input_name: undefined,
input_tag_name: undefined,
input_fail_on_unmatched_files: false,
input_target_commitish: "affa18ef97bc9db20076945705aba8c516139abd"
}
);
});
});
describe("isTag", () => {
it("returns true for tags", async () => {
assert.equal(isTag("refs/tags/foo"), true);
Expand Down
3 changes: 3 additions & 0 deletions action.yml
Expand Up @@ -30,6 +30,9 @@ inputs:
repository:
description: 'Repository to make releases against, in <owner>/<repo> format'
required: false
target_commitish:
description: 'Commitish value that determines where the Git tag is created from. Can be any branch or commit SHA.'
required: false
env:
'GITHUB_TOKEN': 'As provided by Github Actions'
outputs:
Expand Down
2 changes: 1 addition & 1 deletion dist/index.js

Large diffs are not rendered by default.

27 changes: 24 additions & 3 deletions src/github.ts
Expand Up @@ -35,6 +35,7 @@ export interface Releaser {
body: string | undefined;
draft: boolean | undefined;
prerelease: boolean | undefined;
target_commitish: string | undefined;
}): Promise<{ data: Release }>;

updateRelease(params: {
Expand Down Expand Up @@ -77,6 +78,7 @@ export class GitHubReleaser implements Releaser {
body: string | undefined;
draft: boolean | undefined;
prerelease: boolean | undefined;
target_commitish: string | undefined;
}): Promise<{ data: Release }> {
return this.github.repos.createRelease(params);
}
Expand Down Expand Up @@ -165,7 +167,18 @@ export const release = async (
});

const release_id = existingRelease.data.id;
const target_commitish = existingRelease.data.target_commitish;
let target_commitish: string;
if (
config.input_target_commitish &&
config.input_target_commitish !== existingRelease.data.target_commitish
) {
console.log(
`Updating commit from "${existingRelease.data.target_commitish}" to "${config.input_target_commitish}"`
);
target_commitish = config.input_target_commitish;
} else {
target_commitish = existingRelease.data.target_commitish;
}
const tag_name = tag;
const name = config.input_name || tag;
const body = `${existingRelease.data.body}\n${releaseBody(config)}`;
Expand All @@ -191,7 +204,14 @@ export const release = async (
const body = releaseBody(config);
const draft = config.input_draft;
const prerelease = config.input_prerelease;
console.log(`👩‍🏭 Creating new GitHub release for tag ${tag_name}...`);
const target_commitish = config.input_target_commitish;
let commitMessage: string = "";
if (target_commitish) {
commitMessage = ` using commit "${target_commitish}"`;
}
console.log(
`👩‍🏭 Creating new GitHub release for tag ${tag_name}${commitMessage}...`
);
try {
let release = await releaser.createRelease({
owner,
Expand All @@ -200,7 +220,8 @@ export const release = async (
name,
body,
draft,
prerelease
prerelease,
target_commitish
});
return release.data;
} catch (error) {
Expand Down
4 changes: 3 additions & 1 deletion src/util.ts
Expand Up @@ -15,6 +15,7 @@ export interface Config {
input_draft?: boolean;
input_prerelease?: boolean;
input_fail_on_unmatched_files?: boolean;
input_target_commitish?: string;
}

export const releaseBody = (config: Config): string | undefined => {
Expand Down Expand Up @@ -50,7 +51,8 @@ export const parseConfig = (env: Env): Config => {
input_files: parseInputFiles(env.INPUT_FILES || ""),
input_draft: env.INPUT_DRAFT === "true",
input_prerelease: env.INPUT_PRERELEASE == "true",
input_fail_on_unmatched_files: env.INPUT_FAIL_ON_UNMATCHED_FILES == "true"
input_fail_on_unmatched_files: env.INPUT_FAIL_ON_UNMATCHED_FILES == "true",
input_target_commitish: env.INPUT_TARGET_COMMITISH
};
};

Expand Down