94 lines
2.8 KiB
Bash
Executable File
94 lines
2.8 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
set -e
|
|
|
|
ci_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
|
script_dir="$(dirname "$ci_dir")"
|
|
src_dir="$(dirname "$script_dir")"
|
|
cd "$src_dir"
|
|
|
|
. "$script_dir"/version.sh
|
|
|
|
tmp_dir=$(mktemp -dt tezos.build_deps.tezos.XXXXXXXX)
|
|
|
|
cleanup () {
|
|
set +e
|
|
echo Cleaning up...
|
|
rm -rf "$tmp_dir"
|
|
}
|
|
trap cleanup EXIT INT
|
|
|
|
opam_files=$(find -name \*.opam | sort)
|
|
dependencies="$opam_files scripts/install_build_deps.sh scripts/version.sh scripts/opam-pin.sh scripts/opam-unpin.sh scripts/opam-remove.sh"
|
|
|
|
image_name="${1:-tezos_build_deps}"
|
|
image_version="${2:-latest}"
|
|
base_image="${3:-tezos_opam:alpine-${alpine_version}_ocaml-${ocaml_version}}"
|
|
cached_image="${4:-}"
|
|
test_deps="ocp-indent alcotest.0.8.3 alcotest-lwt crowbar"
|
|
|
|
cat <<EOF > "$tmp_dir"/Dockerfile
|
|
FROM $base_image
|
|
COPY . tezos
|
|
RUN sudo chown -R opam tezos
|
|
RUN opam exec -- ./tezos/scripts/install_build_deps.sh || \
|
|
( echo ; \
|
|
echo "### Failed to build with preloaded package" ; \
|
|
echo "### Retrying with the default opam repository" ; \
|
|
echo ; \
|
|
opam remote add default https://opam.ocaml.org/2.0 && \
|
|
opam exec -- ./tezos/scripts/install_build_deps.sh )
|
|
RUN opam install --yes $test_deps || \
|
|
( echo ; \
|
|
echo "### Failed to build with preloaded package" ; \
|
|
echo "### Retrying with the default opam repository" ; \
|
|
echo ; \
|
|
opam remote add default https://opam.ocaml.org/2.0 && \
|
|
opam install --yes $test_deps )
|
|
EOF
|
|
|
|
tar -c $dependencies | tar -C "$tmp_dir" -x
|
|
|
|
|
|
## Lookup for for prebuilt dependencies...
|
|
|
|
if [ ! -z "$cached_image" ]; then
|
|
cd "$tmp_dir"
|
|
base_image_sha1=$("$ci_dir"/docker_registry_read.sh \
|
|
"${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" \
|
|
"$base_image")
|
|
dependencies_sha1=cache_$(echo "$base_image_sha1" | sha1sum - $dependencies Dockerfile | sha1sum | tr -d ' -')
|
|
echo
|
|
echo "### Looking for prebuilt dependencies ($image_name:$dependencies_sha1)..."
|
|
if "$ci_dir"/docker_registry_tag.sh gitlab-ci-token "${CI_BUILD_TOKEN}" \
|
|
"$image_name" "$dependencies_sha1" "$image_version" ; then
|
|
echo
|
|
echo "### Found $image_name:$dependencies_sha1"
|
|
echo
|
|
exit 0
|
|
fi
|
|
echo
|
|
echo "### Missing..."
|
|
echo
|
|
fi
|
|
|
|
echo
|
|
echo "### Building tezos dependencies..."
|
|
echo
|
|
|
|
docker build -t "$image_name:$image_version" "$tmp_dir"
|
|
|
|
echo
|
|
echo "### Succesfully build docker image: $image_name:$image_version"
|
|
echo
|
|
|
|
if [ ! -z "$cached_image" ]; then
|
|
echo
|
|
echo "### Saving docker image ($image_name:$dependencies_sha1)..."
|
|
echo
|
|
docker push "$image_name:$image_version"
|
|
"$ci_dir"/docker_registry_tag.sh \
|
|
"${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" \
|
|
"$image_name" "$image_version" "$dependencies_sha1"
|
|
fi
|