diff --git a/bash/daml-export b/bash/daml-export index 5a91e23..2e9e458 100755 --- a/bash/daml-export +++ b/bash/daml-export @@ -26,7 +26,7 @@ options::add -o e -d "Stop offset(exclusive) in hex" -a -m -e STOP_OFFSET options::add -o P -d "maximum number of compiles to run in parallel" -a -e MAX_PARALLEL options::add -o b -d "Start offset in hex" -a -e START_OFFSET options::add -o s -d "number of offsets to cover in each export" -a -e STEPPING -options::add -o h -d "daml host" -a -e DAML_HOST +options::add -o H -d "daml host" -a -e DAML_HOST options::add -o p -d "daml port" -a -e DAML_PORT options::add -o t -d "daml token" -a -e DAML_TOKEN options::add -o z -d "acs batch size" -a -e ACS_BATCH_SIZE diff --git a/bash/review-prs b/bash/review-prs index 7ba0458..3a6a5fc 100755 --- a/bash/review-prs +++ b/bash/review-prs @@ -46,7 +46,7 @@ options::add -o i -d "organization to scan only if we have a repo cloned. repeat options::add -o g -d "git repositories directory" -a -e GIT_HOME options::add -o w -d "open pr list in the browser" -x OPEN_BROWSER -options::parse "$@" +options::parse_available "$@" shift $((OPTIND - 1)) OPEN_BROWSER=${OPEN_BROWSER:-false} diff --git a/bash/semver b/bash/semver index acc84aa..8ceaae5 100755 --- a/bash/semver +++ b/bash/semver @@ -324,6 +324,10 @@ function command-compare() { } function command-diff() { + if [[ "$#" -ne "2" ]] || [[ -z "$1" ]] || [[ -z "$2" ]]; then + usage-help + fi + validate-version "$1" v1_parts # shellcheck disable=SC2154 local v1_major="${v1_parts[0]}" diff --git a/tests/copy-keys.bats b/tests/copy-keys.bats index ed963e8..d3338cd 100644 --- a/tests/copy-keys.bats +++ b/tests/copy-keys.bats @@ -1,4 +1,5 @@ #!/usr/bin/env bats +bats_require_minimum_version 1.5.0 setup() { load 'helpers.bash' diff --git a/tests/daml-export.bats b/tests/daml-export.bats index 58309b2..d3eb989 100644 --- a/tests/daml-export.bats +++ b/tests/daml-export.bats @@ -52,6 +52,26 @@ EOF [[ "$output" != *"Exporting from offset"* ]] } +@test "daml-export -h prints standard help (SUR-3645)" { + run env DAML_EXPORT_SOURCE_ONLY=true bash "$DAML_EXPORT" -h + [ "$status" -ne 0 ] + [[ "$output" == *"SYNTAX"* ]] + [[ "$output" == *"daml-export [-h] [-v] -d -e "* ]] + [[ "$output" == *"-H "* ]] + [[ "$output" != *"option requires an argument -- h"* ]] +} + +@test "daml-export -H sets DAML_HOST (SUR-3645)" { + tmp=$(mktemp -d) + run bash -c " + source '$DAML_EXPORT' -d '$tmp' -e ffff -H ledger.internal + printf '%s\n' \"\$DAML_HOST\" + " + rm -rf "$tmp" + [ "$status" -eq 0 ] + [ "$output" = "ledger.internal" ] +} + @test "hex_to_dec converts hex strings to decimal (SUR-2838 case 1)" { tmp=$(mktemp -d) run bash -c " diff --git a/tests/package.bats b/tests/package.bats index 041b281..dc2b39e 100644 --- a/tests/package.bats +++ b/tests/package.bats @@ -2,16 +2,24 @@ bats_require_minimum_version 1.5.0 setup() { + MAKE_BIN=$(asdf which make 2>/dev/null || command -v make) load 'helpers.bash' helpers::isolate_home + PACKAGE_REPO=$(mktemp -d) + cp -a "$REPO_ROOT"/. "$PACKAGE_REPO"/ + cd "$PACKAGE_REPO" || exit 1 +} + +teardown() { + rm -rf "$PACKAGE_REPO" } @test "bin package includes standalone executable commands mddoc and semver (SUR-3353)" { - run make clean package + run "$MAKE_BIN" clean package [ "$status" -eq 0 ] - version=$(make --no-print-directory what_version | awk -F= '/^VERSION=/{print $2}') - tarball="$REPO_ROOT/dist/bin-$version.tar.gz" + version=$("$MAKE_BIN" --no-print-directory what_version | awk -F= '/^VERSION=/{print $2}') + tarball="$PACKAGE_REPO/dist/bin-$version.tar.gz" [ -f "$tarball" ] run tar -tzf "$tarball" diff --git a/tests/review-prs.bats b/tests/review-prs.bats index bf01343..6661fe9 100644 --- a/tests/review-prs.bats +++ b/tests/review-prs.bats @@ -11,6 +11,54 @@ setup() { export TARGET } +function write_review_prs_stubs() { + local stub_bin=${1:?} + local log_file=${2:?} + + cat >"$stub_bin/gh" <<'EOF' +#!/usr/bin/env bash +echo "$*" >>"${REVIEW_PRS_STUB_LOG:?}" +if [ "$1" = "search" ] && [ "$2" = "repos" ]; then + owner="" + while [ "$#" -gt 0 ]; do + if [ "$1" = "--owner" ]; then + owner="$2" + shift 2 + continue + fi + shift + done + printf '[{"name":"%s-repo"}]\n' "$owner" + exit 0 +fi +if [ "$1" = "pr" ] && [ "$2" = "list" ] && [ "$3" = "--draft=false" ]; then + printf '[{"reviewDecision":"APPROVED"}]\n' + exit 0 +fi +if [ "$1" = "pr" ] && [ "$2" = "list" ]; then + exit 0 +fi +exit 0 +EOF + chmod +x "$stub_bin/gh" + + cat >"$stub_bin/jq" <<'EOF' +#!/usr/bin/env bash +python3 -c ' +import json, sys +data = json.load(sys.stdin) +expr = sys.argv[-1] +if expr == ".[].name": + for item in data: + print(item["name"]) +elif expr == ".[].reviewDecision": + for item in data: + print(item["reviewDecision"]) +' "$@" +EOF + chmod +x "$stub_bin/jq" +} + @test "review-prs defines a ::jq shim" { run grep -E '^function ::jq\(\)' "$TARGET" [ "$status" -eq 0 ] @@ -40,3 +88,42 @@ setup() { [[ "$output" == *"jq is either not installed or not on the PATH"* ]] [[ "$output" != *"-r: command not found"* ]] } + +@test "review-prs bare invocation scans default organizations (SUR-3646)" { + stub_bin=$(mktemp -d) + log_file=$(mktemp) + mkdir -p "$HOME/git/hyperledger/hyperledger-repo" + write_review_prs_stubs "$stub_bin" "$log_file" + + run env PATH="$stub_bin:$PATH" REVIEW_PRS_STUB_LOG="$log_file" LOGFILE_DISABLE=true \ + bash "$TARGET" + [ "$status" -eq 0 ] + [[ "$(cat "$log_file")" == *"search repos --owner 391agency --archived=false --json name"* ]] + [[ "$(cat "$log_file")" == *"search repos --owner btpworks --archived=false --json name"* ]] + [[ "$(cat "$log_file")" == *"search repos --owner blockchaintp --archived=false --json name"* ]] + [[ "$(cat "$log_file")" == *"search repos --owner catenasys --archived=false --json name"* ]] + [[ "$(cat "$log_file")" == *"search repos --owner hyperledger --archived=false --json name"* ]] + [[ "$(cat "$log_file")" == *"pr list --draft=false --repo 391agency/391agency-repo --json reviewDecision"* ]] + [[ "$(cat "$log_file")" == *"pr list --draft=false --repo hyperledger/hyperledger-repo --json reviewDecision"* ]] + + rm -rf "$stub_bin" + rm -f "$log_file" +} + +@test "review-prs honors explicit -o and -i arguments (SUR-3646)" { + stub_bin=$(mktemp -d) + log_file=$(mktemp) + mkdir -p "$HOME/git/focused/focused-repo" + write_review_prs_stubs "$stub_bin" "$log_file" + + run env PATH="$stub_bin:$PATH" REVIEW_PRS_STUB_LOG="$log_file" LOGFILE_DISABLE=true \ + bash "$TARGET" -o direct -i focused + [ "$status" -eq 0 ] + [[ "$(cat "$log_file")" == *"search repos --owner direct --archived=false --json name"* ]] + [[ "$(cat "$log_file")" == *"search repos --owner focused --archived=false --json name"* ]] + [[ "$(cat "$log_file")" != *"search repos --owner 391agency --archived=false --json name"* ]] + [[ "$(cat "$log_file")" != *"search repos --owner hyperledger --archived=false --json name"* ]] + + rm -rf "$stub_bin" + rm -f "$log_file" +} diff --git a/tests/semver.bats b/tests/semver.bats index b790c05..dcb8298 100644 --- a/tests/semver.bats +++ b/tests/semver.bats @@ -163,6 +163,22 @@ setup() { [ "$output" = "" ] } +@test "diff with no versions prints usage instead of nounset error (SUR-3647)" { + run "$SEMVER" diff + [ "$status" -ne 0 ] + [[ "$output" == *"Usage:"* ]] + [[ "$output" == *"semver diff "* ]] + [[ "$output" != *"unbound variable"* ]] +} + +@test "diff with one version prints usage instead of nounset error (SUR-3647)" { + run "$SEMVER" diff 1.2.3 + [ "$status" -ne 0 ] + [[ "$output" == *"Usage:"* ]] + [[ "$output" == *"semver diff "* ]] + [[ "$output" != *"unbound variable"* ]] +} + # ---------- get ------------------------------------------------------------- @test "get major" {