7 Commits

Author SHA1 Message Date
c0b2ce44ad Changed build_cli trigger to push
All checks were successful
Build and publish MycroForge.CLI / build (push) Successful in 45s
Test MycroForge.CLI / test (push) Has been skipped
2024-10-24 11:56:48 +02:00
21f4e7765b Added uvicorn to API feature
All checks were successful
Test MycroForge.CLI / test (push) Has been skipped
2024-10-24 11:52:37 +02:00
33ba944f8a Updated scripts
All checks were successful
Test MycroForge.CLI / test (push) Successful in 2m23s
2024-10-13 18:12:04 +02:00
05051878f2 Cleaning up versions and workflows
All checks were successful
Test MycroForge.CLI / test (push) Has been skipped
2024-10-13 16:03:02 +02:00
3fff9c7dd0 Renamed build job to test 2024-10-13 15:34:33 +02:00
eda7992c23 Apply version 0.0.1
All checks were successful
Build and publish MycroForge.CLI / test (push) Successful in 1m41s
Test MycroForge.CLI / test (push) Has been skipped
2024-10-13 15:13:50 +02:00
457429f7ec Improved plugin feature
All checks were successful
Build and publish MycroForge.CLI / test (push) Has been skipped
Test MycroForge.CLI / test (push) Successful in 5m39s
2024-10-13 13:39:56 +02:00
18 changed files with 134 additions and 29 deletions

View File

@@ -1,9 +1,9 @@
name: Build and publish MycroForge.CLI name: Build and publish MycroForge.CLI
run-name: ${{ gitea.actor }} triggered a build for the MycroForge.CLI run-name: ${{ gitea.actor }} triggered a build for the MycroForge.CLI package
on: [ push ] on: [ push ]
jobs: jobs:
test: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: gitea.ref == 'refs/heads/main' if: gitea.ref == 'refs/heads/main'
steps: steps:
@@ -14,7 +14,8 @@ jobs:
- name: "Build and publish NuGet package" - name: "Build and publish NuGet package"
run: | run: |
# Build the NuGet package # Build the NuGet package
cd MycroForge.CLI && dotnet pack -v m cd MycroForge.CLI
dotnet pack -v m
# Add the NuGet source # Add the NuGet source
dotnet nuget add source --name devdisciples \ dotnet nuget add source --name devdisciples \

View File

@@ -0,0 +1,33 @@
name: Build and publish MycroForge.Core
run-name: ${{ gitea.actor }} triggered a build for the MycroForge.Core package
on: [ workflow_dispatch ]
jobs:
build:
runs-on: ubuntu-latest
if: gitea.ref == 'refs/heads/main'
steps:
- uses: https://github.com/actions/checkout@v4
- uses: https://github.com/actions/setup-dotnet@v4
with:
dotnet-version: '8.x'
- name: "Build and publish NuGet package"
run: |
# Build the NuGet package
cd MycroForge.Core
dotnet publish
dotnet pack -v m
# Add the NuGet source
dotnet nuget add source --name devdisciples \
--username ${{ secrets.NUGET_USER }} \
--password ${{ secrets.NUGET_PASS }} \
--store-password-in-clear-text \
https://git.devdisciples.com/api/packages/devdisciples/nuget/index.json
# Set the path to the package
VERSION=$(grep '<Version>' < MycroForge.Core.csproj | sed 's/.*<Version>\(.*\)<\/Version>/\1/' | xargs)
PACKAGE="bin/Release/MycroForge.Core.$VERSION.nupkg"
# Push the package
dotnet nuget push "$PACKAGE" --source devdisciples

View File

@@ -0,0 +1,33 @@
name: Build and publish MycroForge.PluginTemplate package
run-name: ${{ gitea.actor }} triggered a build for the MycroForge.PluginTemplate package
on: [ workflow_dispatch ]
jobs:
build:
runs-on: ubuntu-latest
if: gitea.ref == 'refs/heads/main'
steps:
- uses: https://github.com/actions/checkout@v4
- uses: https://github.com/actions/setup-dotnet@v4
with:
dotnet-version: '8.x'
- name: "Build and publish NuGet package"
run: |
# Build the NuGet package
cd MycroForge.PluginTemplate.Package
dotnet publish
dotnet pack -v m
# Add the NuGet source
dotnet nuget add source --name devdisciples \
--username ${{ secrets.NUGET_USER }} \
--password ${{ secrets.NUGET_PASS }} \
--store-password-in-clear-text \
https://git.devdisciples.com/api/packages/devdisciples/nuget/index.json
# Set the path to the package
VERSION=$(grep '<PackageVersion>' < MycroForge.PluginTemplate.Package.csproj | sed 's/.*<PackageVersion>\(.*\)<\/PackageVersion>/\1/' | xargs)
PACKAGE="bin/Release/MycroForge.PluginTemplate.Package.$VERSION.nupkg"
# Push the package
dotnet nuget push "$PACKAGE" --source devdisciples

View File

@@ -10,21 +10,29 @@ public partial class MycroForge
{ {
public class Init : Command, ISubCommandOf<Plugin> public class Init : Command, ISubCommandOf<Plugin>
{ {
private static readonly Argument<string> NameArgument = private static readonly Argument<string> NamespaceArgument =
new(name: "name", description: "The name of your project"); new(name: "namespace", description: "The namespace of your project");
private static readonly Argument<string> ClassArgument =
new(name: "class", description: "The class name of the generated command");
private static readonly Argument<string> CommandArgument =
new(name: "command", description: "The command name that will be added to 'm4g'");
private readonly ProjectContext _context; private readonly ProjectContext _context;
public Init(ProjectContext context) : base("init", "Initialize a basic plugin project") public Init(ProjectContext context) : base("init", "Initialize a basic plugin project")
{ {
_context = context; _context = context;
AddArgument(NameArgument); AddArgument(NamespaceArgument);
this.SetHandler(ExecuteAsync, NameArgument); AddArgument(ClassArgument);
AddArgument(CommandArgument);
this.SetHandler(ExecuteAsync, NamespaceArgument, ClassArgument, CommandArgument);
} }
private async Task ExecuteAsync(string name) private async Task ExecuteAsync(string @namespace, string @class, string command)
{ {
await _context.Bash($"dotnet new m4gp -n {name}"); await _context.Bash($"dotnet new m4gp -n {@namespace} --class {@class} --command {command}");
} }
} }
} }

View File

@@ -44,9 +44,13 @@ public partial class MycroForge
var assemblyName = GetAssemblyName(); var assemblyName = GetAssemblyName();
var pluginInstallPath = Path.Join(Plugins.RootDirectory, assemblyName); var pluginInstallPath = Path.Join(Plugins.RootDirectory, assemblyName);
var platform = target.ToString().Dasherize(); var platform = target.ToString().Dasherize();
await _context.Bash($"dotnet publish -c Release -r {platform} --output {pluginInstallPath}"); var exitCode = await _context.Bash(
Console.WriteLine($"Successfully installed plugin {assemblyName}"); $"dotnet publish -c Release -r {platform} --output {pluginInstallPath}"
);
Console.WriteLine(exitCode == 0
? $"Successfully installed plugin {assemblyName}"
: $"Could not install {assemblyName}, process exited with code {exitCode}.");
} }
private string GetAssemblyName() private string GetAssemblyName()

View File

@@ -52,7 +52,7 @@ public sealed partial class Api : IFeature
await context.Bash( await context.Bash(
"source .venv/bin/activate", "source .venv/bin/activate",
"python3 -m pip install fastapi", "python3 -m pip install fastapi uvicorn",
"python3 -m pip freeze > requirements.txt" "python3 -m pip freeze > requirements.txt"
); );

View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Version>1.0.1</Version> <Version>0.0.1</Version>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>

0
MycroForge.CLI/scripts/publish-tool.sh Normal file → Executable file
View File

View File

@@ -6,7 +6,7 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<PackageId>MycroForge.Core</PackageId> <PackageId>MycroForge.Core</PackageId>
<Description>The MycroForge core package</Description> <Description>The MycroForge core package</Description>
<Version>1.0.0</Version> <Version>0.0.1</Version>
<Authors>Donné Napo</Authors> <Authors>Donné Napo</Authors>
<Company>Dev Disciples</Company> <Company>Dev Disciples</Company>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

View File

@@ -70,7 +70,7 @@ public class ProjectContext
Console.WriteLine($"Modified file {path}"); Console.WriteLine($"Modified file {path}");
} }
public async Task Bash(params string[] script) public async Task<int> Bash(params string[] script)
{ {
var info = new ProcessStartInfo var info = new ProcessStartInfo
{ {
@@ -112,6 +112,8 @@ public class ProjectContext
await process.WaitForExitAsync(); await process.WaitForExitAsync();
Environment.ExitCode = process.ExitCode; Environment.ExitCode = process.ExitCode;
return process.ExitCode;
} }
public async Task SaveConfig(ProjectConfig config) public async Task SaveConfig(ProjectConfig config)

7
MycroForge.Core/scripts/publish-nuget.sh Normal file → Executable file
View File

@@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
dotnet build -r Release VERSION=$(grep '<Version>' < MycroForge.Core.csproj | sed 's/.*<Version>\(.*\)<\/Version>/\1/' | tr -d '[:space:]')
dotnet nuget push --source devdisciples bin/Release/MycroForge.Core.1.0.0.nupkg dotnet build -r Releasedo
dotnet nuget push --source devdisciples "bin/Release/MycroForge.Core.$VERSION.nupkg"

View File

@@ -4,7 +4,7 @@
<!-- The package metadata. Fill in the properties marked as TODO below --> <!-- The package metadata. Fill in the properties marked as TODO below -->
<!-- Follow the instructions on https://learn.microsoft.com/nuget/create-packages/package-authoring-best-practices --> <!-- Follow the instructions on https://learn.microsoft.com/nuget/create-packages/package-authoring-best-practices -->
<PackageId>MycroForge.PluginTemplate.Package</PackageId> <PackageId>MycroForge.PluginTemplate.Package</PackageId>
<PackageVersion>1.0</PackageVersion> <PackageVersion>0.0.1</PackageVersion>
<Title>A template for generating MycroForge plugins</Title> <Title>A template for generating MycroForge plugins</Title>
<Authors>Donné Napo</Authors> <Authors>Donné Napo</Authors>
<Description>Template to use when creating a plugin for the MycroForge CLI.</Description> <Description>Template to use when creating a plugin for the MycroForge CLI.</Description>

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/env bash
rm -rf templates/MycroForge.PluginTemplate rm -rf templates/MycroForge.PluginTemplate
cp -R ../MycroForge.PluginTemplate templates/MycroForge.PluginTemplate cp -R ../MycroForge.PluginTemplate templates/MycroForge.PluginTemplate

View File

@@ -0,0 +1,12 @@
#!/bin/env bash
rm -rf templates/MycroForge.PluginTemplate
cp -R ../MycroForge.PluginTemplate templates/MycroForge.PluginTemplate
dotnet pack
# Set the path to the package
VERSION=$(grep '<PackageVersion>' < MycroForge.PluginTemplate.Package.csproj | sed 's/.*<PackageVersion>\(.*\)<\/PackageVersion>/\1/' | tr -d '[:space:]')
PACKAGE="bin/Release/MycroForge.PluginTemplate.Package.$VERSION.nupkg"
# Push the package
dotnet nuget push "$PACKAGE" --source devdisciples

View File

@@ -17,5 +17,16 @@
"language": "C#", "language": "C#",
"type": "project" "type": "project"
}, },
"preferNameDirectory": true "preferNameDirectory": true,
"symbols": {
"class": {
"type": "parameter",
"replaces": "ExampleCommand",
"fileRename": "ExampleCommand"
},
"command": {
"type": "parameter",
"replaces": "example"
}
}
} }

View File

@@ -5,7 +5,7 @@ using RootCommand = MycroForge.Core.RootCommand;
namespace MycroForge.PluginTemplate; namespace MycroForge.PluginTemplate;
public class HelloWorldCommand : Command, ISubCommandOf<RootCommand> public class ExampleCommand : Command, ISubCommandOf<RootCommand>
{ {
private readonly Argument<string> NameArgument = private readonly Argument<string> NameArgument =
new(name: "name", description: "The name of the person to greet"); new(name: "name", description: "The name of the person to greet");
@@ -15,8 +15,8 @@ public class HelloWorldCommand : Command, ISubCommandOf<RootCommand>
private readonly ProjectContext _context; private readonly ProjectContext _context;
public HelloWorldCommand(ProjectContext context) : public ExampleCommand(ProjectContext context) :
base("hello", "An example command generated by dotnet new using the m4gp template") base("example", "A basic command plugin generated by the 'm4g plugin init' command")
{ {
_context = context; _context = context;
AddArgument(NameArgument); AddArgument(NameArgument);
@@ -28,9 +28,9 @@ public class HelloWorldCommand : Command, ISubCommandOf<RootCommand>
{ {
name = allCaps ? name.ToUpper() : name; name = allCaps ? name.ToUpper() : name;
await _context.CreateFile("hello_world.txt", await _context.CreateFile("example.txt",
$"Hello {name}!", $"Hello {name}!",
"This file was generated by your custom command!" "This file was generated by the 'm4g example' command!"
); );
} }
} }

View File

@@ -4,12 +4,12 @@ using RootCommand = MycroForge.Core.RootCommand;
namespace MycroForge.PluginTemplate; namespace MycroForge.PluginTemplate;
public class HelloWorldCommandPlugin : ICommandPlugin public class ExampleCommandPlugin : ICommandPlugin
{ {
public string Name => "MycroForge.PluginTemplate"; public string Name => "MycroForge.PluginTemplate";
public void RegisterServices(IServiceCollection services) public void RegisterServices(IServiceCollection services)
{ {
services.AddScoped<ISubCommandOf<RootCommand>, HelloWorldCommand>(); services.AddScoped<ISubCommandOf<RootCommand>, ExampleCommand>();
} }
} }

View File

@@ -11,7 +11,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="MycroForge.Core" Version="1.0.0" /> <PackageReference Include="MycroForge.Core" Version="0.0.1" />
</ItemGroup> </ItemGroup>
</Project> </Project>