diff --git a/.github/workflows/maintenance-changelog.yml b/.github/workflows/maintenance-changelog.yml new file mode 100644 index 0000000000..a4df84bffb --- /dev/null +++ b/.github/workflows/maintenance-changelog.yml @@ -0,0 +1,62 @@ +name: cherry-pick changelog from release branch into default branch + +on: + push: + tags: ['*.*'] + +permissions: + actions: write + issues: write + +jobs: + cherry_pick: + runs-on: ubuntu-latest + outputs: + failed_release_version: ${{ steps.cherry_pick_error.outputs.failed_release_version }} + steps: + - name: Get token + id: get_token + uses: tibdex/github-app-token@v2 + with: + app_id: ${{ secrets.MAINTENANCE_APP_ID }} + private_key: ${{ secrets.MAINTENANCE_APP_PEM }} + - uses: actions/checkout@v4 + with: + token: ${{ steps.get_token.outputs.app_token }} + fetch-depth: 0 + - name: Get tag name + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + - name: Get commit for tag + run: echo "TAG_COMMIT=$(git rev-list -n 1 ${{ env.RELEASE_VERSION }})" >> $GITHUB_ENV + - name: Cherry-pick CHANGELOG.md into ${{ github.event.repository.default_branch }} + run: | + git config user.email "github-actions@github.com" + git config user.name "github-actions" + git checkout ${{ github.event.repository.default_branch }} + git show ${{ env.TAG_COMMIT }} -- CHANGELOG.md | git apply - + git commit -a -m "chore: update changelog" + git push + - name: Handling error + if: ${{ failure() }} + id: cherry_pick_error + run: echo "failed_release_version=$(echo ${{ env.RELEASE_VERSION }})" >> $GITHUB_OUTPUT + + update_maintenance_issue: + runs-on: ubuntu-latest + needs: cherry_pick + if: always() && needs.cherry_pick.result == 'failure' + steps: + - run: echo ${{ needs.cherry_pick.outputs.failed_release_version }} + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + if: needs.cherry_pick.outputs.failed_release_version + with: + node-version-file: .nvmrc + - run: yarn install --frozen-lockfile --non-interactive + if: needs.cherry_pick.outputs.failed_release_version + - name: Update maintenance issue + if: needs.cherry_pick.outputs.failed_release_version + run: yarn ts-hooks scripts/update-maintenance-issue.ts + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + FAILED_RELEASE: ${{ needs.cherry_pick.outputs.failed_release_version }} diff --git a/.github/workflows/maintenance-cherry-pick.yml b/.github/workflows/maintenance-cherry-pick.yml new file mode 100644 index 0000000000..a0c45592e0 --- /dev/null +++ b/.github/workflows/maintenance-cherry-pick.yml @@ -0,0 +1,85 @@ +name: cherry-pick into target branches + +on: + pull_request: + types: [closed] + +permissions: + actions: write + issues: write + +jobs: + # Check if labels exist before executing the next job. + # We cannot use `if` because the matrix is evaluated before the `if` statement. + check_labels: + runs-on: ubuntu-latest + if: ${{ join(github.event.pull_request.labels) != '' }} + steps: + - run: echo Labels are not empty, continuing + + cherry_pick: + needs: [check_labels] + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true && + github.event.pull_request.user.login != 'renovate[bot]' + outputs: + failed_branches: ${{ steps.update_failed_branches.outputs.failed_branches }} + strategy: + matrix: + label: ${{ github.event.pull_request.labels.*.name }} + + steps: + - name: Get token + id: get_token + uses: tibdex/github-app-token@v2 + with: + app_id: ${{ secrets.MAINTENANCE_APP_ID }} + private_key: ${{ secrets.MAINTENANCE_APP_PEM }} + - name: Get branch name from label + id: branch_name + run: | + echo "branch=$(echo ${{ matrix.label }} | sed -n 's/target: \([0-9]*.x\).*/\1/p')" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v4 + if: steps.branch_name.outputs.branch + with: + token: ${{ steps.get_token.outputs.app_token }} + fetch-depth: 0 + + - name: Cherry-pick changes into ${{ steps.branch_name.outputs.branch }} + if: steps.branch_name.outputs.branch + run: | + git checkout ${{ steps.branch_name.outputs.branch }} + git -c user.name="github-actions" -c user.email="github-actions@github.com" cherry-pick ${{ github.sha }} + git push + + - name: Update failed branches + if: ${{ failure() }} + id: update_failed_branches + run: | + echo "failed_branches=$(echo ${{ steps.branch_name.outputs.branch }} ${{ steps.update_failed_branches.outputs.failed_branches}})" >> $GITHUB_OUTPUT + + update_maintenance_issue: + runs-on: ubuntu-latest + needs: cherry_pick + if: always() && needs.cherry_pick.result == 'failure' && + github.event.pull_request.user.login != 'renovate[bot]' + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + if: needs.cherry_pick.outputs.failed_branches + with: + node-version-file: .nvmrc + + - run: yarn install --frozen-lockfile --non-interactive + if: needs.cherry_pick.outputs.failed_branches + + - name: Update maintenance issue + if: needs.cherry_pick.outputs.failed_branches + run: yarn ts-hooks scripts/update-maintenance-issue.ts + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.number }} + FAILED_BRANCHES: ${{ needs.cherry_pick.outputs.failed_branches }} diff --git a/.github/workflows/maintenance-tagging.yml b/.github/workflows/maintenance-tagging.yml new file mode 100644 index 0000000000..4c45f6c758 --- /dev/null +++ b/.github/workflows/maintenance-tagging.yml @@ -0,0 +1,28 @@ +name: Add or remove maintenance labels + +on: + pull_request: + types: [opened, edited, labeled] + branches: [main] # target branch + +env: + TARGET_RELEASE: 1.x + +permissions: + pull-requests: write + +jobs: + add_label: + runs-on: ubuntu-latest + if: github.event.pull_request.user.login != 'renovate[bot]' + steps: + - name: Add target label + if: "${{ !contains(github.event.pull_request.body, 'BREAKING CHANGE:') && !contains(github.event.pull_request.labels.*.name, 'target: major') }}" + uses: actions-ecosystem/action-add-labels@v1 + with: + labels: 'target: ${{ env.TARGET_RELEASE }}' + - name: Remove target label + if: "${{ contains(github.event.pull_request.body, 'BREAKING CHANGE:') || contains(github.event.pull_request.labels.*.name, 'target: major') }}" + uses: actions-ecosystem/action-remove-labels@v1 + with: + labels: 'target: ${{ env.TARGET_RELEASE }}' diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index cf8d343a03..87c5d55a0d 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -2,7 +2,7 @@ name: Release Please on: push: branches: - - main + - '*.x' # Documentation: # https://github.com/googleapis/release-please @@ -26,6 +26,9 @@ jobs: release-type: node config-file: release-please-config.json manifest-file: .release-please-manifest.json + # The short ref name of the branch or tag that triggered + # the workflow run. For example, `main` or `1.x` + target-branch: ${{ github.ref_name }} - name: Release Info run: echo "$RELEASE_OUTPUT" env: diff --git a/package.json b/package.json index dc10c9c494..dc4aa5121d 100644 --- a/package.json +++ b/package.json @@ -126,6 +126,7 @@ "lit-analyzer": "2.0.3", "madge": "8.0.0", "npm-run-all2": "7.0.1", + "octokit": "4.0.2", "playwright": "1.47.2", "postcss": "8.4.47", "prettier": "3.3.3", diff --git a/renovate.json b/renovate.json index 207a99e39c..fd4abf531e 100644 --- a/renovate.json +++ b/renovate.json @@ -8,6 +8,7 @@ "nvm": { "enabled": false }, + "baseBranches": ["main", "1.x"], "lockFileMaintenance": { "schedule": ["before 7am on monday"], "enabled": true diff --git a/scripts/update-maintenance-issue.ts b/scripts/update-maintenance-issue.ts new file mode 100644 index 0000000000..d7297ae234 --- /dev/null +++ b/scripts/update-maintenance-issue.ts @@ -0,0 +1,89 @@ +import { fileURLToPath } from 'url'; + +import { Octokit } from 'octokit'; + +const maintenanceIssueNumber = 3176; + +const githubToken = process.env['GITHUB_TOKEN']; +const pullRequestNumber = parseInt(process.env['PR_NUMBER']!, 10); +const failedBranches = process.env['FAILED_BRANCHES']?.split(' ').join(', '); +const failedReleaseVersion = process.env['FAILED_RELEASE']; + +const repoConfig = { + owner: 'sbb-design-systems', + repo: 'lyne-components', +}; + +const issuePath = { + ...repoConfig, + issue_number: maintenanceIssueNumber, +}; + +const prPath = { + ...repoConfig, + pull_number: pullRequestNumber, +}; + +class MaintenanceIssueUpdater { + public constructor( + private _octokit: Octokit, + private _now: Date, + ) {} + + public async run(): Promise { + if (!failedBranches && !failedReleaseVersion) { + throw new Error( + `Unable to update maintenance issue. + Please either specify FAILED_BRANCHES or FAILED_RELEASE`, + ); + } + + const issue = await this._octokit.rest.issues.get(issuePath); + + if (!issue.data.body) { + throw new Error('Could not load issue body'); + } + + const hint = '**Cherry-pick failed for the following pull requests / releases**'; + const dateInfo = `${this._now.toISOString()}`; + let openTasks = this._extractOpenTasks(issue.data.body); + let newTask; + + if (failedBranches) { + const pr = await this._octokit.rest.pulls.get(prPath); + if (!pr.data.title || !pr.data.html_url) { + throw new Error('Could not load pull request'); + } + + newTask = `- [ ] PR [${pr.data.title}](${pr.data.html_url}) could not be cherry-picked into branch ${failedBranches})`; + } else { + newTask = `- [ ] CHANGELOG.md could not be cherry-picked for release ${failedReleaseVersion}`; + } + + openTasks = this._addNewTask(openTasks, newTask); + + return this._octokit.rest.issues.update({ + ...issuePath, + body: `${hint}\n${openTasks.join('\n')}\n\n${dateInfo}`, + }); + } + + private _extractOpenTasks(issueBody: string = ''): string[] { + return issueBody.split('\n').filter((line) => line.startsWith('- [ ]')); + } + + private _addNewTask(tasks: string[], newTask: string): string[] { + const newTasks = [newTask, ...tasks]; + return [...new Set(newTasks)]; + } +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + const maintenanceIssueUpdater = new MaintenanceIssueUpdater( + new Octokit({ + auth: githubToken, + }), + new Date(), + ); + maintenanceIssueUpdater.run(); +} diff --git a/yarn.lock b/yarn.lock index 3d888cc4a7..973201dac7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -888,6 +888,221 @@ resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== +"@octokit/app@^15.0.0": + version "15.1.0" + resolved "https://registry.yarnpkg.com/@octokit/app/-/app-15.1.0.tgz#b330d8826be088ec8d1d43a59dc27ef57d1232b2" + integrity sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg== + dependencies: + "@octokit/auth-app" "^7.0.0" + "@octokit/auth-unauthenticated" "^6.0.0" + "@octokit/core" "^6.1.2" + "@octokit/oauth-app" "^7.0.0" + "@octokit/plugin-paginate-rest" "^11.0.0" + "@octokit/types" "^13.0.0" + "@octokit/webhooks" "^13.0.0" + +"@octokit/auth-app@^7.0.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-7.1.1.tgz#d8916ad01e6ffb0a0a50507aa613e91fe7a49b93" + integrity sha512-kRAd6yelV9OgvlEJE88H0VLlQdZcag9UlLr7dV0YYP37X8PPDvhgiTy66QVhDXdyoT0AleFN2w/qXkPdrSzINg== + dependencies: + "@octokit/auth-oauth-app" "^8.1.0" + "@octokit/auth-oauth-user" "^5.1.0" + "@octokit/request" "^9.1.1" + "@octokit/request-error" "^6.1.1" + "@octokit/types" "^13.4.1" + lru-cache "^10.0.0" + universal-github-app-jwt "^2.2.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-oauth-app@^8.0.0", "@octokit/auth-oauth-app@^8.1.0": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-8.1.1.tgz#6204affa6e86f535016799cadf2af9befe5e893c" + integrity sha512-5UtmxXAvU2wfcHIPPDWzVSAWXVJzG3NWsxb7zCFplCWEmMCArSZV0UQu5jw5goLQXbFyOr5onzEH37UJB3zQQg== + dependencies: + "@octokit/auth-oauth-device" "^7.0.0" + "@octokit/auth-oauth-user" "^5.0.1" + "@octokit/request" "^9.0.0" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-oauth-device@^7.0.0", "@octokit/auth-oauth-device@^7.0.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.1.tgz#7b4f8f97cbcadbe9894d48cde4406dbdef39875a" + integrity sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg== + dependencies: + "@octokit/oauth-methods" "^5.0.0" + "@octokit/request" "^9.0.0" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-oauth-user@^5.0.1", "@octokit/auth-oauth-user@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-5.1.1.tgz#4f1570c6ee15bb9ddc3dcca83308dcaa159e3848" + integrity sha512-rRkMz0ErOppdvEfnemHJXgZ9vTPhBuC6yASeFaB7I2yLMd7QpjfrL1mnvRPlyKo+M6eeLxrKanXJ9Qte29SRsw== + dependencies: + "@octokit/auth-oauth-device" "^7.0.1" + "@octokit/oauth-methods" "^5.0.0" + "@octokit/request" "^9.0.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-token@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.1.tgz#3bbfe905111332a17f72d80bd0b51a3e2fa2cf07" + integrity sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA== + +"@octokit/auth-unauthenticated@^6.0.0", "@octokit/auth-unauthenticated@^6.0.0-beta.1": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-6.1.0.tgz#de0fe923bb06ed93aea526ab99972a98c546d0bf" + integrity sha512-zPSmfrUAcspZH/lOFQnVnvjQZsIvmfApQH6GzJrkIunDooU1Su2qt2FfMTSVPRp7WLTQyC20Kd55lF+mIYaohQ== + dependencies: + "@octokit/request-error" "^6.0.1" + "@octokit/types" "^13.0.0" + +"@octokit/core@^6.0.0", "@octokit/core@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.2.tgz#20442d0a97c411612da206411e356014d1d1bd17" + integrity sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg== + dependencies: + "@octokit/auth-token" "^5.0.0" + "@octokit/graphql" "^8.0.0" + "@octokit/request" "^9.0.0" + "@octokit/request-error" "^6.0.1" + "@octokit/types" "^13.0.0" + before-after-hook "^3.0.2" + universal-user-agent "^7.0.0" + +"@octokit/endpoint@^10.0.0": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.1.tgz#1a9694e7aef6aa9d854dc78dd062945945869bcc" + integrity sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q== + dependencies: + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.2" + +"@octokit/graphql@^8.0.0": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.1.1.tgz#3cacab5f2e55d91c733e3bf481d3a3f8a5f639c4" + integrity sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg== + dependencies: + "@octokit/request" "^9.0.0" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/oauth-app@^7.0.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-7.1.3.tgz#a0f256dd185e7c00bfbc3e6bc3c5aad66e42c609" + integrity sha512-EHXbOpBkSGVVGF1W+NLMmsnSsJRkcrnVmDKt0TQYRBb6xWfWzoi9sBD4DIqZ8jGhOWO/V8t4fqFyJ4vDQDn9bg== + dependencies: + "@octokit/auth-oauth-app" "^8.0.0" + "@octokit/auth-oauth-user" "^5.0.1" + "@octokit/auth-unauthenticated" "^6.0.0-beta.1" + "@octokit/core" "^6.0.0" + "@octokit/oauth-authorization-url" "^7.0.0" + "@octokit/oauth-methods" "^5.0.0" + "@types/aws-lambda" "^8.10.83" + universal-user-agent "^7.0.0" + +"@octokit/oauth-authorization-url@^7.0.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz#0e17c2225eb66b58ec902d02b6f1315ffe9ff04b" + integrity sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA== + +"@octokit/oauth-methods@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-5.1.2.tgz#fd31d2a69f4c91d1abc1ed1814dda5252c697e02" + integrity sha512-C5lglRD+sBlbrhCUTxgJAFjWgJlmTx5bQ7Ch0+2uqRjYv7Cfb5xpX4WuSC9UgQna3sqRGBL9EImX9PvTpMaQ7g== + dependencies: + "@octokit/oauth-authorization-url" "^7.0.0" + "@octokit/request" "^9.1.0" + "@octokit/request-error" "^6.1.0" + "@octokit/types" "^13.0.0" + +"@octokit/openapi-types@^22.2.0": + version "22.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e" + integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg== + +"@octokit/openapi-webhooks-types@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-8.3.0.tgz#a7a4da00c0f27f7f5708eb3fcebefa08f8d51125" + integrity sha512-vKLsoR4xQxg4Z+6rU/F65ItTUz/EXbD+j/d4mlq2GW8TsA4Tc8Kdma2JTAAJ5hrKWUQzkR/Esn2fjsqiVRYaQg== + +"@octokit/plugin-paginate-graphql@^5.0.0": + version "5.2.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-5.2.4.tgz#b6afda7b3f24cb93d2ab822ec8eac664a5d325d0" + integrity sha512-pLZES1jWaOynXKHOqdnwZ5ULeVR6tVVCMm+AUbp0htdcyXDU95WbkYdU4R2ej1wKj5Tu94Mee2Ne0PjPO9cCyA== + +"@octokit/plugin-paginate-rest@^11.0.0": + version "11.3.5" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz#a1929b3ba3dc7b63bc73bb6d3c7a3faf2a9c7649" + integrity sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ== + dependencies: + "@octokit/types" "^13.6.0" + +"@octokit/plugin-rest-endpoint-methods@^13.0.0": + version "13.2.6" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.6.tgz#b9d343dbe88a6cb70cc7fa16faa98f0a29ffe654" + integrity sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw== + dependencies: + "@octokit/types" "^13.6.1" + +"@octokit/plugin-retry@^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-7.1.2.tgz#242e2d19a72a50b5113bb25d7d2c622ce0373fa0" + integrity sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ== + dependencies: + "@octokit/request-error" "^6.0.0" + "@octokit/types" "^13.0.0" + bottleneck "^2.15.3" + +"@octokit/plugin-throttling@^9.0.0": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-9.3.2.tgz#cc05180e45e769d6726c5faed157e9ad3b6ab8c0" + integrity sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw== + dependencies: + "@octokit/types" "^13.0.0" + bottleneck "^2.15.3" + +"@octokit/request-error@^6.0.0", "@octokit/request-error@^6.0.1", "@octokit/request-error@^6.1.0", "@octokit/request-error@^6.1.1": + version "6.1.5" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.5.tgz#907099e341c4e6179db623a0328d678024f54653" + integrity sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ== + dependencies: + "@octokit/types" "^13.0.0" + +"@octokit/request@^9.0.0", "@octokit/request@^9.0.1", "@octokit/request@^9.1.0", "@octokit/request@^9.1.1": + version "9.1.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.1.3.tgz#42b693bc06238f43af3c037ebfd35621c6457838" + integrity sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA== + dependencies: + "@octokit/endpoint" "^10.0.0" + "@octokit/request-error" "^6.0.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^7.0.2" + +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.4.1", "@octokit/types@^13.6.0", "@octokit/types@^13.6.1": + version "13.6.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.6.1.tgz#432fc6c0aaae54318e5b2d3e15c22ac97fc9b15f" + integrity sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g== + dependencies: + "@octokit/openapi-types" "^22.2.0" + +"@octokit/webhooks-methods@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-5.1.0.tgz#13b6c08f89902c1ab0ddf31c6eeeec9c2772cfe6" + integrity sha512-yFZa3UH11VIxYnnoOYCVoJ3q4ChuSOk2IVBBQ0O3xtKX4x9bmKb/1t+Mxixv2iUhzMdOl1qeWJqEhouXXzB3rQ== + +"@octokit/webhooks@^13.0.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-13.3.0.tgz#fd5d54d47c789c75d60a00eb04e982152d7c654a" + integrity sha512-TUkJLtI163Bz5+JK0O+zDkQpn4gKwN+BovclUvCj6pI/6RXrFqQvUMRS2M+Rt8Rv0qR3wjoMoOPmpJKeOh0nBg== + dependencies: + "@octokit/openapi-webhooks-types" "8.3.0" + "@octokit/request-error" "^6.0.1" + "@octokit/webhooks-methods" "^5.0.0" + "@open-wc/dedupe-mixin@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@open-wc/dedupe-mixin/-/dedupe-mixin-1.4.0.tgz#b3c58f8699b197bb5e923d624c720e67c9f324d6" @@ -1589,6 +1804,11 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== +"@types/aws-lambda@^8.10.83": + version "8.10.145" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.145.tgz#b2d31a987f4888e5553ff1819f57cafa475594d9" + integrity sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw== + "@types/babel__code-frame@^7.0.2": version "7.0.6" resolved "https://registry.yarnpkg.com/@types/babel__code-frame/-/babel__code-frame-7.0.6.tgz#20a899c0d29fba1ddf5c2156a10a2bda75ee6f29" @@ -2912,6 +3132,11 @@ basic-ftp@^5.0.2: resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== +before-after-hook@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d" + integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A== + better-opn@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" @@ -2951,6 +3176,11 @@ body-parser@1.20.3: type-is "~1.6.18" unpipe "1.0.0" +bottleneck@^2.15.3: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -6082,6 +6312,11 @@ loupe@^3.1.0, loupe@^3.1.1: resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== +lru-cache@^10.0.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^11.0.0: version "11.0.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.1.tgz#3a732fbfedb82c5ba7bca6564ad3f42afcb6e147" @@ -6994,6 +7229,22 @@ object.values@^1.1.6, object.values@^1.2.0: define-properties "^1.2.1" es-object-atoms "^1.0.0" +octokit@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/octokit/-/octokit-4.0.2.tgz#775d68d363cdaec69d7b73d3dc82ae909d30f59b" + integrity sha512-wbqF4uc1YbcldtiBFfkSnquHtECEIpYD78YUXI6ri1Im5OO2NLo6ZVpRdbJpdnpZ05zMrVPssNiEo6JQtea+Qg== + dependencies: + "@octokit/app" "^15.0.0" + "@octokit/core" "^6.0.0" + "@octokit/oauth-app" "^7.0.0" + "@octokit/plugin-paginate-graphql" "^5.0.0" + "@octokit/plugin-paginate-rest" "^11.0.0" + "@octokit/plugin-rest-endpoint-methods" "^13.0.0" + "@octokit/plugin-retry" "^7.0.0" + "@octokit/plugin-throttling" "^9.0.0" + "@octokit/request-error" "^6.0.0" + "@octokit/types" "^13.0.0" + on-finished@2.4.1, on-finished@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -8952,6 +9203,16 @@ unist-util-visit@^5.0.0: unist-util-is "^6.0.0" unist-util-visit-parents "^6.0.0" +universal-github-app-jwt@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-2.2.0.tgz#dc6c8929e76f1996a766ba2a08fb420f73365d77" + integrity sha512-G5o6f95b5BggDGuUfKDApKaCgNYy2x7OdHY0zSMF081O0EJobw+1130VONhrA7ezGSV2FNOGyM+KQpQZAr9bIQ== + +universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e" + integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"