add: adding support for creating dart/flutter packages
This commit is contained in:
parent
d17bfcf09a
commit
a63b2097a4
6 changed files with 152 additions and 46 deletions
|
@ -1,6 +1,7 @@
|
|||
name: protevus_platform
|
||||
repository: https://github.com/protevus/platform
|
||||
packages:
|
||||
- apps/**
|
||||
- packages/**
|
||||
- examples/**
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
scripts:
|
||||
_: &workflow_scripts
|
||||
_: &create_scripts
|
||||
clean:
|
||||
run: >
|
||||
melos exec -c 1 --fail-fast -- "
|
||||
|
|
24
.melos/create.yaml
Normal file
24
.melos/create.yaml
Normal file
|
@ -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
|
121
helpers/create_project.dart
Normal file
121
helpers/create_project.dart
Normal file
|
@ -0,0 +1,121 @@
|
|||
import 'dart:io';
|
||||
|
||||
void main(List<String> 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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Check if the correct number of arguments is provided
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "Usage: $0 <project_name> <project_type>"
|
||||
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"
|
Loading…
Reference in a new issue