From 6074936f4de372386ec8ab1e022739a8926ab73b Mon Sep 17 00:00:00 2001 From: Rick van der Staaij Date: Wed, 12 Feb 2025 15:47:26 +0100 Subject: [PATCH 1/3] Add application utilities --- src/components/Generator/Generator.tsx | 7 ++++--- .../Generator/GeneredTaskfile/addons/addons.ts | 6 ++++-- .../addons/appUtilities/app-utilities.sh | 6 ++++++ .../addons/appUtilities/appUtilities.ts | 12 ++++++++++++ .../GeneredTaskfile/addons/appUtilities/index.ts | 1 + .../addons/fileUtilities/file-utilities.sh | 6 +++--- .../Generator/GeneredTaskfile/taskfile-base.sh | 2 +- src/components/Generator/Settings/Settings.tsx | 12 +++++++----- .../{settings.module.css => settings.module.scss} | 4 ++++ 9 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh create mode 100644 src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts create mode 100644 src/components/Generator/GeneredTaskfile/addons/appUtilities/index.ts rename src/components/Generator/Settings/{settings.module.css => settings.module.scss} (70%) diff --git a/src/components/Generator/Generator.tsx b/src/components/Generator/Generator.tsx index d11f8de..1b6962f 100644 --- a/src/components/Generator/Generator.tsx +++ b/src/components/Generator/Generator.tsx @@ -1,14 +1,14 @@ 'use client'; -import { ReactElement } from 'react'; +import {ReactElement} from 'react'; import Window from '@/components/Window'; import styles from './generator.module.scss'; -import { useForm } from 'react-hook-form'; +import {useForm} from 'react-hook-form'; import Settings from './Settings'; import GeneratedTaskfile from './GeneredTaskfile'; import Form from '@/components/Form'; -import { Font } from './GeneredTaskfile/buildHeader'; +import {Font} from './GeneredTaskfile/buildHeader'; export type GeneratorSettings = { project: string; @@ -18,6 +18,7 @@ export type GeneratorSettings = { checkoutGitRequest: 'none' | 'github' | 'gitlab'; configureGitHooks: boolean; fileUtilities: boolean; + appUtilities: boolean; }; const Generator = (): ReactElement => { diff --git a/src/components/Generator/GeneredTaskfile/addons/addons.ts b/src/components/Generator/GeneredTaskfile/addons/addons.ts index 2a0eb60..387e487 100644 --- a/src/components/Generator/GeneredTaskfile/addons/addons.ts +++ b/src/components/Generator/GeneredTaskfile/addons/addons.ts @@ -1,9 +1,10 @@ -import { GeneratorSettings } from '@/components/Generator'; -import { TaskfileAddons } from '@/components/Generator/GeneredTaskfile/taskfile'; +import {GeneratorSettings} from '@/components/Generator'; +import {TaskfileAddons} from '@/components/Generator/GeneredTaskfile/taskfile'; import runtime from './runtime'; import git from './git'; import fileUtilities from './fileUtilities'; +import appUtilities from "@/components/Generator/GeneredTaskfile/addons/appUtilities"; /** * Render addons for the Taskfile based on the generator settings @@ -15,6 +16,7 @@ const renderAddons = (settings: GeneratorSettings, addons: TaskfileAddons): void runtime(settings, addons); git(settings, addons); fileUtilities(settings, addons); + appUtilities(settings, addons); }; export default renderAddons; diff --git a/src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh b/src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh new file mode 100644 index 0000000..ce508cb --- /dev/null +++ b/src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh @@ -0,0 +1,6 @@ +function app:ensure { + if [ ! $(which "$1") ]; then + echo "Missing required application ${RED}$1${RESET}. Install it before tying again." + exit 1 + fi +} diff --git a/src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts b/src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts new file mode 100644 index 0000000..edf579f --- /dev/null +++ b/src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts @@ -0,0 +1,12 @@ +import {GeneratorSettings} from '@/components/Generator'; +import {TaskfileAddons} from '@/components/Generator/GeneredTaskfile/taskfile'; +import loadTemplate from '@/helpers/loadTemplate'; +import appUtilitiesSh from './app-utilities.sh'; + +const appUtilities = (settings: GeneratorSettings, addon: TaskfileAddons): void => { + if (settings.appUtilities) { + addon.utilityFunctions.push(loadTemplate(appUtilitiesSh)); + } +}; + +export default appUtilities; diff --git a/src/components/Generator/GeneredTaskfile/addons/appUtilities/index.ts b/src/components/Generator/GeneredTaskfile/addons/appUtilities/index.ts new file mode 100644 index 0000000..8fd73b0 --- /dev/null +++ b/src/components/Generator/GeneredTaskfile/addons/appUtilities/index.ts @@ -0,0 +1 @@ +export { default } from './appUtilities'; diff --git a/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh b/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh index a55d6f1..c01ae80 100644 --- a/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh +++ b/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh @@ -1,6 +1,6 @@ function file:ensure { # Abort if the desired file is not found if [ ! -f $1 ]; then - echo -e "${RED}Missing required file: ${YELLOW}$1${RESET}" + echo -e "Missing required file ${RED}$1${RESET}, make sure it is created." exit 1 fi } @@ -8,8 +8,8 @@ function file:ensure { # Abort if the desired file is not found function file:ensure-copy { # file:ensure-copy $COPY_TARGET $COPY_SOURCE if [ ! -f $1 ]; then cp $2 $1; - echo -e "Created copy of ${YELLOW}$2${RESET} to create ${GREEN}$1${RESET}."; + echo -e "Created copy of ${YELLOW}$2${RESET} to create required file ${GREEN}$1${RESET}."; else - echo "${GREEN}$1${RESET} is present."; + echo "File ${GREEN}$1${RESET} is present."; fi } diff --git a/src/components/Generator/GeneredTaskfile/taskfile-base.sh b/src/components/Generator/GeneredTaskfile/taskfile-base.sh index 641425d..925c5d3 100644 --- a/src/components/Generator/GeneredTaskfile/taskfile-base.sh +++ b/src/components/Generator/GeneredTaskfile/taskfile-base.sh @@ -72,7 +72,7 @@ function task:shorthand { ## Create CLI shorthand task instead of ./Taskfile banner if [[ ! "$(declare -F task:${@-help})" ]]; then title "Task not found" - echo -e "Task ${YELLOW}$1${RESET} doesn't exist." + echo -e "Task ${RED}$1${RESET} doesn't exist." task:help exit 1 fi diff --git a/src/components/Generator/Settings/Settings.tsx b/src/components/Generator/Settings/Settings.tsx index a6ef81d..daefb95 100644 --- a/src/components/Generator/Settings/Settings.tsx +++ b/src/components/Generator/Settings/Settings.tsx @@ -1,12 +1,12 @@ 'use client'; -import { ReactElement } from 'react'; +import {ReactElement} from 'react'; -import styles from './settings.module.css'; +import styles from './settings.module.scss'; import TextInput from '@/components/Form/Text'; import RadioInput from '@/components/Form/Radio'; -import { useFormContext } from 'react-hook-form'; -import { GeneratorSettings } from '@/components/Generator'; +import {useFormContext} from 'react-hook-form'; +import {GeneratorSettings} from '@/components/Generator'; import Checkbox from '@/components/Form/Checkbox'; const Settings = (): ReactElement => { @@ -80,7 +80,9 @@ const Settings = (): ReactElement => { ]} /> Configure git hooks - File utilities +

Utilities

+ File checks + Application dependencies ); }; diff --git a/src/components/Generator/Settings/settings.module.css b/src/components/Generator/Settings/settings.module.scss similarity index 70% rename from src/components/Generator/Settings/settings.module.css rename to src/components/Generator/Settings/settings.module.scss index 198831d..5dc64b9 100644 --- a/src/components/Generator/Settings/settings.module.css +++ b/src/components/Generator/Settings/settings.module.scss @@ -2,4 +2,8 @@ display: flex; flex-direction: column; gap: 1rem; + + h2 { + font-size: 1rem; + } } From 854c8ecc8e50ed71dc2c77bf3be2f7dcac386031 Mon Sep 17 00:00:00 2001 From: Rick van der Staaij Date: Wed, 12 Feb 2025 15:47:51 +0100 Subject: [PATCH 2/3] Add application utilities --- src/components/Generator/Generator.tsx | 6 +++--- .../Generator/GeneredTaskfile/SaveFile/SaveFile.tsx | 2 +- src/components/Generator/GeneredTaskfile/addons/addons.ts | 6 +++--- .../GeneredTaskfile/addons/appUtilities/appUtilities.ts | 4 ++-- src/components/Generator/Settings/Settings.tsx | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/components/Generator/Generator.tsx b/src/components/Generator/Generator.tsx index 1b6962f..c0d97a8 100644 --- a/src/components/Generator/Generator.tsx +++ b/src/components/Generator/Generator.tsx @@ -1,14 +1,14 @@ 'use client'; -import {ReactElement} from 'react'; +import { ReactElement } from 'react'; import Window from '@/components/Window'; import styles from './generator.module.scss'; -import {useForm} from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import Settings from './Settings'; import GeneratedTaskfile from './GeneredTaskfile'; import Form from '@/components/Form'; -import {Font} from './GeneredTaskfile/buildHeader'; +import { Font } from './GeneredTaskfile/buildHeader'; export type GeneratorSettings = { project: string; diff --git a/src/components/Generator/GeneredTaskfile/SaveFile/SaveFile.tsx b/src/components/Generator/GeneredTaskfile/SaveFile/SaveFile.tsx index 8a94846..baeb701 100644 --- a/src/components/Generator/GeneredTaskfile/SaveFile/SaveFile.tsx +++ b/src/components/Generator/GeneredTaskfile/SaveFile/SaveFile.tsx @@ -1,6 +1,6 @@ 'use client'; -import {ReactElement, useState} from 'react'; +import { ReactElement, useState } from 'react'; import styles from './save-file.module.scss'; diff --git a/src/components/Generator/GeneredTaskfile/addons/addons.ts b/src/components/Generator/GeneredTaskfile/addons/addons.ts index 387e487..6f0dfba 100644 --- a/src/components/Generator/GeneredTaskfile/addons/addons.ts +++ b/src/components/Generator/GeneredTaskfile/addons/addons.ts @@ -1,10 +1,10 @@ -import {GeneratorSettings} from '@/components/Generator'; -import {TaskfileAddons} from '@/components/Generator/GeneredTaskfile/taskfile'; +import { GeneratorSettings } from '@/components/Generator'; +import { TaskfileAddons } from '@/components/Generator/GeneredTaskfile/taskfile'; import runtime from './runtime'; import git from './git'; import fileUtilities from './fileUtilities'; -import appUtilities from "@/components/Generator/GeneredTaskfile/addons/appUtilities"; +import appUtilities from '@/components/Generator/GeneredTaskfile/addons/appUtilities'; /** * Render addons for the Taskfile based on the generator settings diff --git a/src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts b/src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts index edf579f..6952dfa 100644 --- a/src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts +++ b/src/components/Generator/GeneredTaskfile/addons/appUtilities/appUtilities.ts @@ -1,5 +1,5 @@ -import {GeneratorSettings} from '@/components/Generator'; -import {TaskfileAddons} from '@/components/Generator/GeneredTaskfile/taskfile'; +import { GeneratorSettings } from '@/components/Generator'; +import { TaskfileAddons } from '@/components/Generator/GeneredTaskfile/taskfile'; import loadTemplate from '@/helpers/loadTemplate'; import appUtilitiesSh from './app-utilities.sh'; diff --git a/src/components/Generator/Settings/Settings.tsx b/src/components/Generator/Settings/Settings.tsx index daefb95..4481524 100644 --- a/src/components/Generator/Settings/Settings.tsx +++ b/src/components/Generator/Settings/Settings.tsx @@ -1,12 +1,12 @@ 'use client'; -import {ReactElement} from 'react'; +import { ReactElement } from 'react'; import styles from './settings.module.scss'; import TextInput from '@/components/Form/Text'; import RadioInput from '@/components/Form/Radio'; -import {useFormContext} from 'react-hook-form'; -import {GeneratorSettings} from '@/components/Generator'; +import { useFormContext } from 'react-hook-form'; +import { GeneratorSettings } from '@/components/Generator'; import Checkbox from '@/components/Form/Checkbox'; const Settings = (): ReactElement => { From 58424c54945158e9491eb3a4d561ae01c8d39b78 Mon Sep 17 00:00:00 2001 From: Rick van der Staaij Date: Thu, 13 Feb 2025 11:28:04 +0100 Subject: [PATCH 3/3] Give positive feedback when utilities pass --- .../GeneredTaskfile/addons/appUtilities/app-utilities.sh | 8 +++++--- .../addons/fileUtilities/file-utilities.sh | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh b/src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh index ce508cb..891366a 100644 --- a/src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh +++ b/src/components/Generator/GeneredTaskfile/addons/appUtilities/app-utilities.sh @@ -1,6 +1,8 @@ -function app:ensure { - if [ ! $(which "$1") ]; then +function app:ensure { # Abort if the desired program is not installed + if [ ! $(which "$1") ]; then echo "Missing required application ${RED}$1${RESET}. Install it before tying again." exit 1 - fi + else + echo "Application ${GREEN}$1${RESET} is installed."; + fi } diff --git a/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh b/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh index c01ae80..b097b1d 100644 --- a/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh +++ b/src/components/Generator/GeneredTaskfile/addons/fileUtilities/file-utilities.sh @@ -2,14 +2,16 @@ function file:ensure { # Abort if the desired file is not found if [ ! -f $1 ]; then echo -e "Missing required file ${RED}$1${RESET}, make sure it is created." exit 1 + else + echo "File ${GREEN}$1${RESET} is present."; fi } -function file:ensure-copy { # file:ensure-copy $COPY_TARGET $COPY_SOURCE - if [ ! -f $1 ]; then +function file:ensure-copy { # file:ensure-copy $COPY_DESTINATION $SOURCE + if [ ! -f $1 ]; then cp $2 $1; echo -e "Created copy of ${YELLOW}$2${RESET} to create required file ${GREEN}$1${RESET}."; else echo "File ${GREEN}$1${RESET} is present."; - fi + fi }