From 3a72823bfe643d40d3a9000bba01b587a48f0350 Mon Sep 17 00:00:00 2001 From: Hugh Saunders Date: Fri, 13 Mar 2020 09:31:39 +0000 Subject: [PATCH] Add bl_validate_changelog This function is for validating a changelog against keepachangelog.com format. Related: conjurinc/ops#568 --- CHANGELOG.md | 8 ++++++ README.md | 3 +- git/lib | 2 +- run-tests | 5 +--- test-utils/lib | 38 ++++++++++++++++++++++++++ tests-for-this-repo/test-utils.bats | 29 ++++++++++++++++++++ tests-for-this-repo/validate-changelog | 5 ++++ 7 files changed, 84 insertions(+), 6 deletions(-) create mode 100755 tests-for-this-repo/validate-changelog diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f3a025..6f763a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.0.3] - 2020-03-13 +### Added +- bl_validate_changelog: Validate a changelog against keepachangelog.com format. + +### Changed +- bl_in_git_repo now fails (return 1) rather than exiting 1 +- Github issues can now be created with a label + ## [2.0.2] - 2020-03-10 ### Added - Retrieve latest version for gem from rubygems.org diff --git a/README.md b/README.md index b11b190..7c5c2bb 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ files within it's directory. - Ruby + Ruby Helpers related to ruby infrastructure
    @@ -213,6 +213,7 @@ files within it's directory.
  1. bl_shellcheck_script: Execute shellcheck against a script, uses docker.
  2. bl_find_scripts: Find git tracked files with extension.
  3. bl_tap2junit: Convert a subset of TAP to JUnit XML. Retains logs for errors.
  4. +
  5. bl_validate_changelog: Check CHANGELOG.md (or a specified file) complies with keepachangelog.com format.
diff --git a/git/lib b/git/lib index e382cec..1c85ee9 100644 --- a/git/lib +++ b/git/lib @@ -9,7 +9,7 @@ function bl_git_available(){ function bl_in_git_repo(){ bl_git_available - git status >/dev/null || bl_die "$(pwd) is not within a git repo." + git status >/dev/null || bl_fail "$(pwd) is not within a git repo." } function bl_github_owner_repo(){ diff --git a/run-tests b/run-tests index 332de16..a68ca0e 100755 --- a/run-tests +++ b/run-tests @@ -6,10 +6,7 @@ . "$(dirname ${BASH_SOURCE[0]})/init" bl_info "Checking the changelog complies with keepachangelog.com format" -docker run \ - --rm \ - -v "${PWD}/CHANGELOG.md:/CHANGELOG.md" \ - cyberark/parse-a-changelog +"${BASH_LIB_DIR}/tests-for-this-repo/validate-changelog" bl_info "Running BATS Tests" "${BASH_LIB_DIR}/tests-for-this-repo/run-bats-tests" diff --git a/test-utils/lib b/test-utils/lib index 1079374..e995dcb 100644 --- a/test-utils/lib +++ b/test-utils/lib @@ -48,3 +48,41 @@ function bl_tap2junit(){ # filters stdin to stdout docker run --rm -i tap-junit -s "${suite}" } + +# Checks a Changelog file against keepachangelog.com format. +function bl_validate_changelog(){ + local CHANGELOG="" + + if [[ -z "${1:-}" ]]; then + # Changelog file not specified + + # Look in the current directory + if [[ -r CHANGELOG.md ]]; then + CHANGELOG="CHANGELOG.md" + fi + + # Look in the repo root + if [[ -z "${CHANGELOG}" ]] && bl_in_git_repo; then + guess="$(bl_repo_root)/CHANGELOG.md" + [[ -r "${guess}" ]] && CHANGELOG="${guess}" + fi + + if [[ -z "${CHANGELOG}" ]]; then + bl_fail "CHANGELOG.md not found in current directory or root of git "\ + "repo, please specify the path to the changelog. " \ + "Usage: bl_validate_changelog /path/to/CHANGELOG.md" + fi + else + # Changelog specified as parameter, use that. + CHANGELOG="${1}" + [[ -r "${CHANGELOG}" ]] || bl_fail "Can't read changelog file: ${CHANGELOG}" + fi + + # Docker volume paths need to be absolute + CHANGELOG="$(bl_abs_path "${CHANGELOG}")" + + docker run \ + --rm \ + --volume "${CHANGELOG}:/CHANGELOG.md" \ + cyberark/parse-a-changelog +} diff --git a/tests-for-this-repo/test-utils.bats b/tests-for-this-repo/test-utils.bats index f0dcd3d..fdb4fde 100644 --- a/tests-for-this-repo/test-utils.bats +++ b/tests-for-this-repo/test-utils.bats @@ -76,3 +76,32 @@ bl_docker_safe_tmp(){ assert_equal "${stdout}" "$(cat ${fdir}/tap2junit.out)" assert_equal "${rc}" "0" } + +@test "bl_validate_changelog validates changelog specified as paremeter" { + run bl_validate_changelog "${BASH_LIB_DIR}"/CHANGELOG.md + assert_success +} + +@test "bl_validate_changelog finds changelog in current directory" { + pushd "${BASH_LIB_DIR}" + run bl_validate_changelog + popd + assert_success +} + +@test "bl_validate_changelog finds changelog in git root" { + pushd "${BASH_LIB_DIR}/tests-for-this-repo" + run bl_validate_changelog + popd + assert_success +} + +@test "bl_validate_changelog fails with invalid changelog path" { + run bl_validate_changelog notavalidchangelog.md + assert_failure +} + +@test "bl_validate_changelog fails with invalid changelog" { + run bl_validate_changelog README.md + assert_failure +} diff --git a/tests-for-this-repo/validate-changelog b/tests-for-this-repo/validate-changelog new file mode 100755 index 0000000..6e5d97b --- /dev/null +++ b/tests-for-this-repo/validate-changelog @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +. "$(dirname "${BASH_SOURCE[0]}")/../init" + +bl_validate_changelog