Closed breezewish closed 5 years ago
I'll look into doing this now, just going to have to refresh myself on how the API works. Out of curiosity are you using this crate for a project or considering it?
@xd009642 We are running cargo tarpaulin in our own CI (Jenkins CI) and figured out that git related information is not sent to Coveralls, which leads to displaying "Unknown" status 🤣 Currently we write a proxy that manipulates the JSON on-the-fly, thanks to the endpoint url configuration in tarpaulin. But would be more elegant if this crate can support it natively!
Okay, could you just send me what the json looks like and what it should look like? I find the coveralls api documentation lacking in some areas and I think some of these might be optional fields I don't use.
@xd009642 Our json after manipulation looks like (js output):
{ repo_token: 'xxxxxxx',
source_files:
[ { name: '../../benches/hierarchy/engine_factory.rs',
source_digest: 'c1ddbc3f0b00ccc13057af94d1a540fc',
coverage: [Object] },
{ name: '../../benches/hierarchy/mod.rs',
source_digest: '7d1ea12b8e1300fe8c3ec75bca077903',
coverage: [Object] },
{ name: '../../benches/misc/channel/bench_channel.rs',
source_digest: '5fd32d810109a373e820f57cba8a0545',
coverage: [Object] },
{ name: '../../benches/misc/coprocessor/codec/chunk/arrow.rs',
source_digest: 'f8804674a4a66e16cbd419d683915e48',
coverage: [Object] },
{ name: '../../benches/misc/raftkv/mod.rs',
source_digest: 'd667e6303a54dffc8b0c8801bb415a78',
coverage: [Object] },
{ name: '../../benches/misc/serialization/bench_serialization.rs',
source_digest: '1a99275deda6a26ba4f7d6950892b30c',
coverage: [Object] },
{ name: '../../benches/raftstore/mod.rs',
source_digest: '6bc549d9207febd26a51e4dad1cab50d',
coverage: [Object] },
{ name: 'src/buffer.rs',
source_digest: '673a135676743f8789a30e91b64619f7',
coverage: [Object] },
{ name: 'src/error.rs',
source_digest: '2401e570615773dbafd9190f2e827e32',
coverage: [Object] },
{ name: '../cop_datatype/src/def/eval_type.rs',
source_digest: '0076d6644d6675bd834e8035eac7e9a9',
coverage: [Object] },
{ name: '../cop_datatype/src/def/field_type.rs',
source_digest: 'd89ac53f642d39b494ca2dfdb8a9feea',
coverage: [Object] },
{ name: '../test_coprocessor/src/column.rs',
source_digest: 'edb597dbe1332abcf2396b429b57a8e8',
coverage: [Object] },
{ name: '../test_coprocessor/src/dag.rs',
source_digest: '7fd2980d4db8f04fab04a74a37f72e2f',
coverage: [Object] },
{ name: '../test_coprocessor/src/fixture.rs',
source_digest: '6837ef3113a3e861c43f1c8b43b6eb8e',
coverage: [Object] },
{ name: '../test_coprocessor/src/store.rs',
source_digest: '9b8be5179eb12519a4863a7a9d9e5e71',
coverage: [Object] },
{ name: '../test_coprocessor/src/table.rs',
source_digest: '085e409b2968e2b280f77ed8bd3d9800',
coverage: [Object] },
{ name: '../test_raftstore/src/cluster.rs',
source_digest: '356ffa0a1578b4eb0e1f0fdee1c404f5',
coverage: [Object] },
{ name: '../test_raftstore/src/node.rs',
source_digest: '07e408b959c64967580e1eb310c0e5f4',
coverage: [Object] },
{ name: '../test_raftstore/src/pd.rs',
source_digest: '714875da0ca30e64bd44372fa8fb5796',
coverage: [Object] },
{ name: '../test_raftstore/src/server.rs',
source_digest: '528c4d24484b26a95e78dec59657cd2e',
coverage: [Object] },
{ name: '../test_raftstore/src/transport_simulate.rs',
source_digest: '015d6229e5c88f1a6e513bc7f7b201c2',
coverage: [Object] },
{ name: '../test_storage/src/assert_storage.rs',
source_digest: '8d06a00cb846a7eb886ee281afe9572c',
coverage: [Object] },
{ name: '../test_storage/src/sync_storage.rs',
source_digest: '6f0c6451d2d0b756f2a0b3d7f0f37ed0',
coverage: [Object] },
{ name: '../test_util/src/kv_generator.rs',
source_digest: '84e0c4b028f68f2130f57ec8fd8aa0a7',
coverage: [Object] },
{ name: '../test_util/src/logging.rs',
source_digest: 'a979c3464169f7a35c5f5889477bf5cc',
coverage: [Object] },
{ name: '../../fuzz/cli.rs',
source_digest: 'c82d238d6593928dc70d76aae2e5c8dc',
coverage: [Object] },
{ name: '../../fuzz/targets/mod.rs',
source_digest: '321ffe98b172f9405a090363a1a56ae9',
coverage: [Object] },
{ name: '../../fuzz/targets/util.rs',
source_digest: '4649ad7735dceef6b8f7b9712d57a70f',
coverage: [Object] },
{ name: '../../src/bin/tikv-ctl.rs',
source_digest: '1e649cd1417dbe6a4bc5609453f13897',
coverage: [Object] },
{ name: '../../src/bin/util/profiling.rs',
source_digest: '1501b23bfed7cbe980a830dfcd2a4c62',
coverage: [Object] },
{ name: '../../src/config.rs',
source_digest: 'ca15aa8fd1fe8239930a76c3c2e6ce2d',
coverage: [Object] },
{ name: '../../src/coprocessor/checksum.rs',
source_digest: '41c8c74ea16fb1d919b8d86427177b68',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/batch/column.rs',
source_digest: 'dc754bcecebbd6b4d75e1a38ebba8e90',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/batch/rows.rs',
source_digest: 'fa4dca7f6b9b4fc499c70a2ad71a9f11',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/chunk/chunk.rs',
source_digest: '11a964ae351266f2e167f9e9322d9dd6',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/chunk/column.rs',
source_digest: 'd1f4b04a03f7fa8856544c8273afbe36',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/convert.rs',
source_digest: '74bfdbe7cb56c23fc9b1cfdf6ef233a9',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/datum.rs',
source_digest: '793d8ca77c933f90b706c72be1f4173f',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/error.rs',
source_digest: '2d14ba18e41cd3cb56b0efa2905696a2',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/decimal.rs',
source_digest: 'b9148963191e53ef28f5f2803063f405',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/duration.rs',
source_digest: '09f8f3d0747da11091e5c90aa8579397',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/binary.rs',
source_digest: '9ca11bdd562d5f9f3b48dcca387a8f21',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/comparison.rs',
source_digest: 'f7f2d3f799b605f6a68041fb20e2f8f6',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/json_cast.rs',
source_digest: '0809a5369127e94b1b47eafe83187d07',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/json_extract.rs',
source_digest: '35d8bfb5b71a676789802a8ddbe8332d',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/json_merge.rs',
source_digest: 'e48132aa45fea9b755f8ce756d03db6b',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/json_modify.rs',
source_digest: 'a2c9610b15c3192e68086d86c70fd5f1',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/json_remove.rs',
source_digest: '089886d6049dacfb92fdd482dcdbb28a',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/json_type.rs',
source_digest: '87ff63dd9d845b8ee07d4344a2a4f4ee',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/json_unquote.rs',
source_digest: 'bfc60345b1a77f7170e9473290955b5c',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/path_expr.rs',
source_digest: '1f0120094151db35875b10590fcf10c8',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/json/serde.rs',
source_digest: '6d99cc31720a1439d92a86e727a0428b',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/time/extension.rs',
source_digest: '182cb739d11814c587150178a24bf72a',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/time/mod.rs',
source_digest: '39a749ce3271390ad098d620dc327878',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/time/tz.rs',
source_digest: '1922249143efa18aa498960f6acaa64f',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/mysql/time/weekmode.rs',
source_digest: '520fe6470b656f846ced9a826280c6b7',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/overflow.rs',
source_digest: '9b1e0936cfcc7c1999d7ffdd5a3b733f',
coverage: [Object] },
{ name: '../../src/coprocessor/codec/table.rs',
source_digest: 'c0009e6e50802c0f34eddb175881d613',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/dag.rs',
source_digest: '295d411aa548979aacea85084cecdc45',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/aggregate.rs',
source_digest: '236d153f411788ab0fc9b4b03244438f',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/aggregation.rs',
source_digest: 'c1f663b60f58d2fd5fff798eb621c2b0',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/index_scan.rs',
source_digest: '2e9e42df23f09f92ce8d9c322df80d64',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/limit.rs',
source_digest: '95491efcfe073aa6d5c8232e76b0bdf9',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/metrics.rs',
source_digest: 'deee481e0177d53744b8baf72a47acbd',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/mod.rs',
source_digest: 'fdd88d5ac441a154928144324c14f653',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/scanner.rs',
source_digest: '0c6bbd281f26c500d7c773bc3ba05123',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/selection.rs',
source_digest: 'd1927c413e37e7d5e4b3c9b8c2c7e5da',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/table_scan.rs',
source_digest: '0f1b818d1de4f512d5094c48d45a4ea7',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/topn.rs',
source_digest: 'f1c337282b1acb1271de04827ddf1ca3',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/executor/topn_heap.rs',
source_digest: 'b285a18dfcc406119cc6ae47e7ec97bd',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_arithmetic.rs',
source_digest: 'bcfc49767458de650ebeb6c09fc3788b',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_cast.rs',
source_digest: 'b6f814f1fbbb63c8ae9c8ee55b830bb6',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_compare.rs',
source_digest: 'e36c3b537313af7557c284cb4ea40d38',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_control.rs',
source_digest: '628eabaea03861bc096481f4b5ec4d4e',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_encryption.rs',
source_digest: 'f27f3f031a9ba5dc275446e308206c60',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_json.rs',
source_digest: 'd75330351ba92e6af796edb4f8488a5f',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_like.rs',
source_digest: '765ca7997c16dc411db5e8bb0e58dc91',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_math.rs',
source_digest: '0943c3c9175b70009decd5bc8ee1f0c6',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_miscellaneous.rs',
source_digest: '1f937730c607f0302b4945d8cf9e6a84',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_op.rs',
source_digest: 'afac11cf39114fc966cef877445870bc',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_other.rs',
source_digest: 'd5a2ee7e1c17998ac8f7ae967d6a51ee',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_string.rs',
source_digest: '9f71b7f0ae26ad9f0f1a07c012027ca0',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/builtin_time.rs',
source_digest: '5cc08f7d11136a6d32447a9bbf4a5210',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/column.rs',
source_digest: '6f702bd6c459701842d7df8c62f98e93',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/constant.rs',
source_digest: 'b4d8e5a0aa20d386012e7ff924246b7d',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/ctx.rs',
source_digest: '1ae94bdcfd394aeb2add65d1bc03d903',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/mod.rs',
source_digest: '23ff01d7a8e42c6683a9b929fb8083a3',
coverage: [Object] },
{ name: '../../src/coprocessor/dag/expr/scalar_function.rs',
source_digest: '947bf3076ab971f3454b01ec9adc323f',
coverage: [Object] },
{ name: '../../src/coprocessor/endpoint.rs',
source_digest: 'da2f4e7701d26432d3ed0a4125c1afa6',
coverage: [Object] },
{ name: '../../src/coprocessor/error.rs',
source_digest: '0e1afbebf32fb23965345c8096c5ae93',
coverage: [Object] },
{ name: '../../src/coprocessor/local_metrics.rs',
source_digest: '7f0e02ee13d3d57de43fc1083ab7cc83',
coverage: [Object] },
{ name: '../../src/coprocessor/mod.rs',
source_digest: 'a972824da46784cf4519691cda149434',
coverage: [Object] },
{ name: '../../src/coprocessor/readpool_context.rs',
source_digest: '1f63b7c96b29990099d8db3566a9d560',
coverage: [Object] },
{ name: '../../src/coprocessor/statistics/analyze.rs',
source_digest: '5907df86d6ee9bac62ed929424e8f27d',
coverage: [Object] },
{ name: '../../src/coprocessor/statistics/cmsketch.rs',
source_digest: '380ccd78baf3b3ce69a9ae7f73d83057',
coverage: [Object] },
{ name: '../../src/coprocessor/statistics/fmsketch.rs',
source_digest: 'a224643ba818a6fa7a8214e99cfea258',
coverage: [Object] },
{ name: '../../src/coprocessor/statistics/histogram.rs',
source_digest: 'f5817746eea5289aed46e3bc0af4cbf2',
coverage: [Object] },
{ name: '../../src/coprocessor/tracker.rs',
source_digest: 'd54c2c0252d539179944e459e0ddf44c',
coverage: [Object] },
{ name: '../../src/coprocessor/util.rs',
source_digest: '65d21c92cca0e3a579274a9a352219a9',
coverage: [Object] },
{ name: '../../src/import/client.rs',
source_digest: '7067e69dce08c0ff48eb9ccd454c663c',
coverage: [Object] },
... 130 more items ],
commit_sha: 'xxxxxxx',
service_branch: 'master' }
And it works well for Coveralls. Notice that "service_branch" is not a field in this repo.
You may refer other available fields here, though I have not tried them all: https://github.com/lemurheavy/coveralls-ruby/blob/ecece72d423352432bcac2833952f352c2377350/lib/coveralls/configuration.rb#L54
So I haven't forgotten about this issue, it's just a case of finding the time for it! There is a new PR on the tarpaulin develop branch which adds the git info to the uploaded json. Don't know if that's helps with the issue at all?
I've implemented an initial version based on the links. If no CI is provided it tries to work out from the environment variables first otherwise falls back to the old approach. If a ci is specified it does the old approach still (but I'll get to that). Just want to see if my auto-detection stuff works first :+1:
I'm testing it on travis, I'd appreciate a Jenkins test if you have time. To install the test version just use the following cargo command:
RUSTFLAGS="--cfg procmacro2_semver_exempt" cargo install cargo-tarpaulin --git https://github.com/xd009642/tarpaulin --branch coveralls-test
Thanks a lot! I will take a look at it soon and see if it works!
Have you had a chance to test it yet?
Sorry for the late reply, I was on vacation recently 😄
I tried your latest version and seems that it doesn't work for me because repo_token
field was not included when a service (in my case, Jenkins) is recognized. According to doc section "CIRCLE, JENKINS, SEMAPHORE AND CODESHIP" looks like the supplement of COVERALLS_REPO_TOKEN
should be respected even if there is a known service.
My testing command was:
cargo tarpaulin --coveralls my_token -v
Which pushes a report to Coveralls (but branch info was not included) for current Tarpaulin master but does not successfully push a report at all for the new branch, caused by repo_token missing.
Okay I might have to rejiggle things some more for handling travis but I've pushed an update to both this repo and tarpaulin. So if you do a clean install and let me know if it works :+1:
@xd009642 Tried with your latest version, works like a charm! 👍
Sweet, I'll double check the code this end, publish a new version then do the same tarpaulin side!
@xd009642 That's awesome! Thanks for your great job!
Okay we're nearly there, I've published the new coveralls version. Updated tarpaulin and filled in some edge cases for if the tool is specified. If you could make sure I haven't unwittingly broken anything and I'll double check it still works with travis for one of my projects :+1: then if so I'll merge my tarpaulin changes and release a new tarpaulin version sometime this week!
For some reason I'm not getting anything for Travis... I'll have to look into this before I release
So I have a feeling having the repo token might be messing up the travis runs because of their special behaviour for free travis instances... I might have to update coveralls-api to handle this. I'll message again when I've figured it out travis side just so we can double check I haven't broken anything for Jenkins.
@breeswish if you try it again just to make sure. Nothing I changed to get tarpaulin working with travis should affect jenkins. However, it's always nice to double check these things!
@xd009642 Tried again in our environment and there is no problem! 👍
Awesome! I've merged it into tarpaulin's develop branch. There will either be a new release this weekend or next week but until then you can use the develop builds via docker (although there might be a docker issue) or using cargo to install it :+1:
Looks like it would be better to support these env variables (filling them in the upload json) according to https://docs.coveralls.io/supported-ci-services and https://github.com/lemurheavy/coveralls-ruby/blob/ecece72d423352432bcac2833952f352c2377350/lib/coveralls/configuration.rb#L114:
Also, it would be even nicer if env var detection can be more smart, like: https://github.com/lemurheavy/coveralls-ruby/blob/ecece72d423352432bcac2833952f352c2377350/lib/coveralls/configuration.rb#L199
(For me, our project is using a self-hosted Jenkins CI)