{"record":{"id":"4bb6ce5585459e79","repo":"ThreeMammals/Ocelot","slug":"creategithubrelease-statuscode","errorCode":null,"errorMessage":"CreateGitHubRelease: StatusCode = ","messagePattern":"CreateGitHubRelease: StatusCode = ","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"build.cake","lineNumber":1013,"sourceCode":"\tclient.DefaultRequestHeaders.Add(\"Accept\", \"application/vnd.github+json\");\r\n\tclient.DefaultRequestHeaders.Add(\"X-GitHub-Api-Version\", \"2022-11-28\");\r\n}\r\n\r\nprivate dynamic CreateGitHubRelease()\r\n{\r\n\tvar body = ReleaseNotesAsJson();\r\n\tvar json = $\"{{ \\\"tag_name\\\": \\\"{versioning.NuGetVersion}\\\", \\\"target_commitish\\\": \\\"{versioning.BranchName}\\\", \\\"name\\\": \\\"{versioning.NuGetVersion}\\\", \\\"body\\\": \\\"{body}\\\", \\\"draft\\\": true, \\\"prerelease\\\": true, \\\"generate_release_notes\\\": false }}\";\r\n\tvar content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, \"application/json\");\r\n\r\n\tusing (var client = new System.Net.Http.HttpClient())\r\n\t{\t\r\n\t\tSetupGitHubClient(client);\r\n\t\tvar result = client.PostAsync(\"https://api.github.com/repos/ThreeMammals/Ocelot/releases\", content).Result;\r\n\t\tif (result.StatusCode != System.Net.HttpStatusCode.Created) \r\n\t\t{\r\n\t\t\tvar msg = \"CreateGitHubRelease: StatusCode = \" + result.StatusCode;\r\n\t\t\tInformation(msg);\r\n\t\t\tthrow new Exception(msg);\r\n\t\t}\r\n\t\tvar releaseData = result.Content.ReadAsStringAsync().Result;\r\n\t\tdynamic releaseJSON = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(releaseData);\r\n\t\tInformation(\"CreateGitHubRelease: Release ID is \" + releaseJSON.id);\r\n\t\treturn releaseJSON;\r\n\t}\r\n}\r\n\r\nprivate string ReleaseNotesAsJson()\r\n{\r\n\tvar body = _File_.ReadAllText(releaseNotesFile, System.Text.Encoding.UTF8);\r\n\treturn System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(body);\r\n}\r\n\r\nprivate void UploadFileToGitHubRelease(dynamic release, FilePath file)\r\n{\r\n\tvar data = _File_.ReadAllBytes(file.FullPath);\r\n\tvar content = new System.Net.Http.ByteArrayContent(data);\r","sourceCodeStart":995,"sourceCodeEnd":1031,"githubUrl":"https://github.com/ThreeMammals/Ocelot/blob/d1f22d930430410bfd0233f5e9e4f92980cf7df0/build.cake#L995-L1031","documentation":"CreateGitHubRelease POSTs to https://api.github.com/repos/ThreeMammals/Ocelot/releases and requires HTTP 201 Created. Any other status (401, 422, 403, etc.) throws this error. The detailed status is logged to build output before throwing.","triggerScenarios":"GitHub API returns non-201: invalid/expired GITHUB_TOKEN (401), missing repo scope on the token (403), validation failure like duplicate tag name or bad release body (422), or rate limiting (403/429).","commonSituations":"Token without 'repo' scope; tag_name already exists because the release task ran twice; rate-limited during busy CI hours; wrong API payload after Cake/addin upgrade.","solutions":["Read the logged 'CreateGitHubRelease: StatusCode = ...' value and the API response body for the precise cause.","401/403: regenerate the GitHub token with correct 'repo' scope and update the CI secret.","422 duplicate tag: delete the existing release/tag or skip release creation if it already exists.","429/403 rate limit: retry after the rate-limit window or use a token with higher quota.","Check https://www.githubstatus.com if 5xx statuses appear."],"exampleFix":"// before\nvar msg = \"CreateGitHubRelease: StatusCode = \" + result.StatusCode;\n// after\nvar body = await result.Content.ReadAsStringAsync();\nvar msg = $\"CreateGitHubRelease: StatusCode = {result.StatusCode}, Body = {body}\";","handlingStrategy":"retry","validationCode":"// pre-check before creating the release\nvar existing = client.GetAsync(\"https://api.github.com/repos/ThreeMammals/Ocelot/releases/tags/\" + tagName).Result;\nif (existing.StatusCode == HttpStatusCode.OK) throw new Exception($\"Release for tag {tagName} already exists\");","typeGuard":null,"tryCatchPattern":"try { var release = CreateGitHubRelease(...); }\ncatch (Exception ex) when (ex.Message.Contains(\"StatusCode = \")) { Error($\"GitHub release creation failed: {ex.Message}\"); throw; }","preventionTips":["Use a token with 'repo' scope stored in CI secrets","Check for an existing release/tag before creating (idempotency)","Log the response body, not just StatusCode","Watch GitHub API rate limits during busy CI periods"],"tags":["github-api","http","release","status-code"],"backgroundTag":"api-error-response","analyzedSha":"d1f22d930430410bfd0233f5e9e4f92980cf7df0","analyzedAt":"2026-09-12T13:50:06.067Z","contentChangedAt":"2026-09-12T13:50:06.067Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}