garm/webapp/assets/_app/immutable/nodes/15.DkZbKsXF.js
Gabriel Adrian Samfira 69a2c509a7 Replace ${base} with resolve()
This removes some deprecated code.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2025-08-18 13:08:58 +00:00

1 line
14 KiB
JavaScript

import"../chunks/DsnmJJEf.js";import{i as Me}from"../chunks/zNh6Oe5P.js";import{p as Te,E as Ne,o as De,l as w,s as r,m as a,g as e,y as T,a as Se,f as S,k as l,j as c,r as u,c as D,t as Q,v as fe,x as $e,u as j,z as Re,e as ye,d as Fe,h as ze,b as Be,$ as Oe,q as Ce}from"../chunks/sWNKMed7.js";import{a as Ae,i as V,s as Ie}from"../chunks/Ccl3fNd2.js";import{r as X,b as Pe,g as oe}from"../chunks/t8NOL8UT.js";import{e as He,i as Je}from"../chunks/BuuPrWMc.js";import{b as ve,a as Ee}from"../chunks/CLagxtgo.js";import{p as Ve}from"../chunks/D4Caz1gY.js";import{M as Ye}from"../chunks/-99ewtnX.js";import{e as ae}from"../chunks/BZiHL9L3.js";import{F as Ke}from"../chunks/BYXzcXZj.js";import{e as We,a as he}from"../chunks/UPGsoYWO.js";import{U as Qe}from"../chunks/nqMQkPXF.js";import{D as Xe}from"../chunks/Dxyf9P7U.js";import{P as Ze}from"../chunks/sdr-JCKi.js";import{t as J}from"../chunks/BZUCTtPY.js";import{k as et,g as tt,c as rt,m as ot,p as at}from"../chunks/Cbkm53HO.js";import{D as st,G as nt,a as it}from"../chunks/WvS03pW2.js";import{E as lt}from"../chunks/CfvU88k5.js";import{E as dt}from"../chunks/CC0e8UY8.js";import{S as ct}from"../chunks/C7WQ-JBG.js";import"../chunks/BFThZs5w.js";var ut=S('<div class="mb-4 rounded-md bg-red-50 dark:bg-red-900 p-4"><p class="text-sm font-medium text-red-800 dark:text-red-200"> </p></div>'),pt=S('<div class="text-center py-4"><div class="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto"></div> <p class="mt-2 text-sm text-gray-500 dark:text-gray-400">Loading...</p></div>'),mt=S("<option> </option>"),gt=S('<input type="password" class="block w-full px-3 py-2 mt-3 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm" placeholder="Enter webhook secret"/>'),bt=S('<p class="text-sm text-gray-500 dark:text-gray-400">Webhook secret will be automatically generated</p>'),ft=S('<form class="space-y-4"><!> <div><label for="name" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Repository Name</label> <input id="name" type="text" required class="block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm" placeholder="Enter repository name"/></div> <div><label for="owner" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Repository Owner</label> <input id="owner" type="text" required class="block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm" placeholder="Enter repository owner"/></div> <div><label for="credentials" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Credentials</label> <select id="credentials" required class="block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm"><option>Select credentials...</option><!></select></div> <div><div class="flex items-center mb-1"><label for="pool_balancer_type" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Pool Balancer Type</label> <div class="ml-2 relative group"><svg class="w-4 h-4 text-gray-400 cursor-help" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg> <div class="absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 w-80 p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 z-50"><div class="mb-2"><strong>Round Robin:</strong> Cycles through pools in turn. Job 1 → Pool 1, Job 2 → Pool 2, etc.</div> <div><strong>Pack:</strong> Uses first available pool until full, then moves to next pool.</div> <div class="absolute top-full left-1/2 transform -translate-x-1/2 border-4 border-transparent border-t-gray-900"></div></div></div></div> <select id="pool_balancer_type" class="block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm"><option>Round Robin</option><option>Pack</option></select></div> <div><div class="flex items-center mb-3"><input id="install-webhook" type="checkbox" class="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 dark:border-gray-600 rounded"/> <label for="install-webhook" class="ml-2 text-sm font-medium text-gray-700 dark:text-gray-300">Install Webhook</label></div> <div class="space-y-3"><div class="flex items-center"><input id="generate-webhook-secret" type="checkbox" class="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 dark:border-gray-600 rounded"/> <label for="generate-webhook-secret" class="ml-2 text-sm text-gray-700 dark:text-gray-300">Auto-generate webhook secret</label></div> <!></div></div> <div class="flex justify-end space-x-3 pt-4"><button type="button" class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:focus:ring-offset-gray-900 cursor-pointer">Cancel</button> <button type="submit" class="px-4 py-2 text-sm font-medium text-white bg-blue-600 border border-transparent rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:focus:ring-offset-gray-900 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer"> </button></div></form>'),yt=S('<div class="max-w-2xl w-full p-6"><h3 class="text-lg font-medium text-gray-900 dark:text-white mb-4">Create Repository</h3> <!> <!></div>');function vt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Ae(We,"$eagerCache",ie),R=a(),k=a(),G=a(),x=a(),C=Ne();let y=a(!1),g=a(""),b=a("github"),o=a({name:"",owner:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"}),F=a(!0),d=a(!0);async function f(){if(!p().loaded.credentials&&!p().loading.credentials)try{await he.getCredentials()}catch(i){r(g,ae(i))}}function _(i){r(b,i.detail),T(o,e(o).credentials_name="")}function P(){if(e(o).credentials_name){const i=e(R).find(A=>A.name===e(o).credentials_name);i&&i.forge_type&&r(b,i.forge_type)}}function E(){const i=new Uint8Array(32);return crypto.getRandomValues(i),Array.from(i,A=>A.toString(16).padStart(2,"0")).join("")}De(()=>{f()});async function de(){if(!e(o).name?.trim()){r(g,"Repository name is required");return}if(!e(o).owner?.trim()){r(g,"Repository owner is required");return}if(!e(o).credentials_name){r(g,"Please select credentials");return}try{r(y,!0),r(g,"");const i={...e(o),install_webhook:e(F),auto_generate_secret:e(d)};C("submit",i)}catch(i){r(g,ae(i)),r(y,!1)}}w(()=>p(),()=>{r(R,p().credentials)}),w(()=>p(),()=>{r(k,p().loading.credentials)}),w(()=>(e(R),e(b)),()=>{r(G,e(R).filter(i=>e(b)?i.forge_type===e(b):!0))}),w(()=>e(d),()=>{e(d)?T(o,e(o).webhook_secret=E()):e(d)||T(o,e(o).webhook_secret="")}),w(()=>(e(o),e(d)),()=>{r(x,e(o).name?.trim()!==""&&e(o).owner?.trim()!==""&&e(o).credentials_name!==""&&(e(d)||e(o).webhook_secret?.trim()!==""))}),Se(),Me(),Ye(se,{$$events:{close:()=>C("close")},children:(i,A)=>{var M=yt(),Z=l(c(M),2);{var ce=v=>{var h=ut(),I=c(h),W=c(I,!0);u(I),u(h),Q(()=>fe(W,e(g))),D(v,h)};V(Z,v=>{e(g)&&v(ce)})}var ue=l(Z,2);{var pe=v=>{var h=pt();D(v,h)},me=v=>{var h=ft(),I=c(h);Ke(I,{get selectedForgeType(){return e(b)},set selectedForgeType(n){r(b,n)},$$events:{select:_},$$legacy:!0});var W=l(I,2),ee=l(c(W),2);X(ee),u(W);var L=l(W,2),N=l(c(L),2);X(N),u(L);var z=l(L,2),B=l(c(z),2);Q(()=>{e(o),$e(()=>{e(G)})});var O=c(B);O.value=O.__value="";var ge=l(O);He(ge,1,()=>e(G),Je,(n,m)=>{var U=mt(),Le=c(U);u(U);var xe={};Q(()=>{fe(Le,`${e(m),j(()=>e(m).name)??""} (${e(m),j(()=>e(m).endpoint?.name)??""})`),xe!==(xe=(e(m),j(()=>e(m).name)))&&(U.value=(U.__value=(e(m),j(()=>e(m).name)))??"")}),D(n,U)}),u(B),u(z);var H=l(z,2),Y=l(c(H),2);Q(()=>{e(o),$e(()=>{})});var K=c(Y);K.value=K.__value="roundrobin";var te=l(K);te.value=te.__value="pack",u(Y),u(H);var t=l(H,2),s=c(t),re=c(s);X(re),Re(2),u(s);var $=l(s,2),q=c($),_e=c(q);X(_e),Re(2),u(q);var qe=l(q,2);{var Ue=n=>{var m=gt();X(m),ve(m,()=>e(o).webhook_secret,U=>T(o,e(o).webhook_secret=U)),D(n,m)},je=n=>{var m=bt();D(n,m)};V(qe,n=>{e(d)?n(je,!1):n(Ue)})}u($),u(t);var we=l(t,2),ke=c(we),be=l(ke,2),Ge=c(be,!0);u(be),u(we),u(h),Q(()=>{be.disabled=e(y)||e(k)||!e(x),fe(Ge,e(y)?"Creating...":"Create Repository")}),ve(ee,()=>e(o).name,n=>T(o,e(o).name=n)),ve(N,()=>e(o).owner,n=>T(o,e(o).owner=n)),Pe(B,()=>e(o).credentials_name,n=>T(o,e(o).credentials_name=n)),ye("change",B,P),Pe(Y,()=>e(o).pool_balancer_type,n=>T(o,e(o).pool_balancer_type=n)),Ee(re,()=>e(F),n=>r(F,n)),Ee(_e,()=>e(d),n=>r(d,n)),ye("click",ke,()=>C("close")),ye("submit",h,Ve(de)),D(v,h)};V(ue,v=>{e(y)?v(pe):v(me,!1)})}u(M),D(i,M)},$$slots:{default:!0}}),Fe(),le()}var ht=S('<div class="space-y-6"><!> <!></div> <!> <!> <!>',1);function Nt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Ae(We,"$eagerCache",ie),R=a(),k=a(),G=a();let x=a([]),C=a(!0),y=a(""),g=a(""),b=a(!1),o=a(!1),F=a(!1),d=a(null),f=a(null),_=a(1),P=a(25),E=a(1);De(async()=>{try{r(C,!0);const t=await he.getRepositories();t&&Array.isArray(t)&&r(x,t)}catch(t){console.error("Failed to load repositories:",t),r(y,t instanceof Error?t.message:"Failed to load repositories")}finally{r(C,!1)}});async function de(){try{await he.retryResource("repositories")}catch(t){console.error("Retry failed:",t)}}function i(t){r(d,t),r(o,!0)}function A(t){r(f,t),r(F,!0)}function M(){r(b,!1),r(o,!1),r(F,!1),r(d,null),r(f,null),r(y,"")}async function Z(t){try{r(y,"");const s=t.detail,re={name:s.name,owner:s.owner,credentials_name:s.credentials_name,webhook_secret:s.webhook_secret},$=await oe.createRepository(re);if(s.install_webhook&&$.id)try{await oe.installRepoWebhook($.id),J.success("Webhook Installed",`Webhook for repository ${$.owner}/${$.name} has been installed successfully.`)}catch(q){console.warn("Repository created but webhook installation failed:",q),J.error("Webhook Installation Failed",q instanceof Error?q.message:"Failed to install webhook. You can try installing it manually from the repository details page.")}r(b,!1),J.success("Repository Created",`Repository ${$.owner}/${$.name} has been created successfully.`)}catch(s){throw r(y,ae(s)),s}}async function ce(t){if(e(d))try{await oe.updateRepository(e(d).id,t),J.success("Repository Updated",`Repository ${e(d).owner}/${e(d).name} has been updated successfully.`),M()}catch(s){throw s}}async function ue(){if(e(f))try{r(y,""),await oe.deleteRepository(e(f).id),J.success("Repository Deleted",`Repository ${e(f).owner}/${e(f).name} has been deleted successfully.`)}catch(t){const s=ae(t);J.error("Delete Failed",s)}finally{M()}}const pe=[{key:"repository",title:"Repository",cellComponent:lt,cellProps:{entityType:"repository",showOwner:!0}},{key:"endpoint",title:"Endpoint",cellComponent:dt},{key:"credentials",title:"Credentials",cellComponent:nt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ct,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:it}],me={entityType:"repository",primaryText:{field:"name",isClickable:!0,href:"/repositories/{id}",showOwner:!0},customInfo:[{icon:t=>tt(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>et(t)}],actions:[{type:"edit",handler:t=>i(t)},{type:"delete",handler:t=>A(t)}]};function v(t){r(g,t.detail.term),r(_,1)}function h(t){r(_,t.detail.page)}function I(t){const s=rt(t.detail.perPage);r(P,s.newPerPage),r(_,s.newCurrentPage)}function W(t){i(t.detail.item)}function ee(t){A(t.detail.item)}w(()=>(e(x),p()),()=>{(!e(x).length||p().loaded.repositories)&&r(x,p().repositories)}),w(()=>p(),()=>{r(C,p().loading.repositories)}),w(()=>p(),()=>{r(R,p().errorMessages.repositories)}),w(()=>(e(x),e(g)),()=>{r(k,ot(e(x),e(g)))}),w(()=>(e(E),e(k),e(P),e(_)),()=>{r(E,Math.ceil(e(k).length/e(P))),e(_)>e(E)&&e(E)>0&&r(_,e(E))}),w(()=>(e(k),e(_),e(P)),()=>{r(G,at(e(k),e(_),e(P)))}),Se(),Me();var L=ht();ze(t=>{Oe.title="Repositories - GARM"});var N=Be(L),z=c(N);Ze(z,{title:"Repositories",description:"Manage your GitHub repositories and their runners",actionLabel:"Add Repository",$$events:{action:()=>{r(b,!0)}}});var B=l(z,2);{let t=Ce(()=>e(R)||e(y)),s=Ce(()=>!!e(R));st(B,{get columns(){return pe},get data(){return e(G)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(g)},searchPlaceholder:"Search repositories by name or owner...",get currentPage(){return e(_)},get perPage(){return e(P)},get totalPages(){return e(E)},get totalItems(){return e(k),j(()=>e(k).length)},itemName:"repositories",emptyIconType:"building",get showRetry(){return e(s)},get mobileCardConfig(){return me},$$events:{search:v,pageChange:h,perPageChange:I,retry:de,edit:W,delete:ee}})}u(N);var O=l(N,2);{var ge=t=>{vt(t,{$$events:{close:()=>r(b,!1),submit:Z}})};V(O,t=>{e(b)&&t(ge)})}var H=l(O,2);{var Y=t=>{Qe(t,{get entity(){return e(d)},entityType:"repository",$$events:{close:M,submit:s=>ce(s.detail)}})};V(H,t=>{e(o)&&e(d)&&t(Y)})}var K=l(H,2);{var te=t=>{Xe(t,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and runners.",get itemName(){return`${e(f),j(()=>e(f).owner)??""}/${e(f),j(()=>e(f).name)??""}`},$$events:{close:M,confirm:ue}})};V(K,t=>{e(F)&&e(f)&&t(te)})}D(se,L),Fe(),le()}export{Nt as component};