Skip to content

Commit 651ef5b

Browse files
authored
Merge pull request #1612 from consideRatio/pr/attempt-fix-github-ratelimit
ci: set GITHUB_ACCESS_TOKEN to temporary read only token
2 parents 9e50d4f + 44260da commit 651ef5b

File tree

5 files changed

+95
-68
lines changed

5 files changed

+95
-68
lines changed

.github/workflows/test.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ jobs:
4444
tests:
4545
runs-on: ubuntu-20.04
4646
timeout-minutes: 10
47+
48+
permissions:
49+
contents: read
50+
env:
51+
GITHUB_ACCESS_TOKEN: "${{ secrets.github_token }}"
52+
4753
strategy:
4854
# keep running so we can see if tests with other k3s/k8s/helm versions pass
4955
fail-fast: false
@@ -345,6 +351,12 @@ jobs:
345351
test-local:
346352
runs-on: ubuntu-20.04
347353
timeout-minutes: 5
354+
355+
permissions:
356+
contents: read
357+
env:
358+
GITHUB_ACCESS_TOKEN: "${{ secrets.github_token }}"
359+
348360
steps:
349361
- uses: actions/checkout@v3
350362

binderhub/tests/conftest.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,24 @@ def mock_asynchttpclient(request):
119119
# We have to explicitly load the mock responses we want to use
120120
# We should use as few mocked responses as possible because it means
121121
# we won't notice changes in the responses from the host that we are
122-
# mocking and our mock responses don't simulate every and all behaviour
122+
# mocking and our mock responses don't simulate every and all behavior
123123
load_mock_responses("www.hydroshare.org")
124124

125-
if not os.getenv("GITHUB_ACCESS_TOKEN"):
125+
token = os.getenv("GITHUB_ACCESS_TOKEN")
126+
if not token:
126127
load_mock_responses("api.github.com")
127128
load_mock_responses("zenodo.org")
129+
if token and token.startswith("ghs-"):
130+
# The GitHub Actions provided temporary token (secrets.github_token)
131+
# does not have access to api.github.com/gists. Due to this, we mock
132+
# such requests even if such token is provided. We recognize them by
133+
# being a server-to-server token with a ghs- prefix as compared to for
134+
# example a personal access token.
135+
#
136+
# More about github token prefixes:
137+
# https://github.blog/2021-04-05-behind-githubs-new-authentication-token-formats/#identifiable-prefixes
138+
#
139+
load_mock_responses("api.github.com.gists")
128140

129141

130142
@pytest.fixture
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"https://api.github.com/gists/8a658f7f63b13768d1e75fa2464f5092": {
3+
"body": "{\"url\":\"https://api.github.com/gists/8a658f7f63b13768d1e75fa2464f5092\",\"forks_url\":\"https://api.github.com/gists/8a658f7f63b13768d1e75fa2464f5092/forks\",\"commits_url\":\"https://api.github.com/gists/8a658f7f63b13768d1e75fa2464f5092/commits\",\"id\":\"8a658f7f63b13768d1e75fa2464f5092\",\"node_id\":\"MDQ6R2lzdDhhNjU4ZjdmNjNiMTM3NjhkMWU3NWZhMjQ2NGY1MDky\",\"git_pull_url\":\"https://gist.github.com/8a658f7f63b13768d1e75fa2464f5092.git\",\"git_push_url\":\"https://gist.github.com/8a658f7f63b13768d1e75fa2464f5092.git\",\"html_url\":\"https://gist.github.com/8a658f7f63b13768d1e75fa2464f5092\",\"files\":{\"readme.md\":{\"filename\":\"readme.md\",\"type\":\"text/markdown\",\"language\":\"Markdown\",\"raw_url\":\"https://gist.githubusercontent.com/mariusvniekerk/8a658f7f63b13768d1e75fa2464f5092/raw/2e8a619fb4f4e229bf4ed5a83172f04e33212ced/readme.md\",\"size\":46,\"truncated\":false,\"content\":\"This is a test gist for public binderhub gists\"},\"requirements.txt\":{\"filename\":\"requirements.txt\",\"type\":\"text/plain\",\"language\":\"Text\",\"raw_url\":\"https://gist.githubusercontent.com/mariusvniekerk/8a658f7f63b13768d1e75fa2464f5092/raw/bb56d9fcd8e0f0690171d1e8b5d5df7f37da3508/requirements.txt\",\"size\":24,\"truncated\":false,\"content\":\"dask\\ndistributed\\nstreamz\"}},\"public\":true,\"created_at\":\"2017-11-29T15:05:48Z\",\"updated_at\":\"2018-03-05T21:52:24Z\",\"description\":\"binderhub-test-public\",\"comments\":0,\"user\":null,\"comments_url\":\"https://api.github.com/gists/8a658f7f63b13768d1e75fa2464f5092/comments\",\"owner\":{\"login\":\"mariusvniekerk\",\"id\":73973,\"node_id\":\"MDQ6VXNlcjczOTcz\",\"avatar_url\":\"https://avatars3.githubusercontent.com/u/73973?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/mariusvniekerk\",\"html_url\":\"https://github.com/mariusvniekerk\",\"followers_url\":\"https://api.github.com/users/mariusvniekerk/followers\",\"following_url\":\"https://api.github.com/users/mariusvniekerk/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/mariusvniekerk/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/mariusvniekerk/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/mariusvniekerk/subscriptions\",\"organizations_url\":\"https://api.github.com/users/mariusvniekerk/orgs\",\"repos_url\":\"https://api.github.com/users/mariusvniekerk/repos\",\"events_url\":\"https://api.github.com/users/mariusvniekerk/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/mariusvniekerk/received_events\",\"type\":\"User\",\"site_admin\":false},\"forks\":[],\"history\":[{\"user\":{\"login\":\"mariusvniekerk\",\"id\":73973,\"node_id\":\"MDQ6VXNlcjczOTcz\",\"avatar_url\":\"https://avatars3.githubusercontent.com/u/73973?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/mariusvniekerk\",\"html_url\":\"https://github.com/mariusvniekerk\",\"followers_url\":\"https://api.github.com/users/mariusvniekerk/followers\",\"following_url\":\"https://api.github.com/users/mariusvniekerk/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/mariusvniekerk/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/mariusvniekerk/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/mariusvniekerk/subscriptions\",\"organizations_url\":\"https://api.github.com/users/mariusvniekerk/orgs\",\"repos_url\":\"https://api.github.com/users/mariusvniekerk/repos\",\"events_url\":\"https://api.github.com/users/mariusvniekerk/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/mariusvniekerk/received_events\",\"type\":\"User\",\"site_admin\":false},\"version\":\"7daa381aae8409bfe28193e2ed8f767c26371237\",\"committed_at\":\"2017-11-29T15:05:48Z\",\"change_status\":{\"total\":4,\"additions\":4,\"deletions\":0},\"url\":\"https://api.github.com/gists/8a658f7f63b13768d1e75fa2464f5092/7daa381aae8409bfe28193e2ed8f767c26371237\"}],\"truncated\":false}",
4+
"code": 200,
5+
"headers": {
6+
"Access-Control-Allow-Origin": "*",
7+
"Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset",
8+
"Cache-Control": "private, max-age=60, s-maxage=60",
9+
"Content-Encoding": "gzip",
10+
"Content-Security-Policy": "default-src 'none'",
11+
"Content-Type": "application/json; charset=utf-8",
12+
"Date": "Fri, 30 Oct 2020 08:44:15 GMT",
13+
"Etag": "W/\"e05742515eeb6b088e6562df0414ba6e42fa0866878b40c99a1340e1fd68691c\"",
14+
"Last-Modified": "Mon, 26 Oct 2020 14:26:23 GMT",
15+
"Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin",
16+
"Server": "GitHub.com",
17+
"Status": "200 OK",
18+
"Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload",
19+
"Transfer-Encoding": "chunked",
20+
"Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With,Accept-Encoding",
21+
"X-Accepted-Oauth-Scopes": "",
22+
"X-Content-Type-Options": "nosniff",
23+
"X-Frame-Options": "deny",
24+
"X-Github-Media-Type": "github.v3; format=json",
25+
"X-Github-Request-Id": "E867:B8C1:1D31738:20C49EB:5F9BD25F",
26+
"X-Http-Reason": "OK",
27+
"X-Oauth-Scopes": "public_repo",
28+
"X-Ratelimit-Limit": "5000",
29+
"X-Ratelimit-Remaining": "4926",
30+
"X-Ratelimit-Reset": "1604049898",
31+
"X-Ratelimit-Used": "74",
32+
"X-Xss-Protection": "1; mode=block"
33+
}
34+
},
35+
"https://api.github.com/gists/bd01411ea4bf4eb8135893ef237398ba": {
36+
"body": "{\"url\":\"https://api.github.com/gists/bd01411ea4bf4eb8135893ef237398ba\",\"forks_url\":\"https://api.github.com/gists/bd01411ea4bf4eb8135893ef237398ba/forks\",\"commits_url\":\"https://api.github.com/gists/bd01411ea4bf4eb8135893ef237398ba/commits\",\"id\":\"bd01411ea4bf4eb8135893ef237398ba\",\"node_id\":\"MDQ6R2lzdGJkMDE0MTFlYTRiZjRlYjgxMzU4OTNlZjIzNzM5OGJh\",\"git_pull_url\":\"https://gist.github.com/bd01411ea4bf4eb8135893ef237398ba.git\",\"git_push_url\":\"https://gist.github.com/bd01411ea4bf4eb8135893ef237398ba.git\",\"html_url\":\"https://gist.github.com/bd01411ea4bf4eb8135893ef237398ba\",\"files\":{\"readme.md\":{\"filename\":\"readme.md\",\"type\":\"text/markdown\",\"language\":\"Markdown\",\"raw_url\":\"https://gist.githubusercontent.com/mariusvniekerk/bd01411ea4bf4eb8135893ef237398ba/raw/5b77e9d6a35539ec178c3e25aadff070fe6e1c75/readme.md\",\"size\":60,\"truncated\":false,\"content\":\"This is a test file for binderhub wrt resolving secret gists\"},\"requirements.txt\":{\"filename\":\"requirements.txt\",\"type\":\"text/plain\",\"language\":\"Text\",\"raw_url\":\"https://gist.githubusercontent.com/mariusvniekerk/bd01411ea4bf4eb8135893ef237398ba/raw/bb56d9fcd8e0f0690171d1e8b5d5df7f37da3508/requirements.txt\",\"size\":24,\"truncated\":false,\"content\":\"dask\\ndistributed\\nstreamz\"}},\"public\":false,\"created_at\":\"2017-11-29T14:56:07Z\",\"updated_at\":\"2018-03-05T21:52:30Z\",\"description\":\"binderhub-test-secret\",\"comments\":0,\"user\":null,\"comments_url\":\"https://api.github.com/gists/bd01411ea4bf4eb8135893ef237398ba/comments\",\"owner\":{\"login\":\"mariusvniekerk\",\"id\":73973,\"node_id\":\"MDQ6VXNlcjczOTcz\",\"avatar_url\":\"https://avatars3.githubusercontent.com/u/73973?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/mariusvniekerk\",\"html_url\":\"https://github.com/mariusvniekerk\",\"followers_url\":\"https://api.github.com/users/mariusvniekerk/followers\",\"following_url\":\"https://api.github.com/users/mariusvniekerk/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/mariusvniekerk/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/mariusvniekerk/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/mariusvniekerk/subscriptions\",\"organizations_url\":\"https://api.github.com/users/mariusvniekerk/orgs\",\"repos_url\":\"https://api.github.com/users/mariusvniekerk/repos\",\"events_url\":\"https://api.github.com/users/mariusvniekerk/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/mariusvniekerk/received_events\",\"type\":\"User\",\"site_admin\":false},\"forks\":[],\"history\":[{\"user\":{\"login\":\"mariusvniekerk\",\"id\":73973,\"node_id\":\"MDQ6VXNlcjczOTcz\",\"avatar_url\":\"https://avatars3.githubusercontent.com/u/73973?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/mariusvniekerk\",\"html_url\":\"https://github.com/mariusvniekerk\",\"followers_url\":\"https://api.github.com/users/mariusvniekerk/followers\",\"following_url\":\"https://api.github.com/users/mariusvniekerk/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/mariusvniekerk/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/mariusvniekerk/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/mariusvniekerk/subscriptions\",\"organizations_url\":\"https://api.github.com/users/mariusvniekerk/orgs\",\"repos_url\":\"https://api.github.com/users/mariusvniekerk/repos\",\"events_url\":\"https://api.github.com/users/mariusvniekerk/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/mariusvniekerk/received_events\",\"type\":\"User\",\"site_admin\":false},\"version\":\"56b1968a071db4b234121510054ab3f903c83350\",\"committed_at\":\"2017-11-29T15:04:28Z\",\"change_status\":{\"total\":1,\"additions\":1,\"deletions\":0},\"url\":\"https://api.github.com/gists/bd01411ea4bf4eb8135893ef237398ba/56b1968a071db4b234121510054ab3f903c83350\"},{\"user\":{\"login\":\"mariusvniekerk\",\"id\":73973,\"node_id\":\"MDQ6VXNlcjczOTcz\",\"avatar_url\":\"https://avatars3.githubusercontent.com/u/73973?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/mariusvniekerk\",\"html_url\":\"https://github.com/mariusvniekerk\",\"followers_url\":\"https://api.github.com/users/mariusvniekerk/followers\",\"following_url\":\"https://api.github.com/users/mariusvniekerk/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/mariusvniekerk/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/mariusvniekerk/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/mariusvniekerk/subscriptions\",\"organizations_url\":\"https://api.github.com/users/mariusvniekerk/orgs\",\"repos_url\":\"https://api.github.com/users/mariusvniekerk/repos\",\"events_url\":\"https://api.github.com/users/mariusvniekerk/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/mariusvniekerk/received_events\",\"type\":\"User\",\"site_admin\":false},\"version\":\"72997b34f5b0d6949e9e3750889e0b3ff7b5c066\",\"committed_at\":\"2017-11-29T14:56:07Z\",\"change_status\":{\"total\":3,\"additions\":3,\"deletions\":0},\"url\":\"https://api.github.com/gists/bd01411ea4bf4eb8135893ef237398ba/72997b34f5b0d6949e9e3750889e0b3ff7b5c066\"}],\"truncated\":false}",
37+
"code": 200,
38+
"headers": {
39+
"Access-Control-Allow-Origin": "*",
40+
"Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset",
41+
"Cache-Control": "private, max-age=60, s-maxage=60",
42+
"Content-Encoding": "gzip",
43+
"Content-Security-Policy": "default-src 'none'",
44+
"Content-Type": "application/json; charset=utf-8",
45+
"Date": "Fri, 30 Oct 2020 08:44:16 GMT",
46+
"Etag": "W/\"40ccec8838b89201e96ad422ce75800f57cf148b9113bdca6f35cf782f48664c\"",
47+
"Last-Modified": "Mon, 26 Oct 2020 14:26:23 GMT",
48+
"Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin",
49+
"Server": "GitHub.com",
50+
"Status": "200 OK",
51+
"Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload",
52+
"Transfer-Encoding": "chunked",
53+
"Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With,Accept-Encoding",
54+
"X-Accepted-Oauth-Scopes": "",
55+
"X-Content-Type-Options": "nosniff",
56+
"X-Frame-Options": "deny",
57+
"X-Github-Media-Type": "github.v3; format=json",
58+
"X-Github-Request-Id": "E869:37E8:689829:750AF2:5F9BD25F",
59+
"X-Http-Reason": "OK",
60+
"X-Oauth-Scopes": "public_repo",
61+
"X-Ratelimit-Limit": "5000",
62+
"X-Ratelimit-Remaining": "4924",
63+
"X-Ratelimit-Reset": "1604049898",
64+
"X-Ratelimit-Used": "76",
65+
"X-Xss-Protection": "1; mode=block"
66+
}
67+
}
68+
}

0 commit comments

Comments
 (0)