{"id":92317,"plugin_id":"plugin_asdk_app_6af23713f3b881919d1c72c718de809f","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-12T00:10:00.481Z","digest":"436edd9199aa396430ca17aaa6cc4346ea7bbf75d4af449735d54e6230af4257","against":null,"payload":{"description":"Use when editing CI workflows (.github/workflows/*.yml), Dockerfiles, docker-compose files or runtime version files (.nvmrc, .node-version, .python-version, .tool-versions, go.mod, global.json), when choosing a runtime or base image version, and when a CI runner or image fails. Asks Since.dev which runner images, base images and runtime versions are past or near end of life, and what to move to.","included_files":[],"name":"since-ci-and-runtimes","skill_md_contents":"---\nname: since-ci-and-runtimes\ndescription: Use when editing CI workflows (.github/workflows/*.yml), Dockerfiles, docker-compose files or runtime version files (.nvmrc, .node-version, .python-version, .tool-versions, go.mod, global.json), when choosing a runtime or base image version, and when a CI runner or image fails. Asks Since.dev which runner images, base images and runtime versions are past or near end of life, and what to move to.\n---\n\n# Check runtimes, images and CI runners with Since.dev\n\nRuntimes and CI runners reach end of life on published dates. After that, runtimes stop getting security fixes, and retired CI runner images make jobs fail. Since.dev tracks these dates from each project's own schedule.\n\n## Runtime version files\n\nSend the file to `check_code` as a manifest:\n\n```json\n{ \"manifest\": { \"path\": \".nvmrc\", \"content\": \"18\\n\" } }\n```\n\nThis works for `.nvmrc`, `.node-version`, `.python-version`, `.tool-versions`, `go.mod` and `global.json`. The answer gives each runtime's status, end-of-life date and the line it is on.\n\n## Dockerfiles, compose files and workflows\n\nRead the versions out of the file yourself: base images (`FROM node:18-alpine`), `runs-on:` runner labels (`macos-14`, `ubuntu-22.04`) and `setup-*` action versions (`node-version: 18`). Then check each one as a surface with `check_code`:\n\n```json\n{ \"surface\": \"runtime:node@18\" }\n```\n\n```json\n{ \"surface\": \"runtime:github-actions-runner-images@macos-14\" }\n```\n\nThe surface is `runtime:<product>@<version>`, for example `runtime:python@3.9`, `runtime:go@1.23` or `runtime:dotnet@8`.\n\n## See what ends soon\n\n```json\n{ \"surface\": \"runtime:nodejs\", \"within\": \"180d\" }\n```\n\nWith `whats_changed`, this lists the end-of-life dates coming up, soonest first.\n\n## Moving off an old version\n\nPrefer the newest supported LTS or the version the answer names as the replacement, change every place that pins it (the version file, the Dockerfile, the workflow), then check again. `needs_review` and `unknown` are not settled: read the cited source or ask the user.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}