{"record":{"id":"a4296f2fc287eb73","repo":"ThreeMammals/Ocelot","slug":"stable-release-should-happen-via-ci-cd","errorCode":null,"errorMessage":"Stable release should happen via CI/CD","messagePattern":"Stable release should happen via CI/CD","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"build.cake","lineNumber":716,"sourceCode":"\r\n\t\tdynamic release = CreateGitHubRelease();\r\n\t\tvar path = packagesDir.ToString() + @\"/**/*Ocelot.*\"; // filter out artifacts.txt and ReleaseNotes.md\r\n\t\tvar files = GetFiles(path).ToList();\r\n\t\tforeach (var file in files)\r\n\t\t{\r\n\t\t\tUploadFileToGitHubRelease(release, file);\r\n\t\t}\r\n\t\tCompleteGitHubRelease(release);\r\n\t});\r\n\r\nTask(\"EnsureStableReleaseRequirements\")\r\n    .Does(() =>\t\r\n    {\r\n\t\tInformation(\"Check if stable release...\");\r\n\r\n        if (!IsRunningInCICD())\r\n\t\t{\r\n           throw new Exception(\"Stable release should happen via CI/CD\");\r\n\t\t}\r\n\r\n\t\tInformation(\"Release is stable...\");\r\n\t});\r\n\r\nTask(\"DownloadGitHubReleaseArtifacts\")\r\n    .Does(async () =>\r\n    {\r\n\t\ttry\r\n\t\t{\r\n\t\t\t// hack to let GitHub catch up, todo - refactor to poll\r\n\t\t\tSystem.Threading.Thread.Sleep(5000);\r\n\t\t\tEnsureDirectoryExists(packagesDir);\r\n\r\n\t\t\tvar releaseUrl = \"https://api.github.com/repos/ThreeMammals/ocelot/releases/tags/\" + versioning.NuGetVersion;\r\n\t\t\tvar releaseInfo = await GetResourceAsync(releaseUrl);\r\n        \tvar assets_url = Newtonsoft.Json.Linq.JObject.Parse(releaseInfo)\r\n\t\t\t\t.Value<string>(\"assets_url\");\r","sourceCodeStart":698,"sourceCodeEnd":734,"githubUrl":"https://github.com/ThreeMammals/Ocelot/blob/d1f22d930430410bfd0233f5e9e4f92980cf7df0/build.cake#L698-L734","documentation":"The 'Release' task refuses to create a stable GitHub release when the script is not running inside the CI/CD environment (IsRunningInCICD() is false). This guard prevents developers from accidentally publishing a stable release from a local machine.","triggerScenarios":"Executing the Release/stable-release Cake task locally (dotnet cake Release) while IsRunningInCICD() detects no CI environment variables (e.g. GITHUB_ACTIONS / TeamCity env vars absent).","commonSituations":"Developer testing release tasks on a laptop; CI env var renamed so detection fails; running in a container that lacks the CI's environment variables.","solutions":["Run the stable release from the CI/CD pipeline (GitHub Actions) instead of locally.","Verify the CI environment variables that IsRunningInCICD() checks are actually set in your runner.","If you must test locally, use a pre-release/dry-run task rather than the stable release task.","Inspect IsRunningInCICD() and export the expected variable (e.g. GITHUB_ACTIONS=true) only for controlled testing."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (!IsRunningInCICD())\n{\n    Information(\"Skipping stable release: not in CI/CD.\");\n    return;\n}","typeGuard":null,"tryCatchPattern":"try { RunStableReleaseTask(); }\ncatch (Exception ex) when (ex.Message.Contains(\"CI/CD\")) { Warning(\"Stable release must run in CI; use a pre-release task locally.\"); }","preventionTips":["Never trigger stable releases manually from a workstation","Use the pipeline (GitHub Actions) for releases","Keep IsRunningInCICD()'s env-var checks in sync with your CI provider","Provide a separate dry-run/pre-release task for local testing"],"tags":["ci-cd","release","guard","environment"],"backgroundTag":"missing-env-var","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"}