|
1 | 1 | #!/bin/bash
|
2 | 2 |
|
| 3 | +error() { |
| 4 | + >&2 echo "$0: There are errors." |
| 5 | + exit 1 |
| 6 | +} |
| 7 | + |
| 8 | +if [[ -z $_Dbg_DEBUGGER_LEVEL ]]; then |
| 9 | + trap error ERR |
| 10 | +fi |
| 11 | + |
| 12 | +#---------------------------------------------------------------------------------------------- |
| 13 | + |
| 14 | +if [[ $1 == --help || $1 == help ]]; then |
| 15 | + cat <<-END |
| 16 | + pack.sh [cpu|gpu] [--help|help] |
| 17 | + |
| 18 | + Argument variables: |
| 19 | + DEVICE=cpu|gpu CPU or GPU variants |
| 20 | + RAMP=1 Build RAMP file |
| 21 | + DEPS=1 Build dependencies file |
| 22 | +
|
| 23 | + VARIANT=name Build variant (empty for standard packages) |
| 24 | + BRANCH=branch Branch names to serve as an exta package tag |
| 25 | + GITSHA=1 Append Git SHA to shapshot package names |
| 26 | +
|
| 27 | + BINDIR=dir Directory in which packages are created |
| 28 | + INSTALL_DIR=dir Directory in which artifacts are found |
| 29 | +
|
| 30 | + END |
| 31 | + exit 0 |
| 32 | +fi |
| 33 | + |
| 34 | +#---------------------------------------------------------------------------------------------- |
| 35 | + |
3 | 36 | [[ $IGNERR == 1 ]] || set -e
|
4 | 37 | [[ $VERBOSE == 1 ]] && set -x
|
5 | 38 |
|
|
10 | 43 | HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
11 | 44 | . $HERE/readies/shibumi/functions
|
12 | 45 | ROOT=$(realpath $HERE/..)
|
| 46 | +READIES=$ROOT/opt/readies/bin |
13 | 47 |
|
14 | 48 | RAMP_PROG="python3 -m RAMP.ramp"
|
15 |
| -REDIS_ENT_LIB_PATH=/opt/redislabs/lib |
16 | 49 |
|
17 | 50 | BINDIR=$(realpath $BINDIR)
|
18 | 51 | INSTALL_DIR=$(realpath $INSTALL_DIR)
|
19 | 52 |
|
20 |
| -. $ROOT/opt/readies/bin/enable-utf8 |
| 53 | +. $READIES/enable-utf8 |
| 54 | + |
| 55 | +export ARCH=$($READIES/platform --arch) |
| 56 | +export OS=$($READIES/platform --os) |
| 57 | +export OSNICK=$($READIES/platform --osnick) |
| 58 | + |
| 59 | +export PRODUCT=redisai |
| 60 | +export PRODUCT_LIB=$PRODUCT.so |
21 | 61 |
|
22 |
| -export ARCH=$($ROOT/opt/readies/bin/platform --arch) |
23 |
| -export OS=$($ROOT/opt/readies/bin/platform --os) |
24 |
| -export OSNICK=$($ROOT/opt/readies/bin/platform --osnick) |
| 62 | +export PACKAGE_NAME=${PACKAGE_NAME:-${PRODUCT}} |
| 63 | + |
| 64 | +# BACKENDS="all torch tensorflow onnxruntime tflite" |
| 65 | +BACKENDS="torch tensorflow onnxruntime tflite" |
| 66 | + |
| 67 | +#---------------------------------------------------------------------------------------------- |
25 | 68 |
|
26 | 69 | pack_ramp() {
|
27 |
| - echo "Building RAMP file ..." |
28 | 70 | cd $ROOT
|
29 |
| - |
30 |
| - local STEM=$PRODUCT.$OS-$OSNICK-$ARCH |
31 |
| - local FQ_PACKAGE |
32 |
| - if [[ -z $BRANCH ]]; then |
33 |
| - FQ_PACKAGE=$STEM.$VERSION |
| 71 | + |
| 72 | + local platform="$OS-$OSNICK-$ARCH" |
| 73 | + local stem=${PACKAGE_NAME}-${DEVICE}.${platform} |
| 74 | + |
| 75 | + if [[ $SNAPSHOT == 0 ]]; then |
| 76 | + local verspec=${SEMVER}${VARIANT} |
| 77 | + local packdir=. |
| 78 | + local s3base="" |
34 | 79 | else
|
35 |
| - FQ_PACKAGE=$STEM.$BRANCH |
| 80 | + local verspec=${BRANCH}${VARIANT} |
| 81 | + local packdir=snapshots |
| 82 | + local s3base=snapshots/ |
36 | 83 | fi
|
| 84 | + |
| 85 | + local fq_package=$stem.${verspec}.zip |
37 | 86 |
|
38 |
| - # this is only to extract {semantic_version} into VERSION |
39 |
| - RAMPOUT=$(mktemp /tmp/ramp.XXXXXX) |
40 |
| - $RAMP_PROG pack -m $ROOT/ramp.yml --packname-file $RAMPOUT -o $BINDIR/$PRODUCT.{os}-{architecture}.{semantic_version}.zip $INSTALL_DIR/$PRODUCT.so |
41 |
| - local rampfile=`realpath $(tail -1 $RAMPOUT)` |
42 |
| - rm -f $rampfile $RAMPOUT |
43 |
| - echo `basename $rampfile` | sed -e "s/[^.]*\.[^.]*\.\(.*\)\.zip/\1/" > $BINDIR/VERSION |
44 |
| - export SEMVER=$(cat $BINDIR/VERSION) |
| 87 | + [[ ! -d $BINDIR/$packdir ]] && mkdir -p $BINDIR/$packdir |
45 | 88 |
|
46 |
| - $RAMP_PROG pack -m $ROOT/ramp.yml -o $BINDIR/$FQ_PACKAGE.zip \ |
47 |
| - -c "BACKENDSPATH $REDIS_ENT_LIB_PATH/$PRODUCT-$DEVICE-$SEMVER/backends" $INSTALL_DIR/$PRODUCT.so > /dev/null 2>&1 |
| 89 | + local packdir="$BINDIR/$packdir" |
| 90 | + local packfile="$packdir/$fq_package" |
| 91 | + local product_so="$INSTALL_DIR/$PRODUCT.so" |
48 | 92 |
|
49 |
| - cd "$BINDIR" |
50 |
| - if [[ -z $BRANCH ]]; then |
51 |
| - ln -sf $FQ_PACKAGE.zip $STEM.latest.zip |
| 93 | + local xtx_vars="" |
| 94 | + for dep in $BACKENDS; do |
| 95 | + eval "export NAME_${dep}=${PACKAGE_NAME}_${dep}" |
| 96 | + local dep_fname=${PACKAGE_NAME}-${DEVICE}-${dep}.${platform}.${verspec}.tgz |
| 97 | + eval "export PATH_${dep}=${s3base}${dep_fname}" |
| 98 | + local dep_sha256="$packdir/${dep_fname}.sha256" |
| 99 | + eval "export SHA256_${dep}=$(cat $dep_sha256)" |
| 100 | + |
| 101 | + xtx_vars+=" -e NAME_$dep -e PATH_$dep -e SHA256_$dep" |
| 102 | + done |
| 103 | + |
| 104 | + python3 $READIES/xtx \ |
| 105 | + $xtx_vars \ |
| 106 | + -e DEVICE -e NUMVER -e SEMVER \ |
| 107 | + $ROOT/ramp.yml > /tmp/ramp.yml |
| 108 | + rm -f /tmp/ramp.fname $packfile |
| 109 | + $RAMP_PROG pack -m /tmp/ramp.yml --packname-file /tmp/ramp.fname --verbose --debug -o $packfile $product_so >/tmp/ramp.err 2>&1 || true |
| 110 | + if [[ ! -e $packfile ]]; then |
| 111 | + >&2 echo "Error generating RAMP file:" |
| 112 | + >&2 cat /tmp/ramp.err |
| 113 | + exit 1 |
52 | 114 | fi
|
53 | 115 |
|
54 | 116 | echo "Done."
|
55 | 117 | }
|
56 | 118 |
|
57 |
| -pack_deps() { |
58 |
| - echo "Building dependencies file ..." |
| 119 | +#---------------------------------------------------------------------------------------------- |
59 | 120 |
|
| 121 | +pack_deps() { |
| 122 | + local depname="$1" |
| 123 | + |
60 | 124 | cd $ROOT
|
61 | 125 |
|
62 |
| - SEMVER=$(cat $BINDIR/VERSION) |
63 |
| - |
64 |
| - local STEM=$PRODUCT-$DEVICE-dependencies.$OS-$OSNICK-$ARCH |
65 |
| - local FQ_PACKAGE |
66 |
| - if [[ -z $BRANCH ]]; then |
67 |
| - FQ_PACKAGE=$STEM.$VERSION |
68 |
| - else |
69 |
| - FQ_PACKAGE=$STEM.$BRANCH |
70 |
| - fi |
71 |
| - |
72 |
| - cd $INSTALL_DIR |
73 |
| - local BACKENDS_DIR=$PRODUCT-$DEVICE-$SEMVER |
74 |
| - if [[ ! -h backends ]]; then |
75 |
| - [[ ! -d backends ]] && { echo "install-$DEVICE/backend directory not found." ; exit 1; } |
76 |
| - rm -rf $BACKENDS_DIR |
77 |
| - mkdir $BACKENDS_DIR |
| 126 | + local platform="$OS-$OSNICK-$ARCH" |
| 127 | + local stem=${PACKAGE_NAME}-${DEVICE}-${depname}.${platform} |
| 128 | + local fq_package=$stem.${SEMVER}${VARIANT}.tgz |
| 129 | + local tar_path=$BINDIR/$fq_package |
| 130 | + local backends_prefix_dir="" |
78 | 131 |
|
79 |
| - mv backends $BACKENDS_DIR |
80 |
| - ln -s $BACKENDS_DIR/backends backends |
| 132 | + if [[ $depname == all ]]; then |
| 133 | + local backens_dir=. |
| 134 | + else |
| 135 | + local backens_dir=${PRODUCT}_$depname |
81 | 136 | fi
|
82 |
| - find $BACKENDS_DIR -name "*.so*" | xargs tar pczf $BINDIR/$FQ_PACKAGE.tgz |
83 | 137 |
|
84 |
| - cd "$BINDIR" |
85 |
| - if [[ -z $BRANCH ]]; then |
86 |
| - ln -sf $FQ_PACKAGE.tgz $STEM.latest.tgz |
| 138 | + cd $INSTALL_DIR/backends |
| 139 | + { find $backens_dir -name "*.so*" | \ |
| 140 | + xargs tar -c --sort=name --owner=root:0 --group=root:0 --mtime='UTC 1970-01-01' --transform "s,^,$backends_prefix_dir," 2>> /tmp/pack.err | \ |
| 141 | + gzip -n - > $tar_path ; E=$?; } || true |
| 142 | + sha256sum $tar_path | gawk '{print $1}' > $tar_path.sha256 |
| 143 | + |
| 144 | + mkdir -p $BINDIR/snapshots |
| 145 | + cd $BINDIR/snapshots |
| 146 | + if [[ ! -z $BRANCH ]]; then |
| 147 | + local snap_package=$stem.${BRANCH}${VARIANT}.tgz |
| 148 | + ln -sf ../$fq_package $snap_package |
| 149 | + ln -sf ../$fq_package.sha256 $snap_package.sha256 |
87 | 150 | fi
|
88 |
| - |
89 |
| - echo "Done." |
90 | 151 | }
|
91 | 152 |
|
92 |
| -if [[ $1 == --help || $1 == help ]]; then |
93 |
| - cat <<-END |
94 |
| - pack.sh [cpu|gpu] [--help|help] |
95 |
| - |
96 |
| - Argument variables: |
97 |
| - BINDIR=dir directory in which packages are created |
98 |
| - INSTALL_DIR=dir directory in which artifacts are found |
99 |
| - DEVICE=cpu|gpu |
100 |
| - BRANCH=branch branch names to serve as an exta package tag |
101 |
| - RAMP=1 build RAMP file |
102 |
| - DEPS=1 build dependencies file |
103 |
| - RAMP_PROG path to RAMP program |
| 153 | +#---------------------------------------------------------------------------------------------- |
104 | 154 |
|
105 |
| - END |
106 |
| - exit 0 |
| 155 | +export NUMVER=$(NUMERIC=1 $ROOT/opt/getver) |
| 156 | +export SEMVER=$($ROOT/opt/getver) |
| 157 | + |
| 158 | +if [[ ! -z $VARIANT ]]; then |
| 159 | + VARIANT=-${VARIANT} |
107 | 160 | fi
|
108 | 161 |
|
109 |
| -PRODUCT=redisai |
110 |
| -PRODUCT_LIB=$PRODUCT.so |
| 162 | +[[ -z $BRANCH ]] && BRANCH=${CIRCLE_BRANCH:-`git rev-parse --abbrev-ref HEAD`} |
| 163 | +BRANCH=${BRANCH//[^A-Za-z0-9._-]/_} |
| 164 | +if [[ $GITSHA == 1 ]]; then |
| 165 | + GIT_COMMIT=$(git describe --always --abbrev=7 --dirty="+" 2>/dev/null || git rev-parse --short HEAD) |
| 166 | + BRANCH="${BRANCH}-${GIT_COMMIT}" |
| 167 | +fi |
| 168 | +export BRANCH |
111 | 169 |
|
112 |
| -if [[ -z $BRANCH ]]; then |
113 |
| - tag=`git describe --abbrev=0 2> /dev/null | sed 's/^v\(.*\)/\1/'` |
114 |
| - if [[ $? != 0 || -z $tag ]]; then |
115 |
| - BRANCH=`git rev-parse --abbrev-ref HEAD` |
116 |
| - VERSION= |
117 |
| - else |
118 |
| - VERSION=$tag |
| 170 | +[[ $DEPS == 1 ]] && echo "Building dependencies ..." |
| 171 | +for dep in $BACKENDS; do |
| 172 | + if [[ $DEPS == 1 ]]; then |
| 173 | + echo "$dep ..." |
| 174 | + pack_deps $dep |
119 | 175 | fi
|
120 |
| -else |
121 |
| - VERSION= |
122 |
| -fi |
| 176 | +done |
123 | 177 |
|
124 |
| -# GIT_VER="" |
125 |
| -# if [[ -d $ROOT/.git ]]; then |
126 |
| -# if [[ ! -z $BRANCH ]]; then |
127 |
| -# GIT_BRANCH="$BRANCH" |
128 |
| -# else |
129 |
| -# GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) |
130 |
| -# fi |
131 |
| -# GIT_COMMIT=$(git describe --always --abbrev=7 --dirty="+") |
132 |
| -# # GIT_VER="${GIT_BRANCH}-${GIT_COMMIT}" |
133 |
| -# GIT_VER="${GIT_BRANCH}" |
134 |
| -# else |
135 |
| -# if [[ ! -z $BRANCH ]]; then |
136 |
| -# GIT_BRANCH="$BRANCH" |
137 |
| -# else |
138 |
| -# GIT_BRANCH=unknown |
139 |
| -# fi |
140 |
| -# GIT_VER="$GIT_BRANCH" |
141 |
| -# fi |
142 |
| - |
143 |
| -if ! command -v redis-server > /dev/null; then |
144 |
| - echo "Cannot find redis-server. Aborting." |
145 |
| - exit 1 |
146 |
| -fi |
| 178 | +if [[ $RAMP == 1 ]]; then |
| 179 | + if ! command -v redis-server > /dev/null; then |
| 180 | + >&2 echo "$0: Cannot find redis-server. Aborting." |
| 181 | + exit 1 |
| 182 | + fi |
147 | 183 |
|
148 |
| -pack_ramp |
149 |
| -[[ $DEPS == 1 ]] && pack_deps |
| 184 | + echo "Building RAMP files ..." |
| 185 | + SNAPSHOT=0 pack_ramp |
| 186 | + SNAPSHOT=1 pack_ramp |
| 187 | + echo "Done." |
| 188 | +fi |
150 | 189 |
|
151 | 190 | exit 0
|
0 commit comments