Skip to content

Commit a2f8a3c

Browse files
authored
Diff Package Versions (#121)
Add build step to compare r package versions. b/157548958
1 parent 8a95c8d commit a2f8a3c

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed

Jenkinsfile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,32 @@ pipeline {
7575
}
7676
}
7777

78+
stage('Package Versions') {
79+
parallel {
80+
stage('CPU Diff') {
81+
steps {
82+
sh '''#!/bin/bash
83+
set -exo pipefail
84+
85+
docker pull gcr.io/kaggle-images/rstats:${PRETEST_TAG}
86+
./diff --target gcr.io/kaggle-images/rstats:${PRETEST_TAG}
87+
'''
88+
}
89+
}
90+
stage('GPU Diff') {
91+
agent { label 'ephemeral-linux-gpu' }
92+
steps {
93+
sh '''#!/bin/bash
94+
set -exo pipefail
95+
96+
docker pull gcr.io/kaggle-private-byod/rstats:${PRETEST_TAG}
97+
./diff --gpu --target gcr.io/kaggle-private-byod/rstats:${PRETEST_TAG}
98+
'''
99+
}
100+
}
101+
}
102+
}
103+
78104
stage('Label CPU/GPU Staging Images') {
79105
steps {
80106
sh '''#!/bin/bash

diff

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#!/bin/bash
2+
set -e
3+
4+
usage() {
5+
cat << EOF
6+
Usage: $0 [OPTIONS]
7+
Compare a given Docker image package versions against the prod image.
8+
9+
Options:
10+
-g, --gpu Compare GPU images.
11+
-b, --base The base image to diff against.
12+
-t, --target The image to diff against the base image.
13+
Default is the locally built image.
14+
EOF
15+
}
16+
17+
18+
BASE_IMAGE_TAG='gcr.io/kaggle-images/rstats:latest'
19+
BASE_IMAGE_TAG_OVERRIDE=''
20+
TARGET_IMAGE_TAG='kaggle/rstats-build'
21+
TARGET_IMAGE_TAG_OVERRIDE=''
22+
23+
while :; do
24+
case "$1" in
25+
-h|--help)
26+
usage
27+
exit
28+
;;
29+
-g|--gpu)
30+
BASE_IMAGE_TAG='gcr.io/kaggle-private-byod/rstats:latest'
31+
TARGET_IMAGE_TAG='kaggle/rstats-gpu-build'
32+
;;
33+
-b|--base)
34+
if [[ -z "$2" ]]; then
35+
usage
36+
printf 'ERROR: No IMAGE specified after the %s flag.\n' "$1" >&2
37+
exit
38+
fi
39+
BASE_IMAGE_TAG_OVERRIDE="$2"
40+
shift # skip the flag value
41+
;;
42+
-t|--target)
43+
if [[ -z "$2" ]]; then
44+
usage
45+
printf 'ERROR: No IMAGE specified after the %s flag.\n' "$1" >&2
46+
exit
47+
fi
48+
TARGET_IMAGE_TAG_OVERRIDE="$2"
49+
shift # skip the flag value
50+
;;
51+
-?*)
52+
usage
53+
printf 'ERROR: Unknown option: %s\n' "$1" >&2
54+
exit
55+
;;
56+
*)
57+
break
58+
esac
59+
60+
shift
61+
done
62+
63+
if [[ -n "$BASE_IMAGE_TAG_OVERRIDE" ]]; then
64+
BASE_IMAGE_TAG="$BASE_IMAGE_TAG_OVERRIDE"
65+
fi
66+
67+
if [[ -n "$TARGET_IMAGE_TAG_OVERRIDE" ]]; then
68+
TARGET_IMAGE_TAG="$TARGET_IMAGE_TAG_OVERRIDE"
69+
fi
70+
71+
readonly BASE_IMAGE_TAG
72+
readonly TARGET_IMAGE_TAG
73+
74+
echo "Base: $BASE_IMAGE_TAG"
75+
echo "Target: $TARGET_IMAGE_TAG"
76+
77+
if [[ "$BASE_IMAGE_TAG" == "gcr.io/"* ]]; then
78+
docker pull "$BASE_IMAGE_TAG"
79+
fi
80+
81+
CMDS=('Rscript /tools/r_list_versions.R | sort')
82+
for cmd in "${CMDS[@]}"; do
83+
echo "== Comparing $cmd =="
84+
diff --suppress-common-lines --side-by-side \
85+
<(docker run -v $PWD/tools:/tools --rm "$BASE_IMAGE_TAG" /bin/bash -c "$cmd") \
86+
<(docker run -v $PWD/tools:/tools --rm "$TARGET_IMAGE_TAG" /bin/bash -c "$cmd") \
87+
&& echo 'No diff' || true
88+
done

tools/r_list_versions.R

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ip <- as.data.frame(installed.packages()[,c(1,3:4)])
2+
ip <- ip[is.na(ip$Priority),1:2,drop=FALSE]
3+
write.table(ip, quote=FALSE, sep="==", row.names=FALSE, col.names=FALSE)

0 commit comments

Comments
 (0)