diff --git a/.melos/base.yaml b/.melos/base.yaml index 15d1988..ebe8173 100644 --- a/.melos/base.yaml +++ b/.melos/base.yaml @@ -1,6 +1,7 @@ name: protevus_platform repository: https://github.com/protevus/platform packages: + - apps/** - packages/** - examples/** diff --git a/.melos/clean.yaml b/.melos/clean.yaml index 3b4b56c..de99b11 100644 --- a/.melos/clean.yaml +++ b/.melos/clean.yaml @@ -1,5 +1,5 @@ scripts: - _: &workflow_scripts + _: &create_scripts clean: run: > melos exec -c 1 --fail-fast -- " diff --git a/.melos/create.yaml b/.melos/create.yaml new file mode 100644 index 0000000..c8ac0fb --- /dev/null +++ b/.melos/create.yaml @@ -0,0 +1,24 @@ +scripts: + _: &create_scripts + create: + name: Create new package or application + description: | + Creates a new Dart package or Flutter application in the appropriate directory. + + Usage: melos run create -- --type dart|flutter --category type --name project_name + + Available categories for Dart: + - package : Basic Dart package + - console : Command-line application + - server : Server-side application + - desktop : Desktop application + - plugin : Dart plugin + + Available categories for Flutter: + - app : Mobile application + - web : Web application + - desktop : Desktop application + - plugin : Flutter plugin + - module : Flutter module + - package : Flutter package + run: dart run helpers/create_project.dart $MELOS_ARGS diff --git a/helpers/create_project.dart b/helpers/create_project.dart new file mode 100644 index 0000000..0814223 --- /dev/null +++ b/helpers/create_project.dart @@ -0,0 +1,121 @@ +import 'dart:io'; + +void main(List args) async { + // Parse command line arguments + String? projectType; + String? category; + String? name; + + for (var arg in args) { + final parts = arg.split(':'); + if (parts.length == 2) { + switch (parts[0]) { + case 'project_type': + case 'project-type': + projectType = parts[1]; + break; + case 'category': + category = parts[1]; + break; + case 'name': + name = parts[1]; + break; + } + } + } + + // Print received arguments for debugging + print('Received arguments:'); + print('Project Type: $projectType'); + print('Category: $category'); + print('Name: $name'); + + // Validate inputs + if (projectType == null || category == null || name == null) { + print('Error: Missing required arguments'); + print( + 'Usage: melos run create project_type:dart|flutter category:type name:project_name'); + exit(1); + } + + if (projectType != 'dart' && projectType != 'flutter') { + print('Error: project_type must be either "dart" or "flutter"'); + exit(1); + } + + // Determine base directory + final baseDir = projectType == 'flutter' && + (category == 'app' || category == 'web' || category == 'desktop') + ? 'apps' + : 'packages'; + + // Create project directory + final projectDir = Directory('$baseDir/$name'); + if (await projectDir.exists()) { + print('Error: Project directory already exists at ${projectDir.path}'); + exit(1); + } + + try { + // Ensure the base directory exists + await Directory(baseDir).create(recursive: true); + + // Create the project using the appropriate command + final result = await Process.run( + projectType, + [ + 'create', + if (projectType == 'flutter') ...[ + '--org', + 'com.example', + '--project-name', + name, + if (category == 'plugin') '--template=plugin', + if (category == 'package') '--template=package', + if (category == 'module') '--template=module', + if (category == 'web') '--platforms=web', + if (category == 'desktop') '--platforms=windows,macos,linux', + ] else ...[ + if (category == 'package') '--template=package', + if (category == 'console') '--template=console', + if (category == 'server') '--template=server-shelf', + ], + projectDir.path, + ], + ); + + if (result.exitCode != 0) { + print('Error creating project:'); + print(result.stderr); + exit(1); + } + + print('Successfully created $projectType project at ${projectDir.path}'); + + // Add additional dependencies based on category + if (category == 'server') { + await Process.run('dart', ['pub', 'add', 'shelf_router'], + workingDirectory: projectDir.path); + await Process.run('dart', ['pub', 'add', 'dotenv'], + workingDirectory: projectDir.path); + await Process.run('dart', ['pub', 'add', 'logger'], + workingDirectory: projectDir.path); + } + + if (category == 'desktop') { + await Process.run('dart', ['pub', 'add', 'window_manager'], + workingDirectory: projectDir.path); + await Process.run('dart', ['pub', 'add', 'screen_retriever'], + workingDirectory: projectDir.path); + } + + // Format the project + await Process.run('dart', ['format', projectDir.path]); + + print('Done! 🎉'); + print('To get started, cd into ${projectDir.path}'); + } catch (e) { + print('Error: $e'); + exit(1); + } +} diff --git a/melos.yaml b/melos.yaml index 7653042..9735f51 100644 --- a/melos.yaml +++ b/melos.yaml @@ -11,6 +11,7 @@ name: protevus_platform repository: https://github.com/protevus/platform packages: + - apps/** - packages/** - examples/** @@ -80,6 +81,10 @@ scripts: test:custom: run: melos exec --scope="$MELOS_SCOPE" -- dart test description: Run tests for specified packages (use with MELOS_SCOPE env var) + create: + name: Create new package or application + description: "Creates a new Dart package or Flutter application in the appropriate directory.\n\nUsage: melos run create -- --type dart|flutter --category type --name project_name\n\nAvailable categories for Dart:\n - package : Basic Dart package\n - console : Command-line application\n - server : Server-side application\n - desktop : Desktop application\n - plugin : Dart plugin\n\nAvailable categories for Flutter:\n - app : Mobile application\n - web : Web application\n - desktop : Desktop application\n - plugin : Flutter plugin\n - module : Flutter module\n - package : Flutter package\n" + run: dart run helpers/create_project.dart $MELOS_ARGS deps:check: run: melos exec -- "dart pub outdated" description: Check for outdated dependencies diff --git a/scripts/create_project b/scripts/create_project deleted file mode 100755 index e187d7e..0000000 --- a/scripts/create_project +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -# Check if the correct number of arguments is provided -if [ $# -ne 2 ]; then - echo "Usage: $0 " - echo "Project types: package, web, console" - exit 1 -fi - -# Assign arguments to variables -PROJECT_NAME=$1 -PROJECT_TYPE=$2 - -# Set the base directory for packages -PACKAGES_DIR="$HOME/Devboxes/platform/packages" - -# Create the packages directory if it doesn't exist -mkdir -p "$PACKAGES_DIR" - -# Change to the packages directory -cd "$PACKAGES_DIR" - -# Validate project type -case $PROJECT_TYPE in - package|web|console) - ;; - *) - echo "Invalid project type. Use 'package', 'web', or 'console'." - exit 1 - ;; -esac - -# Create the Dart project -dart create --template=$PROJECT_TYPE $PROJECT_NAME - -# Check if the project was created successfully -if [ $? -eq 0 ]; then - echo "Dart $PROJECT_TYPE project '$PROJECT_NAME' created successfully in $PACKAGES_DIR/$PROJECT_NAME" -else - echo "Failed to create the Dart project." - exit 1 -fi - -# Change into the project directory -cd "$PROJECT_NAME"