Closed Raigen closed 3 weeks ago
I recently encountered a similar situation with the orb.
Many of the problems I was having were related to the way CircleCI handles variables compounded by the way that our scripts are defined in our package.json files. I eventually abandoned the orb, and instead, I made a CircleCI command based on a slimmed-down version of it. The command uses the parallel feature of coveralls, and it was also executed after all tests had completed to finalize it in a similar way to the orb's method.
The monorepo root package.json script definitions are prepended with cd <package directory> &&
. This works okay., but it makes persisting that directory a challenge in CircleCI.
To get around the issues in our fan-out, parallel testing scenario, I prepended this command: echo export test_cwd=$(pwd) > ../../.env.coverage.local &&
to each package’s npm test script definition. This allowed me to persist the unique working directory path for each test job and allowed each instance of the parallel Coveralls CircleCI command was able to source it for its COVERALLS_FLAG_NAME
Script definition in package1's package.json:
{
"name": "package1",
"scripts": {
...
"test": "echo export test_cwd=$(pwd) > ../../.env.coverage.local && <test command and args>",
...
}
}
Script definition in root package.json:
{
"name": "monorepoProject",
"scripts": {
...
"testPackage1": "cd packages/package1 && npm run test",
...
}
}
CircleCI Command:
commands:
coveralls:
parameters:
parallel_finished:
type: boolean
default: false
steps:
- run:
name: Send to Coveralls
command: |
if << parameters.parallel_finished >>; then
curl "https://coveralls.io/webhook?repo_token=${COVERALLS_REPO_TOKEN}" \
-d "payload[build_num]=$CIRCLE_WORKFLOW_ID&payload[status]=done"
exit 0
fi
env_file=./.env.coverage.local
if [ ! -f "$env_file" ]; then
echo "ERROR: ./.env.test.local not persisted. Prepend this package's npm 'test' script definition with 'echo export test_cwd=$(pwd) > ../../.env.coverage.local && '"
exit 1
fi
sudo npm i -g coveralls
source "$env_file"
COVERALLS_FLAG_NAME=$(basename ${test_cwd})
PATH_TO_LCOV=${test_cwd}/coverage/lcov.info
# Send it
cat $PATH_TO_LCOV | coveralls
Test Job:
test-package1:
<<: *defaults
steps:
...
- run: npm run-script testPackage1
- coveralls
Finalize Job:
coveralls-finalize:
<<: *defaults
steps:
- coveralls:
parallel_finished: true
Workflow jobs:
workflows:
version: 2
main-branch-workflow:
jobs:
...
- test-package1:
<<: *filter-only-mains
- test-package2:
<<: *filter-only-mains
...
- coveralls-finalize:
<<: *filter-only-mains
requires:
- test-package1
- test-package2
...
Hey! There is a base_path
option now available in latest or version. Please, try it out!
Hi, @Raigen @jprice-da15252
I'm going to close this issue.
I hope you were able to make use of the base-path
input option, which is expressly for this purpose. If not, please re-open, or ping me here, or open a new issue. 🙏
We have a mono repo with multiple packages working together. The tree looks similar to this
Each package has it's own test runs and own coverage files. When I run
cat packages/package1/coverage/lcov.info | coveralls
, like the orb does, it can find the lcov informations, but the result is empty. The coverage file contains paths likesrc/views/App.js
, without the package path. So this condition results infalse
because there is nosrc/views/App.js
in the root directory.node-coveralls
has an option to provide an aditional filepath, see it here: https://github.com/nickmerwin/node-coveralls/blob/master/lib/getOptions.js#L246-L250 But I can not configure the Orb to utilize this option which means I have to manually install and use node-coveralls for my circleci builds like this:A filepath option for source files is missing in the orb configuration. Without we are not able to use the orb, which I really would like to do.