diff --git a/core/.prebuild/module_prebuild.sh b/core/.prebuild/module_prebuild.sh new file mode 100755 index 0000000..33c31a6 --- /dev/null +++ b/core/.prebuild/module_prebuild.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +flutter clean +flutter pub get +dart run easy_localization:generate -f keys -o locale_keys.g.dart -O lib/src/localization/generated -S resources/lang \ No newline at end of file diff --git a/core_ui/.prebuild/module_prebuild.sh b/core_ui/.prebuild/module_prebuild.sh new file mode 100755 index 0000000..18b5537 --- /dev/null +++ b/core_ui/.prebuild/module_prebuild.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +flutter clean +flutter pub get diff --git a/data/.prebuild/module_prebuild.sh b/data/.prebuild/module_prebuild.sh new file mode 100755 index 0000000..bb1a71e --- /dev/null +++ b/data/.prebuild/module_prebuild.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +flutter clean +flutter pub get +dart run build_runner build --delete-conflicting-outputs \ No newline at end of file diff --git a/data/pubspec.yaml b/data/pubspec.yaml index 0f597f2..a69d3d1 100644 --- a/data/pubspec.yaml +++ b/data/pubspec.yaml @@ -25,3 +25,7 @@ dev_dependencies: build_runner: ^2.4.8 json_serializable: ^6.8.0 + +# TODO: Remove when fixed (https://github.com/google/json_serializable.dart/issues/1485) +dependency_overrides: + analyzer: 7.3.0 diff --git a/domain/.prebuild/module_prebuild.sh b/domain/.prebuild/module_prebuild.sh new file mode 100755 index 0000000..18b5537 --- /dev/null +++ b/domain/.prebuild/module_prebuild.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +flutter clean +flutter pub get diff --git a/feature/.prebuild/module_prebuild.sh b/feature/.prebuild/module_prebuild.sh new file mode 100755 index 0000000..bb1a71e --- /dev/null +++ b/feature/.prebuild/module_prebuild.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +flutter clean +flutter pub get +dart run build_runner build --delete-conflicting-outputs \ No newline at end of file diff --git a/files/.gitignore b/files/.gitignore index bc7a84b..0e85ce3 100644 --- a/files/.gitignore +++ b/files/.gitignore @@ -50,5 +50,6 @@ android/app/build **/*.graphql.dart **/*.gr.dart *.env +**/*.prebuildhash .vscode \ No newline at end of file diff --git a/files/.prebuild/module_prebuild.sh b/files/.prebuild/module_prebuild.sh new file mode 100755 index 0000000..18b5537 --- /dev/null +++ b/files/.prebuild/module_prebuild.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +flutter clean +flutter pub get diff --git a/files/fast_prebuild_script_mac.sh b/files/fast_prebuild_script_mac.sh deleted file mode 100644 index cd1c2cd..0000000 --- a/files/fast_prebuild_script_mac.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -allDirs() { - count=$(find . -name "pubspec.yaml" -exec dirname {} \; | wc -l) - find . -name "pubspec.yaml" -exec dirname {} \; | xargs -n 1 -P "$count" -I {} bash -c ' - ( - cd "{}" || exit - echo -e "\033[1;32mRunning flutter clean and pub get in {}\033[0m" - flutter clean - flutter pub get - ) - ' -} - -echo_styled() { - echo -e "\033[1;$2m$1\033[0m" -} - -flutter clean - -allDirs - -# Generate localization keys -( - cd "core" || exit - echo_styled "Generating localization keys in core" 33 -dart run easy_localization:generate -f keys -o locale_keys.g.dart -O lib/src/localization/generated -S resources/lang -) - -# Generate data layer files -( - cd "data" || exit - echo_styled "Generating data layer files in data" 33 - dart run build_runner build --delete-conflicting-outputs -) - -# Generate core_ui layer files -( - cd "core_ui" || exit - echo_styled "Generating core_ui layer files in core_ui" 33 - dart run build_runner build --delete-conflicting-outputs -) - -# Generate feature layer files -( - cd "features" || exit - count=$(find . -mindepth 1 -maxdepth 1 -type d | wc -l) - find . -mindepth 1 -maxdepth 1 -type d | xargs -n 1 -P "$count" -I {} bash -c ' - cd "{}" && - echo -e "\033[1;33mRunning build_runner in {}\033[0m" && - dart run build_runner build --delete-conflicting-outputs - ' -) \ No newline at end of file diff --git a/files/prebuild_script.sh b/files/prebuild_script.sh deleted file mode 100755 index a9f5d09..0000000 --- a/files/prebuild_script.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# run function in all dirs -# expects a function name -allDirs() { - dirs=() - while IFS='' read -r line; do dirs+=("$line"); done < <(find . -maxdepth 2 -type d) - for dir in "${dirs[@]}"; do - $1 "$dir" - done -} - -runGet() { - cd "$1" || return - if [ -f "pubspec.yaml" ]; then - flutter clean && flutter pub get - fi - cd - >/dev/null || return -} - -flutter clean - -allDirs "runGet" - -# generate localization keys -cd "core" || exit -dart run easy_localization:generate -f keys -o locale_keys.g.dart -O lib/src/localization/generated -S resources/lang - -# generate data layer files -cd "../data" || exit -dart run build_runner build --delete-conflicting-outputs - -# generate auto route modules -if [ -d '../features' ]; then - cd "../features" - find . -mindepth 1 -maxdepth 1 -type d -exec sh -c 'cd "$0" && echo "$0" && dart run build_runner build --delete-conflicting-outputs' {} \; -fi \ No newline at end of file diff --git a/files/scripts/fast_prebuild_script_mac.sh b/files/scripts/fast_prebuild_script_mac.sh new file mode 100755 index 0000000..426cda0 --- /dev/null +++ b/files/scripts/fast_prebuild_script_mac.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +function print_usage() { + cat </dev/null || sysctl -n hw.ncpu) + find . -mindepth 1 -maxdepth 1 -type d | xargs -n 1 -P "$count" -I {} bash -c ' + cd "${0}" && + module_flow -g "lib" -g "*.yaml" + ' {} +) + +( + cd navigation || exit + module_flow -g "lib" -g "*.yaml" +) + +( + module_flow -g "lib" -g "*.yaml" +) diff --git a/files/frontend-run.sh b/files/scripts/frontend-run.sh old mode 100644 new mode 100755 similarity index 77% rename from files/frontend-run.sh rename to files/scripts/frontend-run.sh index 50e59f8..6b5329c --- a/files/frontend-run.sh +++ b/files/scripts/frontend-run.sh @@ -3,4 +3,4 @@ export DEPLOYMENT_ENV="$1" docker build --build-arg="RUN_FILE=lib/main.dart" --no-cache -t flutter-web:$DEPLOYMENT_ENV . -docker compose up -d flutter-web-prod \ No newline at end of file +docker compose up -d flutter-web-prod diff --git a/files/scripts/functions.sh b/files/scripts/functions.sh new file mode 100755 index 0000000..e081bf2 --- /dev/null +++ b/files/scripts/functions.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +export COLOR_RED=31 +export COLOR_GREEN=32 +export COLOR_BLUE=36 + +function echo_styled() { + echo -e "\033[1;$2m$1\033[0m" +} + +function module_flow() { + set -eo pipefail + + local PREBUILD_DIR=".prebuild" + local HASH_FILE="hash.prebuildhash" + local PREBUILD_FILE="module_prebuild.sh" + + local globs=() + + function on_error() { + local exit_code=$? + echo_styled "🔴Error while processing $(pwd)" "$COLOR_RED" + [[ -n "${abs_hash:-}" && -f "$abs_hash" ]] && rm -f "$abs_hash" + exit $exit_code + } + + trap 'on_error' ERR + + while [[ "$#" -gt 0 ]]; do + case "$1" in + -g) globs+=("$2"); shift 2 ;; + *) echo "Unknown parameter: $1"; return 1 ;; + esac + done + + if [ ${#globs[@]} -eq 0 ]; then + echo "Error: At least one -g (globs) is required." >&2 + return 1 + fi + + local merged="${globs[@]}" + local hash=$(find $merged -type f -exec sha256sum {} \; | sort | sha256sum | awk '{ print $1 }') + + cd "$PREBUILD_DIR" + + [ ! -f "$HASH_FILE" ] && touch "$HASH_FILE" + + abs_hash="$(realpath "$HASH_FILE")" + + local old_hash=$(<$HASH_FILE) + echo "$hash" > "$HASH_FILE" + + if $FORCE || [ "$hash" != "$old_hash" ]; then + echo_styled "🟢Running $PREBUILD_FILE inside $(pwd)" "$COLOR_GREEN" + + cd ../ + + if $VERBOSE; then + sh "./$PREBUILD_DIR/$PREBUILD_FILE" + else + sh "./$PREBUILD_DIR/$PREBUILD_FILE" > /dev/null + fi + + local new_hash=$(find $merged -type f -exec sha256sum {} \; | sort | sha256sum | awk '{ print $1 }') + cd "$PREBUILD_DIR" + echo "$new_hash" > "$HASH_FILE" + else + echo_styled "🔵Skipping $PREBUILD_FILE inside $(pwd)" "$COLOR_BLUE" + fi + + trap - ERR +} \ No newline at end of file diff --git a/files/scripts/prebuild_script.sh b/files/scripts/prebuild_script.sh new file mode 100755 index 0000000..139c137 --- /dev/null +++ b/files/scripts/prebuild_script.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +function print_usage() { + cat <