4
4
5
5
BASE=" $( git merge-base main HEAD) "
6
6
7
- # shellcheck disable=SC2046 # We actually want splitting in jq command output
8
- git diff --quiet HEAD " $BASE " -- $( jq --raw-output " .workspaces[]" package.json)
9
- check_ts=$?
10
- git diff --quiet HEAD " $BASE " -- skiplang/compiler/ skiplang/prelude/ :^skiplang/prelude/ts
11
- skc=$?
12
- git diff --quiet HEAD " $BASE " -- skiplang/prelude/src/skstore/ skiplang/prelude/runtime/
13
- skstore=$?
14
- git diff --quiet HEAD " $BASE " -- skiplang/skjson
15
- skjson=$?
16
- git diff --quiet HEAD " $BASE " -- sql/ skiplang/sqlparser/
17
- skdb=$?
18
- git diff --quiet HEAD " $BASE " -- skipruntime-ts/
19
- skipruntime=$?
20
- git diff --quiet HEAD " $BASE " -- skiplang/prelude/ts/
21
- ts_prelude=$?
22
7
git diff --quiet HEAD " $BASE " -- examples/
23
8
examples=$?
24
9
25
- SKIPLANG_LIBS_CHANGED=()
26
- for lib_tests in skiplang/* /tests; do
27
- lib=$( basename " $( dirname " $lib_tests " ) " )
28
- if [ " $lib " != compiler ] && [ " $lib " != prelude ] && \
29
- ! git diff --quiet HEAD " $BASE " -- " skiplang/$lib " ; then
30
- SKIPLANG_LIBS_CHANGED+=(" $lib " )
31
- fi
10
+ shopt -s globstar
11
+ declare -A SK_CHANGED
12
+ for skargo_toml in ** /Skargo.toml; do
13
+ dir=$( dirname " $skargo_toml " )
14
+ git diff --quiet HEAD " $BASE " -- " $dir " :^" $dir /ts" \
15
+ && SK_CHANGED[" $dir " ]=false || SK_CHANGED[" $dir " ]=true
32
16
done
33
17
18
+ if ${SK_CHANGED[skiplang/prelude]} ; then
19
+ SK_CHANGED[skiplang/compiler]=true
20
+ SK_CHANGED[sql]=true
21
+ fi
22
+ if ${SK_CHANGED[skiplang/sqlparser]} ; then
23
+ SK_CHANGED[sql]=true
24
+ fi
25
+
26
+ check_ts=false
27
+ declare -A TS_CHANGED
28
+ # shellcheck disable=SC2046 # We actually want splitting in jq command output
29
+ for dir in $( jq --raw-output " .workspaces[]" package.json) ; do
30
+ git diff --quiet HEAD " $BASE " -- " $dir " \
31
+ && TS_CHANGED[" $dir " ]=false || TS_CHANGED[" $dir " ]=true
32
+ ${TS_CHANGED["$dir"]} && check_ts=true
33
+ done
34
+
35
+ for dir in " ${! SK_CHANGED[@]} " ; do
36
+ ${SK_CHANGED["$dir"]} && TS_CHANGED[" $dir " ]=true
37
+ done
38
+
39
+ for dir in " ${! TS_CHANGED[@]} " ; do
40
+ changed=${TS_CHANGED["$dir"]}
41
+ while [ " $dir " != " ." ] && [ " $dir " != " /" ]; do
42
+ if ${TS_CHANGED["$dir"]:- false} && ! $changed ; then break ; fi
43
+ TS_CHANGED[" $dir " ]=$changed
44
+ dir=$( dirname " $dir " )
45
+ done
46
+ done
47
+
48
+ if ${TS_CHANGED[skiplang/skjson]} ; then
49
+ TS_CHANGED[sql]=true
50
+ TS_CHANGED[skipruntime-ts]=true
51
+ fi
52
+ if ${TS_CHANGED[skiplang/prelude]} ; then
53
+ TS_CHANGED[sql]=true
54
+ TS_CHANGED[skipruntime-ts]=true
55
+ fi
56
+
34
57
cat .circleci/base.yml
35
58
36
59
echo " workflows:"
@@ -41,7 +64,7 @@ echo "workflows:"
41
64
- fast-checks
42
65
EOF
43
66
44
- if (( check_ts != 0 ))
67
+ if $ check_ts
45
68
then
46
69
cat << EOF
47
70
check-ts:
50
73
EOF
51
74
fi
52
75
53
- if (( skc != 0 ))
54
- then
76
+ for dir in " ${! SK_CHANGED[@]} " ; do
77
+ if ${SK_CHANGED["$dir"]} ; then
78
+ case " $dir " in
79
+ skipruntime-ts/* )
80
+ TS_CHANGED[skipruntime-ts]=true
81
+ ;;
82
+ sql)
83
+ cat << EOF
84
+ skdb:
85
+ jobs:
86
+ - skdb
87
+ EOF
88
+ ;;
89
+ skiplang/compiler)
55
90
cat << EOF
56
91
compiler:
57
92
jobs:
58
93
- compiler
59
94
EOF
60
- fi
61
-
62
- if (( skstore != 0 ))
63
- then
64
- cat << EOF
65
- skstore:
66
- jobs:
67
- - skstore
68
- EOF
69
- fi
70
-
71
- if [ ${# SKIPLANG_LIBS_CHANGED[@]} -gt 0 ]; then
72
- echo " skiplang-libs-tests:"
73
- echo " jobs:"
74
- for lib in " ${SKIPLANG_LIBS_CHANGED[@]} " ; do
75
- echo " - skiplang-lib-tests:"
76
- echo " libname: $lib "
77
- echo " name: $lib "
78
- done
79
- fi
80
-
81
- if (( skdb != 0 || skstore != 0 ))
82
- then
83
- cat << EOF
84
- skdb:
85
- jobs:
86
- - skdb
87
- EOF
88
- fi
95
+ ;;
96
+ skiplang/sqlparser) ;;
97
+ * )
98
+ name=$( basename " $dir " )
99
+ if [ -d " $dir /tests" ]; then
100
+ echo " $name -tests:"
101
+ echo " jobs:"
102
+ echo " - skip-package-tests:"
103
+ else
104
+ echo " $name -build:"
105
+ echo " jobs:"
106
+ echo " - skip-package-build:"
107
+ fi
108
+ echo " dir: $dir "
109
+ echo " name: $name "
110
+ esac
111
+ fi
112
+ done
89
113
90
- if (( skdb != 0 || skstore != 0 || ts_prelude != 0 || skjson != 0 ))
114
+ if ${TS_CHANGED[sql]}
91
115
then
92
116
cat << EOF
93
117
skdb-wasm:
96
120
EOF
97
121
fi
98
122
99
- if (( skstore != 0 || skipruntime != 0 || ts_prelude != 0 || skjson != 0 ))
123
+ if ${TS_CHANGED[ skipruntime-ts]}
100
124
then
101
125
cat << EOF
102
126
skipruntime:
0 commit comments