[![Actions Status](https://github.com/kan/coveralls-perl/actions/workflows/master.yml/badge.svg?branch=master)](https://github.com/kan/coveralls-perl/actions?workflow=master) [![Actions Status](https://github.com/kan/coveralls-perl/actions/workflows/windows.yml/badge.svg?branch=master)](https://github.com/kan/coveralls-perl/actions?workflow=windows) [![Actions Status](https://github.com/kan/coveralls-perl/actions/workflows/mac.yml/badge.svg?branch=master)](https://github.com/kan/coveralls-perl/actions?workflow=mac) [![Coverage Status](https://img.shields.io/coveralls/kan/coveralls-perl/master.svg?style=flat)](https://coveralls.io/r/kan/coveralls-perl?branch=master) # NAME Devel::Cover::Report::Coveralls - Coveralls backend for Devel::Cover # USAGE ## GitHub Actions 1\. Add your repo to Coveralls. [https://coveralls.io/repos/new](https://coveralls.io/repos/new) 2\. Add a workflow, e.g. `.github/workflows/test.yml`. The `GITHUB_TOKEN` of the workflow is enough to send the report; you do not need the repo token of Coveralls. ```perl name: test on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - uses: shogo82148/actions-setup-perl@v1 with: perl-version: '5.42' - run: cpanm -n --installdeps . - run: cpanm -n Devel::Cover::Report::Coveralls - run: cover -test -report coveralls env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` 3\. Push the change to GitHub. Coveralls shows the build, and on a pull request it reports the coverage back to the pull request. To send the coverage of several jobs (a matrix) as one build, mark each job as parallel, give each its own flag name, and close the build when all of them are done. The build is the run of the workflow, so the jobs and the closing step agree on it without any setting. ```perl jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: perl-version: ['5.20', '5.30', '5.42'] steps: - uses: actions/checkout@v7 - uses: shogo82148/actions-setup-perl@v1 with: perl-version: ${{ matrix.perl-version }} - run: cpanm -n --installdeps . - run: cpanm -n Devel::Cover::Report::Coveralls - run: cover -test -report coveralls env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COVERALLS_PARALLEL: true COVERALLS_FLAG_NAME: perl-${{ matrix.perl-version }} finish: needs: test if: ${{ always() }} runs-on: ubuntu-latest steps: - uses: coverallsapp/github-action@v2 with: parallel-finished: true ``` ## Travis CI 1\. Add your repo to Coveralls. [https://coveralls.io/repos/new](https://coveralls.io/repos/new) 2\. In the settings of your repository on Travis CI, set the environment variable `COVERALLS_REPO_TOKEN` to the repo token shown on your project page in Coveralls. 3\. Add the settings to `.travis.yml`: ``` language: perl perl: - "5.30" before_install: - cpanm -n Devel::Cover::Report::Coveralls script: - perl Build.PL && ./Build build && cover -test -report coveralls ``` 4\. Push the change. Coveralls shows the build. ## Other CI services GitLab CI, CircleCI, Jenkins, Azure Pipelines, Drone and Semaphore are detected from their environment variables, and the build number, branch, commit and pull request they give are sent. 1\. Get the repo token from your project page in Coveralls. 2\. Give it to the job as `COVERALLS_REPO_TOKEN`, as a secret variable of the CI service. Or write it in `.coveralls.yml` in the directory you run `cover` from, and do not commit that file to a public repository: ``` repo_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` 3\. Run `cover -test -report coveralls` in the job. ## When the report cannot be sent `cover -report coveralls` prints the error and exits with a non-zero status, so the job fails. To keep the job green, e.g. on pull requests from forks, which get no secrets, set ["COVERALLS\_NO\_FAIL"](#coveralls_no_fail). # DESCRIPTION This module is a report of [Devel::Cover](https://metacpan.org/pod/Devel%3A%3ACover) that sends the coverage of your Perl project to [Coveralls](https://coveralls.io/). Run it as `cover -report coveralls` after the tests, or as `cover -test -report coveralls` to run them too. It sends the coverage of each line of each source file, with the git commit, branch and remotes of the working tree. On the CI services listed in ["USAGE"](#usage), it also sends the build number, job, branch and pull request the CI service gives. When [Devel::Cover](https://metacpan.org/pod/Devel%3A%3ACover) collected the branch coverage (it does by default), it is sent too: how many times each side of each decision (`if`, `unless`, `elsif`, the ternary operator and so on) was taken. Branches marked `uncoverable` are left out. The condition coverage of Devel::Cover (`&&`, `||` and `//`) is not sent. Whether Coveralls counts branches in the coverage of the repository is a setting of the repository on Coveralls. The report holds the text of every source file. On a large project, install [Cpanel::JSON::XS](https://metacpan.org/pod/Cpanel%3A%3AJSON%3A%3AXS): it is used when installed, and makes the report several times faster than the pure-Perl [JSON::PP](https://metacpan.org/pod/JSON%3A%3APP) used otherwise. # ENVIRONMENT These environment variables change what is sent. The variables that the CI services set are read as well; you do not need to set them. ## COVERALLS\_REPO\_TOKEN The Coveralls authentication token for this particular repo. It is used before `repo_token` in `.coveralls.yml`. On GitHub Actions, `GITHUB_TOKEN` is used when neither is set. ## COVERALLS\_ENDPOINT The URL of the Coveralls server, for Coveralls Enterprise. The default is `https://coveralls.io`. The report is sent to this URL followed by `/api/v1/jobs`, so give it without a path. ## COVERALLS\_FLAG\_NAME Describe the particular tests being done, e.g. `Unit` or `Functional`. On GitHub Actions it is also added to the job ID, so give each leg of a matrix that reports to the same parallel build its own flag name. ## COVERALLS\_PARALLEL Set this to `true` when several jobs send their coverage to one build. Any value other than empty, `false` and `0` turns it on. Coveralls then keeps the build open until the parallel build webhook is called, so call it when all the jobs are done. The jobs must send the same build number; the CI services above give one per run (on GitHub Actions, the run of the workflow). See [https://docs.coveralls.io/api-parallel-build-webhook](https://docs.coveralls.io/api-parallel-build-webhook) ## COVERALLS\_NO\_FAIL When the report cannot be sent to Coveralls (the upload fails, or there is no repo token), `cover -report coveralls` prints the error and exits with a non-zero status, so that the CI job fails. Set this to `true` to exit 0 instead, e.g. when coverage is optional for the build or pull requests from forks get no repo token. When `cover` makes several reports, the ones after `coveralls` are not made after a failure, so put `coveralls` last. Any value other than empty, `false` and `0` turns it on. ## COVERALLS\_SERVICE\_NAME, COVERALLS\_SERVICE\_NUMBER, COVERALLS\_SERVICE\_JOB\_ID, COVERALLS\_SERVICE\_JOB\_NUMBER, COVERALLS\_PULL\_REQUEST Send these as the name of the CI service, the build number, the job ID, the job number and the number of the pull request, in place of what is detected from the CI service. On a CI service not listed in ["USAGE"](#usage), set them to send what the CI service knows. `COVERALLS_PULL_REQUEST` set to `false` means that the build is not for a pull request. When no CI service is detected, the build is sent as a manual upload (`service_event_type` `manual`), unless one of these variables other than `COVERALLS_PULL_REQUEST` is set, or `COVERALLS_PERL_SERVICE_NAME`: then it is sent as a CI build, without an event type. ## COVERALLS\_EVENT\_TYPE Send this as the event type of the build (`service_event_type`), as the official coverage-reporter does. ## COVERALLS\_PERL\_SERVICE\_NAME Another name of `COVERALLS_SERVICE_NAME`, which wins when both are set. ## COVERALLS\_GIT\_BRANCH, COVERALLS\_GIT\_COMMIT Send these as the branch and the commit ID, in place of the ones detected from the CI service and from git. ## GIT\_ID, GIT\_BRANCH, GIT\_AUTHOR\_NAME, GIT\_AUTHOR\_EMAIL, GIT\_COMMITTER\_NAME, GIT\_COMMITTER\_EMAIL, GIT\_MESSAGE The commit ID, the branch, the author, the committer and the message of the commit, for a build outside a git repository (e.g. from another version control system, or from a tarball). There git is not run, and what is not set is not sent. In a git repository, what git says comes first, and these only fill in what git does not give: CI jobs often set `GIT_AUTHOR_NAME` and the like for the commits they make, and Jenkins sets `GIT_BRANCH` to `origin/`. To give the branch or the commit ID in a git repository, use `COVERALLS_GIT_BRANCH` and `COVERALLS_GIT_COMMIT`. # SEE ALSO - [Devel::Cover](https://metacpan.org/pod/Devel%3A%3ACover) - [https://coveralls.io/](https://coveralls.io/) and its documentation, [https://docs.coveralls.io/](https://docs.coveralls.io/) - [https://github.com/coverallsapp/coverage-reporter](https://github.com/coverallsapp/coverage-reporter), the official reporter of Coveralls. This module sends the values it sends on each CI service. ## EXAMPLE The coverage of this module: [https://coveralls.io/github/kan/coveralls-perl](https://coveralls.io/github/kan/coveralls-perl) # LICENSE Copyright (C) Kan Fushihara This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. # AUTHOR Kan Fushihara