{"license":"CC BY 4.0","licenseUrl":"https://creativecommons.org/licenses/by/4.0/","attribution":"Time to Bail (https://timetobail.com)","generatedAt":"2026-10-20T16:26:00.973Z","count":114,"rules":[{"ruleId":"vertex-ai-gemini-2-5","eventId":"evt_vertex_ai_gemini_2_5_retirement_2026","slug":"vertex-ai-gemini-2-5-retirement-2026","title":"Gemini 2.5 model on Vertex AI","event":"Gemini 2.5 models retire on Vertex AI on October 20, 2026","gateAt":"2026-10-20","daysLeft":0,"verdict":"Act","fix":["Point your app to a model Google lists as the upgrade, such as `gemini-3.8-flash`.","Test the features you need most.","Deploy the change as you usually do."],"url":"https://timetobail.com/e/vertex-ai-gemini-2-5-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])gemini-2\\.5-(?:pro|flash|flash-lite)(?![\\w.-])","fileRequires":"vertex|aiplatform","fileFlags":"i","hint":"Point your app to a newer model Google lists, such as gemini-3.8-flash, and test it."},{"ruleId":"gemini-api-veo-omni-previews","eventId":"evt_gemini_api_veo_omni_previews_shutdown_2026","slug":"gemini-api-veo-omni-previews-shutdown-2026","title":"Gemini API Veo 3.1 or Omni Flash preview","event":"Gemini API Veo 3.1 and Omni Flash previews end October 22, 2026","gateAt":"2026-10-22","daysLeft":2,"verdict":"Act","fix":["Change the model to `gemini-omni-1.1-flash`.","Check the Gemini API deprecations page for other dates."],"url":"https://timetobail.com/e/gemini-api-veo-omni-previews-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:veo-3\\.1-generate-preview|veo-3\\.1-fast-generate-preview|veo-3\\.1-lite-generate-preview|gemini-omni-flash-preview)(?![\\w.-])","hint":"Change the model to gemini-omni-1.1-flash before October 22, 2026."},{"ruleId":"gke-1-31","eventId":"evt_gke_1_31_end_of_extended_support_2026","slug":"gke-1-31-end-of-extended-support-2026","title":"GKE cluster on 1.31","event":"GKE 1.31 extended support ends October 22, 2026","gateAt":"2026-10-22","daysLeft":2,"verdict":"Act","fix":["Upgrade the control plane yourself first: `gcloud container clusters upgrade CLUSTER_NAME --master --location=CONTROL_PLANE_LOCATION`","Then upgrade each node pool: `gcloud container clusters upgrade CLUSTER_NAME --node-pool=NODE_POOL_NAME --location=CONTROL_PLANE_LOCATION`"],"url":"https://timetobail.com/e/gke-1-31-end-of-extended-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:min_master_version|kubernetes_version|node_version|version)\\s*=\\s*\"1\\.31(?:\\.\\d+(?:-gke\\.\\d+)?)?\"","fileRequires":"google_container_cluster|google_container_node_pool|terraform-google-modules/kubernetes-engine","hint":"Upgrade the control plane, then each node pool, to 1.32 or newer before GKE does it for you."},{"ruleId":"together-ai-llama-3-3-deepseek","eventId":"evt_together_ai_llama_3_3_deepseek_removal_2026","slug":"together-ai-llama-3-3-deepseek-removal-2026","title":"Together AI serverless model removed Oct 22","event":"Together AI drops Llama-3.3-70B-Instruct-Turbo on October 22, 2026","gateAt":"2026-10-22","daysLeft":2,"verdict":"Act","fix":["Change the model to `meta-models/Muse-Glimmer-30B` or `deepseek-ai/DeepSeek-V4.1-Flash`.","Or run the old model on an on-demand dedicated endpoint.","Watch error rates, speed and cost after the switch."],"url":"https://timetobail.com/e/together-ai-llama-3-3-deepseek-removal-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:meta-llama/Llama-3\\.3-70B-Instruct-Turbo|deepseek-ai/DeepSeek-V4-Flash-0731)(?![\\w.-])","fileRequires":"together","fileFlags":"i","hint":"Switch to meta-models/Muse-Glimmer-30B or deepseek-ai/DeepSeek-V4.1-Flash, or run the old model on a dedicated endpoint."},{"ruleId":"gemini-api-deep-research-pro-preview","eventId":"evt_gemini_api_deep_research_pro_preview_shutdown_2026","slug":"gemini-api-deep-research-pro-preview-shutdown-2026","title":"Gemini Deep Research agent pro-preview-12-2025","event":"Gemini API: old Deep Research agent shuts down October 23, 2026","gateAt":"2026-10-23","daysLeft":3,"verdict":"Act","fix":["In `interactions.create`, set `agent` to `deep-research-preview-04-2026` or `deep-research-max-preview-04-2026`."],"url":"https://timetobail.com/e/gemini-api-deep-research-pro-preview-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:deep-research-pro-preview-12-2025)(?![\\w.-])","hint":"Set agent to deep-research-preview-04-2026 or deep-research-max-preview-04-2026 in interactions.create."},{"ruleId":"openai-legacy-models-code","eventId":"evt_openai_legacy_models_shutdown_2026","slug":"openai-legacy-models-shutdown-2026","title":"OpenAI model shut down Oct 23","event":"OpenAI shuts down gpt-4, gpt-3.5-turbo, o1 and o4-mini on October 23","gateAt":"2026-10-23","daysLeft":3,"verdict":"Act","fix":["Change the model name to its substitute. Most go to `gpt-5.6-sol` or `gpt-5.6-terra`. `gpt-4.1-nano` goes to `gpt-5.6-luna`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`.","Need an old model for longer? OpenAI says to ask its sales team about dedicated capacity."],"url":"https://timetobail.com/e/openai-legacy-models-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"([\"'\\x60])(?:gpt-3\\.5-turbo(?:-0125|-completions)?|gpt-4(?:-0613)?(?:-completions)?|gpt-4-1106-preview|gpt-4-turbo(?:-2024-04-09|-completions)?|gpt-4\\.1-nano(?:-2025-04-14)?|gpt-4o-2024-05-13|gpt-image-1)\\1","exclude":"encoding_for_model|tiktoken|get_encoding","hint":"Change the model name: most go to gpt-5.6-sol or gpt-5.6-terra; gpt-4.1-nano goes to gpt-5.6-luna."},{"ruleId":"openai-legacy-models-config","eventId":"evt_openai_legacy_models_shutdown_2026","slug":"openai-legacy-models-shutdown-2026","title":"OpenAI model shut down Oct 23","event":"OpenAI shuts down gpt-4, gpt-3.5-turbo, o1 and o4-mini on October 23","gateAt":"2026-10-23","daysLeft":3,"verdict":"Act","fix":["Change the model name to its substitute. Most go to `gpt-5.6-sol` or `gpt-5.6-terra`. `gpt-4.1-nano` goes to `gpt-5.6-luna`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`.","Need an old model for longer? OpenAI says to ask its sales team about dedicated capacity."],"url":"https://timetobail.com/e/openai-legacy-models-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"^[ \\t]*[\"']?[\\w.-]*model[\\w.-]*[\"']?[ \\t]*[:=][ \\t]*[\"']?(?:gpt-3\\.5-turbo(?:-0125|-completions)?|gpt-4(?:-0613)?(?:-completions)?|gpt-4-1106-preview|gpt-4-turbo(?:-2024-04-09|-completions)?|gpt-4\\.1-nano(?:-2025-04-14)?|gpt-4o-2024-05-13|gpt-image-1|o1(?:-2024-12-17)?|o1-pro(?:-2025-03-19)?|o3-mini(?:-2025-01-31)?|o4-mini(?:-2025-04-16)?)[\"']?[ \\t]*(?:#.*)?\\r?$","flags":"i","hint":"Change the model name: most go to gpt-5.6-sol or gpt-5.6-terra; gpt-4.1-nano goes to gpt-5.6-luna."},{"ruleId":"openai-legacy-o-models-code","eventId":"evt_openai_legacy_models_shutdown_2026","slug":"openai-legacy-models-shutdown-2026","title":"OpenAI o-model shut down Oct 23","event":"OpenAI shuts down gpt-4, gpt-3.5-turbo, o1 and o4-mini on October 23","gateAt":"2026-10-23","daysLeft":3,"verdict":"Act","fix":["Change the model name to its substitute. Most go to `gpt-5.6-sol` or `gpt-5.6-terra`. `gpt-4.1-nano` goes to `gpt-5.6-luna`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`.","Need an old model for longer? OpenAI says to ask its sales team about dedicated capacity."],"url":"https://timetobail.com/e/openai-legacy-models-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"([\"'\\x60])(?:o1(?:-2024-12-17)?|o1-pro(?:-2025-03-19)?|o3-mini(?:-2025-01-31)?|o4-mini(?:-2025-04-16)?)\\1","fileRequires":"openai","fileExcludes":"azure","fileFlags":"i","hint":"Change o1, o1-pro and o3-mini to gpt-5.6-sol, and o4-mini to gpt-5.6-terra."},{"ruleId":"amazon-pinpoint-sdk","eventId":"evt_amazon_pinpoint_end_of_support_2026","slug":"amazon-pinpoint-end-of-support-2026","title":"Pinpoint campaigns, segments or endpoints","event":"Amazon Pinpoint campaigns and segments end October 30, 2026","gateAt":"2026-10-30","daysLeft":10,"verdict":"Bail","fix":["Export your endpoints first: Make a segment with no filters, then export it to S3 or your computer."],"url":"https://timetobail.com/e/amazon-pinpoint-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{ts,js,mjs,cjs,py}"],"pattern":"\\b(?:Create|Update|Delete)(?:Campaign|Segment|Journey|Endpoint)Command\\b|\\.(?:create|update)_(?:campaign|segment|journey|endpoint)\\(","fileRequires":"@aws-sdk/client-pinpoint[\"']|\\bclient\\(\\s*[\"']pinpoint[\"']","hint":"Export your endpoints, then move campaigns to Connect outbound campaigns and email to Amazon SES."},{"ruleId":"amazon-pinpoint-terraform","eventId":"evt_amazon_pinpoint_end_of_support_2026","slug":"amazon-pinpoint-end-of-support-2026","title":"Amazon Pinpoint project","event":"Amazon Pinpoint campaigns and segments end October 30, 2026","gateAt":"2026-10-30","daysLeft":10,"verdict":"Bail","fix":["Export your endpoints first: Make a segment with no filters, then export it to S3 or your computer."],"url":"https://timetobail.com/e/amazon-pinpoint-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"^[ \\t]*resource\\s+\"aws_pinpoint_(?:app|email_template|event_stream)\"","hint":"Export your endpoints, then move campaigns to Connect outbound campaigns and email to Amazon SES."},{"ruleId":"circleci-xcode-removed-oct-2026","eventId":"evt_circleci_xcode_images_removal_2026","slug":"circleci-xcode-images-removal-2026","title":"CircleCI Xcode image removed Oct 30","event":"CircleCI removes old Xcode images on October 30, 2026","gateAt":"2026-10-30","daysLeft":10,"verdict":"Act","fix":["Find the old versions: Search .circleci/config.yml for xcode: with these versions."],"url":"https://timetobail.com/e/circleci-xcode-images-removal-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":[".circleci/**/*.{yml,yaml}"],"pattern":"\\bxcode:[ \\t]*[\"']?(?:14\\.3\\.1|26\\.3\\.0|26\\.2\\.0|26\\.1\\.1)[\"']?(?![\\w.])","hint":"Set the xcode key to a newer Xcode image that CircleCI still lists."},{"ruleId":"cloud-functions-nodejs-20","eventId":"evt_cloud_functions_nodejs_20_decommission_2026","slug":"cloud-functions-nodejs-20-decommission-2026","title":"Cloud Run functions on nodejs20","event":"Node.js 20 functions on Google Cloud: decommissioned October 30, 2026","gateAt":"2026-10-30","daysLeft":10,"verdict":"Act","fix":["Set the runtime ID to `nodejs22` or `nodejs24`, then deploy again.","Pick `nodejs24` for longer support. Node.js 24 is decommissioned October 31, 2028, and Node.js 22 on October 31, 2027."],"url":"https://timetobail.com/e/cloud-functions-nodejs-20-decommission-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","firebase.json","package.json","*.{sh,yml,yaml}","Makefile"],"pattern":"--runtime[= ]nodejs20(?![\\w.])|\\bruntime\\s*=\\s*\"nodejs20\"|\"runtime\"\\s*:\\s*\"nodejs20\"|\\bruntime:[ \\t]*[\"']?nodejs20[\"']?[ \\t]*\\r?$","fileRequires":"google_cloudfunctions|gcloud functions|\"functions\"|deploy-cloud-functions","hint":"Set the runtime to nodejs22 or nodejs24 and deploy each function again."},{"ruleId":"aws-lambda-python-3-10","eventId":"evt_aws_lambda_python_3_10_deprecation_2026","slug":"aws-lambda-python-3-10-deprecation-2026","title":"Lambda runtime python3.10","event":"AWS Lambda Python 3.10 runtime deprecated October 31, 2026","gateAt":"2026-10-31","daysLeft":11,"verdict":"Act","fix":["Find your `python3.10` functions. Trusted Advisor lists them under AWS Lambda Functions Using Deprecated Runtimes.","Change the runtime to `python3.12`, `python3.13` or `python3.14`. Test it before you ship.","Use versions and aliases, so you can roll back.","Finish before July 29, 2027 (no new functions) and August 31, 2027 (no updates)."],"url":"https://timetobail.com/e/aws-lambda-python-3-10-deprecation-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["serverless.{yml,yaml}","template.{yml,yaml,json}","*.template.{yml,yaml,json}","*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\b[Rr]untime[\"']?\\s*[:=]\\s*[\"']?python3\\.10(?![\\d.])|\\bRuntime[._]PYTHON_3_10\\b","hint":"Set the runtime to python3.12, python3.13 or python3.14, rebuild layers and test before you deploy."},{"ruleId":"mistral-zai-glm-5-2","eventId":"evt_mistral_zai_glm_5_2_retirement_2026","slug":"mistral-zai-glm-5-2-retirement-2026","title":"Z.ai GLM 5.2 on Mistral","event":"Mistral retires Z.ai GLM 5.2 (zai-glm-5-2) on October 31, 2026","gateAt":"2026-10-31","daysLeft":11,"verdict":"Act","fix":["Change the model to `zai-glm-5-3`."],"url":"https://timetobail.com/e/mistral-zai-glm-5-2-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"(?<![\\w.-])(?:zai-glm-5-2)(?![\\w.-])","fileRequires":"mistral","fileFlags":"i","hint":"Change the model to zai-glm-5-3 before October 31, 2026."},{"ruleId":"heroku-22-stack","eventId":"evt_heroku_22_stack_end_of_life_2026","slug":"heroku-22-stack-end-of-life-2026","title":"Heroku stack heroku-22","event":"Heroku-22 stack: builds start failing November 1, 2026","gateAt":"2026-11-01","daysLeft":12,"verdict":"Act","fix":["Try the new stack on a test or staging app first.","Set the stack: `heroku stack:set heroku-26 -a <app name>` (or `heroku-24`).","Build again: `git commit --allow-empty -m \"Upgrading to heroku-26\"`, then `git push heroku main`.","Set `\"stack\": \"heroku-26\"` in app.json, so Review Apps and Heroku CI use it too."],"url":"https://timetobail.com/e/heroku-22-stack-end-of-life-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["app.json","heroku.yml"],"pattern":"\"stack\"\\s*:\\s*\"heroku-22\"|\\bstack:[ \\t]*[\"']?heroku-22\\b","hint":"Set \"stack\": \"heroku-26\" (or heroku-24) and run heroku stack:set for each app, then build again."},{"ruleId":"azure-pipelines-macos-14","eventId":"evt_github_actions_macos_14_retirement_2026","slug":"github-actions-macos-14-retirement-2026","title":"Azure Pipelines vmImage macOS-14","event":"GitHub Actions macos-14 runners retire November 2, 2026","gateAt":"2026-11-02","daysLeft":13,"verdict":"Act","fix":["Search `.github/workflows` for `runs-on: macos-14`.","Change `macos-14` to `macos-latest`, `macos-15` or `macos-26`.","For large runners, use `macos-15-large`. For xlarge, use `macos-15-xlarge` or `macos-26-xlarge`."],"url":"https://timetobail.com/e/github-actions-macos-14-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["azure-pipelines*.{yml,yaml}",".azure-pipelines/**/*.{yml,yaml}",".azuredevops/**/*.{yml,yaml}",".pipelines/**/*.{yml,yaml}"],"pattern":"\\bvmImage[\"']?\\s*:\\s*[\"']?macos-14[\"']?(?![\\w.-])","flags":"i","hint":"Set vmImage to macOS-15, macOS-26 or macOS-latest; macOS-14 is unsupported after November 2, 2026."},{"ruleId":"github-actions-macos-14","eventId":"evt_github_actions_macos_14_retirement_2026","slug":"github-actions-macos-14-retirement-2026","title":"GitHub Actions runner macos-14","event":"GitHub Actions macos-14 runners retire November 2, 2026","gateAt":"2026-11-02","daysLeft":13,"verdict":"Act","fix":["Search `.github/workflows` for `runs-on: macos-14`.","Change `macos-14` to `macos-latest`, `macos-15` or `macos-26`.","For large runners, use `macos-15-large`. For xlarge, use `macos-15-xlarge` or `macos-26-xlarge`."],"url":"https://timetobail.com/e/github-actions-macos-14-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":[".github/workflows/*.{yml,yaml}"],"pattern":"(?<![\\w.-])macos-14(?:-large|-xlarge)?(?![\\w.-])","hint":"Change the runner label to macos-15, macos-26 or macos-latest (keep -large or -xlarge if you use them)."},{"ruleId":"opensearch-legacy-versions","eventId":"evt_amazon_opensearch_legacy_extended_support_2026","slug":"amazon-opensearch-legacy-extended-support-2026","title":"OpenSearch Service legacy version","event":"OpenSearch Service: old versions cost more from November 7, 2026","gateAt":"2026-11-07","daysLeft":18,"verdict":"Act","fix":["Check the version of each domain: In the OpenSearch Service console, list your domains and their engine versions."],"url":"https://timetobail.com/e/amazon-opensearch-legacy-extended-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{yml,yaml,json}","*.{ts,js,py,java,go,cs}"],"pattern":"\\b(?:Elasticsearch_(?:1\\.5|2\\.3|5\\.[1-5]|6\\.[0-7]|7\\.[1-8])|OpenSearch_(?:1\\.[0-2]|2\\.[3-9]))(?![\\d.])|\\bEngineVersion\\.(?:ELASTICSEARCH_(?:1_5|2_3|5_[1-5]|6_[0-7]|7_[1-8])|OPENSEARCH_(?:1_[0-2]|2_[3-9]))(?![\\d_])|\\belasticsearch_version\\s*=\\s*\"(?:1\\.5|2\\.3|5\\.[1-5]|6\\.[0-7]|7\\.[1-8])\"","hint":"Upgrade the domain to the latest OpenSearch version to stop the Extended Support charge."},{"ruleId":"aws-lambda-dotnet-8","eventId":"evt_aws_lambda_dotnet_8_deprecation_2026","slug":"aws-lambda-dotnet-8-deprecation-2026","title":"Lambda runtime dotnet8","event":"AWS Lambda .NET 8 runtime deprecated November 10, 2026","gateAt":"2026-11-10","daysLeft":21,"verdict":"Act","fix":["Find your `dotnet8` functions: `aws lambda list-functions --function-version ALL --region us-east-1 --output text --query \"Functions[?Runtime=='dotnet8'].FunctionArn\"`. Run it in each region.","Change the runtime to `dotnet10`. Test it before you ship.","Use versions and aliases, so you can roll back.","Finish before July 29, 2027 (no new functions) and August 31, 2027 (no updates)."],"url":"https://timetobail.com/e/aws-lambda-dotnet-8-deprecation-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["serverless.{yml,yaml}","template.{yml,yaml,json}","*.template.{yml,yaml,json}","*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\b[Rr]untime[\\\"']?\\s*[:=]\\s*[\\\"']?dotnet8(?![\\w.])|\\bRuntime[._]DOTNET_8\\b","fileExcludes":"google_cloudfunctions|gcloud functions|google_app_engine","hint":"Set the runtime to dotnet10, build for .NET 10 and test before you deploy."},{"ruleId":"azure-functions-in-process","eventId":"evt_azure_functions_in_process_end_of_support_2026","slug":"azure-functions-in-process-end-of-support-2026","title":"Azure Functions in-process (dotnet)","event":"Azure Functions in-process model support ends November 10, 2026","gateAt":"2026-11-10","daysLeft":21,"verdict":"Act","fix":["Find in-process apps: Look for function apps with FUNCTIONS_WORKER_RUNTIME set to dotnet. Microsoft gives a PowerShell script for this."],"url":"https://timetobail.com/e/azure-functions-in-process-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.json","*.tf","*.bicep","*.{yml,yaml}","*.{sh,ps1}"],"pattern":"FUNCTIONS_WORKER_RUNTIME[\"']?\\s*[,:=]?\\s*(?:[\"']?value[\"']?\\s*:\\s*)?[\"']?dotnet(?![\\w-])","hint":"Move the app to the isolated worker model on .NET 10 and set FUNCTIONS_WORKER_RUNTIME to dotnet-isolated."},{"ruleId":"azure-functions-powershell-7-4","eventId":"evt_azure_functions_powershell_7_4_end_of_support_2026","slug":"azure-functions-powershell-7-4-end-of-support-2026","title":"Azure Functions on PowerShell 7.4","event":"Azure Functions PowerShell 7.4 support ends November 10, 2026","gateAt":"2026-11-10","daysLeft":21,"verdict":"Act","fix":["Find apps on PowerShell 7.4: Check the PowerShell version in each function app's configuration."],"url":"https://timetobail.com/e/azure-functions-powershell-7-4-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.json","*.tf","*.bicep","*.{yml,yaml}","*.{sh,ps1}"],"pattern":"\\b(?:powerShellVersion|powershell_core_version)[\\\"']?\\s*[:=]\\s*[\\\"']~?7\\.4[\\\"']|linuxFxVersion[\\\"']?\\s*[:=]\\s*[\\\"']PowerShell\\|7\\.4[\\\"']|--powershell-version[= ][\\\"']?7\\.4\\b","flags":"i","hint":"Move the function app to PowerShell 7.6. On Linux Consumption, move to Flex Consumption first."},{"ruleId":"dotnet-8-9-image","eventId":"evt_dotnet_8_9_end_of_support_2026","slug":"dotnet-8-9-end-of-support-2026","title":".NET 8 or 9 container image","event":".NET 8 and .NET 9 end of support: November 10, 2026","gateAt":"2026-11-10","daysLeft":21,"verdict":"Act","fix":["Find apps on .NET 8 and 9: Check the TargetFramework in each project file. Look for net8.0 and net9.0."],"url":"https://timetobail.com/e/dotnet-8-9-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["Dockerfile","*.Dockerfile","Dockerfile.*","*.{yml,yaml}"],"pattern":"mcr\\.microsoft\\.com/dotnet/(?:aspnet|runtime|runtime-deps|sdk):[89]\\.0(?!\\d)","hint":"Use the .NET 10 images (tag 10.0) and set TargetFramework to net10.0."},{"ruleId":"dotnet-8-9-project","eventId":"evt_dotnet_8_9_end_of_support_2026","slug":"dotnet-8-9-end-of-support-2026","title":".NET 8 or 9 target framework","event":".NET 8 and .NET 9 end of support: November 10, 2026","gateAt":"2026-11-10","daysLeft":21,"verdict":"Act","fix":["Find apps on .NET 8 and 9: Check the TargetFramework in each project file. Look for net8.0 and net9.0."],"url":"https://timetobail.com/e/dotnet-8-9-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{csproj,fsproj,vbproj}","Directory.Build.props","Directory.Build.targets"],"pattern":"<TargetFrameworks?>[^<]*?(?<![\\w.])net[89]\\.0(?!\\d)","exclude":"net1\\d\\.\\d","hint":"Set TargetFramework to net10.0, update NuGet packages and build with the .NET 10 SDK."},{"ruleId":"dotnet-8-9-sdk","eventId":"evt_dotnet_8_9_end_of_support_2026","slug":"dotnet-8-9-end-of-support-2026","title":".NET 8 or 9 SDK pinned","event":".NET 8 and .NET 9 end of support: November 10, 2026","gateAt":"2026-11-10","daysLeft":21,"verdict":"Act","fix":["Find apps on .NET 8 and 9: Check the TargetFramework in each project file. Look for net8.0 and net9.0."],"url":"https://timetobail.com/e/dotnet-8-9-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["global.json"],"pattern":"\"version\"\\s*:\\s*\"[89]\\.\\d+\\.\\d+","fileRequires":"\"sdk\"","hint":"Pin a .NET 10 SDK in global.json and set TargetFramework to net10.0."},{"ruleId":"bitbucket-ssh-host","eventId":"evt_bitbucket_cloud_ssh_host_change_2026","slug":"bitbucket-cloud-ssh-host-change-2026","title":"SSH to bitbucket.org","event":"Bitbucket Cloud SSH moves to ssh.bitbucket.org by November 12, 2026","gateAt":"2026-11-12","daysLeft":23,"verdict":"Act","fix":["Run `git remote -v` in each repo. Look for `git@bitbucket.org:`.","Switch it: `git remote set-url origin git@ssh.bitbucket.org:<workspace>/<repo>.git`","On the first connect, check the host key fingerprint against the list Atlassian publishes, then type yes. In CI, add the keys first: `curl -s https://bitbucket.org/site/ssh | sed 's/bitbucket.org/ssh.bitbucket.org/' >> ~/.ssh/known_hosts`","Change SSH links in CI and scripts. If a firewall limits SSH, allow ssh.bitbucket.org on port 22."],"url":"https://timetobail.com/e/bitbucket-cloud-ssh-host-change-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":[".gitmodules","*.{yml,yaml,sh,bash,ps1,tf}","Makefile","package.json","requirements*.txt","Gemfile","composer.json","Cargo.toml","Podfile","Dockerfile","*.Dockerfile","Dockerfile.*"],"pattern":"\\bgit@bitbucket\\.org[:/]|ssh://(?:[\\w.-]+@)?bitbucket\\.org\\b|ssh-keyscan\\b[^\\n#]*?[ \\t]bitbucket\\.org\\b","hint":"Use git@ssh.bitbucket.org:<workspace>/<repo>.git and add the new host key to known_hosts."},{"ruleId":"bedrock-claude-3-5-sonnet-regions","eventId":"evt_bedrock_claude_3_models_eol_2026","slug":"bedrock-claude-3-models-eol-2026","title":"Claude 3.5 Sonnet on Bedrock (Region ends Nov 13)","event":"Bedrock ends Claude 3.x models in some Regions on November 13, 2026","gateAt":"2026-11-13","daysLeft":24,"verdict":"Act","fix":["Change the model ID in your code to an Active model.","Check the state in your Region: call `ListFoundationModels` and read `modelLifecycle`."],"url":"https://timetobail.com/e/bedrock-claude-3-models-eol-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:(?:us|eu|apac|jp|au|ca|global)\\.)?(?:anthropic\\.claude-3-5-sonnet-20240620-v1:0|anthropic\\.claude-3-5-sonnet-20241022-v2:0)(?![\\w.:-])","fileRequires":"(?<![\\w-])(?:ap-northeast-2|ap-south-1|ap-southeast-1)(?![\\w-])","hint":"In this Region Claude 3.5 Sonnet ends November 13, 2026. Move to an Active Claude model and test it."},{"ruleId":"bedrock-claude-3-7-sonnet-regions","eventId":"evt_bedrock_claude_3_models_eol_2026","slug":"bedrock-claude-3-models-eol-2026","title":"Claude 3.7 Sonnet on Bedrock (Region ends Nov 13)","event":"Bedrock ends Claude 3.x models in some Regions on November 13, 2026","gateAt":"2026-11-13","daysLeft":24,"verdict":"Act","fix":["Change the model ID in your code to an Active model.","Check the state in your Region: call `ListFoundationModels` and read `modelLifecycle`."],"url":"https://timetobail.com/e/bedrock-claude-3-models-eol-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:(?:us|eu|apac|jp|au|ca|global)\\.)?(?:anthropic\\.claude-3-7-sonnet-20250219-v1:0)(?![\\w.:-])","fileRequires":"(?<![\\w-])(?:ap-south-1|eu-west-2)(?![\\w-])","hint":"In this Region Claude 3.7 Sonnet ends November 13, 2026. Move to an Active Claude model and test it."},{"ruleId":"bedrock-claude-3-haiku-regions","eventId":"evt_bedrock_claude_3_models_eol_2026","slug":"bedrock-claude-3-models-eol-2026","title":"Claude 3 Haiku on Bedrock (Region ends Nov 13)","event":"Bedrock ends Claude 3.x models in some Regions on November 13, 2026","gateAt":"2026-11-13","daysLeft":24,"verdict":"Act","fix":["Change the model ID in your code to an Active model.","Check the state in your Region: call `ListFoundationModels` and read `modelLifecycle`."],"url":"https://timetobail.com/e/bedrock-claude-3-models-eol-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:(?:us|eu|apac|jp|au|ca|global)\\.)?(?:anthropic\\.claude-3-haiku-20240307-v1:0)(?![\\w.:-])","fileRequires":"(?<![\\w-])(?:ap-northeast-2|ap-south-1|ap-southeast-1|eu-central-2|sa-east-1|ca-central-1)(?![\\w-])","hint":"In this Region Claude 3 Haiku ends November 13, 2026. Move to an Active Claude model and test it."},{"ruleId":"bedrock-claude-3-sonnet-regions","eventId":"evt_bedrock_claude_3_models_eol_2026","slug":"bedrock-claude-3-models-eol-2026","title":"Claude 3 Sonnet on Bedrock (Region ends Nov 13)","event":"Bedrock ends Claude 3.x models in some Regions on November 13, 2026","gateAt":"2026-11-13","daysLeft":24,"verdict":"Act","fix":["Change the model ID in your code to an Active model.","Check the state in your Region: call `ListFoundationModels` and read `modelLifecycle`."],"url":"https://timetobail.com/e/bedrock-claude-3-models-eol-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:(?:us|eu|apac|jp|au|ca|global)\\.)?(?:anthropic\\.claude-3-sonnet-20240229-v1:0)(?![\\w.:-])","fileRequires":"(?<![\\w-])(?:ap-south-1|ap-southeast-1|eu-west-2|sa-east-1|ca-central-1)(?![\\w-])","hint":"In this Region Claude 3 Sonnet ends November 13, 2026. Move to an Active Claude model and test it."},{"ruleId":"github-sbom-sync-api","eventId":"evt_github_sbom_sync_api_removal_2026","slug":"github-sbom-sync-api-removal-2026","title":"GitHub synchronous SBOM API","event":"GitHub's synchronous SBOM API is removed November 13, 2026","gateAt":"2026-11-13","daysLeft":24,"verdict":"Act","fix":["Find the calls: Search scripts and workflows for dependency-graph/sbom."],"url":"https://timetobail.com/e/github-sbom-sync-api-removal-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php,sh,bash,ps1}","*.{yml,yaml}","Makefile"],"pattern":"dependency-graph/sbom(?![\\w/-])|\\bdependencyGraph\\.exportSbom\\b","hint":"Call dependency-graph/sbom/generate-report and poll the URL it returns before November 13, 2026."},{"ruleId":"gemini-api-audio-live-previews","eventId":"evt_gemini_api_audio_live_previews_shutdown_2026","slug":"gemini-api-audio-live-previews-shutdown-2026","title":"Gemini API preview TTS or Live audio model","event":"Gemini API preview TTS and Live audio models end November 17, 2026","gateAt":"2026-11-17","daysLeft":28,"verdict":"Act","fix":["Change speech calls to `gemini-3.8-flash-tts` or `gemini-3.8-flash-lite-tts`.","Change Live calls to `gemini-3.8-live`."],"url":"https://timetobail.com/e/gemini-api-audio-live-previews-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:gemini-3\\.1-flash-tts-preview|gemini-2\\.5-flash-preview-tts|gemini-2\\.5-pro-preview-tts|gemini-3\\.1-flash-live-preview|gemini-2\\.5-flash-native-audio-preview-12-2025)(?![\\w.-])","hint":"Move speech to gemini-3.8-flash-tts or gemini-3.8-flash-lite-tts, and Live calls to gemini-3.8-live."},{"ruleId":"auth0-rules-hooks","eventId":"evt_auth0_rules_hooks_end_of_life_2026","slug":"auth0-rules-hooks-end-of-life-2026","title":"Auth0 Rule or Hook in Terraform","event":"Auth0 Rules and Hooks reach end of life November 18, 2026","gateAt":"2026-11-18","daysLeft":29,"verdict":"Act","fix":["List your Rules and Hooks: In the Auth0 Dashboard, note every active Rule and Hook and what it does."],"url":"https://timetobail.com/e/auth0-rules-hooks-end-of-life-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"^[ \\t]*resource\\s+\"auth0_(?:rule|rule_config|hook)\"","hint":"Move each Rule and Hook to an Action on the Post-Login trigger, then turn the Rule off."},{"ruleId":"azure-openai-o-series","eventId":"evt_azure_openai_o_series_retirement_2026","slug":"azure-openai-o-series-retirement-2026","title":"Azure OpenAI o-series deployment","event":"Azure OpenAI o1, o3, o3-mini and o4-mini retire November 19, 2026","gateAt":"2026-11-19","daysLeft":30,"verdict":"Act","fix":["List your deployments: Check each Azure OpenAI deployment: model, version and deployment type."],"url":"https://timetobail.com/e/azure-openai-o-series-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\bname[\"']?\\s*[:=]\\s*[\"'](?:o1|o1-pro|o3|o3-pro|o3-deep-research|o3-mini|o4-mini)[\"']","fileRequires":"azurerm_cognitive_deployment|Microsoft\\.CognitiveServices/accounts/deployments","hint":"Move o1, o1-pro, o3, o3-pro and o3-deep-research to gpt-5.6-sol, and o3-mini and o4-mini to gpt-5.6-terra. Provisioned ones do not upgrade."},{"ruleId":"vertex-ai-gemini-3-6-flash","eventId":"evt_vertex_ai_gemini_3_6_flash_retirement_2026","slug":"vertex-ai-gemini-3-6-flash-retirement-2026","title":"Gemini 3.6 Flash on Vertex AI","event":"Gemini 3.6 Flash retires on Vertex AI on November 19, 2026","gateAt":"2026-11-19","daysLeft":30,"verdict":"Act","fix":["Point your app to the model Google lists as the upgrade: `gemini-3.8-flash`.","Test the features you need most.","Deploy the change as you usually do."],"url":"https://timetobail.com/e/vertex-ai-gemini-3-6-flash-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:gemini-3\\.6-flash)(?![\\w.-])","fileRequires":"vertex|aiplatform","fileFlags":"i","hint":"Point your app to gemini-3.8-flash and test it before November 19, 2026."},{"ruleId":"eks-1-31-eksctl","eventId":"evt_amazon_eks_1_31_end_of_extended_support_2026","slug":"amazon-eks-1-31-end-of-extended-support-2026","title":"EKS cluster on 1.31 (eksctl)","event":"Amazon EKS 1.31 extended support ends November 26, 2026","gateAt":"2026-11-26","daysLeft":37,"verdict":"Act","fix":["Check cluster versions: In the EKS console, look at the Kubernetes version of each cluster. Note any on 1.31 to 1.34."],"url":"https://timetobail.com/e/amazon-eks-1-31-end-of-extended-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml}"],"pattern":"^[ \\t]*version:[ \\t]*[\"']?1\\.31[\"']?[ \\t]*\\r?$","fileRequires":"eksctl\\.io","hint":"Upgrade the cluster to 1.32 or newer. After the date AWS may upgrade it, and that cannot be rolled back."},{"ruleId":"eks-1-31-terraform","eventId":"evt_amazon_eks_1_31_end_of_extended_support_2026","slug":"amazon-eks-1-31-end-of-extended-support-2026","title":"EKS cluster on 1.31","event":"Amazon EKS 1.31 extended support ends November 26, 2026","gateAt":"2026-11-26","daysLeft":37,"verdict":"Act","fix":["Check cluster versions: In the EKS console, look at the Kubernetes version of each cluster. Note any on 1.31 to 1.34."],"url":"https://timetobail.com/e/amazon-eks-1-31-end-of-extended-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:cluster_version|kubernetes_version|version)\\s*=\\s*\"1\\.31\"","fileRequires":"aws_eks_cluster|aws_eks_node_group|terraform-aws-modules/eks","hint":"Upgrade the cluster to 1.32 or newer. After the date AWS may upgrade it, and that cannot be rolled back."},{"ruleId":"aks-1-34","eventId":"evt_aks_1_34_end_of_life_2026","slug":"aks-1-34-end-of-life-2026","title":"AKS cluster on 1.34","event":"AKS Kubernetes 1.34 end of life: November 2026","gateAt":"2026-11-30","daysLeft":41,"verdict":"Act","fix":["Check cluster versions: In the Azure portal, check the Kubernetes version of each cluster. Look for 1.34."],"url":"https://timetobail.com/e/aks-1-34-end-of-life-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\b(?:kubernetes_version|orchestrator_version|kubernetesVersion|orchestratorVersion)[\\\"']?\\s*[:=]\\s*[\\\"']1\\.34(?:\\.\\d+)?[\\\"']","fileRequires":"azurerm_kubernetes_cluster|Microsoft\\.ContainerService/managedClusters","fileExcludes":"AKSLongTermSupport","hint":"Upgrade the cluster to 1.35 or newer, or enable LTS. AKS can upgrade it for you after the grace period."},{"ruleId":"claude-sonnet-4-5","eventId":"evt_claude_sonnet_4_5_retirement_2026","slug":"claude-sonnet-4-5-retirement-2026","title":"Claude Sonnet 4.5 on the Claude API","event":"Claude Sonnet 4.5 retires on the Claude API on November 30, 2026","gateAt":"2026-11-30","daysLeft":41,"verdict":"Act","fix":["Find calls to the old model: Search your code and settings for claude-sonnet-4-5-20250929."],"url":"https://timetobail.com/e/claude-sonnet-4-5-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"([\"'\\x60])(?:claude-sonnet-4-5(?:-20250929)?)\\1","hint":"Change the model to claude-sonnet-5-5 and test your prompts."},{"ruleId":"claude-sonnet-4-5-config","eventId":"evt_claude_sonnet_4_5_retirement_2026","slug":"claude-sonnet-4-5-retirement-2026","title":"Claude Sonnet 4.5 on the Claude API","event":"Claude Sonnet 4.5 retires on the Claude API on November 30, 2026","gateAt":"2026-11-30","daysLeft":41,"verdict":"Act","fix":["Find calls to the old model: Search your code and settings for claude-sonnet-4-5-20250929."],"url":"https://timetobail.com/e/claude-sonnet-4-5-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"^[ \\t]*[\"']?[\\w.-]*model[\\w.-]*[\"']?[ \\t]*[:=][ \\t]*[\"']?(?:claude-sonnet-4-5(?:-20250929)?)[\"']?[ \\t]*(?:#.*)?\\r?$","flags":"i","hint":"Change the model to claude-sonnet-5-5 and test your prompts."},{"ruleId":"github-app-stateless-token-header","eventId":"evt_github_app_stateless_token_header_2026","slug":"github-app-stateless-token-header-2026","title":"X-GitHub-Stateless-S2S-Token header","event":"GitHub App token format header stops working November 30, 2026","gateAt":"2026-11-30","daysLeft":41,"verdict":"Act","fix":["Find the header: Search your code for X-GitHub-Stateless-S2S-Token."],"url":"https://timetobail.com/e/github-app-stateless-token-header-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php,sh,bash,ps1}","*.{yml,yaml}"],"pattern":"X-GitHub-Stateless-S2S-Token","flags":"i","hint":"Remove the header; after November 30, 2026 GitHub ignores it and returns ~520-character stateless tokens."},{"ruleId":"openai-evals-prompts","eventId":"evt_openai_evals_prompts_agent_builder_shutdown_2026","slug":"openai-evals-prompts-agent-builder-shutdown-2026","title":"OpenAI Evals or reusable prompt","event":"OpenAI Evals, reusable prompts and Agent Builder shut down November 30","gateAt":"2026-11-30","daysLeft":41,"verdict":"Bail","fix":["Copy your evals before October 31: After October 31 they are read-only. Save the test data and grader settings you use."],"url":"https://timetobail.com/e/openai-evals-prompts-agent-builder-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"[\"']pmpt_\\w{6,}[\"']|\\.evals\\.(?:create|list|retrieve|update|delete|runs)\\b|/v1/(?:evals|prompts)\\b","fileRequires":"openai","fileFlags":"i","hint":"Move prompt text into your code, save the evals you need (they go read-only first) and plan the move to Promptfoo."},{"ruleId":"openai-gpt-5-o3-snapshots","eventId":"evt_openai_gpt_5_o3_image_models_shutdown_2026","slug":"openai-gpt-5-o3-image-models-shutdown-2026","title":"OpenAI GPT-5, o3 or image snapshot","event":"OpenAI retires early GPT-5 snapshots, o3 and old image models","gateAt":"2026-12-01","daysLeft":42,"verdict":"Act","fix":["List the models you call: Search for gpt-5-2025-08-07, gpt-5-mini, gpt-5-nano, gpt-5-pro, o3, o3-pro and older gpt-image names."],"url":"https://timetobail.com/e/openai-gpt-5-o3-image-models-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"(?<![\\w.-])(?:gpt-image-1-mini|gpt-image-1\\.5|chatgpt-image-latest|gpt-5-2025-08-07|gpt-5-pro-2025-10-06|gpt-5-mini-2025-08-07|gpt-5-nano-2025-08-07|o3-2025-04-16|o3-pro-2025-06-10)(?![\\w.-])","hint":"Move to gpt-5.6-sol, gpt-5.6-terra or gpt-5.6-luna; image models go to gpt-image-2.5-sunburst or gpt-image-2.5-flare."},{"ruleId":"prisma-accelerate","eventId":"evt_prisma_accelerate_retired_2026","slug":"prisma-accelerate-retired-2026","title":"Prisma Accelerate connection","event":"Prisma Accelerate is retired on December 1, 2026","gateAt":"2026-12-01","daysLeft":42,"verdict":"Bail","fix":["Find Accelerate connection strings: Search your env files for prisma+postgres://accelerate.prisma-data.net."],"url":"https://timetobail.com/e/prisma-accelerate-retired-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,ts,js,mjs,cjs}","Dockerfile","*.Dockerfile","Dockerfile.*"],"pattern":"prisma(?:\\+postgres)?://accelerate\\.prisma-data\\.net","hint":"Switch to a pooled connection or the serverless driver, and remove cacheStrategy from your queries."},{"ruleId":"eks-1-34-eksctl","eventId":"evt_amazon_eks_1_34_end_of_standard_support_2026","slug":"amazon-eks-1-34-end-of-standard-support-2026","title":"EKS cluster on 1.34 (eksctl)","event":"Amazon EKS 1.34 costs more from December 2, 2026","gateAt":"2026-12-02","daysLeft":43,"verdict":"Act","fix":["Check cluster versions: In the EKS console, or with aws eks describe-cluster-versions, look for 1.34."],"url":"https://timetobail.com/e/amazon-eks-1-34-end-of-standard-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml}"],"pattern":"^[ \\t]*version:[ \\t]*[\\\"']?1\\.34[\\\"']?[ \\t]*\\r?$","fileRequires":"eksctl\\.io","hint":"Upgrade the cluster to a newer version. EKS 1.34 costs more or is upgraded by AWS after the date."},{"ruleId":"eks-1-34-terraform","eventId":"evt_amazon_eks_1_34_end_of_standard_support_2026","slug":"amazon-eks-1-34-end-of-standard-support-2026","title":"EKS cluster on 1.34","event":"Amazon EKS 1.34 costs more from December 2, 2026","gateAt":"2026-12-02","daysLeft":43,"verdict":"Act","fix":["Check cluster versions: In the EKS console, or with aws eks describe-cluster-versions, look for 1.34."],"url":"https://timetobail.com/e/amazon-eks-1-34-end-of-standard-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:cluster_version|kubernetes_version|version)\\s*=\\s*\\\"1\\.34\"","fileRequires":"aws_eks_cluster|aws_eks_node_group|terraform-aws-modules/eks","hint":"Upgrade the cluster to a newer version. EKS 1.34 costs more or is upgraded by AWS after the date."},{"ruleId":"docker-content-trust","eventId":"evt_docker_content_trust_shutdown_2026","slug":"docker-content-trust-shutdown-2026","title":"Docker Content Trust turned on","event":"Docker Content Trust and notary.docker.io shut down December 8, 2026","gateAt":"2026-12-08","daysLeft":49,"verdict":"Act","fix":["Search for DCT: Look for DOCKER_CONTENT_TRUST and docker trust in CI files, shell profiles, Compose files and Kubernetes files."],"url":"https://timetobail.com/e/docker-content-trust-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,sh,bash,zsh,ps1,env}","Dockerfile","*.Dockerfile","Dockerfile.*","Makefile","Jenkinsfile",".env.{example,sample,template}",".bashrc",".zshrc",".profile"],"pattern":"\\bDOCKER_CONTENT_TRUST[\"']?[ \\t]*[:=][ \\t]*[\"']?(?:1|true)(?![\\w.])|\\bENV[ \\t]+DOCKER_CONTENT_TRUST[ \\t]+[\"']?1(?![\\w.])|\\bdocker[ \\t]+trust[ \\t]+(?:sign|inspect|revoke|key|signer)\\b","flags":"i","hint":"notary.docker.io shuts down December 8, 2026: unset DOCKER_CONTENT_TRUST, or sign with Cosign or Notation."},{"ruleId":"vertex-ai-gemini-live-2-5-native-audio","eventId":"evt_vertex_ai_gemini_live_2_5_native_audio_retirement_2026","slug":"vertex-ai-gemini-live-2-5-native-audio-retirement-2026","title":"Gemini Live 2.5 native audio on Vertex AI","event":"Gemini Live 2.5 native audio ends on Vertex AI on December 13, 2026","gateAt":"2026-12-13","daysLeft":54,"verdict":"Act","fix":["Find the model name: Search your Vertex AI code and settings for gemini-live-2.5-flash-native-audio."],"url":"https://timetobail.com/e/vertex-ai-gemini-live-2-5-native-audio-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:gemini-live-2\\.5-flash-native-audio)(?![\\w.-])","fileRequires":"vertex|aiplatform","fileFlags":"i","hint":"Move to a newer Live model, such as gemini-3.8-live, and test calls before December 13, 2026."},{"ruleId":"azure-openai-audio-models","eventId":"evt_azure_openai_audio_models_retirement_2026","slug":"azure-openai-audio-models-retirement-2026","title":"Azure OpenAI tts, tts-hd or whisper deployment","event":"Azure OpenAI tts, tts-hd and whisper retire December 15, 2026","gateAt":"2026-12-15","daysLeft":56,"verdict":"Act","fix":["Deploy a newer audio model and point your app to it.","Check dates with the Models API: read `lifecycleStatus` and `deprecation.inference`."],"url":"https://timetobail.com/e/azure-openai-audio-models-retirement-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\bname[\"']?\\s*[:=]\\s*[\"'](?:tts|tts-hd|whisper)[\"']","fileRequires":"azurerm_cognitive_deployment|Microsoft\\.CognitiveServices/accounts/deployments","hint":"These retire December 15, 2026 with no replacement listed. Deploy a newer audio model and switch your app."},{"ruleId":"app-engine-php-8-2","eventId":"evt_app_engine_php_8_2_end_of_support_2026","slug":"app-engine-php-8-2-end-of-support-2026","title":"App Engine runtime php82","event":"App Engine PHP 8.2 runtime: support ends December 31, 2026","gateAt":"2026-12-31","daysLeft":72,"verdict":"Act","fix":["Set `runtime:` in app.yaml to `php84` or `php85`.","Deploy again and test each service."],"url":"https://timetobail.com/e/app-engine-php-8-2-end-of-support-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["app.{yaml,yml}"],"pattern":"^[ \\t]*runtime:[ \\t]*[\\\"']?(?:php82)[\\\"']?[ \\t]*(?:#.*)?\\r?$","hint":"Set runtime to php84 or php85 in app.yaml and deploy again. After the date you cannot deploy on php82."},{"ruleId":"hcp-vagrant-registry","eventId":"evt_hcp_vagrant_shutdown_2026","slug":"hcp-vagrant-shutdown-2026","title":"Vagrant box from the public registry","event":"HCP Vagrant and the public box registry end December 31, 2026","gateAt":"2026-12-31","daysLeft":72,"verdict":"Bail","fix":["List the boxes you use: Check each Vagrantfile for config.vm.box names that come from the public registry."],"url":"https://timetobail.com/e/hcp-vagrant-shutdown-2026?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["Vagrantfile"],"pattern":"\\.vm\\.box\\s*=\\s*[\"'][\\w.-]+/[\\w.-]+[\"']","fileExcludes":"\\.vm\\.box_url\\s*=","hint":"Host the boxes you use somewhere else (for example S3) and set config.vm.box_url."},{"ruleId":"circleci-graphql-unstable","eventId":"evt_circleci_graphql_unstable_shutdown_2027","slug":"circleci-graphql-unstable-shutdown-2027","title":"CircleCI graphql-unstable endpoint","event":"CircleCI GraphQL Unstable API shuts down January 1, 2027","gateAt":"2027-01-01","daysLeft":73,"verdict":"Act","fix":["Search code and scripts for `graphql-unstable`.","Move each query or mutation to a V3 REST API endpoint.","Upgrade the CircleCI CLI from V0 to V1."],"url":"https://timetobail.com/e/circleci-graphql-unstable-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php,sh,bash,ps1}","*.{yml,yaml,json}"],"pattern":"circleci\\.com/graphql-unstable\\b","hint":"Move each query to the CircleCI V3 REST API and upgrade CircleCI CLI V0 to V1 before January 1, 2027."},{"ruleId":"cloud-sql-mysql-8","eventId":"evt_cloud_sql_mysql_8_extended_support_2027","slug":"cloud-sql-mysql-8-extended-support-2027","title":"Cloud SQL on MySQL 8.0","event":"Cloud SQL for MySQL 8.0 costs extra from January 1, 2027","gateAt":"2027-01-01","daysLeft":73,"verdict":"Act","fix":["List your instances and versions: In the console, open Cloud SQL and check the database version of each instance and replica."],"url":"https://timetobail.com/e/cloud-sql-mysql-8-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\bdatabase_version\\s*=\\s*\"MYSQL_8_0(?:_\\d+)?\"","hint":"Plan the upgrade to a newer MySQL major version, or budget for the extended support fee per vCPU."},{"ruleId":"google-custom-search-api","eventId":"evt_google_custom_search_json_api_shutdown_2027","slug":"google-custom-search-json-api-shutdown-2027","title":"Custom Search JSON API call","event":"Google Custom Search JSON API ends for current users January 1, 2027","gateAt":"2027-01-01","daysLeft":73,"verdict":"Bail","fix":["List what uses the API: Find every app, script and plugin that calls the Custom Search JSON API with your key."],"url":"https://timetobail.com/e/google-custom-search-json-api-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.json"],"pattern":"googleapis\\.com/customsearch/v1|\\bbuild\\(\\s*[\"']customsearch[\"']|\\bgoogle\\.customsearch\\(","hint":"Move to Vertex AI Search (up to 50 domains) or another search API."},{"ruleId":"openai-fine-tuning-jobs","eventId":"evt_openai_fine_tuning_new_jobs_end_2027","slug":"openai-fine-tuning-new-jobs-end-2027","title":"OpenAI fine-tuning job created in code","event":"OpenAI stops new self-serve fine-tuning jobs on January 6, 2027","gateAt":"2027-01-06","daysLeft":78,"verdict":"Bail","fix":["List your fine-tuned models: Note the base model of each one. A tuned model stops when its base model shuts down."],"url":"https://timetobail.com/e/openai-fine-tuning-new-jobs-end-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"\\.(?:fine_tuning|fineTuning)\\.jobs\\.create\\b|/v1/fine_tuning/jobs\\b","fileRequires":"openai","fileExcludes":"azure","fileFlags":"i","hint":"New fine-tuning jobs stop on January 6, 2027. Run the last ones before then; tuned models keep working for now."},{"ruleId":"openai-tts-models-code","eventId":"evt_openai_tts_models_shutdown_2027","slug":"openai-tts-models-shutdown-2027","title":"OpenAI text-to-speech model shut down Jan 6","event":"OpenAI text-to-speech models tts-1 and tts-1-hd end January 6, 2027","gateAt":"2027-01-06","daysLeft":78,"verdict":"Act","fix":["Change the model to `gpt-realtime-2.1-mini`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-tts-models-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"([\"'\\x60])(?:tts-1-hd|tts-1|gpt-4o-mini-tts-2025-03-20|gpt-4o-mini-tts-2025-12-15)\\1","fileRequires":"openai","fileExcludes":"azure","fileFlags":"i","hint":"Change the model to gpt-realtime-2.1-mini; read OpenAI's Realtime API guide first."},{"ruleId":"openai-tts-models-config","eventId":"evt_openai_tts_models_shutdown_2027","slug":"openai-tts-models-shutdown-2027","title":"OpenAI text-to-speech model shut down Jan 6","event":"OpenAI text-to-speech models tts-1 and tts-1-hd end January 6, 2027","gateAt":"2027-01-06","daysLeft":78,"verdict":"Act","fix":["Change the model to `gpt-realtime-2.1-mini`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-tts-models-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"^[ \\t]*[\"']?[\\w.-]*model[\\w.-]*[\"']?[ \\t]*[:=][ \\t]*[\"']?(?:tts-1-hd|tts-1|gpt-4o-mini-tts-2025-03-20|gpt-4o-mini-tts-2025-12-15)[\"']?[ \\t]*(?:#.*)?\\r?$","flags":"i","hint":"Change the model to gpt-realtime-2.1-mini; read OpenAI's Realtime API guide first."},{"ruleId":"bedrock-claude-opus-4-1","eventId":"evt_bedrock_claude_opus_4_1_eol_2027","slug":"bedrock-claude-opus-4-1-eol-2027","title":"Claude Opus 4.1 on Amazon Bedrock","event":"Claude Opus 4.1 on Amazon Bedrock ends January 8, 2027","gateAt":"2027-01-08","daysLeft":80,"verdict":"Act","fix":["Change the model ID in your code to an Active model.","Check the state in your Region: call `ListFoundationModels` and read `modelLifecycle`."],"url":"https://timetobail.com/e/bedrock-claude-opus-4-1-eol-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:(?:us|eu|apac|jp|au|ca|global)\\.)?(?:anthropic\\.claude-opus-4-1-20250805-v1:0)(?![\\w.:-])","hint":"Claude Opus 4.1 ends on Bedrock January 8, 2027. Move to a newer Active Opus model and test it."},{"ruleId":"windows-server-2016","eventId":"evt_windows_server_2016_end_of_support_2027","slug":"windows-server-2016-end-of-support-2027","title":"Windows Server 2016 image","event":"Windows Server 2016 support ends January 12, 2027","gateAt":"2027-01-12","daysLeft":84,"verdict":"Act","fix":["List your 2016 servers: Find every server and VM on Windows Server 2016, and what runs on it."],"url":"https://timetobail.com/e/windows-server-2016-end-of-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json","*.{yml,yaml}","*.pkr.hcl","Dockerfile","*.Dockerfile","Dockerfile.*"],"pattern":"\\b2016-Datacenter[\\w-]*|\\bWindows_Server-2016-|mcr\\.microsoft\\.com/windows/(?:servercore|nanoserver):(?:ltsc2016|1607)\\b","hint":"Move these servers, VM images and containers to a newer Windows Server version."},{"ruleId":"github-ssh-sha1-only","eventId":"evt_github_ssh_rsa_sha1_removal_2027","slug":"github-ssh-rsa-sha1-removal-2027","title":"SSH to GitHub forced to ssh-rsa (SHA-1)","event":"GitHub SSH drops SHA-1 RSA signatures on January 13, 2027","gateAt":"2027-01-13","daysLeft":85,"verdict":"Act","fix":["Check your remotes: Run git remote -v. Remotes that start with https:// are not affected."],"url":"https://timetobail.com/e/github-ssh-rsa-sha1-removal-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["ssh_config","**/.ssh/config","*.ssh_config","*.{yml,yaml,sh}","Dockerfile","Jenkinsfile"],"pattern":"\\b(?:HostKeyAlgorithms|PubkeyAcceptedKeyTypes|PubkeyAcceptedAlgorithms)\\b[ \\t]*[= \\t][ \\t]*[\"']?ssh-rsa(?![\\w@.,+-])|\\bKexAlgorithms\\b[ \\t]*[= \\t][ \\t]*[\"']?diffie-hellman-group-exchange-sha256(?![\\w@.,+-])","flags":"i","fileRequires":"github\\.com","fileFlags":"i","hint":"Drop the forced ssh-rsa or diffie-hellman-group-exchange-sha256 setting; use OpenSSH 7.2p1+ or an Ed25519 key."},{"ruleId":"openai-gpt-4o-gpt-4-1-snapshots","eventId":"evt_openai_gpt_4o_gpt_4_1_shutdown_2027","slug":"openai-gpt-4o-gpt-4-1-shutdown-2027","title":"OpenAI GPT-4o or GPT-4.1 snapshot","event":"OpenAI shuts down GPT-4o and GPT-4.1 snapshots on January 14, 2027","gateAt":"2027-01-14","daysLeft":86,"verdict":"Act","fix":["Change the model name to `gpt-6-luna`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-gpt-4o-gpt-4-1-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"(?<![\\w.-])(?:gpt-4o-2024-08-06|gpt-4o-2024-11-20|gpt-4o-mini-2024-07-18|gpt-4\\.1-2025-04-14|gpt-4\\.1-mini-2025-04-14)(?![\\w.-])","hint":"Change the model to gpt-6-luna and test your prompts before January 14, 2027."},{"ruleId":"openai-legacy-audio-realtime-code","eventId":"evt_openai_legacy_audio_realtime_shutdown_2027","slug":"openai-legacy-audio-realtime-shutdown-2027","title":"OpenAI realtime or audio model shut down Jan 20","event":"OpenAI shuts down older realtime and audio models on January 20, 2027","gateAt":"2027-01-20","daysLeft":92,"verdict":"Act","fix":["Change realtime calls to `gpt-realtime-2.1` or `gpt-realtime-2.1-mini`, and audio calls to `gpt-audio-1.5`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-legacy-audio-realtime-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"(?<![\\w.-])(?:gpt-realtime-mini|gpt-realtime|gpt-audio-mini|gpt-audio)(?:-\\d{4}-\\d{2}-\\d{2})?(?![\\w.-])|(?<![\\w.-])gpt-4o(?:-mini)?-(?:audio|realtime)(?:-preview)?(?:-\\d{4}-\\d{2}-\\d{2})?(?![\\w.-])|(?<![\\w.-])gpt-4o-mini-transcribe-2025-03-20(?![\\w.-])","fileRequires":"openai","fileExcludes":"azure","fileFlags":"i","hint":"Move realtime to gpt-realtime-2.1 or gpt-realtime-2.1-mini, and audio to gpt-audio-1.5."},{"ruleId":"openai-legacy-audio-realtime-config","eventId":"evt_openai_legacy_audio_realtime_shutdown_2027","slug":"openai-legacy-audio-realtime-shutdown-2027","title":"OpenAI realtime or audio model shut down Jan 20","event":"OpenAI shuts down older realtime and audio models on January 20, 2027","gateAt":"2027-01-20","daysLeft":92,"verdict":"Act","fix":["Change realtime calls to `gpt-realtime-2.1` or `gpt-realtime-2.1-mini`, and audio calls to `gpt-audio-1.5`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-legacy-audio-realtime-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"^[ \\t]*[\"']?[\\w.-]*model[\\w.-]*[\"']?[ \\t]*[:=][ \\t]*[\"']?(?:gpt-realtime|gpt-realtime-mini|gpt-audio|gpt-audio-mini|gpt-4o-realtime-preview|gpt-4o-mini-realtime-preview|gpt-4o-audio-preview|gpt-4o-mini-audio-preview|gpt-4o-mini-transcribe-2025-03-20)[\"']?[ \\t]*(?:#.*)?\\r?$","flags":"i","hint":"Move realtime to gpt-realtime-2.1 or gpt-realtime-2.1-mini, and audio to gpt-audio-1.5."},{"ruleId":"gke-1-34","eventId":"evt_gke_1_34_end_of_standard_support_2027","slug":"gke-1-34-end-of-standard-support-2027","title":"GKE cluster on 1.34","event":"GKE 1.34 leaves standard support on January 25, 2027","gateAt":"2027-01-25","daysLeft":97,"verdict":"Act","fix":["Check your clusters: In the console, check the version and release channel of each cluster. Look for 1.34."],"url":"https://timetobail.com/e/gke-1-34-end-of-standard-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:min_master_version|kubernetes_version|node_version|version)\\s*=\\s*\\\"1\\.34(?:\\.\\d+(?:-gke\\.\\d+)?)?\\\"","fileRequires":"google_container_cluster|google_container_node_pool|terraform-google-modules/kubernetes-engine","hint":"Upgrade the control plane, then each node pool, to 1.35 or newer, or plan for the Extended channel fee."},{"ruleId":"vertex-ai-gemini-3-7-flash","eventId":"evt_vertex_ai_gemini_3_7_flash_retirement_2027","slug":"vertex-ai-gemini-3-7-flash-retirement-2027","title":"Gemini 3.7 Flash on Vertex AI","event":"Gemini 3.7 Flash retires on Vertex AI on January 28, 2027","gateAt":"2027-01-28","daysLeft":100,"verdict":"Act","fix":["Point your app to the model Google lists as the upgrade: `gemini-3.8-flash`.","Test the features you need most.","Deploy the change as you usually do."],"url":"https://timetobail.com/e/vertex-ai-gemini-3-7-flash-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:gemini-3\\.7-flash)(?![\\w.-])","fileRequires":"vertex|aiplatform","fileFlags":"i","hint":"Point your app to gemini-3.8-flash and test it before January 28, 2027."},{"ruleId":"app-engine-first-gen","eventId":"evt_app_engine_first_gen_runtimes_decommission_2027","slug":"app-engine-first-gen-runtimes-decommission-2027","title":"App Engine first-gen runtime","event":"App Engine first-generation runtimes end January 31, 2027","gateAt":"2027-01-31","daysLeft":103,"verdict":"Act","fix":["Find apps on old runtimes: In the console, open App Engine and check the runtime of each service and version."],"url":"https://timetobail.com/e/app-engine-first-gen-runtimes-decommission-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["app.{yaml,yml}","appengine-web.xml"],"pattern":"^[ \\t]*runtime:[ \\t]*[\"']?(?:python27|java8|php55|go111)[\"']?[ \\t]*(?:#.*)?\\r?$|<runtime>\\s*java8\\s*</runtime>","hint":"Move each service to a newer runtime. After the date you cannot deploy on these runtimes."},{"ruleId":"circleci-v1-trigger-rerun-api","eventId":"evt_circleci_v1_trigger_rerun_api_removal_2027","slug":"circleci-v1-trigger-rerun-api-removal-2027","title":"CircleCI API v1/v1.1 trigger or rerun call","event":"CircleCI v1 and v1.1 trigger and rerun APIs end February 1, 2027","gateAt":"2027-02-01","daysLeft":104,"verdict":"Act","fix":["Search scripts and tools for `/api/v1/project/` and `/api/v1.1/project/`.","Trigger with `POST /api/v3/runs`, or `POST /api/v2/project/:provider/:organization/:project/pipeline/run`.","Rerun with `POST /api/v3/workflows/:id/rerun` or `POST /api/v2/workflow/:workflow-id/rerun`.","Change how you name the project: v2 uses `:provider/:organization/:project`, v3 uses UUIDs."],"url":"https://timetobail.com/e/circleci-v1-trigger-rerun-api-removal-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php,sh,bash,ps1}","*.{yml,yaml}","Makefile","Jenkinsfile"],"pattern":"circleci\\.com/api/v1(?:\\.1)?/project/[^\\s\"'\\x60?#]+/(?:build|retry|ssh)(?![\\w-])","hint":"Trigger with POST /api/v3/runs (or API v2 pipeline/run); rerun with the v3 or v2 workflow rerun endpoint."},{"ruleId":"cloud-sql-postgres-14","eventId":"evt_cloud_sql_postgres_14_extended_support_2027","slug":"cloud-sql-postgres-14-extended-support-2027","title":"Cloud SQL on PostgreSQL 14","event":"Cloud SQL for PostgreSQL 14 costs extra from February 1, 2027","gateAt":"2027-02-01","daysLeft":104,"verdict":"Act","fix":["List your instances and versions: In the console, open Cloud SQL and check the database version of each instance and replica."],"url":"https://timetobail.com/e/cloud-sql-postgres-14-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\bdatabase_version\\s*=\\s*\\\"POSTGRES_14\\\"","hint":"Upgrade to a newer PostgreSQL major version before February 1, 2027, or budget for the per-vCPU fee."},{"ruleId":"elasticache-redis-6","eventId":"evt_amazon_elasticache_redis_6_extended_support_2027","slug":"amazon-elasticache-redis-6-extended-support-2027","title":"ElastiCache on Redis OSS 6","event":"ElastiCache for Redis OSS 6 costs more from February 1, 2027","gateAt":"2027-02-01","daysLeft":104,"verdict":"Act","fix":["Find Redis OSS 6 caches: In the ElastiCache console, check the engine and version of each cache."],"url":"https://timetobail.com/e/amazon-elasticache-redis-6-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{yml,yaml,json}"],"pattern":"\\bengine_version\\s*=\\s*\\\"6(?:\\.\\d+|\\.x)?\\\"|\\bEngineVersion[\\\"']?\\s*:\\s*[\\\"']?6(?:\\.\\d+|\\.x)?[\\\"']?\\s*,?\\s*$","fileRequires":"aws_elasticache_|AWS::ElastiCache::","hint":"Upgrade the cache to Valkey or a newer Redis OSS version before February 1, 2027 to avoid the 80% premium."},{"ruleId":"azure-openai-gpt-5","eventId":"evt_azure_openai_gpt_5_retirement_2027","slug":"azure-openai-gpt-5-retirement-2027","title":"Azure OpenAI gpt-5, gpt-5-mini or gpt-5-nano deployment","event":"Azure OpenAI gpt-5, gpt-5-mini and gpt-5-nano retire February 9, 2027","gateAt":"2027-02-09","daysLeft":112,"verdict":"Act","fix":["Deploy the replacement that the schedule names, or another newer model, and switch your app to it.","Check dates with the Models API: read `lifecycleStatus` and `deprecation.inference`."],"url":"https://timetobail.com/e/azure-openai-gpt-5-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\bname[\"']?\\s*[:=]\\s*[\"'](?:gpt-5|gpt-5-mini|gpt-5-nano)[\"']","fileRequires":"azurerm_cognitive_deployment|Microsoft\\.CognitiveServices/accounts/deployments","hint":"Version 2025-08-07 retires February 9, 2027. Provisioned and NoAutoUpgrade deployments are not moved for you."},{"ruleId":"gke-1-32","eventId":"evt_gke_1_32_end_of_extended_support_2027","slug":"gke-1-32-end-of-extended-support-2027","title":"GKE cluster on 1.32","event":"GKE 1.32 extended support ends February 11, 2027","gateAt":"2027-02-11","daysLeft":114,"verdict":"Act","fix":["Upgrade the control plane yourself first: `gcloud container clusters upgrade CLUSTER_NAME --master --location=CONTROL_PLANE_LOCATION`","Then upgrade each node pool: `gcloud container clusters upgrade CLUSTER_NAME --node-pool=NODE_POOL_NAME --location=CONTROL_PLANE_LOCATION`"],"url":"https://timetobail.com/e/gke-1-32-end-of-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:min_master_version|kubernetes_version|node_version|version)\\s*=\\s*\\\"1\\.32(?:\\.\\d+(?:-gke\\.\\d+)?)?\\\"","fileRequires":"google_container_cluster|google_container_node_pool|terraform-google-modules/kubernetes-engine","hint":"Upgrade the control plane, then each node pool, to 1.33 or newer before GKE does it for you."},{"ruleId":"openai-transcription-models-code","eventId":"evt_openai_transcription_models_shutdown_2027","slug":"openai-transcription-models-shutdown-2027","title":"OpenAI transcription model shut down Feb 26","event":"OpenAI shuts down whisper-1 and gpt-4o-transcribe on February 26, 2027","gateAt":"2027-02-26","daysLeft":129,"verdict":"Act","fix":["Change the model to `gpt-transcribe` or `gpt-live-transcribe`. Move translations to `v1/realtime/translations`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-transcription-models-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"([\"'\\x60])(?:whisper-1|gpt-4o-transcribe-diarize|gpt-4o-transcribe|gpt-4o-mini-transcribe)\\1|\\.audio\\.translations\\.create\\b|/v1/audio/translations\\b","fileRequires":"openai","fileExcludes":"azure|groq","fileFlags":"i","hint":"Change the model to gpt-transcribe or gpt-live-transcribe; move translations to v1/realtime/translations."},{"ruleId":"openai-transcription-models-config","eventId":"evt_openai_transcription_models_shutdown_2027","slug":"openai-transcription-models-shutdown-2027","title":"OpenAI transcription model shut down Feb 26","event":"OpenAI shuts down whisper-1 and gpt-4o-transcribe on February 26, 2027","gateAt":"2027-02-26","daysLeft":129,"verdict":"Act","fix":["Change the model to `gpt-transcribe` or `gpt-live-transcribe`. Move translations to `v1/realtime/translations`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-transcription-models-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"^[ \\t]*[\"']?[\\w.-]*model[\\w.-]*[\"']?[ \\t]*[:=][ \\t]*[\"']?(?:whisper-1|gpt-4o-transcribe-diarize|gpt-4o-transcribe|gpt-4o-mini-transcribe)[\"']?[ \\t]*(?:#.*)?\\r?$","flags":"i","hint":"Change the model to gpt-transcribe or gpt-live-transcribe."},{"ruleId":"rds-postgres-12","eventId":"evt_aws_rds_postgres_12_extended_support_year_3_2027","slug":"aws-rds-postgres-12-extended-support-year-3-2027","title":"RDS or Aurora on PostgreSQL 12","event":"RDS and Aurora PostgreSQL 12 Extended Support rises March 1, 2027","gateAt":"2027-03-01","daysLeft":132,"verdict":"Act","fix":["Find PostgreSQL 12 databases: In the RDS console, filter databases by engine version 12. Check RDS and Aurora."],"url":"https://timetobail.com/e/aws-rds-postgres-12-extended-support-year-3-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\bengine_version\\s*=\\s*\\\"12(?:\\.\\d+)?\\\"|\\b(?:Aurora)?PostgresEngineVersion\\.VER_12(?:_\\d+)?\\b","fileRequires":"engine\\s*=\\s*\\\"(?:postgres|aurora-postgresql)\\\"|PostgresEngineVersion","hint":"Extended Support for PostgreSQL 12 costs more from March 1, 2027. Upgrade to a newer major version."},{"ruleId":"rds-postgres-14","eventId":"evt_aws_rds_postgres_14_extended_support_2027","slug":"aws-rds-postgres-14-extended-support-2027","title":"RDS or Aurora on PostgreSQL 14","event":"RDS and Aurora PostgreSQL 14 cost more from March 1, 2027","gateAt":"2027-03-01","daysLeft":132,"verdict":"Act","fix":["Find PostgreSQL 14 databases: In the RDS console, filter databases by engine version 14. Check RDS and Aurora."],"url":"https://timetobail.com/e/aws-rds-postgres-14-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\bengine_version\\s*=\\s*\\\"14(?:\\.\\d+)?\\\"|\\b(?:Aurora)?PostgresEngineVersion\\.VER_14(?:_\\d+)?\\b","fileRequires":"engine\\s*=\\s*\\\"(?:postgres|aurora-postgresql)\\\"|PostgresEngineVersion","hint":"Upgrade to a newer PostgreSQL major version before March 1, 2027, or budget for RDS Extended Support."},{"ruleId":"app-engine-go-1-24-1-25","eventId":"evt_app_engine_go_1_24_1_25_end_of_support_2027","slug":"app-engine-go-1-24-1-25-end-of-support-2027","title":"App Engine runtime go124 or go125","event":"App Engine Go 1.24 and 1.25 runtimes: support ends March 2, 2027","gateAt":"2027-03-02","daysLeft":133,"verdict":"Act","fix":["Set `runtime:` in app.yaml to `go127`. Go 1.26 ends support at about the same time.","Deploy again and test each service."],"url":"https://timetobail.com/e/app-engine-go-1-24-1-25-end-of-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["app.{yaml,yml}"],"pattern":"^[ \\t]*runtime:[ \\t]*[\\\"']?(?:go124|go125)[\\\"']?[ \\t]*(?:#.*)?\\r?$","hint":"Set runtime to go127 in app.yaml and deploy again. Go 1.26 ends support at about the same time."},{"ruleId":"cloud-functions-go-1-24","eventId":"evt_cloud_functions_go_1_24_decommission_2027","slug":"cloud-functions-go-1-24-decommission-2027","title":"Cloud Run functions on go124","event":"Go 1.24 functions on Google Cloud: decommissioned March 2, 2027","gateAt":"2027-03-02","daysLeft":133,"verdict":"Act","fix":["Set the runtime ID to `go126` or `go127`, then deploy again.","Check the support schedule first: Go 1.26 dates are approximate (deprecated Feb/March 2027); Go 1.27 deprecated Aug/Sept 2027."],"url":"https://timetobail.com/e/cloud-functions-go-1-24-decommission-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","firebase.json","package.json","*.{sh,yml,yaml}","Makefile"],"pattern":"--runtime[= ]go124(?![\\w.])|\\bruntime\\s*=\\s*\\\"go124\\\"|\\\"runtime\\\"\\s*:\\s*\\\"go124\\\"|\\bruntime:[ \\t]*[\\\"']?go124[\\\"']?[ \\t]*\\r?$","fileRequires":"google_cloudfunctions|gcloud functions|\"functions\"|deploy-cloud-functions","hint":"Set the runtime to go126 or go127 and deploy each function again."},{"ruleId":"gemini-2-5-flash-image","eventId":"evt_gemini_2_5_flash_image_retirement_2027","slug":"gemini-2-5-flash-image-retirement-2027","title":"Gemini 2.5 Flash Image model","event":"Gemini 2.5 Flash Image ends March 15, 2027 on Gemini API and Vertex AI","gateAt":"2027-03-15","daysLeft":146,"verdict":"Act","fix":["Point your app to the model Google lists as the upgrade: `gemini-3.1-flash-lite-image`.","Test the features you need most.","Deploy the change as you usually do."],"url":"https://timetobail.com/e/gemini-2-5-flash-image-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:gemini-2\\.5-flash-image)(?![\\w.-])","hint":"Change the model to gemini-3.1-flash-lite-image before March 15, 2027."},{"ruleId":"eks-1-32-eksctl","eventId":"evt_amazon_eks_1_32_end_of_extended_support_2027","slug":"amazon-eks-1-32-end-of-extended-support-2027","title":"EKS cluster on 1.32 (eksctl)","event":"Amazon EKS 1.32 extended support ends March 23, 2027","gateAt":"2027-03-23","daysLeft":154,"verdict":"Act","fix":["Upgrade the control plane: `aws eks update-cluster-version --name <cluster-name> --kubernetes-version <version-number> --region <region-code>`","Or with eksctl: `eksctl upgrade cluster --name <cluster-name> --version <version-number> --approve`","Then update add-ons and nodes. Managed node groups and self-managed nodes are not upgraded for you."],"url":"https://timetobail.com/e/amazon-eks-1-32-end-of-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml}"],"pattern":"^[ \\t]*version:[ \\t]*[\\\"']?1\\.32[\\\"']?[ \\t]*\\r?$","fileRequires":"eksctl\\.io","hint":"Upgrade the cluster to a newer version. EKS 1.32 costs more or is upgraded by AWS after the date."},{"ruleId":"eks-1-32-terraform","eventId":"evt_amazon_eks_1_32_end_of_extended_support_2027","slug":"amazon-eks-1-32-end-of-extended-support-2027","title":"EKS cluster on 1.32","event":"Amazon EKS 1.32 extended support ends March 23, 2027","gateAt":"2027-03-23","daysLeft":154,"verdict":"Act","fix":["Upgrade the control plane: `aws eks update-cluster-version --name <cluster-name> --kubernetes-version <version-number> --region <region-code>`","Or with eksctl: `eksctl upgrade cluster --name <cluster-name> --version <version-number> --approve`","Then update add-ons and nodes. Managed node groups and self-managed nodes are not upgraded for you."],"url":"https://timetobail.com/e/amazon-eks-1-32-end-of-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:cluster_version|kubernetes_version|version)\\s*=\\s*\\\"1\\.32\"","fileRequires":"aws_eks_cluster|aws_eks_node_group|terraform-aws-modules/eks","hint":"Upgrade the cluster to a newer version. EKS 1.32 costs more or is upgraded by AWS after the date."},{"ruleId":"eks-1-35-eksctl","eventId":"evt_amazon_eks_1_35_end_of_standard_support_2027","slug":"amazon-eks-1-35-end-of-standard-support-2027","title":"EKS cluster on 1.35 (eksctl)","event":"Amazon EKS 1.35 costs more from March 27, 2027","gateAt":"2027-03-27","daysLeft":158,"verdict":"Act","fix":["Check cluster versions: In the EKS console, or with aws eks describe-cluster-versions, look for 1.35."],"url":"https://timetobail.com/e/amazon-eks-1-35-end-of-standard-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml}"],"pattern":"^[ \\t]*version:[ \\t]*[\\\"']?1\\.35[\\\"']?[ \\t]*\\r?$","fileRequires":"eksctl\\.io","hint":"Upgrade the cluster to a newer version. EKS 1.35 costs more or is upgraded by AWS after the date."},{"ruleId":"eks-1-35-terraform","eventId":"evt_amazon_eks_1_35_end_of_standard_support_2027","slug":"amazon-eks-1-35-end-of-standard-support-2027","title":"EKS cluster on 1.35","event":"Amazon EKS 1.35 costs more from March 27, 2027","gateAt":"2027-03-27","daysLeft":158,"verdict":"Act","fix":["Check cluster versions: In the EKS console, or with aws eks describe-cluster-versions, look for 1.35."],"url":"https://timetobail.com/e/amazon-eks-1-35-end-of-standard-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:cluster_version|kubernetes_version|version)\\s*=\\s*\\\"1\\.35\"","fileRequires":"aws_eks_cluster|aws_eks_node_group|terraform-aws-modules/eks","hint":"Upgrade the cluster to a newer version. EKS 1.35 costs more or is upgraded by AWS after the date."},{"ruleId":"bedrock-open-models","eventId":"evt_bedrock_open_models_eol_2027","slug":"bedrock-open-models-eol-2027","title":"Bedrock model that ends March 30, 2027","event":"Amazon Bedrock ends 26 Llama, Gemma and other models March 30, 2027","gateAt":"2027-03-30","daysLeft":161,"verdict":"Act","fix":["Change the model ID in your code to an Active model.","Check the state in your Region: call `ListFoundationModels` and read `modelLifecycle`."],"url":"https://timetobail.com/e/bedrock-open-models-eol-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:(?:us|eu|apac|jp|au|ca|global)\\.)?(?:deepseek\\.r1-v1:0|deepseek\\.v3-v1:0|deepseek\\.v3\\.1|google\\.gemma-3-(?:4b|12b|27b)-it|meta\\.llama3-(?:8b|70b)-instruct-v1:0|meta\\.llama3-1-(?:8b|70b)-instruct-v1:0|meta\\.llama3-3-70b-instruct-v1:0|meta\\.llama4-(?:maverick|scout)-17b-instruct-v1:0|minimax\\.minimax-m2(?:\\.1)?|mistral\\.devstral-2-123b|mistral\\.mistral-7b-instruct-v0:2|mistral\\.mixtral-8x7b-instruct-v0:1|mistral\\.voxtral-(?:mini-3b|small-24b)-2507|moonshot(?:ai)?\\.kimi-k2-thinking|nvidia\\.nemotron-nano-(?:9b|12b)-v2|qwen\\.qwen3-coder-(?:30b-a3b|480b-a35b)-(?:v1:0|instruct)|zai\\.glm-4\\.7(?:-flash)?)(?![\\w.:-])","fileRequires":"bedrock","fileFlags":"i","hint":"This model ends on Bedrock March 30, 2027. Pick an Active model in your Region and test it."},{"ruleId":"aks-1-35","eventId":"evt_aks_1_35_end_of_life_2027","slug":"aks-1-35-end-of-life-2027","title":"AKS cluster on 1.35","event":"AKS Kubernetes 1.35 end of life: March 2027","gateAt":"2027-03-31","daysLeft":162,"verdict":"Act","fix":["Check cluster versions: In the Azure portal, check the Kubernetes version of each cluster. Look for 1.35."],"url":"https://timetobail.com/e/aks-1-35-end-of-life-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\b(?:kubernetes_version|orchestrator_version|kubernetesVersion|orchestratorVersion)[\\\"']?\\s*[:=]\\s*[\\\"']1\\.35(?:\\.\\d+)?[\\\"']","fileRequires":"azurerm_kubernetes_cluster|Microsoft\\.ContainerService/managedClusters","fileExcludes":"AKSLongTermSupport","hint":"Upgrade the cluster to 1.36 or newer, or enable LTS. AKS can upgrade it for you after the grace period."},{"ruleId":"app-engine-ruby-3-3","eventId":"evt_app_engine_ruby_3_3_end_of_support_2027","slug":"app-engine-ruby-3-3-end-of-support-2027","title":"App Engine runtime ruby33","event":"App Engine Ruby 3.3 runtime: support ends March 31, 2027","gateAt":"2027-03-31","daysLeft":162,"verdict":"Act","fix":["Set `runtime:` in app.yaml to `ruby34` or `ruby40`.","Deploy again and test each service."],"url":"https://timetobail.com/e/app-engine-ruby-3-3-end-of-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["app.{yaml,yml}"],"pattern":"^[ \\t]*runtime:[ \\t]*[\\\"']?(?:ruby33)[\\\"']?[ \\t]*(?:#.*)?\\r?$","hint":"Set runtime to ruby34 or ruby40 in app.yaml and deploy again."},{"ruleId":"aws-lambda-ruby-3-3","eventId":"evt_aws_lambda_ruby_3_3_deprecation_2027","slug":"aws-lambda-ruby-3-3-deprecation-2027","title":"Lambda runtime ruby3.3","event":"AWS Lambda Ruby 3.3 runtime deprecated March 31, 2027","gateAt":"2027-03-31","daysLeft":162,"verdict":"Act","fix":["Find your `ruby3.3` functions: `aws lambda list-functions --function-version ALL --region us-east-1 --output text --query \"Functions[?Runtime=='ruby3.3'].FunctionArn\"`. Run it in each region.","Change the runtime to `ruby3.4` or `ruby4.0`. Test it before you ship.","Use versions and aliases, so you can roll back.","Finish before July 29, 2027 (no new functions) and August 31, 2027 (no updates)."],"url":"https://timetobail.com/e/aws-lambda-ruby-3-3-deprecation-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["serverless.{yml,yaml}","template.{yml,yaml,json}","*.template.{yml,yaml,json}","*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\b[Rr]untime[\\\"']?\\s*[:=]\\s*[\\\"']?ruby3\\.3(?![\\w.])|\\bRuntime[._]RUBY_3_3\\b","hint":"Set the runtime to ruby3.4 or ruby4.0, rebuild gems and test before you deploy."},{"ruleId":"rds-postgres-11","eventId":"evt_aws_rds_postgres_11_end_of_extended_support_2027","slug":"aws-rds-postgres-11-end-of-extended-support-2027","title":"RDS or Aurora on PostgreSQL 11","event":"RDS and Aurora PostgreSQL 11 Extended Support ends March 31, 2027","gateAt":"2027-03-31","daysLeft":162,"verdict":"Act","fix":["Find PostgreSQL 11 databases: In the RDS console, filter databases by engine version 11. Check RDS and Aurora."],"url":"https://timetobail.com/e/aws-rds-postgres-11-end-of-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\bengine_version\\s*=\\s*\\\"11(?:\\.\\d+)?\\\"|\\b(?:Aurora)?PostgresEngineVersion\\.VER_11(?:_\\d+)?\\b","fileRequires":"engine\\s*=\\s*\\\"(?:postgres|aurora-postgresql)\\\"|PostgresEngineVersion","hint":"Extended Support for PostgreSQL 11 ends March 31, 2027, then AWS upgrades it. Upgrade first."},{"ruleId":"cloud-functions-go-1-25","eventId":"evt_cloud_functions_go_1_25_decommission_2027","slug":"cloud-functions-go-1-25-decommission-2027","title":"Cloud Run functions on go125","event":"Go 1.25 functions on Google Cloud: decommissioned April 1, 2027","gateAt":"2027-04-01","daysLeft":163,"verdict":"Act","fix":["Set the runtime ID to `go126` or `go127`, then deploy again.","Check the support schedule first: Go 1.26 dates are approximate (deprecated Feb/March 2027); Go 1.27 deprecated Aug/Sept 2027."],"url":"https://timetobail.com/e/cloud-functions-go-1-25-decommission-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","firebase.json","package.json","*.{sh,yml,yaml}","Makefile"],"pattern":"--runtime[= ]go125(?![\\w.])|\\bruntime\\s*=\\s*\\\"go125\\\"|\\\"runtime\\\"\\s*:\\s*\\\"go125\\\"|\\bruntime:[ \\t]*[\\\"']?go125[\\\"']?[ \\t]*\\r?$","fileRequires":"google_cloudfunctions|gcloud functions|\"functions\"|deploy-cloud-functions","hint":"Set the runtime to go126 or go127 and deploy each function again."},{"ruleId":"docker-hub-autobuild-hooks","eventId":"evt_docker_hub_automated_builds_retirement_2027","slug":"docker-hub-automated-builds-retirement-2027","title":"Docker Hub Autobuild hook file","event":"Docker Hub Automated Builds are retired April 1, 2027","gateAt":"2027-04-01","daysLeft":163,"verdict":"Bail","fix":["Copy your build settings: In Docker Hub, open Builds, then Configure automated builds. Note the rules and variables."],"url":"https://timetobail.com/e/docker-hub-automated-builds-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["**/hooks/{build,test,push,post_checkout,pre_build,post_build,pre_test,post_test,pre_push,post_push}"],"pattern":"\\$\\{?(?:IMAGE_NAME|DOCKER_REPO|DOCKER_TAG|DOCKERFILE_PATH)\\b","hint":"Autobuilds retire April 1, 2027: move this hook into a GitHub Actions or Bitbucket Pipelines workflow."},{"ruleId":"exchange-online-ews","eventId":"evt_exchange_online_ews_shutdown_2027","slug":"exchange-online-ews-shutdown-2027","title":"Exchange Online EWS endpoint","event":"Exchange Online turns off EWS for good on April 1, 2027","gateAt":"2027-04-01","daysLeft":163,"verdict":"Act","fix":["Find what still uses EWS: Open the EWS usage reports in the Microsoft 365 admin center. List each app and script."],"url":"https://timetobail.com/e/exchange-online-ews-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,ps1,config}"],"pattern":"outlook\\.office365\\.com/EWS/Exchange\\.asmx","flags":"i","hint":"Move the app or script to Microsoft Graph."},{"ruleId":"openai-gpt-5-1-codex-nano-code","eventId":"evt_openai_gpt_5_1_codex_nano_shutdown_2027","slug":"openai-gpt-5-1-codex-nano-shutdown-2027","title":"OpenAI gpt-5.1, gpt-5.3-codex or gpt-5.4-nano","event":"OpenAI ends gpt-5.1, gpt-5.3-codex and gpt-5.4-nano on April 1, 2027","gateAt":"2027-04-01","daysLeft":163,"verdict":"Act","fix":["Change `gpt-5.1` and `gpt-5.3-codex` to `gpt-6-sol`, and `gpt-5.4-nano` to `gpt-6-luna`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-gpt-5-1-codex-nano-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}"],"pattern":"([\"'\\x60])(?:gpt-5\\.1|gpt-5\\.3-codex|gpt-5\\.4-nano)\\1","fileExcludes":"azure","fileFlags":"i","hint":"Move gpt-5.1 and gpt-5.3-codex to gpt-6-sol, and gpt-5.4-nano to gpt-6-luna, before April 1, 2027."},{"ruleId":"openai-gpt-5-1-codex-nano-config","eventId":"evt_openai_gpt_5_1_codex_nano_shutdown_2027","slug":"openai-gpt-5-1-codex-nano-shutdown-2027","title":"OpenAI gpt-5.1, gpt-5.3-codex or gpt-5.4-nano","event":"OpenAI ends gpt-5.1, gpt-5.3-codex and gpt-5.4-nano on April 1, 2027","gateAt":"2027-04-01","daysLeft":163,"verdict":"Act","fix":["Change `gpt-5.1` and `gpt-5.3-codex` to `gpt-6-sol`, and `gpt-5.4-nano` to `gpt-6-luna`.","See what shuts down next: call `GET /v1/models` and read each model's `shutdown_date`."],"url":"https://timetobail.com/e/openai-gpt-5-1-codex-nano-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}"],"pattern":"^[ \\t]*[\"']?[\\w.-]*model[\\w.-]*[\"']?[ \\t]*[:=][ \\t]*[\"']?(?:gpt-5\\.1|gpt-5\\.3-codex|gpt-5\\.4-nano)[\"']?[ \\t]*(?:#.*)?\\r?$","flags":"i","hint":"Move gpt-5.1 and gpt-5.3-codex to gpt-6-sol, and gpt-5.4-nano to gpt-6-luna."},{"ruleId":"vertex-ai-legacy-embeddings","eventId":"evt_vertex_ai_legacy_embeddings_retirement_2027","slug":"vertex-ai-legacy-embeddings-retirement-2027","title":"Older Vertex AI embedding model","event":"Older Vertex AI embedding models retire on April 1, 2027","gateAt":"2027-04-01","daysLeft":163,"verdict":"Act","fix":["Find the old model names: Search for the four names on Google's list, such as text-embedding-004."],"url":"https://timetobail.com/e/vertex-ai-legacy-embeddings-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.@-])(?:text-embedding-005|text-embedding-004|text-multilingual-embedding-002|multimodalembedding@001)(?![\\w.@-])","fileRequires":"vertex|aiplatform","fileFlags":"i","hint":"Pick a newer embedding model before April 1, 2027 and test search results; you may need to embed stored text again."},{"ruleId":"cloud-functions-python-3-10","eventId":"evt_cloud_functions_python_3_10_decommission_2027","slug":"cloud-functions-python-3-10-decommission-2027","title":"Cloud Run functions on python310","event":"Python 3.10 functions on Google Cloud: decommissioned April 4, 2027","gateAt":"2027-04-04","daysLeft":166,"verdict":"Act","fix":["Set the runtime ID to `python312`, `python313` or `python314`, then deploy again.","Check the support schedule first: python312 is decommissioned April 2, 2029, python313 April 10, 2030, python314 April 10, 2031."],"url":"https://timetobail.com/e/cloud-functions-python-3-10-decommission-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","firebase.json","package.json","*.{sh,yml,yaml}","Makefile"],"pattern":"--runtime[= ]python310(?![\\w.])|\\bruntime\\s*=\\s*\\\"python310\\\"|\\\"runtime\\\"\\s*:\\s*\\\"python310\\\"|\\bruntime:[ \\t]*[\\\"']?python310[\\\"']?[ \\t]*\\r?$","fileRequires":"google_cloudfunctions|gcloud functions|\"functions\"|deploy-cloud-functions","hint":"Set the runtime to python312, python313 or python314 and deploy each function again."},{"ruleId":"opsgenie","eventId":"evt_opsgenie_shutdown_2027","slug":"opsgenie-shutdown-2027","title":"Opsgenie resource or API","event":"Opsgenie shuts down April 5, 2027, and unmoved data is deleted","gateAt":"2027-04-05","daysLeft":167,"verdict":"Bail","fix":["Save your setup first: Write down schedules, escalation rules, integrations and routing before you move anything."],"url":"https://timetobail.com/e/opsgenie-shutdown-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.json"],"pattern":"^[ \\t]*(?:resource|data)\\s+\"opsgenie_\\w+\"|\\bapi(?:\\.eu)?\\.opsgenie\\.com\\b","hint":"Move to Jira Service Management (Settings > Plan your move) before your data is deleted."},{"ruleId":"bedrock-claude-sonnet-4-5","eventId":"evt_bedrock_claude_sonnet_4_5_eol_2027","slug":"bedrock-claude-sonnet-4-5-eol-2027","title":"Claude Sonnet 4.5 on Amazon Bedrock","event":"Claude Sonnet 4.5 on Amazon Bedrock ends April 8, 2027","gateAt":"2027-04-08","daysLeft":170,"verdict":"Act","fix":["Change the model ID in your code to an Active model.","Check the state in your Region: call `ListFoundationModels` and read `modelLifecycle`."],"url":"https://timetobail.com/e/bedrock-claude-sonnet-4-5-eol-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.{py,js,mjs,cjs,ts,tsx,jsx,go,rb,java,kt,cs,php}","*.{yml,yaml,toml}","*.env.example",".env.{example,sample,template}","*.{json,tf}"],"pattern":"(?<![\\w.-])(?:(?:us|eu|apac|jp|au|ca|global)\\.)?(?:anthropic\\.claude-sonnet-4-5-20250929-v1:0)(?![\\w.:-])","hint":"Claude Sonnet 4.5 ends on Bedrock April 8, 2027; prices may rise from January 8. Move to a newer Claude model."},{"ruleId":"gke-1-35","eventId":"evt_gke_1_35_end_of_standard_support_2027","slug":"gke-1-35-end-of-standard-support-2027","title":"GKE cluster on 1.35","event":"GKE 1.35 standard support ends April 11, 2027","gateAt":"2027-04-11","daysLeft":173,"verdict":"Act","fix":["Check your clusters: In the console, check the version and release channel of each cluster. Look for 1.35."],"url":"https://timetobail.com/e/gke-1-35-end-of-standard-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:min_master_version|kubernetes_version|node_version|version)\\s*=\\s*\\\"1\\.35(?:\\.\\d+(?:-gke\\.\\d+)?)?\\\"","fileRequires":"google_container_cluster|google_container_node_pool|terraform-google-modules/kubernetes-engine","hint":"Upgrade the control plane, then each node pool, to 1.36 or newer, or plan for the Extended channel fee."},{"ruleId":"cloud-sql-sql-server-2017","eventId":"evt_cloud_sql_sql_server_2017_no_new_instances_2027","slug":"cloud-sql-sql-server-2017-no-new-instances-2027","title":"Cloud SQL on SQL Server 2017","event":"Cloud SQL for SQL Server 2017: no new instances from April 12, 2027","gateAt":"2027-04-12","daysLeft":174,"verdict":"Act","fix":["Find SQL Server 2017 instances: In the console, filter Cloud SQL instances by database version."],"url":"https://timetobail.com/e/cloud-sql-sql-server-2017-no-new-instances-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{sh,yml,yaml}"],"pattern":"\\bSQLSERVER_2017_(?:STANDARD|ENTERPRISE|EXPRESS|WEB)\\b","hint":"New SQL Server 2017 instances fail from April 12, 2027. Move to a newer SQL Server version."},{"ruleId":"azure-openai-gpt-4o-gpt-4-1","eventId":"evt_azure_openai_gpt_4o_gpt_4_1_retirement_2027","slug":"azure-openai-gpt-4o-gpt-4-1-retirement-2027","title":"Azure OpenAI gpt-4o or gpt-4.1 deployment","event":"Azure OpenAI gpt-4o and gpt-4.1 models retire April 14, 2027","gateAt":"2027-04-14","daysLeft":176,"verdict":"Act","fix":["Deploy a newer model and point your app to it. For gpt-4o the schedule names `gpt-5.1`.","Check dates with the Models API: read `lifecycleStatus` and `deprecation.inference`."],"url":"https://timetobail.com/e/azure-openai-gpt-4o-gpt-4-1-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\bname[\"']?\\s*[:=]\\s*[\"'](?:gpt-4o|gpt-4o-mini|gpt-4\\.1|gpt-4\\.1-mini|gpt-4\\.1-nano)[\"']","fileRequires":"azurerm_cognitive_deployment|Microsoft\\.CognitiveServices/accounts/deployments","hint":"These retire by April 14, 2027. gpt-4o goes to gpt-5.1, which retires May 15, 2027; pick a newer model if you can."},{"ruleId":"azure-pipelines-ubuntu-22-04","eventId":"evt_github_actions_ubuntu_22_04_retirement_2027","slug":"github-actions-ubuntu-22-04-retirement-2027","title":"Azure Pipelines vmImage ubuntu-22.04","event":"GitHub Actions ubuntu-22.04 runners retire April 17, 2027","gateAt":"2027-04-17","daysLeft":179,"verdict":"Act","fix":["Search `.github/workflows` for `ubuntu-22.04`.","Change `ubuntu-22.04` to `ubuntu-24.04`, `ubuntu-26.04` or `ubuntu-latest`.","For Arm, change `ubuntu-22.04-arm` to `ubuntu-24.04-arm` or `ubuntu-26.04-arm`."],"url":"https://timetobail.com/e/github-actions-ubuntu-22-04-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["azure-pipelines*.{yml,yaml}",".azure-pipelines/**/*.{yml,yaml}",".azuredevops/**/*.{yml,yaml}",".pipelines/**/*.{yml,yaml}"],"pattern":"\\bvmImage[\"']?\\s*:\\s*[\"']?ubuntu-22\\.04[\"']?(?![\\w.-])","flags":"i","hint":"Set vmImage to ubuntu-24.04, ubuntu-26.04 or ubuntu-latest before April 17, 2027."},{"ruleId":"github-actions-ubuntu-22-04","eventId":"evt_github_actions_ubuntu_22_04_retirement_2027","slug":"github-actions-ubuntu-22-04-retirement-2027","title":"GitHub Actions runner ubuntu-22.04","event":"GitHub Actions ubuntu-22.04 runners retire April 17, 2027","gateAt":"2027-04-17","daysLeft":179,"verdict":"Act","fix":["Search `.github/workflows` for `ubuntu-22.04`.","Change `ubuntu-22.04` to `ubuntu-24.04`, `ubuntu-26.04` or `ubuntu-latest`.","For Arm, change `ubuntu-22.04-arm` to `ubuntu-24.04-arm` or `ubuntu-26.04-arm`."],"url":"https://timetobail.com/e/github-actions-ubuntu-22-04-retirement-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":[".github/workflows/*.{yml,yaml}"],"pattern":"(?<![\\w.-])ubuntu-22\\.04(?:-arm)?(?![\\w.-])","hint":"Change the runner label to ubuntu-24.04, ubuntu-26.04 or ubuntu-latest (ubuntu-24.04-arm or ubuntu-26.04-arm for Arm)."},{"ruleId":"app-engine-nodejs-22","eventId":"evt_app_engine_nodejs_22_end_of_support_2027","slug":"app-engine-nodejs-22-end-of-support-2027","title":"App Engine runtime nodejs22","event":"App Engine Node.js 22 runtime: support ends April 30, 2027","gateAt":"2027-04-30","daysLeft":192,"verdict":"Act","fix":["Set `runtime:` in app.yaml to `nodejs24`.","Deploy again and test each service."],"url":"https://timetobail.com/e/app-engine-nodejs-22-end-of-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["app.{yaml,yml}"],"pattern":"^[ \\t]*runtime:[ \\t]*[\\\"']?(?:nodejs22)[\\\"']?[ \\t]*(?:#.*)?\\r?$","hint":"Set runtime to nodejs24 in app.yaml and deploy again."},{"ruleId":"aws-lambda-nodejs-22","eventId":"evt_aws_lambda_nodejs_22_deprecation_2027","slug":"aws-lambda-nodejs-22-deprecation-2027","title":"Lambda runtime nodejs22.x","event":"AWS Lambda Node.js 22 runtime deprecated April 30, 2027","gateAt":"2027-04-30","daysLeft":192,"verdict":"Act","fix":["Find your `nodejs22.x` functions: `aws lambda list-functions --function-version ALL --region us-east-1 --output text --query \"Functions[?Runtime=='nodejs22.x'].FunctionArn\"`. Run it in each region.","Change the runtime to `nodejs24.x`. Test it before you ship.","Use versions and aliases, so you can roll back.","Finish before July 29, 2027 (no new functions) and August 31, 2027 (no updates)."],"url":"https://timetobail.com/e/aws-lambda-nodejs-22-deprecation-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["serverless.{yml,yaml}","template.{yml,yaml,json}","*.template.{yml,yaml,json}","*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\b[Rr]untime[\\\"']?\\s*[:=]\\s*[\\\"']?nodejs22\\.x(?![\\w.])|\\bRuntime[._]NODEJS_22_X\\b","hint":"Set the runtime to nodejs24.x, update packages and test before you deploy."},{"ruleId":"azure-functions-nodejs-22","eventId":"evt_azure_functions_nodejs_22_end_of_support_2027","slug":"azure-functions-nodejs-22-end-of-support-2027","title":"Azure Functions on Node.js 22","event":"Azure Functions Node.js 22 support ends April 30, 2027","gateAt":"2027-04-30","daysLeft":192,"verdict":"Act","fix":["Find apps on Node.js 22: Check WEBSITE_NODE_DEFAULT_VERSION on Windows and linuxFxVersion on Linux."],"url":"https://timetobail.com/e/azure-functions-nodejs-22-end-of-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.json","*.tf","*.bicep","*.{yml,yaml}","*.{sh,ps1}"],"pattern":"WEBSITE_NODE_DEFAULT_VERSION[\\\"']?\\s*[,:=]?\\s*(?:[\\\"']?value[\\\"']?\\s*:\\s*)?[\\\"']?~22(?![\\d.])|linuxFxVersion[\\\"']?\\s*[:=]\\s*[\\\"']Node\\|22[\\\"']|\\bnode_version\\s*=\\s*\\\"~?22\\\"","fileRequires":"FUNCTIONS_WORKER_RUNTIME|FUNCTIONS_EXTENSION_VERSION|azurerm_(?:linux|windows)_function_app|functionapp","hint":"Move the function app to Node.js 24. On Linux Consumption, move to Flex Consumption first."},{"ruleId":"cloud-functions-dotnet-8","eventId":"evt_cloud_functions_dotnet_8_decommission_2027","slug":"cloud-functions-dotnet-8-decommission-2027","title":"Cloud Run functions on dotnet8","event":".NET 8 functions on Google Cloud: decommissioned May 10, 2027","gateAt":"2027-05-10","daysLeft":202,"verdict":"Act","fix":["Set the runtime ID to `dotnet10`, then deploy again.","Check the support schedule first: dotnet10 (.NET 10) is deprecated November 14, 2028 and decommissioned May 14, 2029."],"url":"https://timetobail.com/e/cloud-functions-dotnet-8-decommission-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","firebase.json","package.json","*.{sh,yml,yaml}","Makefile"],"pattern":"--runtime[= ]dotnet8(?![\\w.])|\\bruntime\\s*=\\s*\\\"dotnet8\\\"|\\\"runtime\\\"\\s*:\\s*\\\"dotnet8\\\"|\\bruntime:[ \\t]*[\\\"']?dotnet8[\\\"']?[ \\t]*\\r?$","fileRequires":"google_cloudfunctions|gcloud functions|\"functions\"|deploy-cloud-functions","hint":"Build the function for .NET 10, set the runtime to dotnet10 and deploy it again."},{"ruleId":"gitlab-job-token-base64","eventId":"evt_gitlab_ci_job_token_legacy_format_end_2027","slug":"gitlab-ci-job-token-legacy-format-end-2027","title":"CI_JOB_TOKEN piped to base64 with wrapping","event":"GitLab legacy CI/CD job token format ends in 20.0 (May 20, 2027)","gateAt":"2027-05-20","daysLeft":212,"verdict":"Act","fix":["Use `echo $CI_JOB_TOKEN | base64 -w0` to stop line wrapping.","Upgrade the AWS Fargate custom executor to `0.5.1` or later."],"url":"https://timetobail.com/e/gitlab-ci-job-token-legacy-format-end-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":[".gitlab-ci.yml","*.gitlab-ci.{yml,yaml}",".gitlab/**/*.{yml,yaml}","*.sh"],"pattern":"\\$\\{?CI_JOB_TOKEN\\}?[\"']?[ \\t]*\\|[ \\t]*base64\\b","exclude":"base64[ \\t]+(?:-w[ \\t]*0|--wrap=0)|\\|[ \\t]*tr[ \\t]+-d","hint":"Use base64 -w0: JWT job tokens are long and base64 line wrapping breaks them."},{"ruleId":"gitlab-retry-when-legacy-reasons","eventId":"evt_gitlab_retry_when_legacy_reasons_removal_2027","slug":"gitlab-retry-when-legacy-reasons-removal-2027","title":"GitLab retry:when old failure reason","event":"GitLab 20.0 removes old retry:when failure reasons (May 20, 2027)","gateAt":"2027-05-20","daysLeft":212,"verdict":"Act","fix":["Search your CI files: Look for the two old names in .gitlab-ci.yml and in files it includes."],"url":"https://timetobail.com/e/gitlab-retry-when-legacy-reasons-removal-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":[".gitlab-ci.yml","*.gitlab-ci.{yml,yaml}",".gitlab/**/*.{yml,yaml}"],"pattern":"(?<![\\w-])(?:stuck_or_timeout_failure|job_execution_timeout)(?![\\w-])","fileRequires":"\\bretry\\s*:","hint":"Use stuck_pending_*, no_updates_* or server_timeout_* reasons instead; the old values go in GitLab 20.0."},{"ruleId":"gitlab-runner-docker-machine","eventId":"evt_gitlab_runner_docker_machine_removal_2027","slug":"gitlab-runner-docker-machine-removal-2027","title":"GitLab Runner docker+machine executor","event":"GitLab 20.0 removes the Docker Machine executor (May 20, 2027)","gateAt":"2027-05-20","daysLeft":212,"verdict":"Act","fix":["Find your autoscaling runners: Look for executor = \"docker+machine\" in each runner config.toml."],"url":"https://timetobail.com/e/gitlab-runner-docker-machine-removal-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.toml","*.{tpl,tftpl,tmpl,j2}","*.{yml,yaml}","*.tf","*.sh","Dockerfile"],"pattern":"\\bexecutor\\s*=\\s*\\\\?[\"']docker\\+machine\\\\?[\"']|--executor[= ][\"']?docker\\+machine\\b|\\bRUNNER_EXECUTOR[\"']?\\s*[:=]\\s*[\"']?docker\\+machine\\b","hint":"Move these runners to GitLab Runner Autoscaler (AWS, Google or Azure plugin) before GitLab 20.0."},{"ruleId":"aks-1-33-no-lts","eventId":"evt_aks_platform_initiated_upgrades_2027","slug":"aks-platform-initiated-upgrades-2027","title":"AKS cluster on 1.33 without LTS","event":"AKS starts upgrading unsupported clusters June 1, 2027","gateAt":"2027-06-01","daysLeft":224,"verdict":"Act","fix":["List the versions in your region: `az aks get-versions --location <region> --output table`","Upgrade the cluster: `az aks upgrade --resource-group <resource-group> --name <cluster-name> --kubernetes-version <target-version>`","Update manifests, clients and add-ons that use APIs the new version removed."],"url":"https://timetobail.com/e/aks-platform-initiated-upgrades-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\b(?:kubernetes_version|orchestrator_version|kubernetesVersion|orchestratorVersion)[\\\"']?\\s*[:=]\\s*[\\\"']1\\.33(?:\\.\\d+)?[\\\"']","fileRequires":"azurerm_kubernetes_cluster|Microsoft\\.ContainerService/managedClusters","fileExcludes":"AKSLongTermSupport","hint":"1.33 is out of support without LTS. Upgrade before June 1, 2027, or AKS upgrades it outside your maintenance window."},{"ruleId":"aks-unsupported-version","eventId":"evt_aks_platform_initiated_upgrades_2027","slug":"aks-platform-initiated-upgrades-2027","title":"AKS cluster on an unsupported version","event":"AKS starts upgrading unsupported clusters June 1, 2027","gateAt":"2027-06-01","daysLeft":224,"verdict":"Act","fix":["List the versions in your region: `az aks get-versions --location <region> --output table`","Upgrade the cluster: `az aks upgrade --resource-group <resource-group> --name <cluster-name> --kubernetes-version <target-version>`","Update manifests, clients and add-ons that use APIs the new version removed."],"url":"https://timetobail.com/e/aks-platform-initiated-upgrades-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.bicep","*.json"],"pattern":"\\b(?:kubernetes_version|orchestrator_version|kubernetesVersion|orchestratorVersion)[\\\"']?\\s*[:=]\\s*[\\\"']1\\.(?:2\\d|3[0-2])(?:\\.\\d+)?[\\\"']","fileRequires":"azurerm_kubernetes_cluster|Microsoft\\.ContainerService/managedClusters","hint":"This version is out of support. Upgrade before June 1, 2027, or AKS upgrades it outside your maintenance window."},{"ruleId":"gke-1-33","eventId":"evt_gke_1_33_end_of_extended_support_2027","slug":"gke-1-33-end-of-extended-support-2027","title":"GKE cluster on 1.33","event":"GKE 1.33 extended support ends June 12, 2027","gateAt":"2027-06-12","daysLeft":235,"verdict":"Act","fix":["Upgrade the control plane yourself first: `gcloud container clusters upgrade CLUSTER_NAME --master --location=CONTROL_PLANE_LOCATION`","Then upgrade each node pool: `gcloud container clusters upgrade CLUSTER_NAME --node-pool=NODE_POOL_NAME --location=CONTROL_PLANE_LOCATION`"],"url":"https://timetobail.com/e/gke-1-33-end-of-extended-support-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf"],"pattern":"\\b(?:min_master_version|kubernetes_version|node_version|version)\\s*=\\s*\\\"1\\.33(?:\\.\\d+(?:-gke\\.\\d+)?)?\\\"","fileRequires":"google_container_cluster|google_container_node_pool|terraform-google-modules/kubernetes-engine","hint":"Upgrade the control plane, then each node pool, to 1.34 or newer before GKE does it for you."},{"ruleId":"gke-no-channel","eventId":"evt_gke_no_channel_removed_2027","slug":"gke-no-channel-removed-2027","title":"GKE cluster with No channel","event":"GKE No channel option removed June 14, 2027","gateAt":"2027-06-14","daysLeft":237,"verdict":"Act","fix":["To pick another channel: `gcloud container clusters update CLUSTER_NAME --release-channel CHANNEL`","To hold back upgrades, add a maintenance exclusion with the scope you need."],"url":"https://timetobail.com/e/gke-no-channel-removed-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","*.{sh,yml,yaml}","Makefile"],"pattern":"\\bchannel\\s*=\\s*\\\"UNSPECIFIED\\\"|--release-channel[= ](?:None|none)\\b","fileRequires":"google_container_cluster|gcloud container clusters","hint":"Pick a release channel (Rapid, Regular, Stable or Extended) before June 14, 2027, or GKE moves you to Stable."},{"ruleId":"aws-lambda-java-al2","eventId":"evt_aws_lambda_java_al2_deprecation_2027","slug":"aws-lambda-java-al2-deprecation-2027","title":"Lambda Java runtime on Amazon Linux 2","event":"AWS Lambda Java runtimes on Amazon Linux 2 deprecated June 30, 2027","gateAt":"2027-06-30","daysLeft":253,"verdict":"Act","fix":["Find the functions: `aws lambda list-functions --function-version ALL --region us-east-1 --output text --query \"Functions[?Runtime=='java17'].FunctionArn\"`. Repeat for `java11` and `java8.al2`, in each region.","Change the runtime to `java17.al2023` (or `java11.al2023`, `java8.al2023`, `java21`, `java25`). Test it before you ship.","Use versions and aliases, so you can roll back.","Finish before July 29, 2027 (no new functions) and August 31, 2027 (no updates)."],"url":"https://timetobail.com/e/aws-lambda-java-al2-deprecation-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["serverless.{yml,yaml}","template.{yml,yaml,json}","*.template.{yml,yaml,json}","*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\b[Rr]untime[\\\"']?\\s*[:=]\\s*[\\\"']?(?:java17|java11|java8\\.al2)(?![\\w.])|\\bRuntime[._](?:JAVA_17|JAVA_11|JAVA_8_CORRETTO)\\b","fileExcludes":"google_cloudfunctions|gcloud functions|google_app_engine","hint":"Use java17.al2023, java11.al2023 or java8.al2023 to keep your Java version, or move to java21 or java25."},{"ruleId":"aws-lambda-python-3-11","eventId":"evt_aws_lambda_python_3_11_deprecation_2027","slug":"aws-lambda-python-3-11-deprecation-2027","title":"Lambda runtime python3.11","event":"AWS Lambda Python 3.11 runtime deprecated June 30, 2027","gateAt":"2027-06-30","daysLeft":253,"verdict":"Act","fix":["Find your `python3.11` functions: `aws lambda list-functions --function-version ALL --region us-east-1 --output text --query \"Functions[?Runtime=='python3.11'].FunctionArn\"`. Run it in each region.","Change the runtime to `python3.12`, `python3.13` or `python3.14`. Test it before you ship.","Use versions and aliases, so you can roll back.","Finish before July 29, 2027 (no new functions) and August 31, 2027 (no updates)."],"url":"https://timetobail.com/e/aws-lambda-python-3-11-deprecation-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["serverless.{yml,yaml}","template.{yml,yaml,json}","*.template.{yml,yaml,json}","*.tf","*.{ts,js,py,java,cs,go}"],"pattern":"\\b[Rr]untime[\\\"']?\\s*[:=]\\s*[\\\"']?python3\\.11(?![\\w.])|\\bRuntime[._]PYTHON_3_11\\b","hint":"Set the runtime to python3.12, python3.13 or python3.14, rebuild layers and test before you deploy."},{"ruleId":"cloud-functions-php-8-2","eventId":"evt_cloud_functions_php_8_2_decommission_2027","slug":"cloud-functions-php-8-2-decommission-2027","title":"Cloud Run functions on php82","event":"PHP 8.2 functions on Google Cloud: decommissioned June 30, 2027","gateAt":"2027-06-30","daysLeft":253,"verdict":"Act","fix":["Set the runtime ID to `php84` or `php85`, then deploy again.","Check the support schedule first: php83 is decommissioned June 30, 2028, php84 June 30, 2029, php85 June 30, 2030."],"url":"https://timetobail.com/e/cloud-functions-php-8-2-decommission-2027?utm_source=github-action&utm_medium=bot&utm_campaign=deadline-check","files":["*.tf","firebase.json","package.json","*.{sh,yml,yaml}","Makefile"],"pattern":"--runtime[= ]php82(?![\\w.])|\\bruntime\\s*=\\s*\\\"php82\\\"|\\\"runtime\\\"\\s*:\\s*\\\"php82\\\"|\\bruntime:[ \\t]*[\\\"']?php82[\\\"']?[ \\t]*\\r?$","fileRequires":"google_cloudfunctions|gcloud functions|\"functions\"|deploy-cloud-functions","hint":"Set the runtime to php84 or php85 and deploy each function again."}]}