summaryrefslogtreecommitdiffstats
path: root/make-dist
blob: b5dc4f22bd18247d8207e1b96b29874cf42988cd (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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/sh -e

if [ ! -d .git ]; then
    echo "no .git present.  run this from the base dir of the git checkout."
    exit 1
fi

version=$1
[ -z "$version" ] && version=`git describe --match 'v*' | sed 's/^v//'`
outfile="ceph-$version"

echo "version $version"

# update submodules
echo "updating submodules..."
force=$(if git submodule usage 2>&1 | grep --quiet 'update.*--force'; then echo --force ; fi)
if ! git submodule sync || ! git submodule update $force --init --recursive; then
    echo "Error: could not initialize submodule projects"
    echo "  Network connectivity might be required."
    exit 1
fi

download_boost() {
    boost_version=$1
    shift
    boost_sha256=$1
    shift
    boost_version_underscore=$(echo $boost_version | sed 's/\./_/g')
    boost_fname=boost_${boost_version_underscore}.tar.bz2
    set +e
    while true; do
        url_base=$1
        shift
        if [ -z $url_base ]; then
            echo "Error: failed to download boost."
            exit
        fi
        url=$url_base/$boost_fname
        wget -c --no-verbose -O $boost_fname $url
        if [ $? != 0 -o ! -e $boost_fname ]; then
            echo "Download of $url failed"
        elif [ $(sha256sum $boost_fname | awk '{print $1}') != $boost_sha256 ]; then
            echo "Error: failed to download boost: SHA256 mismatch."
        else
            break
        fi
    done
    set -e
    tar xjf $boost_fname -C src \
        --exclude="$boost_version_underscore/libs/*/doc" \
        --exclude="$boost_version_underscore/libs/*/example" \
        --exclude="$boost_version_underscore/libs/*/examples" \
        --exclude="$boost_version_underscore/libs/*/meta" \
        --exclude="$boost_version_underscore/libs/*/test" \
        --exclude="$boost_version_underscore/tools/boostbook" \
        --exclude="$boost_version_underscore/tools/quickbook" \
        --exclude="$boost_version_underscore/tools/auto_index" \
        --exclude='doc' --exclude='more' --exclude='status'
    mv src/boost_${boost_version_underscore} src/boost
    tar cf ${outfile}.boost.tar ${outfile}/src/boost
    rm -rf src/boost
}

build_dashboard_frontend() {
  CURR_DIR=`pwd`
  TEMP_DIR=`mktemp -d`

  $CURR_DIR/src/tools/setup-virtualenv.sh $TEMP_DIR
  $TEMP_DIR/bin/pip install nodeenv
  $TEMP_DIR/bin/nodeenv -p --node=10.13.0
  cd src/pybind/mgr/dashboard/frontend

  DEFAULT_LANG=`jq -r .config.locale package.json`
  if [ -z "$DASHBOARD_FRONTEND_LANGS" ]; then
    BUILD_TARGET=":${DEFAULT_LANG}"
  else
    if [ "$DASHBOARD_FRONTEND_LANGS" == "ALL" ]; then
      BUILD_TARGET=":*"
    else
      DASHBOARD_FRONTEND_LANGS_LIST=`echo "$DASHBOARD_FRONTEND_LANGS" | sed 's/ /,/g'`
      if [[ $DASHBOARD_FRONTEND_LANGS_LIST != *"${DEFAULT_LANG}"* ]]; then
        # default language must be always built
        DASHBOARD_FRONTEND_LANGS_LIST="${DASHBOARD_FRONTEND_LANGS},${DEFAULT_LANG}"
      fi
      BUILD_TARGET=":{${DASHBOARD_FRONTEND_LANGS_LIST}}"
    fi
  fi
  [ -z "$MAX_DASHBOARD_PARALLEL_BUILDS" ] && MAX_DASHBOARD_PARALLEL_BUILDS=2

  . $TEMP_DIR/bin/activate
  npm ci
  echo "Building ceph-dashboard frontend with build${BUILD_TARGET} script";
  # we need to use "-- --" because so that "--prod" survives accross all
  # scripts redirections inside package.json
  npx npm-run-all --print-label --parallel --max-parallel $MAX_DASHBOARD_PARALLEL_BUILDS "build${BUILD_TARGET} -- -- --prod"
  deactivate
  cd $CURR_DIR
  rm -rf $TEMP_DIR
  tar cf dashboard_frontend.tar $outfile/src/pybind/mgr/dashboard/frontend/dist
}

# clean out old cruft...
echo "cleanup..."
rm -f $outfile*

# build new tarball
echo "building tarball..."
bin/git-archive-all.sh --prefix ceph-$version/ \
		       --verbose \
		       --ignore corpus \
		       $outfile.tar

# populate files with version strings
echo "including src/.git_version, ceph.spec"

(git rev-parse HEAD ; git describe) 2> /dev/null > src/.git_version

# if the version has '-' in it, it has a 'release' part,
# like vX.Y.Z-N-g<shortsha1>.  If it doesn't, it's just
# vX.Y.Z.  Handle both, and translate - to . for rpm
# naming rules (the - separates version and release).

if expr index $version '-' > /dev/null; then
	rpm_version=`echo $version | cut -d - -f 1-1`
	rpm_release=`echo $version | cut -d - -f 2- | sed 's/-/./'`
else
	rpm_version=$version
	rpm_release=0
fi

for spec in ceph.spec.in alpine/APKBUILD.in; do
    cat $spec |
        sed "s/@VERSION@/$rpm_version/g" |
        sed "s/@RPM_RELEASE@/$rpm_release/g" |
        sed "s/@TARBALL_BASENAME@/ceph-$version/g" > `echo $spec | sed 's/.in$//'`
done
ln -s . $outfile
tar cvf $outfile.version.tar $outfile/src/.git_version $outfile/ceph.spec $outfile/alpine/APKBUILD
# NOTE: If you change this version number make sure the package is available
# at the three URLs referenced below (may involve uploading to download.ceph.com)
boost_version=1.72.0
download_boost $boost_version 59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 \
               https://dl.bintray.com/boostorg/release/$boost_version/source \
               https://downloads.sourceforge.net/project/boost/boost/$boost_version \
               https://download.ceph.com/qa

build_dashboard_frontend
tar --concatenate -f $outfile.all.tar $outfile.version.tar
tar --concatenate -f $outfile.all.tar $outfile.boost.tar
tar --concatenate -f $outfile.all.tar $outfile.tar
tar --concatenate -f $outfile.all.tar dashboard_frontend.tar
mv $outfile.all.tar $outfile.tar
rm $outfile
rm -f $outfile.version.tar
rm -f $outfile.boost.tar

echo "compressing..."
bzip2 -9 $outfile.tar

echo "done."