master 58daaf842ac3 cached
38 files
1.2 MB
357.6k tokens
1030 symbols
1 requests
Download .txt
Showing preview only (1,277K chars total). Download the full file or copy to clipboard to get everything.
Repository: contributor-assistant/github-action
Branch: master
Commit: 58daaf842ac3
Files: 38
Total size: 1.2 MB

Directory structure:
gitextract_yjz6o31s/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   └── workflows/
│       ├── add-contributors-in-readme.yaml
│       ├── assign-to-project.yaml
│       ├── codeql-analysis.yml
│       └── nodejs.yml
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── __tests__/
│   ├── main.test.ts
│   └── pullRequestLock.test.ts
├── action.yml
├── dist/
│   └── index.js
├── docs/
│   └── contributors.md
├── jest.config.js
├── package.json
├── src/
│   ├── addEmptyCommit.ts
│   ├── checkAllowList.ts
│   ├── graphql.ts
│   ├── interfaces.ts
│   ├── main.ts
│   ├── octokit.ts
│   ├── persistence/
│   │   └── persistence.ts
│   ├── pullRerunRunner.ts
│   ├── pullrequest/
│   │   ├── pullRequestComment.ts
│   │   ├── pullRequestCommentContent.ts
│   │   ├── pullRequestLock.ts
│   │   └── signatureComment.ts
│   ├── setupClaCheck.ts
│   └── shared/
│       ├── getInputs.ts
│       └── pr-sign-comment.ts
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: ibakshay


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: ''

---

**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.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: 'Please describe your feature request below:'
title: "[Feature]"
labels: feature
assignees: ''

---

**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.


================================================
FILE: .github/workflows/add-contributors-in-readme.yaml
================================================
name: Add Contributors to readme file

on:
    push:
        branches:
            - master

jobs:
    contrib-readme-job:
        runs-on: ubuntu-latest
        name: A job to automate contrib in readme
        steps:
            - name: Contribute List
              uses: akhilmhdh/contributors-readme-action@v2.3.6
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/assign-to-project.yaml
================================================
name: Auto Assign to Project(s)

on:
  issues:
    types: [opened]
env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
  assign_one_project:
    runs-on: ubuntu-latest
    name: Assign to One Project
    steps:
    - name: Assign NEW issues and NEW pull requests to project 2
      uses: srggrs/assign-one-project-github-action@1.2.1
      if: github.event.action == 'opened'
      with:
        project: 'https://github.com/cla-assistant/github-action/projects/2'


================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  push:
    branches: [ master, branchprotection ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ master ]
  schedule:
    - cron: '40 10 * * 2'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: [ 'javascript' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
        # Learn more:
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        # queries: ./path/to/local/query, your-org/your-repo/queries@main

    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v3

    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 https://git.io/JvXDl

    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
    #    and modify them (or add more) to build your code if your project
    #    uses a compiled language

    #- run: |
    #   make bootstrap
    #   make release

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3


================================================
FILE: .github/workflows/nodejs.yml
================================================
name: build

on:
  push:
   branches:
    - '*'
   tags:
    - '*'
  pull_request:
   branches:
   - master

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.x, 20.x]
    steps:
    - name: Initialize Energy Estimation
      uses: green-coding-berlin/eco-ci-energy-estimation@v1
      with:
        task: start-measurement
    - name: "Checkout repository"
      uses: actions/checkout@v4
    - name: Checkout Repo Measurement
      uses: green-coding-berlin/eco-ci-energy-estimation@v1
      with:
        task: get-measurement
        label: 'repository checkout'
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
    - name: Npm install
      run: npm ci
    - name: Npm build
      run: npm run build --if-present
    - name: Checkout Repo Measurement
      uses: green-coding-berlin/eco-ci-energy-estimation@v1
      with:
        task: get-measurement
        label: 'Npm activities'
    - name: Show Energy Results
      uses: green-coding-berlin/eco-ci-energy-estimation@v1
      with:
        task: display-results


================================================
FILE: .gitignore
================================================
__tests__/runner/*
.vscode
node_modules
lib
.idea


================================================
FILE: .prettierignore
================================================
dist/
lib/
node_modules/


================================================
FILE: .prettierrc.json
================================================
{
    "printWidth": 80,
    "tabWidth": 2,
    "useTabs": false,
    "semi": false,
    "singleQuote": true,
    "trailingComma": "none",
    "bracketSpacing": true,
    "arrowParens": "avoid"
}


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
 advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
 address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
 professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at akshay.iyyadurai.balasundaram@sap.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to CLA Assistant

You want to contribute to CLA Assistant? Welcome! Please read this document to understand what you can do:
 * [Help Others](#help-others)
 * [Analyze Issues](#analyze-issues)
 * [Report an Issue](#report-an-issue)
 * [Contribute Code](#contribute-code)

## Help Others

You can help CLA Assistant by helping others who use it and need support.

## Analyze Issues

Analyzing issue reports can be a lot of effort. Any help is welcome!
Go to [the GitHub issue tracker](https://github.com/cla-assistant/cla-assistant/issues?state=open) and find an open issue which needs additional work or a bugfix (e.g. issues labeled with "help wanted" or "bug").

Additional work could include any further information, or a gist, or it might be a hint that helps understanding the issue. Maybe you can even find and [contribute](#contribute-code) a bugfix?

## Report an Issue

If you find a bug - behavior of CLA Assistant code contradicting your expectation - you are welcome to report it.
We can only handle well-reported, actual bugs, so please follow the guidelines below.

Once you have familiarized with the guidelines, you can go to the [GitHub issue tracker for CLA Assistant](https://github.com/cla-assistant/cla-assistant/issues/new) to report the issue.

### Quick Checklist for Bug Reports

Issue report checklist:
 * Real, current bug
 * No duplicate
 * Reproducible
 * Good summary
 * Well-documented
 * Minimal example
 * Use the [template](ISSUE_TEMPLATE.md)


### Issue handling process

When an issue is reported, a committer will look at it and either confirm it as a real issue, close it if it is not an issue, or ask for more details.

An issue that is about a real bug is closed as soon as the fix is committed.


### Reporting Security Issues

If you find a security issue, please act responsibly and report it not in the public issue tracker, but directly to us, so we can fix it before it can be exploited.
Please send the related information to secure@sap.com using [PGP for e-mail encryption](https://global.sap.com/pc/security/keyblock.txt).
Also refer to the general [SAP security information page](https://www.sap.com/corporate/en/company/security.html).


### Usage of Labels

GitHub offers labels to categorize issues. We defined the following labels so far:

Labels for issue categories:
 * bug: this issue is a bug in the code
 * feature: this issue is a request for a new functionality or an enhancement request
 * design: this issue relates to the UI or UX design of the tool

Status of open issues:
 * help wanted: the feature request is approved and you are invited to contribute

Status/resolution of closed issues:
 * wontfix: while acknowledged to be an issue, a fix cannot or will not be provided

The labels can only be set and modified by committers.


### Issue Reporting Disclaimer

We want to improve the quality of CLA Assistant and good bug reports are welcome! But our capacity is limited, thus we reserve the right to close or to not process insufficient bug reports in favor of those which are very cleanly documented and easy to reproduce. Even though we would like to solve each well-documented issue, there is always the chance that it will not happen - remember: CLA Assistant is Open Source and comes without warranty.

Bug report analysis support is very welcome! (e.g. pre-analysis or proposing solutions)


## Contribute Code

You are welcome to contribute code to CLA Assistant in order to fix bugs or to implement new features.

There are three important things to know:

1.  You must be aware that you need to submit [Developer Certificate of Origin](https://developercertificate.org/) in order for your contribution to be accepted. This is common practice in all major Open Source projects.
2.  There are **several requirements regarding code style, quality, and product standards** which need to be met (we also have to follow them). The respective section below gives more details on the coding guidelines.
3.  **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The code must fit the overall direction of CLA Assistant and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the feature you plan to implement (make it clear you intend to contribute).

## Developer Certificate of Origin (DCO)

Due to legal reasons, contributors will be asked to accept a DCO before they submit the first pull request to this projects, this happens in an automated fashion during the submission process. SAP uses [the standard DCO text of the Linux Foundation](https://developercertificate.org/).

### Contribution Content Guidelines

These are some of the rules we try to follow:

-   Apply a clean coding style adapted to the surrounding code, even though we are aware the existing code is not fully clean
-   Use (4)spaces for indentation (except if the modified file consistently uses tabs)
-   Use variable naming conventions like in the other files you are seeing (camelcase)
-   No console.log() - use logging service
-   Run the ESLint code check and make it succeed
-   Comment your code where it gets non-trivial
-   Keep an eye on performance and memory consumption, properly destroy objects when not used anymore
-   Write a unit test
-   Do not do any incompatible changes, especially do not modify the name or behavior of public API methods or properties

### How to contribute - the Process

1.  Make sure the change would be welcome (e.g. a bugfix or a useful feature); best do so by proposing it in a GitHub issue
2.  Create a branch forking the cla-assistant repository and do your change
3.  Commit and push your changes on that branch
4.  In the commit message
 - Describe the problem you fix with this change.
 - Describe the effect that this change has from a user's point of view. App crashes and lockups are pretty convincing for example, but not all bugs are that obvious and should be mentioned in the text.
 - Describe the technical details of what you changed. It is important to describe the change in a most understandable way so the reviewer is able to verify that the code is behaving as you intend it to.
5.  If your change fixes an issue reported at GitHub, add the following line to the commit message:
    - ```Fixes #(issueNumber)```
    - Do NOT add a colon after "Fixes" - this prevents automatic closing.
6.  Create a Pull Request
7.  Follow the link posted by the CLA assistant to your pull request and accept it, as described in detail above.
8.  Wait for our code review and approval, possibly enhancing your change on request
    -   Note that the CLA Assistant developers also have their regular duties, so depending on the required effort for reviewing, testing and clarification this may take a while

9.  Once the change has been approved we will inform you in a comment
10.  We will close the pull request, feel free to delete the now obsolete branch


================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License.

Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License.

Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution.

You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

You must give any other recipients of the Work or Derivative Works a copy of this License; and
You must cause any modified files to carry prominent notices stating that You changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions.

Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks.

This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty.

Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability.

In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability.

While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

   Copyright 2020 SAP SE

   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.


================================================
FILE: README.md
================================================
![build](https://github.com/cla-assistant/github-action/workflows/build/badge.svg)


> [!IMPORTANT]
> **This repository is no longer actively maintained.** I no longer have the bandwidth to maintain this project. The repository has been archived and is now read-only. 
>
> You are welcome to **fork this repository** and continue development independently. All existing releases remain functional. Thank you to all contributors and users for your support over the years.

# Handling CLAs and DCOs via GitHub Action

Streamline your workflow and let this GitHub Action (a lite version of [CLA Assistant](https://github.com/cla-assistant/cla-assistant)) handle the legal side of contributions to a repository for you. CLA assistant GitHub action enables contributors to sign CLAs from within a pull request. With this GitHub Action we could get rid of the need for a centrally managed database by **storing the contributor's signature data** in a decentralized way - **in the same repository's file system** or **in a remote repository** which can be even a private repository.

### Features
1. decentralized data storage
1. fully integrated within github environment
1. no User Interface is required
1. contributors can sign the CLA or DCO by just posting a Pull Request comment
1. signatures will be stored in a file inside the repository or in a remote repository
1. signatures can also be stored inside a private repository
1. versioning of signatures

## Configure Contributor License Agreement within two minutes

#### 1. Add the following Workflow File to your repository in this path`.github/workflows/cla.yml`

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

# explicitly configure permissions, in case your GITHUB_TOKEN workflow permissions are set to read-only in repository settings
permissions:
  actions: write
  contents: write # this can be 'read' if the signatures are in remote repository
  pull-requests: write
  statuses: write

jobs:
  CLAAssistant:
    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: contributor-assistant/github-action@v2.6.1
        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
          # This token is required only if you have configured to store the signatures in a remote repository/organization
          # PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
        with:
          path-to-signatures: 'signatures/version1/cla.json'
          path-to-document: 'https://github.com/cla-assistant/github-action/blob/master/SAPCLA.md' # e.g. a CLA or a DCO document
          # branch should not be protected
          branch: 'main'
          allowlist: user1,bot*

         # the followings are the optional inputs - If the optional inputs are not given, then default values will be taken
          #remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
          #remote-repository-name: enter the  remote repository name where the signatures should be stored (Default is storing the signatures in the same repository)
          #create-file-commit-message: 'For example: Creating file for storing CLA Signatures'
          #signed-commit-message: 'For example: $contributorName has signed the CLA in $owner/$repo#$pullRequestNo'
          #custom-notsigned-prcomment: 'pull request comment with Introductory message to ask new contributors to sign'
          #custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
          #custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.'
          #lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
          #use-dco-flag: true - If you are using DCO instead of CLA

```

##### Demo for step 1

![add-cla-file](https://github.com/cla-assistant/github-action/blob/master/images/adding-clafile.gif?raw=true)

#### 2. Pull Request event triggers CLA Workflow

CLA action workflow will be triggered on all Pull Request `opened, synchronize, closed`. This workflow will always run in the base repository and that's why we are making use of the [pull_request_target](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request_target) event.
<br/> When the CLA workflow is triggered on pull request `closed` event, it will lock the Pull Request conversation after the Pull Request merge so that the contributors cannot modify or delete the signatures (Pull Request comment) later. This feature is optional.

#### 3. Signing the CLA

CLA workflow creates a comment on Pull Request asking contributors who have not signed  CLA to sign and also fails the pull request status check with a `failure`. The contributors are requested to sign the CLA within the pull request by copy and pasting **"I have read the CLA Document and I hereby sign the CLA"** as a Pull Request comment like below.
If the contributor has already signed the CLA, then the PR status will pass with `success`. <br/>

##### Demo for step 2 and 3

![signature-process](https://github.com/cla-assistant/github-action/blob/master/images/signature-process.gif?raw=true)

<br/>

#### 4. Signatures stored in a JSON file

After the contributor signed a CLA, the contributor's signature with metadata will be stored in a JSON file inside the repository and you can specify the custom path to this file with `path-to-signatures` input in the workflow. <br/> The default path is `path-to-signatures: 'signatures/version1/cla.json'`.

The signature can be also stored in a remote repository which can be done by enabling the optional inputs `remote-organization-name`: `<your org name>`
and `remote-repository-name`: `<your repo name>` in your CLA workflow file.

**NOTE:** You do not need to create this file manually. Our workflow will create the signature file if it does not already exist. Manually creating this file will cause the workflow to fail.

##### Demo for step 4

![signature-storage-file](https://github.com/cla-assistant/github-action/blob/master/images/signature-storage-file.gif?raw=true)

#### 5. Users and bots in allowlist

If a GitHub username is included in the allowlist, they will not be required to sign a CLA. You can make use of this feature If you don't want your colleagues working in the same team/organisation to sign a CLA. And also, since there's no way for bot users (such as Dependabot or Greenkeeper) to sign a CLA, you may want to add them in `allowlist`. You can do so by adding their names in a comma separated string to the `allowlist` input in the CLA  workflow file(in this case `dependabot[bot],greenkeeper[bot]`). You can also use wildcard symbol in case you want to allow all bot users something like `bot*`.

##### Demo for step 5

![allowlist](https://github.com/cla-assistant/github-action/blob/master/images/allowlist.gif?raw=true)

#### 6. Adding Personal Access Token as a Secret

You have to create a [Repository Secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository) with the name `PERSONAL_ACCESS_TOKEN`.
This PAT should have repo scope and is only required if you have configured to store the signatures in a remote repository/organization.

##### Demo for step 6

![personal-access-token](https://github.com/cla-assistant/github-action/blob/master/images/personal-access-token.gif?raw=true)

### Environmental Variables:


| Name                  | Requirement | Description |
| --------------------- | ----------- | ----------- |
| `GITHUB_TOKEN`        | _required_ | Usage: `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}`,  CLA Action uses this in-built GitHub token to make the API calls for interacting with GitHub. It is built into Github Actions and does not need to be manually specified in your secrets store. [More Info](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token)|
| `PERSONAL_ACCESS_TOKEN`        | _required_ | Usage: `PERSONAL_ACCESS_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN}}`, you have to create a [Personal Access Token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) with `repo scope` and store in the repository's [secrets](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets). |

### Inputs Description:

| Name                  | Requirement | Description | Example |
| --------------------- | ----------- | ----------- | ------- |
| `path-to-document`     | _required_ |  provide full URL `https://<clafile>` to the document which shall be signed by the contributor(s)  It can be any file e.g. inside the repository or it can be a gist. | https://github.com/cla-assistant/github-action/blob/master/SAPCLA.md |
| `path-to-signatures`       | _optional_ |  Path to the JSON file where  all the signatures of the contributors will be stored inside the repository. | signatures/version1/cla.json |
| `branch`   | _optional_ |  Branch in which all the signatures of the contributors will be stored and Default branch is `master`.  | master |
| `allowlist`   | _optional_ | You can specify users and bots to be [added in allowlist](https://github.com/cla-assistant/github-action#5-users-and-bots-in-allowlist).  | user1,user2,bot* |
| `remote-repository-name`   | _optional_ | provide the remote repository name where all the signatures should be stored . | remote repository name |
| `remote-organization-name`   | _optional_ | provide the remote organization name where all the signatures should be stored. | remote organization name |
| `create-file-commit-message`   | _optional_ |Commit message when a new CLA file is created. | Creating file for storing CLA Signatures. |
| `signed-commit-message`   | _optional_ | Commit message when a new contributor signs the CLA in a Pull Request. |  $contributorName has signed the CLA in $pullRequestNo |
| `custom-notsigned-prcomment`   | _optional_ | Introductory Pull Request comment to ask new contributors to sign. | Thank you for your contribution and please kindly read and sign our $pathToCLADocument |
| `custom-pr-sign-comment`   | _optional_ | The signature to be committed in order to sign the CLA. | I have read the Developer Terms Document and I hereby accept the Terms |
| `custom-allsigned-prcomment`   | _optional_ | pull request comment when everyone has signed | All Contributors have signed the CLA. |
| `lock-pullrequest-aftermerge`   | _optional_ | Boolean input for locking the pull request after merging. Default is set to `true`.  It is highly recommended to lock the Pull Request after merging so that the Contributors won't be able to revoke their signature comments after merge | false |
| `suggest-recheck`   | _optional_ | Boolean input for indicating if the action's comment should suggest that users comment `recheck`. Default is set to `true`. | false |

## Contributors

<!-- readme: collaborators,contributors -start -->
<table>
<tr>
    <td align="center">
        <a href="https://github.com/matbos">
            <img src="https://avatars.githubusercontent.com/u/1948188?v=4" width="100;" alt="matbos"/>
            <br />
            <sub><b>Mateusz Boś</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/michael-spengler">
            <img src="https://avatars.githubusercontent.com/u/43786652?v=4" width="100;" alt="michael-spengler"/>
            <br />
            <sub><b>Michael Spengler</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/ibakshay">
            <img src="https://avatars.githubusercontent.com/u/33329946?v=4" width="100;" alt="ibakshay"/>
            <br />
            <sub><b>Akshay Iyyadurai Balasundaram</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/AnandChowdhary">
            <img src="https://avatars.githubusercontent.com/u/2841780?v=4" width="100;" alt="AnandChowdhary"/>
            <br />
            <sub><b>Anand Chowdhary</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/kingthorin">
            <img src="https://avatars.githubusercontent.com/u/7570458?v=4" width="100;" alt="kingthorin"/>
            <br />
            <sub><b>Rick M</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/Writhe">
            <img src="https://avatars.githubusercontent.com/u/2022097?v=4" width="100;" alt="Writhe"/>
            <br />
            <sub><b>Filip Moroz</b></sub>
        </a>
    </td></tr>
<tr>
    <td align="center">
        <a href="https://github.com/mmv08">
            <img src="https://avatars.githubusercontent.com/u/16622558?v=4" width="100;" alt="mmv08"/>
            <br />
            <sub><b>Mikhail</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/manifestinteractive">
            <img src="https://avatars.githubusercontent.com/u/508411?v=4" width="100;" alt="manifestinteractive"/>
            <br />
            <sub><b>Peter Schmalfeldt</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/mattrosno">
            <img src="https://avatars.githubusercontent.com/u/1691245?v=4" width="100;" alt="mattrosno"/>
            <br />
            <sub><b>Matt Rosno</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/Or-Geva">
            <img src="https://avatars.githubusercontent.com/u/9606235?v=4" width="100;" alt="Or-Geva"/>
            <br />
            <sub><b>Or Geva</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/pellared">
            <img src="https://avatars.githubusercontent.com/u/5067549?v=4" width="100;" alt="pellared"/>
            <br />
            <sub><b>Robert Pająk</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/ScottBrenner">
            <img src="https://avatars.githubusercontent.com/u/416477?v=4" width="100;" alt="ScottBrenner"/>
            <br />
            <sub><b>Scott Brenner</b></sub>
        </a>
    </td></tr>
<tr>
    <td align="center">
        <a href="https://github.com/silviogutierrez">
            <img src="https://avatars.githubusercontent.com/u/92824?v=4" width="100;" alt="silviogutierrez"/>
            <br />
            <sub><b>Silvio</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/azzamsa">
            <img src="https://avatars.githubusercontent.com/u/17734314?v=4" width="100;" alt="azzamsa"/>
            <br />
            <sub><b>Azzam S.A</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/Tropicao">
            <img src="https://avatars.githubusercontent.com/u/4692087?v=4" width="100;" alt="Tropicao"/>
            <br />
            <sub><b>Alexis Lothoré</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/alohr51">
            <img src="https://avatars.githubusercontent.com/u/3623618?v=4" width="100;" alt="alohr51"/>
            <br />
            <sub><b>Andrew Lohr</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/aymanbagabas">
            <img src="https://avatars.githubusercontent.com/u/3187948?v=4" width="100;" alt="aymanbagabas"/>
            <br />
            <sub><b>Ayman Bagabas</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/fishcharlie">
            <img src="https://avatars.githubusercontent.com/u/860375?v=4" width="100;" alt="fishcharlie"/>
            <br />
            <sub><b>Charlie Fish</b></sub>
        </a>
    </td></tr>
<tr>
    <td align="center">
        <a href="https://github.com/darrellwarde">
            <img src="https://avatars.githubusercontent.com/u/8117355?v=4" width="100;" alt="darrellwarde"/>
            <br />
            <sub><b>Darrell Warde</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/Holzhaus">
            <img src="https://avatars.githubusercontent.com/u/1834516?v=4" width="100;" alt="Holzhaus"/>
            <br />
            <sub><b>Jan Holthuis</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/nwalters512">
            <img src="https://avatars.githubusercontent.com/u/1476544?v=4" width="100;" alt="nwalters512"/>
            <br />
            <sub><b>Nathan Walters</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/rokups">
            <img src="https://avatars.githubusercontent.com/u/19151258?v=4" width="100;" alt="rokups"/>
            <br />
            <sub><b>Rokas Kupstys</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/shunkakinoki">
            <img src="https://avatars.githubusercontent.com/u/39187513?v=4" width="100;" alt="shunkakinoki"/>
            <br />
            <sub><b>Shun Kakinoki</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/simonmeggle">
            <img src="https://avatars.githubusercontent.com/u/1897410?v=4" width="100;" alt="simonmeggle"/>
            <br />
            <sub><b>Simon Meggle</b></sub>
        </a>
    </td></tr>
<tr>
    <td align="center">
        <a href="https://github.com/t8">
            <img src="https://avatars.githubusercontent.com/u/20846869?v=4" width="100;" alt="t8"/>
            <br />
            <sub><b>Tate Berenbaum</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/Krinkle">
            <img src="https://avatars.githubusercontent.com/u/156867?v=4" width="100;" alt="Krinkle"/>
            <br />
            <sub><b>Timo Tijhof</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/AndrewGable">
            <img src="https://avatars.githubusercontent.com/u/2838819?v=4" width="100;" alt="AndrewGable"/>
            <br />
            <sub><b>Andrew Gable</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/knanao">
            <img src="https://avatars.githubusercontent.com/u/50069775?v=4" width="100;" alt="knanao"/>
            <br />
            <sub><b>Knanao</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/tada5hi">
            <img src="https://avatars.githubusercontent.com/u/13162758?v=4" width="100;" alt="tada5hi"/>
            <br />
            <sub><b>Peter</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/wh201906">
            <img src="https://avatars.githubusercontent.com/u/62299611?v=4" width="100;" alt="wh201906"/>
            <br />
            <sub><b>Self Not Found</b></sub>
        </a>
    </td></tr>
<tr>
    <td align="center">
        <a href="https://github.com/woxiwangshunlibiye">
            <img src="https://avatars.githubusercontent.com/u/106640041?v=4" width="100;" alt="woxiwangshunlibiye"/>
            <br />
            <sub><b>Woyaoshunlibiye </b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/yahavi">
            <img src="https://avatars.githubusercontent.com/u/11367982?v=4" width="100;" alt="yahavi"/>
            <br />
            <sub><b>Yahav Itzhak</b></sub>
        </a>
    </td></tr>
</table>
<!-- readme: collaborators,contributors -end -->

## License

Contributor License Agreement assistant

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.


================================================
FILE: SECURITY.md
================================================
# Security Vulnerabilities

The CLA Assistant is built with security and data privacy in mind to ensure your data is safe.

## Reporting

We are grateful for security researchers and users reporting a vulnerability to us, first. To ensure that your request is handled in a timely manner and non-disclosure of vulnerabilities can be assured, please follow the below guideline.

**Please do not report security vulnerabilities directly on GitHub. GitHub Issues can be publicly seen and therefore would result in a direct disclosure.**

For reporting a vulnerability, please use the Vulnerability Report Form for Security Researchers on [SAP Trust Center](https://www.sap.com/about/trust-center/security/incident-management.html).
Please address questions about data privacy, security concepts, and other media requests using the Vulnerability Report Form for Security Researchers on SAP Trust Center.



## Disclosure Handling

SAP is committed to timely review and respond to your request. The resolution of code defects will be handled by a dedicated group of security experts and prepared in a private GitHub repository. The project will inform the public about resolved security vulnerabilities via GitHub Security Advisories.


================================================
FILE: __tests__/main.test.ts
================================================
import * as core from '@actions/core'
import * as github from '@actions/github'
import { context } from '@actions/github'
import { getclas } from '../src/checkcla'
import { lockPullRequest } from '../src/pullRequestLock'
import { run } from '../src/main'
import { mocked } from 'ts-jest/utils'

jest.mock('@actions/core')
jest.mock('@actions/github')
jest.mock('../src/pullRequestLock')
jest.mock('../src/checkcla')
const mockedGetClas = mocked(getclas)
const mockedLockPullRequest = mocked(lockPullRequest)


describe('Pull request event', () => {

  beforeEach(async () => {
    // @ts-ignore
    github.context = {
      eventName: 'pull_request',
      ref: 'refs/pull/232/merge',
      workflow: 'CLA Assistant',
      action: 'ibakshaygithub-action-1',
      actor: 'ibakshay',
      payload: {
        action: 'closed',
        number: '1',
        pull_request: {
          number: 1,
          title: 'test',
          user: {
            login: 'ibakshay',
          },
        },
        repository: {
          name: 'auto-assign',
          owner: {
            login: 'ibakshay',
          },
        },
      },
      repo: {
        owner: 'ibakshay',
        repo: 'auto-assign',
      },
      issue: {
        owner: 'kentaro-m',
        repo: 'auto-assign',
        number: 1,
      },
      sha: ''
    }

  }
  )

  test('the lockPullRequest  method should be called if there is a pull request merge/closed', async () => {

    await run()
    expect(mockedLockPullRequest).toHaveBeenCalled()


  })

  test('the checkcla  method should not called if there is a pull request merge/closed', async () => {

    await run()
    expect(mockedGetClas).not.toHaveBeenCalled()
  })

  test('the lockPullRequest  method should not be called if there is a pull request opened', async () => {

    github.context.payload.action = 'opened'
    await run()

    expect(mockedLockPullRequest).not.toHaveBeenCalled()

  })

  test('the checkcla  method should  be called if there is a pull request opened', async () => {

    github.context.payload.action = 'opened'
    await run()
    expect(mockedGetClas).toHaveBeenCalled()

  })

  test('the lockPullRequest  method should not be called if there is a pull request sync', async () => {

    github.context.payload.action = 'synchronize'

    await run()

    expect(mockedLockPullRequest).not.toHaveBeenCalled()

  })

  test('the checkcla  method should  be called if there is a pull request sync', async () => {
    github.context.payload.action = 'synchronize'
    await run()
    expect(mockedGetClas).toHaveBeenCalled()

  })


})

================================================
FILE: __tests__/pullRequestLock.test.ts
================================================
import * as core from '@actions/core'
import * as github from '@actions/github'
import { context } from '@actions/github'
import { getclas } from '../src/checkcla'
import { lockPullRequest } from '../src/pullRequestLock'
import { run } from '../src/main'
import { mocked } from 'ts-jest/utils'

jest.mock('@actions/core')
jest.mock('@actions/github')

//const mockedLockPullRequest = mocked(lockPullRequest)

================================================
FILE: action.yml
================================================
name: "CLA assistant lite"
description: "An action to handle the Contributor License Agreement (CLA) and Developer Certificate of Orgin (DCO)"
author: "SAP"
branding:
  icon: "award"
  color: blue
inputs:
  path-to-signatures:
    description: "Give a path for storing CLAs in a json file "
    default: "./signatures/cla.json"
  branch:
    description: "provide a branch where all the CLAs are stored"
    default: "master"
  allowlist:
    description: "users in the allow list don't have to sign the CLA document"
    default: ""
  remote-repository-name:
    description: "provide the remote repository name where all the signatures should be stored"
  remote-organization-name:
    description: "provide the remote organization name where all the signatures should be stored"
  path-to-document:
    description: "Fully qualified web link to the document - example: https://github.com/cla-assistant/github-action/blob/master/SAPCLA.md"
  signed-commit-message:
    description: "Commit message when a new contributor signs the CLA in a PR"
  signed-empty-commit-message:
    description: "Commit message when a new contributor signs the CLA (empty)"
  create-file-commit-message:
    description: "Commit message when a new file is created"
  custom-notsigned-prcomment:
    description: "Introductory message to ask new contributors to sign"
  custom-pr-sign-comment:
    description: "The signature to be committed in order to sign the CLA."
  custom-allsigned-prcomment:
    description: "pull request comment when everyone has signed, defaults to **CLA Assistant Lite** All Contributors have signed the CLA."
  use-dco-flag:
    description: "Set this to true if you want to use a dco instead of a cla"
    default: "false"
  lock-pullrequest-aftermerge:
    description: "Will lock the pull request after merge so that the signature the contributors cannot revoke their signature comments after merge"
    default: "true"
  suggest-recheck:
    description: "Controls whether or not the action's comment should suggest that users comment `recheck`."
    default: "true"
runs:
  using: "node20"
  main: 'dist/index.js'


================================================
FILE: dist/index.js
================================================
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 3661:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.checkAllowList = void 0;
const _ = __importStar(__nccwpck_require__(250));
const input = __importStar(__nccwpck_require__(3611));
function isUserNotInAllowList(committer) {
    const allowListPatterns = input.getAllowListItem().split(',');
    return allowListPatterns.filter(function (pattern) {
        pattern = pattern.trim();
        if (pattern.includes('*')) {
            const regex = _.escapeRegExp(pattern).split('\\*').join('.*');
            return new RegExp(regex).test(committer);
        }
        return pattern === committer;
    }).length > 0;
}
function checkAllowList(committers) {
    const committersAfterAllowListCheck = committers.filter(committer => committer && !(isUserNotInAllowList !== undefined && isUserNotInAllowList(committer.name)));
    return committersAfterAllowListCheck;
}
exports.checkAllowList = checkAllowList;


/***/ }),

/***/ 5157:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const octokit_1 = __nccwpck_require__(3258);
const github_1 = __nccwpck_require__(5438);
function getCommitters() {
    return __awaiter(this, void 0, void 0, function* () {
        try {
            let committers = [];
            let filteredCommitters = [];
            let response = yield octokit_1.octokit.graphql(`
        query($owner:String! $name:String! $number:Int! $cursor:String!){
            repository(owner: $owner, name: $name) {
            pullRequest(number: $number) {
                commits(first: 100, after: $cursor) {
                    totalCount
                    edges {
                        node {
                            commit {
                                author {
                                    email
                                    name
                                    user {
                                        id
                                        databaseId
                                        login
                                    }
                                }
                                committer {
                                    name
                                    user {
                                        id
                                        databaseId
                                        login
                                    }
                                }
                            }
                        }
                        cursor
                    }
                    pageInfo {
                        endCursor
                        hasNextPage
                    }
                }
            }
        }
    }`.replace(/ /g, ''), {
                owner: github_1.context.repo.owner,
                name: github_1.context.repo.repo,
                number: github_1.context.issue.number,
                cursor: ''
            });
            response.repository.pullRequest.commits.edges.forEach(edge => {
                const committer = extractUserFromCommit(edge.node.commit);
                let user = {
                    name: committer.login || committer.name,
                    id: committer.databaseId || '',
                    pullRequestNo: github_1.context.issue.number
                };
                if (committers.length === 0 || committers.map((c) => {
                    return c.name;
                }).indexOf(user.name) < 0) {
                    committers.push(user);
                }
            });
            filteredCommitters = committers.filter((committer) => {
                return committer.id !== 41898282;
            });
            return filteredCommitters;
        }
        catch (e) {
            throw new Error(`graphql call to get the committers details failed: ${e}`);
        }
    });
}
exports["default"] = getCommitters;
const extractUserFromCommit = (commit) => commit.author.user || commit.committer.user || commit.author || commit.committer;


/***/ }),

/***/ 3109:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.run = void 0;
const github_1 = __nccwpck_require__(5438);
const setupClaCheck_1 = __nccwpck_require__(8275);
const pullRequestLock_1 = __nccwpck_require__(9985);
const core = __importStar(__nccwpck_require__(2186));
const input = __importStar(__nccwpck_require__(3611));
function run() {
    return __awaiter(this, void 0, void 0, function* () {
        try {
            core.info(`CLA Assistant GitHub Action bot has started the process`);
            /*
             * using a `string` true or false purposely as github action input cannot have a boolean value
             */
            if (github_1.context.payload.action === 'closed' &&
                input.lockPullRequestAfterMerge() == 'true') {
                return (0, pullRequestLock_1.lockPullRequest)();
            }
            else {
                yield (0, setupClaCheck_1.setupClaCheck)();
            }
        }
        catch (error) {
            if (error instanceof Error)
                core.setFailed(error.message);
        }
    });
}
exports.run = run;
run();


/***/ }),

/***/ 3258:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.isPersonalAccessTokenPresent = exports.getPATOctokit = exports.getDefaultOctokitClient = exports.octokit = void 0;
const github_1 = __nccwpck_require__(5438);
const core = __importStar(__nccwpck_require__(2186));
const githubActionsDefaultToken = process.env.GITHUB_TOKEN;
const personalAccessToken = process.env.PERSONAL_ACCESS_TOKEN;
exports.octokit = (0, github_1.getOctokit)(githubActionsDefaultToken);
function getDefaultOctokitClient() {
    return (0, github_1.getOctokit)(githubActionsDefaultToken);
}
exports.getDefaultOctokitClient = getDefaultOctokitClient;
function getPATOctokit() {
    if (!isPersonalAccessTokenPresent()) {
        core.setFailed(`Please add a personal access token as an environment variable for writing signatures in a remote repository/organization as mentioned in the README.md file`);
    }
    return (0, github_1.getOctokit)(personalAccessToken);
}
exports.getPATOctokit = getPATOctokit;
function isPersonalAccessTokenPresent() {
    return personalAccessToken !== undefined && personalAccessToken !== '';
}
exports.isPersonalAccessTokenPresent = isPersonalAccessTokenPresent;


/***/ }),

/***/ 5802:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.updateFile = exports.createFile = exports.getFileContent = void 0;
const github_1 = __nccwpck_require__(5438);
const octokit_1 = __nccwpck_require__(3258);
const input = __importStar(__nccwpck_require__(3611));
function getFileContent() {
    return __awaiter(this, void 0, void 0, function* () {
        const octokitInstance = isRemoteRepoOrOrgConfigured() ? (0, octokit_1.getPATOctokit)() : (0, octokit_1.getDefaultOctokitClient)();
        const result = yield octokitInstance.repos.getContent({
            owner: input.getRemoteOrgName() || github_1.context.repo.owner,
            repo: input.getRemoteRepoName() || github_1.context.repo.repo,
            path: input.getPathToSignatures(),
            ref: input.getBranch()
        });
        return result;
    });
}
exports.getFileContent = getFileContent;
function createFile(contentBinary) {
    return __awaiter(this, void 0, void 0, function* () {
        const octokitInstance = isRemoteRepoOrOrgConfigured() ? (0, octokit_1.getPATOctokit)() : (0, octokit_1.getDefaultOctokitClient)();
        return octokitInstance.repos.createOrUpdateFileContents({
            owner: input.getRemoteOrgName() || github_1.context.repo.owner,
            repo: input.getRemoteRepoName() || github_1.context.repo.repo,
            path: input.getPathToSignatures(),
            message: input.getCreateFileCommitMessage() ||
                'Creating file for storing CLA Signatures',
            content: contentBinary,
            branch: input.getBranch()
        });
    });
}
exports.createFile = createFile;
function updateFile(sha, claFileContent, reactedCommitters) {
    return __awaiter(this, void 0, void 0, function* () {
        const octokitInstance = isRemoteRepoOrOrgConfigured() ? (0, octokit_1.getPATOctokit)() : (0, octokit_1.getDefaultOctokitClient)();
        const pullRequestNo = github_1.context.issue.number;
        const owner = github_1.context.issue.owner;
        const repo = github_1.context.issue.repo;
        claFileContent === null || claFileContent === void 0 ? void 0 : claFileContent.signedContributors.push(...reactedCommitters.newSigned);
        let contentString = JSON.stringify(claFileContent, null, 2);
        let contentBinary = Buffer.from(contentString).toString('base64');
        yield octokitInstance.repos.createOrUpdateFileContents({
            owner: input.getRemoteOrgName() || github_1.context.repo.owner,
            repo: input.getRemoteRepoName() || github_1.context.repo.repo,
            path: input.getPathToSignatures(),
            sha,
            message: input.getSignedCommitMessage()
                ? input
                    .getSignedCommitMessage()
                    .replace('$contributorName', github_1.context.actor)
                    // .replace('$pullRequestNo', pullRequestNo.toString())
                    .replace('$owner', owner)
                    .replace('$repo', repo)
                : `@${github_1.context.actor} has signed the CLA in ${owner}/${repo}#${pullRequestNo}`,
            content: contentBinary,
            branch: input.getBranch()
        });
    });
}
exports.updateFile = updateFile;
function isRemoteRepoOrOrgConfigured() {
    let isRemoteRepoOrOrgConfigured = false;
    if ((input === null || input === void 0 ? void 0 : input.getRemoteRepoName()) || input.getRemoteOrgName()) {
        isRemoteRepoOrOrgConfigured = true;
        return isRemoteRepoOrOrgConfigured;
    }
    return isRemoteRepoOrOrgConfigured;
}


/***/ }),

/***/ 4766:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reRunLastWorkFlowIfRequired = void 0;
const github_1 = __nccwpck_require__(5438);
const octokit_1 = __nccwpck_require__(3258);
const core = __importStar(__nccwpck_require__(2186));
// Note: why this  re-run of the last failed CLA workflow status check is explained this issue https://github.com/cla-assistant/github-action/issues/39
function reRunLastWorkFlowIfRequired() {
    return __awaiter(this, void 0, void 0, function* () {
        if (github_1.context.eventName === 'pull_request') {
            core.debug(`rerun not required for event - pull_request`);
            return;
        }
        const branch = yield getBranchOfPullRequest();
        const workflowId = yield getSelfWorkflowId();
        const runs = yield listWorkflowRunsInBranch(branch, workflowId);
        if (runs.data.total_count > 0) {
            const run = runs.data.workflow_runs[0].id;
            const isLastWorkFlowFailed = yield checkIfLastWorkFlowFailed(run);
            if (isLastWorkFlowFailed) {
                core.debug(`Rerunning build run ${run}`);
                yield reRunWorkflow(run).catch(error => core.error(`Error occurred when re-running the workflow: ${error}`));
            }
        }
    });
}
exports.reRunLastWorkFlowIfRequired = reRunLastWorkFlowIfRequired;
function getBranchOfPullRequest() {
    return __awaiter(this, void 0, void 0, function* () {
        const pullRequest = yield octokit_1.octokit.pulls.get({
            owner: github_1.context.repo.owner,
            repo: github_1.context.repo.repo,
            pull_number: github_1.context.issue.number
        });
        return pullRequest.data.head.ref;
    });
}
function getSelfWorkflowId() {
    return __awaiter(this, void 0, void 0, function* () {
        const perPage = 30;
        let hasNextPage = true;
        for (let page = 1; hasNextPage === true; page++) {
            const workflowList = yield octokit_1.octokit.actions.listRepoWorkflows({
                owner: github_1.context.repo.owner,
                repo: github_1.context.repo.repo,
                per_page: perPage,
                page
            });
            if (workflowList.data.total_count < page * perPage) {
                hasNextPage = false;
            }
            const workflow = workflowList.data.workflows.find(w => w.name == github_1.context.workflow);
            if (workflow) {
                return workflow.id;
            }
        }
        throw new Error(`Unable to locate this workflow's ID in this repository, can't trigger job..`);
    });
}
function listWorkflowRunsInBranch(branch, workflowId) {
    return __awaiter(this, void 0, void 0, function* () {
        console.debug(branch);
        const runs = yield octokit_1.octokit.actions.listWorkflowRuns({
            owner: github_1.context.repo.owner,
            repo: github_1.context.repo.repo,
            branch,
            workflow_id: workflowId,
            event: 'pull_request_target'
        });
        return runs;
    });
}
function reRunWorkflow(run) {
    return __awaiter(this, void 0, void 0, function* () {
        // Personal Access token with repo scope is required to access this api - https://github.community/t/bug-rerun-workflow-api-not-working/126742
        yield octokit_1.octokit.actions.reRunWorkflow({
            owner: github_1.context.repo.owner,
            repo: github_1.context.repo.repo,
            run_id: run
        });
    });
}
function checkIfLastWorkFlowFailed(run) {
    return __awaiter(this, void 0, void 0, function* () {
        const response = yield octokit_1.octokit.actions.getWorkflowRun({
            owner: github_1.context.repo.owner,
            repo: github_1.context.repo.repo,
            run_id: run
        });
        return response.data.conclusion == 'failure';
    });
}


/***/ }),

/***/ 3326:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const octokit_1 = __nccwpck_require__(3258);
const github_1 = __nccwpck_require__(5438);
const signatureComment_1 = __importDefault(__nccwpck_require__(1905));
const pullRequestCommentContent_1 = __nccwpck_require__(3621);
const getInputs_1 = __nccwpck_require__(3611);
function prCommentSetup(committerMap, committers) {
    return __awaiter(this, void 0, void 0, function* () {
        const signed = (committerMap === null || committerMap === void 0 ? void 0 : committerMap.notSigned) && (committerMap === null || committerMap === void 0 ? void 0 : committerMap.notSigned.length) === 0;
        try {
            const claBotComment = yield getComment();
            if (!claBotComment && !signed) {
                return createComment(signed, committerMap);
            }
            else if (claBotComment === null || claBotComment === void 0 ? void 0 : claBotComment.id) {
                if (signed) {
                    yield updateComment(signed, committerMap, claBotComment);
                }
                // reacted committers are contributors who have newly signed by posting the Pull Request comment
                const reactedCommitters = yield (0, signatureComment_1.default)(committerMap, committers);
                if (reactedCommitters === null || reactedCommitters === void 0 ? void 0 : reactedCommitters.onlyCommitters) {
                    reactedCommitters.allSignedFlag = prepareAllSignedCommitters(committerMap, reactedCommitters.onlyCommitters, committers);
                }
                committerMap = prepareCommiterMap(committerMap, reactedCommitters);
                yield updateComment(reactedCommitters.allSignedFlag, committerMap, claBotComment);
                return reactedCommitters;
            }
        }
        catch (error) {
            throw new Error(`Error occured when creating or editing the comments of the pull request: ${error.message}`);
        }
    });
}
exports["default"] = prCommentSetup;
function createComment(signed, committerMap) {
    return __awaiter(this, void 0, void 0, function* () {
        yield octokit_1.octokit.issues.createComment({
            owner: github_1.context.repo.owner,
            repo: github_1.context.repo.repo,
            issue_number: github_1.context.issue.number,
            body: (0, pullRequestCommentContent_1.commentContent)(signed, committerMap)
        }).catch(error => { throw new Error(`Error occured when creating a pull request comment: ${error.message}`); });
    });
}
function updateComment(signed, committerMap, claBotComment) {
    return __awaiter(this, void 0, void 0, function* () {
        yield octokit_1.octokit.issues.updateComment({
            owner: github_1.context.repo.owner,
            repo: github_1.context.repo.repo,
            comment_id: claBotComment.id,
            body: (0, pullRequestCommentContent_1.commentContent)(signed, committerMap)
        }).catch(error => { throw new Error(`Error occured when updating the pull request comment: ${error.message}`); });
    });
}
function getComment() {
    return __awaiter(this, void 0, void 0, function* () {
        try {
            const response = yield octokit_1.octokit.issues.listComments({ owner: github_1.context.repo.owner, repo: github_1.context.repo.repo, issue_number: github_1.context.issue.number });
            //TODO: check the below regex
            // using a `string` true or false purposely as github action input cannot have a boolean value
            if ((0, getInputs_1.getUseDcoFlag)() === 'true') {
                return response.data.find(comment => comment.body.match(/.*DCO Assistant Lite bot.*/m));
            }
            else if ((0, getInputs_1.getUseDcoFlag)() === 'false') {
                return response.data.find(comment => comment.body.match(/.*CLA Assistant Lite bot.*/m));
            }
        }
        catch (error) {
            throw new Error(`Error occured when getting  all the comments of the pull request: ${error.message}`);
        }
    });
}
function prepareCommiterMap(committerMap, reactedCommitters) {
    var _a;
    (_a = committerMap.signed) === null || _a === void 0 ? void 0 : _a.push(...reactedCommitters.newSigned);
    committerMap.notSigned = committerMap.notSigned.filter(committer => !reactedCommitters.newSigned.some(reactedCommitter => committer.id === reactedCommitter.id));
    return committerMap;
}
function prepareAllSignedCommitters(committerMap, signedInPrCommitters, committers) {
    let allSignedCommitters = [];
    /*
     * 1) already signed committers in the file 2) signed committers in the PR comment
    */
    const ids = new Set(signedInPrCommitters.map(committer => committer.id));
    allSignedCommitters = [...signedInPrCommitters, ...committerMap.signed.filter(signedCommitter => !ids.has(signedCommitter.id))];
    /*
    * checking if all the unsigned committers have reacted to the PR comment (this is needed for changing the content of the PR comment to "All committers have signed the CLA")
    */
    let allSignedFlag = committers.every(committer => allSignedCommitters.some(reactedCommitter => committer.id === reactedCommitter.id));
    return allSignedFlag;
}


/***/ }),

/***/ 3621:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.commentContent = void 0;
const input = __importStar(__nccwpck_require__(3611));
const pr_sign_comment_1 = __nccwpck_require__(6718);
function commentContent(signed, committerMap) {
    // using a `string` true or false purposely as github action input cannot have a boolean value
    if (input.getUseDcoFlag() == 'true') {
        return dco(signed, committerMap);
    }
    else {
        return cla(signed, committerMap);
    }
}
exports.commentContent = commentContent;
function dco(signed, committerMap) {
    if (signed) {
        const line1 = input.getCustomAllSignedPrComment() || `All contributors have signed the DCO  ✍️ ✅`;
        const text = `${line1}<br/><sub>Posted by the ****DCO Assistant Lite bot****.</sub>`;
        return text;
    }
    let committersCount = 1;
    if (committerMap && committerMap.signed && committerMap.notSigned) {
        committersCount = committerMap.signed.length + committerMap.notSigned.length;
    }
    let you = committersCount > 1 ? `you all` : `you`;
    let lineOne = (input.getCustomNotSignedPrComment() || `<br/>Thank you for your submission, we really appreciate it. Like many open-source projects, we ask that $you sign our [Developer Certificate of Origin](${input.getPathToDocument()}) before we can accept your contribution. You can sign the DCO by just posting a Pull Request Comment same as the below format.<br/>`).replace('$you', you);
    let text = `${lineOne}
   - - -
   ${input.getCustomPrSignComment() || "I have read the DCO Document and I hereby sign the DCO"}
   - - -
   `;
    if (committersCount > 1 && committerMap && committerMap.signed && committerMap.notSigned) {
        text += `**${committerMap.signed.length}** out of **${committerMap.signed.length + committerMap.notSigned.length}** committers have signed the DCO.`;
        committerMap.signed.forEach(signedCommitter => { text += `<br/>:white_check_mark: (${signedCommitter.name})[https://github.com/${signedCommitter.name}]`; });
        committerMap.notSigned.forEach(unsignedCommitter => {
            text += `<br/>:x: @${unsignedCommitter.name}`;
        });
        text += '<br/>';
    }
    if (committerMap && committerMap.unknown && committerMap.unknown.length > 0) {
        let seem = committerMap.unknown.length > 1 ? "seem" : "seems";
        let committerNames = committerMap.unknown.map(committer => committer.name);
        text += `**${committerNames.join(", ")}** ${seem} not to be a GitHub user.`;
        text += ' You need a GitHub account to be able to sign the DCO. If you have already a GitHub account, please [add the email address used for this commit to your account](https://help.github.com/articles/why-are-my-commits-linked-to-the-wrong-user/#commits-are-not-linked-to-any-user).<br/>';
    }
    if (input.suggestRecheck() == 'true') {
        text += '<sub>You can retrigger this bot by commenting **recheck** in this Pull Request. </sub>';
    }
    text += '<sub>Posted by the ****DCO Assistant Lite bot****.</sub>';
    return text;
}
function cla(signed, committerMap) {
    if (signed) {
        const line1 = input.getCustomAllSignedPrComment() || `All contributors have signed the CLA  ✍️ ✅`;
        const text = `${line1}<br/><sub>Posted by the ****CLA Assistant Lite bot****.</sub>`;
        return text;
    }
    let committersCount = 1;
    if (committerMap && committerMap.signed && committerMap.notSigned) {
        committersCount = committerMap.signed.length + committerMap.notSigned.length;
    }
    let you = committersCount > 1 ? `you all` : `you`;
    let lineOne = (input.getCustomNotSignedPrComment() || `<br/>Thank you for your submission, we really appreciate it. Like many open-source projects, we ask that $you sign our [Contributor License Agreement](${input.getPathToDocument()}) before we can accept your contribution. You can sign the CLA by just posting a Pull Request Comment same as the below format.<br/>`).replace('$you', you);
    let text = `${lineOne}
   - - -
   ${(0, pr_sign_comment_1.getPrSignComment)()}
   - - -
   `;
    if (committersCount > 1 && committerMap && committerMap.signed && committerMap.notSigned) {
        text += `**${committerMap.signed.length}** out of **${committerMap.signed.length + committerMap.notSigned.length}** committers have signed the CLA.`;
        committerMap.signed.forEach(signedCommitter => { text += `<br/>:white_check_mark: (${signedCommitter.name})[https://github.com/${signedCommitter.name}]`; });
        committerMap.notSigned.forEach(unsignedCommitter => {
            text += `<br/>:x: @${unsignedCommitter.name}`;
        });
        text += '<br/>';
    }
    if (committerMap && committerMap.unknown && committerMap.unknown.length > 0) {
        let seem = committerMap.unknown.length > 1 ? "seem" : "seems";
        let committerNames = committerMap.unknown.map(committer => committer.name);
        text += `**${committerNames.join(", ")}** ${seem} not to be a GitHub user.`;
        text += ' You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please [add the email address used for this commit to your account](https://help.github.com/articles/why-are-my-commits-linked-to-the-wrong-user/#commits-are-not-linked-to-any-user).<br/>';
    }
    if (input.suggestRecheck() == 'true') {
        text += '<sub>You can retrigger this bot by commenting **recheck** in this Pull Request. </sub>';
    }
    text += '<sub>Posted by the **CLA Assistant Lite bot**.</sub>';
    return text;
}


/***/ }),

/***/ 9985:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.lockPullRequest = void 0;
const octokit_1 = __nccwpck_require__(3258);
const core = __importStar(__nccwpck_require__(2186));
const github_1 = __nccwpck_require__(5438);
function lockPullRequest() {
    return __awaiter(this, void 0, void 0, function* () {
        core.info('Locking the Pull Request to safe guard the Pull Request CLA Signatures');
        const pullRequestNo = github_1.context.issue.number;
        try {
            yield octokit_1.octokit.issues.lock({
                owner: github_1.context.repo.owner,
                repo: github_1.context.repo.repo,
                issue_number: pullRequestNo
            });
            core.info(`successfully locked the pull request ${pullRequestNo}`);
        }
        catch (e) {
            core.error(`failed when locking the pull request `);
        }
    });
}
exports.lockPullRequest = lockPullRequest;


/***/ }),

/***/ 1905:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const octokit_1 = __nccwpck_require__(3258);
const github_1 = __nccwpck_require__(5438);
const getInputs_1 = __nccwpck_require__(3611);
function signatureWithPRComment(committerMap, committers) {
    return __awaiter(this, void 0, void 0, function* () {
        let repoId = github_1.context.payload.repository.id;
        let prResponse = yield octokit_1.octokit.issues.listComments({
            owner: github_1.context.repo.owner,
            repo: github_1.context.repo.repo,
            issue_number: github_1.context.issue.number
        });
        let listOfPRComments = [];
        let filteredListOfPRComments = [];
        prResponse === null || prResponse === void 0 ? void 0 : prResponse.data.map((prComment) => {
            listOfPRComments.push({
                name: prComment.user.login,
                id: prComment.user.id,
                comment_id: prComment.id,
                body: prComment.body.trim().toLowerCase(),
                created_at: prComment.created_at,
                repoId: repoId,
                pullRequestNo: github_1.context.issue.number
            });
        });
        listOfPRComments.map(comment => {
            if (isCommentSignedByUser(comment.body || "", comment.name)) {
                filteredListOfPRComments.push(comment);
            }
        });
        for (var i = 0; i < filteredListOfPRComments.length; i++) {
            delete filteredListOfPRComments[i].body;
        }
        /*
        *checking if the reacted committers are not the signed committers(not in the storage file) and filtering only the unsigned committers
        */
        const newSigned = filteredListOfPRComments.filter(commentedCommitter => committerMap.notSigned.some(notSignedCommitter => commentedCommitter.id === notSignedCommitter.id));
        /*
        * checking if the commented users are only the contributors who has committed in the same PR (This is needed for the PR Comment and changing the status to success when all the contributors has reacted to the PR)
        */
        const onlyCommitters = committers.filter(committer => filteredListOfPRComments.some(commentedCommitter => committer.id == commentedCommitter.id));
        const commentedCommitterMap = {
            newSigned,
            onlyCommitters,
            allSignedFlag: false
        };
        return commentedCommitterMap;
    });
}
exports["default"] = signatureWithPRComment;
function isCommentSignedByUser(comment, commentAuthor) {
    if (commentAuthor === 'github-actions[bot]') {
        return false;
    }
    if ((0, getInputs_1.getCustomPrSignComment)() !== "") {
        return (0, getInputs_1.getCustomPrSignComment)().toLowerCase() === comment;
    }
    // using a `string` true or false purposely as github action input cannot have a boolean value
    switch ((0, getInputs_1.getUseDcoFlag)()) {
        case 'true':
            return comment.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 comment.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;
    }
}


/***/ }),

/***/ 8275:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setupClaCheck = void 0;
const core = __importStar(__nccwpck_require__(2186));
const github_1 = __nccwpck_require__(5438);
const checkAllowList_1 = __nccwpck_require__(3661);
const graphql_1 = __importDefault(__nccwpck_require__(5157));
const persistence_1 = __nccwpck_require__(5802);
const pullRequestComment_1 = __importDefault(__nccwpck_require__(3326));
const pullRerunRunner_1 = __nccwpck_require__(4766);
function setupClaCheck() {
    return __awaiter(this, void 0, void 0, function* () {
        let committerMap = getInitialCommittersMap();
        let committers = yield (0, graphql_1.default)();
        committers = (0, checkAllowList_1.checkAllowList)(committers);
        const { claFileContent, sha } = (yield getCLAFileContentandSHA(committers, committerMap));
        committerMap = prepareCommiterMap(committers, claFileContent);
        try {
            const reactedCommitters = (yield (0, pullRequestComment_1.default)(committerMap, committers));
            if (reactedCommitters === null || reactedCommitters === void 0 ? void 0 : reactedCommitters.newSigned.length) {
                /* pushing the recently signed  contributors to the CLA Json File */
                yield (0, persistence_1.updateFile)(sha, claFileContent, reactedCommitters);
            }
            if ((reactedCommitters === null || reactedCommitters === void 0 ? void 0 : reactedCommitters.allSignedFlag) ||
                (committerMap === null || committerMap === void 0 ? void 0 : committerMap.notSigned) === undefined ||
                committerMap.notSigned.length === 0) {
                core.info(`All contributors have signed the CLA 📝 ✅ `);
                return (0, pullRerunRunner_1.reRunLastWorkFlowIfRequired)();
            }
            else {
                core.setFailed(`Committers of Pull Request number ${github_1.context.issue.number} have to sign the CLA 📝`);
            }
        }
        catch (err) {
            core.setFailed(`Could not update the JSON file: ${err.message}`);
        }
    });
}
exports.setupClaCheck = setupClaCheck;
function getCLAFileContentandSHA(committers, committerMap) {
    var _a;
    return __awaiter(this, void 0, void 0, function* () {
        let result, claFileContentString, claFileContent, sha;
        try {
            result = yield (0, persistence_1.getFileContent)();
        }
        catch (error) {
            if (error.status === "404") {
                return createClaFileAndPRComment(committers, committerMap);
            }
            else {
                throw new Error(`Could not retrieve repository contents. Status: ${error.status || 'unknown'}`);
            }
        }
        sha = (_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a.sha;
        claFileContentString = Buffer.from(result.data.content, 'base64').toString();
        claFileContent = JSON.parse(claFileContentString);
        return { claFileContent, sha };
    });
}
function createClaFileAndPRComment(committers, committerMap) {
    return __awaiter(this, void 0, void 0, function* () {
        committerMap.notSigned = committers;
        committerMap.signed = [];
        committers.map(committer => {
            if (!committer.id) {
                committerMap.unknown.push(committer);
            }
        });
        const initialContent = { signedContributors: [] };
        const initialContentString = JSON.stringify(initialContent, null, 3);
        const initialContentBinary = Buffer.from(initialContentString).toString('base64');
        yield (0, persistence_1.createFile)(initialContentBinary).catch(error => core.setFailed(`Error occurred when creating the signed contributors file: ${error.message || error}. Make sure the branch where signatures are stored is NOT protected.`));
        yield (0, pullRequestComment_1.default)(committerMap, committers);
        throw new Error(`Committers of pull request ${github_1.context.issue.number} have to sign the CLA`);
    });
}
function prepareCommiterMap(committers, claFileContent) {
    let committerMap = getInitialCommittersMap();
    committerMap.notSigned = committers.filter(committer => !(claFileContent === null || claFileContent === void 0 ? void 0 : claFileContent.signedContributors.some(cla => committer.id === cla.id)));
    committerMap.signed = committers.filter(committer => claFileContent === null || claFileContent === void 0 ? void 0 : claFileContent.signedContributors.some(cla => committer.id === cla.id));
    committers.map(committer => {
        if (!committer.id) {
            committerMap.unknown.push(committer);
        }
    });
    return committerMap;
}
const getInitialCommittersMap = () => ({
    signed: [],
    notSigned: [],
    unknown: []
});


/***/ }),

/***/ 3611:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.suggestRecheck = exports.lockPullRequestAfterMerge = exports.getCustomPrSignComment = exports.getUseDcoFlag = exports.getCustomAllSignedPrComment = exports.getCustomNotSignedPrComment = exports.getCreateFileCommitMessage = exports.getSignedCommitMessage = exports.getEmptyCommitFlag = exports.getAllowListItem = exports.getBranch = exports.getPathToDocument = exports.getPathToSignatures = exports.getRemoteOrgName = exports.getRemoteRepoName = void 0;
const core = __importStar(__nccwpck_require__(2186));
const getRemoteRepoName = () => {
    return core.getInput('remote-repository-name', { required: false });
};
exports.getRemoteRepoName = getRemoteRepoName;
const getRemoteOrgName = () => {
    return core.getInput('remote-organization-name', { required: false });
};
exports.getRemoteOrgName = getRemoteOrgName;
const getPathToSignatures = () => core.getInput('path-to-signatures', { required: false });
exports.getPathToSignatures = getPathToSignatures;
const getPathToDocument = () => core.getInput('path-to-document', { required: false });
exports.getPathToDocument = getPathToDocument;
const getBranch = () => core.getInput('branch', { required: false });
exports.getBranch = getBranch;
const getAllowListItem = () => core.getInput('allowlist', { required: false });
exports.getAllowListItem = getAllowListItem;
const getEmptyCommitFlag = () => core.getInput('empty-commit-flag', { required: false });
exports.getEmptyCommitFlag = getEmptyCommitFlag;
const getSignedCommitMessage = () => core.getInput('signed-commit-message', { required: false });
exports.getSignedCommitMessage = getSignedCommitMessage;
const getCreateFileCommitMessage = () => core.getInput('create-file-commit-message', { required: false });
exports.getCreateFileCommitMessage = getCreateFileCommitMessage;
const getCustomNotSignedPrComment = () => core.getInput('custom-notsigned-prcomment', { required: false });
exports.getCustomNotSignedPrComment = getCustomNotSignedPrComment;
const getCustomAllSignedPrComment = () => core.getInput('custom-allsigned-prcomment', { required: false });
exports.getCustomAllSignedPrComment = getCustomAllSignedPrComment;
const getUseDcoFlag = () => core.getInput('use-dco-flag', { required: false });
exports.getUseDcoFlag = getUseDcoFlag;
const getCustomPrSignComment = () => core.getInput('custom-pr-sign-comment', { required: false });
exports.getCustomPrSignComment = getCustomPrSignComment;
const lockPullRequestAfterMerge = () => core.getInput('lock-pullrequest-aftermerge', { required: false });
exports.lockPullRequestAfterMerge = lockPullRequestAfterMerge;
const suggestRecheck = () => core.getInput('suggest-recheck', { required: false });
exports.suggestRecheck = suggestRecheck;


/***/ }),

/***/ 6718:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getPrSignComment = void 0;
const input = __importStar(__nccwpck_require__(3611));
function getPrSignComment() {
    return input.getCustomPrSignComment() || "I have read the CLA Document and I hereby sign the CLA";
}
exports.getPrSignComment = getPrSignComment;


/***/ }),

/***/ 7351:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.issue = exports.issueCommand = void 0;
const os = __importStar(__nccwpck_require__(2037));
const utils_1 = __nccwpck_require__(5278);
/**
 * Commands
 *
 * Command Format:
 *   ::name key=value,key=value::message
 *
 * Examples:
 *   ::warning::This is the message
 *   ::set-env name=MY_VAR::some value
 */
function issueCommand(command, properties, message) {
    const cmd = new Command(command, properties, message);
    process.stdout.write(cmd.toString() + os.EOL);
}
exports.issueCommand = issueCommand;
function issue(name, message = '') {
    issueCommand(name, {}, message);
}
exports.issue = issue;
const CMD_STRING = '::';
class Command {
    constructor(command, properties, message) {
        if (!command) {
            command = 'missing.command';
        }
        this.command = command;
        this.properties = properties;
        this.message = message;
    }
    toString() {
        let cmdStr = CMD_STRING + this.command;
        if (this.properties && Object.keys(this.properties).length > 0) {
            cmdStr += ' ';
            let first = true;
            for (const key in this.properties) {
                if (this.properties.hasOwnProperty(key)) {
                    const val = this.properties[key];
                    if (val) {
                        if (first) {
                            first = false;
                        }
                        else {
                            cmdStr += ',';
                        }
                        cmdStr += `${key}=${escapeProperty(val)}`;
                    }
                }
            }
        }
        cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
        return cmdStr;
    }
}
function escapeData(s) {
    return utils_1.toCommandValue(s)
        .replace(/%/g, '%25')
        .replace(/\r/g, '%0D')
        .replace(/\n/g, '%0A');
}
function escapeProperty(s) {
    return utils_1.toCommandValue(s)
        .replace(/%/g, '%25')
        .replace(/\r/g, '%0D')
        .replace(/\n/g, '%0A')
        .replace(/:/g, '%3A')
        .replace(/,/g, '%2C');
}
//# sourceMappingURL=command.js.map

/***/ }),

/***/ 2186:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
const command_1 = __nccwpck_require__(7351);
const file_command_1 = __nccwpck_require__(717);
const utils_1 = __nccwpck_require__(5278);
const os = __importStar(__nccwpck_require__(2037));
const path = __importStar(__nccwpck_require__(1017));
const oidc_utils_1 = __nccwpck_require__(8041);
/**
 * The code to exit an action
 */
var ExitCode;
(function (ExitCode) {
    /**
     * A code indicating that the action was successful
     */
    ExitCode[ExitCode["Success"] = 0] = "Success";
    /**
     * A code indicating that the action was a failure
     */
    ExitCode[ExitCode["Failure"] = 1] = "Failure";
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
//-----------------------------------------------------------------------
// Variables
//-----------------------------------------------------------------------
/**
 * Sets env variable for this action and future actions in the job
 * @param name the name of the variable to set
 * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
 */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function exportVariable(name, val) {
    const convertedVal = utils_1.toCommandValue(val);
    process.env[name] = convertedVal;
    const filePath = process.env['GITHUB_ENV'] || '';
    if (filePath) {
        return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));
    }
    command_1.issueCommand('set-env', { name }, convertedVal);
}
exports.exportVariable = exportVariable;
/**
 * Registers a secret which will get masked from logs
 * @param secret value of the secret
 */
function setSecret(secret) {
    command_1.issueCommand('add-mask', {}, secret);
}
exports.setSecret = setSecret;
/**
 * Prepends inputPath to the PATH (for this action and future actions)
 * @param inputPath
 */
function addPath(inputPath) {
    const filePath = process.env['GITHUB_PATH'] || '';
    if (filePath) {
        file_command_1.issueFileCommand('PATH', inputPath);
    }
    else {
        command_1.issueCommand('add-path', {}, inputPath);
    }
    process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
}
exports.addPath = addPath;
/**
 * Gets the value of an input.
 * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
 * Returns an empty string if the value is not defined.
 *
 * @param     name     name of the input to get
 * @param     options  optional. See InputOptions.
 * @returns   string
 */
function getInput(name, options) {
    const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
    if (options && options.required && !val) {
        throw new Error(`Input required and not supplied: ${name}`);
    }
    if (options && options.trimWhitespace === false) {
        return val;
    }
    return val.trim();
}
exports.getInput = getInput;
/**
 * Gets the values of an multiline input.  Each value is also trimmed.
 *
 * @param     name     name of the input to get
 * @param     options  optional. See InputOptions.
 * @returns   string[]
 *
 */
function getMultilineInput(name, options) {
    const inputs = getInput(name, options)
        .split('\n')
        .filter(x => x !== '');
    if (options && options.trimWhitespace === false) {
        return inputs;
    }
    return inputs.map(input => input.trim());
}
exports.getMultilineInput = getMultilineInput;
/**
 * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
 * Support boolean input list: `true | True | TRUE | false | False | FALSE` .
 * The return value is also in boolean type.
 * ref: https://yaml.org/spec/1.2/spec.html#id2804923
 *
 * @param     name     name of the input to get
 * @param     options  optional. See InputOptions.
 * @returns   boolean
 */
function getBooleanInput(name, options) {
    const trueValue = ['true', 'True', 'TRUE'];
    const falseValue = ['false', 'False', 'FALSE'];
    const val = getInput(name, options);
    if (trueValue.includes(val))
        return true;
    if (falseValue.includes(val))
        return false;
    throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` +
        `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
}
exports.getBooleanInput = getBooleanInput;
/**
 * Sets the value of an output.
 *
 * @param     name     name of the output to set
 * @param     value    value to store. Non-string values will be converted to a string via JSON.stringify
 */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function setOutput(name, value) {
    const filePath = process.env['GITHUB_OUTPUT'] || '';
    if (filePath) {
        return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value));
    }
    process.stdout.write(os.EOL);
    command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value));
}
exports.setOutput = setOutput;
/**
 * Enables or disables the echoing of commands into stdout for the rest of the step.
 * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
 *
 */
function setCommandEcho(enabled) {
    command_1.issue('echo', enabled ? 'on' : 'off');
}
exports.setCommandEcho = setCommandEcho;
//-----------------------------------------------------------------------
// Results
//-----------------------------------------------------------------------
/**
 * Sets the action status to failed.
 * When the action exits it will be with an exit code of 1
 * @param message add error issue message
 */
function setFailed(message) {
    process.exitCode = ExitCode.Failure;
    error(message);
}
exports.setFailed = setFailed;
//-----------------------------------------------------------------------
// Logging Commands
//-----------------------------------------------------------------------
/**
 * Gets whether Actions Step Debug is on or not
 */
function isDebug() {
    return process.env['RUNNER_DEBUG'] === '1';
}
exports.isDebug = isDebug;
/**
 * Writes debug message to user log
 * @param message debug message
 */
function debug(message) {
    command_1.issueCommand('debug', {}, message);
}
exports.debug = debug;
/**
 * Adds an error issue
 * @param message error issue message. Errors will be converted to string via toString()
 * @param properties optional properties to add to the annotation.
 */
function error(message, properties = {}) {
    command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
}
exports.error = error;
/**
 * Adds a warning issue
 * @param message warning issue message. Errors will be converted to string via toString()
 * @param properties optional properties to add to the annotation.
 */
function warning(message, properties = {}) {
    command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
}
exports.warning = warning;
/**
 * Adds a notice issue
 * @param message notice issue message. Errors will be converted to string via toString()
 * @param properties optional properties to add to the annotation.
 */
function notice(message, properties = {}) {
    command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
}
exports.notice = notice;
/**
 * Writes info to log with console.log.
 * @param message info message
 */
function info(message) {
    process.stdout.write(message + os.EOL);
}
exports.info = info;
/**
 * Begin an output group.
 *
 * Output until the next `groupEnd` will be foldable in this group
 *
 * @param name The name of the output group
 */
function startGroup(name) {
    command_1.issue('group', name);
}
exports.startGroup = startGroup;
/**
 * End an output group.
 */
function endGroup() {
    command_1.issue('endgroup');
}
exports.endGroup = endGroup;
/**
 * Wrap an asynchronous function call in a group.
 *
 * Returns the same type as the function itself.
 *
 * @param name The name of the group
 * @param fn The function to wrap in the group
 */
function group(name, fn) {
    return __awaiter(this, void 0, void 0, function* () {
        startGroup(name);
        let result;
        try {
            result = yield fn();
        }
        finally {
            endGroup();
        }
        return result;
    });
}
exports.group = group;
//-----------------------------------------------------------------------
// Wrapper action state
//-----------------------------------------------------------------------
/**
 * Saves state for current action, the state can only be retrieved by this action's post job execution.
 *
 * @param     name     name of the state to store
 * @param     value    value to store. Non-string values will be converted to a string via JSON.stringify
 */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function saveState(name, value) {
    const filePath = process.env['GITHUB_STATE'] || '';
    if (filePath) {
        return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value));
    }
    command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value));
}
exports.saveState = saveState;
/**
 * Gets the value of an state set by this action's main execution.
 *
 * @param     name     name of the state to get
 * @returns   string
 */
function getState(name) {
    return process.env[`STATE_${name}`] || '';
}
exports.getState = getState;
function getIDToken(aud) {
    return __awaiter(this, void 0, void 0, function* () {
        return yield oidc_utils_1.OidcClient.getIDToken(aud);
    });
}
exports.getIDToken = getIDToken;
/**
 * Summary exports
 */
var summary_1 = __nccwpck_require__(1327);
Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } }));
/**
 * @deprecated use core.summary
 */
var summary_2 = __nccwpck_require__(1327);
Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } }));
/**
 * Path exports
 */
var path_utils_1 = __nccwpck_require__(2981);
Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } }));
Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } }));
Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } }));
//# sourceMappingURL=core.js.map

/***/ }),

/***/ 717:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

// For internal use, subject to change.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.prepareKeyValueMessage = exports.issueFileCommand = void 0;
// We use any as a valid input type
/* eslint-disable @typescript-eslint/no-explicit-any */
const fs = __importStar(__nccwpck_require__(7147));
const os = __importStar(__nccwpck_require__(2037));
const uuid_1 = __nccwpck_require__(5840);
const utils_1 = __nccwpck_require__(5278);
function issueFileCommand(command, message) {
    const filePath = process.env[`GITHUB_${command}`];
    if (!filePath) {
        throw new Error(`Unable to find environment variable for file command ${command}`);
    }
    if (!fs.existsSync(filePath)) {
        throw new Error(`Missing file at path: ${filePath}`);
    }
    fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
        encoding: 'utf8'
    });
}
exports.issueFileCommand = issueFileCommand;
function prepareKeyValueMessage(key, value) {
    const delimiter = `ghadelimiter_${uuid_1.v4()}`;
    const convertedValue = utils_1.toCommandValue(value);
    // These should realistically never happen, but just in case someone finds a
    // way to exploit uuid generation let's not allow keys or values that contain
    // the delimiter.
    if (key.includes(delimiter)) {
        throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`);
    }
    if (convertedValue.includes(delimiter)) {
        throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`);
    }
    return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`;
}
exports.prepareKeyValueMessage = prepareKeyValueMessage;
//# sourceMappingURL=file-command.js.map

/***/ }),

/***/ 8041:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.OidcClient = void 0;
const http_client_1 = __nccwpck_require__(1404);
const auth_1 = __nccwpck_require__(6758);
const core_1 = __nccwpck_require__(2186);
class OidcClient {
    static createHttpClient(allowRetry = true, maxRetry = 10) {
        const requestOptions = {
            allowRetries: allowRetry,
            maxRetries: maxRetry
        };
        return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
    }
    static getRequestToken() {
        const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];
        if (!token) {
            throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');
        }
        return token;
    }
    static getIDTokenUrl() {
        const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];
        if (!runtimeUrl) {
            throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');
        }
        return runtimeUrl;
    }
    static getCall(id_token_url) {
        var _a;
        return __awaiter(this, void 0, void 0, function* () {
            const httpclient = OidcClient.createHttpClient();
            const res = yield httpclient
                .getJson(id_token_url)
                .catch(error => {
                throw new Error(`Failed to get ID Token. \n 
        Error Code : ${error.statusCode}\n 
        Error Message: ${error.result.message}`);
            });
            const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
            if (!id_token) {
                throw new Error('Response json body do not have ID Token field');
            }
            return id_token;
        });
    }
    static getIDToken(audience) {
        return __awaiter(this, void 0, void 0, function* () {
            try {
                // New ID Token is requested from action service
                let id_token_url = OidcClient.getIDTokenUrl();
                if (audience) {
                    const encodedAudience = encodeURIComponent(audience);
                    id_token_url = `${id_token_url}&audience=${encodedAudience}`;
                }
                core_1.debug(`ID token url is ${id_token_url}`);
                const id_token = yield OidcClient.getCall(id_token_url);
                core_1.setSecret(id_token);
                return id_token;
            }
            catch (error) {
                throw new Error(`Error message: ${error.message}`);
            }
        });
    }
}
exports.OidcClient = OidcClient;
//# sourceMappingURL=oidc-utils.js.map

/***/ }),

/***/ 2981:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;
const path = __importStar(__nccwpck_require__(1017));
/**
 * toPosixPath converts the given path to the posix form. On Windows, \\ will be
 * replaced with /.
 *
 * @param pth. Path to transform.
 * @return string Posix path.
 */
function toPosixPath(pth) {
    return pth.replace(/[\\]/g, '/');
}
exports.toPosixPath = toPosixPath;
/**
 * toWin32Path converts the given path to the win32 form. On Linux, / will be
 * replaced with \\.
 *
 * @param pth. Path to transform.
 * @return string Win32 path.
 */
function toWin32Path(pth) {
    return pth.replace(/[/]/g, '\\');
}
exports.toWin32Path = toWin32Path;
/**
 * toPlatformPath converts the given path to a platform-specific path. It does
 * this by replacing instances of / and \ with the platform-specific path
 * separator.
 *
 * @param pth The path to platformize.
 * @return string The platform-specific path.
 */
function toPlatformPath(pth) {
    return pth.replace(/[/\\]/g, path.sep);
}
exports.toPlatformPath = toPlatformPath;
//# sourceMappingURL=path-utils.js.map

/***/ }),

/***/ 1327:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;
const os_1 = __nccwpck_require__(2037);
const fs_1 = __nccwpck_require__(7147);
const { access, appendFile, writeFile } = fs_1.promises;
exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';
exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';
class Summary {
    constructor() {
        this._buffer = '';
    }
    /**
     * Finds the summary file path from the environment, rejects if env var is not found or file does not exist
     * Also checks r/w permissions.
     *
     * @returns step summary file path
     */
    filePath() {
        return __awaiter(this, void 0, void 0, function* () {
            if (this._filePath) {
                return this._filePath;
            }
            const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];
            if (!pathFromEnv) {
                throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);
            }
            try {
                yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);
            }
            catch (_a) {
                throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);
            }
            this._filePath = pathFromEnv;
            return this._filePath;
        });
    }
    /**
     * Wraps content in an HTML tag, adding any HTML attributes
     *
     * @param {string} tag HTML tag to wrap
     * @param {string | null} content content within the tag
     * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add
     *
     * @returns {string} content wrapped in HTML element
     */
    wrap(tag, content, attrs = {}) {
        const htmlAttrs = Object.entries(attrs)
            .map(([key, value]) => ` ${key}="${value}"`)
            .join('');
        if (!content) {
            return `<${tag}${htmlAttrs}>`;
        }
        return `<${tag}${htmlAttrs}>${content}</${tag}>`;
    }
    /**
     * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.
     *
     * @param {SummaryWriteOptions} [options] (optional) options for write operation
     *
     * @returns {Promise<Summary>} summary instance
     */
    write(options) {
        return __awaiter(this, void 0, void 0, function* () {
            const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);
            const filePath = yield this.filePath();
            const writeFunc = overwrite ? writeFile : appendFile;
            yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });
            return this.emptyBuffer();
        });
    }
    /**
     * Clears the summary buffer and wipes the summary file
     *
     * @returns {Summary} summary instance
     */
    clear() {
        return __awaiter(this, void 0, void 0, function* () {
            return this.emptyBuffer().write({ overwrite: true });
        });
    }
    /**
     * Returns the current summary buffer as a string
     *
     * @returns {string} string of summary buffer
     */
    stringify() {
        return this._buffer;
    }
    /**
     * If the summary buffer is empty
     *
     * @returns {boolen} true if the buffer is empty
     */
    isEmptyBuffer() {
        return this._buffer.length === 0;
    }
    /**
     * Resets the summary buffer without writing to summary file
     *
     * @returns {Summary} summary instance
     */
    emptyBuffer() {
        this._buffer = '';
        return this;
    }
    /**
     * Adds raw text to the summary buffer
     *
     * @param {string} text content to add
     * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)
     *
     * @returns {Summary} summary instance
     */
    addRaw(text, addEOL = false) {
        this._buffer += text;
        return addEOL ? this.addEOL() : this;
    }
    /**
     * Adds the operating system-specific end-of-line marker to the buffer
     *
     * @returns {Summary} summary instance
     */
    addEOL() {
        return this.addRaw(os_1.EOL);
    }
    /**
     * Adds an HTML codeblock to the summary buffer
     *
     * @param {string} code content to render within fenced code block
     * @param {string} lang (optional) language to syntax highlight code
     *
     * @returns {Summary} summary instance
     */
    addCodeBlock(code, lang) {
        const attrs = Object.assign({}, (lang && { lang }));
        const element = this.wrap('pre', this.wrap('code', code), attrs);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML list to the summary buffer
     *
     * @param {string[]} items list of items to render
     * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)
     *
     * @returns {Summary} summary instance
     */
    addList(items, ordered = false) {
        const tag = ordered ? 'ol' : 'ul';
        const listItems = items.map(item => this.wrap('li', item)).join('');
        const element = this.wrap(tag, listItems);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML table to the summary buffer
     *
     * @param {SummaryTableCell[]} rows table rows
     *
     * @returns {Summary} summary instance
     */
    addTable(rows) {
        const tableBody = rows
            .map(row => {
            const cells = row
                .map(cell => {
                if (typeof cell === 'string') {
                    return this.wrap('td', cell);
                }
                const { header, data, colspan, rowspan } = cell;
                const tag = header ? 'th' : 'td';
                const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));
                return this.wrap(tag, data, attrs);
            })
                .join('');
            return this.wrap('tr', cells);
        })
            .join('');
        const element = this.wrap('table', tableBody);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds a collapsable HTML details element to the summary buffer
     *
     * @param {string} label text for the closed state
     * @param {string} content collapsable content
     *
     * @returns {Summary} summary instance
     */
    addDetails(label, content) {
        const element = this.wrap('details', this.wrap('summary', label) + content);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML image tag to the summary buffer
     *
     * @param {string} src path to the image you to embed
     * @param {string} alt text description of the image
     * @param {SummaryImageOptions} options (optional) addition image attributes
     *
     * @returns {Summary} summary instance
     */
    addImage(src, alt, options) {
        const { width, height } = options || {};
        const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));
        const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML section heading element
     *
     * @param {string} text heading text
     * @param {number | string} [level=1] (optional) the heading level, default: 1
     *
     * @returns {Summary} summary instance
     */
    addHeading(text, level) {
        const tag = `h${level}`;
        const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)
            ? tag
            : 'h1';
        const element = this.wrap(allowedTag, text);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML thematic break (<hr>) to the summary buffer
     *
     * @returns {Summary} summary instance
     */
    addSeparator() {
        const element = this.wrap('hr', null);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML line break (<br>) to the summary buffer
     *
     * @returns {Summary} summary instance
     */
    addBreak() {
        const element = this.wrap('br', null);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML blockquote to the summary buffer
     *
     * @param {string} text quote text
     * @param {string} cite (optional) citation url
     *
     * @returns {Summary} summary instance
     */
    addQuote(text, cite) {
        const attrs = Object.assign({}, (cite && { cite }));
        const element = this.wrap('blockquote', text, attrs);
        return this.addRaw(element).addEOL();
    }
    /**
     * Adds an HTML anchor tag to the summary buffer
     *
     * @param {string} text link text/content
     * @param {string} href hyperlink
     *
     * @returns {Summary} summary instance
     */
    addLink(text, href) {
        const element = this.wrap('a', text, { href });
        return this.addRaw(element).addEOL();
    }
}
const _summary = new Summary();
/**
 * @deprecated use `core.summary`
 */
exports.markdownSummary = _summary;
exports.summary = _summary;
//# sourceMappingURL=summary.js.map

/***/ }),

/***/ 5278:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

// We use any as a valid input type
/* eslint-disable @typescript-eslint/no-explicit-any */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.toCommandProperties = exports.toCommandValue = void 0;
/**
 * Sanitizes an input into a string so it can be passed into issueCommand safely
 * @param input input to sanitize into a string
 */
function toCommandValue(input) {
    if (input === null || input === undefined) {
        return '';
    }
    else if (typeof input === 'string' || input instanceof String) {
        return input;
    }
    return JSON.stringify(input);
}
exports.toCommandValue = toCommandValue;
/**
 *
 * @param annotationProperties
 * @returns The command properties to send with the actual annotation command
 * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
 */
function toCommandProperties(annotationProperties) {
    if (!Object.keys(annotationProperties).length) {
        return {};
    }
    return {
        title: annotationProperties.title,
        file: annotationProperties.file,
        line: annotationProperties.startLine,
        endLine: annotationProperties.endLine,
        col: annotationProperties.startColumn,
        endColumn: annotationProperties.endColumn
    };
}
exports.toCommandProperties = toCommandProperties;
//# sourceMappingURL=utils.js.map

/***/ }),

/***/ 6758:
/***/ (function(__unused_webpack_module, exports) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;
class BasicCredentialHandler {
    constructor(username, password) {
        this.username = username;
        this.password = password;
    }
    prepareRequest(options) {
        if (!options.headers) {
            throw Error('The request has no headers');
        }
        options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;
    }
    // This handler cannot handle 401
    canHandleAuthentication() {
        return false;
    }
    handleAuthentication() {
        return __awaiter(this, void 0, void 0, function* () {
            throw new Error('not implemented');
        });
    }
}
exports.BasicCredentialHandler = BasicCredentialHandler;
class BearerCredentialHandler {
    constructor(token) {
        this.token = token;
    }
    // currently implements pre-authorization
    // TODO: support preAuth = false where it hooks on 401
    prepareRequest(options) {
        if (!options.headers) {
            throw Error('The request has no headers');
        }
        options.headers['Authorization'] = `Bearer ${this.token}`;
    }
    // This handler cannot handle 401
    canHandleAuthentication() {
        return false;
    }
    handleAuthentication() {
        return __awaiter(this, void 0, void 0, function* () {
            throw new Error('not implemented');
        });
    }
}
exports.BearerCredentialHandler = BearerCredentialHandler;
class PersonalAccessTokenCredentialHandler {
    constructor(token) {
        this.token = token;
    }
    // currently implements pre-authorization
    // TODO: support preAuth = false where it hooks on 401
    prepareRequest(options) {
        if (!options.headers) {
            throw Error('The request has no headers');
        }
        options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;
    }
    // This handler cannot handle 401
    canHandleAuthentication() {
        return false;
    }
    handleAuthentication() {
        return __awaiter(this, void 0, void 0, function* () {
            throw new Error('not implemented');
        });
    }
}
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
//# sourceMappingURL=auth.js.map

/***/ }),

/***/ 1404:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

/* eslint-disable @typescript-eslint/no-explicit-any */
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;
const http = __importStar(__nccwpck_require__(3685));
const https = __importStar(__nccwpck_require__(5687));
const pm = __importStar(__nccwpck_require__(2843));
const tunnel = __importStar(__nccwpck_require__(4294));
var HttpCodes;
(function (HttpCodes) {
    HttpCodes[HttpCodes["OK"] = 200] = "OK";
    HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
    HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
    HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
    HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
    HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
    HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
    HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
    HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
    HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
    HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
    HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
    HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
    HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
    HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
    HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
    HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
    HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
    HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
    HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
    HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
    HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
    HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
    HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
    HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
    HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
    HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
var Headers;
(function (Headers) {
    Headers["Accept"] = "accept";
    Headers["ContentType"] = "content-type";
})(Headers = exports.Headers || (exports.Headers = {}));
var MediaTypes;
(function (MediaTypes) {
    MediaTypes["ApplicationJson"] = "application/json";
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
/**
 * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
 * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 */
function getProxyUrl(serverUrl) {
    const proxyUrl = pm.getProxyUrl(new URL(serverUrl));
    return proxyUrl ? proxyUrl.href : '';
}
exports.getProxyUrl = getProxyUrl;
const HttpRedirectCodes = [
    HttpCodes.MovedPermanently,
    HttpCodes.ResourceMoved,
    HttpCodes.SeeOther,
    HttpCodes.TemporaryRedirect,
    HttpCodes.PermanentRedirect
];
const HttpResponseRetryCodes = [
    HttpCodes.BadGateway,
    HttpCodes.ServiceUnavailable,
    HttpCodes.GatewayTimeout
];
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
const ExponentialBackoffCeiling = 10;
const ExponentialBackoffTimeSlice = 5;
class HttpClientError extends Error {
    constructor(message, statusCode) {
        super(message);
        this.name = 'HttpClientError';
        this.statusCode = statusCode;
        Object.setPrototypeOf(this, HttpClientError.prototype);
    }
}
exports.HttpClientError = HttpClientError;
class HttpClientResponse {
    constructor(message) {
        this.message = message;
    }
    readBody() {
        return __awaiter(this, void 0, void 0, function* () {
            return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
                let output = Buffer.alloc(0);
                this.message.on('data', (chunk) => {
                    output = Buffer.concat([output, chunk]);
                });
                this.message.on('end', () => {
                    resolve(output.toString());
                });
            }));
        });
    }
}
exports.HttpClientResponse = HttpClientResponse;
function isHttps(requestUrl) {
    const parsedUrl = new URL(requestUrl);
    return parsedUrl.protocol === 'https:';
}
exports.isHttps = isHttps;
class HttpClient {
    constructor(userAgent, handlers, requestOptions) {
        this._ignoreSslError = false;
        this._allowRedirects = true;
        this._allowRedirectDowngrade = false;
        this._maxRedirects = 50;
        this._allowRetries = false;
        this._maxRetries = 1;
        this._keepAlive = false;
        this._disposed = false;
        this.userAgent = userAgent;
        this.handlers = handlers || [];
        this.requestOptions = requestOptions;
        if (requestOptions) {
            if (requestOptions.ignoreSslError != null) {
                this._ignoreSslError = requestOptions.ignoreSslError;
            }
            this._socketTimeout = requestOptions.socketTimeout;
            if (requestOptions.allowRedirects != null) {
                this._allowRedirects = requestOptions.allowRedirects;
            }
            if (requestOptions.allowRedirectDowngrade != null) {
                this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
            }
            if (requestOptions.maxRedirects != null) {
                this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
            }
            if (requestOptions.keepAlive != null) {
                this._keepAlive = requestOptions.keepAlive;
            }
            if (requestOptions.allowRetries != null) {
                this._allowRetries = requestOptions.allowRetries;
            }
            if (requestOptions.maxRetries != null) {
                this._maxRetries = requestOptions.maxRetries;
            }
        }
    }
    options(requestUrl, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
        });
    }
    get(requestUrl, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request('GET', requestUrl, null, additionalHeaders || {});
        });
    }
    del(requestUrl, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request('DELETE', requestUrl, null, additionalHeaders || {});
        });
    }
    post(requestUrl, data, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request('POST', requestUrl, data, additionalHeaders || {});
        });
    }
    patch(requestUrl, data, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request('PATCH', requestUrl, data, additionalHeaders || {});
        });
    }
    put(requestUrl, data, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request('PUT', requestUrl, data, additionalHeaders || {});
        });
    }
    head(requestUrl, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request('HEAD', requestUrl, null, additionalHeaders || {});
        });
    }
    sendStream(verb, requestUrl, stream, additionalHeaders) {
        return __awaiter(this, void 0, void 0, function* () {
            return this.request(verb, requestUrl, stream, additionalHeaders);
        });
    }
    /**
     * Gets a typed object from an endpoint
     * Be aware that not found returns a null.  Other errors (4xx, 5xx) reject the promise
     */
    getJson(requestUrl, additionalHeaders = {}) {
        return __awaiter(this, void 0, void 0, function* () {
            additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
            const res = yield this.get(requestUrl, additionalHeaders);
            return this._processResponse(res, this.requestOptions);
        });
    }
    postJson(requestUrl, obj, additionalHeaders = {}) {
        return __awaiter(this, void 0, void 0, function* () {
            const data = JSON.stringify(obj, null, 2);
            additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
            additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
            const res = yield this.post(requestUrl, data, additionalHeaders);
            return this._processResponse(res, this.requestOptions);
        });
    }
    putJson(requestUrl, obj, additionalHeaders = {}) {
        return __awaiter(this, void 0, void 0, function* () {
            const data = JSON.stringify(obj, null, 2);
            additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
            additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
            const res = yield this.put(requestUrl, data, additionalHeaders);
            return this._processResponse(res, this.requestOptions);
        });
    }
    patchJson(requestUrl, obj, additionalHeaders = {}) {
        return __awaiter(this, void 0, void 0, function* () {
            const data = JSON.stringify(obj, null, 2);
            additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
            additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
            const res = yield this.patch(requestUrl, data, additionalHeaders);
            return this._processResponse(res, this.requestOptions);
        });
    }
    /**
     * Makes a raw http request.
     * All other methods such as get, post, patch, and request ultimately call this.
     * Prefer get, del, post and patch
     */
    request(verb, requestUrl, data, headers) {
        return __awaiter(this, void 0, void 0, function* () {
            if (this._disposed) {
                throw new Error('Client has already been disposed.');
            }
            const parsedUrl = new URL(requestUrl);
            let info = this._prepareRequest(verb, parsedUrl, headers);
            // Only perform retries on reads since writes may not be idempotent.
            const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)
                ? this._maxRetries + 1
                : 1;
            let numTries = 0;
            let response;
            do {
                response = yield this.requestRaw(info, data);
                // Check if it's an authentication challenge
                if (response &&
                    response.message &&
                    response.message.statusCode === HttpCodes.Unauthorized) {
                    let authenticationHandler;
                    for (const handler of this.handlers) {
                        if (handler.canHandleAuthentication(response)) {
                            authenticationHandler = handler;
                            break;
                        }
                    }
                    if (authenticationHandler) {
                        return authenticationHandler.handleAuthentication(this, info, data);
                    }
                    else {
                        // We have received an unauthorized response but have no handlers to handle it.
                        // Let the response return to the caller.
                        return response;
                    }
                }
                let redirectsRemaining = this._maxRedirects;
                while (response.message.statusCode &&
                    HttpRedirectCodes.includes(response.message.statusCode) &&
                    this._allowRedirects &&
                    redirectsRemaining > 0) {
                    const redirectUrl = response.message.headers['location'];
                    if (!redirectUrl) {
                        // if there's no location to redirect to, we won't
                        break;
                    }
                    const parsedRedirectUrl = new URL(redirectUrl);
                    if (parsedUrl.protocol === 'https:' &&
                        parsedUrl.protocol !== parsedRedirectUrl.protocol &&
                        !this._allowRedirectDowngrade) {
                        throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
                    }
                    // we need to finish reading the response before reassigning response
                    // which will leak the open socket.
                    yield response.readBody();
                    // strip authorization header if redirected to a different hostname
                    if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
                        for (const header in headers) {
                            // header names are case insensitive
                            if (header.toLowerCase() === 'authorization') {
                                delete headers[header];
                            }
                        }
                    }
                    // let's make the request with the new redirectUrl
                    info = this._prepareRequest(verb, parsedRedirectUrl, headers);
                    response = yield this.requestRaw(info, data);
                    redirectsRemaining--;
                }
                if (!response.message.statusCode ||
                    !HttpResponseRetryCodes.includes(response.message.statusCode)) {
                    // If not a retry code, return immediately instead of retrying
                    return response;
                }
                numTries += 1;
                if (numTries < maxTries) {
                    yield response.readBody();
                    yield this._performExponentialBackoff(numTries);
                }
            } while (numTries < maxTries);
            return response;
        });
    }
    /**
     * Needs to be called if keepAlive is set to true in request options.
     */
    dispose() {
        if (this._agent) {
            this._agent.destroy();
        }
        this._disposed = true;
    }
    /**
     * Raw request.
     * @param info
     * @param data
     */
    requestRaw(info, data) {
        return __awaiter(this, void 0, void 0, function* () {
            return new Promise((resolve, reject) => {
                function callbackForResult(err, res) {
                    if (err) {
                        reject(err);
                    }
                    else if (!res) {
                        // If `err` is not passed, then `res` must be passed.
                        reject(new Error('Unknown error'));
                    }
                    else {
                        resolve(res);
                    }
                }
                this.requestRawWithCallback(info, data, callbackForResult);
            });
        });
    }
    /**
     * Raw request with callback.
     * @param info
     * @param data
     * @param onResult
     */
    requestRawWithCallback(info, data, onResult) {
        if (typeof data === 'string') {
            if (!info.options.headers) {
                info.options.headers = {};
            }
            info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
        }
        let callbackCalled = false;
        function handleResult(err, res) {
            if (!callbackCalled) {
                callbackCalled = true;
                onResult(err, res);
            }
        }
        const req = info.httpModule.request(info.options, (msg) => {
            const res = new HttpClientResponse(msg);
            handleResult(undefined, res);
        });
        let socket;
        req.on('socket', sock => {
            socket = sock;
        });
        // If we ever get disconnected, we want the socket to timeout eventually
        req.setTimeout(this._socketTimeout || 3 * 60000, () => {
            if (socket) {
                socket.end();
            }
            handleResult(new Error(`Request timeout: ${info.options.path}`));
        });
        req.on('error', function (err) {
            // err has statusCode property
            // res should have headers
            handleResult(err);
        });
        if (data && typeof data === 'string') {
            req.write(data, 'utf8');
        }
        if (data && typeof data !== 'string') {
            data.on('close', function () {
                req.end();
            });
            data.pipe(req);
        }
        else {
            req.end();
        }
    }
    /**
     * Gets an http agent. This function is useful when you need an http agent that handles
     * routing through a proxy server - depending upon the url and proxy environment variables.
     * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
     */
    getAgent(serverUrl) {
        const parsedUrl = new URL(serverUrl);
        return this._getAgent(parsedUrl);
    }
    _prepareRequest(method, requestUrl, headers) {
        const info = {};
        info.parsedUrl = requestUrl;
        const usingSsl = info.parsedUrl.protocol === 'https:';
        info.httpModule = usingSsl ? https : http;
        const defaultPort = usingSsl ? 443 : 80;
        info.options = {};
        info.options.host = info.parsedUrl.hostname;
        info.options.port = info.parsedUrl.port
            ? parseInt(info.parsedUrl.port)
            : defaultPort;
        info.options.path =
            (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
        info.options.method = method;
        info.options.headers = this._mergeHeaders(headers);
        if (this.userAgent != null) {
            info.options.headers['user-agent'] = this.userAgent;
        }
        info.options.agent = this._getAgent(info.parsedUrl);
        // gives handlers an opportunity to participate
        if (this.handlers) {
            for (const handler of this.handlers) {
                handler.prepareRequest(info.options);
            }
        }
        return info;
    }
    _mergeHeaders(headers) {
        if (this.requestOptions && this.requestOptions.headers) {
            return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));
        }
        return lowercaseKeys(headers || {});
    }
    _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
        let clientHeader;
        if (this.requestOptions && this.requestOptions.headers) {
            clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
        }
        return additionalHeaders[header] || clientHeader || _default;
    }
    _getAgent(parsedUrl) {
        let agent;
        const proxyUrl = pm.getProxyUrl(parsedUrl);
        const useProxy = proxyUrl && proxyUrl.hostname;
        if (this._keepAlive && useProxy) {
            agent = this._proxyAgent;
        }
        if (this._keepAlive && !useProxy) {
            agent = this._agent;
        }
        // if agent is already assigned use that agent.
        if (agent) {
            return agent;
        }
        const usingSsl = parsedUrl.protocol === 'https:';
        let maxSockets = 100;
        if (this.requestOptions) {
            maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
        }
        // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.
        if (proxyUrl && proxyUrl.hostname) {
            const agentOptions = {
                maxSockets,
                keepAlive: this._keepAlive,
                proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {
                    proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
                })), { host: proxyUrl.hostname, port: proxyUrl.port })
            };
            let tunnelAgent;
            const overHttps = proxyUrl.protocol === 'https:';
            if (usingSsl) {
                tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
            }
            else {
                tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
            }
            agent = tunnelAgent(agentOptions);
            this._proxyAgent = agent;
        }
        // if reusing agent across request and tunneling agent isn't assigned create a new agent
        if (this._keepAlive && !agent) {
            const options = { keepAlive: this._keepAlive, maxSockets };
            agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
            this._agent = agent;
        }
        // if not using private agent and tunnel agent isn't setup then use global agent
        if (!agent) {
            agent = usingSsl ? https.globalAgent : http.globalAgent;
        }
        if (usingSsl && this._ignoreSslError) {
            // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
            // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
            // we have to cast it to any and change it directly
            agent.options = Object.assign(agent.options || {}, {
                rejectUnauthorized: false
            });
        }
        return agent;
    }
    _performExponentialBackoff(retryNumber) {
        return __awaiter(this, void 0, void 0, function* () {
            retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
            const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
            return new Promise(resolve => setTimeout(() => resolve(), ms));
        });
    }
    _processResponse(res, options) {
        return __awaiter(this, void 0, void 0, function* () {
            return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
                const statusCode = res.message.statusCode || 0;
                const response = {
                    statusCode,
                    result: null,
                    headers: {}
                };
                // not found leads to null obj returned
                if (statusCode === HttpCodes.NotFound) {
                    resolve(response);
                }
                // get the result from the body
                function dateTimeDeserializer(key, value) {
                    if (typeof value === 'string') {
                        const a = new Date(value);
                        if (!isNaN(a.valueOf())) {
                            return a;
                        }
                    }
                    return value;
                }
                let obj;
                let contents;
                try {
                    contents = yield res.readBody();
                    if (contents && contents.length > 0) {
                        if (options && options.deserializeDates) {
                            obj = JSON.parse(contents, dateTimeDeserializer);
                        }
                        else {
                            obj = JSON.parse(contents);
                        }
                        response.result = obj;
                    }
                    response.headers = res.message.headers;
                }
                catch (err) {
                    // Invalid resource (contents not json);  leaving result obj null
                }
                // note that 3xx redirects are handled by the http layer.
                if (statusCode > 299) {
                    let msg;
                    // if exception/error in body, attempt to get better error
                    if (obj && obj.message) {
                        msg = obj.message;
                    }
                    else if (contents && contents.length > 0) {
                        // it may be the case that the exception is in the body message as string
                        msg = contents;
                    }
                    else {
                        msg = `Failed request: (${statusCode})`;
                    }
                    const err = new HttpClientError(msg, statusCode);
                    err.result = response.result;
                    reject(err);
                }
                else {
                    resolve(response);
                }
            }));
        });
    }
}
exports.HttpClient = HttpClient;
const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
//# sourceMappingURL=index.js.map

/***/ }),

/***/ 2843:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.checkBypass = exports.getProxyUrl = void 0;
function getProxyUrl(reqUrl) {
    const usingSsl = reqUrl.protocol === 'https:';
    if (checkBypass(reqUrl)) {
        return undefined;
    }
    const proxyVar = (() => {
        if (usingSsl) {
            return process.env['https_proxy'] || process.env['HTTPS_PROXY'];
        }
        else {
            return process.env['http_proxy'] || process.env['HTTP_PROXY'];
        }
    })();
    if (proxyVar) {
        return new URL(proxyVar);
    }
    else {
        return undefined;
    }
}
exports.getProxyUrl = getProxyUrl;
function checkBypass(reqUrl) {
    if (!reqUrl.hostname) {
        return false;
    }
    const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
    if (!noProxy) {
        return false;
    }
    // Determine the request port
    let reqPort;
    if (reqUrl.port) {
        reqPort = Number(reqUrl.port);
    }
    else if (reqUrl.protocol === 'http:') {
        reqPort = 80;
    }
    else if (reqUrl.protocol === 'https:') {
        reqPort = 443;
    }
    // Format the request hostname and hostname with port
    const upperReqHosts = [reqUrl.hostname.toUpperCase()];
    if (typeof reqPort === 'number') {
        upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
    }
    // Compare request host against noproxy
    for (const upperNoProxyItem of noProxy
        .split(',')
        .map(x => x.trim().toUpperCase())
        .filter(x => x)) {
        if (upperReqHosts.some(x => x === upperNoProxyItem)) {
            return true;
        }
    }
    return false;
}
exports.checkBypass = checkBypass;
//# sourceMappingURL=proxy.js.map

/***/ }),

/***/ 4087:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Context = void 0;
const fs_1 = __nccwpck_require__(7147);
const os_1 = __nccwpck_require__(2037);
class Context {
    /**
     * Hydrate the context from the environment
     */
    constructor() {
        this.payload = {};
        if (process.env.GITHUB_EVENT_PATH) {
            if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {
                this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));
            }
            else {
                const path = process.env.GITHUB_EVENT_PATH;
                process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.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 payload = this.payload;
        return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });
    }
    get repo() {
        if (process.env.GITHUB_REPOSITORY) {
            const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
            return { owner, repo };
        }
        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'");
    }
}
exports.Context = Context;
//# sourceMappingURL=context.js.map

/***/ }),

/***/ 5438:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getOctokit = exports.context = void 0;
const Context = __importStar(__nccwpck_require__(4087));
const utils_1 = __nccwpck_require__(3030);
exports.context = new Context.Context();
/**
 * Returns a hydrated octokit ready to use for GitHub Actions
 *
 * @param     token    the repo PAT or GITHUB_TOKEN
 * @param     options  other options to set
 */
function getOctokit(token, options) {
    return new utils_1.GitHub(utils_1.getOctokitOptions(token, options));
}
exports.getOctokit = getOctokit;
//# sourceMappingURL=github.js.map

/***/ }),

/***/ 7914:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0;
const httpClient = __importStar(__nccwpck_require__(9925));
function getAuthString(token, options) {
    if (!token && !options.auth) {
        throw new Error('Parameter token or opts.auth is required');
    }
    else if (token && options.auth) {
        throw new Error('Parameters token and opts.auth may not both be specified');
    }
    return typeof options.auth === 'string' ? options.auth : `token ${token}`;
}
exports.getAuthString = getAuthString;
function getProxyAgent(destinationUrl) {
    const hc = new httpClient.HttpClient();
    return hc.getAgent(destinationUrl);
}
exports.getProxyAgent = getProxyAgent;
function getApiBaseUrl() {
    return process.env['GITHUB_API_URL'] || 'https://api.github.com';
}
exports.getApiBaseUrl = getApiBaseUrl;
//# sourceMappingURL=utils.js.map

/***/ }),

/***/ 3030:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getOctokitOptions = exports.GitHub = exports.context = void 0;
const Context = __importStar(__nccwpck_require__(4087));
const Utils = __importStar(__nccwpck_require__(7914));
// octokit + plugins
const core_1 = __nccwpck_require__(6762);
const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3044);
const plugin_paginate_rest_1 = __nccwpck_require__(4193);
exports.context = new Context.Context();
const baseUrl = Utils.getApiBaseUrl();
const defaults = {
    baseUrl,
    request: {
        agent: Utils.getProxyAgent(baseUrl)
    }
};
exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(defaults);
/**
 * Convience function to correctly format Octokit Options to pass into the constructor.
 *
 * @param     token    the repo PAT or GITHUB_TOKEN
 * @param     options  other options to set
 */
function getOctokitOptions(token, options) {
    const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller
    // Auth
    const auth = Utils.getAuthString(token, opts);
    if (auth) {
        opts.auth = auth;
    }
    return opts;
}
exports.getOctokitOptions = getOctokitOptions;
//# sourceMappingURL=utils.js.map

/***/ }),

/***/ 9925:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
const url = __nccwpck_require__(7310);
const http = __nccwpck_require__(3685);
const https = __nccwpck_require__(5687);
const pm = __nccwpck_require__(6443);
let tunnel;
var HttpCodes;
(function (HttpCodes) {
    HttpCodes[HttpCodes["OK"] = 200] = "OK";
    HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
    HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
    HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
    HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
    HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
    HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
    HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
    HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
    HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
    HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
    HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
    HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
    HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
    HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
    HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
    HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
    HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
    HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
    HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
    HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
    HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
    HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
    HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
    HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
    HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
    HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
var Headers;
(function (Headers) {
    Headers["Accept"] = "accept";
    Headers["ContentType"] = "content-type";
})(Headers = exports.Headers || (exports.Headers = {}));
var MediaTypes;
(function (MediaTypes) {
    MediaTypes["ApplicationJson"] = "application/json";
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
/**
 * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
 * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 */
function getProxyUrl(serverUrl) {
    let proxyUrl = pm.getProxyUrl(url.parse(serverUrl));
    return proxyUrl ? proxyUrl.href : '';
}
exports.getProxyUrl = getProxyUrl;
const HttpRedirectCodes = [
    HttpCodes.MovedPermanently,
    HttpCodes.ResourceMoved,
    HttpCodes.SeeOther,
    HttpCodes.TemporaryRedirect,
    HttpCodes.PermanentRedirect
];
const HttpResponseRetryCodes = [
    HttpCodes.BadGateway,
    HttpCodes.ServiceUnavailable,
    HttpCodes.GatewayTimeout
];
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
const ExponentialBackoffCeiling = 10;
const ExponentialBackoffTimeSlice = 5;
class HttpClientResponse {
    constructor(message) {
        this.message = message;
    }
    readBody() {
        return new Promise(async (resolve, reject) => {
            let output = Buffer.alloc(0);
            this.message.on('data', (chunk) => {
                output = Buffer.concat([output, chunk]);
            });
            this.message.on('end', () => {
                resolve(output.toString());
            });
        });
    }
}
exports.HttpClientResponse = HttpClientResponse;
function isHttps(requestUrl) {
    let parsedUrl = url.parse(requestUrl);
    return parsedUrl.protocol === 'https:';
}
exports.isHttps = isHttps;
class HttpClient {
    constructor(userAgent, handlers, requestOptions) {
        this._ignoreSslError = false;
        this._allowRedirects = true;
        this._allowRedirectDowngrade = false;
        this._maxRedirects = 50;
        this._allowRetries = false;
        this._maxRetries = 1;
        this._keepAlive = false;
        this._disposed = false;
        this.userAgent = userAgent;
        this.handlers = handlers || [];
        this.requestOptions = requestOptions;
        if (requestOptions) {
            if (requestOptions.ignoreSslError != null) {
                this._ignoreSslError = requestOptions.ignoreSslError;
            }
            this._socketTimeout = requestOptions.socketTimeout;
            if (requestOptions.allowRedirects != null) {
                this._allowRedirects = requestOptions.allowRedirects;
            }
            if (requestOptions.allowRedirectDowngrade != null) {
                this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
            }
            if (requestOptions.maxRedirects != null) {
                this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
            }
            if (requestOptions.keepAlive != null) {
                this._keepAlive = requestOptions.keepAlive;
            }
            if (requestOptions.allowRetries != null) {
                this._allowRetries = requestOptions.allowRetries;
            }
            if (requestOptions.maxRetries != null) {
                this._maxRetries = requestOptions.maxRetries;
            }
        }
    }
    options(requestUrl, additionalHeaders) {
        return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
    }
    get(requestUrl, additionalHeaders) {
        return this.request('GET', requestUrl, null, additionalHeaders || {});
    }
    del(requestUrl, additionalHeaders) {
        return this.request('DELETE', requestUrl, null, additionalHeaders || {});
    }
    post(requestUrl, data, additionalHeaders) {
        return this.request('POST', requestUrl, data, additionalHeaders || {});
    }
    patch(requestUrl, data, additionalHeaders) {
        return this.request('PATCH', requestUrl, data, additionalHeaders || {});
    }
    put(requestUrl, data, additionalHeaders) {
        return this.request('PUT', requestUrl, data, additionalHeaders || {});
    }
    head(requestUrl, additionalHeaders) {
        return this.request('HEAD', requestUrl, null, additionalHeaders || {});
    }
    sendStream(verb, requestUrl, stream, additionalHeaders) {
        return this.request(verb, requestUrl, stream, additionalHeaders);
    }
    /**
     * Gets a typed object from an endpoint
     * Be aware that not found returns a null.  Other errors (4xx, 5xx) reject the promise
     */
    async getJson(requestUrl, additionalHeaders = {}) {
        additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
        let res = await this.get(requestUrl, additionalHeaders);
        return this._processResponse(res, this.requestOptions);
    }
    async postJson(requestUrl, obj, additionalHeaders = {}) {
        let data = JSON.stringify(obj, null, 2);
        additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
        additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
        let res = await this.post(requestUrl, data, additionalHeaders);
        return this._processResponse(res, this.requestOptions);
    }
    async putJson(requestUrl, obj, additionalHeaders = {}) {
        let data = JSON.stringify(obj, null, 2);
        additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
        additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
        let res = await this.put(requestUrl, data, additionalHeaders);
        return this._processResponse(res, this.requestOptions);
    }
    async patchJson(requestUrl, obj, additionalHeaders = {}) {
        let data = JSON.stringify(obj, null, 2);
        additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
        additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
        let res = await this.patch(requestUrl, data, additionalHeaders);
        return this._processResponse(res, this.requestOptions);
    }
    /**
     * Makes a raw http request.
     * All other methods such as get, post, patch, and request ultimately call this.
     * Prefer get, del, post and patch
     */
    async request(verb, requestUrl, data, headers) {
        if (this._disposed) {
            throw new Error('Client has already been disposed.');
        }
        let parsedUrl = url.parse(requestUrl);
        let info = this._prepareRequest(verb, parsedUrl, headers);
        // Only perform retries on reads since writes may not be idempotent.
        let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
            ? this._maxRetries + 1
            : 1;
        let numTries = 0;
        let response;
        while (numTries < maxTries) {
            response = await this.requestRaw(info, data);
            // Check if it's an authentication challenge
            if (response &&
                response.message &&
                response.message.statusCode === HttpCodes.Unauthorized) {
                let authenticationHandler;
                for (let i = 0; i < this.handlers.length; i++) {
                    if (this.handlers[i].canHandleAuthentication(response)) {
                        authenticationHandler = this.handlers[i];
                        break;
                    }
                }
                if (authenticationHandler) {
                    return authenticationHandler.handleAuthentication(this, info, data);
                }
                else {
                    // We have received an unauthorized response but have no handlers to handle it.
                    // Let the response return to the caller.
                    return response;
                }
            }
            let redirectsRemaining = this._maxRedirects;
            while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
                this._allowRedirects &&
                redirectsRemaining > 0) {
                const redirectUrl = response.message.headers['location'];
                if (!redirectUrl) {
                    // if there's no location to redirect to, we won't
                    break;
                }
                let parsedRedirectUrl = url.parse(redirectUrl);
                if (parsedUrl.protocol == 'https:' &&
                    parsedUrl.protocol != parsedRedirectUrl.protocol &&
                    !this._allowRedirectDowngrade) {
                    throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
                }
                // we need to finish reading the response before reassigning response
                // which will leak the open socket.
                await response.readBody();
                // strip authorization header if redirected to a different hostname
                if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
                    for (let header in headers) {
                        // header names are case insensitive
                        if (header.toLowerCase() === 'authorization') {
                            delete headers[header];
                        }
                    }
                }
                // let's make the request with the new redirectUrl
                info = this._prepareRequest(verb, parsedRedirectUrl, headers);
                response = await this.requestRaw(info, data);
                redirectsRemaining--;
            }
            if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
                // If not a retry code, return immediately instead of retrying
                return response;
            }
            numTries += 1;
            if (numTries < maxTries) {
                await response.readBody();
                await this._performExponentialBackoff(numTries);
            }
        }
        return response;
    }
    /**
     * Needs to be called if keepAlive is set to true in request options.
     */
    dispose() {
        if (this._agent) {
            this._agent.destroy();
        }
        this._disposed = true;
    }
    /**
     * Raw request.
     * @param info
     * @param data
     */
    requestRaw(info, data) {
        return new Promise((resolve, reject) => {
            let callbackForResult = function (err, res) {
                if (err) {
                    reject(err);
                }
                resolve(res);
            };
            this.requestRawWithCallback(info, data, callbackForResult);
        });
    }
    /**
     * Raw request with callback.
     * @param info
     * @param data
     * @param onResult
     */
    requestRawWithCallback(info, data, onResult) {
        let socket;
        if (typeof data === 'string') {
            info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
        }
        let callbackCalled = false;
        let handleResult = (err, res) => {
            if (!callbackCalled) {
                callbackCalled = true;
                onResult(err, res);
            }
        };
        let req = info.httpModule.request(info.options
Download .txt
gitextract_yjz6o31s/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   └── workflows/
│       ├── add-contributors-in-readme.yaml
│       ├── assign-to-project.yaml
│       ├── codeql-analysis.yml
│       └── nodejs.yml
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── __tests__/
│   ├── main.test.ts
│   └── pullRequestLock.test.ts
├── action.yml
├── dist/
│   └── index.js
├── docs/
│   └── contributors.md
├── jest.config.js
├── package.json
├── src/
│   ├── addEmptyCommit.ts
│   ├── checkAllowList.ts
│   ├── graphql.ts
│   ├── interfaces.ts
│   ├── main.ts
│   ├── octokit.ts
│   ├── persistence/
│   │   └── persistence.ts
│   ├── pullRerunRunner.ts
│   ├── pullrequest/
│   │   ├── pullRequestComment.ts
│   │   ├── pullRequestCommentContent.ts
│   │   ├── pullRequestLock.ts
│   │   └── signatureComment.ts
│   ├── setupClaCheck.ts
│   └── shared/
│       ├── getInputs.ts
│       └── pr-sign-comment.ts
└── tsconfig.json
Download .txt
SYMBOL INDEX (1030 symbols across 15 files)

FILE: dist/index.js
  function isUserNotInAllowList (line 36) | function isUserNotInAllowList(committer) {
  function checkAllowList (line 47) | function checkAllowList(committers) {
  function adopt (line 62) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 64) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 65) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 66) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function getCommitters (line 73) | function getCommitters() {
  function adopt (line 179) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 181) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 182) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 183) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function run (line 194) | function run() {
  function getDefaultOctokitClient (line 256) | function getDefaultOctokitClient() {
  function getPATOctokit (line 260) | function getPATOctokit() {
  function isPersonalAccessTokenPresent (line 267) | function isPersonalAccessTokenPresent() {
  function adopt (line 304) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 306) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 307) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 308) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function getFileContent (line 317) | function getFileContent() {
  function createFile (line 330) | function createFile(contentBinary) {
  function updateFile (line 345) | function updateFile(sha, claFileContent, reactedCommitters) {
  function isRemoteRepoOrOrgConfigured (line 373) | function isRemoteRepoOrOrgConfigured() {
  function adopt (line 414) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 416) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 417) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 418) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function reRunLastWorkFlowIfRequired (line 428) | function reRunLastWorkFlowIfRequired() {
  function getBranchOfPullRequest (line 448) | function getBranchOfPullRequest() {
  function getSelfWorkflowId (line 458) | function getSelfWorkflowId() {
  function listWorkflowRunsInBranch (line 480) | function listWorkflowRunsInBranch(branch, workflowId) {
  function reRunWorkflow (line 493) | function reRunWorkflow(run) {
  function checkIfLastWorkFlowFailed (line 503) | function checkIfLastWorkFlowFailed(run) {
  function adopt (line 523) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 525) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 526) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 527) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function prCommentSetup (line 540) | function prCommentSetup(committerMap, committers) {
  function createComment (line 568) | function createComment(signed, committerMap) {
  function updateComment (line 578) | function updateComment(signed, committerMap, claBotComment) {
  function getComment (line 588) | function getComment() {
  function prepareCommiterMap (line 606) | function prepareCommiterMap(committerMap, reactedCommitters) {
  function prepareAllSignedCommitters (line 612) | function prepareAllSignedCommitters(committerMap, signedInPrCommitters, ...
  function commentContent (line 661) | function commentContent(signed, committerMap) {
  function dco (line 671) | function dco(signed, committerMap) {
  function cla (line 708) | function cla(signed, committerMap) {
  function adopt (line 778) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 780) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 781) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 782) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function lockPullRequest (line 791) | function lockPullRequest() {
  function adopt (line 819) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 821) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 822) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 823) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function signatureWithPRComment (line 831) | function signatureWithPRComment(committerMap, committers) {
  function isCommentSignedByUser (line 877) | function isCommentSignedByUser(comment, commentAuthor) {
  function adopt (line 927) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 929) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 930) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 931) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function setupClaCheck (line 947) | function setupClaCheck() {
  function getCLAFileContentandSHA (line 976) | function getCLAFileContentandSHA(committers, committerMap) {
  function createClaFileAndPRComment (line 997) | function createClaFileAndPRComment(committers, committerMap) {
  function prepareCommiterMap (line 1014) | function prepareCommiterMap(committers, claFileContent) {
  function getPrSignComment (line 1134) | function getPrSignComment() {
  function issueCommand (line 1180) | function issueCommand(command, properties, message) {
  function issue (line 1185) | function issue(name, message = '') {
  class Command (line 1190) | class Command {
    method constructor (line 1191) | constructor(command, properties, message) {
    method toString (line 1199) | toString() {
  function escapeData (line 1223) | function escapeData(s) {
  function escapeProperty (line 1229) | function escapeProperty(s) {
  function adopt (line 1266) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 1268) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 1269) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 1270) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function exportVariable (line 1305) | function exportVariable(name, val) {
  function setSecret (line 1319) | function setSecret(secret) {
  function addPath (line 1327) | function addPath(inputPath) {
  function getInput (line 1347) | function getInput(name, options) {
  function getMultilineInput (line 1366) | function getMultilineInput(name, options) {
  function getBooleanInput (line 1386) | function getBooleanInput(name, options) {
  function setOutput (line 1405) | function setOutput(name, value) {
  function setCommandEcho (line 1419) | function setCommandEcho(enabled) {
  function setFailed (line 1431) | function setFailed(message) {
  function isDebug (line 1442) | function isDebug() {
  function debug (line 1450) | function debug(message) {
  function error (line 1459) | function error(message, properties = {}) {
  function warning (line 1468) | function warning(message, properties = {}) {
  function notice (line 1477) | function notice(message, properties = {}) {
  function info (line 1485) | function info(message) {
  function startGroup (line 1496) | function startGroup(name) {
  function endGroup (line 1503) | function endGroup() {
  function group (line 1515) | function group(name, fn) {
  function saveState (line 1539) | function saveState(name, value) {
  function getState (line 1553) | function getState(name) {
  function getIDToken (line 1557) | function getIDToken(aud) {
  function issueFileCommand (line 1617) | function issueFileCommand(command, message) {
  function prepareKeyValueMessage (line 1630) | function prepareKeyValueMessage(key, value) {
  function adopt (line 1655) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 1657) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 1658) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 1659) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  class OidcClient (line 1668) | class OidcClient {
    method createHttpClient (line 1669) | static createHttpClient(allowRetry = true, maxRetry = 10) {
    method getRequestToken (line 1676) | static getRequestToken() {
    method getIDTokenUrl (line 1683) | static getIDTokenUrl() {
    method getCall (line 1690) | static getCall(id_token_url) {
    method getIDToken (line 1708) | static getIDToken(audience) {
  function toPosixPath (line 1767) | function toPosixPath(pth) {
  function toWin32Path (line 1778) | function toWin32Path(pth) {
  function toPlatformPath (line 1790) | function toPlatformPath(pth) {
  function adopt (line 1804) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 1806) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 1807) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 1808) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  class Summary (line 1819) | class Summary {
    method constructor (line 1820) | constructor() {
    method filePath (line 1829) | filePath() {
    method wrap (line 1857) | wrap(tag, content, attrs = {}) {
    method write (line 1873) | write(options) {
    method clear (line 1887) | clear() {
    method stringify (line 1897) | stringify() {
    method isEmptyBuffer (line 1905) | isEmptyBuffer() {
    method emptyBuffer (line 1913) | emptyBuffer() {
    method addRaw (line 1925) | addRaw(text, addEOL = false) {
    method addEOL (line 1934) | addEOL() {
    method addCodeBlock (line 1945) | addCodeBlock(code, lang) {
    method addList (line 1958) | addList(items, ordered = false) {
    method addTable (line 1971) | addTable(rows) {
    method addDetails (line 1999) | addDetails(label, content) {
    method addImage (line 2012) | addImage(src, alt, options) {
    method addHeading (line 2026) | addHeading(text, level) {
    method addSeparator (line 2039) | addSeparator() {
    method addBreak (line 2048) | addBreak() {
    method addQuote (line 2060) | addQuote(text, cite) {
    method addLink (line 2073) | addLink(text, href) {
  function toCommandValue (line 2101) | function toCommandValue(input) {
  function toCommandProperties (line 2117) | function toCommandProperties(annotationProperties) {
  function adopt (line 2141) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 2143) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 2144) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 2145) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  class BasicCredentialHandler (line 2151) | class BasicCredentialHandler {
    method constructor (line 2152) | constructor(username, password) {
    method prepareRequest (line 2156) | prepareRequest(options) {
    method canHandleAuthentication (line 2163) | canHandleAuthentication() {
    method handleAuthentication (line 2166) | handleAuthentication() {
  class BearerCredentialHandler (line 2173) | class BearerCredentialHandler {
    method constructor (line 2174) | constructor(token) {
    method prepareRequest (line 2179) | prepareRequest(options) {
    method canHandleAuthentication (line 2186) | canHandleAuthentication() {
    method handleAuthentication (line 2189) | handleAuthentication() {
  class PersonalAccessTokenCredentialHandler (line 2196) | class PersonalAccessTokenCredentialHandler {
    method constructor (line 2197) | constructor(token) {
    method prepareRequest (line 2202) | prepareRequest(options) {
    method canHandleAuthentication (line 2209) | canHandleAuthentication() {
    method handleAuthentication (line 2212) | handleAuthentication() {
  function adopt (line 2249) | function adopt(value) { return value instanceof P ? value : new P(functi...
  function fulfilled (line 2251) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
  function rejected (line 2252) | function rejected(value) { try { step(generator["throw"](value)); } catc...
  function step (line 2253) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
  function getProxyUrl (line 2306) | function getProxyUrl(serverUrl) {
  class HttpClientError (line 2326) | class HttpClientError extends Error {
    method constructor (line 2327) | constructor(message, statusCode) {
  class HttpClientResponse (line 2335) | class HttpClientResponse {
    method constructor (line 2336) | constructor(message) {
    method readBody (line 2339) | readBody() {
    method constructor (line 3189) | constructor(message) {
    method readBody (line 3192) | readBody() {
  function isHttps (line 2354) | function isHttps(requestUrl) {
  class HttpClient (line 2359) | class HttpClient {
    method constructor (line 2360) | constructor(userAgent, handlers, requestOptions) {
    method options (line 2397) | options(requestUrl, additionalHeaders) {
    method get (line 2402) | get(requestUrl, additionalHeaders) {
    method del (line 2407) | del(requestUrl, additionalHeaders) {
    method post (line 2412) | post(requestUrl, data, additionalHeaders) {
    method patch (line 2417) | patch(requestUrl, data, additionalHeaders) {
    method put (line 2422) | put(requestUrl, data, additionalHeaders) {
    method head (line 2427) | head(requestUrl, additionalHeaders) {
    method sendStream (line 2432) | sendStream(verb, requestUrl, stream, additionalHeaders) {
    method getJson (line 2441) | getJson(requestUrl, additionalHeaders = {}) {
    method postJson (line 2448) | postJson(requestUrl, obj, additionalHeaders = {}) {
    method putJson (line 2457) | putJson(requestUrl, obj, additionalHeaders = {}) {
    method patchJson (line 2466) | patchJson(requestUrl, obj, additionalHeaders = {}) {
    method request (line 2480) | request(verb, requestUrl, data, headers) {
    method dispose (line 2565) | dispose() {
    method requestRaw (line 2576) | requestRaw(info, data) {
    method requestRawWithCallback (line 2601) | requestRawWithCallback(info, data, onResult) {
    method getAgent (line 2653) | getAgent(serverUrl) {
    method _prepareRequest (line 2657) | _prepareRequest(method, requestUrl, headers) {
    method _mergeHeaders (line 2684) | _mergeHeaders(headers) {
    method _getExistingOrDefaultHeader (line 2690) | _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
    method _getAgent (line 2697) | _getAgent(parsedUrl) {
    method _performExponentialBackoff (line 2756) | _performExponentialBackoff(retryNumber) {
    method _processResponse (line 2763) | _processResponse(res, options) {
    method constructor (line 3211) | constructor(userAgent, handlers, requestOptions) {
    method options (line 3248) | options(requestUrl, additionalHeaders) {
    method get (line 3251) | get(requestUrl, additionalHeaders) {
    method del (line 3254) | del(requestUrl, additionalHeaders) {
    method post (line 3257) | post(requestUrl, data, additionalHeaders) {
    method patch (line 3260) | patch(requestUrl, data, additionalHeaders) {
    method put (line 3263) | put(requestUrl, data, additionalHeaders) {
    method head (line 3266) | head(requestUrl, additionalHeaders) {
    method sendStream (line 3269) | sendStream(verb, requestUrl, stream, additionalHeaders) {
    method getJson (line 3276) | async getJson(requestUrl, additionalHeaders = {}) {
    method postJson (line 3281) | async postJson(requestUrl, obj, additionalHeaders = {}) {
    method putJson (line 3288) | async putJson(requestUrl, obj, additionalHeaders = {}) {
    method patchJson (line 3295) | async patchJson(requestUrl, obj, additionalHeaders = {}) {
    method request (line 3307) | async request(verb, requestUrl, data, headers) {
    method dispose (line 3388) | dispose() {
    method requestRaw (line 3399) | requestRaw(info, data) {
    method requestRawWithCallback (line 3416) | requestRawWithCallback(info, data, onResult) {
    method getAgent (line 3465) | getAgent(serverUrl) {
    method _prepareRequest (line 3469) | _prepareRequest(method, requestUrl, headers) {
    method _mergeHeaders (line 3496) | _mergeHeaders(headers) {
    method _getExistingOrDefaultHeader (line 3503) | _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
    method _getAgent (line 3511) | _getAgent(parsedUrl) {
    method _performExponentialBackoff (line 3575) | _performExponentialBackoff(retryNumber) {
    method dateTimeDeserializer (line 3580) | static dateTimeDeserializer(key, value) {
    method _processResponse (line 3589) | async _processResponse(res, options) {
  function getProxyUrl (line 2842) | function getProxyUrl(reqUrl) {
  function checkBypass (line 2863) | function checkBypass(reqUrl) {
  class Context (line 2912) | class Context {
    method constructor (line 2916) | constructor() {
    method issue (line 2937) | get issue() {
    method repo (line 2941) | get repo() {
  function getOctokit (line 2995) | function getOctokit(token, options) {
  function getAuthString (line 3030) | function getAuthString(token, options) {
  function getProxyAgent (line 3040) | function getProxyAgent(destinationUrl) {
  function getApiBaseUrl (line 3045) | function getApiBaseUrl() {
  function getOctokitOptions (line 3100) | function getOctokitOptions(token, options) {
  function getProxyUrl (line 3168) | function getProxyUrl(serverUrl) {
  class HttpClientResponse (line 3188) | class HttpClientResponse {
    method constructor (line 2336) | constructor(message) {
    method readBody (line 2339) | readBody() {
    method constructor (line 3189) | constructor(message) {
    method readBody (line 3192) | readBody() {
  function isHttps (line 3205) | function isHttps(requestUrl) {
  class HttpClient (line 3210) | class HttpClient {
    method constructor (line 2360) | constructor(userAgent, handlers, requestOptions) {
    method options (line 2397) | options(requestUrl, additionalHeaders) {
    method get (line 2402) | get(requestUrl, additionalHeaders) {
    method del (line 2407) | del(requestUrl, additionalHeaders) {
    method post (line 2412) | post(requestUrl, data, additionalHeaders) {
    method patch (line 2417) | patch(requestUrl, data, additionalHeaders) {
    method put (line 2422) | put(requestUrl, data, additionalHeaders) {
    method head (line 2427) | head(requestUrl, additionalHeaders) {
    method sendStream (line 2432) | sendStream(verb, requestUrl, stream, additionalHeaders) {
    method getJson (line 2441) | getJson(requestUrl, additionalHeaders = {}) {
    method postJson (line 2448) | postJson(requestUrl, obj, additionalHeaders = {}) {
    method putJson (line 2457) | putJson(requestUrl, obj, additionalHeaders = {}) {
    method patchJson (line 2466) | patchJson(requestUrl, obj, additionalHeaders = {}) {
    method request (line 2480) | request(verb, requestUrl, data, headers) {
    method dispose (line 2565) | dispose() {
    method requestRaw (line 2576) | requestRaw(info, data) {
    method requestRawWithCallback (line 2601) | requestRawWithCallback(info, data, onResult) {
    method getAgent (line 2653) | getAgent(serverUrl) {
    method _prepareRequest (line 2657) | _prepareRequest(method, requestUrl, headers) {
    method _mergeHeaders (line 2684) | _mergeHeaders(headers) {
    method _getExistingOrDefaultHeader (line 2690) | _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
    method _getAgent (line 2697) | _getAgent(parsedUrl) {
    method _performExponentialBackoff (line 2756) | _performExponentialBackoff(retryNumber) {
    method _processResponse (line 2763) | _processResponse(res, options) {
    method constructor (line 3211) | constructor(userAgent, handlers, requestOptions) {
    method options (line 3248) | options(requestUrl, additionalHeaders) {
    method get (line 3251) | get(requestUrl, additionalHeaders) {
    method del (line 3254) | del(requestUrl, additionalHeaders) {
    method post (line 3257) | post(requestUrl, data, additionalHeaders) {
    method patch (line 3260) | patch(requestUrl, data, additionalHeaders) {
    method put (line 3263) | put(requestUrl, data, additionalHeaders) {
    method head (line 3266) | head(requestUrl, additionalHeaders) {
    method sendStream (line 3269) | sendStream(verb, requestUrl, stream, additionalHeaders) {
    method getJson (line 3276) | async getJson(requestUrl, additionalHeaders = {}) {
    method postJson (line 3281) | async postJson(requestUrl, obj, additionalHeaders = {}) {
    method putJson (line 3288) | async putJson(requestUrl, obj, additionalHeaders = {}) {
    method patchJson (line 3295) | async patchJson(requestUrl, obj, additionalHeaders = {}) {
    method request (line 3307) | async request(verb, requestUrl, data, headers) {
    method dispose (line 3388) | dispose() {
    method requestRaw (line 3399) | requestRaw(info, data) {
    method requestRawWithCallback (line 3416) | requestRawWithCallback(info, data, onResult) {
    method getAgent (line 3465) | getAgent(serverUrl) {
    method _prepareRequest (line 3469) | _prepareRequest(method, requestUrl, headers) {
    method _mergeHeaders (line 3496) | _mergeHeaders(headers) {
    method _getExistingOrDefaultHeader (line 3503) | _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
    method _getAgent (line 3511) | _getAgent(parsedUrl) {
    method _performExponentialBackoff (line 3575) | _performExponentialBackoff(retryNumber) {
    method dateTimeDeserializer (line 3580) | static dateTimeDeserializer(key, value) {
    method _processResponse (line 3589) | async _processResponse(res, options) {
  function getProxyUrl (line 3660) | function getProxyUrl(reqUrl) {
  function checkBypass (line 3679) | function checkBypass(reqUrl) {
  function auth (line 3727) | async function auth(token) {
  function withAuthorizationPrefix (line 3741) | function withAuthorizationPrefix(token) {
  function hook (line 3749) | async function hook(token, request, route, parameters) {
  function _defineProperty (line 3790) | function _defineProperty(obj, key, value) {
  function ownKeys (line 3805) | function ownKeys(object, enumerableOnly) {
  function _objectSpread2 (line 3819) | function _objectSpread2(target) {
  class Octokit (line 3841) | class Octokit {
    method constructor (line 3842) | constructor(options = {}) {
    method defaults (line 3916) | static defaults(defaults) {
    method plugin (line 3942) | static plugin(...newPlugins) {
  function _interopDefault (line 3968) | function _interopDefault (ex) { return (ex && (typeof ex === 'object') &...
  function lowercaseKeys (line 3973) | function lowercaseKeys(object) {
  function mergeDeep (line 3984) | function mergeDeep(defaults, options) {
  function merge (line 4000) | function merge(defaults, route, options) {
  function addQueryParameters (line 4025) | function addQueryParameters(url, parameters) {
  function removeNonChars (line 4044) | function removeNonChars(variableName) {
  function extractUrlVariableNames (line 4048) | function extractUrlVariableNames(url) {
  function omit (line 4058) | function omit(object, keysToOmit) {
  function encodeReserved (line 4092) | function encodeReserved(str) {
  function encodeUnreserved (line 4102) | function encodeUnreserved(str) {
  function encodeValue (line 4108) | function encodeValue(operator, value, key) {
  function isDefined (line 4118) | function isDefined(value) {
  function isKeyOperator (line 4122) | function isKeyOperator(operator) {
  function getValues (line 4126) | function getValues(context, operator, key, modifier) {
  function parseUrl (line 4190) | function parseUrl(template) {
  function expand (line 4196) | function expand(template, context) {
  function parse (line 4232) | function parse(options) {
  function endpointWithDefaults (line 4306) | function endpointWithDefaults(defaults, route, options) {
  function withDefaults (line 4310) | function withDefaults(oldDefaults, newDefaults) {
  class GraphqlError (line 4360) | class GraphqlError extends Error {
    method constructor (line 4361) | constructor(request, response) {
  function graphql (line 4381) | function graphql(request, query, options) {
  function withDefaults (line 4416) | function withDefaults(request$1, newDefaults) {
  function withCustomRequest (line 4436) | function withCustomRequest(customRequest) {
  function _interopDefault (line 4458) | function _interopDefault (ex) { return (ex && (typeof ex === 'object') &...
  class RequestError (line 4468) | class RequestError extends Error {
    method constructor (line 4469) | constructor(message, statusCode, options) {
  function _interopDefault (line 4521) | function _interopDefault (ex) { return (ex && (typeof ex === 'object') &...
  function getBufferResponse (line 4531) | function getBufferResponse(response) {
  function fetchWrapper (line 4535) | function fetchWrapper(requestOptions) {
  function withDefaults (line 4630) | function withDefaults(oldEndpoint, newDefaults) {
  function _interopDefault (line 4677) | function _interopDefault (ex) { return (ex && (typeof ex === 'object') &...
  class Blob (line 4694) | class Blob {
    method constructor (line 4695) | constructor() {
    method size (line 4733) | get size() {
    method type (line 4736) | get type() {
    method text (line 4739) | text() {
    method arrayBuffer (line 4742) | arrayBuffer() {
    method stream (line 4747) | stream() {
    method toString (line 4754) | toString() {
    method slice (line 4757) | slice() {
  function FetchError (line 4814) | function FetchError(message, type, systemError) {
  function Body (line 4852) | function Body(body) {
  method body (line 4896) | get body() {
  method bodyUsed (line 4900) | get bodyUsed() {
  method arrayBuffer (line 4909) | arrayBuffer() {
  method blob (line 4920) | blob() {
  method json (line 4938) | json() {
  method text (line 4955) | text() {
  method buffer (line 4966) | buffer() {
  method textConverted (line 4976) | textConverted() {
  function consumeBody (line 5012) | function consumeBody() {
  function convertBody (line 5116) | function convertBody(buffer, headers) {
  function isURLSearchParams (line 5180) | function isURLSearchParams(obj) {
  function isBlob (line 5195) | function isBlob(obj) {
  function clone (line 5205) | function clone(instance) {
  function extractContentType (line 5239) | function extractContentType(body) {
  function getTotalBytes (line 5283) | function getTotalBytes(instance) {
  function writeToStream (line 5315) | function writeToStream(dest, instance) {
  function validateName (line 5346) | function validateName(name) {
  function validateValue (line 5353) | function validateValue(value) {
  function find (line 5368) | function find(map, name) {
  class Headers (line 5379) | class Headers {
    method constructor (line 5386) | constructor() {
    method get (line 5447) | get(name) {
    method forEach (line 5465) | forEach(callback) {
    method set (line 5488) | set(name, value) {
    method append (line 5504) | append(name, value) {
    method has (line 5523) | has(name) {
    method delete (line 5535) | delete(name) {
    method raw (line 5549) | raw() {
    method keys (line 5558) | keys() {
    method values (line 5567) | values() {
  method [Symbol.iterator] (line 5578) | [Symbol.iterator]() {
  function getHeaders (line 5603) | function getHeaders(headers) {
  function createHeadersIterator (line 5618) | function createHeadersIterator(target, kind) {
  method next (line 5629) | next() {
  function exportNodeCompatibleHeaders (line 5671) | function exportNodeCompatibleHeaders(headers) {
  function createHeadersLenient (line 5691) | function createHeadersLenient(obj) {
  class Response (line 5727) | class Response {
    method constructor (line 5728) | constructor() {
    method url (line 5753) | get url() {
    method status (line 5757) | get status() {
    method ok (line 5764) | get ok() {
    method redirected (line 5768) | get redirected() {
    method statusText (line 5772) | get statusText() {
    method headers (line 5776) | get headers() {
    method clone (line 5785) | clone() {
  function parseURL (line 5829) | function parseURL(urlStr) {
  function isRequest (line 5851) | function isRequest(input) {
  function isAbortSignal (line 5855) | function isAbortSignal(signal) {
  class Request (line 5867) | class Request {
    method constructor (line 5868) | constructor(input) {
    method method (line 5934) | get method() {
    method url (line 5938) | get url() {
    method headers (line 5942) | get headers() {
    method redirect (line 5946) | get redirect() {
    method signal (line 5950) | get signal() {
    method clone (line 5959) | clone() {
  function getNodeRequestOptions (line 5988) | function getNodeRequestOptions(request) {
  function AbortError (line 6066) | function AbortError(message) {
  function fetch (line 6099) | function fetch(url, opts) {
  function isObject (line 6387) | function isObject(o) {
  function isPlainObject (line 6391) | function isPlainObject(o) {
  function getUserAgent (line 6426) | function getUserAgent() {
  function normalizePaginatedListResponse (line 6470) | function normalizePaginatedListResponse(response) {
  function iterator (line 6497) | function iterator(octokit, route, parameters) {
  function paginate (line 6531) | function paginate(octokit, route, parameters, mapFn) {
  function gather (line 6540) | function gather(octokit, results, iterator, mapFn) {
  function paginateRest (line 6567) | function paginateRest(octokit) {
  function endpointsToMethods (line 7694) | function endpointsToMethods(octokit, endpointsMap) {
  function decorate (line 7724) | function decorate(octokit, scope, methodName, defaults, decorations) {
  function restEndpointMethods (line 7786) | function restEndpointMethods(octokit) {
  function bindApi (line 7808) | function bindApi (hook, state, name) {
  function HookSingular (line 7819) | function HookSingular () {
  function HookCollection (line 7829) | function HookCollection () {
  function Hook (line 7841) | function Hook () {
  function addHook (line 7866) | function addHook (state, kind, name, hook) {
  function register (line 7919) | function register (state, name, method, options) {
  function removeHook (line 7954) | function removeHook (state, name, method) {
  class Deprecation (line 7981) | class Deprecation extends Error {
    method constructor (line 7982) | constructor(message) {
  function apply (line 8489) | function apply(func, thisArg, args) {
  function arrayAggregator (line 8509) | function arrayAggregator(array, setter, iteratee, accumulator) {
  function arrayEach (line 8529) | function arrayEach(array, iteratee) {
  function arrayEachRight (line 8550) | function arrayEachRight(array, iteratee) {
  function arrayEvery (line 8571) | function arrayEvery(array, predicate) {
  function arrayFilter (line 8592) | function arrayFilter(array, predicate) {
  function arrayIncludes (line 8616) | function arrayIncludes(array, value) {
  function arrayIncludesWith (line 8630) | function arrayIncludesWith(array, value, comparator) {
  function arrayMap (line 8651) | function arrayMap(array, iteratee) {
  function arrayPush (line 8670) | function arrayPush(array, values) {
  function arrayReduce (line 8693) | function arrayReduce(array, iteratee, accumulator, initAccum) {
  function arrayReduceRight (line 8718) | function arrayReduceRight(array, iteratee, accumulator, initAccum) {
  function arraySome (line 8739) | function arraySome(array, predicate) {
  function asciiToArray (line 8767) | function asciiToArray(string) {
  function asciiWords (line 8778) | function asciiWords(string) {
  function baseFindKey (line 8793) | function baseFindKey(collection, predicate, eachFunc) {
  function baseFindIndex (line 8815) | function baseFindIndex(array, predicate, fromIndex, fromRight) {
  function baseIndexOf (line 8836) | function baseIndexOf(array, value, fromIndex) {
  function baseIndexOfWith (line 8852) | function baseIndexOfWith(array, value, fromIndex, comparator) {
  function baseIsNaN (line 8871) | function baseIsNaN(value) {
  function baseMean (line 8884) | function baseMean(array, iteratee) {
  function baseProperty (line 8896) | function baseProperty(key) {
  function basePropertyOf (line 8909) | function basePropertyOf(object) {
  function baseReduce (line 8928) | function baseReduce(collection, iteratee, accumulator, initAccum, eachFu...
  function baseSortBy (line 8947) | function baseSortBy(array, comparer) {
  function baseSum (line 8966) | function baseSum(array, iteratee) {
  function baseTimes (line 8989) | function baseTimes(n, iteratee) {
  function baseToPairs (line 9008) | function baseToPairs(object, props) {
  function baseTrim (line 9021) | function baseTrim(string) {
  function baseUnary (line 9034) | function baseUnary(func) {
  function baseValues (line 9050) | function baseValues(object, props) {
  function cacheHas (line 9064) | function cacheHas(cache, key) {
  function charsStartIndex (line 9077) | function charsStartIndex(strSymbols, chrSymbols) {
  function charsEndIndex (line 9094) | function charsEndIndex(strSymbols, chrSymbols) {
  function countHolders (line 9109) | function countHolders(array, placeholder) {
  function escapeStringChar (line 9147) | function escapeStringChar(chr) {
  function getValue (line 9159) | function getValue(object, key) {
  function hasUnicode (line 9170) | function hasUnicode(string) {
  function hasUnicodeWord (line 9181) | function hasUnicodeWord(string) {
  function iteratorToArray (line 9192) | function iteratorToArray(iterator) {
  function mapToArray (line 9209) | function mapToArray(map) {
  function overArg (line 9227) | function overArg(func, transform) {
  function replaceHolders (line 9242) | function replaceHolders(array, placeholder) {
  function setToArray (line 9265) | function setToArray(set) {
  function setToPairs (line 9282) | function setToPairs(set) {
  function strictIndexOf (line 9302) | function strictIndexOf(array, value, fromIndex) {
  function strictLastIndexOf (line 9324) | function strictLastIndexOf(array, value, fromIndex) {
  function stringSize (line 9341) | function stringSize(string) {
  function stringToArray (line 9354) | function stringToArray(string) {
  function trimmedEndIndex (line 9368) | function trimmedEndIndex(string) {
  function unicodeSize (line 9391) | function unicodeSize(string) {
  function unicodeToArray (line 9406) | function unicodeToArray(string) {
  function unicodeWords (line 9417) | function unicodeWords(string) {
  function lodash (line 9694) | function lodash(value) {
  function object (line 9715) | function object() {}
  function baseLodash (line 9735) | function baseLodash() {
  function LodashWrapper (line 9746) | function LodashWrapper(value, chainAll) {
  function LazyWrapper (line 9831) | function LazyWrapper(value) {
  function lazyClone (line 9849) | function lazyClone() {
  function lazyReverse (line 9868) | function lazyReverse() {
  function lazyValue (line 9888) | function lazyValue() {
  function Hash (line 9950) | function Hash(entries) {
  function hashClear (line 9968) | function hashClear() {
  function hashDelete (line 9983) | function hashDelete(key) {
  function hashGet (line 9998) | function hashGet(key) {
  function hashHas (line 10016) | function hashHas(key) {
  function hashSet (line 10031) | function hashSet(key, value) {
  function ListCache (line 10054) | function ListCache(entries) {
  function listCacheClear (line 10072) | function listCacheClear() {
  function listCacheDelete (line 10086) | function listCacheDelete(key) {
  function listCacheGet (line 10112) | function listCacheGet(key) {
  function listCacheHas (line 10128) | function listCacheHas(key) {
  function listCacheSet (line 10142) | function listCacheSet(key, value) {
  function MapCache (line 10171) | function MapCache(entries) {
  function mapCacheClear (line 10189) | function mapCacheClear() {
  function mapCacheDelete (line 10207) | function mapCacheDelete(key) {
  function mapCacheGet (line 10222) | function mapCacheGet(key) {
  function mapCacheHas (line 10235) | function mapCacheHas(key) {
  function mapCacheSet (line 10249) | function mapCacheSet(key, value) {
  function SetCache (line 10275) | function SetCache(values) {
  function setCacheAdd (line 10295) | function setCacheAdd(value) {
  function setCacheHas (line 10309) | function setCacheHas(value) {
  function Stack (line 10326) | function Stack(entries) {
  function stackClear (line 10338) | function stackClear() {
  function stackDelete (line 10352) | function stackDelete(key) {
  function stackGet (line 10369) | function stackGet(key) {
  function stackHas (line 10382) | function stackHas(key) {
  function stackSet (line 10396) | function stackSet(key, value) {
  function arrayLikeKeys (line 10429) | function arrayLikeKeys(value, inherited) {
  function arraySample (line 10463) | function arraySample(array) {
  function arraySampleSize (line 10476) | function arraySampleSize(array, n) {
  function arrayShuffle (line 10487) | function arrayShuffle(array) {
  function assignMergeValue (line 10500) | function assignMergeValue(object, key, value) {
  function assignValue (line 10517) | function assignValue(object, key, value) {
  function assocIndexOf (line 10533) | function assocIndexOf(array, key) {
  function baseAggregator (line 10554) | function baseAggregator(collection, setter, iteratee, accumulator) {
  function baseAssign (line 10570) | function baseAssign(object, source) {
  function baseAssignIn (line 10583) | function baseAssignIn(object, source) {
  function baseAssignValue (line 10596) | function baseAssignValue(object, key, value) {
  function baseAt (line 10617) | function baseAt(object, paths) {
  function baseClamp (line 10638) | function baseClamp(number, lower, upper) {
  function baseClone (line 10666) | function baseClone(value, bitmask, customizer, key, object, stack) {
  function baseConforms (line 10749) | function baseConforms(source) {
  function baseConformsTo (line 10764) | function baseConformsTo(object, source, props) {
  function baseDelay (line 10792) | function baseDelay(func, wait, args) {
  function baseDifference (line 10810) | function baseDifference(array, values, iteratee, comparator) {
  function baseEvery (line 10884) | function baseEvery(collection, predicate) {
  function baseExtremum (line 10903) | function baseExtremum(array, iteratee, comparator) {
  function baseFill (line 10932) | function baseFill(array, value, start, end) {
  function baseFilter (line 10958) | function baseFilter(collection, predicate) {
  function baseFlatten (line 10979) | function baseFlatten(array, depth, predicate, isStrict, result) {
  function baseForOwn (line 11035) | function baseForOwn(object, iteratee) {
  function baseForOwnRight (line 11047) | function baseForOwnRight(object, iteratee) {
  function baseFunctions (line 11060) | function baseFunctions(object, props) {
  function baseGet (line 11074) | function baseGet(object, path) {
  function baseGetAllKeys (line 11097) | function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  function baseGetTag (line 11109) | function baseGetTag(value) {
  function baseGt (line 11127) | function baseGt(value, other) {
  function baseHas (line 11139) | function baseHas(object, key) {
  function baseHasIn (line 11151) | function baseHasIn(object, key) {
  function baseInRange (line 11164) | function baseInRange(number, start, end) {
  function baseIntersection (line 11178) | function baseIntersection(arrays, iteratee, comparator) {
  function baseInverter (line 11242) | function baseInverter(object, setter, iteratee, accumulator) {
  function baseInvoke (line 11259) | function baseInvoke(object, path, args) {
  function baseIsArguments (line 11273) | function baseIsArguments(value) {
  function baseIsArrayBuffer (line 11284) | function baseIsArrayBuffer(value) {
  function baseIsDate (line 11295) | function baseIsDate(value) {
  function baseIsEqual (line 11313) | function baseIsEqual(value, other, bitmask, customizer, stack) {
  function baseIsEqualDeep (line 11337) | function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, ...
  function baseIsMap (line 11389) | function baseIsMap(value) {
  function baseIsMatch (line 11403) | function baseIsMatch(object, source, matchData, customizer) {
  function baseIsNative (line 11455) | function baseIsNative(value) {
  function baseIsRegExp (line 11470) | function baseIsRegExp(value) {
  function baseIsSet (line 11481) | function baseIsSet(value) {
  function baseIsTypedArray (line 11492) | function baseIsTypedArray(value) {
  function baseIteratee (line 11504) | function baseIteratee(value) {
  function baseKeys (line 11528) | function baseKeys(object) {
  function baseKeysIn (line 11548) | function baseKeysIn(object) {
  function baseLt (line 11572) | function baseLt(value, other) {
  function baseMap (line 11584) | function baseMap(collection, iteratee) {
  function baseMatches (line 11601) | function baseMatches(source) {
  function baseMatchesProperty (line 11619) | function baseMatchesProperty(path, srcValue) {
  function baseMerge (line 11642) | function baseMerge(object, source, srcIndex, customizer, stack) {
  function baseMergeDeep (line 11679) | function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customi...
  function baseNth (line 11749) | function baseNth(array, n) {
  function baseOrderBy (line 11767) | function baseOrderBy(collection, iteratees, orders) {
  function basePick (line 11805) | function basePick(object, paths) {
  function basePickBy (line 11820) | function basePickBy(object, paths, predicate) {
  function basePropertyDeep (line 11843) | function basePropertyDeep(path) {
  function basePullAll (line 11860) | function basePullAll(array, values, iteratee, comparator) {
  function basePullAt (line 11896) | function basePullAt(array, indexes) {
  function baseRandom (line 11923) | function baseRandom(lower, upper) {
  function baseRange (line 11938) | function baseRange(start, end, step, fromRight) {
  function baseRepeat (line 11958) | function baseRepeat(string, n) {
  function baseRest (line 11986) | function baseRest(func, start) {
  function baseSample (line 11997) | function baseSample(collection) {
  function baseSampleSize (line 12009) | function baseSampleSize(collection, n) {
  function baseSet (line 12024) | function baseSet(object, path, value, customizer) {
  function baseShuffle (line 12095) | function baseShuffle(collection) {
  function baseSlice (line 12108) | function baseSlice(array, start, end) {
  function baseSome (line 12138) | function baseSome(collection, predicate) {
  function baseSortedIndex (line 12160) | function baseSortedIndex(array, value, retHighest) {
  function baseSortedIndexBy (line 12194) | function baseSortedIndexBy(array, value, iteratee, retHighest) {
  function baseSortedUniq (line 12246) | function baseSortedUniq(array, iteratee) {
  function baseToNumber (line 12272) | function baseToNumber(value) {
  function baseToString (line 12290) | function baseToString(value) {
  function baseUniq (line 12315) | function baseUniq(array, iteratee, comparator) {
  function baseUnset (line 12375) | function baseUnset(object, path) {
  function baseUpdate (line 12391) | function baseUpdate(object, path, updater, customizer) {
  function baseWhile (line 12406) | function baseWhile(array, predicate, isDrop, fromRight) {
  function baseWrapperValue (line 12428) | function baseWrapperValue(value, actions) {
  function baseXor (line 12448) | function baseXor(arrays, iteratee, comparator) {
  function baseZipObject (line 12478) | function baseZipObject(props, values, assignFunc) {
  function castArrayLikeObject (line 12498) | function castArrayLikeObject(value) {
  function castFunction (line 12509) | function castFunction(value) {
  function castPath (line 12521) | function castPath(value, object) {
  function castSlice (line 12548) | function castSlice(array, start, end) {
  function cloneBuffer (line 12572) | function cloneBuffer(buffer, isDeep) {
  function cloneArrayBuffer (line 12590) | function cloneArrayBuffer(arrayBuffer) {
  function cloneDataView (line 12604) | function cloneDataView(dataView, isDeep) {
  function cloneRegExp (line 12616) | function cloneRegExp(regexp) {
  function cloneSymbol (line 12629) | function cloneSymbol(symbol) {
  function cloneTypedArray (line 12641) | function cloneTypedArray(typedArray, isDeep) {
  function compareAscending (line 12654) | function compareAscending(value, other) {
  function compareMultiple (line 12698) | function compareMultiple(object, other, orders) {
  function composeArgs (line 12736) | function composeArgs(args, partials, holders, isCurried) {
  function composeArgsRight (line 12771) | function composeArgsRight(args, partials, holders, isCurried) {
  function copyArray (line 12805) | function copyArray(source, array) {
  function copyObject (line 12826) | function copyObject(source, props, object, customizer) {
  function copySymbols (line 12860) | function copySymbols(source, object) {
  function copySymbolsIn (line 12872) | function copySymbolsIn(source, object) {
  function createAggregator (line 12884) | function createAggregator(setter, initializer) {
  function createAssigner (line 12900) | function createAssigner(assigner) {
  function createBaseEach (line 12934) | function createBaseEach(eachFunc, fromRight) {
  function createBaseFor (line 12962) | function createBaseFor(fromRight) {
  function createBind (line 12989) | function createBind(func, bitmask, thisArg) {
  function createCaseFirst (line 13007) | function createCaseFirst(methodName) {
  function createCompounder (line 13034) | function createCompounder(callback) {
  function createCtor (line 13048) | function createCtor(Ctor) {
  function createCurry (line 13082) | function createCurry(func, bitmask, arity) {
  function createFind (line 13117) | function createFind(findIndexFunc) {
  function createFlow (line 13137) | function createFlow(fromRight) {
  function createHybrid (line 13210) | function createHybrid(func, bitmask, thisArg, partials, holders, partial...
  function createInverter (line 13272) | function createInverter(setter, toIteratee) {
  function createMathOperation (line 13286) | function createMathOperation(operator, defaultValue) {
  function createOver (line 13319) | function createOver(arrayFunc) {
  function createPadding (line 13340) | function createPadding(length, chars) {
  function createPartial (line 13365) | function createPartial(func, bitmask, thisArg, partials) {
  function createRange (line 13395) | function createRange(fromRight) {
  function createRelationalOperation (line 13420) | function createRelationalOperation(operator) {
  function createRecurry (line 13447) | function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, pa...
  function createRound (line 13480) | function createRound(methodName) {
  function createToPairs (line 13516) | function createToPairs(keysFunc) {
  function createWrap (line 13554) | function createWrap(func, bitmask, thisArg, partials, holders, argPos, a...
  function customDefaultsAssignIn (line 13621) | function customDefaultsAssignIn(objValue, srcValue, key, object) {
  function customDefaultsMerge (line 13643) | function customDefaultsMerge(objValue, srcValue, key, object, source, st...
  function customOmitClone (line 13662) | function customOmitClone(value) {
  function equalArrays (line 13679) | function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  function equalByTag (line 13758) | function equalByTag(object, other, tag, bitmask, customizer, equalFunc, ...
  function equalObjects (line 13836) | function equalObjects(object, other, bitmask, customizer, equalFunc, sta...
  function flatRest (line 13908) | function flatRest(func) {
  function getAllKeys (line 13919) | function getAllKeys(object) {
  function getAllKeysIn (line 13931) | function getAllKeysIn(object) {
  function getFuncName (line 13953) | function getFuncName(func) {
  function getHolder (line 13975) | function getHolder(func) {
  function getIteratee (line 13991) | function getIteratee() {
  function getMapData (line 14005) | function getMapData(map, key) {
  function getMatchData (line 14019) | function getMatchData(object) {
  function getNative (line 14040) | function getNative(object, key) {
  function getRawTag (line 14052) | function getRawTag(value) {
  function getView (line 14148) | function getView(start, end, transforms) {
  function getWrapDetails (line 14173) | function getWrapDetails(source) {
  function hasPath (line 14187) | function hasPath(object, path, hasFunc) {
  function initCloneArray (line 14216) | function initCloneArray(array) {
  function initCloneObject (line 14235) | function initCloneObject(object) {
  function initCloneByTag (line 14253) | function initCloneByTag(object, tag, isDeep) {
  function insertWrapDetails (line 14297) | function insertWrapDetails(source, details) {
  function isFlattenable (line 14315) | function isFlattenable(value) {
  function isIndex (line 14328) | function isIndex(value, length) {
  function isIterateeCall (line 14348) | function isIterateeCall(value, index, object) {
  function isKey (line 14370) | function isKey(value, object) {
  function isKeyable (line 14390) | function isKeyable(value) {
  function isLaziable (line 14405) | function isLaziable(func) {
  function isMasked (line 14426) | function isMasked(func) {
  function isPrototype (line 14446) | function isPrototype(value) {
  function isStrictComparable (line 14461) | function isStrictComparable(value) {
  function matchesStrictComparable (line 14474) | function matchesStrictComparable(key, srcValue) {
  function memoizeCapped (line 14492) | function memoizeCapped(func) {
  function mergeData (line 14520) | function mergeData(data, source) {
  function nativeKeysIn (line 14584) | function nativeKeysIn(object) {
  function objectToString (line 14601) | function objectToString(value) {
  function overRest (line 14614) | function overRest(func, start, transform) {
  function parent (line 14643) | function parent(object, path) {
  function reorder (line 14657) | function reorder(array, indexes) {
  function safeGet (line 14677) | function safeGet(object, key) {
  function setWrapToString (line 14737) | function setWrapToString(wrapper, reference, bitmask) {
  function shortOut (line 14751) | function shortOut(func) {
  function shuffleSelf (line 14779) | function shuffleSelf(array, size) {
  function toKey (line 14821) | function toKey(value) {
  function toSource (line 14836) | function toSource(func) {
  function updateWrapDetails (line 14856) | function updateWrapDetails(details, bitmask) {
  function wrapperClone (line 14873) | function wrapperClone(wrapper) {
  function chunk (line 14907) | function chunk(array, size, guard) {
  function compact (line 14942) | function compact(array) {
  function concat (line 14979) | function concat() {
  function drop (line 15115) | function drop(array, n, guard) {
  function dropRight (line 15149) | function dropRight(array, n, guard) {
  function dropRightWhile (line 15194) | function dropRightWhile(array, predicate) {
  function dropWhile (line 15235) | function dropWhile(array, predicate) {
  function fill (line 15270) | function fill(array, value, start, end) {
  function findIndex (line 15317) | function findIndex(array, predicate, fromIndex) {
  function findLastIndex (line 15364) | function findLastIndex(array, predicate, fromIndex) {
  function flatten (line 15393) | function flatten(array) {
  function flattenDeep (line 15412) | function flattenDeep(array) {
  function flattenDepth (line 15437) | function flattenDepth(array, depth) {
  function fromPairs (line 15461) | function fromPairs(pairs) {
  function head (line 15491) | function head(array) {
  function indexOf (line 15518) | function indexOf(array, value, fromIndex) {
  function initial (line 15544) | function initial(array) {
  function join (line 15659) | function join(array, separator) {
  function last (line 15677) | function last(array) {
  function lastIndexOf (line 15703) | function lastIndexOf(array, value, fromIndex) {
  function nth (line 15739) | function nth(array, n) {
  function pullAll (line 15788) | function pullAll(array, values) {
  function pullAllBy (line 15817) | function pullAllBy(array, values, iteratee) {
  function pullAllWith (line 15846) | function pullAllWith(array, values, comparator) {
  function remove (line 15915) | function remove(array, predicate) {
  function reverse (line 15959) | function reverse(array) {
  function slice (line 15979) | function slice(array, start, end) {
  function sortedIndex (line 16012) | function sortedIndex(array, value) {
  function sortedIndexBy (line 16041) | function sortedIndexBy(array, value, iteratee) {
  function sortedIndexOf (line 16061) | function sortedIndexOf(array, value) {
  function sortedLastIndex (line 16090) | function sortedLastIndex(array, value) {
  function sortedLastIndexBy (line 16119) | function sortedLastIndexBy(array, value, iteratee) {
  function sortedLastIndexOf (line 16139) | function sortedLastIndexOf(array, value) {
  function sortedUniq (line 16165) | function sortedUniq(array) {
  function sortedUniqBy (line 16187) | function sortedUniqBy(array, iteratee) {
  function tail (line 16207) | function tail(array) {
  function take (line 16237) | function take(array, n, guard) {
  function takeRight (line 16270) | function takeRight(array, n, guard) {
  function takeRightWhile (line 16315) | function takeRightWhile(array, predicate) {
  function takeWhile (line 16356) | function takeWhile(array, predicate) {
  function uniq (line 16458) | function uniq(array) {
  function uniqBy (line 16485) | function uniqBy(array, iteratee) {
  function uniqWith (line 16509) | function uniqWith(array, comparator) {
  function unzip (line 16533) | function unzip(array) {
  function unzipWith (line 16570) | function unzipWith(array, iteratee) {
  function zipObject (line 16723) | function zipObject(props, values) {
  function zipObjectDeep (line 16742) | function zipObjectDeep(props, values) {
  function chain (line 16805) | function chain(value) {
  function tap (line 16834) | function tap(value, interceptor) {
  function thru (line 16862) | function thru(value, interceptor) {
  function wrapperChain (line 16933) | function wrapperChain() {
  function wrapperCommit (line 16963) | function wrapperCommit() {
  function wrapperNext (line 16989) | function wrapperNext() {
  function wrapperToIterator (line 17017) | function wrapperToIterator() {
  function wrapperPlant (line 17045) | function wrapperPlant(value) {
  function wrapperReverse (line 17085) | function wrapperReverse() {
  function wrapperValue (line 17117) | function wrapperValue() {
  function every (line 17194) | function every(collection, predicate, guard) {
  function filter (line 17243) | function filter(collection, predicate) {
  function flatMap (line 17328) | function flatMap(collection, iteratee) {
  function flatMapDeep (line 17352) | function flatMapDeep(collection, iteratee) {
  function flatMapDepth (line 17377) | function flatMapDepth(collection, iteratee, depth) {
  function forEach (line 17412) | function forEach(collection, iteratee) {
  function forEachRight (line 17437) | function forEachRight(collection, iteratee) {
  function includes (line 17503) | function includes(collection, value, fromIndex, guard) {
  function map (line 17624) | function map(collection, iteratee) {
  function orderBy (line 17658) | function orderBy(collection, iteratees, orders, guard) {
  function reduce (line 17749) | function reduce(collection, iteratee, accumulator) {
  function reduceRight (line 17778) | function reduceRight(collection, iteratee, accumulator) {
  function reject (line 17819) | function reject(collection, predicate) {
  function sample (line 17838) | function sample(collection) {
  function sampleSize (line 17863) | function sampleSize(collection, n, guard) {
  function shuffle (line 17888) | function shuffle(collection) {
  function size (line 17914) | function size(collection) {
  function some (line 17964) | function some(collection, predicate, guard) {
  function after (line 18062) | function after(n, func) {
  function ary (line 18091) | function ary(func, n, guard) {
  function before (line 18114) | function before(n, func) {
  function curry (line 18270) | function curry(func, arity, guard) {
  function curryRight (line 18315) | function curryRight(func, arity, guard) {
  function debounce (line 18376) | function debounce(func, wait, options) {
  function flip (line 18564) | function flip(func) {
  function memoize (line 18612) | function memoize(func, resolver) {
  function negate (line 18655) | function negate(predicate) {
  function once (line 18689) | function once(func) {
  function rest (line 18867) | function rest(func, start) {
  function spread (line 18909) | function spread(func, start) {
  function throttle (line 18969) | function throttle(func, wait, options) {
  function unary (line 19002) | function unary(func) {
  function wrap (line 19028) | function wrap(value, wrapper) {
  function castArray (line 19067) | function castArray() {
  function clone (line 19101) | function clone(value) {
  function cloneWith (line 19136) | function cloneWith(value, customizer) {
  function cloneDeep (line 19159) | function cloneDeep(value) {
  function cloneDeepWith (line 19191) | function cloneDeepWith(value, customizer) {
  function conformsTo (line 19220) | function conformsTo(object, source) {
  function eq (line 19256) | function eq(value, other) {
  function isArrayLike (line 19404) | function isArrayLike(value) {
  function isArrayLikeObject (line 19433) | function isArrayLikeObject(value) {
  function isBoolean (line 19454) | function isBoolean(value) {
  function isElement (line 19514) | function isElement(value) {
  function isEmpty (line 19551) | function isEmpty(value) {
  function isEqual (line 19603) | function isEqual(value, other) {
  function isEqualWith (line 19639) | function isEqualWith(value, other, customizer) {
  function isError (line 19663) | function isError(value) {
  function isFinite (line 19698) | function isFinite(value) {
  function isFunction (line 19719) | function isFunction(value) {
  function isInteger (line 19755) | function isInteger(value) {
  function isLength (line 19785) | function isLength(value) {
  function isObject (line 19815) | function isObject(value) {
  function isObjectLike (line 19844) | function isObjectLike(value) {
  function isMatch (line 19895) | function isMatch(object, source) {
  function isMatchWith (line 19931) | function isMatchWith(object, source, customizer) {
  function isNaN (line 19964) | function isNaN(value) {
  function isNative (line 19997) | function isNative(value) {
  function isNull (line 20021) | function isNull(value) {
  function isNil (line 20045) | function isNil(value) {
  function isNumber (line 20075) | function isNumber(value) {
  function isPlainObject (line 20108) | function isPlainObject(value) {
  function isSafeInteger (line 20167) | function isSafeInteger(value) {
  function isString (line 20207) | function isString(value) {
  function isSymbol (line 20229) | function isSymbol(value) {
  function isUndefined (line 20270) | function isUndefined(value) {
  function isWeakMap (line 20291) | function isWeakMap(value) {
  function isWeakSet (line 20312) | function isWeakSet(value) {
  function toArray (line 20391) | function toArray(value) {
  function toFinite (line 20430) | function toFinite(value) {
  function toInteger (line 20468) | function toInteger(value) {
  function toLength (line 20502) | function toLength(value) {
  function toNumber (line 20529) | function toNumber(value) {
  function toPlainObject (line 20574) | function toPlainObject(value) {
  function toSafeInteger (line 20602) | function toSafeInteger(value) {
  function toString (line 20629) | function toString(value) {
  function create (line 20832) | function create(prototype, properties) {
  function findKey (line 20948) | function findKey(object, predicate) {
  function findLastKey (line 20987) | function findLastKey(object, predicate) {
  function forIn (line 21019) | function forIn(object, iteratee) {
  function forInRight (line 21051) | function forInRight(object, iteratee) {
  function forOwn (line 21085) | function forOwn(object, iteratee) {
  function forOwnRight (line 21115) | function forOwnRight(object, iteratee) {
  function functions (line 21142) | function functions(object) {
  function functionsIn (line 21169) | function functionsIn(object) {
  function get (line 21198) | function get(object, path, defaultValue) {
  function has (line 21230) | function has(object, path) {
  function hasIn (line 21260) | function hasIn(object, path) {
  function keys (line 21378) | function keys(object) {
  function keysIn (line 21405) | function keysIn(object) {
  function mapKeys (line 21430) | function mapKeys(object, iteratee) {
  function mapValues (line 21468) | function mapValues(object, iteratee) {
  function omitBy (line 21610) | function omitBy(object, predicate) {
  function pickBy (line 21653) | function pickBy(object, predicate) {
  function result (line 21695) | function result(object, path, defaultValue) {
  function set (line 21745) | function set(object, path, value) {
  function setWith (line 21773) | function setWith(object, path, value, customizer) {
  function transform (line 21860) | function transform(object, iteratee, accumulator) {
  function unset (line 21910) | function unset(object, path) {
  function update (line 21941) | function update(object, path, updater) {
  function updateWith (line 21969) | function updateWith(object, path, updater, customizer) {
  function values (line 22000) | function values(object) {
  function valuesIn (line 22028) | function valuesIn(object) {
  function clamp (line 22053) | function clamp(number, lower, upper) {
  function inRange (line 22107) | function inRange(number, start, end) {
  function random (line 22150) | function random(lower, upper, floating) {
  function capitalize (line 22231) | function capitalize(string) {
  function deburr (line 22253) | function deburr(string) {
  function endsWith (line 22281) | function endsWith(string, target, position) {
  function escape (line 22323) | function escape(string) {
  function escapeRegExp (line 22345) | function escapeRegExp(string) {
  function pad (line 22443) | function pad(string, length, chars) {
  function padEnd (line 22482) | function padEnd(string, length, chars) {
  function padStart (line 22515) | function padStart(string, length, chars) {
  function parseInt (line 22549) | function parseInt(string, radix, guard) {
  function repeat (line 22580) | function repeat(string, n, guard) {
  function replace (line 22608) | function replace() {
  function split (line 22659) | function split(string, separator, limit) {
  function startsWith (line 22728) | function startsWith(string, target, position) {
  function template (line 22842) | function template(string, options, guard) {
  function toLower (line 22980) | function toLower(value) {
  function toUpper (line 23005) | function toUpper(value) {
  function trim (line 23031) | function trim(string, chars, guard) {
  function trimEnd (line 23066) | function trimEnd(string, chars, guard) {
  function trimStart (line 23099) | function trimStart(string, chars, guard) {
  function truncate (line 23150) | function truncate(string, options) {
  function unescape (line 23225) | function unescape(string) {
  function words (line 23294) | function words(string, pattern, guard) {
  function cond (line 23399) | function cond(pairs) {
  function conforms (line 23445) | function conforms(source) {
  function constant (line 23468) | function constant(value) {
  function defaultTo (line 23494) | function defaultTo(value, defaultValue) {
  function identity (line 23561) | function identity(value) {
  function iteratee (line 23607) | function iteratee(func) {
  function matches (line 23646) | function matches(source) {
  function matchesProperty (line 23683) | function matchesProperty(path, srcValue) {
  function mixin (line 23782) | function mixin(object, source, options) {
  function noConflict (line 23831) | function noConflict() {
  function noop (line 23850) | function noop() {
  function nthArg (line 23874) | function nthArg(n) {
  function property (line 23986) | function property(path) {
  function propertyOf (line 24011) | function propertyOf(object) {
  function stubArray (line 24116) | function stubArray() {
  function stubFalse (line 24133) | function stubFalse() {
  function stubObject (line 24155) | function stubObject() {
  function stubString (line 24172) | function stubString() {
  function stubTrue (line 24189) | function stubTrue() {
  function times (line 24212) | function times(n, iteratee) {
  function toPath (line 24247) | function toPath(value) {
  function uniqueId (line 24271) | function uniqueId(prefix) {
  function max (line 24380) | function max(array) {
  function maxBy (line 24409) | function maxBy(array, iteratee) {
  function mean (line 24429) | function mean(array) {
  function meanBy (line 24456) | function meanBy(array, iteratee) {
  function min (line 24478) | function min(array) {
  function minBy (line 24507) | function minBy(array, iteratee) {
  function sum (line 24588) | function sum(array) {
  function sumBy (line 24617) | function sumBy(array, iteratee) {
  function once (line 25241) | function once (fn) {
  function onceStrict (line 25251) | function onceStrict (fn) {
  function normalize (line 25281) | function normalize(str) { // fix bug in v8
  function findStatus (line 25285) | function findStatus(val) {
  function countSymbols (line 25307) | function countSymbols(string) {
  function mapChars (line 25315) | function mapChars(domain_name, useSTD3, processing_option) {
  function validateLabel (line 25370) | function validateLabel(label, processing_option) {
  function processing (line 25403) | function processing(domain_name, useSTD3, processing_option) {
  function httpOverHttp (line 25497) | function httpOverHttp(options) {
  function httpsOverHttp (line 25503) | function httpsOverHttp(options) {
  function httpOverHttps (line 25511) | function httpOverHttps(options) {
  function httpsOverHttps (line 25517) | function httpsOverHttps(options) {
  function TunnelingAgent (line 25526) | function TunnelingAgent(options) {
  function onFree (line 25569) | function onFree() {
  function onCloseOrRemove (line 25573) | function onCloseOrRemove(err) {
  function onResponse (line 25613) | function onResponse(res) {
  function onUpgrade (line 25618) | function onUpgrade(res, socket, head) {
  function onConnect (line 25625) | function onConnect(res, socket, head) {
  function onError (line 25654) | function onError(cause) {
  function createSecureSocket (line 25684) | function createSecureSocket(options, cb) {
  function toOptions (line 25701) | function toOptions(host, port, localAddress) {
  function mergeOptions (line 25712) | function mergeOptions(target) {
  function _interopRequireDefault (line 25830) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireDefault (line 25847) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function md5 (line 25849) | function md5(bytes) {
  function _interopRequireDefault (line 25892) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function parse (line 25894) | function parse(uuid) {
  function _interopRequireDefault (line 25959) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function rng (line 25965) | function rng() {
  function _interopRequireDefault (line 25990) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function sha1 (line 25992) | function sha1(bytes) {
  function _interopRequireDefault (line 26020) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function stringify (line 26032) | function stringify(arr, offset = 0) {
  function _interopRequireDefault (line 26068) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function v1 (line 26082) | function v1(options, buf, offset) {
  function _interopRequireDefault (line 26182) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireDefault (line 26206) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function stringToBytes (line 26208) | function stringToBytes(str) {
  function _default (line 26225) | function _default(name, version, hashfunc) {
  function _interopRequireDefault (line 26290) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function v4 (line 26292) | function v4(options, buf, offset) {
  function _interopRequireDefault (line 26334) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireDefault (line 26355) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function validate (line 26357) | function validate(uuid) {
  function _interopRequireDefault (line 26379) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function version (line 26381) | function version(uuid) {
  function sign (line 26403) | function sign(x) {
  function evenRound (line 26407) | function evenRound(x) {
  function createNumberConversion (line 26416) | function createNumberConversion(bitLength, typeOpts) {
  method constructor (line 26599) | constructor(constructorArgs) {
  method href (line 26621) | get href() {
  method href (line 26625) | set href(v) {
  method origin (line 26634) | get origin() {
  method protocol (line 26638) | get protocol() {
  method protocol (line 26642) | set protocol(v) {
  method username (line 26646) | get username() {
  method username (line 26650) | set username(v) {
  method password (line 26658) | get password() {
  method password (line 26662) | set password(v) {
  method host (line 26670) | get host() {
  method host (line 26684) | set host(v) {
  method hostname (line 26692) | get hostname() {
  method hostname (line 26700) | set hostname(v) {
  method port (line 26708) | get port() {
  method port (line 26716) | set port(v) {
  method pathname (line 26728) | get pathname() {
  method pathname (line 26740) | set pathname(v) {
  method search (line 26749) | get search() {
  method search (line 26757) | set search(v) {
  method hash (line 26772) | get hash() {
  method hash (line 26780) | set hash(v) {
  method toJSON (line 26791) | toJSON() {
  function URL (line 26811) | function URL(url) {
  method get (line 26841) | get() {
  method set (line 26844) | set(V) {
  method get (line 26860) | get() {
  method get (line 26868) | get() {
  method set (line 26871) | set(V) {
  method get (line 26880) | get() {
  method set (line 26883) | set(V) {
  method get (line 26892) | get() {
  method set (line 26895) | set(V) {
  method get (line 26904) | get() {
  method set (line 26907) | set(V) {
  method get (line 26916) | get() {
  method set (line 26919) | set(V) {
  method get (line 26928) | get() {
  method set (line 26931) | set(V) {
  method get (line 26940) | get() {
  method set (line 26943) | set(V) {
  method get (line 26952) | get() {
  method set (line 26955) | set(V) {
  method get (line 26964) | get() {
  method set (line 26967) | set(V) {
  method is (line 26977) | is(obj) {
  method create (line 26980) | create(constructorArgs, privateData) {
  method setup (line 26985) | setup(obj, constructorArgs, privateData) {
  function countSymbols (line 27042) | function countSymbols(str) {
  function at (line 27046) | function at(input, idx) {
  function isASCIIDigit (line 27051) | function isASCIIDigit(c) {
  function isASCIIAlpha (line 27055) | function isASCIIAlpha(c) {
  function isASCIIAlphanumeric (line 27059) | function isASCIIAlphanumeric(c) {
  function isASCIIHex (line 27063) | function isASCIIHex(c) {
  function isSingleDot (line 27067) | function isSingleDot(buffer) {
  function isDoubleDot (line 27071) | function isDoubleDot(buffer) {
  function isWindowsDriveLetterCodePoints (line 27076) | function isWindowsDriveLetterCodePoints(cp1, cp2) {
  function isWindowsDriveLetterString (line 27080) | function isWindowsDriveLetterString(string) {
  function isNormalizedWindowsDriveLetterString (line 27084) | function isNormalizedWindowsDriveLetterString(string) {
  function containsForbiddenHostCodePoint (line 27088) | function containsForbiddenHostCodePoint(string) {
  function containsForbiddenHostCodePointExcludingPercent (line 27092) | function containsForbiddenHostCodePointExcludingPercent(string) {
  function isSpecialScheme (line 27096) | function isSpecialScheme(scheme) {
  function isSpecial (line 27100) | function isSpecial(url) {
  function defaultPort (line 27104) | function defaultPort(scheme) {
  function percentEncode (line 27108) | function percentEncode(c) {
  function utf8PercentEncode (line 27117) | function utf8PercentEncode(c) {
  function utf8PercentDecode (line 27129) | function utf8PercentDecode(str) {
  function isC0ControlPercentEncode (line 27145) | function isC0ControlPercentEncode(c) {
  function isPathPercentEncode (line 27150) | function isPathPercentEncode(c) {
  function isUserinfoPercentEncode (line 27156) | function isUserinfoPercentEncode(c) {
  function percentEncodeChar (line 27160) | function percentEncodeChar(c, encodeSetPredicate) {
  function parseIPv4Number (line 27170) | function parseIPv4Number(input) {
  function parseIPv4 (line 27193) | function parseIPv4(input) {
  function serializeIPv4 (line 27238) | function serializeIPv4(address) {
  function parseIPv6 (line 27253) | function parseIPv6(input) {
  function serializeIPv6 (line 27382) | function serializeIPv6(address) {
  function parseHost (line 27412) | function parseHost(input, isSpecialArg) {
  function parseOpaqueHost (line 27443) | function parseOpaqueHost(input) {
  function findLongestZeroSequence (line 27456) | function findLongestZeroSequence(arr) {
  function serializeHost (line 27491) | function serializeHost(host) {
  function trimControlChars (line 27504) | function trimControlChars(url) {
  function trimTabAndNewline (line 27508) | function trimTabAndNewline(url) {
  function shortenPath (line 27512) | function shortenPath(url) {
  function includesCredentials (line 27524) | function includesCredentials(url) {
  function cannotHaveAUsernamePasswordPort (line 27528) | function cannotHaveAUsernamePasswordPort(url) {
  function isNormalizedWindowsDriveLetter (line 27532) | function isNormalizedWindowsDriveLetter(string) {
  function URLStateMachine (line 27536) | function URLStateMachine(input, base, encodingOverride, url, stateOverri...
  function serializeURL (line 28194) | function serializeURL(url, excludeFragment) {
  function serializeOrigin (line 28235) | function serializeOrigin(tuple) {
  function wrappy (line 28364) | function wrappy (fn, cb) {
  function __nccwpck_require__ (line 28537) | function __nccwpck_require__(moduleId) {

FILE: src/addEmptyCommit.ts
  function addEmptyCommit (line 9) | async function addEmptyCommit() {

FILE: src/checkAllowList.ts
  function isUserNotInAllowList (line 8) | function isUserNotInAllowList(committer) {
  function checkAllowList (line 23) | function checkAllowList(committers: CommittersDetails[]): CommittersDeta...

FILE: src/graphql.ts
  function getCommitters (line 7) | async function getCommitters(): Promise<CommittersDetails[]> {

FILE: src/interfaces.ts
  type CommitterMap (line 1) | interface CommitterMap {
  type ReactedCommitterMap (line 6) | interface ReactedCommitterMap {
  type CommentedCommitterMap (line 11) | interface CommentedCommitterMap {
  type CommittersDetails (line 16) | interface CommittersDetails {
  type LabelName (line 26) | interface LabelName {
  type CommittersCommentDetails (line 30) | interface CommittersCommentDetails {
  type ClafileContentAndSha (line 38) | interface ClafileContentAndSha {

FILE: src/main.ts
  function run (line 8) | async function run() {

FILE: src/octokit.ts
  function getDefaultOctokitClient (line 10) | function getDefaultOctokitClient() {
  function getPATOctokit (line 13) | function getPATOctokit() {
  function isPersonalAccessTokenPresent (line 22) | function isPersonalAccessTokenPresent(): boolean {

FILE: src/persistence/persistence.ts
  function getFileContent (line 9) | async function getFileContent(): Promise<any> {
  function createFile (line 22) | async function createFile(contentBinary): Promise<any> {
  function updateFile (line 38) | async function updateFile(
  function isRemoteRepoOrOrgConfigured (line 71) | function isRemoteRepoOrOrgConfigured(): boolean {

FILE: src/pullRerunRunner.ts
  function reRunLastWorkFlowIfRequired (line 7) | async function reRunLastWorkFlowIfRequired() {
  function getBranchOfPullRequest (line 30) | async function getBranchOfPullRequest(): Promise<string> {
  function getSelfWorkflowId (line 40) | async function getSelfWorkflowId(): Promise<number> {
  function listWorkflowRunsInBranch (line 70) | async function listWorkflowRunsInBranch(
  function reRunWorkflow (line 85) | async function reRunWorkflow(run: number): Promise<any> {
  function checkIfLastWorkFlowFailed (line 94) | async function checkIfLastWorkFlowFailed(run: number): Promise<boolean> {

FILE: src/pullrequest/pullRequestComment.ts
  function prCommentSetup (line 13) | async function prCommentSetup(committerMap: CommitterMap, committers: Co...
  function createComment (line 40) | async function createComment(signed: boolean, committerMap: CommitterMap...
  function updateComment (line 49) | async function updateComment(signed: boolean, committerMap: CommitterMap...
  function getComment (line 58) | async function getComment() {
  function prepareCommiterMap (line 74) | function prepareCommiterMap(committerMap: CommitterMap, reactedCommitter...
  function prepareAllSignedCommitters (line 86) | function prepareAllSignedCommitters(committerMap: CommitterMap, signedIn...

FILE: src/pullrequest/pullRequestCommentContent.ts
  function commentContent (line 7) | function commentContent(signed: boolean, committerMap: CommitterMap): st...
  function dco (line 16) | function dco(signed: boolean, committerMap: CommitterMap): string {
  function cla (line 61) | function cla(signed: boolean, committerMap: CommitterMap): string {

FILE: src/pullrequest/pullRequestLock.ts
  function lockPullRequest (line 5) | async function lockPullRequest() {

FILE: src/pullrequest/signatureComment.ts
  function signatureWithPRComment (line 8) | async function signatureWithPRComment(committerMap: CommitterMap, commit...
  function isCommentSignedByUser (line 57) | function isCommentSignedByUser(comment: string, commentAuthor: string): ...

FILE: src/setupClaCheck.ts
  function setupClaCheck (line 19) | async function setupClaCheck() {
  function getCLAFileContentandSHA (line 59) | async function getCLAFileContentandSHA(
  function createClaFileAndPRComment (line 83) | async function createClaFileAndPRComment(
  function prepareCommiterMap (line 113) | function prepareCommiterMap(

FILE: src/shared/pr-sign-comment.ts
  function getPrSignComment (line 3) | function getPrSignComment() {
Condensed preview — 38 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,329K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 64,
    "preview": "# These are supported funding model platforms\n\ngithub: ibakshay\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 399,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[BUG]\"\nlabels: bug\nassignees: ''\n\n---\n\n**Describe"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 622,
    "preview": "---\nname: Feature request\nabout: 'Please describe your feature request below:'\ntitle: \"[Feature]\"\nlabels: feature\nassign"
  },
  {
    "path": ".github/workflows/add-contributors-in-readme.yaml",
    "chars": 398,
    "preview": "name: Add Contributors to readme file\n\non:\n    push:\n        branches:\n            - master\n\njobs:\n    contrib-readme-jo"
  },
  {
    "path": ".github/workflows/assign-to-project.yaml",
    "chars": 469,
    "preview": "name: Auto Assign to Project(s)\n\non:\n  issues:\n    types: [opened]\nenv:\n  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\njob"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 2372,
    "preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
  },
  {
    "path": ".github/workflows/nodejs.yml",
    "chars": 1167,
    "preview": "name: build\n\non:\n  push:\n   branches:\n    - '*'\n   tags:\n    - '*'\n  pull_request:\n   branches:\n   - master\n\njobs:\n  bui"
  },
  {
    "path": ".gitignore",
    "chars": 50,
    "preview": "__tests__/runner/*\n.vscode\nnode_modules\nlib\n.idea\n"
  },
  {
    "path": ".prettierignore",
    "chars": 25,
    "preview": "dist/\nlib/\nnode_modules/\n"
  },
  {
    "path": ".prettierrc.json",
    "chars": 195,
    "preview": "{\n    \"printWidth\": 80,\n    \"tabWidth\": 2,\n    \"useTabs\": false,\n    \"semi\": false,\n    \"singleQuote\": true,\n    \"traili"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3369,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 7050,
    "preview": "# Contributing to CLA Assistant\n\nYou want to contribute to CLA Assistant? Welcome! Please read this document to understa"
  },
  {
    "path": "LICENSE",
    "chars": 10252,
    "preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
  },
  {
    "path": "README.md",
    "chars": 20697,
    "preview": "![build](https://github.com/cla-assistant/github-action/workflows/build/badge.svg)\n\n\n> [!IMPORTANT]\n> **This repository "
  },
  {
    "path": "SECURITY.md",
    "chars": 1229,
    "preview": "# Security Vulnerabilities\n\nThe CLA Assistant is built with security and data privacy in mind to ensure your data is saf"
  },
  {
    "path": "__tests__/main.test.ts",
    "chars": 2597,
    "preview": "import * as core from '@actions/core'\nimport * as github from '@actions/github'\nimport { context } from '@actions/github"
  },
  {
    "path": "__tests__/pullRequestLock.test.ts",
    "chars": 407,
    "preview": "import * as core from '@actions/core'\nimport * as github from '@actions/github'\nimport { context } from '@actions/github"
  },
  {
    "path": "action.yml",
    "chars": 2129,
    "preview": "name: \"CLA assistant lite\"\ndescription: \"An action to handle the Contributor License Agreement (CLA) and Developer Certi"
  },
  {
    "path": "dist/index.js",
    "chars": 1179672,
    "preview": "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 3661:\n/***/ (function(__unused_webpa"
  },
  {
    "path": "docs/contributors.md",
    "chars": 1156,
    "preview": "# Contributors\n\n### Checkin\n\n- Do checkin source (src)\n- Do checkin build output (lib)\n- Do checkin runtime node_modules"
  },
  {
    "path": "jest.config.js",
    "chars": 235,
    "preview": "module.exports = {\n  clearMocks: true,\n  moduleFileExtensions: ['js', 'ts'],\n  testEnvironment: 'node',\n  testMatch: ['*"
  },
  {
    "path": "package.json",
    "chars": 1122,
    "preview": "{\n  \"name\": \"github-action\",\n  \"version\": \"0.0.1\",\n  \"description\": \"GitHub Action for storing CLA signatures\",\n  \"main\""
  },
  {
    "path": "src/addEmptyCommit.ts",
    "chars": 2454,
    "preview": "import { octokit } from './octokit'\nimport { context } from '@actions/github'\n\nimport * as core from '@actions/core'\nimp"
  },
  {
    "path": "src/checkAllowList.ts",
    "chars": 884,
    "preview": "import { CommittersDetails } from './interfaces'\n\nimport * as _ from 'lodash'\nimport * as input from './shared/getInputs"
  },
  {
    "path": "src/graphql.ts",
    "chars": 2826,
    "preview": "import { octokit } from './octokit'\nimport { context } from '@actions/github'\nimport { CommittersDetails } from './inter"
  },
  {
    "path": "src/interfaces.ts",
    "chars": 969,
    "preview": "export interface CommitterMap {\n    signed: CommittersDetails[],\n    notSigned: CommittersDetails[],\n    unknown: Commit"
  },
  {
    "path": "src/main.ts",
    "chars": 743,
    "preview": "import {context} from '@actions/github'\nimport {setupClaCheck} from './setupClaCheck'\nimport {lockPullRequest} from './p"
  },
  {
    "path": "src/octokit.ts",
    "chars": 838,
    "preview": "import { getOctokit } from '@actions/github'\n\nimport * as core from '@actions/core'\n\nconst githubActionsDefaultToken = p"
  },
  {
    "path": "src/persistence/persistence.ts",
    "chars": 2821,
    "preview": "import { context } from '@actions/github'\n\nimport { ReactedCommitterMap } from '../interfaces'\nimport { GitHub } from '@"
  },
  {
    "path": "src/pullRerunRunner.ts",
    "chars": 2855,
    "preview": "import { context } from '@actions/github'\nimport { octokit } from './octokit'\n\nimport * as core from '@actions/core'\n\n//"
  },
  {
    "path": "src/pullrequest/pullRequestComment.ts",
    "chars": 4250,
    "preview": "import { octokit } from '../octokit'\nimport { context } from '@actions/github'\nimport signatureWithPRComment from './sig"
  },
  {
    "path": "src/pullrequest/pullRequestCommentContent.ts",
    "chars": 5519,
    "preview": "import {\n    CommitterMap\n} from '../interfaces'\nimport * as input from '../shared/getInputs'\nimport { getPrSignComment "
  },
  {
    "path": "src/pullrequest/pullRequestLock.ts",
    "chars": 677,
    "preview": "import { octokit } from '../octokit'\nimport * as core from '@actions/core'\nimport { context } from '@actions/github'\n\nex"
  },
  {
    "path": "src/pullrequest/signatureComment.ts",
    "chars": 3079,
    "preview": "import { octokit } from '../octokit'\nimport { context } from '@actions/github'\nimport { CommitterMap, CommittersDetails,"
  },
  {
    "path": "src/setupClaCheck.ts",
    "chars": 4002,
    "preview": "import * as core from '@actions/core'\nimport { context } from '@actions/github'\nimport { checkAllowList } from './checkA"
  },
  {
    "path": "src/shared/getInputs.ts",
    "chars": 1715,
    "preview": "import * as core from '@actions/core'\n\nexport const getRemoteRepoName = (): string => {\n  return core.getInput('remote-r"
  },
  {
    "path": "src/shared/pr-sign-comment.ts",
    "chars": 177,
    "preview": "import * as input from './getInputs'\n\nexport function getPrSignComment() {\n  return input.getCustomPrSignComment() || \"I"
  },
  {
    "path": "tsconfig.json",
    "chars": 447,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"outDir\": \"./lib\",\n    \"useUnknownInCatchVar"
  }
]

About this extraction

This page contains the full source code of the contributor-assistant/github-action GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 38 files (1.2 MB), approximately 357.6k tokens, and a symbol index with 1030 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!