include test-results & "trash" directory contents in build output
When a build fails, the contents of t/test-results and the trash directories can be quite useful for debugging. This is particularly true when the failures occur only in Koji, where we can't get a shell and poke around. Create a compressed tarball and encode it with base64 to allow it to be output along with the normal build output. Include instruction on how to extract the base64-encoded content from the build log inline. The tar archive is compressed with zstd which provides a good balance of speed and size. The compression level of 17 was chosen after a number of tests against real test failures, as opposed to entirely random selection. ;)
This commit is contained in:
		
							parent
							
								
									13887794b7
								
							
						
					
					
						commit
						0af3adfcb1
					
				
							
								
								
									
										3
									
								
								git.spec
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								git.spec
									
									
									
									
									
								
							| @ -257,6 +257,7 @@ BuildRequires:  subversion-perl | |||||||
| BuildRequires:  tar | BuildRequires:  tar | ||||||
| BuildRequires:  time | BuildRequires:  time | ||||||
| BuildRequires:  zip | BuildRequires:  zip | ||||||
|  | BuildRequires:  zstd | ||||||
| %endif | %endif | ||||||
| # endif with tests | # endif with tests | ||||||
| 
 | 
 | ||||||
| @ -864,7 +865,7 @@ export GIT_TEST_SVN_HTTPD=true | |||||||
| 
 | 
 | ||||||
| # Create tmpdir for test output and update GIT_TEST_OPTS | # Create tmpdir for test output and update GIT_TEST_OPTS | ||||||
| # Also update GIT-BUILD-OPTIONS to keep make from any needless rebuilding | # Also update GIT-BUILD-OPTIONS to keep make from any needless rebuilding | ||||||
| testdir=$(mktemp -d -p /tmp git-t.XXXX) | export testdir=$(mktemp -d -p /tmp git-t.XXXX) | ||||||
| sed -i "s@^GIT_TEST_OPTS = .*@& --root=$testdir@" config.mak | sed -i "s@^GIT_TEST_OPTS = .*@& --root=$testdir@" config.mak | ||||||
| touch -r GIT-BUILD-OPTIONS ts | touch -r GIT-BUILD-OPTIONS ts | ||||||
| sed -i "s@\(GIT_TEST_OPTS='.*\)'@\1 --root=$testdir'@" GIT-BUILD-OPTIONS | sed -i "s@\(GIT_TEST_OPTS='.*\)'@\1 --root=$testdir'@" GIT-BUILD-OPTIONS | ||||||
|  | |||||||
| @ -10,4 +10,17 @@ for exit_file in t/test-results/*.exit; do | |||||||
|     printf '\n%s\n%s\n%s\n' "$sep" "$out_file" "$sep" |     printf '\n%s\n%s\n%s\n' "$sep" "$out_file" "$sep" | ||||||
|     cat "$out_file" |     cat "$out_file" | ||||||
| done | done | ||||||
|  | 
 | ||||||
|  | # tar up test-results & $testdir, then print base64 encoded output | ||||||
|  | # | ||||||
|  | # copy $testdir contents to test-results to avoid absolute paths with tar | ||||||
|  | cp -a $testdir/* t/test-results/ | ||||||
|  | begin='-----BEGIN BASE64 MESSAGE-----' | ||||||
|  | end='-----END BASE64 MESSAGE-----' | ||||||
|  | printf '\n%s\n' 'test-results and trash directory output follows; decode via:' | ||||||
|  | printf '%s\n' "sed -n '/^${begin}$/,/^${end}$/{/^${begin}$/!{/^${end}$/!p}}' build.log | base64 -d >output.tar.zst" | ||||||
|  | printf '%s\n' "$begin" | ||||||
|  | tar -C t -cf - test-results/ | zstdmt -17 | base64 | ||||||
|  | printf '%s\n' "$end" | ||||||
|  | 
 | ||||||
| exit 1 | exit 1 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user