✨ Editing release runner
This commit is contained in:
parent
7919a854df
commit
2e951a084e
@ -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"
|
||||||
},
|
},
|
||||||
|
@ -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"
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user