-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
58 lines (47 loc) · 1.85 KB
/
index.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
const fs = require('fs');
const core = require('@actions/core');
const Handlebars = require('handlebars');
const { format } = require('date-fns');
const SDK = require('@yuque/sdk');
const defaultTemplate = `
{{#each record}}
- [{{title}} ( {{short updated_at "MM-dd"}} · {{math likes_count "*" 7}}颗稻谷)](https://yuque.com/{{@root.namespace}}/{{slug}})
{{/each}}
`;
Handlebars.registerHelper('short', function (date, formatStr = 'MMMM dd') {
return format(new Date(date), formatStr);
});
Handlebars.registerHelper("math", function(lvalue, operator, rvalue) {
lvalue = parseFloat(lvalue);
rvalue = parseFloat(rvalue);
return {
"+": lvalue + rvalue,
"-": lvalue - rvalue,
"*": lvalue * rvalue,
"/": lvalue / rvalue,
"%": lvalue % rvalue
}[operator];
});
(async function () {
try {
const yuqueToken = core.getInput('yuque-token');
const namespace = core.getInput('yuque-namespace');
const yuqueTemplateFile = core.getInput('yuque-template-file') || '';
const yuqueOutputFile = core.getInput('yuque-output-file') || 'README.md';
const publicOnly = core.getInput('yuque-doc-public-only');
const limit = core.getInput('yuque-doc-limit');
const orderBy = core.getInput('yuque-doc-order-by');
const client = new SDK({ token: yuqueToken });
const docs = await client.docs.list({ namespace });
const filteredDocs = docs.filter(doc => {
return doc.status === 1 && (publicOnly && !!doc.public)
})
.sort((a, b)=> a[orderBy] - b[orderBy])
.slice(0, limit);
const templateContent = fs.existsSync(yuqueTemplateFile) ? fs.readFileSync(yuqueTemplateFile, 'utf-8') : defaultTemplate;
const fileTemplate = Handlebars.compile(templateContent);
fs.writeFileSync(yuqueOutputFile, fileTemplate({ namespace, record: filteredDocs }));
} catch (e) {
core.setFailed(e.message);
}
})();