/
makepr.js
124 lines (115 loc) · 4.23 KB
/
makepr.js
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*\
title: $:/plugins/sq/makepr/startup.js
type: application/javascript
module-type: startup
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.name = "makepr-handler";
exports.platforms = ["browser"];
exports.after = ["startup"];
const REPO = "TiddlyWiki5",
REPO_BRANCH = "tiddlywiki-com",
STATUS_TITLE = "$:/state/makepr/prlink";
var getTiddlerPath = function(title) {
var originalTiddlerPaths = JSON.parse($tw.wiki.getTiddlerText("$:/config/OriginalTiddlerPaths",{}));
if(originalTiddlerPaths[title]) {
return `editions/tw5.com/tiddlers/${originalTiddlerPaths[title]}`;
} else {
return `editions/tw5.com/tiddlers/${title}.tid`;
}
}
var makepr = function(files,slug) {
const MyOctokit = $tw.Octokit.plugin($tw.createPullRequest);
const TOKEN = $tw.utils.getPassword("github");
if(!TOKEN || !TOKEN.length) {
alert("please set the github personal access token");
return;
}
const octokit = new MyOctokit({
auth: TOKEN,
});
// Returns a normal Octokit PR response
// See https://octokit.github.io/rest.js/#octokit-routes-pulls-create
const REPO_OWNER = $tw.wiki.getTiddlerText("$:/config/sq/makepr/repoOwner","jermolene");
const PR_USER_BRANCH = $tw.wiki.getTiddlerText("$:/temp/pr-user-branch",slug).substring(0,20);
$tw.wiki.addTiddler(new $tw.Tiddler({title: STATUS_TITLE, text: `Creating PR...`}));
octokit.createPullRequest({
owner: REPO_OWNER,
repo: REPO,
title: $tw.wiki.getTiddlerText("$:/temp/pr-title"),
body: $tw.wiki.getTiddlerText("$:/temp/pr-message"),
base: REPO_BRANCH /* To Do: allow optionally specifying branch via UI */,
head: `${PR_USER_BRANCH}-${Math.floor(Date.now() / 1000)}`,
changes: [
{
/* optional: if `files` is not passed, an empty commit is created instead */
files: files,
commit: $tw.wiki.getTiddlerText("$:/temp/pr-title"),
emptyCommit : false,
},
],
createWhenEmpty: false,
})
.then((pr) => {
console.log(pr.data.number);
$tw.wiki.addTiddler(new $tw.Tiddler({title: STATUS_TITLE, text:"PR created", link: `https://github.com/${REPO_OWNER}/${REPO}/pull/${pr.data.number}`}));
}).catch((err)=>{
$tw.wiki.addTiddler(new $tw.Tiddler({title: STATUS_TITLE, text: `There was an error in creating the PR. ${err}`}));
});
}
exports.startup = function() {
$tw.rootWidget.addEventListener("tm-makepr",function(event){
var filter = event.param ||"",
paramObject = event.paramObject || {},
slug = paramObject.slug,
tiddlersToUpload = $tw.wiki.filterTiddlers(filter,$tw.rootWidget),
files = {};
if(tiddlersToUpload.length) {
$tw.utils.each(tiddlersToUpload,function(title){
//check if tiddler exists?
var tiddler = $tw.wiki.getTiddler(title);
if(tiddler) {
var path = getTiddlerPath(title),
wikifyParser = $tw.wiki.parseText("text/vnd.tiddlywiki",$tw.wiki.getTiddlerText("$:/core/templates/tid-tiddler"),{
parseAsInline: false
}),
wikifyWidgetNode = $tw.wiki.makeWidget(wikifyParser,{
document: $tw.fakeDocument,
parentWidget: $tw.rootWidget,
variables: {currentTiddler: title}
}),
wikifyContainer = $tw.fakeDocument.createElement("div"),
tid;
wikifyWidgetNode.render(wikifyContainer,null);
tid = wikifyContainer.textContent;
files[path] = tid;
}
});
console.log(files);
if(!$tw.Octokit) {
$tw.wiki.addTiddler(new $tw.Tiddler({title: STATUS_TITLE, text: `loading Octokit library`}));
import("https://cdn.skypack.dev/@octokit/core").then((module)=>{
$tw.Octokit = module.Octokit;
return import("https://cdn.skypack.dev/octokit-plugin-create-pull-request");
}).then((module)=>{
$tw.createPullRequest = module.createPullRequest;
makepr(files,slug);
}).catch((err)=>{
$tw.wiki.addTiddler(new $tw.Tiddler({title: STATUS_TITLE, text: `There was an error in creating the PR. ${err}`}));
});
} else {
makepr(files,slug);
}
}
});
$tw.wiki.addEventListener("change",function(changes){
var modifiedTiddlers = Object.keys(changes).filter(tiddler => !tiddler.startsWith("$:/") && !changes[tiddler].deleted);
if(modifiedTiddlers.length) {
$tw.rootWidget.invokeActionsByTag("$:/tags/sq/change-actions",null,{"actionTiddler": $tw.utils.stringifyList(modifiedTiddlers)});
}
});
};
})();