singer-io / singer-io/tap-github

Stitch - Projects (classic) has been deprecated in favor of the new Projects experience

Open
#215 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
76
Forks
86
PR merge metrics
No merged PRs in 30d

Description

Our Stitch integration has been failing due to Github sunsetted the projects api. However, in our company, we don't use projects. Is it possible to bypass this as a short term fix?

HTTP-error-code: 410, Error: {'message': 'Projects (classic) has been deprecated in favor of the new Projects experience.', 'documentation_url': 'https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects', 'status': '410'}

Here's the log around the error:

2025-04-11 23:06:08,265Z    tap - INFO HTTP request to "issues" endpoint took 0.110s, returned status code 200
2025-04-11 23:06:08,266Z    tap - INFO replicated 0 records from "issues" endpoint
2025-04-11 23:06:08,268Z    tap - INFO Final url is: https://api.github.com/repos/tenantopia/shrike/projects?state=all
2025-04-11 23:06:08,271Z   main - INFO State update: adding currently_syncing = null
2025-04-11 23:06:08,331Z    tap - INFO METRIC Point(metric_type='timer', metric='http_request_duration', value=0.0616912841796875, tags={'endpoint': 'projects', 'status': 'failed'})
2025-04-11 23:06:08,331Z    tap - INFO replicated 0 records from "projects" endpoint
2025-04-11 23:06:08,331Z    tap - CRITICAL HTTP-error-code: 410, Error: {'message': 'Projects (classic) has been deprecated in favor of the new Projects experience.', 'documentation_url': 'https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects', 'status': '410'}
2025-04-11 23:06:08,331Z    tap - Traceback (most recent call last):
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/bin/tap-github", line 8, in <module>
2025-04-11 23:06:08,331Z    tap -     sys.exit(main())
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/singer/utils.py", line 229, in wrapped
2025-04-11 23:06:08,331Z    tap -     return fnc(*args, **kwargs)
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/tap_github/__init__.py", line 39, in main
2025-04-11 23:06:08,331Z    tap -     _sync(client, config, state, catalog)
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/tap_github/sync.py", line 209, in sync
2025-04-11 23:06:08,331Z    tap -     do_sync(catalog, streams_to_sync_for_repos, selected_stream_ids, client, start_date, state, repo)
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/tap_github/sync.py", line 231, in do_sync
2025-04-11 23:06:08,331Z    tap -     state = stream_obj.sync_endpoint(client = client,
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/tap_github/streams.py", line 297, in sync_endpoint
2025-04-11 23:06:08,331Z    tap -     for response in client.authed_get_all_pages(
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/tap_github/client.py", line 227, in authed_get_all_pages
2025-04-11 23:06:08,331Z    tap -     r = self.authed_get(source, url, headers, stream, should_skip_404)
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/backoff/_sync.py", line 94, in retry
2025-04-11 23:06:08,331Z    tap -     ret = target(*args, **kwargs)
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/tap_github/client.py", line 211, in authed_get
2025-04-11 23:06:08,331Z    tap -     raise_for_error(resp, source, stream, self, should_skip_404)
2025-04-11 23:06:08,331Z    tap -   File "/code/orchestrator/tap-env/lib/python3.9/site-packages/tap_github/client.py", line 129, in raise_for_error
2025-04-11 23:06:08,331Z    tap -     raise exc(message) from None
2025-04-11 23:06:08,331Z    tap - tap_github.client.GithubException: HTTP-error-code: 410, Error: {'message': 'Projects (classic) has been deprecated in favor of the new Projects experience.', 'documentation_url': 'https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects', 'status': '410'}
2025-04-11 23:06:08,356Z   main - INFO State update: changing currently_syncing from null to "projects"
2025-04-11 23:06:08,356Z target - INFO Requests complete, stopping loop
2025-04-11 23:06:08,394Z   main - INFO Target exited normally with status 0
2025-04-11 23:06:08,397Z   main - INFO No tunnel subprocess to tear down
2025-04-11 23:06:08,397Z   main - INFO Exit status is: Discovery succeeded. Tap failed with code 1 and error message: "HTTP-error-code: 410, Error: {'message': 'Projects (classic) has been deprecated in favor of the new Projects experience.', 'documentation_url': 'https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects', 'status': '410'}". Target succeeded.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the projects stream in tap_github/streams.py and trace its request through tap_github/client.py, especially raise_for_error and authed_get. Reproduce the 410 response from the projects endpoint, then verify the tap completes without failing when that endpoint is unavailable and other streams continue to sync.

Written by the indexing model from the issue text.

Assessment

Tech stack
github, python
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.