Skip to content

Commit

Permalink
Support custom target_commitish value (#76)
Browse files Browse the repository at this point in the history
* Make target_commitish configurable

* Store compiled action for testing

* Add target_commitish to metadata

* Allow override of target_commitish for updating

* Print commit usage

* Improve message for commit usage

* Update draft releases too

* Revert "Update draft releases too"

This reverts commit ff30f8e.

* Integrate latest changes from upstream.
  • Loading branch information
ThomasPiskol authored and softprops committed Jul 25, 2021
1 parent 0a4afc0 commit 03c4bc3
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 19 deletions.
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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

0 comments on commit 03c4bc3

Please sign in to comment.