Skip to content

Commit 837da80

Browse files
authored
Merge pull request #232 from samoht/opam2
Use opam2
2 parents 61c392d + 1865414 commit 837da80

5 files changed

+171
-58
lines changed

.travis-docker.sh

+21-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ echo -en "travis_fold:start:prepare.ci\r"
55
default_user=ocaml
66
default_branch=master
77
default_hub_user=ocaml
8+
default_opam_version=2.0.0
89

910
fork_user=${FORK_USER:-$default_user}
1011
fork_branch=${FORK_BRANCH:-$default_branch}
1112
hub_user=${HUB_USER:-$default_hub_user}
13+
opam_version=${OPAM_VERSION:-$default_opam_version}
1214

1315
# create env file
1416
echo PACKAGE="$PACKAGE" > env.list
@@ -24,14 +26,22 @@ echo POST_INSTALL_HOOK="$POST_INSTALL_HOOK" >> env.list
2426
echo $EXTRA_ENV >> env.list
2527

2628
# build a local image to trigger any ONBUILDs
27-
echo FROM ${hub_user}/opam:${DISTRO}_ocaml-${OCAML_VERSION} > Dockerfile
29+
case $opam_version in
30+
2.0.0) from=${hub_user}/opam2:${DISTRO} ;;
31+
*) from=${hub_user}/opam:${DISTRO}_ocaml-${OCAML_VERSION} ;;
32+
esac
33+
34+
echo FROM $from > Dockerfile
2835
echo WORKDIR /home/opam/opam-repository >> Dockerfile
2936

3037
if [ -n "$BASE_REMOTE" ]; then
3138
echo "RUN git remote set-url origin ${BASE_REMOTE} &&\
3239
git fetch origin && git reset --hard origin/master" >> Dockerfile
3340
else
34-
echo RUN git pull -q origin master >> Dockerfile
41+
case $opam_version in
42+
2.0.0) echo RUN git pull -q origin 2.0.0 >> Dockerfile ;;
43+
*) echo RUN git pull -q origin master >> Dockerfile ;;
44+
esac
3545
fi
3646

3747

@@ -42,13 +52,22 @@ if [ $fork_user != $default_user -o $fork_branch != $default_branch ]; then
4252
>> Dockerfile
4353
fi
4454

55+
case $opam_version in
56+
2.0.0)
57+
echo ENV OPAMYES=1 >> Dockerfile
58+
[[ ${DISTRO} = "fedora"* ]] &&
59+
echo RUN sudo yum install rsync -y >> Dockerfile ;;
60+
*) ;;
61+
esac
62+
4563
echo RUN opam update -u -y >> Dockerfile
4664
echo RUN opam depext -ui travis-opam >> Dockerfile
4765
echo RUN cp '~/.opam/$(opam switch show)/bin/ci-opam' "~/" >> Dockerfile
4866
echo RUN opam remove -a travis-opam >> Dockerfile
4967
echo RUN mv "~/ci-opam" '~/.opam/$(opam switch show)/bin/ci-opam' >> Dockerfile
5068
echo VOLUME /repo >> Dockerfile
5169
echo WORKDIR /repo >> Dockerfile
70+
5271
docker build -t local-build .
5372

5473
echo Dockerfile:

.travis-ocaml.sh

+110-42
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ fi
2828

2929
# the ocaml version to test
3030
OCAML_VERSION=${OCAML_VERSION:-latest}
31-
OPAM_VERSION=${OPAM_VERSION:-1.2.2}
31+
OPAM_VERSION=${OPAM_VERSION:-2.0.0}
3232
OPAM_INIT=${OPAM_INIT:-true}
3333

3434
# the base opam repository to use for bootstrapping and catch-all namespace
35-
BASE_REMOTE=${BASE_REMOTE:-git://github.com/ocaml/opam-repository}
35+
case $OPAM_VERSION in
36+
2.0.0) BASE_REMOTE=${BASE_REMOTE:-git://github.com/ocaml/opam-repository#2.0.0} ;;
37+
*) BASE_REMOTE=${BASE_REMOTE:-git://github.com/ocaml/opam-repository} ;;
38+
esac
3639

3740
# whether we need a new gcc and binutils
3841
UPDATE_GCC_BINUTILS=${UPDATE_GCC_BINUTILS:-"0"}
@@ -41,44 +44,24 @@ UPDATE_GCC_BINUTILS=${UPDATE_GCC_BINUTILS:-"0"}
4144
UBUNTU_TRUSTY=${UBUNTU_TRUSTY:-"0"}
4245

4346
# Install XQuartz on OSX
44-
INSTALL_XQUARTZ=${INSTALL_XQUARTZ:-"true"}
45-
46-
install_on_linux () {
47-
case "$OCAML_VERSION,$OPAM_VERSION" in
48-
3.12,1.2.2)
49-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=3.12.1
50-
ppa=avsm/ocaml42+opam12 ;;
51-
4.00,1.2.2)
52-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.00.1
53-
ppa=avsm/ocaml42+opam12 ;;
54-
4.01,1.2.2)
55-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.01.0
56-
ppa=avsm/ocaml42+opam12 ;;
57-
4.02,1.1.2) OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system}; ppa=avsm/ocaml42+opam11 ;;
58-
4.02,1.2.0) OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system}; ppa=avsm/ocaml42+opam120 ;;
59-
4.02,1.2.1) OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system}; ppa=avsm/ocaml42+opam121 ;;
60-
4.02,1.2.2) OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system}; ppa=avsm/ocaml42+opam12 ;;
61-
4.03,1.2.2)
62-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.03.0
63-
ppa=avsm/ocaml42+opam12 ;;
64-
4.04,1.2.2)
65-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.04.2
66-
ppa=avsm/ocaml42+opam12 ;;
67-
4.05,1.2.2)
68-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.05.0
69-
ppa=avsm/ocaml42+opam12 ;;
70-
4.06,1.2.2)
71-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.06.1
72-
ppa=avsm/ocaml42+opam12 ;;
73-
4.07,1.2.2)
74-
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.07.0
75-
ppa=avsm/ocaml42+opam12 ;;
76-
*) echo "Unknown OCAML_VERSION=$OCAML_VERSION OPAM_VERSION=$OPAM_VERSION"
77-
echo "(An unset OCAML_VERSION used to default to \"latest\", but you must now specify it."
78-
echo "Try something like \"OCAML_VERSION=3.12\", \"OCAML_VERSION=4.07\", or see README-travis.md at https://github.com/ocaml/ocaml-ci-scripts )"
79-
exit 1 ;;
80-
esac
47+
INSTALL_XQUARTZ=${INSTALL_XQUARTZ:-"false"}
48+
49+
install_opam2 () {
50+
case $TRAVIS_OS_NAME in
51+
linux)
52+
sudo add-apt-repository --yes ppa:ansible/bubblewrap
53+
sudo apt-get update -qq
54+
sudo apt-get install -y bubblewrap
55+
sudo wget https://github.com/ocaml/opam/releases/download/2.0.0-rc4/opam-2.0.0-rc4-x86_64-linux -O /usr/local/bin/opam
56+
sudo chmod +x /usr/local/bin/opam ;;
57+
osx)
58+
sudo curl -sL https://github.com/ocaml/opam/releases/download/2.0.0-rc4/opam-2.0.0-rc4-x86_64-darwin -o /usr/local/bin/opam
59+
sudo chmod +x /usr/local/bin/opam ;;
60+
esac
61+
}
8162

63+
install_ppa () {
64+
ppa=$1
8265
sudo add-apt-repository --yes ppa:${ppa}
8366
sudo apt-get update -qq
8467
if [ "${INSTALL_LOCAL:=0}" = 0 ] ; then
@@ -96,6 +79,78 @@ install_on_linux () {
9679
else
9780
sudo apt-get install -y opam
9881
fi
82+
}
83+
84+
install_on_linux () {
85+
case "$OCAML_VERSION,$OPAM_VERSION" in
86+
3.12,1.2.2)
87+
install_ppa avsm/ocaml42+opam12
88+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=3.12.1 ;;
89+
3.12,2.0.0)
90+
install_opam2
91+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=3.12.1 ;;
92+
4.00,1.2.2)
93+
install_ppa avsm/ocaml42+opam12
94+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.00.1 ;;
95+
4.00,2.0.0)
96+
install_opam2
97+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=4.00.1 ;;
98+
4.01,1.2.2)
99+
install_ppa avsm/ocaml42+opam12
100+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.01.0 ;;
101+
4.01,2.0.0)
102+
install_opam2
103+
OCAML_FULL_VERSION=4.01.0 OPAM_SWITCH=${OPAM_SWITCH:-ocaml-system} ;;
104+
4.02,1.1.2)
105+
install_ppa avsm/ocaml42+opam11
106+
OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system} ;;
107+
4.02,1.2.0)
108+
install_ppa avsm/ocaml42+opam120
109+
OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system} ;;
110+
4.02,1.2.1)
111+
install_ppa avsm/ocaml42+opam121
112+
OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system} ;;
113+
4.02,1.2.2)
114+
install_ppa avsm/ocaml42+opam12
115+
OCAML_FULL_VERSION=4.02.3; OPAM_SWITCH=${OPAM_SWITCH:-system} ;;
116+
4.02,2.0.0)
117+
install_opam2
118+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=4.02.3 ;;
119+
4.03,1.2.2)
120+
install_ppa avsm/ocaml42+opam12
121+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.03.0 ;;
122+
4.03,2.0.0)
123+
install_opam2
124+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=4.03.0 ;;
125+
4.04,1.2.2)
126+
install_ppa avsm/ocaml42+opam12
127+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.04.2 ;;
128+
4.04,2.0.0)
129+
install_opam2
130+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=4.04.2 ;;
131+
4.05,1.2.2)
132+
install_ppa avsm/ocaml42+opam12
133+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.05.0 ;;
134+
4.05,2.0.0)
135+
install_opam2
136+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=4.05.0 ;;
137+
4.06,1.2.2)
138+
install_ppa avsm/ocaml42+opam12
139+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.06.1 ;;
140+
4.06,2.0.0)
141+
install_opam2
142+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=4.06.1 ;;
143+
4.07,1.2.2)
144+
install_ppa avsm/ocaml42+opam12
145+
OCAML_VERSION=4.02; OCAML_FULL_VERSION=4.07.0 ;;
146+
4.07,2.0.0)
147+
install_opam2
148+
OCAML_VERSION=4.01; OCAML_FULL_VERSION=4.07.0 ;;
149+
*) echo "Unknown OCAML_VERSION=$OCAML_VERSION OPAM_VERSION=$OPAM_VERSION"
150+
echo "(An unset OCAML_VERSION used to default to \"latest\", but you must now specify it."
151+
echo "Try something like \"OCAML_VERSION=3.12\", \"OCAML_VERSION=4.07\", or see README-travis.md at https://github.com/ocaml/ocaml-ci-scripts )"
152+
exit 1 ;;
153+
esac
99154

100155
TRUSTY="deb mirror://mirrors.ubuntu.com/mirrors.txt trusty main restricted universe"
101156

@@ -115,7 +170,7 @@ install_on_linux () {
115170
sudo apt-get -qq update
116171
fi
117172

118-
if [ "$INSTALL_LOCAL" != 0 ] ; then
173+
if [ "${INSTALL_LOCAL:=0}" != 0 ] ; then
119174
echo -en "travis_fold:start:build.ocaml\r"
120175
echo "Building a local OCaml; this may take a few minutes..."
121176
wget "http://caml.inria.fr/pub/distrib/ocaml-${OCAML_FULL_VERSION%.*}/ocaml-$OCAML_FULL_VERSION.tar.gz"
@@ -141,15 +196,28 @@ install_on_osx () {
141196
brew upgrade python || true
142197
case "$OCAML_VERSION,$OPAM_VERSION" in
143198
3.12,1.2.2) OCAML_FULL_VERSION=3.12.1; brew install opam ;;
199+
3.12,2.0.0) OCAML_FULL_VERSION=3.12.1; install_opam2 ;;
144200
4.00,1.2.2) OCAML_FULL_VERSION=4.00.1; brew install opam ;;
201+
4.00,2.0.0) OCAML_FULL_VERSION=4.00.1; install_opam2 ;;
145202
4.01,1.2.2) OCAML_FULL_VERSION=4.01.0; brew install opam ;;
203+
4.01,2.0.0) OCAML_FULL_VERSION=4.01.0; install_opam2 ;;
146204
4.02,1.2.2) OCAML_FULL_VERSION=4.02.3; brew install opam ;;
147-
4.02,1.3.0) OCAML_FULL_VERSION=4.02.3; brew install opam --HEAD ;;
205+
4.02,2.0.0) OCAML_FULL_VERSION=4.02.3; install_opam2 ;;
148206
4.03,1.2.2) OCAML_FULL_VERSION=4.03.0; brew install opam ;;
207+
4.03,2.0.0) OCAML_FULL_VERSION=4.03.0; install_opam2 ;;
149208
4.04,1.2.2) OCAML_FULL_VERSION=4.04.2; brew install opam ;;
209+
4.04,2.0.0) OCAML_FULL_VERSION=4.04.2; install_opam2 ;;
150210
4.05,1.2.2) OCAML_FULL_VERSION=4.05.0; brew install opam ;;
211+
4.05,2.0.0) OCAML_FULL_VERSION=4.05.0; install_opam2 ;;
151212
4.06,1.2.2) OCAML_FULL_VERSION=4.06.1; brew install opam ;;
152-
4.07,1.2.2) OCAML_FULL_VERSION=4.07.0; OPAM_SWITCH=${OPAM_SWITCH:-system}; brew install ocaml; brew install opam ;;
213+
4.06,2.0.0) OCAML_FULL_VERSION=4.06.1; install_opam2 ;;
214+
4.07,1.2.2) OCAML_FULL_VERSION=4.07.0;
215+
OPAM_SWITCH=${OPAM_SWITCH:-system};
216+
brew install ocaml; brew install opam ;;
217+
4.07,2.0.0) OCAML_FULL_VERSION=4.07.0;
218+
OPAM_SWITCH=${OPAM_SWITCH:-ocaml-system};
219+
brew install ocaml;
220+
install_opam2 ;;
153221
*) echo "Unknown OCAML_VERSION=$OCAML_VERSION OPAM_VERSION=$OPAM_VERSION"
154222
exit 1 ;;
155223
esac

.travis-opam.sh

+2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ eval $(opam config env)
2222
opam depext -y conf-m4
2323
opam pin add travis-opam https://github.com/${fork_user}/ocaml-ci-scripts.git#${fork_branch}
2424
cp ~/.opam/$(opam switch show)/bin/ci-opam ~/
25+
2526
opam remove -a travis-opam
27+
2628
mv ~/ci-opam ~/.opam/$(opam switch show)/bin/ci-opam
2729

2830
echo -en "travis_fold:end:prepare.ci\r"

README-travis.md

+12-9
Original file line numberDiff line numberDiff line change
@@ -254,17 +254,14 @@ Configuration choices are passed to `mirage configure` via environment variables
254254

255255
### Changing the version of opam
256256

257-
```yaml
258-
- [...] OPAM_VERSION="1.1.2"
259-
```
257+
By default, the CI scripts are using the latest RC release of opam *2.0.0*.
258+
To use a different version of opam, use:
260259

261-
By default, the latest stable version of opam will be used. the scripts supports
262-
these version:
260+
```yaml
261+
- [...] OPAM_VERSION="1.2.2"
262+
```
263263

264-
- `OPAM_VERSION=1.1.2` only when the OS is `unix`
265-
- `OPAM_VERSION=1.2.0` only when the OS is `unix`
266-
- `OPAM_VERSION=1.2.2` when the OS is either `unix` or `osx` (default)
267-
- `OPAM_VERSION=1.3.0` only when the OS is `osx`
264+
Supported versions are `2.0.0`, `1.2.2`, `1.2.0 and `1.1.2`.
268265

269266
### Testing on different OS
270267

@@ -278,6 +275,12 @@ os:
278275
- osx
279276
```
280277

278+
To enable XQuartz support on MacOS, use:
279+
280+
```yaml
281+
- [...] INSTALL_XQUARTZ=true
282+
```
283+
281284
## Pushing OCamldoc docs to Github page, `.travis-docgen.sh`
282285

283286
This relies on the existence of a `configure` script and `Makefile` such that

src/ci_opam.ml

+26-5
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ let revdep_run = list (getenv_default "REVDEPS" "")
6060
(* run opam lint *)
6161
let opam_lint = fuzzy_bool_of_string (getenv_default "OPAM_LINT" "true")
6262

63+
(* opam version *)
64+
let opam_version =
65+
let raw = ?|> "opam --version" in
66+
match if String.length raw <= 1 then '?' else raw.[0] with
67+
| '2' -> `V2
68+
| '1' -> `V1
69+
| _ -> failwith (raw ^ ": invalid opam version")
70+
6371
(* other variables *)
6472
let extra_deps = list (getenv_default "EXTRA_DEPS" "")
6573
let pre_install_hook = getenv_default "PRE_INSTALL_HOOK" ""
@@ -74,9 +82,10 @@ let add_remote =
7482
let layer = ref 0 in
7583
fun remote -> ?|~ "opam remote add extra%d %s" !layer remote; incr layer
7684

77-
let pin pin = match pair pin with
78-
| (pkg,None) -> ?|~ "opam pin add %s --dev-repo -n" pkg
79-
| (pkg,Some url) -> ?|~ "opam pin add %s %s -n" pkg url
85+
let pin = function
86+
| pkg, None -> ?|~ "opam pin add %s --dev-repo -n" pkg
87+
| pkg, Some "." -> ?|~ "opam pin add %s --kind=path . -n" pkg
88+
| pkg, Some url -> ?|~ "opam pin add %s %s -n" pkg url
8089

8190
let is_base pkg =
8291
match trim (?|> "opam show -f version %s" pkg) with
@@ -207,6 +216,16 @@ let max_version package =
207216
in
208217
next_version (trim (?|> "opam show -f version %s" package))
209218

219+
module Strings = Map.Make(String)
220+
221+
let lint_pins pkg pins =
222+
let pins = List.map pair pins in
223+
let pkgs =
224+
List.fold_left (fun acc (k, v) -> Strings.add k v acc) Strings.empty pins
225+
in
226+
let pkgs = Strings.add pkg (Some ".") pkgs in
227+
Strings.fold (fun k v acc -> (k, v) :: acc) pkgs []
228+
210229
;; (* Go go go *)
211230

212231
with_fold "Prepare" (fun () ->
@@ -237,9 +256,11 @@ with_fold "Prepare" (fun () ->
237256
Format.ksprintf failwith "No opam file found for %s, aborting." pkg_name
238257
in
239258

259+
(if opam_lint then match opam_version with
260+
| `V2 -> ?|~ "opam lint %s --warn=-21-32-48" opam
261+
| _ -> ?|~ "opam lint %s" opam);
262+
let pins = lint_pins pkg pins in
240263
List.iter pin pins;
241-
(if opam_lint then ?|~ "opam lint %s" opam);
242-
?|~ "opam pin add %s . -n" pkg;
243264
?| "eval $(opam config env)";
244265
?| "opam install depext";
245266
(* Install the external dependencies *)

0 commit comments

Comments
 (0)