xref: /aosp_15_r20/external/skia/serve-bazel-test-undeclared-outputs.sh (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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