diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2021-01-28 22:51:12 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-29 07:51:12 +0100 |
commit | 478d15f7f4bb48a8442e54d8ab08aaade39e5270 (patch) | |
tree | 273d965edc5b69cf46c0c8b25adadd930e689417 /testament | |
parent | b0f38a63c4916be139f1a289264a5df68bcb4c07 (diff) | |
download | Nim-478d15f7f4bb48a8442e54d8ab08aaade39e5270.tar.gz |
improve code in categories.nim; add std/private/gitutils; fix flakyness in nim CI (cloneDependency in deps.nim) (#16856)
* improve code in categories.nim; gitutils; fix flakyness in deps.nim * cleanups
Diffstat (limited to 'testament')
-rw-r--r-- | testament/categories.nim | 62 |
1 files changed, 20 insertions, 42 deletions
diff --git a/testament/categories.nim b/testament/categories.nim index f89207642..472c7f263 100644 --- a/testament/categories.nim +++ b/testament/categories.nim @@ -13,6 +13,7 @@ # included from testament.nim import important_packages +import std/strformat const specialCategories = [ @@ -439,16 +440,7 @@ proc makeSupTest(test, options: string, cat: Category): TTest = result.options = options result.startTime = epochTime() -const maxRetries = 3 -template retryCommand(call): untyped = - var res: typeof(call) - var backoff = 1 - for i in 0..<maxRetries: - res = call - if res.exitCode == QuitSuccess or i == maxRetries-1: break - sleep(backoff * 1000) - backoff *= 2 - res +import std/private/gitutils proc testNimblePackages(r: var TResults; cat: Category; packageFilter: string, part: PkgPart) = if nimbleExe == "": @@ -470,41 +462,27 @@ proc testNimblePackages(r: var TResults; cat: Category; packageFilter: string, p var test = makeSupTest(name, "", cat) let buildPath = packagesDir / name - if not dirExists(buildPath): - let (cloneCmd, cloneOutput, cloneStatus) = retryCommand execCmdEx2("git", ["clone", url, buildPath]) - if cloneStatus != QuitSuccess: - r.addResult(test, targetC, "", cloneCmd & "\n" & cloneOutput, reInstallFailed) + template tryCommand(cmd: string, workingDir2 = buildPath, reFailed = reInstallFailed, maxRetries = 1): string = + var outp: string + let ok = retryCall(maxRetry = maxRetries, backoffDuration = 1.0): + var status: int + (outp, status) = execCmdEx(cmd, workingDir = workingDir2) + status == QuitSuccess + if not ok: + addResult(r, test, targetC, "", cmd & "\n" & outp, reFailed) continue + outp + if not dirExists(buildPath): + discard tryCommand("git clone $# $#" % [url.quoteShell, buildPath.quoteShell], workingDir2 = ".", maxRetries = 3) if not useHead: - let (fetchCmd, fetchOutput, fetchStatus) = retryCommand execCmdEx2("git", ["fetch", "--tags"], workingDir = buildPath) - if fetchStatus != QuitSuccess: - r.addResult(test, targetC, "", fetchCmd & "\n" & fetchOutput, reInstallFailed) - continue - - let (describeCmd, describeOutput, describeStatus) = retryCommand execCmdEx2("git", ["describe", "--tags", "--abbrev=0"], workingDir = buildPath) - if describeStatus != QuitSuccess: - r.addResult(test, targetC, "", describeCmd & "\n" & describeOutput, reInstallFailed) - continue - - let (checkoutCmd, checkoutOutput, checkoutStatus) = retryCommand execCmdEx2("git", ["checkout", describeOutput.strip], workingDir = buildPath) - if checkoutStatus != QuitSuccess: - r.addResult(test, targetC, "", checkoutCmd & "\n" & checkoutOutput, reInstallFailed) - continue - - let (installDepsCmd, installDepsOutput, installDepsStatus) = retryCommand execCmdEx2("nimble", ["install", "--depsOnly", "-y"], workingDir = buildPath) - if installDepsStatus != QuitSuccess: - r.addResult(test, targetC, "", "installing dependencies failed:\n$ " & installDepsCmd & "\n" & installDepsOutput, reInstallFailed) - continue - - let cmdArgs = parseCmdLine(cmd) - - let (buildCmd, buildOutput, status) = execCmdEx2(cmdArgs[0], cmdArgs[1..^1], workingDir = buildPath) - if status != QuitSuccess: - r.addResult(test, targetC, "", "package test failed\n$ " & buildCmd & "\n" & buildOutput, reBuildFailed) - else: - inc r.passed - r.addResult(test, targetC, "", "", reSuccess) + discard tryCommand("git fetch --tags", maxRetries = 3) + let describeOutput = tryCommand("git describe --tags --abbrev=0") + discard tryCommand("git checkout $#" % [describeOutput.strip.quoteShell]) + discard tryCommand("nimble install --depsOnly -y", maxRetries = 3) + discard tryCommand(cmd, reFailed = reBuildFailed) + inc r.passed + r.addResult(test, targetC, "", "", reSuccess) errors = r.total - r.passed if errors == 0: |