gr-mcp/docker/Dockerfile.gnuradio-coverage
Ryan Malloy bfab802e05 coverage: add cross-process coverage collection for containerized flowgraphs
New MCP tools:
- collect_coverage(name) - combine parallel files, return summary
- generate_coverage_report(name, format) - HTML/XML/JSON reports
- combine_coverage(names) - aggregate across test runs
- delete_coverage(name?, older_than_days?) - cleanup

Modified:
- launch_flowgraph() now accepts enable_coverage parameter
- stop() uses 30s timeout for graceful shutdown (coverage needs atexit)

Docker:
- Dockerfile.gnuradio-coverage extends runtime with python3-coverage
- entrypoint-coverage.sh wraps execution with coverage run
- .coveragerc configured for GNU Radio source paths

Tests: 125 unit tests (21 new), 80% coverage
2026-01-27 13:50:17 -07:00

40 lines
1.3 KiB
Docker

# Coverage-enabled GNU Radio runtime container
# Extends gnuradio-runtime with Python code coverage instrumentation
#
# Build:
# docker build -f docker/Dockerfile.gnuradio-coverage -t gnuradio-coverage:latest docker/
#
# Usage:
# docker run --rm -v $(pwd)/coverage:/coverage \
# -e ENABLE_COVERAGE=1 \
# gnuradio-coverage:latest python3 /flowgraphs/my_flowgraph.py
#
# The coverage data is written to /coverage/.coverage on container exit.
# Mount this volume to persist coverage data between runs.
FROM gnuradio-runtime:latest
LABEL org.opencontainers.image.title="GNU Radio Coverage Runtime"
LABEL org.opencontainers.image.description="GNU Radio runtime with Python code coverage support"
# Install Python coverage.py via apt (pip3 not available in base image)
RUN apt-get update && apt-get install -y --no-install-recommends \
python3-coverage \
&& rm -rf /var/lib/apt/lists/*
# Copy coverage configuration
COPY .coveragerc /etc/coveragerc
# Copy coverage-aware entrypoint
COPY entrypoint-coverage.sh /entrypoint-coverage.sh
RUN chmod +x /entrypoint-coverage.sh
# Coverage data directory - mount a volume here to persist
VOLUME /coverage
# Environment variables for coverage
ENV COVERAGE_FILE=/coverage/.coverage
ENV COVERAGE_RCFILE=/etc/coveragerc
ENTRYPOINT ["/entrypoint-coverage.sh"]