{
  "version": 3,
  "sources": ["../../../bin/release.ts", "../../../bin/continuous-integration.ts", "../../../build.ts", "../../../bin/find-root.ts"],
  "sourcesContent": ["#!/usr/bin/env node\n\n/* eslint-disable @typescript-eslint/no-unsafe-argument, no-console, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/restrict-template-expressions */\n\nprocess.on('unhandledRejection', up => {\n  throw up\n})\n\nimport 'dotenv/config'\nimport { execSync } from 'child_process'\nimport { program } from 'commander'\nimport * as fs from 'fs'\nimport moment from 'moment'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\nimport { ContinuousIntegration as CI } from './continuous-integration'\n\nimport { version } from '../build'\nimport { pkg, root } from './find-root'\n\ntype ReleaseOptions = {\n  releaseMessage?: string\n  xpi: string\n  dryRun: boolean\n  preRelease?: boolean\n  tag?: string\n}\n\nprogram\n  .option('-r, --release-message <value>', 'add message to github release')\n  .option('-x, --xpi <value>', 'xpi filename template', '{name}-{version}.xpi')\n  .option('-d, --dry-run', 'dry run', !CI.service)\n  .option('-p, --pre-release', 'release is a pre-release')\n  .option('-t, --tag <value>', 'tag for release', CI.tag)\n  .parse(process.argv)\nconst options = program.opts() as ReleaseOptions\n\nif (options.tag && options.tag !== CI.tag) {\n  console.log('dry-run: tag specified manually, switching to dry-run mode')\n  options.dryRun = true\n}\n\nif (options.releaseMessage?.startsWith('@')) options.releaseMessage = fs.readFileSync(options.releaseMessage.substring(1), 'utf-8')\n\nimport { Octokit } from '@octokit/rest'\nconst octokit = new Octokit({ auth: `token ${process.env.GITHUB_TOKEN}` })\ntype ReleaseResponse = {\n  data: {\n    id: number\n    tag_name: string\n    html_url: string\n    upload_url: string\n    assets?: Array<{\n      id: number\n      name: string\n      created_at: string\n    }>\n  }\n}\n\nconst repositoryMatch = pkg.repository.url.match(/:\\/\\/github.com\\/([^/]+)\\/([^.]+)\\.git$/)\nif (!repositoryMatch) throw new Error(`Could not parse GitHub repository URL: ${pkg.repository.url}`)\nconst [, owner, repo] = repositoryMatch\n\nconst xpi = parseTemplate(options.xpi).expand({ ...pkg, version })\n\n// eslint-disable-next-line no-magic-numbers\nconst EXPIRE_BUILDS = moment().subtract(7, 'days').toDate().toISOString()\n\nfunction bail(msg: string, status = 1): never {\n  console.log(msg) // eslint-disable-line no-console\n  process.exit(status)\n}\n\nif (options.dryRun) {\n  console.log('Not running on CI service, switching to dry-run mode') // eslint-disable-line no-console\n  CI.branch = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8' }).trim()\n}\n\nfunction report(msg: string): void {\n  console.log(`${options.dryRun ? 'dry-run: ' : ''}${msg}`) // eslint-disable-line no-console\n}\n\nif (CI.pull_request) bail('Not releasing pull requests', 0)\n\nif (options.tag) {\n  if (`v${pkg.version}` !== options.tag) bail(`Building tag ${options.tag}, but package version is ${pkg.version}`)\n\n  const releaseBranches = ['main', 'master'].concat(pkg.xpi.releaseBranches || [])\n  if (CI.branch && !releaseBranches.includes(CI.branch)) bail(`Building tag ${options.tag}, but branch is ${CI.branch}`)\n}\n\nconst tags = new Set<string>()\nfor (let regex = /(?:^|\\s)(?:#)([a-zA-Z\\d]+)/gm, tag; tag = regex.exec(CI.commit_message);) {\n  tags.add(tag[1])\n}\n\nif (tags.has('norelease')) bail(`Not releasing on ${CI.branch || 'default branch'} because of 'norelease' tag`, 0)\n\nconst issues: Set<number> = new Set(Array.from(tags, tag => Number.parseInt(tag, 10)).filter(tag => !Number.isNaN(tag)))\nif ((/^((issue|gh)-)?[0-9]+(-[a-z]+)?$/i).exec(CI.branch)) {\n  issues.add(Number.parseInt(CI.branch.replace(/[^0-9]/g, ''), 10))\n}\n\nfunction releaseTagName(release?: ReleaseResponse): string {\n  if (release?.data.tag_name) return release.data.tag_name\n  if (options.tag) return options.tag\n  bail('Cannot determine release tag name for announcement')\n}\n\nasync function announce(issue_number: number, release?: ReleaseResponse): Promise<void> {\n  if (tags.has('noannounce')) return\n\n  const issue = (await octokit.issues.get({ owner, repo, issue_number })).data\n  if (issue.locked || issue.state !== 'open') return\n\n  let build\n  let reason = ''\n\n  if (options.tag) {\n    build = `${options.preRelease ? 'pre-' : ''}release ${CI.tag}`\n  }\n  else {\n    build = `test build ${version}`\n  }\n  const link = `[${build}](https://github.com/${owner}/${repo}/releases/download/${releaseTagName(release)}/${pkg.name}-${version}.xpi)`\n\n  if (!options.tag) {\n    reason = ` (${JSON.stringify(CI.commit_message)})`\n    reason += [\n      '',\n      `Install in Zotero by downloading ${link}, opening the Zotero \"Tools\" menu, selecting \"Plugins\", open the gear menu in the top right, and select \"Install Plugin From File...\".`,\n      'Please test this build and report back whether it fixes the issue, and if not, what the remaining problem is. In the latter case, please also send a new log.',\n    ].join('\\n\\n')\n  }\n\n  const body = `:robot: this is your friendly neighborhood build bot announcing ${link}${reason}`\n\n  report(body)\n  if (options.dryRun) return\n\n  try {\n    await octokit.issues.createComment({ owner, repo, issue_number, body })\n  }\n  catch {\n    report(`Failed to announce '${build}: ${reason}' on ${issue_number}`)\n  }\n\n  if (process.env.GITHUB_ENV) fs.appendFileSync(process.env.GITHUB_ENV, `XPI_RELEASED=${issue_number}\\n`)\n}\n\nasync function uploadAsset(release: ReleaseResponse, asset: string, contentType: string): Promise<void> {\n  report(`uploading ${path.basename(asset)} to ${release.data.tag_name}`)\n  if (options.dryRun) return\n\n  const name = path.basename(asset)\n  const exists = (await octokit.repos.listReleaseAssets({ owner, repo, release_id: release.data.id })).data.find(a => a.name === name)\n  if (exists) {\n    if (release.data.tag_name === 'builds') {\n      await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: exists.id })\n    }\n    else {\n      bail(`failed to upload ${path.basename(asset)} to ${release.data.html_url}: asset exists`)\n    }\n  }\n\n  try {\n    await octokit.repos.uploadReleaseAsset({\n      owner,\n      repo,\n      url: release.data.upload_url,\n      release_id: release.data.id,\n      data: (fs.readFileSync(asset) as unknown as string), // TODO: what is going on here octokit?!\n      headers: {\n        'content-type': contentType,\n        'content-length': fs.statSync(asset).size,\n      },\n      name,\n    })\n  }\n  catch (err) {\n    bail(`failed to upload ${path.basename(asset)} to ${release.data.html_url}: ${err}`)\n  }\n}\n\nasync function getRelease(tag: string, prerelease: boolean): Promise<ReleaseResponse> {\n  try {\n    return await octokit.repos.getReleaseByTag({ owner, repo, tag })\n  }\n  catch {\n    try {\n      return await octokit.repos.createRelease({ owner, repo, tag_name: tag, prerelease })\n    }\n    catch (err) {\n      bail(`Could not get release ${tag}: ${err}`)\n    }\n  }\n}\n\nasync function update_rdf(releases_tag: string) {\n  const release = await getRelease(releases_tag, false)\n\n  const assets = (await octokit.repos.listReleaseAssets({ owner, repo, release_id: release.data.id })).data\n\n  const updates: Record<string, string> = {\n    'updates.json': 'application/json',\n  }\n\n  for (const asset of assets) {\n    if (asset.name in updates && updates[asset.name]) {\n      report(`removing ${asset.name} from ${release.data.tag_name}`)\n      // TODO: double asset.id until https://github.com/octokit/rest.js/issues/933 is fixed\n      if (options.dryRun) {\n        report(`update ${asset.name}`)\n      }\n      else {\n        await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: asset.id })\n      }\n    }\n  }\n  for (const [pointer, mimetype] of Object.entries(updates)) {\n    if (mimetype) await uploadAsset(release, path.join(root, `gen/${pointer}`), mimetype)\n  }\n}\n\nasync function main(): Promise<void> {\n  if (process.env.NIGHTLY === 'true') return\n\n  if (CI.branch === 'l10n_master') {\n    for (const issue of (await octokit.issues.listForRepo({ owner, repo, state: 'open', labels: 'translation' })).data) {\n      issues.add(issue.number)\n    }\n  }\n\n  let release: ReleaseResponse | undefined\n  if (options.tag) {\n    // upload XPI\n\n    try {\n      await octokit.repos.getReleaseByTag({ owner, repo, tag: options.tag })\n      if (!options.dryRun) bail(`release ${options.tag} exists, bailing`)\n    }\n    catch (err) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      // actually OK\n    }\n\n    if (options.dryRun) {\n      report(`create release ${options.tag}`)\n      report(`upload asset ${xpi}`)\n    }\n    else {\n      report(`uploading ${xpi} to new release ${CI.tag}`)\n      const createdRelease = await octokit.repos.createRelease({ owner, repo, tag_name: CI.tag, prerelease: !!options.preRelease, body: options.releaseMessage || '' })\n      release = createdRelease\n      await uploadAsset(createdRelease, path.join(root, `xpi/${xpi}`), 'application/vnd.zotero.plugin')\n    }\n\n    // RDF update pointer(s)\n    await update_rdf(pkg.xpi.releaseURL.split('/').filter((name: string) => name).reverse()[0])\n  }\n  else if (issues.size) { // only release builds tied to issues\n    release = await getRelease('builds', true)\n\n    for (const asset of release.data.assets || []) {\n      if (asset.name.endsWith('.xpi') && asset.created_at < EXPIRE_BUILDS) {\n        report(`deleting ${asset.name}`)\n        // TODO: double asset.id until https://github.com/octokit/rest.js/issues/933 is fixed\n        if (options.dryRun) {\n          report(`delete asset ${asset.name}`)\n        }\n        else {\n          await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: asset.id })\n        }\n      }\n    }\n    await uploadAsset(release, path.join(root, `xpi/${xpi}`), 'application/vnd.zotero.plugin')\n  }\n\n  if (process.env.VERBOSE) console.log({ tag: CI.tag, issues, release, tags })\n\n  for (const issue of Array.from(issues)) {\n    await announce(issue, release)\n  }\n}\n\nmain().catch(err => console.log(err))\n", "import * as child_process from 'node:child_process'\n\nclass ContinuousIntegrationSingleton {\n  public service = ''\n  public build_number = 0\n  public tag = ''\n  public commit_message = ''\n  public branch = ''\n  public pull_request = false\n  public issue = ''\n\n  constructor() {\n    for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n      if (process.env[id] === 'true') this.service = name\n    }\n\n    switch (this.service) {\n      case 'Circle':\n        this.build_number = this.parseInt(this.env('CIRCLE_BUILD_NUM'))\n        try {\n          const sha = this.env('CIRCLE_SHA1')\n          this.tag = child_process.execSync(`git describe --exact-match ${sha}`, { stdio: 'pipe' }).toString().trim()\n        }\n        catch (err) {\n          this.tag = ''\n        }\n        this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${this.env('CIRCLE_SHA1')}`).toString().trim()\n        this.branch = this.env('CIRCLE_BRANCH')\n        this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n        break\n\n      case 'GitHub':\n        this.build_number = this.parseInt(this.env('GITHUB_RUN_NUMBER'))\n        this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${this.env('GITHUB_SHA')}`).toString().trim()\n        this.pull_request = this.env('GITHUB_EVENT_NAME').startsWith('pull-request')\n\n        const githubRef = this.env('GITHUB_REF')\n\n        if (process.env.GITHUB_HEAD_REF) {\n          this.branch = process.env.GITHUB_HEAD_REF.split('/').pop() || ''\n        }\n        else if (githubRef.startsWith('refs/tags/')) {\n          // leave branch undefined when tagged... not great\n          this.tag = githubRef.split('/').pop() || ''\n        }\n        else if (githubRef.startsWith('refs/heads/')) {\n          this.branch = githubRef.split('/').pop() || ''\n        }\n        this.branch = this.branch || ''\n        this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n        break\n\n      default:\n        if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n    }\n  }\n\n  private env(name: string): string {\n    const value = process.env[name]\n    if (!value) throw new Error(`${name} is not set`)\n    return value\n  }\n\n  private parseInt(n: number | string | undefined): number {\n    if (typeof n === 'undefined') throw new Error('missing integer value')\n    if (typeof n === 'number') return n\n    const int = parseInt(n)\n    if (isNaN(int)) throw new Error(`${n} is not an integer`)\n    return int\n  }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n", "#!/usr/bin/env node\n\nimport os from 'node:os'\n\nimport { ContinuousIntegration as CI } from './bin/continuous-integration'\nimport { pkg } from './bin/find-root'\n\nexport let version = ''\nexport let release = Boolean(CI.tag)\n\nexport function buildNumber(n = 4) {\n  version = pkg.version as string\n\n  if (!release && CI.service) {\n    version += '.' + `${CI.build_number % (10 ** n)}`.padStart(n, '0') // assuming you are not outputting thousands of builds a week\n  }\n  else if (!release) {\n    version += `.${os.userInfo().username}.${os.hostname()}`\n  }\n}\n\nbuildNumber()\n", "import fs from 'node:fs'\nimport path from 'node:path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],
  "mappings": "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",
  "names": ["fs", "path", "path", "fs", "os", "moment", "release"]
}
