nixin72 / from-template

Raco tool for cloning templates from the racket-templates org
MIT License
8 stars 4 forks source link

Figure out best way to make user-created templates available #16

Closed nixin72 closed 2 years ago

nixin72 commented 2 years ago

Having templates in the racket-templates organization is great, but there should be a way for users to create and publish their own templates. I think there's 3 main ways that we could do this:

  1. Create a repository that contains curated list of templates that anyone can make a PR to and submit their template. This is kind of similar to how Emacs' MELPA handles users adding packages.

  2. Use the existing Racket package repository, and pull down any packages tagged as templates.

  3. The hardest option, use Firebase or some alternative to host a database that people can submit packages to. This would give us a good amount of control over what gets put into the template archive while being able to automate checks and stuff that would let us flag or remove broken templates or something. It's mostly the same as option 1, but it would be automated.

I personally don't see 3 as being necessary - if we want to curate things, then I don't think we'll be getting so much traffic that option 1 would be unmanageable. If we don't want to care about curation, then 2 is probably the least work from us.

nixin72 commented 2 years ago

What are your thoughts @spdegabrielle?

spdegabrielle commented 2 years ago

I like all three ideas, but I think option 1 might be best to start with.

option 3 is too much for now.

nixin72 commented 2 years ago

I have no idea if there's an API that we could use either, but I figured I could go digging through the code for the wbesite and see how they query packages and if there's anything we can use.

Option 1 is easy though, and will make sure that templates aren't broken.

nixin72 commented 2 years ago

@spdegabrielle I've created https://github.com/racket-templates/racket-templates which defines a MELPA-like method of submitting templates. I've also changed this to work using the list of templates there instead of hard-coding to cloning repos from the racket-templates organization.

I suppose I should be working using PRs instead of pushing to master branch so I can refer to the PR with the work... I'll do that with future stuff, I've gotten too used to working on things on my own. Sorry about that.

spdegabrielle commented 2 years ago

you last comment on the pr made me think we should think about allowing tags, but I think it might be too soon to worry about and your data representation is easily extended.

for reference

Microsoft Windows [Version 10.0.19043.1348]
(c) Microsoft Corporation. All rights reserved.

C:\Users\stde>dotnet new
Template Name                                 Short Name           Language    Tags
--------------------------------------------  -------------------  ----------  ----------------------
Console Application                           console              [C#],F#,VB  Common/Console
Class library                                 classlib             [C#],F#,VB  Common/Library
WPF Application                               wpf                  [C#],VB     Common/WPF
WPF Class library                             wpflib               [C#],VB     Common/WPF
WPF Custom Control Library                    wpfcustomcontrollib  [C#],VB     Common/WPF
WPF User Control Library                      wpfusercontrollib    [C#],VB     Common/WPF
Windows Forms App                             winforms             [C#],VB     Common/WinForms
Windows Forms Control Library                 winformscontrollib   [C#],VB     Common/WinForms
Windows Forms Class Library                   winformslib          [C#],VB     Common/WinForms
Worker Service                                worker               [C#],F#     Common/Worker/Web
MSTest Test Project                           mstest               [C#],F#,VB  Test/MSTest
NUnit 3 Test Project                          nunit                [C#],F#,VB  Test/NUnit
NUnit 3 Test Item                             nunit-test           [C#],F#,VB  Test/NUnit
xUnit Test Project                            xunit                [C#],F#,VB  Test/xUnit
MVC ViewImports                               viewimports          [C#]        Web/ASP.NET
Razor Component                               razorcomponent       [C#]        Web/ASP.NET
MVC ViewStart                                 viewstart            [C#]        Web/ASP.NET
Razor Page                                    page                 [C#]        Web/ASP.NET
Blazor Server App                             blazorserver         [C#]        Web/Blazor
Blazor WebAssembly App                        blazorwasm           [C#]        Web/Blazor/WebAssembly
ASP.NET Core Empty                            web                  [C#],F#     Web/Empty
ASP.NET Core Web App (Model-View-Controller)  mvc                  [C#],F#     Web/MVC
ASP.NET Core Web App                          webapp               [C#]        Web/MVC/Razor Pages
ASP.NET Core with React.js and Redux          reactredux           [C#]        Web/MVC/SPA
ASP.NET Core with Angular                     angular              [C#]        Web/MVC/SPA
ASP.NET Core with React.js                    react                [C#]        Web/MVC/SPA
Razor Class Library                           razorclasslib        [C#]        Web/Razor/Library
ASP.NET Core Web API                          webapi               [C#],F#     Web/WebAPI
ASP.NET Core gRPC Service                     grpc                 [C#]        Web/gRPC
dotnet gitignore file                         gitignore                        Config
global.json file                              globaljson                       Config
NuGet Config                                  nugetconfig                      Config
Dotnet local tool manifest file               tool-manifest                    Config
Web Config                                    webconfig                        Config
Solution File                                 sln                              Solution
Protocol Buffer File                          proto                            Web/gRPC

Examples:
    dotnet new mvc --auth Individual
    dotnet new worker
    dotnet new --help
    dotnet new nunit --help

C:\Users\stde>
nixin72 commented 2 years ago

I'm not sure I think tags are necessary, and I think that if we start going into introducing a tagging system, we're just re-writing features of the Racket package index. Personally I think descriptions will be adequate for now. If we realize at some point that the system is growing more than expected, we can introduce tags or migrate to the package index I think.

spdegabrielle commented 2 years ago

Are we good to close this ticket?

nixin72 commented 2 years ago

Yes, I think it's good for now :+1:

spdegabrielle commented 2 years ago

I think we can close. Thank you for everything👏