aboutsummaryrefslogtreecommitdiff
path: root/contrib/devtools/previous_release.sh
blob: ea096c0cec0d6f47c5106d0d8321a811e347975b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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