mirror of
https://github.com/zadam/trilium.git
synced 2025-10-06 05:25:37 +08:00
feat(scripts): add script to port discussions
This commit is contained in:
parent
f0f79b65e2
commit
1ff7228ca5
2 changed files with 301 additions and 0 deletions
191
port-discussions.log
Normal file
191
port-discussions.log
Normal file
|
@ -0,0 +1,191 @@
|
|||
Transferred discussion 2089 to https://github.com/orgs/TriliumNext/discussions/5889
|
||||
Transferred discussion 2096 to https://github.com/orgs/TriliumNext/discussions/5890
|
||||
Transferred discussion 2109 to https://github.com/orgs/TriliumNext/discussions/5891
|
||||
Transferred discussion 2091 to https://github.com/orgs/TriliumNext/discussions/5892
|
||||
Transferred discussion 2087 to https://github.com/orgs/TriliumNext/discussions/5893
|
||||
Transferred discussion 2074 to https://github.com/orgs/TriliumNext/discussions/5894
|
||||
Transferred discussion 2062 to https://github.com/orgs/TriliumNext/discussions/5895
|
||||
Transferred discussion 2071 to https://github.com/orgs/TriliumNext/discussions/5896
|
||||
Transferred discussion 2063 to https://github.com/orgs/TriliumNext/discussions/5897
|
||||
Transferred discussion 2054 to https://github.com/orgs/TriliumNext/discussions/5898
|
||||
Transferred discussion 8 to https://github.com/orgs/TriliumNext/discussions/5899
|
||||
Transferred discussion 2028 to https://github.com/orgs/TriliumNext/discussions/5900
|
||||
Transferred discussion 1793 to https://github.com/orgs/TriliumNext/discussions/5901
|
||||
Transferred discussion 2022 to https://github.com/orgs/TriliumNext/discussions/5902
|
||||
Transferred discussion 1731 to https://github.com/orgs/TriliumNext/discussions/5903
|
||||
Transferred discussion 1981 to https://github.com/orgs/TriliumNext/discussions/5904
|
||||
Transferred discussion 2015 to https://github.com/orgs/TriliumNext/discussions/5905
|
||||
Transferred discussion 1972 to https://github.com/orgs/TriliumNext/discussions/5906
|
||||
Transferred discussion 24 to https://github.com/orgs/TriliumNext/discussions/5907
|
||||
Transferred discussion 1967 to https://github.com/orgs/TriliumNext/discussions/5908
|
||||
Transferred discussion 1947 to https://github.com/orgs/TriliumNext/discussions/5909
|
||||
Transferred discussion 444 to https://github.com/orgs/TriliumNext/discussions/5910
|
||||
Transferred discussion 1904 to https://github.com/orgs/TriliumNext/discussions/5911
|
||||
Transferred discussion 1907 to https://github.com/orgs/TriliumNext/discussions/5912
|
||||
Transferred discussion 1860 to https://github.com/orgs/TriliumNext/discussions/5913
|
||||
Transferred discussion 1859 to https://github.com/orgs/TriliumNext/discussions/5914
|
||||
Transferred discussion 1814 to https://github.com/orgs/TriliumNext/discussions/5915
|
||||
Transferred discussion 1823 to https://github.com/orgs/TriliumNext/discussions/5916
|
||||
Transferred discussion 1699 to https://github.com/orgs/TriliumNext/discussions/5917
|
||||
Transferred discussion 1760 to https://github.com/orgs/TriliumNext/discussions/5918
|
||||
Transferred discussion 1807 to https://github.com/orgs/TriliumNext/discussions/5919
|
||||
Transferred discussion 1806 to https://github.com/orgs/TriliumNext/discussions/5920
|
||||
Transferred discussion 1800 to https://github.com/orgs/TriliumNext/discussions/5921
|
||||
Transferred discussion 1797 to https://github.com/orgs/TriliumNext/discussions/5922
|
||||
Transferred discussion 1791 to https://github.com/orgs/TriliumNext/discussions/5923
|
||||
Transferred discussion 1774 to https://github.com/orgs/TriliumNext/discussions/5924
|
||||
Transferred discussion 1771 to https://github.com/orgs/TriliumNext/discussions/5925
|
||||
Transferred discussion 1696 to https://github.com/orgs/TriliumNext/discussions/5926
|
||||
Transferred discussion 1736 to https://github.com/orgs/TriliumNext/discussions/5927
|
||||
Transferred discussion 1733 to https://github.com/orgs/TriliumNext/discussions/5928
|
||||
Transferred discussion 1682 to https://github.com/orgs/TriliumNext/discussions/5929
|
||||
Transferred discussion 867 to https://github.com/orgs/TriliumNext/discussions/5930
|
||||
Transferred discussion 1593 to https://github.com/orgs/TriliumNext/discussions/5931
|
||||
Transferred discussion 1671 to https://github.com/orgs/TriliumNext/discussions/5932
|
||||
Transferred discussion 1669 to https://github.com/orgs/TriliumNext/discussions/5933
|
||||
Transferred discussion 1654 to https://github.com/orgs/TriliumNext/discussions/5934
|
||||
Transferred discussion 1653 to https://github.com/orgs/TriliumNext/discussions/5935
|
||||
Transferred discussion 1642 to https://github.com/orgs/TriliumNext/discussions/5936
|
||||
Transferred discussion 1638 to https://github.com/orgs/TriliumNext/discussions/5937
|
||||
Transferred discussion 1629 to https://github.com/orgs/TriliumNext/discussions/5938
|
||||
Transferred discussion 1621 to https://github.com/orgs/TriliumNext/discussions/5939
|
||||
Transferred discussion 1565 to https://github.com/orgs/TriliumNext/discussions/5940
|
||||
Transferred discussion 1573 to https://github.com/orgs/TriliumNext/discussions/5941
|
||||
Transferred discussion 1387 to https://github.com/orgs/TriliumNext/discussions/5942
|
||||
Transferred discussion 1548 to https://github.com/orgs/TriliumNext/discussions/5943
|
||||
Transferred discussion 1576 to https://github.com/orgs/TriliumNext/discussions/5944
|
||||
Transferred discussion 1568 to https://github.com/orgs/TriliumNext/discussions/5945
|
||||
Transferred discussion 904 to https://github.com/orgs/TriliumNext/discussions/5946
|
||||
Transferred discussion 1386 to https://github.com/orgs/TriliumNext/discussions/5947
|
||||
Transferred discussion 1526 to https://github.com/orgs/TriliumNext/discussions/5948
|
||||
Transferred discussion 1443 to https://github.com/orgs/TriliumNext/discussions/5949
|
||||
Transferred discussion 1529 to https://github.com/orgs/TriliumNext/discussions/5950
|
||||
Transferred discussion 1461 to https://github.com/orgs/TriliumNext/discussions/5951
|
||||
Transferred discussion 1490 to https://github.com/orgs/TriliumNext/discussions/5952
|
||||
Transferred discussion 1497 to https://github.com/orgs/TriliumNext/discussions/5953
|
||||
Transferred discussion 1444 to https://github.com/orgs/TriliumNext/discussions/5954
|
||||
Transferred discussion 1522 to https://github.com/orgs/TriliumNext/discussions/5955
|
||||
Transferred discussion 1385 to https://github.com/orgs/TriliumNext/discussions/5956
|
||||
Transferred discussion 1504 to https://github.com/orgs/TriliumNext/discussions/5957
|
||||
Transferred discussion 1448 to https://github.com/orgs/TriliumNext/discussions/5958
|
||||
Transferred discussion 1491 to https://github.com/orgs/TriliumNext/discussions/5959
|
||||
Transferred discussion 1463 to https://github.com/orgs/TriliumNext/discussions/5960
|
||||
Transferred discussion 1460 to https://github.com/orgs/TriliumNext/discussions/5961
|
||||
Transferred discussion 1449 to https://github.com/orgs/TriliumNext/discussions/5962
|
||||
Transferred discussion 1441 to https://github.com/orgs/TriliumNext/discussions/5963
|
||||
Transferred discussion 1403 to https://github.com/orgs/TriliumNext/discussions/5964
|
||||
Transferred discussion 1426 to https://github.com/orgs/TriliumNext/discussions/5965
|
||||
Transferred discussion 1420 to https://github.com/orgs/TriliumNext/discussions/5966
|
||||
Transferred discussion 1414 to https://github.com/orgs/TriliumNext/discussions/5967
|
||||
Transferred discussion 1417 to https://github.com/orgs/TriliumNext/discussions/5968
|
||||
Transferred discussion 1416 to https://github.com/orgs/TriliumNext/discussions/5969
|
||||
Transferred discussion 1442 to https://github.com/orgs/TriliumNext/discussions/5970
|
||||
Transferred discussion 1334 to https://github.com/orgs/TriliumNext/discussions/5971
|
||||
Transferred discussion 1052 to https://github.com/orgs/TriliumNext/discussions/5972
|
||||
Transferred discussion 1265 to https://github.com/orgs/TriliumNext/discussions/5973
|
||||
Transferred discussion 1318 to https://github.com/orgs/TriliumNext/discussions/5974
|
||||
Transferred discussion 1346 to https://github.com/orgs/TriliumNext/discussions/5975
|
||||
Transferred discussion 793 to https://github.com/orgs/TriliumNext/discussions/5976
|
||||
Transferred discussion 1356 to https://github.com/orgs/TriliumNext/discussions/5977
|
||||
Transferred discussion 1290 to https://github.com/orgs/TriliumNext/discussions/5978
|
||||
Transferred discussion 1111 to https://github.com/orgs/TriliumNext/discussions/5979
|
||||
Transferred discussion 1311 to https://github.com/orgs/TriliumNext/discussions/5980
|
||||
Transferred discussion 1317 to https://github.com/orgs/TriliumNext/discussions/5981
|
||||
Transferred discussion 1287 to https://github.com/orgs/TriliumNext/discussions/5982
|
||||
Transferred discussion 1282 to https://github.com/orgs/TriliumNext/discussions/5983
|
||||
Transferred discussion 1279 to https://github.com/orgs/TriliumNext/discussions/5984
|
||||
Transferred discussion 1271 to https://github.com/orgs/TriliumNext/discussions/5985
|
||||
Transferred discussion 356 to https://github.com/orgs/TriliumNext/discussions/5986
|
||||
Transferred discussion 1255 to https://github.com/orgs/TriliumNext/discussions/5987
|
||||
Transferred discussion 1210 to https://github.com/orgs/TriliumNext/discussions/5988
|
||||
Transferred discussion 1249 to https://github.com/orgs/TriliumNext/discussions/5989
|
||||
Transferred discussion 1203 to https://github.com/orgs/TriliumNext/discussions/5990
|
||||
Transferred discussion 1116 to https://github.com/orgs/TriliumNext/discussions/5991
|
||||
Transferred discussion 827 to https://github.com/orgs/TriliumNext/discussions/5992
|
||||
Transferred discussion 1176 to https://github.com/orgs/TriliumNext/discussions/5993
|
||||
Transferred discussion 1166 to https://github.com/orgs/TriliumNext/discussions/5994
|
||||
Transferred discussion 1079 to https://github.com/orgs/TriliumNext/discussions/5995
|
||||
Transferred discussion 1082 to https://github.com/orgs/TriliumNext/discussions/5996
|
||||
Transferred discussion 1060 to https://github.com/orgs/TriliumNext/discussions/5997
|
||||
Transferred discussion 1085 to https://github.com/orgs/TriliumNext/discussions/5998
|
||||
Transferred discussion 360 to https://github.com/orgs/TriliumNext/discussions/5999
|
||||
Transferred discussion 442 to https://github.com/orgs/TriliumNext/discussions/6000
|
||||
Transferred discussion 981 to https://github.com/orgs/TriliumNext/discussions/6001
|
||||
Transferred discussion 975 to https://github.com/orgs/TriliumNext/discussions/6002
|
||||
Transferred discussion 1007 to https://github.com/orgs/TriliumNext/discussions/6003
|
||||
Transferred discussion 968 to https://github.com/orgs/TriliumNext/discussions/6004
|
||||
Transferred discussion 957 to https://github.com/orgs/TriliumNext/discussions/6005
|
||||
Transferred discussion 939 to https://github.com/orgs/TriliumNext/discussions/6006
|
||||
Transferred discussion 775 to https://github.com/orgs/TriliumNext/discussions/6007
|
||||
Transferred discussion 944 to https://github.com/orgs/TriliumNext/discussions/6008
|
||||
Transferred discussion 934 to https://github.com/orgs/TriliumNext/discussions/6009
|
||||
Transferred discussion 907 to https://github.com/orgs/TriliumNext/discussions/6010
|
||||
Transferred discussion 898 to https://github.com/orgs/TriliumNext/discussions/6011
|
||||
Transferred discussion 846 to https://github.com/orgs/TriliumNext/discussions/6012
|
||||
Transferred discussion 851 to https://github.com/orgs/TriliumNext/discussions/6013
|
||||
Transferred discussion 836 to https://github.com/orgs/TriliumNext/discussions/6014
|
||||
Transferred discussion 833 to https://github.com/orgs/TriliumNext/discussions/6015
|
||||
Transferred discussion 828 to https://github.com/orgs/TriliumNext/discussions/6016
|
||||
Transferred discussion 527 to https://github.com/orgs/TriliumNext/discussions/6017
|
||||
Transferred discussion 824 to https://github.com/orgs/TriliumNext/discussions/6018
|
||||
Transferred discussion 770 to https://github.com/orgs/TriliumNext/discussions/6019
|
||||
Transferred discussion 774 to https://github.com/orgs/TriliumNext/discussions/6020
|
||||
Transferred discussion 716 to https://github.com/orgs/TriliumNext/discussions/6021
|
||||
Transferred discussion 731 to https://github.com/orgs/TriliumNext/discussions/6022
|
||||
Transferred discussion 519 to https://github.com/orgs/TriliumNext/discussions/6023
|
||||
Transferred discussion 704 to https://github.com/orgs/TriliumNext/discussions/6024
|
||||
Transferred discussion 665 to https://github.com/orgs/TriliumNext/discussions/6025
|
||||
Transferred discussion 610 to https://github.com/orgs/TriliumNext/discussions/6026
|
||||
Transferred discussion 662 to https://github.com/orgs/TriliumNext/discussions/6027
|
||||
Transferred discussion 596 to https://github.com/orgs/TriliumNext/discussions/6028
|
||||
Transferred discussion 621 to https://github.com/orgs/TriliumNext/discussions/6029
|
||||
Transferred discussion 611 to https://github.com/orgs/TriliumNext/discussions/6030
|
||||
Transferred discussion 566 to https://github.com/orgs/TriliumNext/discussions/6031
|
||||
Transferred discussion 591 to https://github.com/orgs/TriliumNext/discussions/6032
|
||||
Transferred discussion 590 to https://github.com/orgs/TriliumNext/discussions/6033
|
||||
Transferred discussion 578 to https://github.com/orgs/TriliumNext/discussions/6034
|
||||
Transferred discussion 575 to https://github.com/orgs/TriliumNext/discussions/6035
|
||||
Transferred discussion 564 to https://github.com/orgs/TriliumNext/discussions/6036
|
||||
Transferred discussion 563 to https://github.com/orgs/TriliumNext/discussions/6037
|
||||
Transferred discussion 557 to https://github.com/orgs/TriliumNext/discussions/6038
|
||||
Transferred discussion 551 to https://github.com/orgs/TriliumNext/discussions/6039
|
||||
Transferred discussion 540 to https://github.com/orgs/TriliumNext/discussions/6040
|
||||
Transferred discussion 523 to https://github.com/orgs/TriliumNext/discussions/6041
|
||||
Transferred discussion 512 to https://github.com/orgs/TriliumNext/discussions/6042
|
||||
Transferred discussion 515 to https://github.com/orgs/TriliumNext/discussions/6043
|
||||
Transferred discussion 510 to https://github.com/orgs/TriliumNext/discussions/6044
|
||||
Transferred discussion 509 to https://github.com/orgs/TriliumNext/discussions/6045
|
||||
Transferred discussion 482 to https://github.com/orgs/TriliumNext/discussions/6046
|
||||
Transferred discussion 494 to https://github.com/orgs/TriliumNext/discussions/6047
|
||||
Transferred discussion 478 to https://github.com/orgs/TriliumNext/discussions/6048
|
||||
Transferred discussion 461 to https://github.com/orgs/TriliumNext/discussions/6049
|
||||
Transferred discussion 476 to https://github.com/orgs/TriliumNext/discussions/6050
|
||||
Transferred discussion 471 to https://github.com/orgs/TriliumNext/discussions/6051
|
||||
Transferred discussion 445 to https://github.com/orgs/TriliumNext/discussions/6052
|
||||
Transferred discussion 393 to https://github.com/orgs/TriliumNext/discussions/6053
|
||||
Transferred discussion 435 to https://github.com/orgs/TriliumNext/discussions/6054
|
||||
Transferred discussion 440 to https://github.com/orgs/TriliumNext/discussions/6055
|
||||
Transferred discussion 369 to https://github.com/orgs/TriliumNext/discussions/6056
|
||||
Transferred discussion 398 to https://github.com/orgs/TriliumNext/discussions/6057
|
||||
Transferred discussion 370 to https://github.com/orgs/TriliumNext/discussions/6058
|
||||
Transferred discussion 367 to https://github.com/orgs/TriliumNext/discussions/6059
|
||||
Transferred discussion 169 to https://github.com/orgs/TriliumNext/discussions/6060
|
||||
Transferred discussion 260 to https://github.com/orgs/TriliumNext/discussions/6061
|
||||
Transferred discussion 235 to https://github.com/orgs/TriliumNext/discussions/6062
|
||||
Transferred discussion 26 to https://github.com/orgs/TriliumNext/discussions/6063
|
||||
Transferred discussion 188 to https://github.com/orgs/TriliumNext/discussions/6064
|
||||
Transferred discussion 189 to https://github.com/orgs/TriliumNext/discussions/6065
|
||||
Transferred discussion 2 to https://github.com/orgs/TriliumNext/discussions/6066
|
||||
Transferred discussion 182 to https://github.com/orgs/TriliumNext/discussions/6067
|
||||
Transferred discussion 172 to https://github.com/orgs/TriliumNext/discussions/6068
|
||||
Transferred discussion 178 to https://github.com/orgs/TriliumNext/discussions/6069
|
||||
Transferred discussion 168 to https://github.com/orgs/TriliumNext/discussions/6070
|
||||
Transferred discussion 164 to https://github.com/orgs/TriliumNext/discussions/6071
|
||||
Transferred discussion 158 to https://github.com/orgs/TriliumNext/discussions/6072
|
||||
Transferred discussion 53 to https://github.com/orgs/TriliumNext/discussions/6073
|
||||
Transferred discussion 10 to https://github.com/orgs/TriliumNext/discussions/6074
|
||||
Transferred discussion 5 to https://github.com/orgs/TriliumNext/discussions/6075
|
||||
Transferred discussion 30 to https://github.com/orgs/TriliumNext/discussions/6076
|
||||
Transferred discussion 11 to https://github.com/orgs/TriliumNext/discussions/6077
|
||||
Transferred discussion 29 to https://github.com/orgs/TriliumNext/discussions/6078
|
||||
Transferred discussion 31 to https://github.com/orgs/TriliumNext/discussions/6079
|
110
scripts/port-discussions.ts
Normal file
110
scripts/port-discussions.ts
Normal file
|
@ -0,0 +1,110 @@
|
|||
/**
|
||||
* @module
|
||||
*
|
||||
* Goes through all discussions in the source repository and transfers them to the target repository.
|
||||
*
|
||||
* Limitations:
|
||||
* - Upon encountering a locked discussion, the script will fail. Make sure to unlock discussions before running the script.
|
||||
*/
|
||||
|
||||
import { type BrowserContext, chromium } from 'playwright';
|
||||
import { createWriteStream, existsSync, readFileSync, writeFileSync } from 'fs';
|
||||
|
||||
const SOURCE_URL = "https://github.com/TriliumNext/Notes";
|
||||
const TARGET_REPOSITORY_ID = 92111509;
|
||||
|
||||
const fsLog = createWriteStream('port-discussions.log', { flags: 'a' });
|
||||
|
||||
async function login(context: BrowserContext) {
|
||||
const page = await context.newPage();
|
||||
await page.goto('https://github.com/login');
|
||||
|
||||
console.log("👤 Please log in manually in the opened browser...");
|
||||
await page.waitForNavigation({ url: 'https://github.com/' }); // Wait for login
|
||||
|
||||
// Save storage state (cookies, localStorage, etc.)
|
||||
const storage = await context.storageState();
|
||||
writeFileSync('auth.json', JSON.stringify(storage))
|
||||
await page.close();
|
||||
}
|
||||
|
||||
async function portIssue(issue: string, context: BrowserContext) {
|
||||
const page = await context.newPage();
|
||||
await page.goto(`${SOURCE_URL}/discussions/${issue}`);
|
||||
|
||||
const button = page.locator("#dialog-show-discussion-transfer-conversation");
|
||||
await button.click();
|
||||
|
||||
const modal = page.locator("#discussion-transfer-conversation");
|
||||
const modalContent = page.locator("#transfer-candidate-repos");
|
||||
await modalContent.waitFor({ state: 'visible' });
|
||||
|
||||
modalContent.locator(`#transfer_repository_${TARGET_REPOSITORY_ID}`).click();
|
||||
const navigationPromise = page.waitForNavigation({
|
||||
waitUntil: "domcontentloaded"
|
||||
});
|
||||
|
||||
const submitButton = modal.locator(`button[type="submit"]`);
|
||||
await submitButton.waitFor({ state: 'attached' });
|
||||
await submitButton.click();
|
||||
|
||||
await navigationPromise;
|
||||
console.log(`✅ Discussion ${issue} has been transferred to the target repository.`);
|
||||
fsLog.write(`Transferred discussion ${issue} to ${page.url()}\n`);
|
||||
await page.waitForTimeout(2000); // Wait for a second to ensure the transfer is complete
|
||||
await page.close();
|
||||
}
|
||||
|
||||
async function getFirstPageResults(context: BrowserContext) {
|
||||
const page = await context.newPage();
|
||||
await page.goto(SOURCE_URL + "/discussions");
|
||||
|
||||
// Wait for the discussions to load
|
||||
const allDiscussionLinks = (await (page.locator(`a[data-hovercard-type="discussion"]`).all()));
|
||||
let ids: string[] = [];
|
||||
for (const link of allDiscussionLinks) {
|
||||
const url = await link.getAttribute('href');
|
||||
const number = url?.match(/\/discussions\/(\d+)/)?.[1];
|
||||
ids.push(number);
|
||||
}
|
||||
console.log(`Found ${ids.length} discussions.`);
|
||||
await page.close();
|
||||
return ids;
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: false }); // show browser
|
||||
let storageState = undefined;
|
||||
if (existsSync('auth.json')) {
|
||||
console.log("🔑 Using existing authentication state...");
|
||||
storageState = JSON.parse(readFileSync('auth.json', 'utf-8'));
|
||||
}
|
||||
|
||||
const context = await browser.newContext({ storageState });
|
||||
if (!storageState) {
|
||||
await login(context);
|
||||
}
|
||||
|
||||
const travelledIds: string[] = [];
|
||||
let ids = await getFirstPageResults(context);
|
||||
|
||||
while (ids.length > 0) {
|
||||
for (const id of ids) {
|
||||
try {
|
||||
if (travelledIds.includes(id)) {
|
||||
console.log(`Discussion ${id} has already been transferred.`);
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
await portIssue(id, context);
|
||||
travelledIds.push(id);
|
||||
} catch (error) {
|
||||
console.error(`❌ Error transferring discussion ${id}:`, error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
ids = await getFirstPageResults(context);
|
||||
}
|
||||
await browser.close();
|
||||
})();
|
Loading…
Add table
Reference in a new issue