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}