Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
dustinmoris committed Dec 19, 2017
2 parents 8a09ae3 + b1df6e9 commit 38cabad
Show file tree
Hide file tree
Showing 12 changed files with 345 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto
72 changes: 70 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,70 @@
# giraffe-template
A dotnet new template for Giraffe web applications.
# Giraffe Template

![Giraffe](https://raw.githubusercontent.com/giraffe-fsharp/Giraffe/master/giraffe.png)

Giraffe web application template for the `dotnet new` command.

[![NuGet Info](https://buildstats.info/nuget/giraffe-template)](https://www.nuget.org/packages/giraffe-template/)

## Table of contents

- [Documentation](#documentation)
- [Installation](#installation)
- [Usage](#usage)
- [Updating the template](#updating-the-template)
- [More information](#more-information)
- [License](#license)

## Documentation

### Installation

The easiest way to install the Giraffe template is by running the following command in your terminal:

```
dotnet new -i "giraffe-template::*"
```

This will pull and install the [giraffe-template NuGet package](https://www.nuget.org/packages/giraffe-template/) in your .NET environment and make it available to subsequent `dotnet new` commands.

### Usage

After the template has been installed you can create a new Giraffe web application by simply running `dotnet new giraffe` in your terminal:

```
dotnet new giraffe
```

After successfully running this command you should be able to restore, build and run your Giraffe web application without any further doing:

##### Windows example:

```
mkdir GiraffeSampleApp
cd GiraffeSampleApp
dotnet new giraffe
dotnet restore
dotnet build
dotnet run
```


### Updating the template

Whenever there is a new version of the Giraffe template you can update it by re-running the [instructions from the installation](#installation).

You can also explicitly set the version when installing the template:

```
dotnet new -i "giraffe-template::0.9.0"
```

## More information

For more information about Giraffe, how to set up a development environment, contribution guidelines and more please visit the [main documentation](https://github.com/giraffe-fsharp/Giraffe#table-of-contents) page.

## License

[Apache 2.0](https://raw.githubusercontent.com/giraffe-fsharp/Giraffe.DotLiquid/master/LICENSE)
6 changes: 6 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Release Notes
=============

## 0.9.0 and before

Previous releases of this library were documented in [Giraffe's release notes](https://github.com/giraffe-fsharp/Giraffe/blob/master/RELEASE_NOTES.md).
24 changes: 24 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 0.1.0-{build}
image: Visual Studio 2017
environment:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
init:
- git config --global core.autocrlf true
build: off
build_script:
- ps: .\build.ps1
test: off
artifacts:
- path: '**\giraffe-template.*.nupkg'
name: Giraffe Template package
nuget:
account_feed: true
project_feed: false
deploy:
provider: NuGet
api_key:
secure: +XDgIu4Tmln7LKedNmQgMFnyKTxxuCKFRK3V5oKEfwZiakPXRd5C7OueEGBL50oh
skip_symbols: false
artifact: /.*\.nupkg/
on:
appveyor_repo_tag: true
69 changes: 69 additions & 0 deletions build.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# ----------------------------------------------
# Build script
# ----------------------------------------------

$ErrorActionPreference = "Stop"

# ----------------------------------------------
# Helper functions
# ----------------------------------------------

function Test-IsWindows
{
[environment]::OSVersion.Platform -ne "Unix"
}

function Invoke-Cmd ($cmd)
{
Write-Host $cmd -ForegroundColor DarkCyan
if (Test-IsWindows) { $cmd = "cmd.exe /C $cmd" }
Invoke-Expression -Command $cmd
if ($LastExitCode -ne 0) { Write-Error "An error occured when executing '$cmd'."; return }
}

function Test-Version ($project)
{
if ($env:APPVEYOR_REPO_TAG -eq $true)
{
Write-Host "Matching version against git tag..." -ForegroundColor Magenta

[xml] $xml = Get-Content $project
[string] $version = $xml.package.metadata.version
[string] $gitTag = $env:APPVEYOR_REPO_TAG_NAME

Write-Host "Project version: $version" -ForegroundColor Cyan
Write-Host "Git tag version: $gitTag" -ForegroundColor Cyan

if (!$gitTag.EndsWith($version))
{
Write-Error "Version and Git tag do not match."
}
}
}

function Update-AppVeyorBuildVersion ($project)
{
if ($env:APPVEYOR -eq $true)
{
Write-Host "Updating AppVeyor build version..." -ForegroundColor Magenta

[xml]$xml = Get-Content $project
$version = $xml.package.metadata.version
$buildVersion = "$version-$env:APPVEYOR_BUILD_NUMBER"
Write-Host "Setting AppVeyor build version to $buildVersion."
Update-AppveyorBuild -Version $buildVersion
}
}

# ----------------------------------------------
# Main
# ----------------------------------------------

$nuspec = ".\src\giraffe-template.nuspec"

Update-AppVeyorBuildVersion $nuspec
Test-Version $nuspec

Write-Host "Building giraffe-template package..." -ForegroundColor Magenta

Invoke-Cmd "nuget pack src/giraffe-template.nuspec"
2 changes: 2 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/
pwsh ./build.ps1
11 changes: 11 additions & 0 deletions src/content/.template.config/template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"identity": "Giraffe.Template",
"author": "David Sinclair and contributors",
"classifications": [ "Web", "Giraffe", "ASP.NET", "ASP.NET Core" ],
"name": "Giraffe Web App",
"tags": {
"language": "F#"
},
"shortName": "giraffe",
"sourceName": "_AppName"
}
7 changes: 7 additions & 0 deletions src/content/Models/Message.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace _AppName.Models

[<CLIMutable>]
type Message =
{
Text : string
}
74 changes: 74 additions & 0 deletions src/content/Program.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
module _AppName.App

open System
open System.IO
open System.Collections.Generic
open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Cors.Infrastructure
open Microsoft.AspNetCore.Hosting
open Microsoft.AspNetCore.Http
open Microsoft.Extensions.Logging
open Microsoft.Extensions.DependencyInjection
open Giraffe
open Giraffe.Razor
open _AppName.Models

// ---------------------------------
// Web app
// ---------------------------------

let webApp =
choose [
GET >=>
choose [
route "/" >=> razorHtmlView "Index" { Text = "Hello world, from Giraffe!" }
]
setStatusCode 404 >=> text "Not Found" ]

// ---------------------------------
// Error handler
// ---------------------------------

let errorHandler (ex : Exception) (logger : ILogger) =
logger.LogError(EventId(), ex, "An unhandled exception has occurred while executing the request.")
clearResponse >=> setStatusCode 500 >=> text ex.Message

// ---------------------------------
// Config and Main
// ---------------------------------

let configureCors (builder : CorsPolicyBuilder) =
builder.WithOrigins("http://localhost:8080").AllowAnyMethod().AllowAnyHeader() |> ignore

let configureApp (app : IApplicationBuilder) =
app.UseCors(configureCors)
.UseGiraffeErrorHandler(errorHandler)
.UseStaticFiles()
.UseGiraffe(webApp)

let configureServices (services : IServiceCollection) =
let sp = services.BuildServiceProvider()
let env = sp.GetService<IHostingEnvironment>()
let viewsFolderPath = Path.Combine(env.ContentRootPath, "Views")
services.AddRazorEngine viewsFolderPath |> ignore
services.AddCors() |> ignore

let configureLogging (builder : ILoggingBuilder) =
let filter (l : LogLevel) = l.Equals LogLevel.Error
builder.AddFilter(filter).AddConsole().AddDebug() |> ignore

[<EntryPoint>]
let main argv =
let contentRoot = Directory.GetCurrentDirectory()
let webRoot = Path.Combine(contentRoot, "WebRoot")
WebHostBuilder()
.UseKestrel()
.UseContentRoot(contentRoot)
.UseIISIntegration()
.UseWebRoot(webRoot)
.Configure(Action<IApplicationBuilder> configureApp)
.ConfigureServices(configureServices)
.ConfigureLogging(configureLogging)
.Build()
.Run()
0
13 changes: 13 additions & 0 deletions src/content/Views/Index.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@model _AppName.Models.Message

<!DOCTYPE html>
<html>
<head>
<title>Giraffe</title>
</head>
<body>
<div>
<h3>@Model.Text</h3>
</div>
</body>
</html>
47 changes: 47 additions & 0 deletions src/content/_AppName.fsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<DebugType>portable</DebugType>
<AssemblyName>_AppName</AssemblyName>
<OutputType>Exe</OutputType>
<PackageId>_AppName</PackageId>
<RuntimeFrameworkVersion>2.0.0</RuntimeFrameworkVersion>
<EnableDefaultContentItems>false</EnableDefaultContentItems>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.0.*" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.*" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.0.*" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.0.*" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.0.*"/>
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.*" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.0.*" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.*" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.*" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.*" />
<PackageReference Include="Giraffe" Version="0.1.0-beta-400" />
<PackageReference Include="Giraffe.Razor" Version="0.1.0-beta-110" />
</ItemGroup>

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>

<ItemGroup>
<Watch Include="**\*.cshtml" Exclude="bin\**\*" />
</ItemGroup>

<ItemGroup>
<Compile Include="Models\*.fs" />
<Compile Include="Program.fs" />
</ItemGroup>

<ItemGroup>
<Content Include="Views\*.cshtml;WebRoot\**\*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>

</Project>
21 changes: 21 additions & 0 deletions src/giraffe-template.nuspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>giraffe-template</id>
<version>0.9.0</version>
<title>Giraffe Template for dotnet-new</title>
<summary>A dotnet-new template for Giraffe web applications.</summary>
<description>A dotnet-new template for Giraffe web applications.</description>
<authors>David Sinclair</authors>
<owners>Dustin Moris Gorski</owners>
<projectUrl>https://github.com/dustinmoris/Giraffe</projectUrl>
<iconUrl>https://raw.githubusercontent.com/dustinmoris/giraffe/master/giraffe-64x64.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<releaseNotes></releaseNotes>
<language>en-GB</language>
<tags>giraffe web app razor pages micro service dotnet new template</tags>
<packageTypes>
<packageType name="Template" />
</packageTypes>
</metadata>
</package>

0 comments on commit 38cabad

Please sign in to comment.