celery task failure handling still looks up repositories by their git url
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 62/100
Research direction
Start at augur/tasks/init/celery_app.py:90 and follow on_failure through augur_handle_task_failure, using the detect_move task and core.py traceback as context. Update failure handling so repository moves do not cause the repo lookup to raise NoResultFound; done means the original task failure is handled without the secondary lookup error.
Written by the indexing model from the issue text.
Description
[!NOTE]
Migrated from augurlabs/augur#3421
Originally opened by@MoralCodeon 2025-11-19
Even though looking up repositories by their repo_git is no longer really the main way to do it (because the git url can change), the error handling process for celery tasks still does this:
Logs
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 augur_collection_monitor[276] INFO Setting github repo core status to collecting for repo: https://github.com/moralcode/classclockapi
[augur] | [2025-11-18 23:04:30,464: INFO/MainProcess] Task augur.tasks.github.detect_move.tasks.detect_github_repo_move_core[38307c62-7947-495d-ac2f-35d8bd2bb241] received
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Starting repo_move operation with https://github.com/moralcode/classclockapi
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 augur_collection_monitor[276] INFO Starting collection on 0 secondary repos
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 augur_collection_monitor[276] INFO Starting collection on 0 facade repos
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Pinging repo: https://github.com/moralcode/classclockapi
[augur] | [2025-11-18 23:04:30,474: INFO/ForkPoolWorker-2] Task augur.tasks.start_tasks.augur_collection_monitor[bb2d2553-8919-4da8-ac60-e628d826b9c3] succeeded in 0.09832821798045188s: None
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Retrieved 1 github api keys for use
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] DEBUG Key used for request (masked): ghp_EA******kQm
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 analyze_commits_in_parallel[281] DEBUG Analyzing commit 1f9454ebee957364e9073378ad2562b37f9c0394 for repo_id=1
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] DEBUG Key used for request (masked): ghp_EA******kQm
[augur] | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Updated repo for https://github.com/classclock/API
[augur] |
[augur] | [2025-11-18 23:04:30,942: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] ERROR Task 38307c62-7947-495d-ac2f-35d8bd2bb241 raised exception: ERROR: Repo has moved! Resetting Collection!
[augur] | Traceback: Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur] | R = retval = fun(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur] | return self.run(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur] | ping_github_for_repo_move(session, key_auth, repo, logger)
[augur] | File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur] | raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur] | Exception: ERROR: Repo has moved! Resetting Collection!
[augur] | [2025-11-18 23:04:30,943: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] INFO Repo git: https://github.com/moralcode/classclockapi
[augur] | [2025-11-18 23:04:30,955: WARNING/ForkPoolWorker-2] /augur/.venv/lib/python3.11/site-packages/celery/app/trace.py:662: RuntimeWarning: Exception raised outside body: NoResultFound('No row was found when one was required'):
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur] | R = retval = fun(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur] | return self.run(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur] | ping_github_for_repo_move(session, key_auth, repo, logger)
[augur] | File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur] | raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur] | Exception: ERROR: Repo has moved! Resetting Collection!
[augur] |
[augur] | During handling of the above exception, another exception occurred:
[augur] |
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur] | I, R, state, retval = on_error(task_request, exc)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur] | R = I.handle_error_state(
[augur] | ^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur] | return {
[augur] | ^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur] | task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur] | self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur] | repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur] | return self._iter().one() # type: ignore
[augur] | ^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur] | return self._only_one_row(
[augur] | ^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur] | raise exc.NoResultFound(
[augur] | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur] |
[augur] | warn(RuntimeWarning(
[augur] |
[augur] | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30,983,983ms [PID: 280] core_task_failure [ERROR] Task 38307c62-7947-495d-ac2f-35d8bd2bb241 raised exception: No row was found when one was required
[augur] | Traceback: Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur] | R = retval = fun(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur] | return self.run(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur] | ping_github_for_repo_move(session, key_auth, repo, logger)
[augur] | File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur] | raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur] | Exception: ERROR: Repo has moved! Resetting Collection!
[augur] |
[augur] | During handling of the above exception, another exception occurred:
[augur] |
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur] | I, R, state, retval = on_error(task_request, exc)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur] | R = I.handle_error_state(
[augur] | ^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur] | return {
[augur] | ^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur] | task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur] | self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur] | repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur] | return self._iter().one() # type: ignore
[augur] | ^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur] | return self._only_one_row(
[augur] | ^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur] | raise exc.NoResultFound(
[augur] | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur] | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] ERROR Task 38307c62-7947-495d-ac2f-35d8bd2bb241 raised exception: No row was found when one was required
[augur] | Traceback: Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur] | R = retval = fun(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur] | return self.run(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur] | ping_github_for_repo_move(session, key_auth, repo, logger)
[augur] | File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur] | raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur] | Exception: ERROR: Repo has moved! Resetting Collection!
[augur] |
[augur] | During handling of the above exception, another exception occurred:
[augur] |
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur] | I, R, state, retval = on_error(task_request, exc)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur] | R = I.handle_error_state(
[augur] | ^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur] | return {
[augur] | ^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur] | task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur] | self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur] | repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur] | return self._iter().one() # type: ignore
[augur] | ^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur] | return self._only_one_row(
[augur] | ^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur] | raise exc.NoResultFound(
[augur] | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur] | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30,983,983ms [PID: 280] core_task_failure [INFO] Repo git: https://github.com/moralcode/classclockapi
[augur] | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] INFO Repo git: https://github.com/moralcode/classclockapi
[augur] | [2025-11-18 23:04:30,999: ERROR/MainProcess] Task handler raised error: NoResultFound('No row was found when one was required')
[augur] | billiard.einfo.RemoteTraceback:
[augur] | """
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur] | R = retval = fun(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur] | return self.run(*args, **kwargs)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur] | ping_github_for_repo_move(session, key_auth, repo, logger)
[augur] | File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur] | raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur] | Exception: ERROR: Repo has moved! Resetting Collection!
[augur] |
[augur] | During handling of the above exception, another exception occurred:
[augur] |
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur] | I, R, state, retval = on_error(task_request, exc)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur] | R = I.handle_error_state(
[augur] | ^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur] | return {
[augur] | ^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur] | task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur] | self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur] | repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur] | return self._iter().one() # type: ignore
[augur] | ^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur] | return self._only_one_row(
[augur] | ^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur] | raise exc.NoResultFound(
[augur] | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur] |
[augur] | During handling of the above exception, another exception occurred:
[augur] |
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/billiard/pool.py", line 362, in workloop
[augur] | result = (True, prepare_result(fun(*args, **kwargs)))
[augur] | ^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 651, in fast_trace_task
[augur] | R, I, T, Rstr = tasks[task].__trace__(
[augur] | ^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 574, in trace_task
[augur] | I, _, _, _ = on_error(task_request, exc)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur] | R = I.handle_error_state(
[augur] | ^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur] | return {
[augur] | ^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur] | task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur] | self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur] | repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur] | return self._iter().one() # type: ignore
[augur] | ^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur] | return self._only_one_row(
[augur] | ^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur] | raise exc.NoResultFound(
[augur] | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur] | """
[augur] |
[augur] | The above exception was the direct cause of the following exception:
[augur] |
[augur] | Traceback (most recent call last):
[augur] | File "/augur/.venv/lib/python3.11/site-packages/billiard/pool.py", line 362, in workloop
[augur] | result = (True, prepare_result(fun(*args, **kwargs)))
[augur] | ^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 651, in fast_trace_task
[augur] | R, I, T, Rstr = tasks[task].__trace__(
[augur] | ^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 574, in trace_task
[augur] | I, _, _, _ = on_error(task_request, exc)
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur] | R = I.handle_error_state(
[augur] | ^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur] | return {
[augur] | ^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur] | task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur] | self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur] | File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur] | repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur] | return self._iter().one() # type: ignore
[augur] | ^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur] | return self._only_one_row(
[augur] | ^^^^^^^^^^^^^^^^^^^
[augur] | File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur] | raise exc.NoResultFound(
[augur] | sqlalchemy.exc.NoResultFound: No row was found when one was required
``
</details>
_Originally posted by @MoralCode in https://github.com/chaoss/augur/issues/3391#issuecomment-3552943675_
- Dominant language
- Python
- Stars
- 14
- Forks
- 18
- Avg merge
- 6h 59m
- Merged PRs (30d)
- 1
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from chaoss/CollectOSS
-
challenging first issue CLI
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
chaoss/CollectOSS#414 · 2 comments ·
-
challenging first issue CLI
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
chaoss/CollectOSS#413 · 3 comments ·
-
CLI good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
chaoss/CollectOSS#412 · 1 comment ·
-
devops
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
chaoss/CollectOSS#406 · 3 comments ·
-
dependencies devops good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
chaoss/CollectOSS#349 ·
All issues in chaoss/CollectOSS
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100