Последняя активность 1692001187

rootspring's Avatar rootspring ревизий этого фрагмента 1692001187. К ревизии

Без изменений

rootspring's Avatar rootspring ревизий этого фрагмента 1692001127. К ревизии

1 file changed, 262 insertions

frontend.svelte(файл создан)

@@ -0,0 +1,262 @@
1 + <script lang="ts">
2 + import ButtonReact from "$lib/components/ButtonReact.svelte";
3 + import GreyText from "$lib/components/GreyText.svelte";
4 + import InputNumber from "$lib/components/InputNumber.svelte";
5 + import InputSm from "$lib/components/InputSm.svelte";
6 + import MultiInput from "$lib/components/MultiInput.svelte";
7 + import KvMultiInput from "$lib/components/KVMultiInput.svelte";
8 + import Select from "$lib/components/Select.svelte";
9 + import DeployWebhook from "./DeployWebhook.svelte";
10 + import type { Data } from "./dpsettings";
11 + import Section from "$lib/components/Section.svelte";
12 +
13 + const getDeploySourceTypes = async () => {
14 + let res = await fetch(`/api/deploy/getDeploySourceTypes`, {
15 + method: "POST",
16 + });
17 +
18 + if(!res.ok) {
19 + let error = await res.text()
20 +
21 + throw new Error(error)
22 + }
23 +
24 + return await res.json() as string[]
25 + }
26 +
27 + const parseSrc = (srcs: string[]): [string, string][] => {
28 + return srcs?.map(src => [src, src])
29 + }
30 +
31 + interface Preset {
32 + [key: string]: {
33 + buildCmds: string[],
34 + env: [string, string][],
35 + allowDirty: boolean,
36 + configFiles: string[],
37 + }
38 + }
39 +
40 + const presets: Preset = {
41 + "NPM": {
42 + buildCmds: [
43 + "npm install",
44 + "npm run build",
45 + ],
46 + env: [],
47 + allowDirty: true,
48 + configFiles: []
49 + },
50 + "Yarn": {
51 + buildCmds: [
52 + "yarn install",
53 + "yarn install --dev",
54 + "yarn run build"
55 + ],
56 + env: [],
57 + allowDirty: true,
58 + configFiles: []
59 + },
60 + "Go": {
61 + buildCmds: [
62 + "go build -v"
63 + ],
64 + env: [
65 + ["CGO_ENABLED", "0"],
66 + ],
67 + allowDirty: false,
68 + configFiles: [
69 + "config.yaml",
70 + "secrets.yaml"
71 + ]
72 + },
73 + "Rust": {
74 + buildCmds: [
75 + "/root/.cargo/bin/cargo build --release",
76 + "systemctl stop $NAME",
77 + "rm -vf $NAME",
78 + "mv -vf target/release/$NAME .",
79 + "systemctl start $NAME",
80 + ],
81 + env: [
82 + ["RUSTFLAGS", "-C target-cpu=native -C link-arg=-fuse-ld=lld"]
83 + ],
84 + allowDirty: true,
85 + configFiles: [
86 + "config.yaml"
87 + ]
88 + }
89 + }
90 +
91 + export let id: string
92 + export let data: Data;
93 + </script>
94 +
95 + <InputSm
96 + id="id"
97 + label="Deployment ID"
98 + placeholder="infinity-next-deploy"
99 + bind:value={id}
100 + minlength={1}
101 + />
102 +
103 + <h2 class="text-xl font-semibold">IP Whitelist</h2>
104 +
105 + <GreyText>
106 + If this has more than one IP, then only IPs in this list will be able to use this API
107 + </GreyText>
108 +
109 + <MultiInput
110 + id="allowed-ips"
111 + label="Allowed IP whitelist"
112 + title="IP Whitelist"
113 + placeholder="X.X.X.X"
114 + bind:values={data.allowedIps}
115 + minlength={1}
116 + />
117 +
118 + <h2 class="text-xl font-semibold">Deploy Source</h2>
119 +
120 + <div>
121 + {#await getDeploySourceTypes()}
122 + <h2 class="text-xl">Loading deploy source list</h2>
123 + {:then srcs}
124 + <Select
125 + name="Source Type"
126 + placeholder="Choose source type"
127 + bind:value={data.type}
128 + options={
129 + new Map([
130 + ...parseSrc(srcs)
131 + ])
132 + }
133 + />
134 + <InputSm
135 + id="url"
136 + label="URL"
137 + placeholder="https://..."
138 + bind:value={data.url}
139 + minlength={1}
140 + />
141 + <InputSm
142 + id="token"
143 + label="Token"
144 + placeholder="Any API token you need to access the source"
145 + bind:value={data.token}
146 + minlength={1}
147 + />
148 + <InputSm
149 + id="ref"
150 + label="Reference"
151 + placeholder="refs/head/master"
152 + bind:value={data.ref}
153 + minlength={1}
154 + />
155 + {:catch err}
156 + <h2 class="text-red-500">{err}</h2>
157 + {/await}
158 + </div>
159 +
160 + <Select
161 + name="broken"
162 + placeholder="Is the service broken/disabled?"
163 + bind:value={data.brokenValue}
164 + options={new Map([
165 + ["Yes, it is", "0"],
166 + ["No, its not", "1"],
167 + ])}
168 + />
169 +
170 + <InputSm
171 + id="output-path"
172 + label="Output Path"
173 + placeholder="/var/www/html etc."
174 + bind:value={data.outputPath}
175 + minlength={1}
176 + />
177 +
178 + <h3 class="font-semibold">Presets</h3>
179 +
180 + <div>
181 + {#each Object.entries(presets) as [name, preset]}
182 + <ButtonReact
183 + onclick={() => {
184 + data.commands = preset?.buildCmds
185 +
186 + if(preset?.env && preset?.env.length > 0) {
187 + data.env = preset?.env
188 + }
189 +
190 + if(preset?.configFiles && preset?.configFiles.length > 0) {
191 + data.configFiles = preset?.configFiles
192 + }
193 + }}
194 + >
195 + {name}
196 + </ButtonReact>
197 + <span class="ml-2"></span>
198 + {/each}
199 + </div>
200 +
201 + <div class="mb-1"></div>
202 +
203 + <MultiInput
204 + id="commands"
205 + label="Build Commands"
206 + title="Command"
207 + placeholder="npm install..."
208 + bind:values={data.commands}
209 + minlength={1}
210 + />
211 +
212 + <InputNumber
213 + id="timeout"
214 + label="Timeout"
215 + placeholder="1234"
216 + bind:value={data.timeout}
217 + />
218 +
219 + <KvMultiInput
220 + id="git-env"
221 + label="Environment Variables"
222 + title="Key"
223 + placeholder="KEY"
224 + bind:values={data.env}
225 + minlength={1}
226 + />
227 +
228 + <MultiInput
229 + id="config-files"
230 + label="Config files to preserve"
231 + title="Config files"
232 + placeholder="npm install"
233 + bind:values={data.configFiles}
234 + minlength={1}
235 + />
236 +
237 + <div class="mb-1"></div>
238 +
239 + <h3 class="text-xl font-semibold">Webhooks</h3>
240 +
241 + {#each data.webhooks as webh}
242 + <Section title={webh?.id || "Not Specified"}>
243 + <DeployWebhook
244 + id={webh?.id}
245 + bind:webhook={webh}
246 + />
247 + </Section>
248 + {/each}
249 + <ButtonReact onclick={() => {
250 + data.webhooks.push({
251 + id: "git",
252 + token: "",
253 + type: ""
254 + })
255 + data.webhooks = data.webhooks
256 + }}>
257 + New Webhook
258 + </ButtonReact>
259 +
260 + <h3 class="text-xl font-semibold">Misc.</h3>
261 +
262 + <!-- <ButtonReact onclick={() => createGit()}>Create/Update</ButtonReact> -->
Новее Позже