check_runtime.sh 2.96 KiB
Newer Older
# check for any changes in the ^runtime/ tree. if there are any changes found, 
# it should mark the PR B2-breaksapi and "auto-fail" the PR if there 
# isn't a change in the runtime/{kusama,polkadot}/src/lib.rs file that alters 
# the version.

set -e # fail on any error


# give some context
git log --graph --oneline --decorate=short -n 10

# make sure the master branch is available in shallow clones
git fetch --depth=${GIT_DEPTH:-100} origin master


github_label () {
	echo
	echo "# run github-api job for labeling it ${1}"
	curl -sS -X POST \
		-F "token=${CI_JOB_TOKEN}" \
		-F "ref=master" \
		-F "variables[LABEL]=${1}" \
		-F "variables[PRNO]=${CI_COMMIT_REF_NAME}" \
		-F "variables[PROJECT]=paritytech/polkadot" \
		${GITLAB_API}/projects/${GITHUB_API_PROJECT}/trigger/pipeline
}


Gavin Wood's avatar
Gavin Wood committed
# Introduce runtime/polkadot/src/lib.rs once Polkadot mainnet is live.
for VERSIONS_FILE in runtime/kusama/src/lib.rs 
do
	# check if the wasm sources changed
	if ! git diff --name-only origin/master...${CI_COMMIT_SHA} \
		| grep -q -e '^runtime/'
	then
		cat <<-EOT
		no changes to the runtime source code detected
		continue
	fi
	
	
	
	# check for spec_version updates: if the spec versions changed, then there is
	# consensus-critical logic that has changed. the runtime wasm blobs must be
	# rebuilt.
	
	add_spec_version="$(git diff origin/master...${CI_COMMIT_SHA} ${VERSIONS_FILE} \
		| sed -n -r "s/^\+[[:space:]]+spec_version: +([0-9]+),$/\1/p")"
	sub_spec_version="$(git diff origin/master...${CI_COMMIT_SHA} ${VERSIONS_FILE} \
		| sed -n -r "s/^\-[[:space:]]+spec_version: +([0-9]+),$/\1/p")"
	
	
	# see if the version and the binary blob changed
	if [ "${add_spec_version}" != "${sub_spec_version}" ]
	
		github_label "B2-breaksapi"
	
			
			changes to the runtime sources and changes in the spec version.
		
			spec_version: ${sub_spec_version} -> ${add_spec_version}
		continue
	
	else
		# check for impl_version updates: if only the impl versions changed, we assume
		# there is no consensus-critical logic that has changed.
	
		add_impl_version="$(git diff origin/master...${CI_COMMIT_SHA} ${VERSIONS_FILE} \
			| sed -n -r 's/^\+[[:space:]]+impl_version: +([0-9]+),$/\1/p')"
		sub_impl_version="$(git diff origin/master...${CI_COMMIT_SHA} ${VERSIONS_FILE} \
			| sed -n -r 's/^\-[[:space:]]+impl_version: +([0-9]+),$/\1/p')"
	
	
		# see if the impl version changed
		if [ "${add_impl_version}" != "${sub_impl_version}" ]
		then
			cat <<-EOT
			
			changes to the runtime sources and changes in the impl version.
	
			impl_version: ${sub_impl_version} -> ${add_impl_version}
	
			EOT
			continue
		fi
	
	
		cat <<-EOT
	
		wasm source files changed but not the spec/impl version and the runtime
		binary blob. If changes made do not alter logic, just bump 'impl_version'.
		If they do change logic, bump 'spec_version' and rebuild wasm.
	
		source file directories:
		- runtime
	
		versions file: ${VERSIONS_FILE}
	
		EOT

# vim: noexpandtab