diff --git a/.gitea/scripts/bats-coverage.sh b/.gitea/scripts/bats-coverage.sh new file mode 100755 index 0000000..817aef1 --- /dev/null +++ b/.gitea/scripts/bats-coverage.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -euo pipefail + +COVERAGE_VOLUME="${1:-}" +REPORT_DIR="${2:-}" + +[ -n "$COVERAGE_VOLUME" ] || { echo "ERROR: coverage volume name required" >&2; exit 1; } +[ -n "$REPORT_DIR" ] || { echo "ERROR: report directory required" >&2; exit 1; } + +mkdir -p "$REPORT_DIR/coverage" +docker run --rm -v "$COVERAGE_VOLUME":/coverage alpine tar c -C /coverage . | tar x -C "$REPORT_DIR/coverage" + +cat > "$REPORT_DIR/index.html" << EOF + +Bats report ${GITHUB_SHA:0:8} + +

Bats report ${GITHUB_SHA:0:8}

+ + +EOF diff --git a/.gitea/scripts/bats-report.sh b/.gitea/scripts/bats-report.sh index fbebbfb..d287350 100644 --- a/.gitea/scripts/bats-report.sh +++ b/.gitea/scripts/bats-report.sh @@ -3,7 +3,7 @@ set -euo pipefail REPORT_DIR="${1:-reports/bats}" INPUT="$REPORT_DIR/results.txt" -OUTPUT="$REPORT_DIR/index.html" +OUTPUT="$REPORT_DIR/test-report.html" [ -f "$INPUT" ] || { echo "ERROR: $INPUT not found" >&2; exit 1; } diff --git a/.gitea/workflows/build-feature.yml b/.gitea/workflows/build-feature.yml index f826b91..224d8a6 100644 --- a/.gitea/workflows/build-feature.yml +++ b/.gitea/workflows/build-feature.yml @@ -51,16 +51,20 @@ jobs: shell: bash run: | docker volume create bats-workspace - tar c . | docker run --rm -i -v bats-workspace:/data alpine tar x -C /data + docker volume create bats-coverage + tar c . | docker run --rm -i -v bats-workspace:/data -v bats-coverage:/coverage alpine tar x -C /data mkdir -p "reports/${GITHUB_SHA:0:8}/bats" set +e - docker run --rm -v bats-workspace:/data \ + docker run --rm \ + -v bats-workspace:/data \ + -v bats-coverage:/coverage \ --entrypoint bash ${{ inputs.bats-image }} \ - -c 'apk add -q lsof python3 jq curl && \ - cd /data && bats tests/ ' \ + -c 'apk add -q lsof python3 jq curl kcov && \ + cd /data && kcov --include-path=/data/scripts/ /coverage/ bats tests/' \ > "reports/${GITHUB_SHA:0:8}/bats/results.txt" 2>&1 BATS_EXIT=$? - docker volume rm bats-workspace > /dev/null 2>&1 + bash .ci/.gitea/scripts/bats-coverage.sh bats-coverage "reports/${GITHUB_SHA:0:8}/bats" + docker volume rm bats-workspace bats-coverage > /dev/null 2>&1 bash .ci/.gitea/scripts/bats-report.sh "reports/${GITHUB_SHA:0:8}/bats" echo "BATS_EXIT=${BATS_EXIT}" >> "${GITHUB_ENV}" exit ${BATS_EXIT}