From f1b942e0afaa6f4fbd1703c09a744a024bcd4444 Mon Sep 17 00:00:00 2001 From: James Munnelly Date: Thu, 26 Sep 2019 14:06:58 +0100 Subject: [PATCH] Improve update-reference-docs UX Signed-off-by: James Munnelly --- hack/BUILD.bazel | 15 ++++++-- hack/update-reference-docs.sh | 36 +++++++++++++----- hack/verify-reference-docs.sh | 70 ++++++++++++++++++----------------- 3 files changed, 74 insertions(+), 47 deletions(-) diff --git a/hack/BUILD.bazel b/hack/BUILD.bazel index 21012d64b..be0257c55 100644 --- a/hack/BUILD.bazel +++ b/hack/BUILD.bazel @@ -212,18 +212,25 @@ sh_test( sh_binary( name = "update-reference-docs", srcs = ["update-reference-docs.sh"], + args = [ + "$(location @//docs/generated/reference/generate)", + ], data = [ - "//docs/generated/reference/generate", + "@//docs/generated/reference/generate", ], ) sh_test( name = "verify-reference-docs", srcs = ["verify-reference-docs.sh"], + args = [ + "$(location :update-reference-docs)", + "$(location @//docs/generated/reference/generate)", + ], data = [ - "//docs/generated/reference:output", - "//docs/generated/reference/generate", - "//hack:update-reference-docs.sh", + ":update-reference-docs", + "@//docs/generated/reference:output", + "@//docs/generated/reference/generate", ], ) diff --git a/hack/update-reference-docs.sh b/hack/update-reference-docs.sh index 4bb3d49c6..02176b5ce 100755 --- a/hack/update-reference-docs.sh +++ b/hack/update-reference-docs.sh @@ -17,18 +17,34 @@ set -o errexit set -o nounset set -o pipefail -# This script should be run via `bazel run //hack:update-reference-docs` -REPO_ROOT=${BUILD_WORKSPACE_DIRECTORY:-"$(cd "$(dirname "$0")" && pwd -P)"/..} -SCRIPT_RUNFILES="${runfiles:-$(pwd)}" -cd "${REPO_ROOT}" +if [[ -n "${BUILD_WORKSPACE_DIRECTORY:-}" ]]; then # Running inside bazel + echo "Regenerate API reference documentation..." >&2 +elif ! command -v bazel &>/dev/null; then + echo "Install bazel at https://bazel.build" >&2 + exit 1 +else + ( + set -o xtrace + bazel run @com_github_jetstack_cert_manager//hack:update-reference-docs + ) + exit 0 +fi +generated_tarball=$(realpath "$1") + +cd "$BUILD_WORKSPACE_DIRECTORY" +output_path="docs/generated/reference/output/reference/api-docs" # The final directory path to store the generated output data -OUTPUT_DIR="$(cd "${REPO_ROOT}/docs/generated/reference/output/reference/api-docs" 2> /dev/null && pwd -P)" +output_dir="$BUILD_WORKSPACE_DIRECTORY/$output_path" -TMP_OUTPUT="$(mktemp -d)" +# create a temporary directory to extract the generated reference docs tarball to +tmp_output="$(mktemp -d)" +# extract the generated docs tarball +tar -C "${tmp_output}" -xf "$generated_tarball" -tar -C "${TMP_OUTPUT}" -xf "${SCRIPT_RUNFILES}/docs/generated/reference/generate/generated.tar.gz" +# clean up the output directory +rm -Rf "${output_dir}" -rm -Rf "${OUTPUT_DIR}" -mkdir -p "${OUTPUT_DIR}" -mv "${TMP_OUTPUT}"/* "${OUTPUT_DIR}" +# recreate the output directory and move extracted content to it +mkdir -p "${output_dir}" +mv "${tmp_output}"/* "${output_dir}" diff --git a/hack/verify-reference-docs.sh b/hack/verify-reference-docs.sh index 18ce191da..10e9a336a 100755 --- a/hack/verify-reference-docs.sh +++ b/hack/verify-reference-docs.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash - # Copyright 2019 The Jetstack cert-manager contributors. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,41 +13,46 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -o errexit set -o nounset +set -o errexit set -o pipefail -RULE_NAME="reference-docs" - -SCRIPT_ROOT=$(dirname "${BASH_SOURCE}")/.. - -_tmp="$(mktemp -d)" -DIFFROOT="${SCRIPT_ROOT}/" - -cleanup() { - rm -rf "${_tmp}" -} -trap "cleanup" EXIT SIGINT - -# Create a fake GOPATH -export GOPATH="${_tmp}" -TMP_DIFFROOT="${GOPATH}/src/github.com/jetstack/cert-manager" - -mkdir -p "${TMP_DIFFROOT}" -rsync -avvL "${DIFFROOT}"/ "${TMP_DIFFROOT}" >/dev/null - -export runfiles="$(pwd)" -cd "${TMP_DIFFROOT}" -export BUILD_WORKSPACE_DIRECTORY="$(pwd)" -"hack/update-${RULE_NAME}.sh" - -echo "diffing ${DIFFROOT} against freshly generated ${RULE_NAME}" -ret=0 -diff --exclude=__main__ -Naupr "${DIFFROOT}/docs/generated/reference/output" "${TMP_DIFFROOT}/docs/generated/reference/output" || ret=$? -if [[ $ret -eq 0 ]] -then - echo "${DIFFROOT} up to date." +if [[ -n "${TEST_WORKSPACE:-}" ]]; then # Running inside bazel + echo "Checking generated API reference documentation for changes..." >&2 +elif ! command -v bazel &>/dev/null; then + echo "Install bazel at https://bazel.build" >&2 + exit 1 else - echo "${DIFFROOT} is out of date. Please run 'bazel run //hack:update-${RULE_NAME}'" + ( + set -o xtrace + bazel test --test_output=streamed //hack:verify-reference-docs + ) + exit 0 +fi + +compare_to=$(realpath "docs/generated/reference/output") + +tmpfiles=$TEST_TMPDIR/files + +( + mkdir -p "$tmpfiles" + rm -f bazel-* + cp -aL "." "$tmpfiles" + export BUILD_WORKSPACE_DIRECTORY=$tmpfiles + "$@" +) + +# Avoid diff -N so we handle empty files correctly +diff=$(diff -upr \ + -x ".git" \ + -x "bazel-*" \ + -x "_output" \ + "." "$tmpfiles" 2>/dev/null || true) + +if [[ -n "${diff}" ]]; then + echo "${diff}" >&2 + echo >&2 + echo "ERROR: generated API reference documentation changed. Update with ./hack/update-reference-docs.sh" >&2 exit 1 fi +echo "SUCCESS: generated API reference documentation up-to-date"