Git Product home page Git Product logo

github-action's Introduction

Contributor Assistant ๐ŸŽญ

Release version badge Github marketplace badge

The Contributor Assistant is a collection of tools to improve contribution in the opensource world. It is inspired by the CLA Assistant.

Features โœจ

This GitHub Action will automatically check for committer signatures when submitting a Pull Request. It can be configured to use any document you'd like, including CLA and DCO. It can also handle cross repository signatures and works with GitHub Enterprise too.

Rewards

Work in Progress

Code Quality Checks

Work in Progress

And much more

Community

The easiest way to share your ideas is with our github discussions tab.

Feel free to join our telegram channel for further discussion.

License

Contributor Assistant

Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Credits

github-action's People

Contributors

alohr51 avatar anandchowdhary avatar andrewgable avatar darrellwarde avatar dependabot[bot] avatar fishcharlie avatar github-actions[bot] avatar holzhaus avatar ibakshay avatar knanao avatar krinkle avatar manifestinteractive avatar mattrosno avatar michael-spengler avatar mmv08 avatar nwalters512 avatar or-geva avatar pellared avatar rokups avatar scottbrenner avatar shunkakinoki avatar silviogutierrez avatar simonmeggle avatar t8 avatar tada5hi avatar wh201906 avatar woxiwangshunlibiye avatar writhe avatar yahavi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

github-action's Issues

Committer check failing

URL to the linked Repo/Org:
Flank/flank#621

Steps to reproduce the problem:

  1. Submit a PR
  2. Comment. CLA assistant reports CLA Assistant Lite All Contributors have signed the CLA.
  3. Check fails https://github.com/Flank/flank/pull/621/checks?check_run_id=463938756

What is the expected result?
CLA check passes.

What happens instead?

Run cla-assistant/[email protected]
CLA Assistant GitHub Action has started
the PR No is 621
committersAfterWhiteListCheck [
  {
    "name": "bootstraponline",
    "id": 1173057,
    "pullRequestNo": 621
  }
]
(node:2619) UnhandledPromiseRejectionWarning: HttpError: Could not create file: At least 1 approving review is required by reviewers with write access.
##[error]committers of pull request 621  has to sign the CLA
    at /home/runner/work/_actions/cla-assistant/github-action/v1.2.0-alpha/node_modules/@octokit/request/dist-node/index.js:66:23
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
(node:2619) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:2619) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
  Complete job

[Feature] Define allowlist in files

Hi team. Thank you for the great project.

It would be great if allowlist can be defined in files since we need to support corporate-level contributors. A company manages a file containing user names in the company and we want to assume they've signed our CLA. Moreover, it is better to specify a directory where there are allowlist files because we don't want to add a file name every time a new company signs.

Thanks

Implement tests

Test cases are not implemented for this GitHub Action yet. If anyone is willing to contribute, then feel free to raise a Pull Request and your contribution is highly appreciated ๐Ÿ˜„.

[Question] How to handle deleted / edited comments?

Hi. From what I understand this bot will make a commit adding a json file with the following info -

{
  "name": "ibakshay",
  "id": 2423423,
  "comment_id": 534534,
  "repoId": 5433,
  "pullRequestNo": 656,
  "createdAt": "2021-01-22T11:13:02Z"
}

How does this handle the case if the comment is later deleted by the user or edited and the older version is deleted?

path-To-cladocument property is missing from action.yml

The path-To-cladocument property is missing from the action.yml file, causing this warning when running the github action:

Unexpected input(s) 'path-To-cladocument', valid inputs are ['path-to-signatures', 'branch', 'blockchain-storage-flag', 'label', 'empty-commit-flag', 'allowlist']

I suggest adding something like this:

  path-To-cladocument:
    description: "Fully qualified web link to cla document"

[BUG] Error: Parameter token or opts.auth is required on PR

Describe the bug
We are using the v2.0.0-alpha version. When someone makes a pull request the bellow error is shown. Note that this works for some users, so it's quite random.

home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1
module.exports=function(e,t){"use strict";var r={};function __webpack_require__(t){if(r[t]){return r[t].exports}var n=r[t]={i:t,l:false,exports:{}};e[t].call(n.exports,n,n.exports,__webpack_require__);n.l=true;return n.exports}__webpack_require__.ab=__dirname+"/";function startup(){return __webpack_require__(131)}t(__webpack_require__);return startup()}({11:function(e){e.exports=wrappy;function wrappy(e,t){if(e&&t)return wrappy(e)(t);if(typeof e!=="function")throw new TypeError("need wrapper function");Object.keys(e).forEach(function(t){wrapper[t]=e[t]});return wrapper;function wrapper(){var t=new Array(arguments.length);for(var r=0;r<t.length;r++){t[r]=arguments[r]}var n=e.apply(this,t);var o=t[t.length-1];if(typeof n==="function"&&n!==o){Object.keys(o).forEach(function(e){n[e]=o[e]})}return n}}},16:function(e){e.exports=require("tls")},18:function(){eval("require")("encoding")},49:function(e,t,r){var n=r(11);e.exports=n(once

Error: Parameter token or opts.auth is required
    at Object.getAuthString (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:3726)
    at Object.getOctokitOptions (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:65319)
    at Object.getOctokit (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:54767)
    at Object.994 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:221556)
    at __webpack_require__ (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:154)
    at Object.407 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:25532)
    at __webpack_require__ (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:154)
    at Object.210 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:12044)
    at __webpack_require__ (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:154)
    at Object.131 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:5235)home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1
module.exports=function(e,t){"use strict";var r={};function __webpack_require__(t){if(r[t]){return r[t].exports}var n=r[t]={i:t,l:false,exports:{}};e[t].call(n.exports,n,n.exports,__webpack_require__);n.l=true;return n.exports}__webpack_require__.ab=__dirname+"/";function startup(){return __webpack_require__(131)}t(__webpack_require__);return startup()}({11:function(e){e.exports=wrappy;function wrappy(e,t){if(e&&t)return wrappy(e)(t);if(typeof e!=="function")throw new TypeError("need wrapper function");Object.keys(e).forEach(function(t){wrapper[t]=e[t]});return wrapper;function wrapper(){var t=new Array(arguments.length);for(var r=0;r<t.length;r++){t[r]=arguments[r]}var n=e.apply(this,t);var o=t[t.length-1];if(typeof n==="function"&&n!==o){Object.keys(o).forEach(function(e){n[e]=o[e]})}return n}}},16:function(e){e.exports=require("tls")},18:function(){eval("require")("encoding")},49:function(e,t,r){var n=r(11);e.exports=n(once

Error: Parameter token or opts.auth is required
    at Object.getAuthString (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:3726)
    at Object.getOctokitOptions (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:65319)
    at Object.getOctokit (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:54767)
    at Object.994 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:221556)
    at __webpack_require__ (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:154)
    at Object.407 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:25532)
    at __webpack_require__ (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:154)
    at Object.210 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:12044)
    at __webpack_require__ (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:154)
    at Object.131 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.0-alpha/lib/main.js:1:5235)

To Reproduce
Check this PR

feat: handle labels

Heya guys,

Should be a simple one for you to implement. I'd like to be able to label my pull requests once someone has signed the CLA.

I currently have the following labels:
CLA - Not Required (applied when specific conditions are met - done through workflow)
CLA - Signed
CLA - Unsigned

Part 1: I'd like to have an input for these labels to be automatically assigned when the bot runs.
Part 2: I'd like the bot to automatically skip when specific labels are on the pull request

So the workflow.yml would look like this

jobs:
  CLAssistant:
  name: "CLA Assistant"
  runs-on: ubuntu-latest
  steps:
    - name: "CLA Assistant"
      if: (github.event.comment.body == 'recheckcla' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request'
      # Alpha Release
      uses: cla-assistant/[email protected]
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        path-to-signatures: './contributors/cla.json'
        path-To-cladocument: 'https://github.com/${{github.repository}}/contributors/cla.md'
        # branch should not be protected
        branch: 'master'
        whitelist: ${{github.rerepository_owner}},bot*
        empty-commit-flag: false
        blockchain-storage-flag: false
        unsignedLabel: 'CLA - Unsigned'
        signedLabel: 'CLA - signed'
        ignoreLabel: 'CLA - Not Required'

How to configure `allowlist` for dependabot?

Required

Thanks for the awesome repo! ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
I was trying to configure how to bypass dependabot for cla action, but have trouble in doing so

The slugs I've tried but have not worked:

allowlist: imgbot,dependabot*
allowlist: dependabot*
allowlist: dependabot[bot]

URL to the linked Repo/Org:
shunkakinoki/sentrei#132
https://github.com/sentrei/sentrei/pull/132/checks?check_run_id=951771337

What is the expected result?

The check passes

What happens instead?

The check fails

[BUG] Error thrown when user reviewer comments after a merge

Describe the bug

  1. PR author signs CLA (Expensify/expensify-common#327 (comment))
  2. Reviewer approves PR (Expensify/expensify-common#327 (review))
  3. Reviewer merges PR (Expensify/expensify-common#327 (comment))
  4. Reviewer comments on PR (Expensify/expensify-common#327 (comment))
  5. Error is thrown on that comment (https://github.com/Expensify/expensify-common/actions/runs/531402880)

Could not update the JSON file: Error occured when creating or editing the comments of the pull request: Error occured when getting all the comments of the pull request: Unable to create comment because issue is locked.

To Reproduce
I believe you just have to comment on a PR after it's merged, however, the above should help reproduce.

Expected behavior
Ideally no error is thrown, it's not clear to the PR reviewer why an action should fail after the PR is merged and causes confusion. If you could check for the locked PR case, maybe a warning would cause less confusion.

Screenshots
Screen Shot 2021-02-02 at 10 48 49 AM

[BUG] Status check failing on sign

Describe the bug
When someone makes a PR who hasn't signed the CLA, the status check fails and there is a comment requesting them to sign. When they sign, the comment text is updated to "All contributors have signed the CLA" but the status check is still "failing". However, when a new label is added, CLA Assistant runs again and adds a new, passing, status check. So there are two checks now, one passing and one failing.

Expected behavior
The status check passes when the comment is updated the "All contributors have signed the CLA"

Screenshots
Screen Shot 2020-08-08 at 11 32 17@2x

Perform commits on a separate repository

Hi all,

We're looking very closely at this project for deploying a CLA blocking system to our repos. I'm pretty excited about the idea of not having to run a bot somewhere on our infrastructure just to get it working.

It looks like the bot will currently attempt to commit back to the same repository in order to add new approvals. How difficult would it be to implement a remote repository search instead of a local repository search? We'd prefer to keep the list of contributors both secret in a hidden repository as well as centralized so that contributors don't need to re-authenticate repeatedly for separate repositories.

Given the choice between 'spend developer effort implementing remote repo support for this project' and 'run through the hoops of securely deploying another external-facing service that has ongoing maintenance concerns' I can probably get clearance to write this feature myself, if it's something y'all would accept.

[BUG] test

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

[Feature] Make locking pull request an optional flag

Is your feature request related to a problem? Please describe.
In our open source repo we sometimes have contributors who accidentally close their PRs, which locks them as mentioned here: #70 (comment)

The contributors cannot comment after this happens, leaving them to ask if we can manually unlock the pull request so they can comment and continue working on their solution. Otherwise they have to create a new pull request which can be time consuming.

Describe the solution you'd like
I would prefer the "locking" behavior to be an optional flag and we'd prefer it to not lock on our repository. We understand that contributors could delete or edit their comments, but we are OK with this trade off.

Describe alternatives you've considered
Alternatively, could we "unlock"/"re-open" the PR once the PR is reopened?

Additional context
Here is an example pull request (Expensify/App#1739) where it's locked, then reopened.

[Feature] allow an alternative license

Is your feature request related to a problem? Please describe.
The actual CLA-Assistant permits to ask the contributor to use an alternative license by using a specific metadata gist file:

For instance, we currently use something like:

{
    "name": {
        "title": "Full Name",
        "type": "string",
        "githubKey": "name"
    },
    "email": {
        "title": "E-Mail",
        "type": "string",
        "githubKey": "email",
        "required": true
    },
    "license": {
        "title": "License selection",
        "type": {
            "enum": [
                "I agree that my contributions are made using the Company Contributor Agreement (text above)",
                "I agree that my contributions are made using the New BSD License (3-clause)"
            ]
        },
        "required": true
    }
}

Describe the solution you'd like
Is there an option to handle this case with CLA-assistant-lite?

Backward compatibility with the previous version

Is it possible to add the ability for exporting metadata from the previous version of the CLA assistant (https://cla-assistant.io) in JSON format that will be accepted by the new version (GitHub Action)? Currently, the previous version exports only in CSV format, and there is no way to upgrade to the new version keeping the list of contributors who already signed agreement.

Error when re-running the workflow

After signing the comment "I have read the CLA Document and I hereby sign the CLA". The workflow reruns but I see this error
"Error: Error occurred when re-running the workflow: HttpError: Bad credentials". I have the personal access token added to the repo.

To Reproduce

  • Create a pull request . The action runs and adds a comment saying "sign the cla"
  • Once the cla is signed it get added to the signatures
  • When the workflow reruns and see the error in Annotations ""Error: Error occurred when re-running the workflow: HttpError: Bad credentials".

Expected behavior
Workflow re-run and succeed

Screenshots
Screen Shot 2021-04-08 at 1 18 46 PM

[BUG] Error handling for forked repositories is painful

Describe the bug
Forks of repositories are standard practice in GitHub.

It's ok to throw a pretty error when a required field is missing. It's really annoying to dump 23k of error content for an expected error path.

To Reproduce
Steps to reproduce the behavior:

  1. fork https://github.com/hugegraph/hugegraph
  2. create a branch with some content
  3. create a pull request targeting the forked repository

Expected behavior
A short error wthout a lot of noise.

Screenshots
If applicable, add screenshots to help explain your problem.

https://github.com/check-spelling/hugegraph/runs/5713197458?check_suite_focus=true

2022-03-28T01:08:02.8818913Z ##[group]Run cla-assistant/[email protected]
2022-03-28T01:08:02.8819318Z with:
2022-03-28T01:08:02.8819635Z   path-to-signatures: .github/cla-signatures/cla.json
2022-03-28T01:08:02.8820171Z   path-to-document: https://github.com/hugegraph/hugegraph-doc/blob/master/CLA.md
2022-03-28T01:08:02.8820764Z   custom-allsigned-prcomment: **Good**! All Contributors have signed the [CLA](https://github.com/hugegraph/hugegraph-doc/blob/master/CLA.md).
2022-03-28T01:08:02.8821229Z   branch: cla-assist
2022-03-28T01:08:02.8821481Z   allowlist: bot*
2022-03-28T01:08:02.8821764Z   lock-pullrequest-aftermerge: false
2022-03-28T01:08:02.8822075Z   use-dco-flag: false
2022-03-28T01:08:02.8822311Z env:
2022-03-28T01:08:02.8823012Z   GITHUB_TOKEN: ***
2022-03-28T01:08:02.8823269Z   PERSONAL_ACCESS_TOKEN: 
2022-03-28T01:08:02.8823531Z ##[endgroup]
2022-03-28T01:08:03.0915287Z /home/runner/work/_actions/cla-assistant/github-action/v2.1.3-beta/lib/main.js:1
2022-03-28T01:08:03.1570511Z module.exports=function(e,t){"use strict";var r={};function __webpack_require__(t){if(r[t]){return r[t].exports}var n=r[t]={i:t,l:false,exports:{}};e[t].call(n.exports,n,n.exports,__webpack_require__);n.l=true;return n.exports}__webpack_require__.ab=__dirname+"/";function startup(){return __webpack_require__(131)}t(__webpack_require__);return startup()}({11:function(e){e.exports=wrappy;function wrappy(e,t){if(e&&t)return wrappy(e)(t);if(typeof e!=="function")throw new TypeError("need wrapper function");Object.keys(e).forEach(function(t){wrapper[t]=e[t]});return wrapper;function wrapper(){var t=new Array(arguments.length);for(var r=0;r<t.length;r++){t[r]=arguments[r]}var n=e.apply(this,t);var o=t[t.length-1];if(typeof n==="function"&&n!==o){Object.keys(o).forEach(function(e){n[e]=o[e]})}return n}}},16:function(e){e.exports=require("tls")},18:function(){eval("require")("encoding")},49:function(e,t,r){var n=r(11);e.exports=n(once);e.exports.strict=n(onceStrict);once.proto=once(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return once(this)},configurable:true});Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return onceStrict(this)},configurable:true})});function once(e){var t=function(){if(t.called)return t.value;t.called=true;return t.value=e.apply(this,arguments)};t.called=false;return t}function onceStrict(e){var t=function(){if(t.called)throw new Error(t.onceError);t.called=true;return t.value=e.apply(this,arguments)};var r=e.name||"Function wrapped with `once`";t.onceError=r+" shouldn't be called more than once";t.called=false;return t}},82:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}t.toCommandValue=toCommandValue},87:function(e){e.exports=require("os")},95:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});var n=r(586);var o=r(848);const s="4.5.3";class GraphqlError extends Error{constructor(e,t){const r=t.data.errors[0].message;super(r);Object.assign(this,t.data);Object.assign(this,{headers:t.headers});this.name="GraphqlError";this.request=e;if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}}}const i=["method","baseUrl","url","headers","request","query","mediaType"];function graphql(e,t,r){r=typeof t==="string"?r=Object.assign({query:t},r):r=t;const n=Object.keys(r).reduce((e,t)=>{if(i.includes(t)){e[t]=r[t];return e}if(!e.variables){e.variables={}}e.variables[t]=r[t];return e},{});return e(n).then(e=>{if(e.data.errors){const t={};for(const r of Object.keys(e.headers)){t[r]=e.headers[r]}throw new GraphqlError(n,{headers:t,data:e.data})}return e.data.data})}function withDefaults(e,t){const r=e.defaults(t);const o=(e,t)=>{return graphql(r,e,t)};return Object.assign(o,{defaults:withDefaults.bind(null,r),endpoint:n.request.endpoint})}const a=withDefaults(n.request,{headers:{"user-agent":`octokit-graphql.js/${s} ${o.getUserAgent()}`},method:"POST",url:"/graphql"});function withCustomRequest(e){return withDefaults(e,{method:"POST",url:"/graphql"})}t.graphql=a;t.withCustomRequest=withCustomRequest},102:function(e,t,r){"use strict";var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))t[r]=e[r];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const o=n(r(747));const s=n(r(87));const i=r(82);function issueCommand(e,t){const r=process.env[`GITHUB_${e}`];if(!r){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!o.existsSync(r)){throw new Error(`Missing file at path: ${r}`)}o.appendFileSync(r,`${i.toCommandValue(t)}${s.EOL}`,{encoding:"utf8"})}t.issueCommand=issueCommand},127:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.getApiBaseUrl=t.getProxyAgent=t.getAuthString=void 0;const i=s(r(539));function getAuthString(e,t){if(!e&&!t.auth){throw new Error("Parameter token or opts.auth is required")}else if(e&&t.auth){throw new Error("Parameters token and opts.auth may not both be specified")}return typeof t.auth==="string"?t.auth:`token ${e}`}t.getAuthString=getAuthString;function getProxyAgent(e){const t=new i.HttpClient;return t.getAgent(e)}t.getProxyAgent=getProxyAgent;function getApiBaseUrl(){return process.env["GITHUB_API_URL"]||"https://api.github.com"}t.getApiBaseUrl=getApiBaseUrl},131:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};var i=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,o){function fulfilled(e){try{step(n.next(e))}catch(e){o(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){o(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});t.run=void 0;const a=r(469);const u=r(210);const c=r(501);const l=s(r(470));const p=s(r(395));function run(){return i(this,void 0,void 0,function*(){try{l.info(`CLA Assistant GitHub Action bot has started the process`);if(a.context.payload.action==="closed"&&p.lockPullRequestAfterMerge()=="true"){return c.lockPullRequest()}else{yield u.setupClaCheck()}}catch(e){l.setFailed(e.message)}})}t.run=run;run()},141:function(e,t,r){"use strict";var n=r(631);var o=r(16);var s=r(605);var i=r(211);var a=r(614);var u=r(357);var c=r(669);t.httpOverHttp=httpOverHttp;t.httpsOverHttp=httpsOverHttp;t.httpOverHttps=httpOverHttps;t.httpsOverHttps=httpsOverHttps;function httpOverHttp(e){var t=new TunnelingAgent(e);t.request=s.request;return t}function httpsOverHttp(e){var t=new TunnelingAgent(e);t.request=s.request;t.createSocket=createSecureSocket;t.defaultPort=443;return t}function httpOverHttps(e){var t=new TunnelingAgent(e);t.request=i.request;return t}function httpsOverHttps(e){var t=new TunnelingAgent(e);t.request=i.request;t.createSocket=createSecureSocket;t.defaultPort=443;return t}function TunnelingAgent(e){var t=this;t.options=e||{};t.proxyOptions=t.options.proxy||{};t.maxSockets=t.options.maxSockets||s.Agent.defaultMaxSockets;t.requests=[];t.sockets=[];t.on("free",function onFree(e,r,n,o){var s=toOptions(r,n,o);for(var i=0,a=t.requests.length;i<a;++i){var u=t.requests[i];if(u.host===s.host&&u.port===s.port){t.requests.splice(i,1);u.request.onSocket(e);return}}e.destroy();t.removeSocket(e)})}c.inherits(TunnelingAgent,a.EventEmitter);TunnelingAgent.prototype.addRequest=function addRequest(e,t,r,n){var o=this;var s=mergeOptions({request:e},o.options,toOptions(t,r,n));if(o.sockets.length>=this.maxSockets){o.requests.push(s);return}o.createSocket(s,function(t){t.on("free",onFree);t.on("close",onCloseOrRemove);t.on("agentRemove",onCloseOrRemove);e.onSocket(t);function onFree(){o.emit("free",t,s)}function onCloseOrRemove(e){o.removeSocket(t);t.removeListener("free",onFree);t.removeListener("close",onCloseOrRemove);t.removeListener("agentRemove",onCloseOrRemove)}})};TunnelingAgent.prototype.createSocket=function createSocket(e,t){var r=this;var n={};r.sockets.push(n);var o=mergeOptions({},r.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:false,headers:{host:e.host+":"+e.port}});if(e.localAddress){o.localAddress=e.localAddress}if(o.proxyAuth){o.headers=o.headers||{};o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")}l("making CONNECT request");var s=r.request(o);s.useChunkedEncodingByDefault=false;s.once("response",onResponse);s.once("upgrade",onUpgrade);s.once("connect",onConnect);s.once("error",onError);s.end();function onResponse(e){e.upgrade=true}function onUpgrade(e,t,r){process.nextTick(function(){onConnect(e,t,r)})}function onConnect(o,i,a){s.removeAllListeners();i.removeAllListeners();if(o.statusCode!==200){l("tunneling socket could not be established, statusCode=%d",o.statusCode);i.destroy();var u=new Error("tunneling socket could not be established, "+"statusCode="+o.statusCode);u.code="ECONNRESET";e.request.emit("error",u);r.removeSocket(n);return}if(a.length>0){l("got illegal response body from proxy");i.destroy();var u=new Error("got illegal response body from proxy");u.code="ECONNRESET";e.request.emit("error",u);r.removeSocket(n);return}l("tunneling connection has established");r.sockets[r.sockets.indexOf(n)]=i;return t(i)}function onError(t){s.removeAllListeners();l("tunneling socket could not be established, cause=%s\n",t.message,t.stack);var o=new Error("tunneling socket could not be established, "+"cause="+t.message);o.code="ECONNRESET";e.request.emit("error",o);r.removeSocket(n)}};TunnelingAgent.prototype.removeSocket=function removeSocket(e){var t=this.sockets.indexOf(e);if(t===-1){return}this.sockets.splice(t,1);var r=this.requests.shift();if(r){this.createSocket(r,function(e){r.request.onSocket(e)})}};function createSecureSocket(e,t){var r=this;TunnelingAgent.prototype.createSocket.call(r,e,function(n){var s=e.request.getHeader("host");var i=mergeOptions({},r.options,{socket:n,servername:s?s.replace(/:.*$/,""):e.host});var a=o.connect(0,i);r.sockets[r.sockets.indexOf(n)]=a;t(a)})}function toOptions(e,t,r){if(typeof e==="string"){return{host:e,port:t,localAddress:r}}return e}function mergeOptions(e){for(var t=1,r=arguments.length;t<r;++t){var n=arguments[t];if(typeof n==="object"){var o=Object.keys(n);for(var s=0,i=o.length;s<i;++s){var a=o[s];if(n[a]!==undefined){e[a]=n[a]}}}}return e}var l;if(process.env.NODE_DEBUG&&/\btunnel\b/.test(process.env.NODE_DEBUG)){l=function(){var e=Array.prototype.slice.call(arguments);if(typeof e[0]==="string"){e[0]="TUNNEL: "+e[0]}else{e.unshift("TUNNEL:")}console.error.apply(console,e)}}else{l=function(){}}t.debug=l},160:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var n=r(692);var o=_interopDefault(r(49));const s=o(e=>console.warn(e));class RequestError extends Error{constructor(e,t,r){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="HttpError";this.status=t;Object.defineProperty(this,"code",{get(){s(new n.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));return t}});this.headers=r.headers||{};const o=Object.assign({},r.request);if(r.request.headers.authorization){o.headers=Object.assign({},r.request.headers,{authorization:r.request.headers.authorization.replace(/ .*$/," [REDACTED]")})}o.url=o.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]");this.request=o}}t.RequestError=RequestError},210:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};var i=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,o){function fulfilled(e){try{step(n.next(e))}catch(e){o(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){o(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.setupClaCheck=void 0;const u=r(225);const c=a(r(407));const l=a(r(224));const p=r(469);const f=r(641);const d=r(450);const h=r(994);const g=s(r(470));function setupClaCheck(){return i(this,void 0,void 0,function*(){let e=m();if(!h.isPersonalAccessTokenPresent()){g.setFailed("Please enter a personal access token as a environment variable in the CLA workflow file as described in the https://github.com/cla-assistant/github-action documentation");return}let t=yield c.default();t=u.checkAllowList(t);const{claFileContent:r,sha:n}=yield getCLAFileContentandSHA(t,e);e=prepareCommiterMap(t,r);try{const o=yield l.default(e,t);if(o===null||o===void 0?void 0:o.newSigned.length){yield f.updateFile(n,r,o)}if((o===null||o===void 0?void 0:o.allSignedFlag)||((e===null||e===void 0?void 0:e.notSigned)===undefined||e.notSigned.length===0)){g.info(`All contributors have signed the CLA ๐Ÿ“ โœ… `);return d.reRunLastWorkFlowIfRequired()}else{g.setFailed(`committers of Pull Request number ${p.context.issue.number} have to sign the CLA ๐Ÿ“`)}}catch(e){g.setFailed(`Could not update the JSON file: ${e.message}`)}})}t.setupClaCheck=setupClaCheck;function getCLAFileContentandSHA(e,t){var r;return i(this,void 0,void 0,function*(){let n,o,s,i;try{n=yield f.getFileContent()}catch(r){if(r.status===404){return createClaFileAndPRComment(e,t)}else{g.setFailed(`Could not retrieve repository contents: ${r.message}. Status: ${r.status||"unknown"}`)}}i=(r=n===null||n===void 0?void 0:n.data)===null||r===void 0?void 0:r.sha;o=Buffer.from(n.data.content,"base64").toString();s=JSON.parse(o);return{claFileContent:s,sha:i}})}function createClaFileAndPRComment(e,t){return i(this,void 0,void 0,function*(){t.notSigned=e;t.signed=[];e.map(e=>{if(!e.id){t.unknown.push(e)}});const r={signedContributors:[]};const n=JSON.stringify(r,null,3);const o=Buffer.from(n).toString("base64");yield f.createFile(o).catch(e=>g.setFailed(`Error occurred when creating the signed contributors file: ${e.message||e}. Make sure the branch where signatures are stored is NOT protected.`));yield l.default(t,e);throw new Error(`Committers of pull request ${p.context.issue.number} have to sign the CLA`)})}function prepareCommiterMap(e,t){let r=m();r.notSigned=e.filter(e=>!(t===null||t===void 0?void 0:t.signedContributors.some(t=>e.id===t.id)));r.signed=e.filter(e=>t===null||t===void 0?void 0:t.signedContributors.some(t=>e.id===t.id));e.map(e=>{if(!e.id){r.unknown.push(e)}});return r}const m=()=>({signed:[],notSigned:[],unknown:[]})},211:function(e){e.exports=require("https")},213:function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,o){function fulfilled(e){try{step(n.next(e))}catch(e){o(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){o(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});const o=r(994);const s=r(469);const i=r(395);function signatureWithPRComment(e,t){return n(this,void 0,void 0,function*(){let r=s.context.payload.repository.id;let n=yield o.octokit.issues.listComments({owner:s.context.repo.owner,repo:s.context.repo.repo,issue_number:s.context.issue.number});let i=[];let a=[];n===null||n===void 0?void 0:n.data.map(e=>{i.push({name:e.user.login,id:e.user.id,comment_id:e.id,body:e.body.trim().toLowerCase(),created_at:e.created_at,repoId:r,pullRequestNo:s.context.issue.number})});i.map(e=>{if(isCommentSignedByUser(e.body||"",e.name)){a.push(e)}});for(var u=0;u<a.length;u++){delete a[u].body}const c=a.filter(t=>e.notSigned.some(e=>t.id===e.id));const l=t.filter(e=>a.some(t=>e.id==t.id));const p={newSigned:c,onlyCommitters:l,allSignedFlag:false};return p})}t.default=signatureWithPRComment;function isCommentSignedByUser(e,t){if(t==="github-actions[bot]"){return false}if(i.getCustomPrSignComment()!==""){return i.getCustomPrSignComment().toLowerCase()===e}switch(i.getUseDcoFlag()){case"true":return e.match(/^.*i \s*have \s*read \s*the \s*dco \s*document \s*and \s*i \s*hereby \s*sign \s*the \s*dco.*$/)!==null;case"false":return e.match(/^.*i \s*have \s*read \s*the \s*cla \s*document \s*and \s*i \s*hereby \s*sign \s*the \s*cla.*$/)!==null;default:return false}}},224:function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,o){function fulfilled(e){try{step(n.next(e))}catch(e){o(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){o(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});const s=r(994);const i=r(469);const a=o(r(213));const u=r(827);const c=r(395);function prCommentSetup(e,t){return n(this,void 0,void 0,function*(){const r=(e===null||e===void 0?void 0:e.notSigned)&&(e===null||e===void 0?void 0:e.notSigned.length)===0;try{const n=yield getComment();if(!n&&!r){return createComment(r,e)}else if(n===null||n===void 0?void 0:n.id){if(r){yield updateComment(r,e,n)}const o=yield a.default(e,t);if(o===null||o===void 0?void 0:o.onlyCommitters){o.allSignedFlag=prepareAllSignedCommitters(e,o.onlyCommitters,t)}e=prepareCommiterMap(e,o);yield updateComment(o.allSignedFlag,e,n);return o}}catch(e){throw new Error(`Error occured when creating or editing the comments of the pull request: ${e.message}`)}})}t.default=prCommentSetup;function createComment(e,t){return n(this,void 0,void 0,function*(){yield s.octokit.issues.createComment({owner:i.context.repo.owner,repo:i.context.repo.repo,issue_number:i.context.issue.number,body:u.commentContent(e,t)}).catch(e=>{throw new Error(`Error occured when creating a pull request comment: ${e.message}`)})})}function updateComment(e,t,r){return n(this,void 0,void 0,function*(){yield s.octokit.issues.updateComment({owner:i.context.repo.owner,repo:i.context.repo.repo,comment_id:r.id,body:u.commentContent(e,t)}).catch(e=>{throw new Error(`Error occured when updating the pull request comment: ${e.message}`)})})}function getComment(){return n(this,void 0,void 0,function*(){try{const e=yield s.octokit.issues.listComments({owner:i.context.repo.owner,repo:i.context.repo.repo,issue_number:i.context.issue.number});if(c.getUseDcoFlag()==="true"){return e.data.find(e=>e.body.match(/.*DCO Assistant Lite bot.*/))}else if(c.getUseDcoFlag()==="false"){return e.data.find(e=>e.body.match(/.*CLA Assistant Lite bot.*/))}}catch(e){throw new Error(`Error occured when getting  all the comments of the pull request: ${e.message}`)}})}function prepareCommiterMap(e,t){var r;(r=e.signed)===null||r===void 0?void 0:r.push(...t.newSigned);e.notSigned=e.notSigned.filter(e=>!t.newSigned.some(t=>e.id===t.id));return e}function prepareAllSignedCommitters(e,t,r){let n=[];const o=new Set(t.map(e=>e.id));n=[...t,...e.signed.filter(e=>!o.has(e.id))];let s=r.every(e=>n.some(t=>e.id===t.id));return s}},225:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.checkAllowList=void 0;const i=s(r(557));const a=s(r(395));function isUserNotInAllowList(e){const t=a.getAllowListItem().split(",");return t.filter(function(t){t=t.trim();if(t.includes("*")){const r=i.escapeRegExp(t).split("\\*").join(".*");return new RegExp(r).test(e)}return t===e}).length>0}function checkAllowList(e){const t=e.filter(e=>e&&!(isUserNotInAllowList!==undefined&&isUserNotInAllowList(e.name)));return t}t.checkAllowList=checkAllowList},262:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.Context=void 0;const n=r(747);const o=r(87);class Context{constructor(){this.payload={};if(process.env.GITHUB_EVENT_PATH){if(n.existsSync(process.env.GITHUB_EVENT_PATH)){this.payload=JSON.parse(n.readFileSync(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}))}else{const e=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${e} does not exist${o.EOL}`)}}this.eventName=process.env.GITHUB_EVENT_NAME;this.sha=process.env.GITHUB_SHA;this.ref=process.env.GITHUB_REF;this.workflow=process.env.GITHUB_WORKFLOW;this.action=process.env.GITHUB_ACTION;this.actor=process.env.GITHUB_ACTOR;this.job=process.env.GITHUB_JOB;this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10);this.runId=parseInt(process.env.GITHUB_RUN_ID,10)}get issue(){const e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){const[e,t]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:t}}if(this.payload.repository){return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name}}throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}}t.Context=Context},280:function(e){e.exports=register;function register(e,t,r,n){if(typeof r!=="function"){throw new Error("method for before hook must be a function")}if(!n){n={}}if(Array.isArray(t)){return t.reverse().reduce(function(t,r){return register.bind(null,e,r,t,n)},r)()}return Promise.resolve().then(function(){if(!e.registry[t]){return r(n)}return e.registry[t].reduce(function(e,t){return t.hook.bind(null,e,n)},r)()})}},299:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});const r="2.3.0";function normalizePaginatedListResponse(e){const t="total_count"in e.data&&!("url"in e.data);if(!t)return e;const r=e.data.incomplete_results;const n=e.data.repository_selection;const o=e.data.total_count;delete e.data.incomplete_results;delete e.data.repository_selection;delete e.data.total_count;const s=Object.keys(e.data)[0];const i=e.data[s];e.data=i;if(typeof r!=="undefined"){e.data.incomplete_results=r}if(typeof n!=="undefined"){e.data.repository_selection=n}e.data.total_count=o;return e}function iterator(e,t,r){const n=typeof t==="function"?t.endpoint(r):e.request.endpoint(t,r);const o=typeof t==="function"?t:e.request;const s=n.method;const i=n.headers;let a=n.url;return{[Symbol.asyncIterator]:()=>({next(){if(!a){return Promise.resolve({done:true})}return o({method:s,url:a,headers:i}).then(normalizePaginatedListResponse).then(e=>{a=((e.headers.link||"").match(/<([^>]+)>;\s*rel="next"/)||[])[1];return{value:e}})}})}}function paginate(e,t,r,n){if(typeof r==="function"){n=r;r=undefined}return gather(e,[],iterator(e,t,r)[Symbol.asyncIterator](),n)}function gather(e,t,r,n){return r.next().then(o=>{if(o.done){return t}let s=false;function done(){s=true}t=t.concat(n?n(o.value,done):o.value.data);if(s){return t}return gather(e,t,r,n)})}function paginateRest(e){return{paginate:Object.assign(paginate.bind(null,e),{iterator:iterator.bind(null,e)})}}paginateRest.VERSION=r;t.paginateRest=paginateRest},357:function(e){e.exports=require("assert")},395:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.lockPullRequestAfterMerge=t.getCustomPrSignComment=t.getUseDcoFlag=t.getCustomAllSignedPrComment=t.getCustomNotSignedPrComment=t.getCreateFileCommitMessage=t.getSignedCommitMessage=t.getEmptyCommitFlag=t.getAllowListItem=t.getBranch=t.getPathToDocument=t.getPathToSignatures=t.getRemoteOrgName=t.getRemoteRepoName=void 0;const i=s(r(470));t.getRemoteRepoName=(()=>{return i.getInput("remote-repository-name",{required:false})});t.getRemoteOrgName=(()=>{return i.getInput("remote-organization-name",{required:false})});t.getPathToSignatures=(()=>i.getInput("path-to-signatures",{required:false}));t.getPathToDocument=(()=>i.getInput("path-to-document",{required:false}));t.getBranch=(()=>i.getInput("branch",{required:false}));t.getAllowListItem=(()=>i.getInput("allowlist",{required:false}));t.getEmptyCommitFlag=(()=>i.getInput("empty-commit-flag",{required:false}));t.getSignedCommitMessage=(()=>i.getInput("signed-commit-message",{required:false}));t.getCreateFileCommitMessage=(()=>i.getInput("create-file-commit-message",{required:false}));t.getCustomNotSignedPrComment=(()=>i.getInput("custom-notsigned-prcomment",{required:false}));t.getCustomAllSignedPrComment=(()=>i.getInput("custom-allsigned-prcomment",{required:false}));t.getUseDcoFlag=(()=>i.getInput("use-dco-flag",{required:false}));t.getCustomPrSignComment=(()=>i.getInput("custom-pr-sign-comment",{required:false}));t.lockPullRequestAfterMerge=(()=>i.getInput("lock-pullrequest-aftermerge",{required:false}))},407:function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,o){function fulfilled(e){try{step(n.next(e))}catch(e){o(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){o(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});const o=r(994);const s=r(469);function getCommitters(){return n(this,void 0,void 0,function*(){try{let e=[];let t=[];let r=yield o.octokit.graphql(`\n        query($owner:String! $name:String! $number:Int! $cursor:String!){\n            repository(owner: $owner, name: $name) {\n            pullRequest(number: $number) {\n                commits(first: 100, after: $cursor) {\n                    totalCount\n                    edges {\n                        node {\n                            commit {\n                                author {\n                                    email\n                                    name\n                                    user {\n                                        id\n                                        databaseId\n                                        login\n                                    }\n                                }\n                                committer {\n                                    name\n                                    user {\n                                        id\n                                        databaseId\n                                        login\n                                    }\n                                }\n                            }\n                        }\n                        cursor\n                    }\n                    pageInfo {\n                        endCursor\n                        hasNextPage\n                    }\n                }\n            }\n        }\n    }`.replace(/ /g,""),{owner:s.context.repo.owner,name:s.context.repo.repo,number:s.context.issue.number,cursor:""});r.repository.pullRequest.commits.edges.forEach(t=>{const r=i(t.node.commit);let n={name:r.login||r.name,id:r.databaseId||"",pullRequestNo:s.context.issue.number};if(e.length===0||e.map(e=>{return e.name}).indexOf(n.name)<0){e.push(n)}});t=e.filter(e=>{return e.id!==41898282});return t}catch(e){throw new Error(`graphql call to get the committers details failed: ${e}`)}})}t.default=getCommitters;const i=e=>e.author.user||e.committer.user||e.author||e.committer},413:function(e,t,r){e.exports=r(141)},431:function(e,t,r){"use strict";var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))t[r]=e[r];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const o=n(r(87));const s=r(82);function issueCommand(e,t,r){const n=new Command(e,t,r);process.stdout.write(n.toString()+o.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const i="::";class Command{constructor(e,t,r){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=r}toString(){let e=i+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const r in this.properties){if(this.properties.hasOwnProperty(r)){const n=this.properties[r];if(n){if(t){t=false}else{e+=","}e+=`${r}=${escapeProperty(n)}`}}}}e+=`${i}${escapeData(this.message)}`;return e}}function escapeData(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},448:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});var n=r(848);var o=r(523);var s=r(586);var i=r(95);var a=r(813);function _defineProperty(e,t,r){if(t in e){Object.defineProperty(e,t,{value:r,enumerable:true,configurable:true,writable:true})}else{e[t]=r}return e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);if(t)n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable});r.push.apply(r,n)}return r}function _objectSpread2(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};if(t%2){ownKeys(Object(r),true).forEach(function(t){_defineProperty(e,t,r[t])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(e,Object.getOwnPropertyDescriptors(r))}else{ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}}return e}const u="3.1.2";class Octokit{constructor(e={}){const t=new o.Collection;const r={baseUrl:s.request.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,"request")}),mediaType:{previews:[],format:""}};r.headers["user-agent"]=[e.userAgent,`octokit-core.js/${u} ${n.getUserAgent()}`].filter(Boolean).join(" ");if(e.baseUrl){r.baseUrl=e.baseUrl}if(e.previews){r.mediaType.previews=e.previews}if(e.timeZone){r.headers["time-zone"]=e.timeZone}this.request=s.request.defaults(r);this.graphql=i.withCustomRequest(this.request).defaults(_objectSpread2(_objectSpread2({},r),{},{baseUrl:r.baseUrl.replace(/\/api\/v3$/,"/api")}));this.log=Object.assign({debug:()=>{},info:()=>{},warn:console.warn.bind(console),error:console.error.bind(console)},e.log);this.hook=t;if(!e.authStrategy){if(!e.auth){this.auth=(async()=>({type:"unauthenticated"}))}else{const r=a.createTokenAuth(e.auth);t.wrap("request",r.hook);this.auth=r}}else{const r=e.authStrategy(Object.assign({request:this.request},e.auth));t.wrap("request",r.hook);this.auth=r}const c=this.constructor;c.plugins.forEach(t=>{Object.assign(this,t(this,e))})}static defaults(e){const t=class extends(this){constructor(...t){const r=t[0]||{};if(typeof e==="function"){super(e(r));return}super(Object.assign({},e,r,r.userAgent&&e.userAgent?{userAgent:`${r.userAgent} ${e.userAgent}`}:null))}};return t}static plugin(...e){var t;const r=this.plugins;const n=(t=class extends(this){},t.plugins=r.concat(e.filter(e=>!r.includes(e))),t);return n}}Octokit.VERSION=u;Octokit.plugins=[];t.Octokit=Octokit},450:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};var i=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,o){function fulfilled(e){try{step(n.next(e))}catch(e){o(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){o(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});t.reRunLastWorkFlowIfRequired=void 0;const a=r(469);const u=r(994);const c=s(r(470));function reRunLastWorkFlowIfRequired(){return i(this,void 0,void 0,function*(){if(a.context.eventName==="pull_request"){c.debug(`rerun not required for event - pull_request`);return}const e=yield getBranchOfPullRequest();const t=yield getSelfWorkflowId();const r=yield listWorkflowRunsInBranch(e,t);if(r.data.total_count>0){const e=r.data.workflow_runs[0].id;const t=yield checkIfLastWorkFlowFailed(e);if(t){c.debug(`Rerunning build run ${e}`);yield reRunWorkflow(e).catch(e=>c.error(`Error occurred when re-running the workflow: ${e}`))}}})}t.reRunLastWorkFlowIfRequired=reRunLastWorkFlowIfRequired;function getBranchOfPullRequest(){return i(this,void 0,void 0,function*(){const e=yield u.octokit.pulls.get({owner:a.context.repo.owner,repo:a.context.repo.repo,pull_number:a.context.issue.number});return e.data.head.ref})}function getSelfWorkflowId(){return i(this,void 0,void 0,function*(){const e=yield u.octokit.actions.listRepoWorkflows({owner:a.context.repo.owner,repo:a.context.repo.repo});const t=e.data.workflows.find(e=>e.name==a.context.workflow);if(!t){throw new Error(`Unable to locate this workflow's ID in this repository, can't retrigger job..`)}return t.id})}function listWorkflowRunsInBranch(e,t){return i(this,void 0,void 0,function*(){console.debug(e);const r=yield u.octokit.actions.listWorkflowRuns({owner:a.context.repo.owner,repo:a.context.repo.repo,branch:e,workflow_id:t,event:"pull_request_target"});return r})}function reRunWorkflow(e){return i(this,void 0,void 0,function*(){yield u.octokitUsingPAT.actions.reRunWorkflow({owner:a.context.repo.owner,repo:a.context.repo.repo,run_id:e})})}function checkIfLastWorkFlowFailed(e){return i(this,void 0,void 0,function*(){const t=yield u.octokit.actions.getWorkflowRun({owner:a.context.repo.owner,repo:a.context.repo.repo,run_id:e});return t.data.conclusion=="failure"})}},454:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var n=_interopDefault(r(794));var o=_interopDefault(r(605));var s=_interopDefault(r(835));var i=_interopDefault(r(211));var a=_interopDefault(r(761));const u=n.Readable;const c=Symbol("buffer");const l=Symbol("type");class Blob{constructor(){this[l]="";const e=arguments[0];const t=arguments[1];const r=[];let n=0;if(e){const t=e;const o=Number(t.length);for(let e=0;e<o;e++){const o=t[e];let s;if(o instanceof Buffer){s=o}else if(ArrayBuffer.isView(o)){s=Buffer.from(o.buffer,o.byteOffset,o.byteLength)}else if(o instanceof ArrayBuffer){s=Buffer.from(o)}else if(o instanceof Blob){s=o[c]}else{s=Buffer.from(typeof o==="string"?o:String(o))}n+=s.length;r.push(s)}}this[c]=Buffer.concat(r);let o=t&&t.type!==undefined&&String(t.type).toLowerCase();if(o&&!/[^\u0020-\u007E]/.test(o)){this[l]=o}}get size(){return this[c].length}get type(){return this[l]}text(){return Promise.resolve(this[c].toString())}arrayBuffer(){const e=this[c];const t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);return Promise.resolve(t)}stream(){const e=new u;e._read=function(){};e.push(this[c]);e.push(null);return e}toString(){return"[object Blob]"}slice(){const e=this.size;const t=arguments[0];const r=arguments[1];let n,o;if(t===undefined){n=0}else if(t<0){n=Math.max(e+t,0)}else{n=Math.min(t,e)}if(r===undefined){o=e}else if(r<0){o=Math.max(e+r,0)}else{o=Math.min(r,e)}const s=Math.max(o-n,0);const i=this[c];const a=i.slice(n,n+s);const u=new Blob([],{type:arguments[2]});u[c]=a;return u}}Object.defineProperties(Blob.prototype,{size:{enumerable:true},type:{enumerable:true},slice:{enumerable:true}});Object.defineProperty(Blob.prototype,Symbol.toStringTag,{value:"Blob",writable:false,enumerable:false,configurable:true});function FetchError(e,t,r){Error.call(this,e);this.message=e;this.type=t;if(r){this.code=this.errno=r.code}Error.captureStackTrace(this,this.constructor)}FetchError.prototype=Object.create(Error.prototype);FetchError.prototype.constructor=FetchError;FetchError.prototype.name="FetchError";let p;try{p=r(18).convert}catch(e){}const f=Symbol("Body internals");const d=n.PassThrough;function Body(e){var t=this;var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},o=r.size;let s=o===undefined?0:o;var i=r.timeout;let a=i===undefined?0:i;if(e==null){e=null}else if(isURLSearchParams(e)){e=Buffer.from(e.toString())}else if(isBlob(e));else if(Buffer.isBuffer(e));else if(Object.prototype.toString.call(e)==="[object ArrayBuffer]"){e=Buffer.from(e)}else if(ArrayBuffer.isView(e)){e=Buffer.from(e.buffer,e.byteOffset,e.byteLength)}else if(e instanceof n);else{e=Buffer.from(String(e))}this[f]={body:e,disturbed:false,error:null};this.size=s;this.timeout=a;if(e instanceof n){e.on("error",function(e){const r=e.name==="AbortError"?e:new FetchError(`Invalid response body while trying to fetch ${t.url}: ${e.message}`,"system",e);t[f].error=r})}}Body.prototype={get body(){return this[f].body},get bodyUsed(){return this[f].disturbed},arrayBuffer(){return consumeBody.call(this).then(function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)})},blob(){let e=this.headers&&this.headers.get("content-type")||"";return consumeBody.call(this).then(function(t){return Object.assign(new Blob([],{type:e.toLowerCase()}),{[c]:t})})},json(){var e=this;return consumeBody.call(this).then(function(t){try{return JSON.parse(t.toString())}catch(t){return Body.Promise.reject(new FetchError(`invalid json response body at ${e.url} reason: ${t.message}`,"invalid-json"))}})},text(){return consumeBody.call(this).then(function(e){return e.toString()})},buffer(){return consumeBody.call(this)},textConverted(){var e=this;return consumeBody.call(this).then(function(t){return convertBody(t,e.headers)})}};Object.defineProperties(Body.prototype,{body:{enumerable:true},bodyUsed:{enumerable:true},arrayBuffer:{enumerable:true},blob:{enumerable:true},json:{enumerable:true},text:{enumerable:true}});Body.mixIn=function(e){for(const t of Object.getOwnPropertyNames(Body.prototype)){if(!(t in e)){const r=Object.getOwnPropertyDescriptor(Body.prototype,t);Object.defineProperty(e,t,r)}}};function consumeBody(){var e=this;if(this[f].disturbed){return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`))}this[f].disturbed=true;if(this[f].error){return Body.Promise.reject(this[f].error)}let t=this.body;if(t===null){return Body.Promise.resolve(Buffer.alloc(0))}if(isBlob(t)){t=t.stream()}if(Buffer.isBuffer(t)){return Body.Promise.resolve(t)}if(!(t instanceof n)){return Body.Promise.resolve(Buffer.alloc(0))}let r=[];let o=0;let s=false;return new Body.Promise(function(n,i){let a;if(e.timeout){a=setTimeout(function(){s=true;i(new FetchError(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))},e.timeout)}t.on("error",function(t){if(t.name==="AbortError"){s=true;i(t)}else{i(new FetchError(`Invalid response body while trying to fetch ${e.url}: ${t.message}`,"system",t))}});t.on("data",function(t){if(s||t===null){return}if(e.size&&o+t.length>e.size){s=true;i(new FetchError(`content size at ${e.url} over limit: ${e.size}`,"max-size"));return}o+=t.length;r.push(t)});t.on("end",function(){if(s){return}clearTimeout(a);try{n(Buffer.concat(r,o))}catch(t){i(new FetchError(`Could not create Buffer from response body for ${e.url}: ${t.message}`,"system",t))}})})}function convertBody(e,t){if(typeof p!=="function"){throw new Error("The package `encoding` must be installed to use the textConverted() function")}const r=t.get("content-type");let n="utf-8";let o,s;if(r){o=/charset=([^;]*)/i.exec(r)}s=e.slice(0,1024).toString();if(!o&&s){o=/<meta.+?charset=(['"])(.+?)\1/i.exec(s)}if(!o&&s){o=/<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(s);if(!o){o=/<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(s);if(o){o.pop()}}if(o){o=/charset=(.*)/i.exec(o.pop())}}if(!o&&s){o=/<\?xml.+?encoding=(['"])(.+?)\1/i.exec(s)}if(o){n=o.pop();if(n==="gb2312"||n==="gbk"){n="gb18030"}}return p(e,"UTF-8",n).toString()}function isURLSearchParams(e){if(typeof e!=="object"||typeof e.append!=="function"||typeof e.delete!=="function"||typeof e.get!=="function"||typeof e.getAll!=="function"||typeof e.has!=="function"||typeof e.set!=="function"){return false}return e.constructor.name==="URLSearchParams"||Object.prototype.toString.call(e)==="[object URLSearchParams]"||typeof e.sort==="function"}function isBlob(e){return typeof e==="object"&&typeof e.arrayBuffer==="function"&&typeof e.type==="string"&&typeof e.stream==="function"&&typeof e.constructor==="function"&&typeof e.constructor.name==="string"&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}function clone(e){let t,r;let o=e.body;if(e.bodyUsed){throw new Error("cannot clone body after it is used")}if(o instanceof n&&typeof o.getBoundary!=="function"){t=new d;r=new d;o.pipe(t);o.pipe(r);e[f].body=t;o=r}return o}function extractContentType(e){if(e===null){return null}else if(typeof e==="string"){return"text/plain;charset=UTF-8"}else if(isURLSearchParams(e)){return"application/x-www-form-urlencoded;charset=UTF-8"}else if(isBlob(e)){return e.type||null}else if(Buffer.isBuffer(e)){return null}else if(Object.prototype.toString.call(e)==="[object ArrayBuffer]"){return null}else if(ArrayBuffer.isView(e)){return null}else if(typeof e.getBoundary==="function"){return`multipart/form-data;boundary=${e.getBoundary()}`}else if(e instanceof n){return null}else{return"text/plain;charset=UTF-8"}}function getTotalBytes(e){const t=e.body;if(t===null){return 0}else if(isBlob(t)){return t.size}else if(Buffer.isBuffer(t)){return t.length}else if(t&&typeof t.getLengthSync==="function"){if(t._lengthRetrievers&&t._lengthRetrievers.length==0||t.hasKnownLength&&t.hasKnownLength()){return t.getLengthSync()}return null}else{return null}}function writeToStream(e,t){const r=t.body;if(r===null){e.end()}else if(isBlob(r)){r.stream().pipe(e)}else if(Buffer.isBuffer(r)){e.write(r);e.end()}else{r.pipe(e)}}Body.Promise=global.Promise;const h=/[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;const g=/[^\t\x20-\x7e\x80-\xff]/;function validateName(e){e=`${e}`;if(h.test(e)||e===""){throw new TypeError(`${e} is not a legal HTTP header name`)}}function validateValue(e){e=`${e}`;if(g.test(e)){throw new TypeError(`${e} is not a legal HTTP header value`)}}function find(e,t){t=t.toLowerCase();for(const r in e){if(r.toLowerCase()===t){return r}}return undefined}const m=Symbol("map");class Headers{constructor(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:undefined;this[m]=Object.create(null);if(e instanceof Headers){const t=e.raw();const r=Object.keys(t);for(const e of r){for(const r of t[e]){this.append(e,r)}}return}if(e==null);else if(typeof e==="object"){const t=e[Symbol.iterator];if(t!=null){if(typeof t!=="function"){throw new TypeError("Header pairs must be iterable")}const r=[];for(const t of e){if(typeof t!=="object"||typeof t[Symbol.iterator]!=="function"){throw new TypeError("Each header pair must be iterable")}r.push(Array.from(t))}for(const e of r){if(e.length!==2){throw new TypeError("Each header pair must be a name/value tuple")}this.append(e[0],e[1])}}else{for(const t of Object.keys(e)){const r=e[t];this.append(t,r)}}}else{throw new TypeError("Provided initializer must be an object")}}get(e){e=`${e}`;validateName(e);const t=find(this[m],e);if(t===undefined){return null}return this[m][t].join(", ")}forEach(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;let r=getHeaders(this);let n=0;while(n<r.length){var o=r[n];const s=o[0],i=o[1];e.call(t,i,s,this);r=getHeaders(this);n++}}set(e,t){e=`${e}`;t=`${t}`;validateName(e);validateValue(t);const r=find(this[m],e);this[m][r!==undefined?r:e]=[t]}append(e,t){e=`${e}`;t=`${t}`;validateName(e);validateValue(t);const r=find(this[m],e);if(r!==undefined){this[m][r].push(t)}else{this[m][e]=[t]}}has(e){e=`${e}`;validateName(e);return find(this[m],e)!==undefined}delete(e){e=`${e}`;validateName(e);const t=find(this[m],e);if(t!==undefined){delete this[m][t]}}raw(){return this[m]}keys(){return createHeadersIterator(this,"key")}values(){return createHeadersIterator(this,"value")}[Symbol.iterator](){return createHeadersIterator(this,"key+value")}}Headers.prototype.entries=Headers.prototype[Symbol.iterator];Object.defineProperty(Headers.prototype,Symbol.toStringTag,{value:"Headers",writable:false,enumerable:false,configurable:true});Object.defineProperties(Headers.prototype,{get:{enumerable:true},forEach:{enumerable:true},set:{enumerable:true},append:{enumerable:true},has:{enumerable:true},delete:{enumerable:true},keys:{enumerable:true},values:{enumerable:true},entries:{enumerable:true}});function getHeaders(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"key+value";const r=Object.keys(e[m]).sort();return r.map(t==="key"?function(e){return e.toLowerCase()}:t==="value"?function(t){return e[m][t].join(", ")}:function(t){return[t.toLowerCase(),e[m][t].join(", ")]})}const b=Symbol("internal");function createHeadersIterator(e,t){const r=Object.create(y);r[b]={target:e,kind:t,index:0};return r}const y=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==y){throw new TypeError("Value of `this` is not a HeadersIterator")}var e=this[b];const t=e.target,r=e.kind,n=e.index;const o=getHeaders(t,r);const s=o.length;if(n>=s){return{value:undefined,done:true}}this[b].index=n+1;return{value:o[n],done:false}}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(y,Symbol.toStringTag,{value:"HeadersIterator",writable:false,enumerable:false,configurable:true});function exportNodeCompatibleHeaders(e){const t=Object.assign({__proto__:null},e[m]);const r=find(e[m],"Host");if(r!==undefined){t[r]=t[r][0]}return t}function createHeadersLenient(e){const t=new Headers;for(const r of Object.keys(e)){if(h.test(r)){continue}if(Array.isArray(e[r])){for(const n of e[r]){if(g.test(n)){continue}if(t[m][r]===undefined){t[m][r]=[n]}else{t[m][r].push(n)}}}else if(!g.test(e[r])){t[m][r]=[e[r]]}}return t}const v=Symbol("Response internals");const w=o.STATUS_CODES;class Response{constructor(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};Body.call(this,e,t);const r=t.status||200;const n=new Headers(t.headers);if(e!=null&&!n.has("Content-Type")){const t=extractContentType(e);if(t){n.append("Content-Type",t)}}this[v]={url:t.url,status:r,statusText:t.statusText||w[r],headers:n,counter:t.counter}}get url(){return this[v].url||""}get status(){return this[v].status}get ok(){return this[v].status>=200&&this[v].status<300}get redirected(){return this[v].counter>0}get statusText(){return this[v].statusText}get headers(){return this[v].headers}clone(){return new Response(clone(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}Body.mixIn(Response.prototype);Object.defineProperties(Response.prototype,{url:{enumerable:true},status:{enumerable:true},ok:{enumerable:true},redirected:{enumerable:true},statusText:{enumerable:true},headers:{enumerable:true},clone:{enumerable:true}});Object.defineProperty(Response.prototype,Symbol.toStringTag,{value:"Response",writable:false,enumerable:false,configurable:true});const _=Symbol("Request internals");const T=s.parse;const E=s.format;const O="destroy"in n.Readable.prototype;function isRequest(e){return typeof e==="object"&&typeof e[_]==="object"}function isAbortSignal(e){const t=e&&typeof e==="object"&&Object.getPrototypeOf(e);return!!(t&&t.constructor.name==="AbortSignal")}class Request{constructor(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};let r;if(!isRequest(e)){if(e&&e.href){r=T(e.href)}else{r=T(`${e}`)}e={}}else{r=T(e.url)}let n=t.method||e.method||"GET";n=n.toUpperCase();if((t.body!=null||isRequest(e)&&e.body!==null)&&(n==="GET"||n==="HEAD")){throw new TypeError("Request with GET/HEAD method cannot have body")}let o=t.body!=null?t.body:isRequest(e)&&e.body!==null?clone(e):null;Body.call(this,o,{timeout:t.timeout||e.timeout||0,size:t.size||e.size||0});const s=new Headers(t.headers||e.headers||{});if(o!=null&&!s.has("Content-Type")){const e=extractContentType(o);if(e){s.append("Content-Type",e)}}let i=isRequest(e)?e.signal:null;if("signal"in t)i=t.signal;if(i!=null&&!isAbortSignal(i)){throw new TypeError("Expected signal to be an instanceof AbortSignal")}this[_]={method:n,redirect:t.redirect||e.redirect||"follow",headers:s,parsedURL:r,signal:i};this.follow=t.follow!==undefined?t.follow:e.follow!==undefined?e.follow:20;this.compress=t.compress!==undefined?t.compress:e.compress!==undefined?e.compress:true;this.counter=t.counter||e.counter||0;this.agent=t.agent||e.agent}get method(){return this[_].method}get url(){return E(this[_].parsedURL)}get headers(){return this[_].headers}get redirect(){return this[_].redirect}get signal(){return this[_].signal}clone(){return new Request(this)}}Body.mixIn(Request.prototype);Object.defineProperty(Request.prototype,Symbol.toStringTag,{value:"Request",writable:false,enumerable:false,configurable:true});Object.defineProperties(Request.prototype,{method:{enumerable:true},url:{enumerable:true},headers:{enumerable:true},redirect:{enumerable:true},clone:{enumerable:true},signal:{enumerable:true}});function getNodeRequestOptions(e){const t=e[_].parsedURL;const r=new Headers(e[_].headers);if(!r.has("Accept")){r.set("Accept","*/*")}if(!t.protocol||!t.hostname){throw new TypeError("Only absolute URLs are supported")}if(!/^https?:$/.test(t.protocol)){throw new TypeError("Only HTTP(S) protocols are supported")}if(e.signal&&e.body instanceof n.Readable&&!O){throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8")}let o=null;if(e.body==null&&/^(POST|PUT)$/i.test(e.method)){o="0"}if(e.body!=null){const t=getTotalBytes(e);if(typeof t==="number"){o=String(t)}}if(o){r.set("Content-Length",o)}if(!r.has("User-Agent")){r.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)")}if(e.compress&&!r.has("Accept-Encoding")){r.set("Accept-Encoding","gzip,deflate")}let s=e.agent;if(typeof s==="function"){s=s(t)}if(!r.has("Connection")&&!s){r.set("Connection","close")}return Object.assign({},t,{method:e.method,headers:exportNodeCompatibleHeaders(r),agent:s})}function AbortError(e){Error.call(this,e);this.type="aborted";this.message=e;Error.captureStackTrace(this,this.constructor)}AbortError.prototype=Object.create(Error.prototype);AbortError.prototype.constructor=AbortError;AbortError.prototype.name="AbortError";const k=n.PassThrough;const S=s.resolve;function fetch(e,t){if(!fetch.Promise){throw new Error("native promise missing, set fetch.Promise to your favorite alternative")}Body.Promise=fetch.Promise;return new fetch.Promise(function(r,s){const u=new Request(e,t);const c=getNodeRequestOptions(u);const l=(c.protocol==="https:"?i:o).request;const p=u.signal;let f=null;const d=function abort(){let e=new AbortError("The user aborted a request.");s(e);if(u.body&&u.body instanceof n.Readable){u.body.destroy(e)}if(!f||!f.body)return;f.body.emit("error",e)};if(p&&p.aborted){d();return}const h=function abortAndFinalize(){d();finalize()};const g=l(c);let m;if(p){p.addEventListener("abort",h)}function finalize(){g.abort();if(p)p.removeEventListener("abort",h);clearTimeout(m)}if(u.timeout){g.once("socket",function(e){m=setTimeout(function(){s(new FetchError(`network timeout at: ${u.url}`,"request-timeout"));finalize()},u.timeout)})}g.on("error",function(e){s(new FetchError(`request to ${u.url} failed, reason: ${e.message}`,"system",e));finalize()});g.on("response",function(e){clearTimeout(m);const t=createHeadersLenient(e.headers);if(fetch.isRedirect(e.statusCode)){const n=t.get("Location");const o=n===null?null:S(u.url,n);switch(u.redirect){case"error":s(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${u.url}`,"no-redirect"));finalize();return;case"manual":if(o!==null){try{t.set("Location",o)}catch(e){s(e)}}break;case"follow":if(o===null){break}if(u.counter>=u.follow){s(new FetchError(`maximum redirect reached at: ${u.url}`,"max-redirect"));finalize();return}const n={headers:new Headers(u.headers),follow:u.follow,counter:u.counter+1,agent:u.agent,compress:u.compress,method:u.method,body:u.body,signal:u.signal,timeout:u.timeout,size:u.size};if(e.statusCode!==303&&u.body&&getTotalBytes(u)===null){s(new FetchError("Cannot follow redirect with body being a readable stream","unsupported-redirect"));finalize();return}if(e.statusCode===303||(e.statusCode===301||e.statusCode===302)&&u.method==="POST"){n.method="GET";n.body=undefined;n.headers.delete("content-length")}r(fetch(new Request(o,n)));finalize();return}}e.once("end",function(){if(p)p.removeEventListener("abort",h)});let n=e.pipe(new k);const o={url:u.url,status:e.statusCode,statusText:e.statusMessage,headers:t,size:u.size,timeout:u.timeout,counter:u.counter};const i=t.get("Content-Encoding");if(!u.compress||u.method==="HEAD"||i===null||e.statusCode===204||e.statusCode===304){f=new Response(n,o);r(f);return}const c={flush:a.Z_SYNC_FLUSH,finishFlush:a.Z_SYNC_FLUSH};if(i=="gzip"||i=="x-gzip"){n=n.pipe(a.createGunzip(c));f=new Response(n,o);r(f);return}if(i=="deflate"||i=="x-deflate"){const t=e.pipe(new k);t.once("data",function(e){if((e[0]&15)===8){n=n.pipe(a.createInflate())}else{n=n.pipe(a.createInflateRaw())}f=new Response(n,o);r(f)});return}if(i=="br"&&typeof a.createBrotliDecompress==="function"){n=n.pipe(a.createBrotliDecompress());f=new Response(n,o);r(f);return}f=new Response(n,o);r(f)});writeToStream(g,u)})}fetch.isRedirect=function(e){return e===301||e===302||e===303||e===307||e===308};fetch.Promise=global.Promise;e.exports=t=fetch;Object.defineProperty(t,"__esModule",{value:true});t.default=t;t.Headers=Headers;t.Request=Request;t.Response=Response;t.FetchError=FetchError},469:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.getOctokit=t.context=void 0;const i=s(r(262));const a=r(521);t.context=new i.Context;function getOctokit(e,t){return new a.GitHub(a.getOctokitOptions(e,t))}t.getOctokit=getOctokit},470:function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,o){function fulfilled(e){try{step(n.next(e))}catch(e){o(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){o(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))t[r]=e[r];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=r(431);const i=r(102);const a=r(82);const u=o(r(87));const c=o(r(622));var l;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(l=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const r=a.toCommandValue(t);process.env[e]=r;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${u.EOL}${r}${u.EOL}${t}`;i.issueCommand("ENV",n)}else{s.issueCommand("set-env",{name:e},r)}}t.exportVariable=exportVariable;function setSecret(e){s.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){i.issueCommand("PATH",e)}else{s.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${c.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const r=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!r){throw new Error(`Input required and not supplied: ${e}`)}return r.trim()}t.getInput=getInput;function setOutput(e,t){s.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){s.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=l.Failure;error(e)}t.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}t.isDebug=isDebug;function debug(e){s.issueCommand("debug",{},e)}t.debug=debug;function error(e){s.issue("error",e instanceof Error?e.toString():e)}t.error=error;function warning(e){s.issue("warning",e instanceof Error?e.toString():e)}t.warning=warning
...

[Feature] Trim spaces from signature comment

Is your feature request related to a problem? Please describe.
When users copy the signing line into a comment ("'I have read the CLA Document..."), it is often copied with extra spaces or new lines. Since the action is comparing the comment's content strictly to the expected line, it is not recognized as a signing. We sometimes have to ask the users to try again multiple times until they get it right.

Describe the solution you'd like
It would be nice if the action would know to trim extra lines and spaces when comparing to the expected line. I know the comparison happens in my own workflow and that the solution should probably be there, but I'm reaching out to see maybe someone run into the same problem and has a solution.

Describe alternatives you've considered

  1. Github Action offers a contains() function, but then it ignores extra words that might make the signing invalid.
  2. Make the comparison inside the Action step itself and not in the workflow (would mean the step will run on every comment, which might be a waste)

[Feature] Add option to require full name when signing CLA

I'm not a lawyer, but our team was discussing if just recording the GitHub user name is enough. People might delete their accounts or their PR and we're unsure this could cause problems.

How about adding an options to require the actual name when signing, e. g.:

I, <your full name here>, have read the CLA document and I hereby sign the CLA.

It could then parse the name and add it to the JSON file. If the name is not present, doesn't consist of at least two words or contains invalid characters (e. g. *<>^~ยฟ;รท|` etc.), the bot either ignores the message or posts an error message.

[BUG] Unrelated user is tagged with @ in comment

Describe the bug

On a project I do not control, in exadel-inc/CompreFace#543 (comment), the action seems to have inserted "@ivan" in the comment, causing GitHub to send an email to an unrelated ivan (me).

To Reproduce

I don't know, but "Ivan Kurnosau seems not to be a GitHub user" is probably related.

Expected behavior

Please don't @ unrelated GitHub users, it leads to undesired email from unrelated projects.

Screenshots

Screenshot 2021-06-02 073337

[Feature] Output user and email to logs of unsigned users

Is your feature request related to a problem? Please describe.
As a repo admin troubleshooting why signatures are not accepted it would be helpful to produce a list of github IDs+emails included in the PR record

Describe the solution you'd like
Use more verbose logging in the action to make problematic commit obvious

Describe alternatives you've considered
Manual debugging

Additional context
Add any other context or screenshots about the feature request here.

[Feature] AllowList with Teams

Is your feature request related to a problem? Please describe.
Currently it is only possible to set users to the allowlist.

Describe the solution you'd like
I would like to have the possibility to add also teams to this list.

Describe alternatives you've considered
Otherwise it would be helpful to add another variable.

[BUG] Allow list in cla.yml not working as expected

Describe the bug
Specifying my user name in allow list still executes the github action.

To Reproduce

  1. Add allow list to cla.yml allowlist: gitusername,bot*.
  2. commit changes and update a test read me file.
  3. Notice the cla assistant github action in-spite the allow list has the user name.
  4. This also does not add the signature in to the signature.json file.
  5. Keeping only bot in allowlist allowlist: bot* works as expected.

Expected behavior
If the user name is specified in the allow list the cla assistant github action should not execute.

Screenshots
Screen Shot 2021-04-12 at 3 30 16 PM

Screen Shot 2021-04-12 at 3 35 42 PM

[BUG] Exception when executing the cla-assistant during pull - Parameter token or opts.auth is required

Describe the bug
Getting a Parameter token or opts.auth is required error when the cla-assistant is run when a pull request is created, whether there is another pull request with the I have read the CLA Document and I hereby sign the CLA comment in a separate pull request comment. Currently on V2.0.3-alpha. The repo where this is being tested is rsbeckerca/TestCLA. I am suspecting that there is a step missing in the setup. Also the repo uses a main branch instead of a master branch.

To Reproduce

  1. Create a new repo.
  2. Add the cla-assistant workflow cla.yml file.
  3. Switch to a new branch
  4. Modify a file and commit.
  5. Create a pull request.

Expected behavior
The exception should not occur.

Screenshots
Error: Parameter token or opts.auth is required
at Object.getAuthString (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:4610)
at Object.getOctokitOptions (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:68637)
at Object.getOctokit (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:57376)
at Object.994 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:226648)
at webpack_require (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:154)
at Object.407 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:27687)
at webpack_require (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:154)
at Object.210 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:12928)
at webpack_require (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:154)
at Object.131 (/home/runner/work/_actions/cla-assistant/github-action/v2.0.3-alpha/lib/main.js:1:6119)

[BUG]

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

reply to CLA-assistant from email doesn't trigger GitHub Action

URL to the linked Repo/Org:
build-trust/ockam-website#169

Steps to reproduce the problem:

  1. Notify a PR that they need to sign the CLA
  2. Author of PR gets an email asking for them to trigger the GitHub Action
  3. Author of PR replys to the email with "I have read the CLA Document and I hereby sign the CLA"
  4. GitHub action does not trigger because of the extra content sent along in the post from the email reply.

What is the expected result?

  1. If the message starts with "I have read the CLA Document and I hereby sign the CLA" then the PR author will be added to the 'allow list'.

What happens instead?

  1. Nothing.

Commit message config

Would love it if we can have support for a custom commit message for "@#contributorname# has signed the CLA" and "Creating file for storing CLA Signatures". In our case, we're using Gitmoji so we'd love to change it to ":wrench: @#contributorname# has signed the CLA", for example. People using Semantic Release will also be able to do "chore(cla): @#contributorname# has signed the CLA".

[BUG] HttpError: Not Found on re-running the workflow

Describe the bug
After signing "I have read the CLA Document and I hereby sign the CLA" as a comment. The CLAssistant Action saves the user sign in the JSON but when it tries to re-run the last failed action it returns a HttpError: Not Found

The cla.yml that I am using:

name: "CLA Assistant"
on:
  issue_comment:
    types: [created]
  pull_request_target:
    types: [opened,closed,synchronize]

jobs:
  CLAssistant:
    runs-on: ubuntu-latest
    steps:
      - name: "CLA Assistant"
        if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
        uses: cla-assistant/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PERSONAL_ACCESS_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN }}
        with:
          remote-organization-name: 'sebap'
          remote-repository-name: 'clas'
          path-to-signatures: 'test-signature/signatures.json'
          path-to-document: 'https://github.com/sebap/sebap-cli/blob/main/LICENSE'
          branch: 'main'
          allowlist: bot*

To Reproduce

  • Create a Pull Request and wait for the failure of the CLAssistant Action
  • Left "I have read the CLA Document and I hereby sign the CLA" as a comment to sings
  • Wait again for the CLAssistant Action and see the error in Annotations "Error occurred when re-running the workflow: HttpError: Not Found".

Expected behavior
The CLAssistant Action re-run successfully last failed workflow after signing

Screenshots
image

[Bug] Skip CLA comment if already commented

If there's already a comment "All contributors have signed the CLA", and there's a new push, the comment is added again.

It can be skipped if the new push is from the same contributors who have already signed the CLA.

[Feature]

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

[Feature] Add ability to skip signed comment after CLA is signed

Is your feature request related to a problem? Please describe.
Everytime the bot comments on the PR, it generates notifications which may not be ideal for all situations. I usually read all my github emails and the bot comments spam them.

Describe the solution you'd like
It should be possible to optionally skip the comment and maybe replace it with an alternative like a like on the PR or something.

Describe alternatives you've considered
Setting the custom message to "" but not sure if that'd work

Additional context
For reference see bigpanther/shipanther#256

[BUG] Path to document is wrong in comment

Describe the bug
The comment made on the PR includes a link to the CLA, But this was empty.
This is however on a private repo (for now) so that could be the reason.

To Reproduce
config:

name: "CLA Assistant"
on:
  issue_comment:
    types: [created]
  pull_request_target:
    types: [opened, closed, synchronize]

jobs:
  CLAssistant:
    runs-on: ubuntu-latest
    steps:
      - name: "CLA Assistant"
        if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
        # Alpha Release
        uses: cla-assistant/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # the below token should have repo scope and must be manually added by you in the repository's secret
          PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_ACCESS_TOKEN }}
        with:
          path-to-signatures: "signatures/version1/cla.json"
          path-to-document: "https://github.com/<hidden>/core/blob/main/CLA.md"
          branch: "main"
          allowlist: bot*
          create-file-commit-message: 'chore(docs): Creating file for storing CLA Signatures'
          signed-commit-message: 'chore: $contributorName has signed the CLA in #$pullRequestNo'

Expected behavior
The link included in the commit message

kindly remind on the github token restriction will limit the usability of this action

First, Great work!

Please be careful when you continue developing this action. For a pull request coming from a fork (which is where many opensource projects' contribution coming from and thats why people need a CLA bot), Github Action grants only a read access on GITHUB_TOKEN; and PAT secrets are not available on forks. These two restrictions will greatly limit the usage of this action. We already encountered this problem: jina-ai/jina#417

Please refer to this issue for the same problem: actions/labeler#12 A lot of users adapt to this Github action and later have to remove it from their CICD pipeline. You can scroll it down and see a lot of PRs related to that issue are just for removing it from the pipeline.

A good way to test it is let some user fork your repo and submit a pull request from their fork.

Release v1.4.1 has wrong version number

Release v1.4.1-alpha was released as version @v1.4.1-alpha instead of v1.4.1-alpha. This causes this error when using the samples:

An action could not be found at the URI 'https://api.github.com/repos/cla-assistant/github-action/tarball/v1.4.1-alpha'

And the temporary solution is to use this line:

uses: cla-assistant/github-action@@v1.4.1-alpha

Except that it doesn't work because of this error:

The workflow is not valid. .github/workflows/cla.yml (Line: 15, Col: 15): Expected format {org}/{repo}[/path]@ref. Actual 'cla-assistant/github-action@@v1.4.1-alpha',Input string was not in a correct format.

So, v1.4.1 doesn't work at all. I suggest re-releasing it with the correct version number.

Multiple CLA comments, after each commit

Describe the bug
After each new commit in the same pull request, the CLA bot is adding the comments CLA Assistant Lite All Contributors have signed the CLA. Example PR link. I guess this is not expected behaviour, there should be only one comment that contributor signed up. Or maybe there is some flag to disable this that I can't find? Thanks
To Reproduce

  1. Create PR
  2. Make multiple new commits

Expected behavior
Add the comment only once.

Screenshots
Screenshot from 2020-08-21 15-29-09

[BUG] Unexpected end of JSON input

Describe the bug
Unexpected end of JSON input

To Reproduce
Steps to reproduce the behavior:

  1. Create a PR to a project
    https://github.com/AlexRogalskiy/java-patterns/actions/runs/2903651345/workflow
    https://github.com/AlexRogalskiy/java-patterns/runs/7951029716?check_suite_focus=true
Run cla-assistant/[email protected]
  with:
    path-to-signatures: cla/signatures.json
    path-to-document: https://github.com/AlexRogalskiy/java-patterns/blob/master/cla/README.md
    branch: master
    allowlist: imgbot,dependabot*
    use-dco-flag: false
    lock-pullrequest-aftermerge: true
  env:
    GITHUB_TOKEN: ***
    PERSONAL_ACCESS_TOKEN: ***
CLA Assistant GitHub Action bot has started the process
Error: Unexpected end of JSON input

Expected behavior
Error messages should be easily understood by humans, not just underlying technical details. They should be specific, so if a certain file is malformed, the name of the file should be indicated.

Note: if your software can know it's an alpha/beta and can know that there's a released version available for the same (or newer), then it might make sense to warn and suggest updating (I haven't done this yet for my own software, but it came up this weekend, so I'm considering it).

Screenshots
If applicable, add screenshots to help explain your problem.

[BUG] test issue2

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.