diff --git a/Makefile b/Makefile index 1c4952821..777732345 100644 --- a/Makefile +++ b/Makefile @@ -87,11 +87,11 @@ protoc: .PHONY: docs docs: build - @mkdir -p docs/helm docs/man/man1 - bin/helm docs --dir ./docs/helm - bin/helm docs --dir ./docs/man/man1 --type man - bin/helm docs --dir ./scripts --type bash - scripts/docs-clean-home.sh + @scripts/update-docs.sh + +.PHONY: verify-docs +verify-docs: build + @scripts/verify-docs.sh .PHONY: clean clean: diff --git a/circle.yml b/circle.yml index a8fc8a1a3..46b1bee3d 100644 --- a/circle.yml +++ b/circle.yml @@ -3,7 +3,7 @@ machine: - curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s -- 1.10.0 environment: - GOVERSION: "1.7.4" + GOVERSION: "1.7.5" GOPATH: "${HOME}/.go_workspace" WORKDIR: "${GOPATH}/src/k8s.io/helm" PROJECT_NAME: "kubernetes-helm" diff --git a/scripts/ci.sh b/scripts/ci.sh index 4ac87c958..e0faf9c18 100755 --- a/scripts/ci.sh +++ b/scripts/ci.sh @@ -27,7 +27,7 @@ run_unit_test() { echo "Running unit tests with coverage'" ./scripts/coverage.sh --coveralls else - echo "Running unit tests'" + echo "Running 'unit tests'" make test-unit fi } @@ -37,6 +37,11 @@ run_style_check() { make test-style } +run_docs_check() { + echo "Running 'make verify-docs'" + make verify-docs +} + # Build to ensure packages are compiled echo "Running 'make build'" make build @@ -44,4 +49,5 @@ make build case "${CIRCLE_NODE_INDEX-0}" in 0) run_unit_test ;; 1) run_style_check ;; + 2) run_docs_check ;; esac diff --git a/scripts/update-docs.sh b/scripts/update-docs.sh new file mode 100755 index 000000000..404ba8090 --- /dev/null +++ b/scripts/update-docs.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +# Copyright 2017 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -euo pipefail + +source scripts/util.sh + +if LANG=C sed --help 2>&1 | grep -q GNU; then + SED="sed" +elif which gsed &>/dev/null; then + SED="gsed" +else + echo "Failed to find GNU sed as sed or gsed. If you are on Mac: brew install gnu-sed." >&2 + exit 1 +fi + +kube::util::ensure-temp-dir + +mkdir -p ${KUBE_TEMP}/docs/helm ${KUBE_TEMP}/docs/man/man1 ${KUBE_TEMP}/scripts +bin/helm docs --dir ${KUBE_TEMP}/docs/helm +bin/helm docs --dir ${KUBE_TEMP}/docs/man/man1 --type man +bin/helm docs --dir ${KUBE_TEMP}/scripts --type bash + + +FILES=$(find ${KUBE_TEMP} -type f) + +${SED} -i -e "s:${HOME}:~:" ${FILES} + +for i in ${FILES}; do + ret=0 + truepath=$(echo ${i} | ${SED} "s:${KUBE_TEMP}/::") + diff -NauprB -I 'Auto generated' "${i}" "${truepath}" > /dev/null || ret=$? + if [[ $ret -ne 0 ]]; then + echo "${truepath} changed. Updating.." + cp "${i}" "${truepath}" + fi +done diff --git a/scripts/util.sh b/scripts/util.sh new file mode 100644 index 000000000..09caaf972 --- /dev/null +++ b/scripts/util.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Copyright 2016 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -euo pipefail + +# Example: kube::util::trap_add 'echo "in trap DEBUG"' DEBUG +# See: http://stackoverflow.com/questions/3338030/multiple-bash-traps-for-the-same-signal +kube::util::trap_add() { + local trap_add_cmd + trap_add_cmd=$1 + shift + + for trap_add_name in "$@"; do + local existing_cmd + local new_cmd + + # Grab the currently defined trap commands for this trap + existing_cmd=`trap -p "${trap_add_name}" | awk -F"'" '{print $2}'` + + if [[ -z "${existing_cmd}" ]]; then + new_cmd="${trap_add_cmd}" + else + new_cmd="${existing_cmd};${trap_add_cmd}" + fi + + # Assign the test + trap "${new_cmd}" "${trap_add_name}" + done +} + +# Opposite of kube::util::ensure-temp-dir() +kube::util::cleanup-temp-dir() { + rm -rf "${KUBE_TEMP}" +} + +# Create a temp dir that'll be deleted at the end of this bash session. +# +# Vars set: +# KUBE_TEMP +kube::util::ensure-temp-dir() { + if [[ -z ${KUBE_TEMP-} ]]; then + KUBE_TEMP=$(mktemp -d 2>/dev/null || mktemp -d -t kubernetes.XXXXXX) + kube::util::trap_add kube::util::cleanup-temp-dir EXIT + fi +} diff --git a/scripts/docs-clean-home.sh b/scripts/verify-docs.sh similarity index 56% rename from scripts/docs-clean-home.sh rename to scripts/verify-docs.sh index 50ed2d2ce..7ea266221 100755 --- a/scripts/docs-clean-home.sh +++ b/scripts/verify-docs.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright 2016 The Kubernetes Authors All rights reserved. +# Copyright 2017 The Kubernetes Authors All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ set -euo pipefail +source scripts/util.sh + if LANG=C sed --help 2>&1 | grep -q GNU; then SED="sed" elif which gsed &>/dev/null; then @@ -25,6 +27,24 @@ else exit 1 fi -FILES=$(find ./docs -type f) +kube::util::ensure-temp-dir + +mkdir -p ${KUBE_TEMP}/docs/helm ${KUBE_TEMP}/docs/man/man1 ${KUBE_TEMP}/scripts +bin/helm docs --dir ${KUBE_TEMP}/docs/helm +bin/helm docs --dir ${KUBE_TEMP}/docs/man/man1 --type man +bin/helm docs --dir ${KUBE_TEMP}/scripts --type bash + + +FILES=$(find ${KUBE_TEMP} -type f) ${SED} -i -e "s:${HOME}:~:" ${FILES} +ret=0 +for i in ${FILES}; do + diff -NauprB -I 'Auto generated' ${i} $(echo ${i} | ${SED} "s:${KUBE_TEMP}/::") || ret=$? +done +if [[ $ret -eq 0 ]]; then + echo "helm docs up to date." +else + echo "helm docs are out of date. Please run \"make docs\"" + exit 1 +fi