Search code examples
dockercode-coverage

Passing reports through docker in codecov gives error


I'm trying to setup codecov as code coverage tool in my repository. I referred to this link to pass reports through docker container -

Link - https://github.com/codecov/support/wiki/Testing-with-Docker

But travis ci fails and gives this error -

docker: Error parsing reference: "..." is not a valid repository/tag.

Here is my travis.yml

sudo: required
dist: trusty
language: node_js
node_js:
- 6
before_install:
- export CHROME_BIN=chromium-browser
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- docker run -v "$PWD/shared:/shared" ...
before_script:
- ng build
script:
- ng test --watch=false
- ng lint
- >
  docker run -ti -v $(pwd):/app --workdir=/app coala/base coala --version
after_success:
- bash ./deploy.sh
- bash <(curl -s https://codecov.io/bash)
- mv -r coverage/ shared
cache:
    bundler: true
    directories:
    - node_modules
    - .coala-cache
services: docker
branches:
   only:
- angular

How should I solve this? Thanks!


Solution

  • I assume you refer to Codecov Outside Docker. The current error message already tells you that the three dots ... need to be replaced with a real Docker repository name, e.g. node:6-alpine.

    What you're still missing is the part of running the tests (including reports) inside the Docker container, so that you can mv the test reports to the shared folder. You could achieve that by adding a custom Dockerfile based on node, similar to the one below. I chose a more or less full base image including Chrome and other tools to make your use case work:

    FROM markadams/chromium-xvfb-js:7
    WORKDIR /proj
    CMD npm install && \
        node_modules/.bin/ng build && \
        node_modules/.bin/ng test --watch=false && \
        node_modules/.bin/ng lint && \
        mkdir -p shared && \
        mv coverage.txt shared
    

    That custom image needs to be built and then run like this (assuming the Dockerfile to be in your project root directory):

    docker build -t ci-build .
    docker run --rm -v "$(pwd):/proj" ci-build
    

    I suggest to change the .travis.yml like follows:

    sudo: required
    dist: trusty
    language: node_js
    node_js:
    - 6
    before_install:
    - docker build -t ci-build .
    script:
    - >
      docker run --rm -v $(pwd):/proj ci-build
    - >
      docker run -ti -v $(pwd):/app --workdir=/app coala/base coala --version
    after_success:
    - bash ./deploy.sh
    - bash <(curl -s https://codecov.io/bash)
    cache:
        bundler: true
        directories:
        - node_modules
        - .coala-cache
    services: docker
    branches:
       only:
    - angular
    

    Another note: the coala/base image works similarly.