Bridgy-Fed通知スクリプトを書き換えた

作成:

noteだけでなくblogのほうも更新があるとBridgy-Fedに通知されるようにスクリプトを書き換えた。

const child_process = await import('child_process')

const MAX_MENTION_SENDS = 10

const sleep = (sec) => new Promise((res) => setTimeout(res, sec * 1000))

async function sendWebmention(oldCommitHash, newCommitHash) {
  const diff = child_process
  .spawnSync('git', ['diff', '--name-only', oldCommitHash, newCommitHash])
  .stdout.toString()
  const files = diff.split('\n')

  const filter_list =[
    {
      path: "src/content/blog/",
      url: "https://ubanis.com/"
    },
    {
      path: "src/content/note/",
      url: "https://ubanis.com/note/"
    }
  ]

  var url_list = []

  for(const s of filter_list) {
    const filtered = files.filter((file) => file.indexOf(s.path) !== -1)
    const mentionlist = {file: filtered,url: s.url}
    console.log(mentionlist)
    for (let i = 0; i < mentionlist.file.length && i < MAX_MENTION_SENDS; ++i) {
      const filePath = mentionlist.file[i].split('/')
      const linkPath = filePath.slice(3)
      const tempurl = mentionlist.url + linkPath.join('/')
      const url = tempurl.replace(/\.mdx|\.md/g, "")
      // eslint-disable-next-line no-console
      url_list.push(url);
    }
  }

  if (url_list.length >= 1) {
    await sleep(110)
    for(const url of url_list) {
      console.log('sending webmention of ' + url)
      child_process.spawnSync('curl', [
        'https://fed.brid.gy/webmention',
        '-d',
        `source=${encodeURIComponent(url)}`,
        '-d',
        `target=https://fed.brid.gy`,
      ])
    }
  }
}

const args = process.argv.slice(2)
sendWebmention(args[0], args[1])