def replace(file) {
	def SRC_E2E_FILE_CONTENT = readFile file: file
	def DST_E2E_FILE_CONTENT = SRC_E2E_FILE_CONTENT.replaceAll("image: pingcap/pd:.*", "image: localhost:5000/pingcap/pd:v2.0.4")
	DST_E2E_FILE_CONTENT = DST_E2E_FILE_CONTENT.replaceAll("image: pingcap/tidb:.*", "image: localhost:5000/pingcap/tidb:v2.0.4")
	DST_E2E_FILE_CONTENT = DST_E2E_FILE_CONTENT.replaceAll("image: pingcap/tikv:.*", "image: localhost:5000/pingcap/tikv:v2.0.4")
	writeFile file: file, text: "${DST_E2E_FILE_CONTENT}"
}

def stage_build_tidb_binary(WORKSPACE) {
	sh """
	export GOPATH=${WORKSPACE}/go:\$GOPATH
	make clean
	make setup
	make check
        make test
        make new-operator-test
	make
	mkdir -p docker/bin
	mv bin/tidb-* docker/bin
	make e2e-build
	"""
}

def stage_prep_run_env() {
	replace("test/e2e/docker/data/e2e-bestfit-values.yaml")
	replace("test/e2e/docker/data/e2e-decrease-values.yaml")
	replace("test/e2e/docker/data/e2e-ha-values.yaml")
	replace("test/e2e/docker/data/e2e-increase-values.yaml")
	replace("test/e2e/docker/data/e2e-pause-values.yaml")
	replace("test/e2e/docker/data/e2e-upgrade-values.yaml")
	replace("test/e2e/docker/data/e2e-volume-values.yaml")
	replace("test/e2e/docker/data/e2e-delete-values.yaml")
	replace("test/e2e/docker/data/e2e-retention-values.yaml")
	replace("test/e2e/docker/data/e2e-sync-values.yaml")
	replace("test/e2e/docker/data/e2e-binlog-values.yaml")
	replace("test/e2e/docker/data/lightning/lightning-values.yaml")
	replace("test/e2e/docker/data/lightning/importer-values.yaml")
	replace("test/e2e/docker/data/values.yaml")

	sh """
	make e2e-docker
	"""
}

def getChangeLogText() {
		def changeLogText = ""
		for (int i = 0; i < currentBuild.changeSets.size(); i++) {
				for (int j = 0; j < currentBuild.changeSets[i].items.length; j++) {
						def commitId = "${currentBuild.changeSets[i].items[j].commitId}"
						def commitMsg = "${currentBuild.changeSets[i].items[j].msg}"
						changeLogText += "\n" + "`${commitId.take(7)}` ${commitMsg}"
				}
		}
		return changeLogText
}

def stage_summary(Map args){
	echo("echo summary info #########")
	def CHANGELOG = getChangeLogText()
	def DURATION = (((System.currentTimeMillis() - currentBuild.startTimeInMillis) / 1000 / 60) as double).round(2)
	def slackmsg = "[${env.JOB_NAME.replaceAll('%2F','/')}-${env.BUILD_NUMBER}] `${currentBuild.result}`" + "\n" +
		"Type: `${args.buildtype}`" + "\n" +
		"Elapsed Time: `${DURATION}` Mins" + "\n" +
		"Build Branch: `${args.branch}`, Githash: `${args.githash}`" + "\n"
	if (args.changelog){
		slackmsg += getChangeLogText() + "\n"
	}
	slackmsg += "Display URL:" + "\n" + "${env.RUN_DISPLAY_URL}"

	if(currentBuild.result != "SUCCESS"){
		slackSend channel: args.slack_channel, color: 'danger', teamDomain: 'pingcap', tokenCredentialId: 'slack-pingcap-token', message: "${slackmsg}"
	} else {
		if (args.successAppend && args.successAppend != ""){
			slackmsg += "\n" + "${args.successAppend}"
		}
		slackSend channel: args.slack_channel, color: 'good', teamDomain: 'pingcap', tokenCredentialId: 'slack-pingcap-token', message: "${slackmsg}"
	}
}

return this
