2018-05-11 08:42:22 +08:00
---
date: "2018-05-10T16:00:00+02:00"
title: "Usage: Issue and Pull Request templates"
slug: "issue-pull-request-templates"
weight: 15
2020-12-09 14:47:06 +08:00
toc: false
2018-05-11 08:42:22 +08:00
draft: false
menu:
sidebar:
parent: "usage"
name: "Issue and Pull Request templates"
weight: 15
identifier: "issue-pull-request-templates"
---
# Issue and Pull Request Templates
2020-12-09 14:47:06 +08:00
**Table of Contents**
{{< toc > }}
2019-03-10 05:15:45 +08:00
Some projects have a standard list of questions that users need to answer
when creating an issue or pull request. Gitea supports adding templates to the
2020-11-28 14:12:22 +08:00
main branch of the repository so that they can autopopulate the form when users are
2019-03-10 05:15:45 +08:00
creating issues and pull requests. This will cut down on the initial back and forth
2019-01-28 23:23:59 +08:00
of getting some clarifying details.
2018-05-11 08:42:22 +08:00
2022-09-02 15:58:49 +08:00
Additionally, the New Issue page URL can be suffixed with `?title=Issue+Title&body=Issue+Text` and the form will be populated with those strings. Those strings will be used instead of the template if there is one.
## File names
2018-05-11 08:42:22 +08:00
Possible file names for issue templates:
2020-12-09 14:47:06 +08:00
- `ISSUE_TEMPLATE.md`
2022-09-02 15:58:49 +08:00
- `ISSUE_TEMPLATE.yaml`
- `ISSUE_TEMPLATE.yml`
2020-12-09 14:47:06 +08:00
- `issue_template.md`
2022-09-02 15:58:49 +08:00
- `issue_template.yaml`
- `issue_template.yml`
2020-12-09 14:47:06 +08:00
- `.gitea/ISSUE_TEMPLATE.md`
2022-09-02 15:58:49 +08:00
- `.gitea/ISSUE_TEMPLATE.yaml`
- `.gitea/ISSUE_TEMPLATE.yml`
- `.gitea/issue_template.md`
- `.gitea/issue_template.yaml`
2020-12-09 14:47:06 +08:00
- `.gitea/issue_template.md`
- `.github/ISSUE_TEMPLATE.md`
2022-09-02 15:58:49 +08:00
- `.github/ISSUE_TEMPLATE.yaml`
- `.github/ISSUE_TEMPLATE.yml`
2020-12-09 14:47:06 +08:00
- `.github/issue_template.md`
2022-09-02 15:58:49 +08:00
- `.github/issue_template.yaml`
- `.github/issue_template.yml`
2018-05-11 08:42:22 +08:00
Possible file names for PR templates:
2020-12-09 14:47:06 +08:00
- `PULL_REQUEST_TEMPLATE.md`
2022-09-02 15:58:49 +08:00
- `PULL_REQUEST_TEMPLATE.yaml`
- `PULL_REQUEST_TEMPLATE.yml`
2020-12-09 14:47:06 +08:00
- `pull_request_template.md`
2022-09-02 15:58:49 +08:00
- `pull_request_template.yaml`
- `pull_request_template.yml`
2020-12-09 14:47:06 +08:00
- `.gitea/PULL_REQUEST_TEMPLATE.md`
2022-09-02 15:58:49 +08:00
- `.gitea/PULL_REQUEST_TEMPLATE.yaml`
- `.gitea/PULL_REQUEST_TEMPLATE.yml`
2020-12-09 14:47:06 +08:00
- `.gitea/pull_request_template.md`
2022-09-02 15:58:49 +08:00
- `.gitea/pull_request_template.yaml`
- `.gitea/pull_request_template.yml`
2020-12-09 14:47:06 +08:00
- `.github/PULL_REQUEST_TEMPLATE.md`
2022-09-02 15:58:49 +08:00
- `.github/PULL_REQUEST_TEMPLATE.yaml`
- `.github/PULL_REQUEST_TEMPLATE.yml`
2020-12-09 14:47:06 +08:00
- `.github/pull_request_template.md`
2022-09-02 15:58:49 +08:00
- `.github/pull_request_template.yaml`
- `.github/pull_request_template.yml`
2019-01-28 23:23:59 +08:00
2022-09-02 15:58:49 +08:00
## Directory names
2020-09-11 22:48:39 +08:00
2020-11-28 14:12:22 +08:00
Alternatively, users can create multiple issue templates inside a special directory and allow users to choose one that more specifically
2020-09-11 22:48:39 +08:00
addresses their problem.
Possible directory names for issue templates:
2020-12-09 14:47:06 +08:00
- `ISSUE_TEMPLATE`
- `issue_template`
- `.gitea/ISSUE_TEMPLATE`
- `.gitea/issue_template`
- `.github/ISSUE_TEMPLATE`
- `.github/issue_template`
- `.gitlab/ISSUE_TEMPLATE`
- `.gitlab/issue_template`
2020-09-11 22:48:39 +08:00
2022-09-02 15:58:49 +08:00
Inside the directory can be multiple markdown (`.md`) or yaml (`.yaml`/`.yml`) issue templates of the form.
## Syntax for markdown template
2020-09-11 22:48:39 +08:00
2020-12-09 14:47:06 +08:00
```md
---
2020-09-11 22:48:39 +08:00
name: "Template Name"
about: "This template is for testing!"
title: "[TEST] "
2021-12-18 05:29:09 +08:00
ref: "main"
2020-09-11 22:48:39 +08:00
labels:
2020-12-09 14:47:06 +08:00
- bug
- "help needed"
---
2020-09-11 22:48:39 +08:00
This is the template!
```
In the above example, when a user is presented with the list of issues they can submit, this would show as `Template Name` with the description
2020-11-28 14:12:22 +08:00
`This template is for testing!` . When submitting an issue with the above example, the issue title would be pre-populated with
2020-09-11 22:48:39 +08:00
`[TEST] ` while the issue body would be pre-populated with `This is the template!` . The issue would also be assigned two labels,
2021-12-18 05:29:09 +08:00
`bug` and `help needed` , and the issue will have a reference to `main` .
2022-09-02 15:58:49 +08:00
## Syntax for yaml template
This example YAML configuration file defines an issue form using several inputs to report a bug.
```yaml
name: Bug Report
about: File a bug report
title: "[Bug]: "
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
- type: input
id: contact
attributes:
label: Contact Details
description: How can we get in touch with you if we need more info?
placeholder: ex. email@example.com
validations:
required: false
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Tell us what you see!
value: "A bug happened!"
validations:
required: true
- type: dropdown
id: version
attributes:
label: Version
description: What version of our software are you running?
options:
- 1.0.2 (Default)
- 1.0.3 (Edge)
validations:
required: true
- type: dropdown
id: browsers
attributes:
label: What browsers are you seeing the problem on?
multiple: true
options:
- Firefox
- Chrome
- Safari
- Microsoft Edge
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct ](https://example.com )
options:
- label: I agree to follow this project's Code of Conduct
required: true
```
### Markdown
You can use a `markdown` element to display Markdown in your form that provides extra context to the user, but is not submitted.
Attributes:
| Key | Description | Required | Type | Default | Valid values |
|-------|--------------------------------------------------------------|----------|--------|---------|--------------|
| value | The text that is rendered. Markdown formatting is supported. | Required | String | - | - |
### Textarea
You can use a `textarea` element to add a multi-line text field to your form. Contributors can also attach files in `textarea` fields.
Attributes:
| Key | Description | Required | Type | Default | Valid values |
|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|--------|--------------|---------------------------|
| label | A brief description of the expected user input, which is also displayed in the form. | Required | String | - | - |
| description | A description of the text area to provide context or guidance, which is displayed in the form. | Optional | String | Empty String | - |
| placeholder | A semi-opaque placeholder that renders in the text area when empty. | Optional | String | Empty String | - |
| value | Text that is pre-filled in the text area. | Optional | String | - | - |
| render | If a value is provided, submitted text will be formatted into a codeblock. When this key is provided, the text area will not expand for file attachments or Markdown editing. | Optional | String | - | Languages known to Gitea. |
Validations:
| Key | Description | Required | Type | Default | Valid values |
|----------|------------------------------------------------------|----------|---------|---------|--------------|
| required | Prevents form submission until element is completed. | Optional | Boolean | false | - |
### Input
You can use an `input` element to add a single-line text field to your form.
Attributes:
| Key | Description | Required | Type | Default | Valid values |
|-------------|--------------------------------------------------------------------------------------------|----------|--------|--------------|--------------|
| label | A brief description of the expected user input, which is also displayed in the form. | Required | String | - | - |
| description | A description of the field to provide context or guidance, which is displayed in the form. | Optional | String | Empty String | - |
| placeholder | A semi-transparent placeholder that renders in the field when empty. | Optional | String | Empty String | - |
| value | Text that is pre-filled in the field. | Optional | String | - | - |
Validations:
| Key | Description | Required | Type | Default | Valid values |
|-----------|--------------------------------------------------------------------------------------------------|----------|---------|---------|--------------------------------------------------------------------------|
| required | Prevents form submission until element is completed. | Optional | Boolean | false | - |
| is_number | Prevents form submission until element is filled with a number. | Optional | Boolean | false | - |
| regex | Prevents form submission until element is filled with a value that match the regular expression. | Optional | String | - | a [regular expression ](https://en.wikipedia.org/wiki/Regular_expression ) |
### Dropdown
You can use a `dropdown` element to add a dropdown menu in your form.
Attributes:
| Key | Description | Required | Type | Default | Valid values |
|-------------|-----------------------------------------------------------------------------------------------------|----------|--------------|--------------|--------------|
| label | A brief description of the expected user input, which is displayed in the form. | Required | String | - | - |
| description | A description of the dropdown to provide extra context or guidance, which is displayed in the form. | Optional | String | Empty String | - |
| multiple | Determines if the user can select more than one option. | Optional | Boolean | false | - |
| options | An array of options the user can choose from. Cannot be empty and all choices must be distinct. | Required | String array | - | - |
Validations:
| Key | Description | Required | Type | Default | Valid values |
|----------|------------------------------------------------------|----------|---------|---------|--------------|
| required | Prevents form submission until element is completed. | Optional | Boolean | false | - |
### Checkboxes
You can use the `checkboxes` element to add a set of checkboxes to your form.
Attributes:
| Key | Description | Required | Type | Default | Valid values |
|-------------|-------------------------------------------------------------------------------------------------------|----------|--------|--------------|--------------|
| label | A brief description of the expected user input, which is displayed in the form. | Required | String | - | - |
| description | A description of the set of checkboxes, which is displayed in the form. Supports Markdown formatting. | Optional | String | Empty String | - |
| options | An array of checkboxes that the user can select. For syntax, see below. | Required | Array | - | - |
For each value in the options array, you can set the following keys.
| Key | Description | Required | Type | Default | Options |
|----------|------------------------------------------------------------------------------------------------------------------------------------------|----------|---------|---------|---------|
| label | The identifier for the option, which is displayed in the form. Markdown is supported for bold or italic text formatting, and hyperlinks. | Required | String | - | - |
| required | Prevents form submission until element is completed. | Optional | Boolean | false | - |