Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add workaround allowing resubmission #241

Merged
merged 2 commits into from
Nov 19, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions coveralls/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
import json
import logging
import os
import random
import re
import sys

import coverage
import requests
Expand Down Expand Up @@ -202,6 +204,21 @@ def wear(self, dry_run=False):
verify = not bool(os.environ.get('COVERALLS_SKIP_SSL_VERIFY'))
response = requests.post(endpoint, files={'json_file': json_string},
verify=verify)

# check and adjust/resubmit if submission looks like it
# failed due to resubmission (non-unique)
if response.status_code == 422:
self.config['service_job_id'] = '{}-{}'.format(
self.config['service_job_id'], random.randint(0, sys.maxsize))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't this lead to a potential KeyError on GitHub Actions?
Because the service_job_id is only set if job is set in Coveralls.__init__():
https://github.com/coveralls-clients/coveralls-python/blob/2.2.0/coveralls/api.py#L56-L57
However job is always None in Coveralls.load_config_from_github():
https://github.com/coveralls-clients/coveralls-python/blob/2.2.0/coveralls/api.py#L92-L109

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You may be right - looks like github actions are one of/the only ones that requires use of a token, and then submits this using the second method documented at https://docs.coveralls.io/api-introduction. Have you seen this occur in practice?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes I think I saw it happening with when using service_name=github and getting a 422.
The fix for the KeyError was to simply provide service_job_id a value (None in my case) to the Coveralls constructor. That was enough for me. See below for the fix including regression tests.
AndreMiras/coveralls-python-action@50af55e
Since it could well be me misusing the package, I guess we can simply acknowledge this bug/feature and take no actions until someone else complains


# ensure create_report uses updated data
self._data = None

print('resubmitting with id {}'.format(
self.config['service_job_id']))
response = requests.post(endpoint, files={'json_file': self.create_report()},
verify=verify)

try:
response.raise_for_status()
return response.json()
Expand Down