diff --git a/app/Http/Controllers/JobController.php b/app/Http/Controllers/JobController.php
index 5d9af6b..907fd5d 100644
--- a/app/Http/Controllers/JobController.php
+++ b/app/Http/Controllers/JobController.php
@@ -21,7 +21,7 @@ class JobController extends Controller
public function show($jobId, Request $request)
{
return Inertia::render('Job', [
- 'job' => Job::where('id', $jobId)->with('jobInfos')->first(),
+ 'job' => Job::where('id', $jobId)->with('jobInfos', 'jobRuns')->first(),
'error' => $request->input('error'),
]);
}
diff --git a/components.json b/components.json
index 30afef8..e21e779 100644
--- a/components.json
+++ b/components.json
@@ -2,7 +2,6 @@
"$schema": "https://shadcn-vue.com/schema.json",
"style": "default",
"typescript": true,
- "tsConfigPath": "./tsconfig.json",
"tailwind": {
"config": "tailwind.config.js",
"css": "resources/css/app.css",
@@ -10,9 +9,12 @@
"cssVariables": true,
"prefix": ""
},
- "framework": "laravel",
"aliases": {
"components": "@/Components",
- "utils": "@/lib/utils"
- }
+ "composables": "@/composables",
+ "utils": "@/lib/utils",
+ "ui": "@/Components/ui",
+ "lib": "@/lib"
+ },
+ "iconLibrary": "lucide"
}
diff --git a/package-lock.json b/package-lock.json
index 016807c..00fabbf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
"lucide-react": "^0.474.0",
"lucide-vue-next": "^0.474.0",
"radix-vue": "^1.9.13",
+ "reka-ui": "^2.1.0",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7"
},
@@ -21,8 +22,10 @@
"autoprefixer": "^10.4.12",
"axios": "^1.7.4",
"concurrently": "^9.0.1",
+ "laravel-echo": "^2.0.2",
"laravel-vite-plugin": "^1.2.0",
"postcss": "^8.4.31",
+ "pusher-js": "^8.4.0",
"sass-embedded": "^1.83.4",
"tailwindcss": "^3.2.1",
"typescript": "^5.6.3",
@@ -956,20 +959,20 @@
}
},
"node_modules/@tanstack/virtual-core": {
- "version": "3.11.3",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.3.tgz",
- "integrity": "sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==",
+ "version": "3.13.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.4.tgz",
+ "integrity": "sha512-fNGO9fjjSLns87tlcto106enQQLycCKR4DPNpgq3djP5IdcPFdPAmaKjsgzIeRhH7hWrELgW12hYnRthS5kLUw==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/tannerlinsley"
}
},
"node_modules/@tanstack/vue-virtual": {
- "version": "3.11.3",
- "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.11.3.tgz",
- "integrity": "sha512-BVZ00i5XBucetRj2doVd32jOPtJthvZSVJvx9GL4gSQsyngliSCtzlP1Op7TFrEtmebRKT8QUQE1tRhOQzWecQ==",
+ "version": "3.13.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.4.tgz",
+ "integrity": "sha512-1fPrd3hE1SS4R/9JbX1AlzueY4duCK7ixuLcMW5GMnk9N6WbLo9MioNKiv22V+UaXKOLNy8tLdzT8NYerOFTOQ==",
"dependencies": {
- "@tanstack/virtual-core": "3.11.3"
+ "@tanstack/virtual-core": "3.13.4"
},
"funding": {
"type": "github",
@@ -2239,6 +2242,15 @@
"jiti": "bin/jiti.js"
}
},
+ "node_modules/laravel-echo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-2.0.2.tgz",
+ "integrity": "sha512-Ciai6hA7r35MFqNRb8G034cvm9WiveSTFQQKRGJhWtZGbng7C8BBa5QvqDxk/Mw5GeJ+q19jrEwQhf7r1b1lcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/laravel-vite-plugin": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.2.0.tgz",
@@ -2487,6 +2499,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/ohash": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.6.tgz",
+ "integrity": "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="
+ },
"node_modules/package-json-from-dist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
@@ -2700,6 +2717,15 @@
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"dev": true
},
+ "node_modules/pusher-js": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-8.4.0.tgz",
+ "integrity": "sha512-wp3HqIIUc1GRyu1XrP6m2dgyE9MoCsXVsWNlohj0rjSkLf+a0jLvEyVubdg58oMk7bhjBWnFClgp8jfAa6Ak4Q==",
+ "dev": true,
+ "dependencies": {
+ "tweetnacl": "^1.0.3"
+ }
+ },
"node_modules/qs": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
@@ -2847,6 +2873,37 @@
"node": ">=8.10.0"
}
},
+ "node_modules/reka-ui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.1.0.tgz",
+ "integrity": "sha512-w4kEDEyXhIqv4QeFJeiuBc4mQP37hH/UTRpEb9dMbPdR49JG5TcV/s0+ntNRONUUW4LDLX7E1ZPcwBw5hnu0yw==",
+ "dependencies": {
+ "@floating-ui/dom": "^1.6.13",
+ "@floating-ui/vue": "^1.1.6",
+ "@internationalized/date": "^3.5.0",
+ "@internationalized/number": "^3.5.0",
+ "@tanstack/vue-virtual": "^3.12.0",
+ "@vueuse/core": "^12.5.0",
+ "@vueuse/shared": "^12.5.0",
+ "aria-hidden": "^1.2.4",
+ "defu": "^6.1.4",
+ "ohash": "^1.1.4"
+ },
+ "peerDependencies": {
+ "vue": ">= 3.2.0"
+ }
+ },
+ "node_modules/reka-ui/node_modules/@vueuse/shared": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz",
+ "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==",
+ "dependencies": {
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -3697,6 +3754,12 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
+ "node_modules/tweetnacl": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
+ "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==",
+ "dev": true
+ },
"node_modules/typescript": {
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
diff --git a/package.json b/package.json
index 93db9e2..3f56697 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,7 @@
"lucide-react": "^0.474.0",
"lucide-vue-next": "^0.474.0",
"radix-vue": "^1.9.13",
+ "reka-ui": "^2.1.0",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7"
}
diff --git a/resources/js/Components/Layout/Job/JobRuns/JobRunArtifacts.vue b/resources/js/Components/Layout/Job/JobRuns/JobRunArtifacts.vue
new file mode 100644
index 0000000..b80c139
--- /dev/null
+++ b/resources/js/Components/Layout/Job/JobRuns/JobRunArtifacts.vue
@@ -0,0 +1,24 @@
+
+
+
+
+ -
+
{{ artifact.name }}
+ {{ artifact.content }}
+
+
+
+
+
diff --git a/resources/js/Components/Layout/Job/JobRuns/JobRunItem.vue b/resources/js/Components/Layout/Job/JobRuns/JobRunItem.vue
new file mode 100644
index 0000000..1cfed77
--- /dev/null
+++ b/resources/js/Components/Layout/Job/JobRuns/JobRunItem.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+ {{ new Date(Date.parse(jobRun.created_at)).toLocaleTimeString(undefined, {
+ weekday: "long",
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ })
+ }}
+
+
+
+
+
+
diff --git a/resources/js/Components/Layout/Job/JobRuns/JobRuns.vue b/resources/js/Components/Layout/Job/JobRuns/JobRuns.vue
new file mode 100644
index 0000000..b47d2e9
--- /dev/null
+++ b/resources/js/Components/Layout/Job/JobRuns/JobRuns.vue
@@ -0,0 +1,28 @@
+
+
+
+ Ancien jobs
+
+
+
+
+
+
diff --git a/resources/js/Components/ui/accordion/Accordion.vue b/resources/js/Components/ui/accordion/Accordion.vue
new file mode 100644
index 0000000..d52d816
--- /dev/null
+++ b/resources/js/Components/ui/accordion/Accordion.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/resources/js/Components/ui/accordion/AccordionContent.vue b/resources/js/Components/ui/accordion/AccordionContent.vue
new file mode 100644
index 0000000..8e856a0
--- /dev/null
+++ b/resources/js/Components/ui/accordion/AccordionContent.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/ui/accordion/AccordionItem.vue b/resources/js/Components/ui/accordion/AccordionItem.vue
new file mode 100644
index 0000000..b26a07b
--- /dev/null
+++ b/resources/js/Components/ui/accordion/AccordionItem.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/resources/js/Components/ui/accordion/AccordionTrigger.vue b/resources/js/Components/ui/accordion/AccordionTrigger.vue
new file mode 100644
index 0000000..e5f4f6f
--- /dev/null
+++ b/resources/js/Components/ui/accordion/AccordionTrigger.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/ui/accordion/index.ts b/resources/js/Components/ui/accordion/index.ts
new file mode 100644
index 0000000..9340ac0
--- /dev/null
+++ b/resources/js/Components/ui/accordion/index.ts
@@ -0,0 +1,4 @@
+export { default as Accordion } from './Accordion.vue'
+export { default as AccordionContent } from './AccordionContent.vue'
+export { default as AccordionItem } from './AccordionItem.vue'
+export { default as AccordionTrigger } from './AccordionTrigger.vue'
diff --git a/resources/js/Components/ui/separator/Separator.vue b/resources/js/Components/ui/separator/Separator.vue
new file mode 100644
index 0000000..aaf3fcc
--- /dev/null
+++ b/resources/js/Components/ui/separator/Separator.vue
@@ -0,0 +1,35 @@
+
+
+
+
+ {{ props.label }}
+
+
diff --git a/resources/js/Components/ui/separator/index.ts b/resources/js/Components/ui/separator/index.ts
new file mode 100644
index 0000000..2287bcb
--- /dev/null
+++ b/resources/js/Components/ui/separator/index.ts
@@ -0,0 +1 @@
+export { default as Separator } from './Separator.vue'
diff --git a/resources/js/Pages/Job.vue b/resources/js/Pages/Job.vue
index c1bac3f..61494fb 100644
--- a/resources/js/Pages/Job.vue
+++ b/resources/js/Pages/Job.vue
@@ -1,6 +1,7 @@