I rolled out Dagger (with Depot) to speed up our CI checks, but the main comment I'm getting from developers is that the actual errors are hard to track down.
For some context on how we have things set up:
- we have a single github action that calls
dagger call ci - that
cifunction in dagger does anawait Promise.allwith ~17 other dagger functions to perform the various checks, using.exitCode() - we take heavy advantage of the cache, to avoid re-running checks if they previously passed with the same input files
When something fails, the last few lines of output are something like:
Full trace at https://dagger.cloud/redacted
Error: input: foobar.ci process "tsx --no-deprecation --tsconfig /src/dagger/tsconfig.json /src/dagger/src/__dagger.entrypoint.ts" did not complete successfully: exit code: 1
Stderr:
Error: process "mix ash.codegen --check" did not complete successfully: exit code: 1
The Error: input: bit has been confusing devs, but the last line usually tells you the actual command that failed. Finding why it failed is a bit trickier, though. You need to scroll up, sometimes quite a bit, and it's generally interleaved with other logs, so it's hard to tell if it's right or just output from the other jobs cancelling. Dagger Cloud makes it somewhat easier, but it's still a bit tricky since there's a lot going on.
So I guess my questions are:
- Is there a better way to have things set up? We're using a single github action job mostly to make sure we're taking full advantage of the cache + doing as much as we can in parallel. Makes for less boilerplate on the github actions side of things too.
- Are there any configs or flags I'm missing that could get that failed check's output printed again at the end of the run?
- Or any workarounds in the dagger code that could do similar?