Editing release runner

This commit is contained in:
LittleSheep 2025-01-11 20:49:32 +08:00
parent 7919a854df
commit 2e951a084e
5 changed files with 117 additions and 5 deletions

BIN
bun.lockb

Binary file not shown.

View File

@ -38,7 +38,7 @@
"remark-parse": "^11.0.0", "remark-parse": "^11.0.0",
"remark-rehype": "^11.1.1", "remark-rehype": "^11.1.1",
"sitemap": "^8.0.0", "sitemap": "^8.0.0",
"solar-js-sdk": "^0.1.2", "solar-js-sdk": "^0.1.3",
"unified": "^11.0.5", "unified": "^11.0.5",
"zustand": "^5.0.3" "zustand": "^5.0.3"
}, },

View File

@ -8,7 +8,7 @@
"name": "LittleSheep", "name": "LittleSheep",
"email": "littlesheep.code@hotmail.com" "email": "littlesheep.code@hotmail.com"
}, },
"version": "0.1.2", "version": "0.1.3",
"tsup": { "tsup": {
"entry": [ "entry": [
"src/index.ts" "src/index.ts"

View File

@ -8,6 +8,7 @@ export interface MaRelease {
channel: string channel: string
assets: Record<string, MaReleaseAsset> assets: Record<string, MaReleaseAsset>
installers: Record<string, MaReleaseInstaller> installers: Record<string, MaReleaseInstaller>
runners: Record<string, MaReleaseRunner>
product_id: number product_id: number
meta: MaReleaseMeta meta: MaReleaseMeta
} }
@ -39,3 +40,9 @@ export interface MaReleaseInstaller {
script?: string script?: string
patches: MaReleaseInstallerPatch[] patches: MaReleaseInstallerPatch[]
} }
export interface MaReleaseRunner {
workdir?: string
script: string
label: string
}

View File

@ -16,7 +16,14 @@ import {
import { useRouter } from 'next-nprogress-bar' import { useRouter } from 'next-nprogress-bar'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { useForm } from 'react-hook-form' import { useForm } from 'react-hook-form'
import { MaProduct, MaRelease, MaReleaseAsset, MaReleaseInstaller, MaReleaseInstallerPatch } from 'solar-js-sdk' import {
MaProduct,
MaRelease,
MaReleaseAsset,
MaReleaseInstaller,
MaReleaseInstallerPatch,
MaReleaseRunner,
} from 'solar-js-sdk'
import MonacoEditor from '@monaco-editor/react' import MonacoEditor from '@monaco-editor/react'
import ErrorIcon from '@mui/icons-material/Error' import ErrorIcon from '@mui/icons-material/Error'
@ -31,6 +38,7 @@ export interface MatrixReleaseForm {
content: string content: string
assets: Record<string, MaReleaseAsset> assets: Record<string, MaReleaseAsset>
installers: Record<string, MaReleaseInstaller> installers: Record<string, MaReleaseInstaller>
runners: Record<string, MaReleaseRunner>
attachments: string[] attachments: string[]
} }
@ -64,12 +72,16 @@ export default function MaReleaseForm({
if (defaultValue?.installers) { if (defaultValue?.installers) {
setInstallers(Object.keys(defaultValue.installers).map((k) => ({ k, v: defaultValue.installers[k] }))) setInstallers(Object.keys(defaultValue.installers).map((k) => ({ k, v: defaultValue.installers[k] })))
} }
if (defaultValue?.runners) {
setRunners(Object.keys(defaultValue.runners).map((k) => ({ k, v: defaultValue.runners[k] })))
}
}, []) }, [])
const router = useRouter() const router = useRouter()
const [assets, setAssets] = useState<{ k: string; v: MaReleaseAsset }[]>([]) const [assets, setAssets] = useState<{ k: string; v: MaReleaseAsset }[]>([])
const [installers, setInstallers] = useState<{ k: string; v: MaReleaseInstaller }[]>([]) const [installers, setInstallers] = useState<{ k: string; v: MaReleaseInstaller }[]>([])
const [runners, setRunners] = useState<{ k: string; v: MaReleaseRunner }[]>([])
function addAsset() { function addAsset() {
setAssets((val) => [...val, { k: '', v: { uri: '', contentType: '' } }]) setAssets((val) => [...val, { k: '', v: { uri: '', contentType: '' } }])
@ -79,6 +91,10 @@ export default function MaReleaseForm({
setInstallers((val) => [...val, { k: '', v: { workdir: '', script: '', patches: [] } }]) setInstallers((val) => [...val, { k: '', v: { workdir: '', script: '', patches: [] } }])
} }
function addRunner() {
setRunners((val) => [...val, { k: '', v: { workdir: '', script: '', label: '' } }])
}
const [error, setError] = useState<string | null>(null) const [error, setError] = useState<string | null>(null)
const [busy, setBusy] = useState<boolean>(false) const [busy, setBusy] = useState<boolean>(false)
@ -97,6 +113,7 @@ export default function MaReleaseForm({
...data, ...data,
assets: assets.reduce((a, { k, v }) => ({ ...a, [k]: v }), {}), assets: assets.reduce((a, { k, v }) => ({ ...a, [k]: v }), {}),
installers: installers.reduce((a, { k, v }) => ({ ...a, [k]: v }), {}), installers: installers.reduce((a, { k, v }) => ({ ...a, [k]: v }), {}),
runners: runners.reduce((a, { k, v }) => ({ ...a, [k]: v }), {}),
}) })
callback() callback()
} catch (err: any) { } catch (err: any) {
@ -254,7 +271,7 @@ export default function MaReleaseForm({
</Typography> </Typography>
<Card variant="outlined"> <Card variant="outlined">
<MonacoEditor <MonacoEditor
height="280px" height="140px"
width="100%" width="100%"
options={{ minimap: { enabled: false } }} options={{ minimap: { enabled: false } }}
defaultValue={v.script} defaultValue={v.script}
@ -272,7 +289,7 @@ export default function MaReleaseForm({
</Typography> </Typography>
<Card variant="outlined"> <Card variant="outlined">
<MonacoEditor <MonacoEditor
height="280px" height="140px"
width="100%" width="100%"
options={{ minimap: { enabled: false } }} options={{ minimap: { enabled: false } }}
defaultValue={v.patches.map((p) => `${p.action}:${p.glob}`).join('\n')} defaultValue={v.patches.map((p) => `${p.action}:${p.glob}`).join('\n')}
@ -309,6 +326,94 @@ export default function MaReleaseForm({
</Box> </Box>
</Box> </Box>
<Box sx={{ mt: 3, display: 'flex', flexDirection: 'column', gap: 2 }}>
<Typography variant="h5">Runners</Typography>
{runners.map(({ k, v }, idx) => (
<Card variant="outlined" key={idx}>
<Box sx={{ pl: 2, pr: 4, py: 2 }}>
<Grid container spacing={2}>
<Grid size={4}>
<TextField
label="Platform"
sx={{ width: '100%' }}
value={k}
onChange={(val) => {
setRunners((data) =>
data.map((ele, index) => (index == idx ? { k: val.target.value, v: ele.v } : ele)),
)
}}
/>
</Grid>
<Grid size={7}>
<TextField
label="Working Directory"
sx={{ width: '100%' }}
value={v.workdir}
onChange={(val) => {
setRunners((data) =>
data.map((ele, index) =>
index == idx ? { k: ele.k, v: { ...ele.v, workdir: val.target.value } } : ele,
),
)
}}
/>
</Grid>
<Grid size={1} sx={{ display: 'grid', placeItems: 'center' }}>
<IconButton
onClick={() => {
setRunners((data) => data.filter((_, index) => index != idx))
}}
>
<CloseIcon />
</IconButton>
</Grid>
<Grid size={12}>
<TextField
label="Label"
sx={{ width: '100%' }}
value={v.label}
onChange={(val) => {
setRunners((data) =>
data.map((ele, index) =>
index == idx ? { k: ele.k, v: { ...ele.v, label: val.target.value } } : ele,
),
)
}}
/>
</Grid>
<Grid size={12}>
<Typography variant="subtitle1" sx={{ mx: 1 }}>
Script
</Typography>
<Card variant="outlined">
<MonacoEditor
height="280px"
width="100%"
options={{ minimap: { enabled: false } }}
defaultValue={v.script}
onChange={(val) =>
setRunners((data) =>
data.map((ele, index) =>
index == idx ? { v: { ...ele.v, script: val ?? '' }, k: ele.k } : ele,
),
)
}
/>
</Card>
</Grid>
</Grid>
</Box>
</Card>
))}
<Box>
<Button variant="outlined" onClick={addRunner}>
Add
</Button>
</Box>
</Box>
<Box sx={{ mt: 5 }} display="flex" gap={2}> <Box sx={{ mt: 5 }} display="flex" gap={2}>
<Button variant="contained" type="submit" disabled={busy}> <Button variant="contained" type="submit" disabled={busy}>
Submit Submit