diff --git a/README.md b/README.md index 4defe93..e940602 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ The config file is always pulled from the action's context, i.e., the branch fro See [other ways to specify config file.](#other-ways-to-specify-config-file) +Action returns a single output: `success` that indicates if check has passed or failed. + ## Create Workflow Create a workflow file (eg: `.github/workflows/pr-title-checker.yml`) with the following content: @@ -115,6 +117,44 @@ Note that this has to be a url pointing to a valid, raw json file. See [#28](htt ``` This is useful if a repo containing the config file is pulled in a previous step using, for e.g., actions/checkout. See [#36](https://github.com/thehanimo/pr-title-checker/issues/36) +### Using output result + +You can use the action output to execute follow up steps e.g. adding a comment. + +```yml + steps: + - uses: thehanimo/pr-title-checker@v1.4.1 + id: check + continue-on-error: true + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + pass_on_octokit_error: false + + - name: Add comment to fix PR title + uses: marocchino/sticky-pull-request-comment@v2 + if: ${{ steps.check.outputs.success == 'false'}} + with: + header: 'PR Title Check' + recreate: true + message: | + ### 🚨 PR Title Needs Formatting + The title of this PR needs to be formatted correctly and include an Azure Boards Reference. + Please update the title to match the format `type: description AB#xxx`. Examples: + * `bugfix: fix typo in README.md AB#123` + * `chore: update dependencies AB#456` + * `feat: add new feature AB#789` + * `chore: fixing build pipeline` - no AB reference + + - name: Add comment that PR title is fixed + if: ${{ steps.check.outputs.success == 'true'}} + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: 'PR Title Check' + recreate: true + message: | + ### ✅ PR Title Formatted Correctly + The title of this PR has been updated to match the correct format. Thank you! +``` ## NOTE: * [`pull_request_target`](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#pull_request_target) event trigger should be used (not [`pull_request`](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#pull_request)) in order to support checking PRs from forks. This was added in `v1.3.2`. See [#8.](https://github.com/thehanimo/pr-title-checker/issues/8) diff --git a/action.yml b/action.yml index a2a8e88..3f22ab4 100644 --- a/action.yml +++ b/action.yml @@ -34,6 +34,9 @@ inputs: github_configuration_token: description: the github access token to be used to access the config file using other github_configuration_* parameters. can differ from GITHUB_TOKEN. defaults to GITHUB_TOKEN required: false +outputs: + success: + description: true if the PR title is valid, false otherwise. Undefined if an error occurred. runs: using: node20 main: dist/index.js diff --git a/dist/index.js b/dist/index.js index dff2dfb..b3ab71f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -10050,6 +10050,7 @@ const run = ({ configPath, localConfigPath, remoteConfigURL, GitHubConfigOwner, if (labels[i].name == CHECKS.ignoreLabels[j]) { core.info(`Ignoring Title Check for label - ${labels[i].name}`); removeLabel({ labels, name: LABEL.name }); + core.setOutput("success", true); return; } } @@ -10060,6 +10061,7 @@ const run = ({ configPath, localConfigPath, remoteConfigURL, GitHubConfigOwner, if (title.startsWith(CHECKS.prefixes[i])) { removeLabel({ labels, name: LABEL.name }); core.info(MESSAGES.success); + core.setOutput("success", true); return; } } @@ -10069,10 +10071,12 @@ const run = ({ configPath, localConfigPath, remoteConfigURL, GitHubConfigOwner, if (re.test(title)) { removeLabel({ labels, name: LABEL.name }); core.info(MESSAGES.success); + core.setOutput("success", true); return; } } yield titleCheckFailed({ config: { LABEL, CHECKS, MESSAGES } }); + core.setOutput("success", false); } catch (error) { core.info(error); diff --git a/index.ts b/index.ts index 420abae..f960920 100644 --- a/index.ts +++ b/index.ts @@ -283,6 +283,7 @@ const run = async ({ if (labels[i].name == CHECKS.ignoreLabels[j]) { core.info(`Ignoring Title Check for label - ${labels[i].name}`); removeLabel({ labels, name: LABEL.name }); + core.setOutput("success", true); return; } } @@ -295,6 +296,7 @@ const run = async ({ if (title.startsWith(CHECKS.prefixes[i])) { removeLabel({ labels, name: LABEL.name }); core.info(MESSAGES.success); + core.setOutput("success", true); return; } } @@ -305,11 +307,13 @@ const run = async ({ if (re.test(title)) { removeLabel({ labels, name: LABEL.name }); core.info(MESSAGES.success); + core.setOutput("success", true); return; } } await titleCheckFailed({ config: { LABEL, CHECKS, MESSAGES } }); + core.setOutput("success", false); } catch (error) { core.info(error); }