git-commit-vandalism/t/helper
Johannes Schindelin b819f1d2ce ci: parallelize testing on Windows
The fact that Git's test suite is implemented in Unix shell script that
is as portable as we can muster, combined with the fact that Unix shell
scripting is foreign to Windows (and therefore has to be emulated),
results in pretty abysmal speed of the test suite on that platform, for
pretty much no other reason than that language choice.

For comparison: while the Linux build & test is typically done within
about 8 minutes, the Windows build & test typically lasts about 80
minutes in Azure Pipelines.

To help with that, let's use the Azure Pipeline feature where you can
parallelize jobs, make jobs depend on each other, and pass artifacts
between them.

The tests are distributed using the following heuristic: listing all
test scripts ordered by size in descending order (as a cheap way to
estimate the overall run time), every Nth script is run (where N is the
total number of parallel jobs), starting at the index corresponding to
the parallel job. This slicing is performed by a new function that is
added to the `test-tool`.

To optimize the overall runtime of the entire Pipeline, we need to move
the Windows jobs to the beginning (otherwise there would be a very
decent chance for the Pipeline to be run only the Windows build, while
all the parallel Windows test jobs wait for this single one).

We use Azure Pipelines Artifacts for both the minimal Git for Windows
SDK as well as the built executables, as deduplication and caching close
to the agents makes that really fast. For comparison: while downloading
and unpacking the minimal Git for Windows SDK via PowerShell takes only
one minute (down from anywhere between 2.5 to 7 when using a shallow
clone), uploading it as Pipeline Artifact takes less than 30s and
downloading and unpacking less than 20s (sometimes even as little as
only twelve seconds).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-01-29 09:26:47 -08:00
..
.gitignore
test-chmtime.c Merge branch 'ps/test-chmtime-get' 2018-04-25 13:29:00 +09:00
test-config.c
test-ctype.c
test-date.c test-date: add a subcommand to measure times in shell scripts 2019-01-28 10:34:28 -08:00
test-delta.c test-delta: read input into a heap buffer 2018-08-30 10:30:21 -07:00
test-drop-caches.c handle lower case drive letters on Windows 2018-07-12 12:11:05 -07:00
test-dump-cache-tree.c convert "oidcmp() != 0" to "!oideq()" 2018-08-29 11:32:49 -07:00
test-dump-fsmonitor.c t/helper: merge test-dump-fsmonitor into test-tool 2018-09-11 10:54:19 -07:00
test-dump-split-index.c Update struct index_state to use struct object_id 2018-05-02 13:59:50 +09:00
test-dump-untracked-cache.c t/helper: merge test-dump-untracked-cache into test-tool 2018-09-11 10:54:19 -07:00
test-example-decorate.c Replace all die("BUG: ...") calls by BUG() ones 2018-05-06 19:06:13 +09:00
test-fake-ssh.c
test-genrandom.c
test-hashmap.c
test-index-version.c
test-json-writer.c json_writer: new routines to create JSON data 2018-07-16 13:55:39 -07:00
test-lazy-init-name-hash.c
test-line-buffer.c
test-match-trees.c t/helper: merge (unused) test-match-trees into test-tool 2018-03-27 08:45:47 -07:00
test-mergesort.c t/helper: merge (unused) test-mergesort into test-tool 2018-03-27 08:45:47 -07:00
test-mktemp.c t/helper: merge test-mktemp into test-tool 2018-03-27 08:45:47 -07:00
test-online-cpus.c t/helper: merge test-online-cpus into test-tool 2018-03-27 08:45:47 -07:00
test-parse-options.c assert NOARG/NONEG behavior of parse-options callbacks 2018-11-06 12:56:29 +09:00
test-path-utils.c ci: parallelize testing on Windows 2019-01-29 09:26:47 -08:00
test-pkt-line.c t/helper: merge test-pkt-line into test-tool 2018-09-11 10:54:19 -07:00
test-prio-queue.c prio-queue: add 'peek' operation 2018-11-02 12:14:21 +09:00
test-reach.c test-reach: test get_reachable_subset 2018-11-03 00:12:06 +09:00
test-read-cache.c t/helper: merge test-read-cache into test-tool 2018-03-27 08:45:47 -07:00
test-read-midx.c multi-pack-index: store local property 2018-08-20 15:31:39 -07:00
test-ref-store.c refs: add repository argument to get_main_ref_store 2018-04-12 11:38:56 +09:00
test-regex.c t/helper: merge test-regex into test-tool 2018-03-27 08:45:47 -07:00
test-repository.c test-repository: properly init repo 2018-08-21 10:22:50 -07:00
test-revision-walking.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
test-run-command.c t/helper: merge test-run-command into test-tool 2018-03-27 08:45:47 -07:00
test-scrap-cache-tree.c Merge branch 'ma/lockfile-cleanup' 2018-05-30 14:04:05 +09:00
test-sha1-array.c t/helper: merge test-sha1-array into test-tool 2018-03-27 08:45:47 -07:00
test-sha1.c
test-sha1.sh
test-sigchain.c style: the opening '{' of a function is in a separate line 2018-12-10 15:41:09 +09:00
test-strcmp-offset.c t/helper: merge test-strcmp-offset into test-tool 2018-03-27 08:45:47 -07:00
test-string-list.c t/helper: merge test-string-list into test-tool 2018-03-27 08:45:47 -07:00
test-submodule-config.c Merge branch 'sb/submodule-move-nested' 2018-05-08 15:59:17 +09:00
test-submodule-nested-repo-config.c t/helper: add test-submodule-nested-repo-config 2018-10-31 15:01:30 +09:00
test-subprocess.c t/helper: merge test-subprocess into test-tool 2018-03-27 08:45:47 -07:00
test-svn-fe.c
test-tool.c tests: optionally write results as JUnit-style .xml 2019-01-29 09:26:46 -08:00
test-tool.h tests: optionally write results as JUnit-style .xml 2019-01-29 09:26:46 -08:00
test-urlmatch-normalization.c t/helper: merge test-urlmatch-normalization into test-tool 2018-03-27 08:45:47 -07:00
test-wildmatch.c t/helper: merge test-wildmatch into test-tool 2018-03-27 08:45:47 -07:00
test-windows-named-pipe.c t0051: test GIT_TRACE to a windows named pipe 2018-09-11 13:54:25 -07:00
test-write-cache.c Merge branch 'ma/lockfile-cleanup' 2018-05-30 14:04:05 +09:00
test-xml-encode.c tests: optionally write results as JUnit-style .xml 2019-01-29 09:26:46 -08:00