From ae379cf7d12943fc192d58176673bcfe7d53da53 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Fri, 6 Jul 2018 16:26:57 +0100 Subject: [PATCH] [scripts] build earlier releases --- .gitignore | 3 + contrib/devtools/previous_release.sh | 144 +++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100755 contrib/devtools/previous_release.sh diff --git a/.gitignore b/.gitignore index db493811c5..bc8751c805 100644 --- a/.gitignore +++ b/.gitignore @@ -108,6 +108,9 @@ qrc_*.cpp .DS_Store build +# Previous releases +releases + #lcov *.gcno *.gcda diff --git a/contrib/devtools/previous_release.sh b/contrib/devtools/previous_release.sh new file mode 100755 index 0000000000..ea096c0cec --- /dev/null +++ b/contrib/devtools/previous_release.sh @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2018-2019 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Build previous releases. + +export LC_ALL=C + +CONFIG_FLAGS="" +FUNCTIONAL_TESTS=0 +DELETE_EXISTING=0 +USE_DEPENDS=0 +DOWNLOAD_BINARY=0 +CONFIG_FLAGS="" +TARGET="releases" + +while getopts ":hfrdbt:" opt; do + case $opt in + h) + echo "Usage: .previous_release.sh [options] tag1 tag2" + echo " options:" + echo " -h Print this message" + echo " -f Configure for functional tests" + echo " -r Remove existing directory" + echo " -d Use depends" + echo " -b Download release binary" + echo " -t Target directory (default: releases)" + exit 0 + ;; + f) + FUNCTIONAL_TESTS=1 + CONFIG_FLAGS="$CONFIG_FLAGS --without-gui --disable-tests --disable-bench" + ;; + r) + DELETE_EXISTING=1 + ;; + d) + USE_DEPENDS=1 + ;; + b) + DOWNLOAD_BINARY=1 + ;; + t) + TARGET=$OPTARG + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +shift $((OPTIND-1)) + +if [ -z "$1" ]; then + echo "Specify release tag(s), e.g.: .previous_release v0.15.1" + exit 1 +fi + +if [ ! -d "$TARGET" ]; then + mkdir -p $TARGET +fi + +if [ "$DOWNLOAD_BINARY" -eq "1" ]; then + HOST="${HOST:-$(./depends/config.guess)}" + case "$HOST" in + x86_64-*-linux*) + PLATFORM=x86_64-linux-gnu + ;; + x86_64-apple-darwin*) + PLATFORM=osx64 + ;; + *) + echo "Not sure which binary to download for $HOST." + exit 1 + ;; + esac +fi + +echo "Releases directory: $TARGET" +pushd "$TARGET" || exit 1 +{ + for tag in "$@" + do + if [ "$DELETE_EXISTING" -eq "1" ]; then + if [ -d "$tag" ]; then + rm -r "$tag" + fi + fi + + if [ "$DOWNLOAD_BINARY" -eq "0" ]; then + + if [ ! -d "$tag" ]; then + if [ -z $(git tag -l "$tag") ]; then + echo "Tag $tag not found" + exit 1 + fi + + git clone https://github.com/bitcoin/bitcoin "$tag" + pushd "$tag" || exit 1 + { + git checkout "$tag" + if [ "$USE_DEPENDS" -eq "1" ]; then + pushd depends || exit 1 + { + if [ "$FUNCTIONAL_TESTS" -eq "1" ]; then + make NO_QT=1 + else + make + fi + HOST="${HOST:-$(./config.guess)}" + } + popd || exit 1 + CONFIG_FLAGS="--prefix=$PWD/depends/$HOST $CONFIG_FLAGS" + fi + ./autogen.sh + ./configure $CONFIG_FLAGS + make + # Move binaries, so they're in the same place as in the release download: + mkdir bin + mv src/bitcoind src/bitcoin-cli src/bitcoin-tx bin + if [ "$FUNCTIONAL_TESTS" -eq "0" ]; then + mv src/qt/bitcoin-qt bin + fi + } + popd || exit 1 + fi + else + if [ -d "$tag" ]; then + echo "Using cached $tag" + else + mkdir "$tag" + URL="https://bitcoin.org/bin/bitcoin-core-${tag:1}/bitcoin-${tag:1}-$PLATFORM.tar.gz" + echo "Fetching: $URL" + curl -O $URL + tar -zxf "bitcoin-${tag:1}-$PLATFORM.tar.gz" -C "$tag" --strip-components=1 "bitcoin-${tag:1}" + rm "bitcoin-${tag:1}-$PLATFORM.tar.gz" + fi + fi + done +} +popd || exit 1