#!/usr/bin/env ruby # frozen_string_literal: true # call for instance as: # ./bin/changelog statemine-v5.0.0 # # You may set the ENV NO_CACHE to force fetching from Github # You should also ensure you set the ENV: GITHUB_TOKEN require_relative '../lib/changelog' require 'logger' logger = Logger.new($stdout) logger.level = Logger::DEBUG logger.debug('Starting') owner = 'paritytech' repo = 'cumulus' ref1 = ARGV[0] ref2 = ARGV[1] || 'HEAD' output = ARGV[2] || 'release-notes.md' ENV['REF1'] = ref1 ENV['REF2'] = ref2 gh_cumulus = SubRef.new(format('%s/%s', { owner: owner, repo: repo })) polkadot_ref1 = gh_cumulus.get_dependency_reference(ref1, 'polkadot-client') polkadot_ref2 = gh_cumulus.get_dependency_reference(ref2, 'polkadot-client') substrate_ref1 = gh_cumulus.get_dependency_reference(ref1, 'sp-io') substrate_ref2 = gh_cumulus.get_dependency_reference(ref2, 'sp-io') logger.debug("Polkadot from: #{polkadot_ref1}") logger.debug("Polkadot to: #{polkadot_ref2}") logger.debug("Substrate from: #{substrate_ref1}") logger.debug("Substrate to: #{substrate_ref2}") cumulus_data = 'cumulus.json' substrate_data = 'substrate.json' polkadot_data = 'polkadot.json' logger.debug("Using CUMULUS: #{cumulus_data}") logger.debug("Using SUBSTRATE: #{substrate_data}") logger.debug("Using POLKADOT: #{polkadot_data}") logger.warn('NO_CACHE set') if ENV['NO_CACHE'] # This is acting as cache so we don't spend time querying while testing if ENV['NO_CACHE'] || !File.file?(cumulus_data) logger.debug(format('Fetching data for Cumulus into %s', cumulus_data)) cmd = format('changelogerator %s/%s -f %s -t %s > %s', { owner: owner, repo: repo, from: ref1, to: ref2, output: cumulus_data }) system(cmd) else logger.debug("Re-using:#{cumulus_data}") end if ENV['NO_CACHE'] || !File.file?(polkadot_data) logger.debug(format('Fetching data for Polkadot into %s', polkadot_data)) cmd = format('changelogerator %s/%s -f %s -t %s > %s', { owner: owner, repo: 'polkadot', from: polkadot_ref1, to: polkadot_ref2, output: polkadot_data }) system(cmd) else logger.debug("Re-using:#{polkadot_data}") end if ENV['NO_CACHE'] || !File.file?(substrate_data) logger.debug(format('Fetching data for Substrate into %s', substrate_data)) cmd = format('changelogerator %s/%s -f %s -t %s > %s', { owner: owner, repo: 'substrate', from: substrate_ref1, to: substrate_ref2, output: substrate_data }) system(cmd) else logger.debug("Re-using:#{substrate_data}") end SHELL_DIGEST = ENV['SHELL_DIGEST'] || 'digests/shell-srtool-digest.json' WESTMINT_DIGEST = ENV['WESTMINT_DIGEST'] || 'digests/westmint-srtool-digest.json' STATEMINE_DIGEST = ENV['STATEMINE_DIGEST'] || 'digests/statemine-srtool-digest.json' STATEMINT_DIGEST = ENV['STATEMINT_DIGEST'] || 'digests/statemint-srtool-digest.json' ROCOCO_PARA_DIGEST = ENV['ROCOCO_PARA_DIGEST'] || 'digests/rococo-parachain-srtool-digest.json' CANVAS_KUSAMA_DIGEST = ENV['CANVAS_KUSAMA_DIGEST'] || 'digests/contracts-rococo-srtool-digest.json' logger.debug("Release type: #{ENV['RELEASE_TYPE']}") if ENV['RELEASE_TYPE'] && ENV['RELEASE_TYPE'] == 'client' logger.debug("Building changelog without runtimes") cmd = format('jq \ --slurpfile cumulus %s \ --slurpfile substrate %s \ --slurpfile polkadot %s \ -n \'{ cumulus: $cumulus[0], substrate: $substrate[0], polkadot: $polkadot[0], }\' > context.json', cumulus_data, substrate_data, polkadot_data, ) else logger.debug("Building changelog with runtimes") # Here we compose all the pieces together into one # single big json file. cmd = format('jq \ --slurpfile cumulus %s \ --slurpfile substrate %s \ --slurpfile polkadot %s \ --slurpfile srtool_shell %s \ --slurpfile srtool_westmint %s \ --slurpfile srtool_statemine %s \ --slurpfile srtool_statemint %s \ --slurpfile srtool_rococo_parachain %s \ --slurpfile srtool_contracts_rococo %s \ -n \'{ cumulus: $cumulus[0], substrate: $substrate[0], polkadot: $polkadot[0], srtool: [ { name: "rococo", data: $srtool_rococo_parachain[0] }, { name: "shell", data: $srtool_shell[0] }, { name: "westmint", data: $srtool_westmint[0] }, { name: "statemint", data: $srtool_statemint[0] }, { name: "statemine", data: $srtool_statemine[0] }, { name: "contracts", data: $srtool_contracts_rococo[0] } ] }\' > context.json', cumulus_data, substrate_data, polkadot_data, SHELL_DIGEST, WESTMINT_DIGEST, STATEMINE_DIGEST, STATEMINT_DIGEST, ROCOCO_PARA_DIGEST, CANVAS_KUSAMA_DIGEST) end system(cmd) cmd = format('tera --env --env-key env --include-path templates \ --template templates/template.md.tera context.json > %s', output) system(cmd)