1"use strict";(self.webpackChunkwoodpecker=self.webpackChunkwoodpecker||[]).push([["1183"],{28089(e,n,i){i.r(n),i.d(n,{metadata:()=>s,default:()=>p,frontMatter:()=>l,contentTitle:()=>o,toc:()=>d,assets:()=>c});var s=JSON.parse('{"id":"development/deprecations","title":"Deprecation Policy","description":"Pipeline Configuration Changes","source":"@site/versioned_docs/version-3.16/92-development/40-deprecations.md","sourceDirName":"92-development","slug":"/development/deprecations","permalink":"/docs/3.16/development/deprecations","draft":false,"unlisted":false,"editUrl":"https://github.com/woodpecker-ci/woodpecker/edit/main/docs/versioned_docs/version-3.16/92-development/40-deprecations.md","tags":[],"version":"3.16","sidebarPosition":40,"frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Packaging","permalink":"/docs/3.16/development/packaging"},"next":{"title":"Addons","permalink":"/docs/3.16/development/addons"}}'),t=i(94686),r=i(23191);let l={},o="Deprecation Policy",c={},d=[{value:"Pipeline Configuration Changes",id:"pipeline-configuration-changes",level:2},{value:"Process Timeline",id:"process-timeline",level:3},{value:"Example",id:"example",level:3},{value:"Implementation Checklist",id:"implementation-checklist",level:3}];function a(e){let n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",input:"input",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deprecation-policy",children:"Deprecation Policy"})}),"\n",(0,t.jsx)(n.h2,{id:"pipeline-configuration-changes",children:"Pipeline Configuration Changes"}),"\n",(0,t.jsx)(n.p,{children:"Pipeline configuration (YAML syntax) changes follow a strict deprecation process to ensure users have sufficient time to migrate."}),"\n",(0,t.jsx)(n.h3,{id:"process-timeline",children:"Process Timeline"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Minor Version N.x - Add Deprecation Warning"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Linter shows a warning (not an error)"}),"\n",(0,t.jsx)(n.li,{children:"Old syntax remains functional"}),"\n",(0,t.jsx)(n.li,{children:"Documentation is updated to reflect the new syntax"}),"\n",(0,t.jsx)(n.li,{children:"Warning message includes guidance on required changes"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Major Version (N+1).0 - Warning Becomes Error"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Linter issues an error (pipeline fails)"}),"\n",(0,t.jsx)(n.li,{children:"Old syntax is no longer supported"}),"\n",(0,t.jsx)(n.li,{children:"Breaking change is documented in the migration guide"}),"\n",(0,t.jsxs)(n.li,{children:["Users ",(0,t.jsx)(n.strong,{children:"must"})," update their configurations"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Minor Version (N+1).x - Code Cleanup"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Deprecated code paths are removed"}),"\n",(0,t.jsx)(n.li,{children:"Implementation is simplified/refactored"}),"\n",(0,t.jsx)(n.li,{children:"Parser no longer recognizes the old syntax"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsxs)(n.p,{children:["Old syntax: ",(0,t.jsx)(n.code,{children:"secrets: [token]"}),"\nNew syntax: ",(0,t.jsx)(n.code,{children:"environment: { TOKEN: { from_secret: token } }"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"v2.5.0:"})," Deprecation warning added in linter; both syntaxes work"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"v2.6-2.9:"})," Warning persists; both syntaxes remain functional"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"v3.0.0:"})," Linter error; old syntax fails (breaking change)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"v3.1.0:"})," Deprecated code paths removed; parser simplified"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"implementation-checklist",children:"Implementation Checklist"}),"\n",(0,t.jsx)(n.p,{children:"When deprecating pipeline configuration syntax, ensure the following:"}),"\n",(0,t.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,t.jsxs)(n.li,{className:"task-list-item",children:[(0,t.jsx)(n.input,{type:"checkbox",disabled:!0})," Add linter warning in ",(0,t.jsx)(n.code,{children:"/pipeline/frontend/yaml/linter/"})]}),"\n",(0,t.jsxs)(n.li,{className:"task-list-item",children:[(0,t.jsx)(n.input,{type:"checkbox",disabled:!0})," Update JSON schema in ",(0,t.jsx)(n.code,{children:"/pipeline/frontend/yaml/linter/schema"})]}),"\n",(0,t.jsxs)(n.li,{className:"task-list-item",children:[(0,t.jsx)(n.input,{type:"checkbox",disabled:!0})," Add test cases for deprecated syntax"]}),"\n",(0,t.jsxs)(n.li,{className:"task-list-item",children:[(0,t.jsx)(n.input,{type:"checkbox",disabled:!0})," Update documentation to reflect the new syntax"]}),"\n"]})]})}function p(e={}){let{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},23191(e,n,i){i.d(n,{R:()=>l,x:()=>o});var s=i(92990);let t={},r=s.createContext(t);function l(e){let n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.