PageSourceSearch

https://pushci.dev/assets/SkillMarket-BUJLSSsj.js

js pushci.dev collected 2026-10-05 06:31:45 UTC 6,008 bytes, 1 lines download raw bytes

1import{r as l,j as e,N as b,L as f,F as g}from"./index-CXxkL5mz.js";import{V as j}from"./ViralShare-BQj0h46-.js";import{u as N}from"./useDocumentMeta-DnU8Bwjt.js";const v="https://api.pushci.dev",y=[{key:"all",label:"All"},{key:"templates",label:"Templates"},{key:"checks",label:"Checks"},{key:"deploy",label:"Deploy"},{key:"notify",label:"Notify"},{key:"security",label:"Security"},{key:"ai",label:"AI"}];function k(t){return t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function w({skill:t}){return e.jsxs("article",{className:"rounded-xl border border-border-base bg-surface p-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"font-semibold text-t1",children:t.name}),e.jsxs("p",{className:"mt-1 text-xs text-t3",children:[t.author," · v",t.version]})]}),e.jsx("span",{className:"rounded-full border border-border-base px-2 py-0.5 text-[10px] uppercase text-t3",children:t.tier==="premium"?"team":t.tier})]}),e.jsx("p",{className:"mt-3 min-h-10 text-sm leading-relaxed text-t2",children:t.description}),e.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5",children:t.tags.slice(0,3).map(r=>e.jsx("span",{className:"rounded bg-raised px-2 py-0.5 text-[10px] text-t3",children:r},r))}),e.jsxs("div",{className:"mt-4 flex items-center justify-between text-xs text-t3",children:[e.jsx("span",{children:t.statsAvailable===!1?"Install count unavailable":`${k(t.installs)} recorded installs`}),t.rating!=null&&(t.reviewCount??0)>0&&e.jsxs("span",{children:[t.rating.toFixed(1)," / 5 · ",t.reviewCount," reviews"]})]}),e.jsxs("details",{className:"mt-4 border-t border-border-base pt-3",children:[e.jsx("summary",{className:"cursor-pointer text-xs font-medium text-t2",children:"Actual pipeline steps"}),t.steps.length?e.jsx("ol",{className:"mt-3 space-y-2",children:t.steps.map(r=>e.jsxs("li",{className:"text-xs text-t3",children:[e.jsxs("span",{className:"text-t2",children:[r.name,":"]})," ",e.jsx("code",{className:"break-all font-mono",children:r.run})]},`${r.name}-${r.run}`))}):e.jsx("p",{className:"mt-3 text-xs text-t3",children:"This skill runs as a control-plane automation."})]}),e.jsxs("code",{className:"mt-4 block rounded-lg bg-root px-3 py-2 text-xs text-t2",children:["pushci skill add ",t.id]})]})}function L(){const[t,r]=l.useState([]),[o,m]=l.useState("all"),[i,h]=l.useState(""),[n,p]=l.useState(!0),[c,d]=l.useState(!1);N({title:"PushCI Skill Market — Real CI/CD integrations",description:"Browse the live PushCI skill catalog with measured install and review counts.",canonical:"https://pushci.dev/skills"}),l.useEffect(()=>{const s=new AbortController;return fetch(`${v}/api/skills`,{signal:s.signal}).then(async a=>{if(!a.ok)throw new Error(`skills request failed: ${a.status}`);return a.json()}).then(a=>{r(a.skills),d(!1)}).catch(a=>{(a==null?void 0:a.name)!=="AbortError"&&d(!0)}).finally(()=>p(!1)),()=>s.abort()},[]);const x=l.useMemo(()=>t.filter(s=>{if(o!=="all"&&s.category!==o)return!1;if(!i.trim())return!0;const a=i.toLowerCase();return s.name.toLowerCase().includes(a)||s.description.toLowerCase().includes(a)||s.tags.some(u=>u.toLowerCase().includes(a))}),[o,i,t]);return e.jsxs("div",{className:"min-h-screen bg-root",children:[e.jsx(b,{}),e.jsxs("main",{className:"pt-16",children:[e.jsxs("section",{className:"mx-auto max-w-[1080px] px-4 pb-12 pt-16 sm:px-6",children:[e.jsx("p",{className:"text-sm font-medium tracking-wide text-accent",children:"Skill Market"}),e.jsx("h1",{className:"mt-4 max-w-2xl text-3xl font-bold tracking-tight text-t1 sm:text-5xl",children:"The catalog shown here is the catalog you can install"}),e.jsx("p",{className:"mt-4 max-w-xl text-lg leading-relaxed text-t2",children:"Every card comes from the live PushCI API. Install and review totals are recorded by the product, not seeded for display."}),e.jsx("div",{className:"mt-6 text-sm text-t3",children:n?"Loading live catalog…":c?"Catalog temporarily unavailable":`${t.length} live skills`})]}),e.jsxs("div",{className:"mx-auto max-w-[1080px] px-4 pb-20 sm:px-6",children:[e.jsxs("div",{className:"sticky top-16 z-40 mb-8 flex flex-col gap-3 border-b border-border-base/40 bg-root/95 py-4 backdrop-blur-md sm:flex-row",children:[e.jsx("input",{value:i,onChange:s=>h(s.target.value),placeholder:"Search skills…","aria-label":"Search skills",className:"min-w-0 flex-1 rounded-lg border border-border-base bg-surface px-4 py-2 text-sm text-t1 outline-none focus:border-border-em"}),e.jsx("div",{className:"flex gap-1 overflow-x-auto",role:"tablist","aria-label":"Skill categories",children:y.map(s=>e.jsx("button",{role:"tab","aria-selected":o===s.key,onClick:()=>m(s.key),className:`shrink-0 rounded-lg px-3 py-1.5 text-xs font-medium ${o===s.key?"bg-t1 text-root":"text-t3 hover:text-t1"}`,children:s.label},s.key))})]}),c?e.jsx("div",{className:"rounded-xl border border-border-base bg-surface p-8 text-center text-sm text-t3",children:"Live catalog data could not be loaded. Try again shortly."}):!n&&x.length===0?e.jsx("p",{className:"py-16 text-center text-sm text-t3",children:"No live skills match this search."}):e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:x.map(s=>e.jsx(w,{skill:s},s.id))}),e.jsxs("section",{className:"mt-16 rounded-xl border border-border-base bg-surface p-6 sm:p-8",children:[e.jsx("h2",{className:"text-2xl font-bold text-t1",children:"Use the same catalog from the CLI"}),e.jsx("code",{className:"mt-4 block rounded-lg bg-root px-4 py-3 text-sm text-t2",children:"pushci skill list"}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4",children:[e.jsx(f,{to:"/docs",className:"rounded-lg bg-t1 px-5 py-2.5 text-sm font-semibold text-root",children:"Read the guide"}),e.jsx("a",{href:"https://app.pushci.dev",className:"py-2.5 text-sm text-t2 hover:text-t1",children:"Open dashboard →"})]})]}),e.jsx("div",{className:"mt-12 max-w-xl",children:e.jsx(j,{context:"Know someone stuck in YAML?"})})]})]}),e.jsx(g,{})]})}
vendor: 22 bytes, line 1
1export{L as default};

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.