taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

bump-taler-version.mjs (3425B)


      1 #!/usr/bin/env node
      2 
      3 // Bump the package.json versions in Taler-related packagesin
      4 // this repository.
      5 // The version must be in one of the following formats:
      6 // - x.y.z
      7 // - x.y.z-dev.n
      8 
      9 import * as child_process from "child_process";
     10 import * as fs from "fs";
     11 
     12 let requestedVersion = process.argv[2];
     13 
     14 let dry = false;
     15 if (process.argv.includes("--dry")) {
     16   dry = true;
     17 }
     18 
     19 let verMatched = false;
     20 let verMajor = 0;
     21 let verMinor = 0;
     22 let verPatch = 0;
     23 let verDev = undefined;
     24 
     25 // Parse the requested version
     26 const releaseVerRegex = /^(\d+)[.](\d+)[.](\d+)$/;
     27 const devVerRegex = /^(\d+)[.](\d+)[.](\d+)-dev[.](\d+)$/;
     28 
     29 const releaseMatch = requestedVersion.match(releaseVerRegex);
     30 if (releaseMatch) {
     31   verMatched = true;
     32   verMajor = releaseMatch[1];
     33   verMinor = releaseMatch[2];
     34   verPatch = releaseMatch[3];
     35 }
     36 
     37 if (!verMatched) {
     38   const devMatch = requestedVersion.match(devVerRegex);
     39   if (devMatch) {
     40     verMatched = true;
     41     verMajor = devMatch[1];
     42     verMinor = devMatch[2];
     43     verPatch = devMatch[3];
     44     verDev = devMatch[4];
     45   }
     46 }
     47 
     48 if (!verMatched) {
     49   console.error('wrong version format, it should have 3 numbers separated with dots or end with -dev.<buildnumber>')
     50   process.exit(1)
     51 }
     52 
     53 const packages = fs.readdirSync("packages")
     54 
     55 for (const pkg of packages) {
     56   const p = `packages/${pkg}/package.json`;
     57   const data = JSON.parse(fs.readFileSync(p));
     58   console.log(p, data.version);
     59   if (!dry) {
     60     data.version = requestedVersion;
     61     fs.writeFileSync(p, JSON.stringify(data, undefined, 2) + "\n");
     62   }
     63 }
     64 
     65 {
     66   const p = "packages/taler-wallet-webextension/manifest-common.json";
     67   const data = JSON.parse(fs.readFileSync(p));
     68   console.log("manifest version", data.version);
     69   console.log("manifest version_name", data.version_name);
     70   // In manifest.json, we transform x.y.z-dev.n info x.y.z.n.
     71   // It's necessary because browsers only allow decimals and dots
     72   // in that field.
     73   let dottedVer = undefined;
     74   if (verDev != null) {
     75     dottedVer = `${verMajor}.${verMinor}.${verPatch}.${verDev}`;
     76   } else {
     77     dottedVer = `${verMajor}.${verMinor}.${verPatch}`;
     78   }
     79   console.log("new manifest version", dottedVer);
     80   if (!dry) {
     81     data.version = dottedVer;
     82     data.version_name = requestedVersion;
     83     fs.writeFileSync(p, JSON.stringify(data, undefined, 2) + "\n");
     84   }
     85 }
     86 
     87 let debs = ["taler-wallet-cli", "taler-harness"];
     88 
     89 for (const deb of debs) {
     90   const p = `packages/${deb}/debian/changelog`;
     91   const data = fs.readFileSync(p, {
     92     encoding: "utf-8",
     93   });
     94   const lines = data.split("\n");
     95   for (const line of lines) {
     96     const s = line.trim();
     97     if (s == "") {
     98       continue;
     99     }
    100     const re = /\((.*)\)/;
    101     const m = s.match(re);
    102     const version = m[1];
    103     let pfx = "";
    104     // In Debian, the pre-release version is indicated
    105     // by tilde, not by dash.
    106     const debVersion = requestedVersion.replace("-", "~")
    107     if (version != debVersion) {
    108       pfx = "[!] ";
    109       if (!dry) {
    110         const dateStr = child_process.execSync("date -R", {
    111           encoding: "utf-8",
    112         });
    113         const entryLines = [
    114           `${deb} (${debVersion}) unstable; urgency=low`,
    115           "",
    116           `  * Release ${requestedVersion}`,
    117           "",
    118           ` -- Florian Dold <dold@taler.net>  ${dateStr}`,
    119           ``,
    120         ];
    121         fs.writeFileSync(p, `${entryLines.join("\n")}${data}`);
    122       }
    123     }
    124     console.log(`${pfx}${p} is ${version}`);
    125     break;
    126   }
    127 }