Skip to content

Commit 9cc0d58

Browse files
committed
[wip] script to pin Coq's ci
1 parent 3cb4dc3 commit 9cc0d58

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
# This script generates opam/packages/*/*.dev/opam files using Coq's CI
6+
# project tracking info and generates $OUTPUT mentioning
7+
# them
8+
OUTPUT=${OUTPUT:=coq_platform_packages_ci.sh}
9+
10+
TMP=`mktemp -d`
11+
trap "rm -rf $TMP" EXIT
12+
13+
function log {
14+
echo $1
15+
}
16+
17+
function git_clone {
18+
test -d $TMP/git/$1 || (log "DBG: Cloning $1 ..."; git clone $2 -b $3 --depth=1 $TMP/git/$1 >/dev/null 2>&1)
19+
}
20+
21+
function test_package {
22+
printf "%-52s # %s\n" "PACKAGES=\"\${PACKAGES} $1.dev\"" "$2" >> $OUTPUT
23+
}
24+
25+
function skip_package {
26+
printf "#%-51s # %s\n" "PACKAGES=\"\${PACKAGES} $1.dev\"" "$2" >> $OUTPUT
27+
}
28+
29+
function create_opam_pinned_package {
30+
local cip="$1"
31+
local package="$2"
32+
local REPO_VAR="${cip}_CI_GITURL"
33+
local REPO=${!REPO_VAR}
34+
local BRANCH_VAR="${cip}_CI_REF"
35+
local BRANCH=${!BRANCH_VAR}
36+
git_clone $cip ${REPO} ${BRANCH}
37+
mkdir -p opam/packages/$package/$package.dev/
38+
if [ -e $TMP/git/$cip/$package.opam ]; then
39+
cp $TMP/git/$cip/$package.opam opam/packages/$package/$package.dev/opam
40+
elif [ -e $TMP/git/$cip/*.opam ]; then
41+
cp $TMP/git/$cip/*.opam opam/packages/$package/$package.dev/opam
42+
elif [ -e $TMP/git/$cip/opam ]; then
43+
cp $TMP/git/$cip/opam opam/packages/$package/$package.dev/opam
44+
else
45+
log "WARNING: No opam file for $cip $package"
46+
skip_package $package "since no opam package found"
47+
return
48+
fi
49+
local HASH=$(cd $TMP/git/$cip/ && git log --oneline | cut -f 1 -d ' ')
50+
printf "\nsrc { url : \"%s\" }" "git+${REPO}#${HASH}" >> opam/packages/$package/$package.dev/opam
51+
log "INFO: Testing $package at hash $HASH (on branch $BRANCH from $REPO)"
52+
test_package $package "${REPO}#${HASH} (on branch $BRANCH)"
53+
}
54+
55+
# fetch ci info for Coq
56+
git_clone coq https://github.com/coq/coq.git master
57+
. git/coq/dev/ci/ci-basic-overlay.sh
58+
# fake ci project for Coq itself
59+
project coq "https://github.com/coq/coq.git" "master"
60+
COQ_CI_PROJECTS="${projects[*]}"
61+
62+
# fetch package list from the current platform
63+
COQ_PLATFORM_EXTENT=f
64+
COQ_PLATFORM_COMPCERT=f
65+
COQ_PLATFORM_VST=y
66+
. coq_platform_packages.sh
67+
68+
# create the .dev package and their list
69+
> $OUTPUT
70+
for pv in $PACKAGES; do
71+
package=`echo $pv | sed -e 's/\..*//'`
72+
case $package in
73+
coqide)
74+
create_opam_pinned_package coq $package
75+
;;
76+
coq-mathcomp-ssreflect|coq-mathcomp-fingroup|coq-mathcomp-algebra|coq-mathcomp-solvable|coq-mathcomp-field|coq-mathcomp-character)
77+
create_opam_pinned_package mathcomp $package
78+
;;
79+
coq-hierarchy-builder) # https://github.com/coq/coq/pull/13633
80+
create_opam_pinned_package elpi_hb $package
81+
;;
82+
coq-gappa) # https://github.com/coq/coq/pull/13633
83+
create_opam_pinned_package gappa_plugin $package
84+
;;
85+
lablgtk3|gappa|menhir) # why are these in the platform?
86+
continue
87+
;;
88+
*)
89+
found=f
90+
for cip in $COQ_CI_PROJECTS; do
91+
if [ "$found" = "f" -a "${cip/_/-}" = "${package#coq-}" ]; then
92+
found=t
93+
create_opam_pinned_package ${cip} $package
94+
fi
95+
done
96+
if [ "$found" = "f" ]; then
97+
log "WARNING: platform package $package has no corresponding entry in Coq's ci"
98+
skip_package $package "no corresponding entry in Coq's ci"
99+
fi
100+
;;
101+
esac
102+
done
103+
104+
echo "========================== platform version CI =================="
105+
cat $OUTPUT

0 commit comments

Comments
 (0)