diff --git a/src/Queries.jsx b/src/Queries.jsx index 68d91d3..76cef4f 100644 --- a/src/Queries.jsx +++ b/src/Queries.jsx @@ -2,7 +2,7 @@ import { useQuery } from '@tanstack/react-query' const QUALITEER_URL = "https://qualiteer.elijahparker3.repl.co/api"; -const useMock = true; +const useMock = false; const asMock = (data) => ({ data }); @@ -21,5 +21,5 @@ export const usePipelineMappings = () => useMock ? asMock([ export const useSilencedAlerts = () => useMock? asMock([]) : useQuery(['silenced'], fetchApi("/alerting/silenced") ) -export const useCurrentlyFailing = () => useQuery(['failing'], useMock? asMock([]) : fetchApi("/results/failing") +export const useCurrentlyFailing = () => useMock? asMock([]) : useQuery(['failing'], fetchApi("/results/failing") ) \ No newline at end of file diff --git a/src/ctx/JobContext.jsx b/src/ctx/JobContext.jsx index 10c9ec6..1fb8f18 100644 --- a/src/ctx/JobContext.jsx +++ b/src/ctx/JobContext.jsx @@ -15,6 +15,7 @@ const ACTIONS = { CREATE: "c", UPDATE: "u", DELETE: "d", + PIPELINE: "p" }; const url = "https://qualiteer.elijahparker3.repl.co/"; @@ -34,7 +35,7 @@ pipelines: [{tracks:[ const reducer = (state, action) => { // Current Jobs - const { jobs } = state; + const { jobs, pipelines } = state; var jobIndex; // Actions switch (action.type) { @@ -52,6 +53,8 @@ const reducer = (state, action) => { jobs.splice(jobIndex, 1); return { ...state, jobs }; + case ACTIONS.PIPELINE: + return {...state, pipelines}; default: return state; } @@ -66,24 +69,7 @@ export const JobProvider = ({ children }) => { dispatch({ type: ACTIONS.CREATE, job: { ...job, log: [] } }); const jobDelete = (jobId) => dispatch({ type: ACTIONS.DELETE, jobId }); - function jobCancel(jobId){ - const job = state.jobs.find((j)=>j.jobId===jobId); - if(job.initiator.sk) - - job.initiator.sk.close(); - job.status = jobStatus.CANCELED; - jobUpdate({ ...job }, jobId); - - } - - function jobDestroy(jobId){ - const job = state.jobs.find((j)=>j.jobId===jobId); - if(job.initiator.sk && job.status !== jobStatus.OK && job.status !== jobStatus.ERROR && job.status !== jobStatus.CANCELED){ - job.initiator.sk.close(); - } - - jobDelete(jobId); - } + const updatePipelines = (pipelines) => dispatch({type: ACTIONS.pipeline, pipelines}); function retryAll(failing) { // Query Full Locator @@ -91,14 +77,76 @@ export const JobProvider = ({ children }) => { return jobFactory({ testNames: ["single"] }); } + function pipelineComponentJob(jobPipeline, testName){ + const i = new Initiator(url); + const jobId = `j${Date.now()}`; + const job = { + name: jobId, + status: jobStatus.PENDING, + jobId, + isPipeline: true, + builderCache: {}, + initiator: i, + } + const request = { + testName, + image: "node", + type: "pipeline", + name: jobId, + pipelineTriggers: "secondary", + }; + + jobCreate(job); + const onLog = (d) => { + const job = state.jobs.find((j) => j.jobId === jobId); + job.log.push(d); + job.status = jobStatus.ACTIVE; + jobUpdate({ ...job }, jobId); + }; + + const onClose = (c) => { + const job = state.jobs.find((j) => j.jobId === jobId); + job.exitcode = c; + job.status = c === 0 ? jobStatus.OK : jobStatus.ERROR; + jobUpdate({ ...job }, jobId); + }; + const onPipelineTrigger = (trigger) => { + console.log("Got trigger", trigger); + } + const started = i.newPipelineJob(request, onLog, onClose, onPipelineTrigger); + started.then(() => jobUpdate({ status: jobStatus.ACTIVE }, jobId)); + + } + function pipelineFactory(builderCache) { console.log("Would create pipeline with cache"); console.log(builderCache); - return jobFactory({testNames: ["primary"]}); + return pipelineComponentJob(state.pipelines, builderCache.branches[0][0]); +// return jobId; + /*return jobFactory({testNames: ["primary"]});*/ + } + + + function jobCancel(jobId){ + const job = state.jobs.find((j)=>j.jobId===jobId); + + if(job.initiator.sk) job.initiator.sk.close(); + job.status = jobStatus.CANCELED; + jobUpdate({ ...job }, jobId); + + } + + function jobDestroy(jobId){ + const job = state.jobs.find((j)=>j.jobId===jobId); + + if(job.initiator.sk && job.status !== jobStatus.OK && job.status !== jobStatus.ERROR && job.status !== jobStatus.CANCELED){ + job.initiator.sk.close(); + } + jobDelete(jobId); } function jobFactory(builderCache) { - if(builderCache.tracks) return pipelineFactory(builderCache); + if(builderCache.tree) return pipelineFactory(builderCache); // Find test const i = new Initiator(url); const jobId = `j${Date.now()}`; @@ -136,22 +184,10 @@ export const JobProvider = ({ children }) => { const started = i.newJob(request, onLog, onClose); started.then(() => jobUpdate({ status: jobStatus.ACTIVE }, jobId)); - - /*const job = { - type: "compound", - testName: "primary", - pipelineTriggers: "secondary", - name: "testing", - image: "node", - };*/ + return jobId; } - function retrySingle(test) { - console.log("Would retry test", test); - return jobFactory({ testNames: ["single"] }); - } - const context = { state, dispatch, @@ -159,7 +195,6 @@ export const JobProvider = ({ children }) => { jobCreate, jobDelete, retryAll, - retrySingle, jobFactory, jobCancel, jobDestroy diff --git a/src/views/jobs/Jobs.jsx b/src/views/jobs/Jobs.jsx index 5e38600..39b465a 100644 --- a/src/views/jobs/Jobs.jsx +++ b/src/views/jobs/Jobs.jsx @@ -43,7 +43,7 @@ export default function Jobs() { ): null} {location.hash === "" && - jobState.jobs.map((v, i) => ( + jobState.jobs.filter((j)=>!j.isPipeline).map((v, i) => ( { + if(!cache.primarySelectedMappings ) return console.log("No mapping selected") + next() + } + return ( @@ -59,7 +64,7 @@ function PipelineSelector(props) { -