Terraform-aws-github-runner: Checks API for Enterprise Server에 ν•„μš”ν•œ 헀더

에 λ§Œλ“  2021λ…„ 01μ›” 19일  Β·  13μ½”λ©˜νŠΈ  Β·  좜처: philips-labs/terraform-aws-github-runner

2021-01-19T16:58:27.528Z    784f32d9-df03-522b-86b6-6a58cee71a88    ERROR   RequestError [HttpError]: If you would like to help us test the Checks API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details. 

원인 #386

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

릴리슀 0.9.1 생성

λͺ¨λ“  13 λŒ“κΈ€

μ§€κΈˆμ€ #386으둜 되돌릴 것을 μ œμ•ˆν•©λ‹ˆλ‹€.

#481에 μ˜ν•΄ 해결됨

이 였λ₯˜κ°€ 계속 λ°œμƒν•©λ‹ˆλ‹€. μ–΄μ œ #481이 λ³‘ν•©λ˜κ³  방금 릴리슀된 0.9.0 λžŒλ‹€ zip이 적용된 ν›„ 직접 λžŒλ‹€λ₯Ό λ§Œλ“€λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€.

2021-01-21T18:33:14.240Z    66df9451-e423-5303-ab9e-ccd22f36bbf2    ERROR   RequestError [HttpError]: If you would like to help us test the Checks API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.
    at /var/task/index.js:2756:23
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {
  status: 415,
  headers: {
    'access-control-allow-origin': '*',
    'access-control-expose-headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset',
    'alt-svc': 'clear',
    connection: 'close',
    'content-length': '288',
    'content-security-policy': "default-src 'none'",
    'content-type': 'application/json; charset=utf-8',
    date: 'Thu, 21 Jan 2021 18:33:14 GMT',
    'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin',
    server: 'GitHub.com',
    status: '415 Unsupported Media Type',
    'strict-transport-security': 'max-age=31536000; includeSubdomains',
    via: '1.1 google',
    'x-content-type-options': 'nosniff',
    'x-frame-options': 'deny',
    'x-github-enterprise-version': '2.22.6',
    'x-github-media-type': 'github.v3; format=json',
    'x-github-request-id': '197c6068-c1d5-43d2-9ed4-bb0d409b2500',
    'x-ratelimit-limit': '12500',
    'x-ratelimit-remaining': '12036',
    'x-ratelimit-reset': '1611255703',
    'x-runtime-rack': '0.038530',
    'x-xss-protection': '1; mode=block'
  },
  request: {
    method: 'GET',
    url: 'https://github.example.com/api/v3/repos/acme/somerepo/check-runs/68859',
    headers: {
      accept: 'application/vnd.github.v3+json',
      'user-agent': 'octokit-rest.js/18.0.12 octokit-core.js/3.2.4 Node.js/12.20.1 (linux; x64)',
      authorization: 'token [REDACTED]'
    },
    request: { hook: [Function: bound bound register] }
  },
  documentation_url: 'https://docs.github.com/enterprise/2.22/rest/reference/checks#get-a-check-run'
}
server: 'GitHub.com',

μ—¬μ „νžˆ Lambdas에 λŒ€ν•΄ 이전 컀밋을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆμš”. μ—¬κΈ° Githubμ—μ„œ λ‹€μš΄λ‘œλ“œν•  수 μžˆλŠ” λžŒλ‹€ v0.9.0을 μ‹€ν–‰ν•˜κ³  μžˆλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€. server: 'GitHub.com' ν—€λ”λŠ” GitHub Enterpriseμ—μ„œ λ°˜ν™˜λ©λ‹ˆλ‹€.

무엇 헀더 μ΄μœ κ°€ 될 수 Accept: application/vnd.github.v3+json μ—¬μ „νžˆ λŒ€μ‹ μ— μ „μ†‘λ˜κ³ μžˆλŠ” application/vnd.github.antiope-preview+json ? ghesApiUrl λŠ” https://github.com/philips-labs/terraform-aws-github-runner/blob/v0.9.0/modules/runners/lambdas/runners/src/scale-runners/에 μ„€μ •λ˜μ–΄

@buamod λ™μΌν•œ server 헀더λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. 그게 정상인 것 κ°™μ£ ?

@samuelb v0.9.0 에 λŒ€ν•œ μˆ˜μ • 사항에 λŒ€ν•œ ν…ŒμŠ€νŠΈ μˆ˜μ •μ„ λ†“μ³€μœΌλ―€λ‘œ λ‘œμ»¬μ—μ„œ gh-auth.test.ts L120을 μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.

request: mockedRequestInterface.defaults({ baseUrl: githubServerUrl, mediaType: { previews: ['antiope'] } }),

ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν–ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ octokitμ—μ„œ 디버그 λ₯Ό log: console, κ°€ gh-auth.ts L11 에 μ‚½μž…λ˜μ—ˆκ³ , 재컴파일되고, μ—…λ‘œλ“œλ˜μ–΄ λ‹€μŒκ³Ό 같이 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

2021-01-22T13:33:31.960Z    a3e98909-2b21-52b0-9e5c-d18dfd7d23cf    DEBUG   request {
  method: 'GET',
  baseUrl: 'https://githubtest.internal/api/v3',
  headers: {
    accept: 'application/vnd.github.v3+json',
    'user-agent': 'octokit-rest.js/18.0.9 octokit-core.js/3.2.4 Node.js/12.19.0 (linux; x64)'
  },
  mediaType: { format: '', previews: [ 'antiope' ] },
  request: { hook: [Function: bound bound register] },
  url: '/repos/{owner}/{repo}/check-runs/{check_run_id}',
  check_run_id: 845,
  owner: 'ActionsTest',
  repo: 'repo-test'
}

ν—€λ”λŠ” μ—¬μ „νžˆ μ „λ‹¬λ˜μ§€λ§Œ 이제 μƒˆλ‘œμš΄ mediaType κ°€ μ„€μ •λ©λ‹ˆλ‹€.

log: console, μΆ”κ°€ν•˜λ©΄ λ‹€μŒκ³Ό 같이 ν‘œμ‹œλ©λ‹ˆλ‹€.

021-01-22T15:15:21.285Z 68d40d07-e072-55a8-b924-55830e47ae02    DEBUG   request {
  method: 'GET',
  baseUrl: 'https://github.example.com/api/v3',
  headers: {
    accept: 'application/vnd.github.v3+json',
    'user-agent': 'octokit-rest.js/18.0.12 octokit-core.js/3.2.4 Node.js/12.20.1 (linux; x64)'
  },
  mediaType: { format: '', previews: [] },
  request: { hook: [Function: bound bound register] },
  url: '/repos/{owner}/{repo}/check-runs/{check_run_id}',
  check_run_id: 69556,
  owner: 'acme',
  repo: 'somerepo'
}

이 λ―Έλ””μ–΄ μœ ν˜•μ΄ μ„€μ •λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
λ‚˜λŠ” 체크 아웃 였λ₯Έμͺ½ 지점을 두 번, μ„Έ 번 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것을 μ‹ μ„ ν•˜κ²Œ ν™•μΈν•˜κ³  λžŒλ‹€ 도컀 이미지 등을 μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.

방금 μ‚¬μš©μž μ—μ΄μ „νŠΈμ—μ„œ octokit-rest.js 버전이 κ·€ν•˜μ™€ λ‹€λ¦…λ‹ˆλ‹€. 이전에 #386을 λ˜λŒλ¦¬λŠ” 것이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” ν•œ 가지 μ˜΅μ…˜μ΄ 될 것이라고 μ œμ•ˆν–ˆμŠ΅λ‹ˆλ‹€. #481이 μ‹€μ œλ‘œ κ·Έ 문제λ₯Ό ν•΄κ²°ν•˜μ§€ λͺ»ν–ˆλŠ”데 octokit-rest.js/18.0.9λ₯Ό μ‚¬μš©ν•˜μ—¬ λΉŒλ“œν•  λ•Œ μ‹€μˆ˜λ‘œ λ¬Έμ œκ°€ ν•΄κ²°λœ κ²ƒμœΌλ‘œ κ°„μ£Όν–ˆμ„ 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚΄ λ§ˆμ§€λ§‰ 컴파일이 μΊμ‹œλœ 라이브러리λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‹Ήμ‹ κ³Ό 같은 κ²°κ³Όλ₯Ό μ–»μ—ˆκ³  λ‹€μ‹œ μ»΄νŒŒμΌν–ˆμŠ΅λ‹ˆλ‹€.

이 μˆ˜μ •μ€ μ €μ—κ²Œ νš¨κ³Όμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€.
( gh-auth.ts L8)

export async function createOctoClient(token: string, ghesApiUrl: string = ''): Promise<Octokit> {
  const ocktokitOptions: OctokitOptions = {
    auth: token,
    log: console,
  };
  if (ghesApiUrl) {
    ocktokitOptions.baseUrl = ghesApiUrl;
    ocktokitOptions.previews = ['antiope'];
  }
  return new Octokit(ocktokitOptions);
}

이것이 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ πŸ‘

iff --git a/modules/runners/lambdas/runners/src/scale-runners/gh-auth.ts b/modules/runners/lambdas/runners/src/scale-runners/gh-auth.ts
index 01dc3cf..ae3720e 100644
--- a/modules/runners/lambdas/runners/src/scale-runners/gh-auth.ts
+++ b/modules/runners/lambdas/runners/src/scale-runners/gh-auth.ts
@@ -11,6 +11,7 @@ export async function createOctoClient(token: string, ghesApiUrl: string = ''):
   };
   if (ghesApiUrl) {
     ocktokitOptions.baseUrl = ghesApiUrl;
+    ocktokitOptions.previews = ['antiope'];
   }
   return new Octokit(ocktokitOptions);
 }
@@ -51,7 +52,6 @@ export async function createGithubAuth(
   if (ghesApiUrl) {
     authOptions.request = request.defaults({
       baseUrl: ghesApiUrl,
-      mediaType: { previews: ['antiope'] }
     });
   }
   return await createAppAuth(authOptions)({ type: authType });

CloudWatchμ—μ„œ:

2021-01-22T16:34:00.464Z    750ac5d2-fd1a-52ff-a26a-9d57fdbb2281    DEBUG   request {
  method: 'GET',
  baseUrl: 'https://github.example.com/api/v3',
  headers: {
    accept: 'application/vnd.github.v3+json',
    'user-agent': 'octokit-rest.js/18.0.12 octokit-core.js/3.2.4 Node.js/12.20.1 (linux; x64)'
  },
  mediaType: { format: '', previews: [ 'antiope' ] },
  request: { hook: [Function: bound bound register] },
  url: '/repos/{owner}/{repo}/check-runs/{check_run_id}',
  check_run_id: 69599,
  owner: 'acme',
  repo: 'somerepo'
}

2021-01-22T16:34:00.841Z    750ac5d2-fd1a-52ff-a26a-9d57fdbb2281    INFO    GET /repos/acme/somerepo/check-runs/69599 - 200 in 377ms

μ˜€ν”ˆ #482

릴리슀 0.9.1 생성

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰