Changeset View
Changeset View
Standalone View
Standalone View
contrib/source-control-tools/automated-commits.sh
Show First 20 Lines • Show All 66 Lines • ▼ Show 20 Lines | *) | ||||
;; | ;; | ||||
esac | esac | ||||
echo "Building automated commit '${COMMIT_TYPE}'..." | echo "Building automated commit '${COMMIT_TYPE}'..." | ||||
BOT_PREFIX="[Automated]" | BOT_PREFIX="[Automated]" | ||||
TOPLEVEL=$(git rev-parse --show-toplevel) | TOPLEVEL=$(git rev-parse --show-toplevel) | ||||
CHAINPARAMS_SCRIPTS_DIR="${TOPLEVEL}"/contrib/devtools/chainparams | DEVTOOLS_DIR="${TOPLEVEL}"/contrib/devtools | ||||
CHAINPARAMS_SCRIPTS_DIR="${DEVTOOLS_DIR}"/chainparams | |||||
TEAMCITY_SCRIPTS_DIR="${TOPLEVEL}"/contrib/teamcity | TEAMCITY_SCRIPTS_DIR="${TOPLEVEL}"/contrib/teamcity | ||||
# Make sure tree is clean | # Make sure tree is clean | ||||
git checkout master | git checkout master | ||||
git reset --hard "${PARENT_COMMIT}" | git reset --hard "${PARENT_COMMIT}" | ||||
case "${COMMIT_TYPE}" in | case "${COMMIT_TYPE}" in | ||||
update-chainparams) | update-chainparams) | ||||
# Assumes bitcoind instances are already running on mainnet and testnet | # Assumes bitcoind instances are already running on mainnet and testnet | ||||
pushd "${CHAINPARAMS_SCRIPTS_DIR}" | pushd "${CHAINPARAMS_SCRIPTS_DIR}" | ||||
CHAINPARAMS_MAINNET_TXT="chainparams_main.txt" | CHAINPARAMS_MAINNET_TXT="chainparams_main.txt" | ||||
./make_chainparams.py > "${CHAINPARAMS_MAINNET_TXT}" | ./make_chainparams.py > "${CHAINPARAMS_MAINNET_TXT}" | ||||
git add "${CHAINPARAMS_MAINNET_TXT}" | git add "${CHAINPARAMS_MAINNET_TXT}" | ||||
CHAINPARAMS_TESTNET_TXT="chainparams_test.txt" | CHAINPARAMS_TESTNET_TXT="chainparams_test.txt" | ||||
./make_chainparams.py -a 127.0.0.1:18332 > "${CHAINPARAMS_TESTNET_TXT}" | ./make_chainparams.py -a 127.0.0.1:18332 > "${CHAINPARAMS_TESTNET_TXT}" | ||||
git add "${CHAINPARAMS_TESTNET_TXT}" | git add "${CHAINPARAMS_TESTNET_TXT}" | ||||
CHAINPARAMS_CONSTANTS="${TOPLEVEL}"/src/chainparamsconstants.h | CHAINPARAMS_CONSTANTS="${TOPLEVEL}"/src/chainparamsconstants.h | ||||
./generate_chainparams_constants.py . > "${CHAINPARAMS_CONSTANTS}" | ./generate_chainparams_constants.py . > "${CHAINPARAMS_CONSTANTS}" | ||||
git add "${CHAINPARAMS_CONSTANTS}" | git add "${CHAINPARAMS_CONSTANTS}" | ||||
popd | popd | ||||
# Sanity check that the new chainparams build | |||||
ABC_BUILD_NAME=build-werror "${TEAMCITY_SCRIPTS_DIR}"/build-configurations.sh | |||||
git commit -m "${BOT_PREFIX} Update chainparams" | git commit -m "${BOT_PREFIX} Update chainparams" | ||||
;; | ;; | ||||
*) | *) | ||||
echo "Error: Invalid commit name '${COMMIT_TYPE}'" | echo "Error: Invalid commit name '${COMMIT_TYPE}'" | ||||
exit 10 | exit 10 | ||||
;; | ;; | ||||
esac | esac | ||||
echo "Sanity checks..." | echo "Sanity checks..." | ||||
LINT_OUTPUT=$(arc lint --never-apply-patches) | LINT_OUTPUT=$(arc lint --never-apply-patches) | ||||
LINT_EXIT_CODE=$? | LINT_EXIT_CODE=$? | ||||
# If there is more than one line of output, then lint advice lines are likely present. | # If there is more than one line of output, then lint advice lines are likely present. | ||||
# We treat these as errors because code generators should always produce lint-free code. | # We treat these as errors because code generators should always produce lint-free code. | ||||
LINT_NUM_LINES=$(echo ${LINT_OUTPUT} | wc -l) | LINT_NUM_LINES=$(echo ${LINT_OUTPUT} | wc -l) | ||||
if [ "${LINT_EXIT_CODE}" -ne 0 ] || [ "${LINT_NUM_LINES}" -gt 1 ]; then | if [ "${LINT_EXIT_CODE}" -ne 0 ] || [ "${LINT_NUM_LINES}" -gt 1 ]; then | ||||
echo "Error: The linter found issues with the automated commit. Correct the issue in the code generator and try again." | echo "Error: The linter found issues with the automated commit. Correct the issue in the code generator and try again." | ||||
exit 20 | exit 20 | ||||
fi | fi | ||||
# Smoke tests to give some confidence that master won't be put into a bad state | |||||
BUILD_DIR="${TOPLEVEL}"/build | |||||
pushd "${BUILD_DIR}" | |||||
BUILD_DIR="${BUILD_DIR}" "${DEVTOOLS_DIR}"/build_cmake.sh | |||||
ninja check-bitcoin | |||||
ninja check-functional | |||||
Fabien: You can speed this up a bit with `ninja check-bitcoin check-functional` so they can be… | |||||
popd | |||||
echo "Pushing automated commit '${COMMIT_TYPE}'..." | echo "Pushing automated commit '${COMMIT_TYPE}'..." | ||||
# Make sure master is up-to-date. If there is a merge conflict, this script | # Make sure master is up-to-date. If there is a merge conflict, this script | ||||
# will not attempt to resolve it and simply fail. | # will not attempt to resolve it and simply fail. | ||||
git fetch origin master | git fetch origin master | ||||
git rebase "${PARENT_COMMIT}" | git rebase "${PARENT_COMMIT}" | ||||
git push "${GIT_PUSH_OPTIONS[@]}" origin master | git push "${GIT_PUSH_OPTIONS[@]}" origin master |
You can speed this up a bit with ninja check-bitcoin check-functional so they can be parallelized.