From 77bb55bd3827054a32b5e52d8e6a986de0f3e270 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:17:24 +0000 Subject: [PATCH 1/4] Initial plan From 1a4da73cab93cffb6e564bece25274d6a3fe3c64 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:36:06 +0000 Subject: [PATCH 2/4] Add inline exercise creation during mesocycle configuration - Add onCreateExercise prop to ExerciseSelector for inline exercise creation - Show "Create New Exercise" button at top of exercise list in selector - Render ExerciseForm via portal to avoid nested form issues - Add stopPropagation to ExerciseForm submit to prevent portal event bubbling - Update SplitDayEditor to wire createExercise from db/service - Handle newly created exercises that haven't propagated via useLiveQuery - Add CSS styling for the create exercise button Agent-Logs-Url: https://github.com/wulfland/Repstack/sessions/5e8d8917-f175-485e-afd4-d1a6431ea934 Co-authored-by: wulfland <5276337+wulfland@users.noreply.github.com> --- package-lock.json | 22 +-------- src/components/exercises/ExerciseForm.tsx | 1 + src/components/mesocycles/SplitDayEditor.tsx | 23 ++++++--- src/components/workouts/ExerciseSelector.css | 22 +++++++++ src/components/workouts/ExerciseSelector.tsx | 49 ++++++++++++++++++++ 5 files changed, 89 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index c0180cb..54a7511 100644 --- a/package-lock.json +++ b/package-lock.json @@ -148,7 +148,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1772,7 +1771,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -1813,7 +1811,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -3653,7 +3650,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -3744,7 +3740,6 @@ "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.52.0", "@typescript-eslint/types": "8.52.0", @@ -4154,7 +4149,6 @@ "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "4.0.18", "fflate": "^0.8.2", @@ -4191,7 +4185,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4503,7 +4496,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -4976,8 +4968,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.2.1.tgz", "integrity": "sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/dexie-react-hooks": { "version": "4.2.0", @@ -5269,7 +5260,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -5936,7 +5926,6 @@ "integrity": "sha512-RDeQm3dT9n0A5f/TszjUmNCLEuPnMGv3Tv4BmNINebz/h17PA6LMBcxJ5FrcqltNBMh9jA/8ufgDdBYUdBt+eg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", @@ -7381,7 +7370,6 @@ "integrity": "sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "playwright-core": "cli.js" }, @@ -7507,7 +7495,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7683,7 +7670,6 @@ "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -8705,7 +8691,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8889,7 +8874,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -8996,7 +8980,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -9410,7 +9393,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -9468,7 +9450,6 @@ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -9776,7 +9757,6 @@ "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/components/exercises/ExerciseForm.tsx b/src/components/exercises/ExerciseForm.tsx index 89d066f..59ce68a 100644 --- a/src/components/exercises/ExerciseForm.tsx +++ b/src/components/exercises/ExerciseForm.tsx @@ -123,6 +123,7 @@ export default function ExerciseForm({ const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); + e.stopPropagation(); setError(null); if (!name.trim()) { diff --git a/src/components/mesocycles/SplitDayEditor.tsx b/src/components/mesocycles/SplitDayEditor.tsx index 8ea1fa7..fd82ea4 100644 --- a/src/components/mesocycles/SplitDayEditor.tsx +++ b/src/components/mesocycles/SplitDayEditor.tsx @@ -10,7 +10,7 @@ import type { } from '../../types/models'; import ExerciseSelector from '../workouts/ExerciseSelector'; import { isExerciseValidForSplitDay } from '../../lib/splitUtils'; -import { getExerciseWorkoutCount } from '../../db/service'; +import { getExerciseWorkoutCount, createExercise } from '../../db/service'; import '../common/shared-dialog.css'; import './SplitDayEditor.css'; @@ -38,13 +38,15 @@ export default function SplitDayEditor({ const handleAddExercise = (exerciseId: string) => { const exercise = exercises.find((e) => e.id === exerciseId); - if (!exercise) return; - // Validate muscle groups - if (!isExerciseValidForSplitDay(exercise.muscleGroups, splitDay.name)) { - alert( - `Warning: ${exercise.name} may not be appropriate for ${splitDay.name}. The muscle groups don't match the split focus.` - ); + // Validate muscle groups (only if exercise is in the current list; + // a newly created exercise may not have propagated yet via useLiveQuery) + if (exercise) { + if (!isExerciseValidForSplitDay(exercise.muscleGroups, splitDay.name)) { + alert( + `Warning: ${exercise.name} may not be appropriate for ${splitDay.name}. The muscle groups don't match the split focus.` + ); + } } const newExercise: MesocycleExercise = { @@ -63,6 +65,12 @@ export default function SplitDayEditor({ setShowExerciseSelector(false); }; + const handleCreateExercise = async ( + exerciseData: Omit + ): Promise => { + return await createExercise(exerciseData); + }; + const handleRemoveExercise = async (index: number) => { const exercise = splitDay.exercises[index]; @@ -293,6 +301,7 @@ export default function SplitDayEditor({ selectedExerciseIds={selectedExerciseIds} onSelect={handleAddExercise} onClose={() => setShowExerciseSelector(false)} + onCreateExercise={handleCreateExercise} /> )} diff --git a/src/components/workouts/ExerciseSelector.css b/src/components/workouts/ExerciseSelector.css index 132d9b9..b3f4533 100644 --- a/src/components/workouts/ExerciseSelector.css +++ b/src/components/workouts/ExerciseSelector.css @@ -246,6 +246,28 @@ color: #9ca3af; } +/* Create New Exercise Button */ +.create-exercise-btn { + border-style: dashed !important; + border-color: #3b82f6 !important; + background: #eff6ff !important; +} + +.create-exercise-btn:hover { + background: #dbeafe !important; + border-color: #2563eb !important; +} + +.create-exercise-btn .exercise-item-name { + color: #3b82f6; +} + +.create-exercise-btn .create-hint { + background-color: transparent; + color: #6b7280; + font-style: italic; +} + /* Mobile Responsive */ @media (max-width: 640px) { .modal-overlay { diff --git a/src/components/workouts/ExerciseSelector.tsx b/src/components/workouts/ExerciseSelector.tsx index c0f7ab9..cf1991e 100644 --- a/src/components/workouts/ExerciseSelector.tsx +++ b/src/components/workouts/ExerciseSelector.tsx @@ -3,7 +3,9 @@ */ import { useState, useEffect } from 'react'; +import { createPortal } from 'react-dom'; import type { Exercise, MuscleGroup } from '../../types/models'; +import ExerciseForm from '../exercises/ExerciseForm'; import './ExerciseSelector.css'; interface ExerciseSelectorProps { @@ -11,6 +13,9 @@ interface ExerciseSelectorProps { selectedExerciseIds: string[]; onSelect: (exerciseId: string) => void; onClose: () => void; + onCreateExercise?: ( + exercise: Omit + ) => Promise; } // Define muscle group categories for filtering @@ -32,6 +37,7 @@ export default function ExerciseSelector({ selectedExerciseIds, onSelect, onClose, + onCreateExercise, }: ExerciseSelectorProps) { const [searchQuery, setSearchQuery] = useState(''); const [filterCategory, setFilterCategory] = useState< @@ -39,6 +45,7 @@ export default function ExerciseSelector({ >('all'); const [filterMuscleGroup, setFilterMuscleGroup] = useState('all'); + const [showCreateForm, setShowCreateForm] = useState(false); const filteredExercises = exercises.filter((exercise) => { const matchesSearch = exercise.name @@ -129,6 +136,15 @@ export default function ExerciseSelector({ onClose(); }; + const handleCreateExerciseSave = async ( + exerciseData: Omit + ) => { + if (!onCreateExercise) return; + const newId = await onCreateExercise(exerciseData); + setShowCreateForm(false); + onSelect(newId); + }; + // Lock body scroll when modal is open useEffect(() => { const originalStyle = window.getComputedStyle(document.body).overflow; @@ -217,6 +233,26 @@ export default function ExerciseSelector({
+ {onCreateExercise && ( + + )} + {filteredExercises.length === 0 && (

No exercises found. Try adjusting your search or filters. @@ -246,6 +282,19 @@ export default function ExerciseSelector({ ))}

+ + {showCreateForm && + onCreateExercise && + createPortal( +
+ setShowCreateForm(false)} + /> +
, + document.body + )} ); From f2d9e3a6583c6fabc90e4bc1a83e0047864b4558 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:38:47 +0000 Subject: [PATCH 3/4] Move portal z-index to CSS class and revert package-lock.json changes Agent-Logs-Url: https://github.com/wulfland/Repstack/sessions/5e8d8917-f175-485e-afd4-d1a6431ea934 Co-authored-by: wulfland <5276337+wulfland@users.noreply.github.com> --- package-lock.json | 22 +++++++++++++++++++- src/components/workouts/ExerciseSelector.css | 6 ++++++ src/components/workouts/ExerciseSelector.tsx | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54a7511..c0180cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -148,6 +148,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1771,6 +1772,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -1811,6 +1813,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -3650,6 +3653,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -3740,6 +3744,7 @@ "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.52.0", "@typescript-eslint/types": "8.52.0", @@ -4149,6 +4154,7 @@ "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/utils": "4.0.18", "fflate": "^0.8.2", @@ -4185,6 +4191,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4496,6 +4503,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -4968,7 +4976,8 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.2.1.tgz", "integrity": "sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/dexie-react-hooks": { "version": "4.2.0", @@ -5260,6 +5269,7 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -5926,6 +5936,7 @@ "integrity": "sha512-RDeQm3dT9n0A5f/TszjUmNCLEuPnMGv3Tv4BmNINebz/h17PA6LMBcxJ5FrcqltNBMh9jA/8ufgDdBYUdBt+eg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", @@ -7370,6 +7381,7 @@ "integrity": "sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "playwright-core": "cli.js" }, @@ -7495,6 +7507,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7670,6 +7683,7 @@ "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -8691,6 +8705,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8874,6 +8889,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -8980,6 +8996,7 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -9393,6 +9410,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -9450,6 +9468,7 @@ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -9757,6 +9776,7 @@ "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/components/workouts/ExerciseSelector.css b/src/components/workouts/ExerciseSelector.css index b3f4533..d42a6bc 100644 --- a/src/components/workouts/ExerciseSelector.css +++ b/src/components/workouts/ExerciseSelector.css @@ -268,6 +268,12 @@ font-style: italic; } +/* Exercise Form Portal - renders above ExerciseSelector (z-index: 1100) */ +.exercise-form-portal { + position: relative; + z-index: 1200; +} + /* Mobile Responsive */ @media (max-width: 640px) { .modal-overlay { diff --git a/src/components/workouts/ExerciseSelector.tsx b/src/components/workouts/ExerciseSelector.tsx index cf1991e..9894246 100644 --- a/src/components/workouts/ExerciseSelector.tsx +++ b/src/components/workouts/ExerciseSelector.tsx @@ -286,7 +286,7 @@ export default function ExerciseSelector({ {showCreateForm && onCreateExercise && createPortal( -
+
Date: Mon, 1 Jun 2026 07:55:01 +0000 Subject: [PATCH 4/4] Update GitHub Actions to Node.js 24-compatible versions --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/deploy.yml | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 881e75e..823e9b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,10 +15,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' @@ -42,7 +42,7 @@ jobs: run: npm run test:coverage - name: Upload coverage reports - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v6 if: always() with: files: ./coverage/lcov.info @@ -56,7 +56,7 @@ jobs: run: npm run build - name: Upload build artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: dist path: dist/ diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index edd0bd6..3395bfb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -23,10 +23,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' @@ -40,10 +40,10 @@ jobs: BASE_URL: /${{ github.event.repository.name }}/ - name: Setup Pages - uses: actions/configure-pages@v4 + uses: actions/configure-pages@v6 - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v5 with: path: dist/ @@ -62,7 +62,7 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 e2e-test: name: E2E Tests @@ -71,10 +71,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' @@ -105,7 +105,7 @@ jobs: BASE_URL: ${{ needs.deploy.outputs.page_url }} - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 if: always() with: name: playwright-report