ci: port all templates, actions, and workflows from main (#8949)
Port all templates, actions, and workflows from `main` in preparation for making `beta` the default branch.
This commit is contained in:
76
.github/ISSUE_TEMPLATE/1.bug_report_v3.yml
vendored
Normal file
76
.github/ISSUE_TEMPLATE/1.bug_report_v3.yml
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
name: Functionality Bug
|
||||||
|
description: '[REPRODUCTION REQUIRED] - Create a bug report'
|
||||||
|
labels: ['status: needs-triage', 'v3', 'validate-reproduction']
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the Bug
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: reproduction-link
|
||||||
|
attributes:
|
||||||
|
label: Link to the code that reproduces this issue
|
||||||
|
description: >-
|
||||||
|
_REQUIRED_: Please provide a link to your reproduction. Note, if the URL is invalid (404 or a private repository), we may close the issue.
|
||||||
|
Either use `npx create-payload-app@beta -t blank` then push to a repo or follow the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md) for more information.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Reproduction Steps
|
||||||
|
description: Steps to reproduce the behavior, please provide a clear description of how to reproduce the issue, based on the linked minimal reproduction. Screenshots can be provided in the issue body below. If using code blocks, make sure that [syntax highlighting is correct](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting) and double check that the rendered preview is not broken.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Which area(s) are affected? (Select all that apply)
|
||||||
|
multiple: true
|
||||||
|
options:
|
||||||
|
- 'Not sure'
|
||||||
|
- 'area: core'
|
||||||
|
- 'area: docs'
|
||||||
|
- 'area: templates'
|
||||||
|
- 'area: ui'
|
||||||
|
- 'db-mongodb'
|
||||||
|
- 'db-postgres'
|
||||||
|
- 'db-sqlite'
|
||||||
|
- 'db-vercel-postgres'
|
||||||
|
- 'plugin: cloud'
|
||||||
|
- 'plugin: cloud-storage'
|
||||||
|
- 'plugin: form-builder'
|
||||||
|
- 'plugin: nested-docs'
|
||||||
|
- 'plugin: richtext-lexical'
|
||||||
|
- 'plugin: richtext-slate'
|
||||||
|
- 'plugin: search'
|
||||||
|
- 'plugin: sentry'
|
||||||
|
- 'plugin: seo'
|
||||||
|
- 'plugin: stripe'
|
||||||
|
- 'plugin: other'
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Environment Info
|
||||||
|
description: Paste output from `pnpm payload info` (>= beta.92) _or_ Payload, Node.js, and Next.js versions.
|
||||||
|
render: text
|
||||||
|
placeholder: |
|
||||||
|
Payload:
|
||||||
|
Node.js:
|
||||||
|
Next.js:
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Before submitting the issue, go through the steps you've written down to make sure the steps provided are detailed and clear.
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Contributors should be able to follow the steps provided in order to reproduce the bug.
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: These steps are used to add integration tests to ensure the same issue does not happen again. Thanks in advance!
|
||||||
40
.github/ISSUE_TEMPLATE/2.design_issue.yml
vendored
Normal file
40
.github/ISSUE_TEMPLATE/2.design_issue.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
name: Design Issue
|
||||||
|
description: '[SCREENSHOT REQUIRED] - Create a design issue report'
|
||||||
|
labels: ['status: needs-triage', 'v3', 'area: ui']
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the Bug.
|
||||||
|
description: >-
|
||||||
|
_REQUIRED:_ Please a screenshot/video of the issue along with a detailed description of the problem.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Reproduction Steps
|
||||||
|
description: Steps to reproduce the behavior, please provide a clear description of how to reproduce the issue, based on the linked minimal reproduction. Screenshots can be provided in the issue body below. If using code blocks, make sure that [syntax highlighting is correct](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting) and double check that the rendered preview is not broken.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Environment Info
|
||||||
|
description: Paste output from `pnpm payload info` (>= beta.92) _or_ Payload, Node.js, and Next.js versions.
|
||||||
|
render: text
|
||||||
|
placeholder: |
|
||||||
|
Payload:
|
||||||
|
Node.js:
|
||||||
|
Next.js:
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Before submitting the issue, go through the steps you've written down to make sure the steps provided are detailed and clear.
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Contributors should be able to follow the steps provided in order to reproduce the bug.
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: These steps are used to add integration tests to ensure the same issue does not happen again. Thanks in advance!
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
name: Bug Report
|
name: v2 Bug Report
|
||||||
description: Create a bug report for Payload
|
description: Report a bug for Payload v2. ONLY CRITICAL bugs will be fixed in v2.
|
||||||
labels: ['[possible-bug]']
|
labels: ['status: needs-triage', 'v2']
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
*Note:* Feature requests should be opened as [discussions](https://github.com/payloadcms/payload/discussions/new?category=feature-requests-ideas).
|
ONLY CRITICAL bugs will be fixed in v2.
|
||||||
- type: input
|
- type: input
|
||||||
id: reproduction-link
|
id: reproduction-link
|
||||||
attributes:
|
attributes:
|
||||||
32
.github/PULL_REQUEST_TEMPLATE.md
vendored
32
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,23 +1,23 @@
|
|||||||
## Description
|
<!--
|
||||||
|
|
||||||
<!-- Please include a summary of the pull request and any related issues it fixes. Please also include relevant motivation and context. -->
|
Thank you for the PR! Please go through the checklist below and make sure you've completed all the steps.
|
||||||
|
|
||||||
- [ ] I have read and understand the [CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md) document in this repository.
|
Please review the [CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md) document in this repository if you haven't already.
|
||||||
|
|
||||||
## Type of change
|
The following items will ensure that your PR is handled as smoothly as possible:
|
||||||
|
|
||||||
<!-- Please delete options that are not relevant. -->
|
- PR Title must follow conventional commits format. For example, `feat: my new feature`, `fix(plugin-seo): my fix`.
|
||||||
|
- Minimal description explained as if explained to someone not immediately familiar with the code.
|
||||||
|
- Provide before/after screenshots or code diffs if applicable.
|
||||||
|
- Link any related issues/discussions from GitHub or Discord.
|
||||||
|
- Add review comments if necessary to explain to the reviewer the logic behind a change
|
||||||
|
|
||||||
- [ ] Chore (non-breaking change which does not add functionality)
|
### What?
|
||||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
|
||||||
- [ ] New feature (non-breaking change which adds functionality)
|
|
||||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
|
||||||
- [ ] Change to the [templates](https://github.com/payloadcms/payload/tree/main/templates) directory (does not affect core functionality)
|
|
||||||
- [ ] Change to the [examples](https://github.com/payloadcms/payload/tree/main/examples) directory (does not affect core functionality)
|
|
||||||
- [ ] This change requires a documentation update
|
|
||||||
|
|
||||||
## Checklist:
|
### Why?
|
||||||
|
|
||||||
- [ ] I have added tests that prove my fix is effective or that my feature works
|
### How?
|
||||||
- [ ] Existing test suite passes locally with my changes
|
|
||||||
- [ ] I have made corresponding changes to the documentation
|
Fixes #
|
||||||
|
|
||||||
|
-->
|
||||||
|
|||||||
22
.github/actions/triage/LICENSE
vendored
Normal file
22
.github/actions/triage/LICENSE
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 Payload <info@payloadcms.com>. All modification and additions are copyright of Payload.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Original license:
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Balázs Orbán
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
21
.github/actions/triage/README.md
vendored
Normal file
21
.github/actions/triage/README.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Triage
|
||||||
|
|
||||||
|
Modified version of https://github.com/balazsorban44/nissuer
|
||||||
|
|
||||||
|
## Modifications
|
||||||
|
|
||||||
|
- Port to TypeScript
|
||||||
|
- Remove issue locking
|
||||||
|
- Remove reproduction blocklist
|
||||||
|
- Uses `@vercel/ncc` for packaging
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Whenever a modification is made to the action, the action built to `dist` must be committed to the repository.
|
||||||
|
|
||||||
|
This is done by running:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm build
|
||||||
|
```
|
||||||
40
.github/actions/triage/action.yml
vendored
Normal file
40
.github/actions/triage/action.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
name: Triage
|
||||||
|
description: Initial triage for issues
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
reproduction-comment:
|
||||||
|
description: 'Either a string or a path to a .md file inside the repository. Example: ".github/invalid-reproduction.md"'
|
||||||
|
default: '.github/invalid-reproduction.md'
|
||||||
|
reproduction-hosts:
|
||||||
|
description: 'Comma-separated list of hostnames that are allowed for reproductions. Example: "github.com,codesandbox.io"'
|
||||||
|
default: github.com
|
||||||
|
reproduction-invalid-label:
|
||||||
|
description: 'Label to apply to issues without a valid reproduction. Example: "invalid-reproduction"'
|
||||||
|
default: 'invalid-reproduction'
|
||||||
|
reproduction-issue-labels:
|
||||||
|
description: 'Comma-separated list of issue labels. If configured, only verify reproduction URLs of issues with one of these labels present. Adding a comma at the end will handle non-labeled issues as invalid. Example: "bug,", will consider issues with the label "bug" or no label.'
|
||||||
|
default: ''
|
||||||
|
reproduction-link-section:
|
||||||
|
description: 'A regular expression string with "(.*)" matching a valid URL in the issue body. The result is trimmed. Example: "### Link to reproduction(.*)### To reproduce"'
|
||||||
|
default: '### Link to reproduction(.*)### To reproduce'
|
||||||
|
tag-only:
|
||||||
|
description: Log and tag only. Do not perform closing or commenting actions.
|
||||||
|
default: false
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Run action
|
||||||
|
run: node ${{ github.action_path }}/dist/index.js
|
||||||
|
shell: sh
|
||||||
|
# https://github.com/actions/runner/issues/665#issuecomment-676581170
|
||||||
|
env:
|
||||||
|
'INPUT_REPRODUCTION_COMMENT': ${{inputs.reproduction-comment}}
|
||||||
|
'INPUT_REPRODUCTION_HOSTS': ${{inputs.reproduction-hosts}}
|
||||||
|
'INPUT_REPRODUCTION_INVALID_LABEL': ${{inputs.reproduction-invalid-label}}
|
||||||
|
'INPUT_REPRODUCTION_ISSUE_LABELS': ${{inputs.reproduction-issue-labels}}
|
||||||
|
'INPUT_REPRODUCTION_LINK_SECTION': ${{inputs.reproduction-link-section}}
|
||||||
|
'INPUT_TAG_ONLY': ${{inputs.tag-only}}
|
||||||
7
.github/actions/triage/jest.config.js
vendored
Normal file
7
.github/actions/triage/jest.config.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
module.exports = {
|
||||||
|
testEnvironment: 'node',
|
||||||
|
testPathIgnorePatterns: ['/node_modules/', '<rootDir>/dist/'],
|
||||||
|
transform: {
|
||||||
|
'^.+\\.(t|j)sx?$': ['@swc/jest'],
|
||||||
|
},
|
||||||
|
}
|
||||||
34
.github/actions/triage/package.json
vendored
Normal file
34
.github/actions/triage/package.json
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "triage",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"description": "GitHub Action to triage new issues",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"build": "pnpm build:typecheck && pnpm build:ncc",
|
||||||
|
"build:ncc": "ncc build src/index.ts -t -o dist",
|
||||||
|
"build:typecheck": "tsc",
|
||||||
|
"clean": "rimraf dist",
|
||||||
|
"test": "jest"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/core": "^1.3.0",
|
||||||
|
"@actions/github": "^5.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@octokit/webhooks-types": "^7.5.1",
|
||||||
|
"@swc/jest": "^0.2.36",
|
||||||
|
"@types/jest": "^27.5.2",
|
||||||
|
"@types/node": "^20.16.5",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
||||||
|
"@typescript-eslint/parser": "^4.33.0",
|
||||||
|
"@vercel/ncc": "0.38.1",
|
||||||
|
"concurrently": "^8.2.2",
|
||||||
|
"eslint": "^7.32.0",
|
||||||
|
"jest": "^29.7.0",
|
||||||
|
"prettier": "^3.3.3",
|
||||||
|
"ts-jest": "^26.5.6",
|
||||||
|
"typescript": "^4.9.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
5419
.github/actions/triage/pnpm-lock.yaml
generated
vendored
Normal file
5419
.github/actions/triage/pnpm-lock.yaml
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
195
.github/actions/triage/src/index.ts
vendored
Normal file
195
.github/actions/triage/src/index.ts
vendored
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
import { debug, error, getBooleanInput, getInput, info, setFailed } from '@actions/core'
|
||||||
|
|
||||||
|
import { context, getOctokit } from '@actions/github'
|
||||||
|
import { readFile, access } from 'node:fs/promises'
|
||||||
|
import { join } from 'node:path'
|
||||||
|
|
||||||
|
// Ensure GITHUB_TOKEN and GITHUB_WORKSPACE are present
|
||||||
|
if (!process.env.GITHUB_TOKEN) throw new TypeError('No GITHUB_TOKEN provided')
|
||||||
|
if (!process.env.GITHUB_WORKSPACE) throw new TypeError('Not a GitHub workspace')
|
||||||
|
|
||||||
|
// Define the configuration object
|
||||||
|
interface Config {
|
||||||
|
invalidLink: {
|
||||||
|
comment: string
|
||||||
|
bugLabels: string[]
|
||||||
|
hosts: string[]
|
||||||
|
label: string
|
||||||
|
linkSection: string
|
||||||
|
}
|
||||||
|
tagOnly: boolean
|
||||||
|
token: string
|
||||||
|
workspace: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const config: Config = {
|
||||||
|
invalidLink: {
|
||||||
|
comment: getInput('reproduction_comment') || '.github/invalid-reproduction.md',
|
||||||
|
bugLabels: getInput('reproduction_issue_labels')
|
||||||
|
.split(',')
|
||||||
|
.map((l) => l.trim()),
|
||||||
|
hosts: (getInput('reproduction_hosts') || 'github.com').split(',').map((h) => h.trim()),
|
||||||
|
label: getInput('reproduction_invalid_label') || 'invalid-reproduction',
|
||||||
|
linkSection:
|
||||||
|
getInput('reproduction_link_section') || '### Link to reproduction(.*)### To reproduce',
|
||||||
|
},
|
||||||
|
tagOnly: getBooleanOrUndefined('tag_only') || false,
|
||||||
|
token: process.env.GITHUB_TOKEN,
|
||||||
|
workspace: process.env.GITHUB_WORKSPACE,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to parse JSON, return parsed object or error
|
||||||
|
function tryParse(json: string): Record<string, unknown> {
|
||||||
|
try {
|
||||||
|
return JSON.parse(json)
|
||||||
|
} catch (e) {
|
||||||
|
setFailed(`Could not parse JSON: ${e instanceof Error ? e.message : e}`)
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieves a boolean input or undefined based on environment variables
|
||||||
|
function getBooleanOrUndefined(value: string): boolean | undefined {
|
||||||
|
const variable = process.env[`INPUT_${value.toUpperCase()}`]
|
||||||
|
return variable === undefined || variable === '' ? undefined : getBooleanInput(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the appropriate label match type
|
||||||
|
function getLabelMatch(value: string | undefined): 'name' | 'description' {
|
||||||
|
return value === 'name' ? 'name' : 'description'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to check if an issue contains a valid reproduction link
|
||||||
|
async function checkValidReproduction(): Promise<void> {
|
||||||
|
const { issue, action } = context.payload as {
|
||||||
|
issue: { number: number; body: string; labels: { name: string }[] } | undefined
|
||||||
|
action: string
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action !== 'opened' || !issue?.body) return
|
||||||
|
|
||||||
|
const labels = issue.labels.map((l) => l.name)
|
||||||
|
|
||||||
|
const issueMatchingLabel =
|
||||||
|
labels.length &&
|
||||||
|
config.invalidLink.bugLabels.length &&
|
||||||
|
labels.some((l) => config.invalidLink.bugLabels.includes(l))
|
||||||
|
|
||||||
|
if (!issueMatchingLabel) {
|
||||||
|
info(
|
||||||
|
`Issue #${issue.number} does not match required labels: ${config.invalidLink.bugLabels.join(', ')}`,
|
||||||
|
)
|
||||||
|
info(`Issue labels: ${labels.join(', ')}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
info(`Issue #${issue.number} labels: ${labels.join(', ')}`)
|
||||||
|
|
||||||
|
const { rest: client } = getOctokit(config.token)
|
||||||
|
const common = { ...context.repo, issue_number: issue.number }
|
||||||
|
|
||||||
|
const labelsToRemove = labels.filter((l) => config.invalidLink.bugLabels.includes(l))
|
||||||
|
|
||||||
|
if (await isValidReproduction(issue.body)) {
|
||||||
|
await Promise.all(
|
||||||
|
labelsToRemove.map((label) => client.issues.removeLabel({ ...common, name: label })),
|
||||||
|
)
|
||||||
|
|
||||||
|
return info(`Issue #${issue.number} contains a valid reproduction 💚`)
|
||||||
|
}
|
||||||
|
|
||||||
|
info(`Invalid reproduction, issue will be closed/labeled/commented...`)
|
||||||
|
|
||||||
|
// Adjust labels
|
||||||
|
await Promise.all(
|
||||||
|
labelsToRemove.map((label) => client.issues.removeLabel({ ...common, name: label })),
|
||||||
|
)
|
||||||
|
info(`Issue #${issue.number} - validate label removed`)
|
||||||
|
await client.issues.addLabels({ ...common, labels: [config.invalidLink.label] })
|
||||||
|
info(`Issue #${issue.number} - labeled`)
|
||||||
|
|
||||||
|
// If tagOnly, do not close or comment
|
||||||
|
if (config.tagOnly) {
|
||||||
|
info('Tag-only enabled, no closing/commenting actions taken')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform closing and commenting actions
|
||||||
|
await client.issues.update({ ...common, state: 'closed' })
|
||||||
|
info(`Issue #${issue.number} - closed`)
|
||||||
|
|
||||||
|
const comment = join(config.workspace, config.invalidLink.comment)
|
||||||
|
await client.issues.createComment({ ...common, body: await getCommentBody(comment) })
|
||||||
|
info(`Issue #${issue.number} - commented`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if an issue contains a valid/accessible link to a reproduction.
|
||||||
|
*
|
||||||
|
* Returns `true` if the link is valid.
|
||||||
|
* @param body - The body content of the issue
|
||||||
|
*/
|
||||||
|
async function isValidReproduction(body: string): Promise<boolean> {
|
||||||
|
const linkSectionRe = new RegExp(config.invalidLink.linkSection, 'is')
|
||||||
|
const link = body.match(linkSectionRe)?.[1]?.trim()
|
||||||
|
|
||||||
|
if (!link) {
|
||||||
|
info('Missing link')
|
||||||
|
info(`Link section regex: ${linkSectionRe}`)
|
||||||
|
info(`Link section: ${body}`)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
info(`Checking validity of link: ${link}`)
|
||||||
|
|
||||||
|
if (!URL.canParse(link)) {
|
||||||
|
info(`Invalid URL: ${link}`)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = new URL(link)
|
||||||
|
|
||||||
|
if (!config.invalidLink.hosts.includes(url.hostname)) {
|
||||||
|
info('Link did not match allowed reproduction hosts')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Verify that the link can be accessed
|
||||||
|
const response = await fetch(link)
|
||||||
|
const isOk = response.status < 400 || response.status >= 500
|
||||||
|
|
||||||
|
info(`Link status: ${response.status}`)
|
||||||
|
if (!isOk) {
|
||||||
|
info(`Link returned status ${response.status}`)
|
||||||
|
}
|
||||||
|
return isOk
|
||||||
|
} catch (error) {
|
||||||
|
info(`Error fetching link: ${(error as Error).message}`)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return either a file's content or a string
|
||||||
|
* @param {string} pathOrComment
|
||||||
|
*/
|
||||||
|
async function getCommentBody(pathOrComment: string) {
|
||||||
|
try {
|
||||||
|
await access(pathOrComment)
|
||||||
|
return await readFile(pathOrComment, 'utf8')
|
||||||
|
} catch (error: any) {
|
||||||
|
if (error.code === 'ENOENT') return pathOrComment
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
const { token, workspace, ...safeConfig } = config
|
||||||
|
info('Configuration:')
|
||||||
|
info(JSON.stringify(safeConfig, null, 2))
|
||||||
|
|
||||||
|
await checkValidReproduction()
|
||||||
|
}
|
||||||
|
|
||||||
|
run().catch(setFailed)
|
||||||
15
.github/actions/triage/tsconfig.json
vendored
Normal file
15
.github/actions/triage/tsconfig.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es5",
|
||||||
|
"lib": ["es2020.string"],
|
||||||
|
"noEmit": true,
|
||||||
|
"strict": true,
|
||||||
|
"noUnusedLocals": false, // Undo this
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"downlevelIteration": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
},
|
||||||
|
"exclude": ["src/**/*.test.ts"]
|
||||||
|
}
|
||||||
18
.github/comments/invalid-reproduction.md
vendored
Normal file
18
.github/comments/invalid-reproduction.md
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
We cannot recreate the issue with the provided information. **Please add a reproduction in order for us to be able to investigate.**
|
||||||
|
|
||||||
|
### Why was this issue marked with the `invalid-reproduction` label?
|
||||||
|
|
||||||
|
To be able to investigate, we need access to a reproduction to identify what triggered the issue. We prefer a link to a public GitHub repository created with `create-payload-app@beta -t blank` or a forked/branched version of this repository with tests added (more info in the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md)).
|
||||||
|
|
||||||
|
To make sure the issue is resolved as quickly as possible, please make sure that the reproduction is as **minimal** as possible. This means that you should **remove unnecessary code, files, and dependencies** that do not contribute to the issue. Ensure your reproduction does not depend on secrets, 3rd party registries, private dependencies, or any other data that cannot be made public. Avoid a reproduction including a whole monorepo (unless relevant to the issue). The easier it is to reproduce the issue, the quicker we can help.
|
||||||
|
|
||||||
|
Please test your reproduction against the latest version of Payload to make sure your issue has not already been fixed.
|
||||||
|
|
||||||
|
### I added a link, why was it still marked?
|
||||||
|
|
||||||
|
Ensure the link is pointing to a codebase that is accessible (e.g. not a private repository). "[example.com](http://example.com/)", "n/a", "will add later", etc. are not acceptable links -- we need to see a public codebase. See the above section for accepted links.
|
||||||
|
|
||||||
|
### Useful Resources
|
||||||
|
|
||||||
|
- [Reproduction Guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md)
|
||||||
|
- [Contributing to Payload](https://www.youtube.com/watch?v=08Qa3ggR9rw)
|
||||||
74
.github/dependabot.yml
vendored
Normal file
74
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
# docs: https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directories:
|
||||||
|
- /
|
||||||
|
- /.github/workflows
|
||||||
|
- /.github/actions/* # Not working until resolved: https://github.com/dependabot/dependabot-core/issues/6345
|
||||||
|
- /.github/actions/setup
|
||||||
|
target-branch: beta
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
timezone: America/Detroit
|
||||||
|
time: '06:00'
|
||||||
|
groups:
|
||||||
|
github_actions:
|
||||||
|
patterns:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: /
|
||||||
|
target-branch: beta
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
day: sunday
|
||||||
|
timezone: America/Detroit
|
||||||
|
time: '06:00'
|
||||||
|
commit-message:
|
||||||
|
prefix: 'chore(deps)'
|
||||||
|
labels:
|
||||||
|
- dependencies
|
||||||
|
groups:
|
||||||
|
production-deps:
|
||||||
|
dependency-type: production
|
||||||
|
update-types:
|
||||||
|
- minor
|
||||||
|
- patch
|
||||||
|
patterns:
|
||||||
|
- '*'
|
||||||
|
exclude-patterns:
|
||||||
|
- 'drizzle*'
|
||||||
|
dev-deps:
|
||||||
|
dependency-type: development
|
||||||
|
update-types:
|
||||||
|
- minor
|
||||||
|
- patch
|
||||||
|
patterns:
|
||||||
|
- '*'
|
||||||
|
exclude-patterns:
|
||||||
|
- 'drizzle*'
|
||||||
|
|
||||||
|
# Only bump patch versions for 2.x
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: /
|
||||||
|
target-branch: main
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
day: sunday
|
||||||
|
timezone: America/Detroit
|
||||||
|
time: '06:00'
|
||||||
|
commit-message:
|
||||||
|
prefix: 'chore(deps)'
|
||||||
|
labels:
|
||||||
|
- dependencies
|
||||||
|
groups:
|
||||||
|
production-deps:
|
||||||
|
dependency-type: production
|
||||||
|
update-types:
|
||||||
|
- patch
|
||||||
|
patterns:
|
||||||
|
- '*'
|
||||||
|
exclude-patterns:
|
||||||
|
- 'drizzle*'
|
||||||
49
.github/pnpm-lock.yaml
generated
vendored
49
.github/pnpm-lock.yaml
generated
vendored
@@ -55,6 +55,55 @@ importers:
|
|||||||
specifier: ^4.9.5
|
specifier: ^4.9.5
|
||||||
version: 4.9.5
|
version: 4.9.5
|
||||||
|
|
||||||
|
actions/triage:
|
||||||
|
dependencies:
|
||||||
|
'@actions/core':
|
||||||
|
specifier: ^1.3.0
|
||||||
|
version: 1.10.1
|
||||||
|
'@actions/github':
|
||||||
|
specifier: ^5.0.0
|
||||||
|
version: 5.1.1
|
||||||
|
devDependencies:
|
||||||
|
'@octokit/webhooks-types':
|
||||||
|
specifier: ^7.5.1
|
||||||
|
version: 7.5.1
|
||||||
|
'@swc/jest':
|
||||||
|
specifier: ^0.2.36
|
||||||
|
version: 0.2.36(@swc/core@1.7.26)
|
||||||
|
'@types/jest':
|
||||||
|
specifier: ^27.5.2
|
||||||
|
version: 27.5.2
|
||||||
|
'@types/node':
|
||||||
|
specifier: ^20.16.5
|
||||||
|
version: 20.16.5
|
||||||
|
'@typescript-eslint/eslint-plugin':
|
||||||
|
specifier: ^4.33.0
|
||||||
|
version: 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5)
|
||||||
|
'@typescript-eslint/parser':
|
||||||
|
specifier: ^4.33.0
|
||||||
|
version: 4.33.0(eslint@7.32.0)(typescript@4.9.5)
|
||||||
|
'@vercel/ncc':
|
||||||
|
specifier: 0.38.1
|
||||||
|
version: 0.38.1
|
||||||
|
concurrently:
|
||||||
|
specifier: ^8.2.2
|
||||||
|
version: 8.2.2
|
||||||
|
eslint:
|
||||||
|
specifier: ^7.32.0
|
||||||
|
version: 7.32.0
|
||||||
|
jest:
|
||||||
|
specifier: ^29.7.0
|
||||||
|
version: 29.7.0(@types/node@20.16.5)
|
||||||
|
prettier:
|
||||||
|
specifier: ^3.3.3
|
||||||
|
version: 3.3.3
|
||||||
|
ts-jest:
|
||||||
|
specifier: ^26.5.6
|
||||||
|
version: 26.5.6(jest@29.7.0(@types/node@20.16.5))(typescript@4.9.5)
|
||||||
|
typescript:
|
||||||
|
specifier: ^4.9.5
|
||||||
|
version: 4.9.5
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
'@actions/core@1.10.1':
|
'@actions/core@1.10.1':
|
||||||
|
|||||||
68
.github/workflows/label-author.yml
vendored
68
.github/workflows/label-author.yml
vendored
@@ -1,68 +0,0 @@
|
|||||||
name: label-author
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened]
|
|
||||||
issues:
|
|
||||||
types: [opened]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: write
|
|
||||||
issues: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
debug-context:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: View context attributes
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: console.log(context)
|
|
||||||
|
|
||||||
label-created-by:
|
|
||||||
name: Label pr/issue on opening
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Tag with 'created-by'
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
if: github.event.action == 'opened'
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const type = context.payload.pull_request ? 'pull_request' : 'issue';
|
|
||||||
const association = context.payload[type].author_association;
|
|
||||||
let label = '';
|
|
||||||
if (
|
|
||||||
association === 'MEMBER' ||
|
|
||||||
association === 'OWNER' ||
|
|
||||||
[
|
|
||||||
'denolfe',
|
|
||||||
'jmikrut',
|
|
||||||
'danribbens',
|
|
||||||
|
|
||||||
'alessiogr',
|
|
||||||
'jacobsfletch',
|
|
||||||
'jarrodmflesch',
|
|
||||||
'jesschowdhury',
|
|
||||||
'kendelljoseph',
|
|
||||||
'patrikkozak',
|
|
||||||
'paulpopus',
|
|
||||||
'r1tsuu',
|
|
||||||
'tylandavis',
|
|
||||||
].includes(context.actor.toLowerCase())
|
|
||||||
) {
|
|
||||||
label = 'created-by: Payload team';
|
|
||||||
} else if (association === 'CONTRIBUTOR') {
|
|
||||||
label = 'created-by: Contributor';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!label) return;
|
|
||||||
|
|
||||||
github.rest.issues.addLabels({
|
|
||||||
issue_number: context.issue.number,
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
labels: [label],
|
|
||||||
});
|
|
||||||
console.log(`Added '${label}' label`);
|
|
||||||
116
.github/workflows/label-on-change.yml
vendored
Normal file
116
.github/workflows/label-on-change.yml
vendored
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
name: label-on-change
|
||||||
|
|
||||||
|
on:
|
||||||
|
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
|
||||||
|
issues:
|
||||||
|
types:
|
||||||
|
- assigned
|
||||||
|
- closed
|
||||||
|
- labeled
|
||||||
|
- reopened
|
||||||
|
|
||||||
|
# TODO: Handle labeling on comment
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
on-labeled-ensure-one-status:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
# Only run on issue labeled and if label starts with 'status:'
|
||||||
|
if: github.event.action == 'labeled' && startsWith(github.event.label.name, 'status:')
|
||||||
|
steps:
|
||||||
|
- name: Ensure only one status label
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
// Get all labels that start with 'status:' and are not the incoming label
|
||||||
|
const incomingLabelName = context.payload.label.name;
|
||||||
|
const labelNamesToRemove = context.payload.issue.labels
|
||||||
|
.filter(label => label.name.startsWith('status:') && label.name !== incomingLabelName)
|
||||||
|
.map(label => label.name);
|
||||||
|
|
||||||
|
if (!labelNamesToRemove.length) {
|
||||||
|
console.log('No labels to remove');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Labels to remove: '${labelNamesToRemove}'`);
|
||||||
|
|
||||||
|
// If there is more than one status label, remove all but the incoming label
|
||||||
|
for (const labelName of labelNamesToRemove) {
|
||||||
|
await github.rest.issues.removeLabel({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
name: labelName,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
});
|
||||||
|
console.log(`Removed '${labelName}' label`);
|
||||||
|
}
|
||||||
|
|
||||||
|
on-issue-close:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
if: github.event.action == 'closed'
|
||||||
|
steps:
|
||||||
|
- name: Remove all labels on issue close
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
// Get all labels that start with 'status:' and 'stale'
|
||||||
|
const labelNamesToRemove = context.payload.issue.labels
|
||||||
|
.filter(label => label.name.startsWith('status:') || label.name === 'stale')
|
||||||
|
.map(label => label.name);
|
||||||
|
|
||||||
|
if (!labelNamesToRemove.length) {
|
||||||
|
console.log('No labels to remove');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Labels to remove: '${labelNamesToRemove}'`);
|
||||||
|
|
||||||
|
for (const labelName of labelNamesToRemove) {
|
||||||
|
await github.rest.issues.removeLabel({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
name: labelName,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
});
|
||||||
|
console.log(`Removed '${labelName}' label`);
|
||||||
|
}
|
||||||
|
|
||||||
|
on-issue-reopen:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
if: github.event.action == 'reopened'
|
||||||
|
steps:
|
||||||
|
- name: Add needs-triage label on issue reopen
|
||||||
|
uses: actions-ecosystem/action-add-labels@v1
|
||||||
|
with:
|
||||||
|
labels: 'status: needs-triage'
|
||||||
|
|
||||||
|
on-issue-assigned:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
if: >
|
||||||
|
github.event.action == 'assigned' &&
|
||||||
|
contains(github.event.issue.labels.*.name, 'status: needs-triage')
|
||||||
|
steps:
|
||||||
|
- name: Remove needs-triage label on issue assign
|
||||||
|
uses: actions-ecosystem/action-remove-labels@v1
|
||||||
|
with:
|
||||||
|
labels: 'status: needs-triage'
|
||||||
|
|
||||||
|
# on-pr-merge:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# if: github.event.pull_request.merged == true
|
||||||
|
# steps:
|
||||||
|
|
||||||
|
# on-pr-close:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# if: github.event_name == 'pull_request_target' && github.event.pull_request.merged == false
|
||||||
|
# steps:
|
||||||
26
.github/workflows/lock-issues.yml
vendored
Normal file
26
.github/workflows/lock-issues.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
name: lock-issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# Run nightly at 12am EST
|
||||||
|
- cron: '0 4 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lock_issues:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Lock issues
|
||||||
|
uses: dessant/lock-threads@v5
|
||||||
|
with:
|
||||||
|
process-only: 'issues'
|
||||||
|
issue-inactive-days: '1'
|
||||||
|
exclude-any-issue-labels: 'status: awaiting-reply'
|
||||||
|
log-output: true
|
||||||
|
issue-comment: >
|
||||||
|
This issue has been automatically locked.
|
||||||
|
|
||||||
|
Please open a new issue if this issue persists with any additional detail.
|
||||||
42
.github/workflows/stale.yml
vendored
Normal file
42
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
name: stale
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v9
|
||||||
|
id: stale
|
||||||
|
with:
|
||||||
|
debug-only: true
|
||||||
|
days-before-stale: 90
|
||||||
|
days-before-close: 7
|
||||||
|
ascending: true
|
||||||
|
operations-per-run: 300
|
||||||
|
|
||||||
|
# Ignore all assigned
|
||||||
|
exempt-all-assignees: false
|
||||||
|
|
||||||
|
# Issues
|
||||||
|
stale-issue-label: 'stale'
|
||||||
|
exempt-issue-labels: 'blocked,must,should,keep,created-by: Payload team,created-by: Contributor'
|
||||||
|
stale-issue-message: >
|
||||||
|
This issue has been marked as stale due to lack of activity. To keep the ticket open, please indicate that it is still relevant in a comment below.
|
||||||
|
close-issue-message: >
|
||||||
|
This issue was automatically closed due to lack of activity.
|
||||||
|
|
||||||
|
# Pull Requests
|
||||||
|
stale-pr-label: 'stale'
|
||||||
|
exempt-pr-labels: 'blocked,must,should,keep,created-by: Payload team,created-by: Contributor'
|
||||||
|
stale-pr-message: >
|
||||||
|
This PR is stale due to lack of activity. To keep the PR open, please indicate that it is still relevant in a comment below.
|
||||||
|
close-pr-message: >
|
||||||
|
This pull request was automatically closed due to lack of activity.
|
||||||
|
|
||||||
|
- name: Print outputs
|
||||||
|
run: echo ${{ format('{0},{1}', toJSON(steps.stale.outputs.staled-issues-prs), toJSON(steps.stale.outputs.closed-issues-prs)) }}
|
||||||
102
.github/workflows/triage.yml
vendored
Normal file
102
.github/workflows/triage.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
name: triage
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
issues:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
debug-context:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: View context attributes
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: console.log({ context })
|
||||||
|
|
||||||
|
label-created-by:
|
||||||
|
name: label-on-open
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Tag with 'created-by'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
if: github.event.action == 'opened'
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const payloadTeamUsernames = [
|
||||||
|
'denolfe',
|
||||||
|
'jmikrut',
|
||||||
|
'DanRibbens',
|
||||||
|
'jacobsfletch',
|
||||||
|
'JarrodMFlesch',
|
||||||
|
'AlessioGr',
|
||||||
|
'JessChowdhury',
|
||||||
|
'kendelljoseph',
|
||||||
|
'PatrikKozak',
|
||||||
|
'tylandavis',
|
||||||
|
'paulpopus',
|
||||||
|
'r1tsuu',
|
||||||
|
'GermanJablo',
|
||||||
|
];
|
||||||
|
|
||||||
|
const type = context.payload.pull_request ? 'pull_request' : 'issue';
|
||||||
|
|
||||||
|
const isTeamMember = payloadTeamUsernames
|
||||||
|
.map(n => n.toLowerCase())
|
||||||
|
.includes(context.payload[type].user.login.toLowerCase());
|
||||||
|
|
||||||
|
if (isTeamMember) {
|
||||||
|
github.rest.issues.addLabels({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
labels: ['created-by: Payload team'],
|
||||||
|
});
|
||||||
|
console.log(`Added 'created-by: Payload team' label`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const association = context.payload[type].author_association;
|
||||||
|
let label = ''
|
||||||
|
if (association === 'MEMBER' || association === 'OWNER') {
|
||||||
|
label = 'created-by: Payload team';
|
||||||
|
} else if (association === 'CONTRIBUTOR') {
|
||||||
|
label = 'created-by: Contributor';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!label) return;
|
||||||
|
|
||||||
|
github.rest.issues.addLabels({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
labels: [label],
|
||||||
|
});
|
||||||
|
console.log(`Added '${label}' label.`);
|
||||||
|
|
||||||
|
triage:
|
||||||
|
name: initial-triage
|
||||||
|
if: github.event_name == 'issues'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- uses: ./.github/actions/triage
|
||||||
|
with:
|
||||||
|
reproduction-comment: '.github/comments/invalid-reproduction.md'
|
||||||
|
reproduction-link-section: '### Link to the code that reproduces this issue(.*)### Reproduction Steps'
|
||||||
|
reproduction-issue-labels: 'validate-reproduction'
|
||||||
|
tag-only: 'true'
|
||||||
Reference in New Issue
Block a user