// Called from "version" npm script when running `npm version`
// during release process. This script updates the README.md file to point to the release.
// It also copies the release file to a filename matching the one we want to publish to GitHub.
const fs = require('fs');
const shell = require('shelljs');
const version = require('../package.json').version;
const artifact = 'dist/bin/release.tar.gz';
const hash = require('crypto').createHash('sha256');
// TODO(alexeagle): consider streaming the bytes into the hash function, if this consumes too much
// RAM
const sha256 = hash.update(fs.readFileSync(artifact)).digest('hex');

for (const f of ['README.md', 'packages/create/index.js']) {
  shell.sed(
      '-i', 'download/[0-9\.]*/rules_nodejs-[0-9\.]*.tar.gz',
      `download/${version}/rules_nodejs-${version}.tar.gz`, f);
  shell.sed('-i', 'sha256 = \"[0-9a-f]+\"', `sha256 = "${sha256}"`, f);
}
shell.cp(artifact, `rules_nodejs-${version}.tar.gz`);
