Skip to content
Snippets Groups Projects
update-version.js 1.98 KiB
Newer Older
#!/usr/bin/env node

// from https://gitlab.com/staltz/manyverse/blob/master/tools/update-version.js

/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

const ReactNativeVersion = require('react-native-version')
const readline = require('readline')
const leftPad = require('left-pad')
const path = require('path')
const fs = require('fs')

const currentVersion = JSON.parse(fs.readFileSync('./package.json')).version

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
})

function createTodaysVersion(attempt) {
  const today = new Date()
  const yy = today.getFullYear() - 2000 // So it's two digits
  const mm = leftPad(today.getMonth() + 1, 2, '0')
  const d = today.getDate()
  if (attempt === 0) {
    return `0.${yy}${mm}.${d}-beta`
  } else {
    const letter = String.fromCharCode(97 + attempt) // 0=a, 1=b, 2=c, ...
    return `0.${yy}${mm}.${d}-beta.${letter}`
  }
}

let nextVersion
for (let i = 0 /* letter a */; i <= 25 /* letter z */; i++) {
  nextVersion = createTodaysVersion(i)
  if (nextVersion !== currentVersion) break
}
if (nextVersion === currentVersion) {
  console.error('I dont know what else to generate beyong ' + nextVersion)
  process.exit(1)
}

rl.question('Next version will be `' + nextVersion + '`, okay? y/n ', yn => {
  if (yn !== 'y' && yn !== 'Y') {
    console.log('Release cancelled.\n')
    process.exit(1)
    return
  }

  const pkgJSON = JSON.parse(fs.readFileSync('./package.json'))
  const pkgLockJSON = JSON.parse(fs.readFileSync('./package-lock.json'))
  pkgJSON.version = nextVersion
  pkgLockJSON.version = nextVersion
  fs.writeFileSync('./package.json', JSON.stringify(pkgJSON, null, 2))
  fs.writeFileSync('./package-lock.json', JSON.stringify(pkgLockJSON, null, 2))

  ReactNativeVersion.version(
    {
      neverAmend: true,
      target: 'android',
    },
    path.resolve(__dirname, '../'),
  ).catch(err => {
    console.error(err)
    process.exit(1)
  })

  rl.close()
})