118 lines
3.6 KiB
Bash
Executable File
118 lines
3.6 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
# Update the repository of opam packages used by tezos. Tezos uses a
|
|
# private, epurated, opam repository to store all its
|
|
# dependencies. This is generated by the official opam repository
|
|
# (branch 2.0.0) and then filtered using opam admin to include only
|
|
# the cone of tezos dependencies. This repository is then used to
|
|
# create the based opam image used by the CI to compile tezos and to
|
|
# generate the docker images. From time to time, when it is necessary
|
|
# to update a dependency, this repository should mannually
|
|
# refreshed. This script takes care of generating a patch for the
|
|
# private opam tezos repository. This patch must be applied manually
|
|
# w.r.t. the master branch. The procedure is as follows :
|
|
#
|
|
# 1. Update the varialbe `full_opam_repository_tag` in `version.sh` to
|
|
# a commit hash from the 2.0.0 branch of the official
|
|
# opam-repository. All the required packages will be extracted from
|
|
# this snapshot fo the repo.
|
|
#
|
|
# 2. Run this script, it will generate a file `opam_repo.patch`
|
|
#
|
|
# 3. Review the patch.
|
|
#
|
|
# 4. In the tezos opam-repository, create a new branch from master and
|
|
# apply this patch. Push the patch and create a merge request. A
|
|
# new docker image with all the prebuilt dependencies will be
|
|
# created by the CI.
|
|
#
|
|
# 5. Update the variable `opam_repository_tag` in files
|
|
# `scripts/version.sh` and `.gitlab-ci.yml` with the hash of the
|
|
# newly created commit in `tezos/opam-repository`.
|
|
#
|
|
# 6. Enjoy your new dependencies
|
|
|
|
set -e
|
|
|
|
target="$(pwd)"/opam_repo.patch tmp_dir=$(mktemp -dt tezos_deps_opam.XXXXXXXX)
|
|
|
|
cleanup () {
|
|
set +e
|
|
echo Cleaning up...
|
|
rm -rf "$tmp_dir"
|
|
rm -rf Dockerfile
|
|
}
|
|
# trap cleanup EXIT INT
|
|
|
|
script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
|
src_dir="$(dirname "$script_dir")"
|
|
|
|
. "$script_dir"/version.sh
|
|
|
|
opams=$(find "$src_dir/vendors" "$src_dir/src" -name \*.opam -print)
|
|
|
|
## Full snapshot of the opam repository
|
|
git clone https://github.com/ocaml/opam-repository -b 2.0.0 "$tmp_dir"
|
|
|
|
|
|
## Adding the various tezos packages
|
|
packages=
|
|
for opam in $opams; do
|
|
|
|
dir=$(dirname $opam)
|
|
file=$(basename $opam)
|
|
package=${file%.opam}
|
|
packages=$packages,$package
|
|
mkdir -p "$tmp_dir"/packages/$package/$package.dev
|
|
|
|
## HACK: For some reason, `opam admin list/filter` do not follow
|
|
## `--with-test/doc` for 'toplevel' package, only for their
|
|
## 'dependencies. We want the exact opposite (like for `opam
|
|
## install`), so we manually remove the tag the most
|
|
## ugliest-possible way...
|
|
|
|
sed -e "s/{ *test *}//" \
|
|
-e "s/test \& //" \
|
|
-e "s/\& test//" \
|
|
-e "s/{ *doc *}//" \
|
|
-e "s/doc \& //" \
|
|
-e "s/\& doc//" \
|
|
$opam > "$tmp_dir"/packages/$package/$package.dev/opam
|
|
|
|
done
|
|
|
|
## Filtering unrequired packages
|
|
cd $tmp_dir
|
|
|
|
git reset --hard "$full_opam_repository_tag"
|
|
opam admin filter --yes \
|
|
--resolve $packages,ocaml,ocaml-base-compiler,odoc,opam-depext
|
|
|
|
## Adding useful compiler variants
|
|
for variant in afl flambda fp fp+flambda ; do
|
|
git checkout packages/ocaml-variants/ocaml-variants.$ocaml_version+$variant
|
|
done
|
|
|
|
## Removing the various tezos packages
|
|
for opam in $opams; do
|
|
file=$(basename $opam)
|
|
package=${file%.opam}
|
|
rm -r "$tmp_dir"/packages/$package
|
|
done
|
|
|
|
## Adding safer hashes
|
|
opam admin add-hashes sha256 sha512
|
|
|
|
## Generating the diff!
|
|
git remote add tezos $opam_repository_url
|
|
git fetch tezos
|
|
git reset "$opam_repository_tag"
|
|
git add packages
|
|
git diff HEAD -- packages > "$target"
|
|
|
|
echo
|
|
echo "Wrote proposed update in: $target."
|
|
echo 'Please add this patch to: `https://gitlab.com/tezos/opam-repository`'
|
|
echo 'And update accordingly the commit hash in: `.gitlab-ci.yml` and `scripts/version.sh`'
|
|
echo
|