breaking: completed addition of melos based config and build system
This commit is contained in:
parent
e6cab8c02f
commit
848ffd4988
6 changed files with 405 additions and 9 deletions
|
@ -1,6 +1,3 @@
|
||||||
# THIS FILE IS AUTOGENERATED BY MELOS. DO NOT EDIT THIS FILE DIRECTLY.
|
|
||||||
# EDIT THE CORRESPONDING YAML FILES INSTEAD.
|
|
||||||
|
|
||||||
name: protevus_platform
|
name: protevus_platform
|
||||||
repository: https://github.com/protevus/platform
|
repository: https://github.com/protevus/platform
|
||||||
packages:
|
packages:
|
||||||
|
|
|
@ -2,4 +2,8 @@ scripts:
|
||||||
_: &utils_scripts
|
_: &utils_scripts
|
||||||
combine_config:
|
combine_config:
|
||||||
run: dart helpers/combine_melos_config.dart
|
run: dart helpers/combine_melos_config.dart
|
||||||
description: Combine Melos configuration files
|
description: Combine Melos configuration files
|
||||||
|
|
||||||
|
help:
|
||||||
|
run: dart helpers/print_melos_commands.dart
|
||||||
|
description: Display a formatted list of all available Melos commands
|
328
docs/Melos.md
Normal file
328
docs/Melos.md
Normal file
|
@ -0,0 +1,328 @@
|
||||||
|
# Protevus Platform Melos Configuration Documentation
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The Protevus Platform uses Melos to manage our monorepo structure and automate various development tasks. This comprehensive guide outlines the features provided by our Melos configuration and provides detailed instructions on how to use them effectively.
|
||||||
|
|
||||||
|
## Repository Structure
|
||||||
|
|
||||||
|
- Project name: `protevus_platform`
|
||||||
|
- Repository: `https://github.com/protevus/platform`
|
||||||
|
- Package locations:
|
||||||
|
- `packages/`: Core packages of the platform
|
||||||
|
- `examples/`: Example applications and usage demonstrations
|
||||||
|
|
||||||
|
## Version Control Integration
|
||||||
|
|
||||||
|
- Version bump commit message format: "chore: Bump version to %v"
|
||||||
|
- Changelog:
|
||||||
|
- Version commits are linked in the changelog
|
||||||
|
- A workspace-level changelog is generated
|
||||||
|
- Main versioning branch: `main`
|
||||||
|
|
||||||
|
Example of how versioning works:
|
||||||
|
```bash
|
||||||
|
# To bump the version and generate changelog
|
||||||
|
melos version --yes
|
||||||
|
|
||||||
|
# To bump a specific version
|
||||||
|
melos version 1.2.3 --yes
|
||||||
|
|
||||||
|
# To bump a prerelease version
|
||||||
|
melos version prerelease --preid beta --yes
|
||||||
|
```
|
||||||
|
|
||||||
|
## IDE Integration
|
||||||
|
|
||||||
|
- IntelliJ integration is disabled to prevent conflicts with our custom setup.
|
||||||
|
|
||||||
|
## Available Scripts
|
||||||
|
|
||||||
|
### Static Analysis and Formatting
|
||||||
|
|
||||||
|
1. **Analyze**
|
||||||
|
- Command: `melos run analyze`
|
||||||
|
- Description: Runs `dart analyze` on all packages to identify potential issues.
|
||||||
|
- Usage: `melos run analyze`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Analyzing package_1...
|
||||||
|
No issues found!
|
||||||
|
Analyzing package_2...
|
||||||
|
info • Unused import • lib/src/unused_file.dart:3:8 • unused_import
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Format**
|
||||||
|
- Command: `melos run format`
|
||||||
|
- Description: Formats all Dart files in the repository using `dart format`.
|
||||||
|
- Usage: `melos run format`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
# Format and show which files were changed
|
||||||
|
melos run format -- -o write --set-exit-if-changed
|
||||||
|
```
|
||||||
|
|
||||||
|
### Code Generation
|
||||||
|
|
||||||
|
3. **Generate**
|
||||||
|
- Command: `melos run generate`
|
||||||
|
- Description: Runs `build_runner` for code generation in all packages.
|
||||||
|
- Usage: `melos run generate`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Running build_runner for package_1...
|
||||||
|
[INFO] Generating build script...
|
||||||
|
[INFO] Generating build script completed, took 304ms
|
||||||
|
[INFO] Running build...
|
||||||
|
[INFO] 5 outputs were generated
|
||||||
|
[INFO] Running build completed, took 2.8s
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Generate Custom**
|
||||||
|
- Command: `melos run generate:custom`
|
||||||
|
- Description: Runs code generation for specified packages.
|
||||||
|
- Usage: `MELOS_SCOPE="package_name1,package_name2" melos run generate:custom`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="auth_package,user_package" melos run generate:custom
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Generate Check**
|
||||||
|
- Command: `melos run generate:check`
|
||||||
|
- Description: Checks if code generation is needed in specified packages.
|
||||||
|
- Usage: `MELOS_SCOPE="package_name" melos run generate:check`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Checking auth_package...
|
||||||
|
Package auth_package needs code generation.
|
||||||
|
Checking user_package...
|
||||||
|
Package user_package does not use build_runner.
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Generate Dummy Test**
|
||||||
|
- Command: `melos run generate:dummy:test`
|
||||||
|
- Description: Generates a dummy test file in specified package(s).
|
||||||
|
- Usage: `MELOS_SCOPE="package_name" melos run generate:dummy:test`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="new_feature" melos run generate:dummy:test
|
||||||
|
# This will create a file: new_feature/test/dummy_test.dart
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publishing
|
||||||
|
|
||||||
|
7. **Publish**
|
||||||
|
- Command: `melos run publish`
|
||||||
|
- Description: Publishes all packages that have changed.
|
||||||
|
- Usage: `melos run publish`
|
||||||
|
- Example workflow:
|
||||||
|
```bash
|
||||||
|
# First, check what would be published
|
||||||
|
melos run publish:check
|
||||||
|
# If everything looks good, publish
|
||||||
|
melos run publish
|
||||||
|
```
|
||||||
|
|
||||||
|
8. **Publish Check**
|
||||||
|
- Command: `melos run publish:check`
|
||||||
|
- Description: Dry run to check which packages would be published.
|
||||||
|
- Usage: `melos run publish:check`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Would publish the following packages:
|
||||||
|
- auth_package (1.0.0 -> 1.0.1)
|
||||||
|
- user_package (2.1.0 -> 2.2.0)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
9. **Generate Docs**
|
||||||
|
- Command: `melos run docs:generate`
|
||||||
|
- Description: Generates dartdoc documentation for all packages.
|
||||||
|
- Usage: `melos run docs:generate`
|
||||||
|
|
||||||
|
10. **Generate Custom Docs**
|
||||||
|
- Command: `melos run docs:generate:custom`
|
||||||
|
- Description: Generates documentation for specified packages.
|
||||||
|
- Usage: `MELOS_SCOPE="package_name1,package_name2" melos run docs:generate:custom`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="core_package,utils_package" melos run docs:generate:custom
|
||||||
|
```
|
||||||
|
|
||||||
|
11. **Serve Docs**
|
||||||
|
- Command: `melos run docs:serve`
|
||||||
|
- Description: Serves generated documentation using `dhttpd`.
|
||||||
|
- Usage: `melos run docs:serve`
|
||||||
|
- After running, visit `http://localhost:8080` in your browser
|
||||||
|
|
||||||
|
12. **Serve Custom Docs**
|
||||||
|
- Command: `melos run docs:serve:custom`
|
||||||
|
- Description: Serves documentation for specified packages.
|
||||||
|
- Usage: `MELOS_SCOPE="package_name" DOC_PORT=8081 melos run docs:serve:custom`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="api_package" DOC_PORT=8082 melos run docs:serve:custom
|
||||||
|
# Then visit http://localhost:8082 in your browser
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
13. **Test**
|
||||||
|
- Command: `melos run test`
|
||||||
|
- Description: Runs tests for all packages with fail-fast option.
|
||||||
|
- Usage: `melos run test`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Running tests for auth_package...
|
||||||
|
00:01 +10: All tests passed!
|
||||||
|
Running tests for user_package...
|
||||||
|
00:02 +15: All tests passed!
|
||||||
|
```
|
||||||
|
|
||||||
|
14. **Test Custom**
|
||||||
|
- Command: `melos run test:custom`
|
||||||
|
- Description: Runs tests for specified packages.
|
||||||
|
- Usage: `MELOS_SCOPE="package_name1,package_name2" melos run test:custom`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="auth_package,user_package" melos run test:custom -- --coverage
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dependency Management
|
||||||
|
|
||||||
|
15. **Check Dependencies**
|
||||||
|
- Command: `melos run deps:check`
|
||||||
|
- Description: Checks for outdated dependencies in all packages.
|
||||||
|
- Usage: `melos run deps:check`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Checking dependencies for auth_package...
|
||||||
|
2 dependencies are out of date
|
||||||
|
Checking dependencies for user_package...
|
||||||
|
All dependencies up to date
|
||||||
|
```
|
||||||
|
|
||||||
|
16. **Upgrade Dependencies**
|
||||||
|
- Command: `melos run deps:upgrade`
|
||||||
|
- Description: Upgrades all dependencies to their latest versions.
|
||||||
|
- Usage: `melos run deps:upgrade`
|
||||||
|
|
||||||
|
17. **Upgrade Custom Dependencies**
|
||||||
|
- Command: `melos run deps:upgrade:custom`
|
||||||
|
- Description: Upgrades dependencies for specified packages.
|
||||||
|
- Usage: `MELOS_SCOPE="package_name1,package_name2" melos run deps:upgrade:custom`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="database_package,api_package" melos run deps:upgrade:custom
|
||||||
|
```
|
||||||
|
|
||||||
|
### CI/CD
|
||||||
|
|
||||||
|
18. **CI Pipeline**
|
||||||
|
- Command: `melos run ci`
|
||||||
|
- Description: Runs the full CI pipeline (analyze and test).
|
||||||
|
- Usage: `melos run ci`
|
||||||
|
- This is typically used in CI/CD environments, e.g., in a GitHub Actions workflow:
|
||||||
|
```yaml
|
||||||
|
jobs:
|
||||||
|
ci:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: dart-lang/setup-dart@v1
|
||||||
|
- run: dart pub global activate melos
|
||||||
|
- run: melos bootstrap
|
||||||
|
- run: melos run ci
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debugging and Utility Scripts
|
||||||
|
|
||||||
|
19. **Debug Package Name**
|
||||||
|
- Command: `melos run debug_pkg_name`
|
||||||
|
- Description: Outputs the name of each package in the workspace.
|
||||||
|
- Usage: `melos run debug_pkg_name`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Package name is auth_package
|
||||||
|
Package name is user_package
|
||||||
|
Package name is core_package
|
||||||
|
```
|
||||||
|
|
||||||
|
20. **Debug Package Path**
|
||||||
|
- Command: `melos run debug_pkg_path`
|
||||||
|
- Description: Outputs the path of each package in the workspace.
|
||||||
|
- Usage: `melos run debug_pkg_path`
|
||||||
|
- Example output:
|
||||||
|
```
|
||||||
|
Package path is /home/user/protevus_platform/packages/auth_package
|
||||||
|
Package path is /home/user/protevus_platform/packages/user_package
|
||||||
|
```
|
||||||
|
|
||||||
|
21. **Debug Reflectable**
|
||||||
|
- Command: `melos run debug:reflectable`
|
||||||
|
- Description: Finds `.reflectable.dart` files in specified packages.
|
||||||
|
- Usage: `MELOS_SCOPE="package_name" melos run debug:reflectable`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="core_package" melos run debug:reflectable
|
||||||
|
# Output: Checking for .reflectable.dart files in core_package
|
||||||
|
# /home/user/protevus_platform/packages/core_package/lib/src/models.reflectable.dart
|
||||||
|
```
|
||||||
|
|
||||||
|
22. **List Dart Files**
|
||||||
|
- Command: `melos run list:dart:files`
|
||||||
|
- Description: Lists all Dart files in specified package(s).
|
||||||
|
- Usage: `MELOS_SCOPE="package_name" melos run list:dart:files`
|
||||||
|
- Example:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="utils_package" melos run list:dart:files
|
||||||
|
# Output: Listing all Dart files in utils_package:
|
||||||
|
# /home/user/protevus_platform/packages/utils_package/lib/src/string_utils.dart
|
||||||
|
# /home/user/protevus_platform/packages/utils_package/lib/src/date_utils.dart
|
||||||
|
```
|
||||||
|
|
||||||
|
23. **Combine Config**
|
||||||
|
- Command: `melos run combine_config`
|
||||||
|
- Description: Combines Melos configuration files using a custom script.
|
||||||
|
- Usage: `melos run combine_config`
|
||||||
|
- This is useful for maintaining separate config files for different environments or CI/CD pipelines.
|
||||||
|
|
||||||
|
## Advanced Usage Examples
|
||||||
|
|
||||||
|
1. Running a subset of tests matching a specific pattern:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="auth_package" melos run test:custom -- --name "login"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Generating documentation and immediately serving it:
|
||||||
|
```bash
|
||||||
|
melos run docs:generate && melos run docs:serve
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Checking for outdated dependencies, upgrading them, and then running tests:
|
||||||
|
```bash
|
||||||
|
melos run deps:check && melos run deps:upgrade && melos run test
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Performing a dry-run of publishing, then actually publishing if everything looks good:
|
||||||
|
```bash
|
||||||
|
melos run publish:check && melos run publish
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Running the full CI pipeline and then generating documentation if CI passes:
|
||||||
|
```bash
|
||||||
|
melos run ci && melos run docs:generate
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Upgrading dependencies for multiple packages and then running their tests:
|
||||||
|
```bash
|
||||||
|
MELOS_SCOPE="auth_package,user_package,core_package" melos run deps:upgrade:custom && MELOS_SCOPE="auth_package,user_package,core_package" melos run test:custom
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Generating code, running tests, and then checking if any files need to be formatted:
|
||||||
|
```bash
|
||||||
|
melos run generate && melos run test && melos run format -- -o none --set-exit-if-changed
|
||||||
|
```
|
||||||
|
|
||||||
|
This documentation provides a comprehensive guide to using the Melos configuration in the Protevus Platform project. It covers all aspects of the development lifecycle and should help team members effectively manage the monorepo structure.
|
|
@ -24,7 +24,7 @@ void main(List<String> arguments) {
|
||||||
.map((file) => file.path.split('/').last)
|
.map((file) => file.path.split('/').last)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
final combinedScripts = {};
|
final combinedScripts = <String, dynamic>{};
|
||||||
|
|
||||||
for (final file in scriptFiles) {
|
for (final file in scriptFiles) {
|
||||||
print('Processing $file');
|
print('Processing $file');
|
||||||
|
@ -37,13 +37,46 @@ void main(List<String> arguments) {
|
||||||
'Warning: $file does not contain expected script structure. Skipping.');
|
'Warning: $file does not contain expected script structure. Skipping.');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
combinedScripts.addAll(yaml['scripts']['_']);
|
combinedScripts.addAll(Map<String, dynamic>.from(yaml['scripts']['_']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Format multi-line commands
|
||||||
|
combinedScripts.forEach((key, value) {
|
||||||
|
if (value is Map<String, dynamic> &&
|
||||||
|
value['run'] is String &&
|
||||||
|
value['run'].contains('\n')) {
|
||||||
|
value['run'] =
|
||||||
|
'|\n ${value['run'].split('\n').map((line) => line.trim()).join('\n ')}';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
final outputYamlEditor = YamlEditor(baseContent);
|
final outputYamlEditor = YamlEditor(baseContent);
|
||||||
outputYamlEditor.update(['scripts'], combinedScripts);
|
outputYamlEditor.update(['scripts'], combinedScripts);
|
||||||
|
|
||||||
File(outputFile).writeAsStringSync(outputYamlEditor.toString());
|
// Format the YAML content
|
||||||
|
final formattedYaml = outputYamlEditor.toString().split('\n').map((line) {
|
||||||
|
if (line.trim().startsWith('- ')) {
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
return line.trimRight();
|
||||||
|
}).join('\n');
|
||||||
|
|
||||||
|
// Add comments at the top of the file
|
||||||
|
final outputContent = '''
|
||||||
|
# This file is part of the Protevus Platform.
|
||||||
|
#
|
||||||
|
# (C) Protevus <developers@protevus.com>
|
||||||
|
#
|
||||||
|
# For the full copyright and license information, please view the LICENSE
|
||||||
|
# file that was distributed with this source code.
|
||||||
|
|
||||||
|
# THIS FILE IS AUTOGENERATED BY MELOS. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# EDIT THE CORRESPONDING YAML FILES INSTEAD.
|
||||||
|
|
||||||
|
$formattedYaml
|
||||||
|
''';
|
||||||
|
|
||||||
|
File(outputFile).writeAsStringSync(outputContent);
|
||||||
print('Combined Melos configuration written to $outputFile');
|
print('Combined Melos configuration written to $outputFile');
|
||||||
} catch (e, stackTrace) {
|
} catch (e, stackTrace) {
|
||||||
print('Error: $e');
|
print('Error: $e');
|
||||||
|
|
23
helpers/print_melos_commands.dart
Normal file
23
helpers/print_melos_commands.dart
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import 'dart:io';
|
||||||
|
import 'package:yaml/yaml.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
final file = File('melos.yaml');
|
||||||
|
final yamlString = file.readAsStringSync();
|
||||||
|
final yamlMap = loadYaml(yamlString);
|
||||||
|
|
||||||
|
final scripts = yamlMap['scripts'] as YamlMap;
|
||||||
|
|
||||||
|
print('Available Melos commands:');
|
||||||
|
print('========================\n');
|
||||||
|
|
||||||
|
scripts.forEach((key, value) {
|
||||||
|
final description =
|
||||||
|
value['description'] as String? ?? 'No description provided';
|
||||||
|
print('${key.padRight(20)} $description');
|
||||||
|
});
|
||||||
|
|
||||||
|
print('\nUsage: melos run <command>');
|
||||||
|
print(
|
||||||
|
'For more details on a specific command, use: melos run <command> --help');
|
||||||
|
}
|
15
melos.yaml
15
melos.yaml
|
@ -1,3 +1,10 @@
|
||||||
|
# This file is part of the Protevus Platform.
|
||||||
|
#
|
||||||
|
# (C) Protevus <developers@protevus.com>
|
||||||
|
#
|
||||||
|
# For the full copyright and license information, please view the LICENSE
|
||||||
|
# file that was distributed with this source code.
|
||||||
|
|
||||||
# THIS FILE IS AUTOGENERATED BY MELOS. DO NOT EDIT THIS FILE DIRECTLY.
|
# THIS FILE IS AUTOGENERATED BY MELOS. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
# EDIT THE CORRESPONDING YAML FILES INSTEAD.
|
# EDIT THE CORRESPONDING YAML FILES INSTEAD.
|
||||||
|
|
||||||
|
@ -13,7 +20,7 @@ command:
|
||||||
message: "chore: Bump version to %v"
|
message: "chore: Bump version to %v"
|
||||||
branch: main
|
branch: main
|
||||||
workspaceChangelog: true
|
workspaceChangelog: true
|
||||||
|
|
||||||
ide:
|
ide:
|
||||||
intellij:
|
intellij:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
@ -88,4 +95,8 @@ scripts:
|
||||||
combine_config:
|
combine_config:
|
||||||
run: dart helpers/combine_melos_config.dart
|
run: dart helpers/combine_melos_config.dart
|
||||||
description: Combine Melos configuration files
|
description: Combine Melos configuration files
|
||||||
|
help:
|
||||||
|
run: dart helpers/print_melos_commands.dart
|
||||||
|
description: Display a formatted list of all available Melos commands
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue