Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix add exercise script #1283

Merged
merged 2 commits into from
Oct 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/new_exercise.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
There is a new exercise, [EXERCISE-NAME](https://github.com/exercism/problem-specifications/blob/master/exercises/EXERCISE-NAME/description.md), which data can be found here: https://github.com/exercism/problem-specifications/tree/master/exercises/EXERCISE-NAME

To implement the `EXERCISE-NAME` exercise, first run the `./add-new-exercise EXERCISE-NAME` script that will create and update the files required for the new exercise. After this script has run, it will have done the following:
To implement the `EXERCISE-NAME` exercise, first run the `./add-practice-exercise EXERCISE-NAME` script that will create and update the files required for the new exercise. After this script has run, it will have done the following:

- Added a new entry for the exercise to the [config.json](https://github.com/exercism/fsharp/blob/master/config.json) file.
- Add a default generator to the [generator/Generators.fs] file, which is used to automatically convert the [canonical data](https://github.com/exercism/problem-specifications/blob/master/exercises/EXERCISE-NAME/canonical-data.json) to a test file. For more information on how this works, check the [generators docs](https://github.com/exercism/fsharp/blob/master/docs/GENERATORS.md).
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
!bin/fetch-configlet
!bin/fetch-configlet.ps1
bin/
build/
obj/
Expand All @@ -17,3 +15,5 @@ paket-files
*.DotSettings.user
BenchmarkDotNet.Artifacts/
BenchmarkDotNet.Bin/
!/bin
/bin/configlet
110 changes: 0 additions & 110 deletions add-new-exercise.ps1

This file was deleted.

67 changes: 67 additions & 0 deletions add-practice-exercise.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<#
.SYNOPSIS
Add a new exercise.
.DESCRIPTION
Add the files need to add a new exercise.
.PARAMETER Exercise
The slug of the exercise to add.
.PARAMETER Author
The author of the exercise.
.PARAMETER Difficulty
The difficulty of the exercise on a scale from 1 to 10 (optional, default: 1).
.EXAMPLE
The example below will add the "acronym" exercise
PS C:\> ./add-practice-exercise.ps1 acronym
#>

[CmdletBinding(SupportsShouldProcess)]
param (
[Parameter(Position = 0, Mandatory = $true)][string]$Exercise,
[Parameter(Mandatory = $true)][string]$Author,
[Parameter()][int]$Difficulty = 1
)

$ErrorActionPreference = "Stop"
$PSNativeCommandUseErrorActionPreference = $true

# Use configlet to create the exercise
& bin/fetch-configlet
& bin/configlet create --practice-exercise $Exercise --difficulty $Difficulty --author $Author

# Create project
$exerciseName = (Get-Culture).TextInfo.ToTitleCase($Exercise).Replace("-", "")
$exerciseDir = "exercises/practice/${Exercise}"
$project = "${exerciseDir}/${ExerciseName}.fsproj"
& dotnet new xunit --force -lang "F#" --target-framework-override net8.0 -o $exerciseDir -n $ExerciseName
& dotnet sln exercises/Exercises.sln add $project

# Update project packages
& dotnet remove $project package coverlet.collector
& dotnet add $project package Exercism.Tests --version 0.1.0-beta1
& dotnet add $project package xunit.runner.visualstudio --version 2.4.3
& dotnet add $project package xunit --version 2.4.1
& dotnet add $project package Microsoft.NET.Test.Sdk --version 16.8.3

# Add tools
& dotnet new tool-manifest -o $exerciseDir
& dotnet tool install --tool-manifest "${exerciseDir}/.config/dotnet-tools.json" fantomas-tool

# Remove and update files
Remove-Item -Path "${exerciseDir}/Program.fs"
Remove-Item -Path "${exerciseDir}/Tests.fs"
Set-Content -Path "${exerciseDir}/${exerciseName}.fs" -Value "module ${exerciseName}"
Set-Content -Path "${exerciseDir}/.meta/Example.fs" -Value "module ${exerciseName}"

# Fix the includes
[xml]$proj = Get-Content $project
$proj.Project.ItemGroup[0].Compile[0].Include = "${exerciseName}.fs"
$proj.Project.ItemGroup[0].Compile[1].Include = "${exerciseName}Tests.fs"
$proj.Save($project)

# Add and run generator (this will update the tests file)
Add-Content -Path generators/Generators.fs -Value @"

type ${exerciseName}() =
inherit ExerciseGenerator()
"@
& dotnet run --project generators --exercise $Exercise