1*c8dee2aaSAndroid Build Coastguard Worker#!/bin/bash 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2023 Google LLC 4*c8dee2aaSAndroid Build Coastguard Worker# 5*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 6*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker# Helper script to serve Bazel undeclared test outputs over HTTP. 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Workerif [ $# -ne 1 ] 11*c8dee2aaSAndroid Build Coastguard Workerthen 12*c8dee2aaSAndroid Build Coastguard Worker echo "Usage: $0 <path to outputs.zip>" 13*c8dee2aaSAndroid Build Coastguard Worker echo 14*c8dee2aaSAndroid Build Coastguard Worker echo "This is a helper script to serve Bazel undeclared test outputs over HTTP. See the" 15*c8dee2aaSAndroid Build Coastguard Worker echo "TEST_UNDECLARED_OUTPUTS_DIR environment variable as described in" 16*c8dee2aaSAndroid Build Coastguard Worker echo "https://bazel.build/reference/test-encyclopedia#initial-conditions." 17*c8dee2aaSAndroid Build Coastguard Worker echo 18*c8dee2aaSAndroid Build Coastguard Worker echo "A typical use case is to view the PNG files produced by a GM executed with \"bazel test\"." 19*c8dee2aaSAndroid Build Coastguard Worker echo "However, this script works with any Bazel target that produces undeclared outputs." 20*c8dee2aaSAndroid Build Coastguard Worker echo 21*c8dee2aaSAndroid Build Coastguard Worker echo "Suppose //path/to:some_test is a Bazel target that produces undeclared test outputs. Its" 22*c8dee2aaSAndroid Build Coastguard Worker echo "undeclared test outputs are typically found inside a ZIP file named" 23*c8dee2aaSAndroid Build Coastguard Worker echo "bazel-testlogs/path/to/some_test/test.outputs/outputs.zip (relative to the repository's" 24*c8dee2aaSAndroid Build Coastguard Worker echo "root directory)." 25*c8dee2aaSAndroid Build Coastguard Worker echo 26*c8dee2aaSAndroid Build Coastguard Worker echo "Example session:" 27*c8dee2aaSAndroid Build Coastguard Worker echo 28*c8dee2aaSAndroid Build Coastguard Worker echo " $ bazel test //path/to:some_test" 29*c8dee2aaSAndroid Build Coastguard Worker echo " $ $0 bazel-testlogs/path/to/some_test/test.outputs/outputs.zip" 30*c8dee2aaSAndroid Build Coastguard Worker echo " Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ..." 31*c8dee2aaSAndroid Build Coastguard Worker echo 32*c8dee2aaSAndroid Build Coastguard Worker exit 1 33*c8dee2aaSAndroid Build Coastguard Workerfi 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker# Create a temporary directory where we will extract the ZIP file, and delete it on exit. 36*c8dee2aaSAndroid Build Coastguard WorkerTMP_DIR="$(mktemp -d)" 37*c8dee2aaSAndroid Build Coastguard Workertrap "rm -rf $TMP_DIR" EXIT 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Workerset -x -e 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Workerunzip -d $TMP_DIR $1 42*c8dee2aaSAndroid Build Coastguard Workercd $TMP_DIR && python3 -m http.server 43