Opam: use pinned repo in docker image
This commit is contained in:
parent
a7022b2ef0
commit
99d0603a53
@ -45,7 +45,7 @@ echo
|
||||
cp -a "$build_dir"/opam-$opam_tag.tgz "$tmp_dir"
|
||||
|
||||
cat <<EOF > "$tmp_dir"/Dockerfile
|
||||
FROM ocaml/opam:alpine-${alpine_version}_ocaml-4.06.0
|
||||
FROM ocaml/opam:alpine-3.6_ocaml-4.06.0
|
||||
ENV PACKAGER "Tezos <ci@tezos.com>"
|
||||
COPY opam-$opam_tag.tgz opam-$opam_tag.tgz
|
||||
RUN tar xzf opam-$opam_tag.tgz && \
|
||||
|
@ -19,32 +19,18 @@ cleanup () {
|
||||
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"
|
||||
dependencies="$opam_files scripts/install_build_deps.raw.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 )
|
||||
RUN cd tezos && opam exec -- ./scripts/install_build_deps.raw.sh
|
||||
EOF
|
||||
|
||||
tar -c $dependencies | tar -C "$tmp_dir" -x
|
||||
|
@ -38,7 +38,7 @@ cp -a "$build_dir"/hidapi-$hidapi_version-r0.apk \
|
||||
cp "$build_dir"/opam-$opam_tag "$tmp_dir/opam"
|
||||
cp "$build_dir"/opam-installer-$opam_tag "$tmp_dir/opam-installer"
|
||||
|
||||
tar -C "$tmp_dir" -xzf "$build_dir"/opam_repository-tezos_deps-$ocaml_version.tgz
|
||||
tar -C "$tmp_dir" -xzf "$build_dir"/opam_repository-tezos_deps-$ocaml_version-$opam_repository_tag.tgz
|
||||
|
||||
cat <<EOF > "$tmp_dir"/Dockerfile
|
||||
FROM alpine:$alpine_version
|
||||
@ -73,11 +73,11 @@ RUN mkdir ~/.ssh && \
|
||||
chmod 700 ~/.ssh && \
|
||||
git config --global user.email "ci@tezos.com" && \
|
||||
git config --global user.name "Tezos CI" && \
|
||||
opam init --bare --no-setup --yes \
|
||||
opam init --disable-sandboxing --bare --no-setup --yes \
|
||||
tezos_deps /home/opam/opam-repository-tezos_deps && \
|
||||
opam switch create --yes tezos ocaml-base-compiler.${ocaml_version}
|
||||
opam switch create --yes /home/opam/tezos ocaml-base-compiler.${ocaml_version}
|
||||
|
||||
RUN opam install --yes opam-depext
|
||||
RUN opam install --switch=/home/opam/tezos --yes opam-depext
|
||||
|
||||
ENTRYPOINT [ "opam", "exec", "--" ]
|
||||
CMD [ "/bin/bash" ]
|
||||
|
@ -11,7 +11,7 @@ cd "$src_dir"
|
||||
|
||||
build_dir=${build_dir:-_docker_build}
|
||||
|
||||
if [ -f "$build_dir/opam_repository-tezos_deps-$ocaml_version.tgz" ]; then
|
||||
if [ -f "$build_dir/opam_repository-tezos_deps-$ocaml_version-$opam_repository_tag.tgz" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@ -30,7 +30,7 @@ trap cleanup EXIT INT
|
||||
## Creating a repository of tezos packages
|
||||
|
||||
repo="$tmp_dir"/opam-repository-tezos
|
||||
opams=$(find "$src_dir" -name \*.opam -print)
|
||||
opams=$(find "$src_dir/src" "$src_dir"/vendors -name \*.opam -print)
|
||||
mkdir -p "$repo/packages"
|
||||
echo "1.2" > "$repo/version"
|
||||
packages=
|
||||
@ -50,15 +50,9 @@ done
|
||||
# inline some of the test and doc dependencies.
|
||||
extra_packages="depext alcotest-lwt ocp-indent odoc ounit crowbar"
|
||||
|
||||
if ! [ -f "$build_dir"/opam-repository-master.tgz ]; then
|
||||
echo
|
||||
echo "### Fetching opam-repository-master.tar.gz ..."
|
||||
echo
|
||||
mkdir -p "$build_dir"
|
||||
wget -O "$build_dir"/opam-repository-master.tgz \
|
||||
https://github.com/ocaml/opam-repository/archive/master.tar.gz
|
||||
fi
|
||||
tar -C "$tmp_dir" -xzf "$build_dir"/opam-repository-master.tgz
|
||||
git clone $opam_repository_url "$tmp_dir/opam-repository-master"
|
||||
git -C "$tmp_dir"/opam-repository-master reset --hard $opam_repository_tag
|
||||
rm -rf "$tmp_dir"/opam-repository-master/.git
|
||||
|
||||
## HACK: Once opam2 is released, we should use the `ocaml/opam` image
|
||||
## instead of this custom installation of ocaml and opam.
|
||||
@ -71,17 +65,15 @@ echo "### Building tezos_bundle.tar.gz..."
|
||||
echo
|
||||
|
||||
cat <<EOF > "$tmp_dir"/Dockerfile
|
||||
FROM alpine
|
||||
FROM alpine:3.7
|
||||
ENV PACKAGER "Tezos <ci@tezos.com>"
|
||||
COPY opam-repository-master opam-repository-master
|
||||
COPY opam /usr/local/bin/opam
|
||||
RUN apk add --no-cache ocaml build-base m4 tar xz bzip2 curl perl rsync
|
||||
RUN cd ./opam-repository-master/compilers && \
|
||||
( ls -1 | grep -v ${ocaml_version} | xargs rm -r )
|
||||
RUN opam init --no-setup --yes default ./opam-repository-master
|
||||
RUN opam init --disable-sandboxing --no-setup --yes default ./opam-repository-master
|
||||
RUN opam install --yes opam-bundle
|
||||
COPY opam-repository-tezos opam-repository-tezos
|
||||
RUN opam bundle --yes --output="tezos_bundle-$ocaml_version" \
|
||||
RUN opam bundle --yes --output="tezos_bundle-$ocaml_version-$opam_repository_tag" \
|
||||
--repository=opam-repository-tezos \
|
||||
--repository=opam-repository-master \
|
||||
--ocaml=$ocaml_version \
|
||||
@ -91,20 +83,20 @@ EOF
|
||||
docker build --pull -t $tmp_image "$tmp_dir"
|
||||
|
||||
container=$(docker create $tmp_image)
|
||||
docker cp -L $container:/tezos_bundle-$ocaml_version.tar.gz "$tmp_dir"
|
||||
docker cp -L $container:/tezos_bundle-$ocaml_version-$opam_repository_tag.tar.gz "$tmp_dir"
|
||||
|
||||
cd "$tmp_dir"
|
||||
tar xf tezos_bundle-$ocaml_version.tar.gz tezos_bundle-$ocaml_version/repo
|
||||
tar xf tezos_bundle-$ocaml_version-$opam_repository_tag.tar.gz tezos_bundle-$ocaml_version-$opam_repository_tag/repo
|
||||
|
||||
# removing fake tezos packages
|
||||
cd tezos_bundle-$ocaml_version/repo/packages
|
||||
cd tezos_bundle-$ocaml_version-$opam_repository_tag/repo/packages
|
||||
rm -r $packages
|
||||
|
||||
# Repacking the repo
|
||||
cd "$tmp_dir"
|
||||
mv tezos_bundle-$ocaml_version/repo opam_repository-tezos_deps
|
||||
tar czf "opam_repository-tezos_deps-$ocaml_version.tgz" \
|
||||
mv tezos_bundle-$ocaml_version-$opam_repository_tag/repo opam_repository-tezos_deps
|
||||
tar czf "opam_repository-tezos_deps-$ocaml_version-$opam_repository_tag.tgz" \
|
||||
opam_repository-tezos_deps
|
||||
|
||||
cd "$src_dir"
|
||||
mv "$tmp_dir"/opam_repository-tezos_deps-$ocaml_version.tgz "$build_dir"
|
||||
mv "$tmp_dir"/opam_repository-tezos_deps-$ocaml_version-$opam_repository_tag.tgz "$build_dir"
|
||||
|
13
scripts/install_build_deps.raw.sh
Executable file
13
scripts/install_build_deps.raw.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#! /bin/sh
|
||||
|
||||
script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
||||
src_dir="$(dirname "$script_dir")"
|
||||
|
||||
. "$script_dir"/version.sh
|
||||
|
||||
"$script_dir"/opam-unpin.sh
|
||||
. "$script_dir"/opam-pin.sh
|
||||
|
||||
opam depext $packages
|
||||
|
||||
opam install $packages --deps-only --with-test
|
@ -28,10 +28,6 @@ if [ "$(ocaml -vnum)" != "$ocaml_version" ]; then
|
||||
opam install --unlock-base ocaml-base-compiler.$ocaml_version
|
||||
fi
|
||||
|
||||
"$script_dir"/opam-unpin.sh
|
||||
. "$script_dir"/opam-pin.sh
|
||||
|
||||
opam list --installed depext || opam install depext
|
||||
opam depext $packages
|
||||
|
||||
opam install $packages --deps-only --with-test
|
||||
"$script_dir"/install_build_deps.raw.sh
|
||||
|
@ -9,5 +9,5 @@ hidapi_version=0.8.0_rc1
|
||||
opam_version=2.0.0~rc
|
||||
opam_tag=2.0.0-rc3
|
||||
opam_repository_tag=7db0db5dc53de44d1a0190b1310aa225e04df9ef
|
||||
opam_repository_url=git+https://gitlab.com/tezos/opam-repository
|
||||
opam_repository_url=https://gitlab.com/tezos/opam-repository.git
|
||||
opam_repository=$opam_repository_url\#$opam_repository_tag
|
||||
|
Loading…
Reference in New Issue
Block a user