1 ! Copyright (C) 2017 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays assocs bootstrap.image calendar cli.git
4 combinators concurrency.combinators environment formatting
5 http.client io io.directories io.launcher io.pathnames kernel
6 math.parser memory modern.paths namespaces parser.notes
7 prettyprint sequences sequences.extras sets splitting system
8 system-info threads tools.test tools.test.private vocabs
9 vocabs.hierarchy vocabs.hierarchy.private vocabs.loader
10 vocabs.metadata zealot ;
13 : download-boot-checksums ( path branch -- )
14 '[ _ "http://downloads.factorcode.org/images/%s/checksums.txt" sprintf download ] with-directory ;
16 : download-boot-image ( path branch image-name -- )
17 '[ _ _ "http://downloads.factorcode.org/images/%s/%s" sprintf download ] with-directory ;
19 : download-my-boot-image ( path branch -- )
20 my-boot-image-name download-boot-image ;
22 HOOK: compile-factor-command os ( -- array )
23 M: unix compile-factor-command ( -- array )
24 { "make" "-j" } cpus number>string suffix ;
25 M: windows compile-factor-command ( -- array )
26 { "nmake" "/f" "NMakefile" "x86-64" } ;
28 HOOK: factor-path os ( -- path )
29 M: unix factor-path "./factor" ;
30 M: windows factor-path "./factor.com" ;
32 : compile-factor ( path -- )
35 compile-factor-command >>command
36 "./compile-log" >>stdout
42 : bootstrap-factor ( path -- )
45 factor-path "-i=" my-boot-image-name append "-no-user-init" 3array >>command
47 "./bootstrap-log" >>stdout
54 ! Meant to run in the child process
55 : with-child-options ( quot -- )
56 f parser-quiet? set-global
57 f restartable-tests? set-global
58 f long-unit-tests-enabled? set-global
61 : zealot-load-and-save ( vocabs path -- )
62 dup "load-and-save to " prepend print flush yield
64 [ load ] each _ save-image
65 ] with-child-options ;
67 : zealot-load-basis ( -- ) basis-vocabs "factor.image.basis" zealot-load-and-save ;
68 : zealot-load-extra ( -- ) extra-vocabs "factor.image.extra" zealot-load-and-save ;
70 ! like ``"" load`` -- only platform-friendly vocabs
71 : zealot-vocabs-from-root ( root -- seq ) "" vocabs-to-load [ vocab-name ] map ;
72 : zealot-all-vocabs ( -- seq ) vocab-roots get [ zealot-vocabs-from-root ] map-concat ;
73 : zealot-core-vocabs ( -- seq ) "resource:core" zealot-vocabs-from-root ;
74 : zealot-basis-vocabs ( -- seq ) "resource:basis" zealot-vocabs-from-root ;
75 : zealot-extra-vocabs ( -- seq ) "resource:extra" zealot-vocabs-from-root ;
77 : zealot-load-all ( -- ) zealot-all-vocabs "factor.image.all" zealot-load-and-save ;
79 : zealot-load-command ( command log-path -- process )
88 : zealot-load-basis-command ( -- process )
89 factor-path "-e=USE: zealot.factor zealot-load-basis" 2array
90 "./load-basis-log" zealot-load-command ;
92 : zealot-load-extra-command ( -- process )
93 factor-path "-e=USE: zealot.factor zealot-load-extra" 2array
94 "./load-extra-log" zealot-load-command ;
96 : zealot-load-commands ( path -- )
98 zealot-load-basis-command
99 zealot-load-extra-command 2array
100 [ try-process ] parallel-each
103 : zealot-test-command ( command log-path -- process )
110 +new-group+ >>group ;
112 : zealot-load-and-test ( vocabs -- )
114 _ [ [ load ] each ] [ test-vocabs ] bi
115 ] with-child-options ;
117 : load-and-test-command ( i -- command )
123 "-e=USING: zealot.factor tools.test grouping.extras formatting ; [ %d all-zealot-vocabs 32 n-groups nth zealot-load-and-test ] with-child-options"
125 ] [ "./test-%d-log" sprintf ] bi
133 +new-group+ >>group ;
135 : zealot-test-commands ( path -- )
138 load-and-test-command
139 ] map [ try-process ] parallel-each
142 : zealot-test-commands-old ( path -- )
144 factor-path "-i=factor.image" "-e=USE: zealot.factor USE: tools.test [ zealot-core-vocabs test-vocabs ] with-child-options" 3array
145 "./test-core-log" zealot-test-command
147 factor-path "-i=factor.image.basis" "-e=USE: zealot.factor USE: tools.test [ zealot-basis-vocabs test-vocabs ] with-child-options" 3array
148 "./test-basis-log" zealot-test-command
150 factor-path "-i=factor.image.extra" "-e=USE: zealot.factor USE: tools.test [ zealot-extra-vocabs test-vocabs ] with-child-options" 3array
151 "./test-extra-log" zealot-test-command 3array
153 [ try-process ] parallel-each
156 : build-new-factor ( branch -- )
157 "factor" "factor" zealot-github-ensure drop
159 [ "factor" "factor" zealot-github-clone-paths nip ] dip
160 over <pathname> . flush yield
162 [ drop "factor" "factor" zealot-github-add-build-remote drop ]
163 [ drop [ git-fetch-all* ] with-directory drop ]
164 [ zealot-build-checkout-branch drop ]
165 [ "ZEALOT DOWNLOADING BOOT IMAGE" print flush download-my-boot-image ]
166 [ "ZEALOT DOWNLOADING CHECKSUMS" print flush download-boot-checksums ]
167 [ "ZEALOT COMPILING" print flush drop compile-factor ]
168 [ "ZEALOT BOOTSTRAPPING" print flush drop bootstrap-factor ]
169 [ "ZEALOT LOADING ROOTS" print flush drop zealot-load-commands ]
170 [ "ZEALOT TESTING ROOTS" print flush drop zealot-test-commands ]
173 : factor-clean-branch ( -- str )
174 os cpu [ name>> ] bi@ { { CHAR: . CHAR: - } } substitute
175 "-" glue "origin/clean-" prepend ;
177 : vocab-path>vocab ( path -- vocab )
178 [ parent-directory ] map
179 [ "/" split1 nip ] map
180 [ path-separator split harvest "." join ] map ;
182 : changed-factor-vocabs ( old-rev new-rev -- vocabs )
185 [ ":" split1 nip ] map
187 ] 2dip git-diff-name-only*
188 [ ".factor" tail? ] filter
189 [ swap [ head? ] with any? ] with filter
190 [ parent-directory ] map
191 [ "/" split1 nip ] map
192 [ path-separator split harvest "." join ] map members ;
194 : changed-factor-vocabs-from-master ( -- vocabs )
195 "HEAD" "origin/master" changed-factor-vocabs ;
197 : changed-factor-vocabs-from-clean ( -- vocabs )
198 "HEAD" factor-clean-branch changed-factor-vocabs ;
200 : testing-a-branch? ( -- ? )
201 "CI_BRANCH" os-env "master" or
204 : reject-unloadable-vocabs ( vocabs -- vocabs' )
205 [ don't-load? ] reject ;
207 ! Test changes from a CI_BRANCH against origin/master
208 ! Test master against last clean build, e.g. origin/clean-linux-x86-64
209 : ci-vocabs-to-test ( -- vocabs )
211 changed-factor-vocabs-from-master
213 changed-factor-vocabs-from-clean
214 ] if reject-unloadable-vocabs ;