# 支持动作

目前 Learning Lab 支持的动作包括：
           
- `open_issue /create_issue`
- `open_merge_request / merge_request.create`
- `close_merge_request / merge_request.close`                          
- `reply / issue_comment.created / note / choice`


## open_issue /create_issue

使用`open_issue`动作来创建一个新issue,也可使用此动作的别名`create_issue`来创建

### 示例

在`transitions`中的`action`中可以使用`open_issue`来执行关闭issue动作,下面的例子中，监听了用户关闭issue的动作，当用户关闭issue之后，便使用open_issue动作来创建一个新的issue，并把该issue的链接存储到`chapter_4_issue`这个变量里

```yaml
step6:
  link: '{{chapter_3_issue}}'
  description: "完成当前章节学习"
  transitions:
    events: ['close_issue']
    action:
      - type: open_issue
        title: "Markdown ：链接"
        with: 004_1_link_basic.md
        store:
          chapter_4_issue: '{{result.data.html_url}}'
      - type: issue_comment.created
        with: 003_5_end_2.md
    to: end
```

### Options

当`action`为open_issue的时候，支持的参数

| 参数 | 类型 | 描述 | 默认 | 是否为必要参数 |
| --- | --- | --- | --- | --- | 
| title | String | 新建issue的标题 |  | ✓ |
| with | String | 新建issue的描述 |  |   |
| store | object | 此次动作要存储的变量 |  |   |

### 创建issue后返回result的格式

```ruby
{
  'result': {
    'data': {
      'html_url': 'https://codechina.csdn.net/namespace/project/issues/1',
      'title': 'issue标题',
      'description': 'issue描述'
    }
  }
}
```


## open_merge_request / merge_request.create

使用`open_merge_request`动作来创建一个新merge_request,也可使用此动作的别名`merge_request.create`来创建

### 示例

在`transitions`中的`action`中可以使用`open_merge_request`来执行创建merge_request动作,下面的例子中，监听了用户的push动作，当用户推送代码到master之后，便使用open_merge_request动作来创建一个新的merge_request，并把该merge_request的链接存储到`conflict_merge_1`这个变量里

```yaml
step9:
  link: '{{chapter_5-1_issue}}'
  description: "实战(3): 创建合并请求"
  transitions:
    events: ['push']
    with: 'master'
    action:
      - type: open_merge_request
        with: 'feature1,master'
        store:
          conflict_merge_1: '{{result.data.html_url}}'
    to: step10
```

### Options

当`action`为open_merge_request的时候，支持的参数

| 参数 | 类型 | 描述 | 默认 | 是否为必要参数 |
| --- | --- | --- | --- | --- | 
| with | String | merge_request的source分支和target分支，中间用逗号分隔 |  | ✓ |

### 创建open_merge_request后返回result的格式

```ruby
{
  'result': {
    'data': {
      'html_url': 'https://codechina.csdn.net/namespace/project/merge_requests/1',
      'title': 'merge_request标题',
      'description': 'merge_request描述'
    }
  }
}
```


## close_merge_request / merge_request.close

使用`close_merge_request`动作来关闭一个merge_request,也可使用此动作的别名`merge_request.close`来创建

### 示例

在`transitions`中的`action`中可以使用`close_merge_request`来执行创建merge_request动作,下面的例子中，监听了用户的push动作，当用户推送代码到master之后，便使用close_merge_request动作来关闭链接存储在`conflict_merge_1`中的这个merge_request

```yaml
step9:
  link: '{{chapter_5-1_issue}}'
  description: "实战(3): 创建合并请求"
  transitions:
    events: ['push']
    with: 'master'
    action:
      - type: close_merge_request
        with: '{{conflict_merge_1}}'
    to: step10
```

### Options

当`action`为close_merge_request的时候，支持的参数

| 参数 | 类型 | 描述 | 默认 | 是否为必要参数 |
| --- | --- | --- | --- | --- | 
| with | String | 存储merge_request链接的变量名，用`{{}}`包含 |  | ✓ |


## reply / issue_comment.created / note / choice

使用`reply`来当前issue或merge_request中创建一条新的评论,也可使用别名`issue_comment.created`, `note`, `choice`

### 示例

在`transitions`中的`action`中可以使用`reply`来创建一条评论,下面的例子中，监听了用户的回复动作，当用户推送代码到回复任意内容之后，便使用reply动作在当前的issue或merge_request中创建一条新的评论

```yaml
step1:
  link: '{{chapter_5_issue}}'
  description: "git 分支原理"
  transitions:
    events: ['note_events']
    action:
      - type: reply
        with: 007_3_how_branch_works_1.md
    to: step2
```

### Options

当`action`为reply的时候，支持的参数

| 参数 | 类型 | 描述 | 默认 | 是否为必要参数 |
| --- | --- | --- | --- | --- | 
| with | String | 评论内容，可以是文件名，也可以是内容 |  | ✓ |