Kurzerhand haben wir beschlossen, die wesentlichen Schritte auf unserem CI Server durch entsprechende Funktionalitäten von FAKE zu ersetzen, was neben durchgängiger Versionskontrolle nur noch Abhängigkeiten von NuGet Paketen hatte.
Und eine Bibliothek für die Compilierung von SASS in das FAKE Script einzubauen war selbst für mich als F# Neuling nicht das große Problem.
Die relevanten Teile des Build Scripts sehen so aus – vermutlich lässt sich noch einiges daran verbessern aber die Abhängigkeit zu "Fremdkörpern" ist hiermit verschwunden:
#r @"packages/FAKE/tools/FakeLib.dll"
#r @"packages/libsassnet/lib/net40/LibSass.x86.dll"
#r @"packages/libsassnet/lib/net40/libsassnet.dll"
open Fake
open System.IO
open LibSassNet
let compileScss files =
let compile file =
let filename ext = Path.ChangeExtension(file, ext)
let compiler = new LibSassNet.SassCompiler()
tracefn "Compiling %s..." file
let generateOutput outputStyle cssFile =
let mapFile = cssFile + ".map"
let result = compiler.CompileFile(file, outputStyle, mapFile)
File.WriteAllText(cssFile, result.CSS)
File.WriteAllText(mapFile, result.SourceMap)
generateOutput LibSassNet.OutputStyle.Compact (filename ".css")
generateOutput LibSassNet.OutputStyle.Compressed (filename ".min.css")
files
|> Seq.iter compile
// Targets (Auszug)
Target "Css" (fun _ ->
!! "**/Content/*.scss"
|> compileScss
)
...