-
Notifications
You must be signed in to change notification settings - Fork 282
96 lines (84 loc) · 2.98 KB
/
linear_issue_open.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
name: Sync GitHub Issues to Linear
on:
issues:
types: [opened, reopened]
pull_request:
types: [opened, reopened]
jobs:
sync-to-linear:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Create Linear Issue
uses: actions/github-script@v7
env:
LINEAR_API_KEY: ${{ secrets.LINEAR_API_KEY }}
with:
script: |
const event = context.payload;
const isIssue = !!event.issue;
const title = isIssue ? event.issue.title : event.pull_request.title;
const body = isIssue ? event.issue.body : event.pull_request.body;
const url = isIssue ? event.issue.html_url : event.pull_request.html_url;
const query = `
mutation CreateIssue($input: CreateIssueInput!) {
issueCreate(input: $input) {
success
issue {
id
identifier
url
}
}
}
`;
const variables = {
input: {
title: title,
description: `${body}\n\nOriginal ${isIssue ? 'Issue' : 'PR'}: ${url}`,
teamId: process.env.LINEAR_TEAM_ID,
labelIds: process.env.LINEAR_LABEL_IDS?.split(',')
}
};
try {
const response = await fetch('https://api.linear.app/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': process.env.LINEAR_API_KEY
},
body: JSON.stringify({
query,
variables
})
});
const data = await response.json();
if (data.errors) {
core.setFailed(`Failed to create Linear issue: ${JSON.stringify(data.errors)}`);
return;
}
// Comment on the GitHub issue/PR with the Linear link
const linearIssue = data.data.issueCreate.issue;
const comment = `Created Linear issue: ${linearIssue.identifier} (${linearIssue.url})`;
if (isIssue) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: event.issue.number,
body: comment
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: event.pull_request.number,
body: comment
});
}
} catch (error) {
core.setFailed(`Error: ${error.message}`);
}