-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathdefault.ps1
117 lines (89 loc) · 4.93 KB
/
default.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Thanks to AutoMapper for the inspiration for this build file.
$global:config = 'Release'
$framework = '4.0x86'
$product_name = "DynamicImage"
$fully_qualified_product_name = "SoundInTheory.DynamicImage"
properties {
$base_dir = resolve-path .
$source_dir = "$base_dir\src"
$build_dir = "$base_dir\build"
$package_dir_main = "$base_dir\package\DynamicImage"
$package_dir_mvc = "$base_dir\package\DynamicImage.Mvc"
$nunit_dir = "$base_dir\src\packages\NUnit.2.5.10.11092\tools"
$nuget_dir = "$base_dir\src\packages\NuGet.CommandLine.1.6.0\tools"
}
task Default -depends Clean, Compile, Test, PackageMain, PackageMvc
task Clean {
delete_directory "$package_dir_main"
delete_directory "$package_dir_mvc"
}
task Compile -depends Clean {
exec { msbuild /t:Clean /t:Build /p:Configuration=$config /v:q /nologo $source_dir\$fully_qualified_product_name.sln }
}
task Test -depends Compile {
$tests_dir = "$source_dir/$fully_qualified_product_name.Tests/bin/$config"
exec { & $nunit_dir\nunit-console-x86.exe $tests_dir/$fully_qualified_product_name.Tests.dll /nologo /nodots /xml=$tests_dir/$fully_qualified_product_name.Tests.TestResults.xml }
}
task PackageMain -depends Test {
create_directory "$package_dir_main"
# Copy NuSpec template files to package dir
cp "$build_dir\$product_name\$product_name.nuspec" "$package_dir_main"
copy_files "$build_dir\$product_name\content" "$package_dir_main\content" "*.*"
cp "$build_dir\LICENSE.txt" "$package_dir_main"
# Copy binary files to package dir
copy_files "$source_dir\$fully_qualified_product_name\bin\$config" "$package_dir_main\lib\NET40" "$fully_qualified_product_name.dll","$fully_qualified_product_name.pdb"
# Copy source files to package dir
copy_files "$source_dir\$fully_qualified_product_name" "$package_dir_main\src\$fully_qualified_product_name" "*.cs"
# Get the version number of main DLL
$full_version = [Reflection.Assembly]::LoadFile("$source_dir\$fully_qualified_product_name\bin\$config\$fully_qualified_product_name.dll").GetName().Version
$version = $full_version.Major.ToString() + "." + $full_version.Minor.ToString() + "." + $full_version.Build.ToString()
# Build the NuGet package
exec { & $nuget_dir\NuGet.exe pack -Symbols -Version "$version" -OutputDirectory "$package_dir_main" "$package_dir_main\$product_name.nuspec" }
# Push NuGet package to nuget.org
exec { & $nuget_dir\NuGet.exe push "$package_dir_main\$product_name.$version.nupkg" }
}
task PackageMvc -depends Test {
create_directory "$package_dir_mvc"
# Copy NuSpec template files to package dir
cp "$build_dir\$product_name.Mvc\$product_name.Mvc.nuspec" "$package_dir_mvc"
cp "$build_dir\LICENSE.txt" "$package_dir_mvc"
# Copy binary files to package dir
copy_files "$source_dir\$fully_qualified_product_name.Mvc\bin\$config" "$package_dir_mvc\lib\NET40" "$fully_qualified_product_name.Mvc.dll","$fully_qualified_product_name.Mvc.pdb"
# Copy source files to package dir
copy_files "$source_dir\$fully_qualified_product_name.Mvc" "$package_dir_mvc\src\$fully_qualified_product_name.Mvc" "*.cs"
# Get the version number of main DLL
$full_version = [Reflection.Assembly]::LoadFile("$source_dir\$fully_qualified_product_name.Mvc\bin\$config\$fully_qualified_product_name.Mvc.dll").GetName().Version
$version = $full_version.Major.ToString() + "." + $full_version.Minor.ToString() + "." + $full_version.Build.ToString()
# Update DynamicImage dependency in NuSpec file with version number
$doc = New-Object System.Xml.XmlDocument
$doc.Load("$package_dir_mvc\$product_name.Mvc.nuspec")
$dependency = $doc.SelectSingleNode("//dependency[@id = 'DynamicImage']")
$dependency.SetAttribute("version", $version)
$doc.Save("$package_dir_mvc\$product_name.Mvc.nuspec")
# Build the NuGet package
exec { & $nuget_dir\NuGet.exe pack -Symbols -Version "$version" -OutputDirectory "$package_dir_mvc" "$package_dir_mvc\$product_name.Mvc.nuspec" }
# Push NuGet package to nuget.org
exec { & $nuget_dir\NuGet.exe push "$package_dir_mvc\$product_name.Mvc.$version.nupkg" }
}
# Helper functions
function global:delete_directory($directory_name) {
rd $directory_name -recurse -force -ErrorAction SilentlyContinue | out-null
}
function global:create_directory($directory_name)
{
mkdir $directory_name -ErrorAction SilentlyContinue | out-null
}
function global:copy_files($source, $destination, $include = @(), $exclude = @()) {
create_directory $destination
$items = Get-ChildItem $source -Recurse -Include $include -Exclude $exclude
foreach ($item in $items) {
$dir = $item.DirectoryName.Replace($source,$destination)
$target = $item.FullName.Replace($source,$destination)
if (!(test-path($dir))) {
create_directory $dir
}
if (!(test-path($target))) {
cp -path $item.FullName -destination $target
}
}
}