trackler 2.0.8.18 → 2.0.8.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/common/.gitignore +1 -0
  3. data/common/.travis.yml +5 -8
  4. data/common/README.md +18 -5
  5. data/common/exercises/grep/canonical-data.json +290 -269
  6. data/common/exercises/phone-number/canonical-data.json +2 -2
  7. data/common/exercises/pov/canonical-data.json +2 -5
  8. data/common/exercises/roman-numerals/canonical-data.json +112 -74
  9. data/common/exercises/tournament/canonical-data.json +86 -85
  10. data/common/exercises/two-bucket/canonical-data.json +55 -47
  11. data/common/package.json +16 -0
  12. data/common/yarn.lock +195 -0
  13. data/lib/trackler/version.rb +1 -1
  14. data/tracks/c/docs/LEARNING.md +1 -1
  15. data/tracks/c/exercises/space-age/src/example.c +15 -47
  16. data/tracks/c/exercises/space-age/src/example.h +12 -8
  17. data/tracks/c/exercises/space-age/test/test_space_age.c +8 -8
  18. data/tracks/ceylon/docs/TESTS.md +5 -2
  19. data/tracks/ceylon/exercises/TRACK_HINTS.md +5 -2
  20. data/tracks/csharp/.gitignore +0 -4
  21. data/tracks/csharp/.travis.yml +9 -20
  22. data/tracks/csharp/appveyor.yml +2 -4
  23. data/tracks/csharp/build.cake +95 -0
  24. data/tracks/csharp/build.ps1 +189 -0
  25. data/tracks/csharp/build.sh +99 -31
  26. data/tracks/csharp/circle.yml +3 -12
  27. data/tracks/delphi/config.json +8 -0
  28. data/tracks/delphi/exercises/minesweeper/MineSweeper.dpr +60 -0
  29. data/tracks/delphi/exercises/minesweeper/uMineSweeperExample.pas +70 -0
  30. data/tracks/delphi/exercises/minesweeper/uMineSweeperTest.pas +270 -0
  31. data/tracks/dlang/config.json +86 -31
  32. data/tracks/elixir/config.json +7 -0
  33. data/tracks/elixir/exercises/rotational-cipher/example.exs +35 -0
  34. data/tracks/elixir/exercises/rotational-cipher/rotational_cipher.exs +13 -0
  35. data/tracks/elixir/exercises/rotational-cipher/rotational_cipher_test.exs +80 -0
  36. data/tracks/go/exercises/raindrops/raindrops_test.go +4 -1
  37. data/tracks/go/exercises/react/react_test.go +6 -8
  38. data/tracks/go/exercises/rna-transcription/rna_transcription_test.go +4 -1
  39. data/tracks/go/exercises/robot-simulator/robot_simulator_test.go +5 -2
  40. data/tracks/haskell/exercises/allergies/src/Allergies.hs +2 -2
  41. data/tracks/haskell/exercises/atbash-cipher/src/Atbash.hs +2 -2
  42. data/tracks/haskell/exercises/bank-account/src/BankAccount.hs +3 -3
  43. data/tracks/haskell/exercises/binary-search-tree/src/BST.hs +7 -7
  44. data/tracks/haskell/exercises/bowling/src/Bowling.hs +1 -1
  45. data/tracks/haskell/exercises/clock/src/Clock.hs +4 -4
  46. data/tracks/haskell/exercises/connect/src/Connect.hs +1 -1
  47. data/tracks/haskell/exercises/crypto-square/src/CryptoSquare.hs +1 -1
  48. data/tracks/haskell/exercises/custom-set/src/CustomSet.hs +12 -12
  49. data/tracks/haskell/exercises/difference-of-squares/src/Squares.hs +3 -3
  50. data/tracks/haskell/exercises/etl/src/ETL.hs +1 -1
  51. data/tracks/haskell/exercises/forth/src/Forth.hs +2 -2
  52. data/tracks/haskell/exercises/go-counting/src/Counting.hs +2 -2
  53. data/tracks/haskell/exercises/kindergarten-garden/src/Garden.hs +3 -3
  54. data/tracks/haskell/exercises/largest-series-product/src/Series.hs +1 -1
  55. data/tracks/haskell/exercises/lens-person/src/Person.hs +4 -4
  56. data/tracks/julia/.travis.yml +3 -2
  57. data/tracks/ocaml/exercises/all-your-base/test.ml +2 -2
  58. data/tracks/ocaml/exercises/beer-song/test.ml +25 -24
  59. data/tracks/ocaml/exercises/phone-number/test.ml +22 -22
  60. data/tracks/ocaml/exercises/run-length-encoding/test.ml +5 -5
  61. data/tracks/ocaml/exercises/word-count/test.ml +1 -1
  62. data/tracks/ocaml/tools/test-generator/templates/beer-song/template.ml +20 -1
  63. data/tracks/purescript/config.json +7 -0
  64. data/tracks/purescript/exercises/word-count/bower.json +17 -0
  65. data/tracks/purescript/exercises/word-count/examples/src/WordCount.purs +31 -0
  66. data/tracks/purescript/exercises/word-count/src/WordCount.purs +3 -0
  67. data/tracks/purescript/exercises/word-count/test/Main.purs +89 -0
  68. data/tracks/python/exercises/accumulate/accumulate.py +2 -0
  69. data/tracks/python/exercises/acronym/acronym.py +2 -0
  70. data/tracks/python/exercises/allergies/allergies.py +3 -0
  71. data/tracks/python/exercises/allergies/example.py +1 -1
  72. data/tracks/python/exercises/anagram/anagram.py +2 -0
  73. data/tracks/python/exercises/atbash-cipher/atbash_cipher.py +6 -0
  74. data/tracks/python/exercises/beer-song/beer_song.py +6 -0
  75. data/tracks/python/exercises/binary-search/binary_search.py +2 -0
  76. data/tracks/python/exercises/binary/binary.py +2 -0
  77. data/tracks/python/exercises/bob/bob.py +2 -8
  78. data/tracks/python/exercises/bracket-push/bracket_push.py +2 -0
  79. data/tracks/python/exercises/circular-buffer/circular_buffer.py +11 -0
  80. data/tracks/python/exercises/clock/clock.py +3 -0
  81. data/tracks/python/exercises/clock/example.py +1 -1
  82. data/tracks/python/exercises/crypto-square/crypto_square.py +2 -0
  83. data/tracks/python/exercises/diamond/diamond.py +2 -0
  84. data/tracks/python/exercises/difference-of-squares/difference_of_squares.py +10 -0
  85. data/tracks/python/exercises/etl/etl.py +2 -0
  86. data/tracks/python/exercises/flatten-array/flatten_array.py +2 -0
  87. data/tracks/python/exercises/gigasecond/gigasecond.py +2 -0
  88. data/tracks/python/exercises/grade-school/grade_school.py +3 -0
  89. data/tracks/python/exercises/grains/grains.py +6 -0
  90. data/tracks/python/exercises/hamming/hamming.py +2 -0
  91. data/tracks/python/exercises/hello-world/hello_world.py +2 -7
  92. data/tracks/python/exercises/hexadecimal/hexadecimal.py +2 -0
  93. data/tracks/python/exercises/house/house.py +6 -0
  94. data/tracks/python/exercises/kindergarten-garden/kindergarten_garden.py +3 -0
  95. data/tracks/python/exercises/largest-series-product/largest_series_product.py +2 -0
  96. data/tracks/python/exercises/leap/leap.py +2 -0
  97. data/tracks/python/exercises/linked-list/linked_list.py +2 -8
  98. data/tracks/python/exercises/list-ops/list_ops.py +18 -22
  99. data/tracks/python/exercises/luhn/luhn.py +3 -0
  100. data/tracks/python/exercises/matrix/matrix.py +3 -0
  101. data/tracks/python/exercises/meetup/meetup.py +2 -0
  102. data/tracks/python/exercises/minesweeper/minesweeper.py +2 -0
  103. data/tracks/python/exercises/nth-prime/nth_prime.py +2 -0
  104. data/tracks/python/exercises/nucleotide-count/nucleotide_count.py +6 -0
  105. data/tracks/python/exercises/ocr-numbers/ocr_numbers.py +6 -0
  106. data/tracks/python/exercises/ocr-numbers/{ocr_test.py → ocr_numbers_test.py} +0 -0
  107. data/tracks/python/exercises/octal/octal.py +2 -0
  108. data/tracks/python/exercises/palindrome-products/palindrome_products.py +6 -0
  109. data/tracks/python/exercises/pangram/pangram.py +2 -0
  110. data/tracks/python/exercises/pascals-triangle/pascals_triangle.py +10 -0
  111. data/tracks/python/exercises/perfect-numbers/perfect_numbers.py +6 -0
  112. data/tracks/python/exercises/phone-number/phone_number.py +3 -0
  113. data/tracks/python/exercises/pig-latin/pig_latin.py +2 -0
  114. data/tracks/python/exercises/point-mutations/point_mutations.py +2 -0
  115. data/tracks/python/exercises/poker/poker.py +2 -0
  116. data/tracks/python/exercises/prime-factors/prime_factors.py +2 -0
  117. data/tracks/python/exercises/proverb/proverb.py +2 -0
  118. data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet.py +10 -0
  119. data/tracks/python/exercises/queen-attack/queen_attack.py +6 -0
  120. data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher.py +10 -0
  121. data/tracks/python/exercises/raindrops/raindrops.py +2 -0
  122. data/tracks/python/exercises/rectangles/example.py +1 -1
  123. data/tracks/python/exercises/rectangles/rectangles.py +2 -0
  124. data/tracks/python/exercises/rectangles/{rectangles_count_test.py → rectangles_test.py} +0 -0
  125. data/tracks/python/exercises/rna-transcription/rna_transcription.py +2 -0
  126. data/tracks/python/exercises/robot-name/robot_name.py +3 -0
  127. data/tracks/python/exercises/robot-simulator/robot_simulator.py +3 -0
  128. data/tracks/python/exercises/roman-numerals/roman_numerals.py +2 -0
  129. data/tracks/python/exercises/run-length-encoding/run_length_encoding.py +6 -0
  130. data/tracks/python/exercises/run-length-encoding/{run_length_test.py → run_length_encoding_test.py} +1 -1
  131. data/tracks/python/exercises/saddle-points/saddle_points.py +2 -0
  132. data/tracks/python/exercises/say/example.py +1 -1
  133. data/tracks/python/exercises/say/say.py +2 -0
  134. data/tracks/python/exercises/say/say_test.py +3 -0
  135. data/tracks/python/exercises/scrabble-score/scrabble_score.py +2 -0
  136. data/tracks/python/exercises/secret-handshake/secret_handshake.py +6 -0
  137. data/tracks/python/exercises/secret-handshake/{handshake_test.py → secret_handshake_test.py} +0 -0
  138. data/tracks/python/exercises/series/series.py +2 -0
  139. data/tracks/python/exercises/sieve/sieve.py +2 -0
  140. data/tracks/python/exercises/simple-cipher/example.py +1 -1
  141. data/tracks/python/exercises/simple-cipher/simple_cipher.py +8 -0
  142. data/tracks/python/exercises/space-age/space_age.py +3 -0
  143. data/tracks/python/exercises/strain/strain.py +6 -0
  144. data/tracks/python/exercises/sublist/sublist.py +2 -0
  145. data/tracks/python/exercises/sum-of-multiples/sum_of_multiples.py +2 -0
  146. data/tracks/python/exercises/triangle/triangle.py +7 -0
  147. data/tracks/python/exercises/trinary/trinary.py +2 -0
  148. data/tracks/python/exercises/twelve-days/twelve_days.py +10 -0
  149. data/tracks/python/exercises/word-count/word_count.py +2 -0
  150. data/tracks/python/exercises/wordy/wordy.py +2 -0
  151. data/tracks/python/exercises/zebra-puzzle/zebra_puzzle.py +2 -0
  152. data/tracks/ruby/exercises/beer-song/.meta/.version +1 -0
  153. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +62 -36
  154. data/tracks/ruby/exercises/beer-song/example.rb +1 -5
  155. data/tracks/ruby/exercises/beer-song/example.tt +22 -0
  156. data/tracks/ruby/lib/beer_song_cases.rb +43 -0
  157. data/tracks/swift/exercises/matrix/Tests/MatrixTests/MatrixTests.swift +1 -1
  158. metadata +94 -13
  159. data/common/bin/jsonlint +0 -27
  160. data/tracks/csharp/.paket/paket.bootstrapper.exe +0 -0
  161. data/tracks/csharp/Zipper.cs +0 -137
  162. data/tracks/csharp/build.cmd +0 -14
  163. data/tracks/csharp/build.fsx +0 -78
  164. data/tracks/csharp/paket.dependencies +0 -2
  165. data/tracks/csharp/paket.lock +0 -3
@@ -1,8 +1,6 @@
1
- init:
2
- - ps: (New-Object Net.WebClient).DownloadFile('https://download.microsoft.com/download/5/F/E/5FEB7E95-C643-48D5-8329-9D2C63676CE8/dotnet-dev-win-x64.1.0.0-rc4-004771.exe', "c:/dotnet-install.exe")
3
- - cmd: c:\dotnet-install.exe /install /quiet
1
+ image: Visual Studio 2017
4
2
  build_script:
5
- - ps: .\build.cmd
3
+ - ps: ./build.ps1
6
4
  environment:
7
5
  DOTNET_CLI_TELEMETRY_OPTOUT: true
8
6
  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
@@ -0,0 +1,95 @@
1
+ #addin "Cake.FileHelpers"
2
+
3
+ var target = Argument("target", "Default");
4
+
5
+ var sourceDir = "./exercises";
6
+ var buildDir = "./build";
7
+
8
+ var defaultSln = buildDir + "/Exercises.Default.sln";
9
+ var allSln = buildDir + "/Exercises.All.sln";
10
+ var refactoringSln = buildDir + "/Exercises.Refactoring.sln";
11
+
12
+ var dotNetCoreBuildSettings = new DotNetCoreBuildSettings { NoIncremental = true };
13
+
14
+ Task("Clean")
15
+ .Does(() => {
16
+ CleanDirectory(buildDir);
17
+ });
18
+
19
+ // Copy everything to build so we make no changes in the actual files.
20
+ Task("CopyExercises")
21
+ .IsDependentOn("Clean")
22
+ .Does(() => {
23
+ CopyDirectory(sourceDir, buildDir);
24
+ });
25
+
26
+ Task("RestoreNugetPackages")
27
+ .IsDependentOn("CopyExercises")
28
+ .Does(() => {
29
+ DotNetCoreRestore(allSln);
30
+ });
31
+
32
+ Task("BuildStubImplementations")
33
+ .IsDependentOn("RestoreNugetPackages")
34
+ .Does(() => {
35
+ DotNetCoreBuild(defaultSln, dotNetCoreBuildSettings);
36
+ });
37
+
38
+ Task("EnableAllTests")
39
+ .IsDependentOn("BuildStubImplementations")
40
+ .Does(() => {
41
+ var testFiles = buildDir + "/*/*Test.cs";
42
+ var skipRegex = @"Skip\s*=\s*""Remove to run test""";
43
+ ReplaceRegexInFiles(testFiles, skipRegex, "");
44
+ });
45
+
46
+ Task("TestRefactoringProjects")
47
+ .IsDependentOn("EnableAllTests")
48
+ .Does(() => {
49
+ DotNetCoreBuild(refactoringSln, dotNetCoreBuildSettings);
50
+
51
+ // These projects have a working default implementation, and have
52
+ // all the tests enabled. These should pass without any changes.
53
+ var refactoringProjects =
54
+ GetFiles(buildDir + "/*/TreeBuilding.csproj")
55
+ + GetFiles(buildDir + "/*/Ledger.csproj")
56
+ + GetFiles(buildDir + "/*/Markdown.csproj");
57
+
58
+ foreach (var refactoringProject in refactoringProjects) {
59
+ DotNetCoreTest(refactoringProject.FullPath);
60
+ }
61
+ });
62
+
63
+ Task("ReplaceStubWithExample")
64
+ .IsDependentOn("TestRefactoringProjects")
65
+ .Does(() => {
66
+ var allProjects = GetFiles(buildDir + "/*/*.csproj");
67
+
68
+ foreach (var project in allProjects) {
69
+ var projectDir = project.GetDirectory();
70
+ var projectName = project.GetFilenameWithoutExtension();
71
+ var stub = projectDir.GetFilePath(projectName).AppendExtension("cs");
72
+ var example = projectDir.GetFilePath("Example.cs");
73
+
74
+ DeleteFile(stub);
75
+ MoveFile(example, stub);
76
+ }
77
+ });
78
+
79
+ Task("TestUsingExampleImplementation")
80
+ .IsDependentOn("ReplaceStubWithExample")
81
+ .Does(() => {
82
+ DotNetCoreBuild(allSln, dotNetCoreBuildSettings);
83
+
84
+ var allProjects = GetFiles(buildDir + "/*/*.csproj");
85
+
86
+ foreach (var project in allProjects) {
87
+ DotNetCoreTest(project.FullPath);
88
+ }
89
+ });
90
+
91
+ Task("Default")
92
+ .IsDependentOn("TestUsingExampleImplementation")
93
+ .Does(() => { });
94
+
95
+ RunTarget(target);
@@ -0,0 +1,189 @@
1
+ ##########################################################################
2
+ # This is the Cake bootstrapper script for PowerShell.
3
+ # This file was downloaded from https://github.com/cake-build/resources
4
+ # Feel free to change this file to fit your needs.
5
+ ##########################################################################
6
+
7
+ <#
8
+
9
+ .SYNOPSIS
10
+ This is a Powershell script to bootstrap a Cake build.
11
+
12
+ .DESCRIPTION
13
+ This Powershell script will download NuGet if missing, restore NuGet tools (including Cake)
14
+ and execute your Cake build script with the parameters you provide.
15
+
16
+ .PARAMETER Script
17
+ The build script to execute.
18
+ .PARAMETER Target
19
+ The build script target to run.
20
+ .PARAMETER Configuration
21
+ The build configuration to use.
22
+ .PARAMETER Verbosity
23
+ Specifies the amount of information to be displayed.
24
+ .PARAMETER Experimental
25
+ Tells Cake to use the latest Roslyn release.
26
+ .PARAMETER WhatIf
27
+ Performs a dry run of the build script.
28
+ No tasks will be executed.
29
+ .PARAMETER Mono
30
+ Tells Cake to use the Mono scripting engine.
31
+ .PARAMETER SkipToolPackageRestore
32
+ Skips restoring of packages.
33
+ .PARAMETER ScriptArgs
34
+ Remaining arguments are added here.
35
+
36
+ .LINK
37
+ http://cakebuild.net
38
+
39
+ #>
40
+
41
+ [CmdletBinding()]
42
+ Param(
43
+ [string]$Script = "build.cake",
44
+ [string]$Target = "Default",
45
+ [ValidateSet("Release", "Debug")]
46
+ [string]$Configuration = "Release",
47
+ [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")]
48
+ [string]$Verbosity = "Verbose",
49
+ [switch]$Experimental,
50
+ [Alias("DryRun","Noop")]
51
+ [switch]$WhatIf,
52
+ [switch]$Mono,
53
+ [switch]$SkipToolPackageRestore,
54
+ [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
55
+ [string[]]$ScriptArgs
56
+ )
57
+
58
+ [Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null
59
+ function MD5HashFile([string] $filePath)
60
+ {
61
+ if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf))
62
+ {
63
+ return $null
64
+ }
65
+
66
+ [System.IO.Stream] $file = $null;
67
+ [System.Security.Cryptography.MD5] $md5 = $null;
68
+ try
69
+ {
70
+ $md5 = [System.Security.Cryptography.MD5]::Create()
71
+ $file = [System.IO.File]::OpenRead($filePath)
72
+ return [System.BitConverter]::ToString($md5.ComputeHash($file))
73
+ }
74
+ finally
75
+ {
76
+ if ($file -ne $null)
77
+ {
78
+ $file.Dispose()
79
+ }
80
+ }
81
+ }
82
+
83
+ Write-Host "Preparing to run build script..."
84
+
85
+ if(!$PSScriptRoot){
86
+ $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
87
+ }
88
+
89
+ $TOOLS_DIR = Join-Path $PSScriptRoot "tools"
90
+ $NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe"
91
+ $CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe"
92
+ $NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
93
+ $PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config"
94
+ $PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum"
95
+
96
+ # Should we use mono?
97
+ $UseMono = "";
98
+ if($Mono.IsPresent) {
99
+ Write-Verbose -Message "Using the Mono based scripting engine."
100
+ $UseMono = "-mono"
101
+ }
102
+
103
+ # Should we use the new Roslyn?
104
+ $UseExperimental = "";
105
+ if($Experimental.IsPresent -and !($Mono.IsPresent)) {
106
+ Write-Verbose -Message "Using experimental version of Roslyn."
107
+ $UseExperimental = "-experimental"
108
+ }
109
+
110
+ # Is this a dry run?
111
+ $UseDryRun = "";
112
+ if($WhatIf.IsPresent) {
113
+ $UseDryRun = "-dryrun"
114
+ }
115
+
116
+ # Make sure tools folder exists
117
+ if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
118
+ Write-Verbose -Message "Creating tools directory..."
119
+ New-Item -Path $TOOLS_DIR -Type directory | out-null
120
+ }
121
+
122
+ # Make sure that packages.config exist.
123
+ if (!(Test-Path $PACKAGES_CONFIG)) {
124
+ Write-Verbose -Message "Downloading packages.config..."
125
+ try { (New-Object System.Net.WebClient).DownloadFile("http://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch {
126
+ Throw "Could not download packages.config."
127
+ }
128
+ }
129
+
130
+ # Try find NuGet.exe in path if not exists
131
+ if (!(Test-Path $NUGET_EXE)) {
132
+ Write-Verbose -Message "Trying to find nuget.exe in PATH..."
133
+ $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) }
134
+ $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1
135
+ if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) {
136
+ Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)."
137
+ $NUGET_EXE = $NUGET_EXE_IN_PATH.FullName
138
+ }
139
+ }
140
+
141
+ # Try download NuGet.exe if not exists
142
+ if (!(Test-Path $NUGET_EXE)) {
143
+ Write-Verbose -Message "Downloading NuGet.exe..."
144
+ try {
145
+ (New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE)
146
+ } catch {
147
+ Throw "Could not download NuGet.exe."
148
+ }
149
+ }
150
+
151
+ # Save nuget.exe path to environment to be available to child processed
152
+ $ENV:NUGET_EXE = $NUGET_EXE
153
+
154
+ # Restore tools from NuGet?
155
+ if(-Not $SkipToolPackageRestore.IsPresent) {
156
+ Push-Location
157
+ Set-Location $TOOLS_DIR
158
+
159
+ # Check for changes in packages.config and remove installed tools if true.
160
+ [string] $md5Hash = MD5HashFile($PACKAGES_CONFIG)
161
+ if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or
162
+ ($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) {
163
+ Write-Verbose -Message "Missing or changed package.config hash..."
164
+ Remove-Item * -Recurse -Exclude packages.config,nuget.exe
165
+ }
166
+
167
+ Write-Verbose -Message "Restoring tools from NuGet..."
168
+ $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`""
169
+
170
+ if ($LASTEXITCODE -ne 0) {
171
+ Throw "An error occured while restoring NuGet tools."
172
+ }
173
+ else
174
+ {
175
+ $md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII"
176
+ }
177
+ Write-Verbose -Message ($NuGetOutput | out-string)
178
+ Pop-Location
179
+ }
180
+
181
+ # Make sure that Cake has been installed.
182
+ if (!(Test-Path $CAKE_EXE)) {
183
+ Throw "Could not find Cake.exe at $CAKE_EXE"
184
+ }
185
+
186
+ # Start Cake
187
+ Write-Host "Running build script..."
188
+ Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs"
189
+ exit $LASTEXITCODE
@@ -1,33 +1,101 @@
1
- #!/bin/bash
2
- if test "$OS" = "Windows_NT"
3
- then
4
- # use .Net
5
-
6
- .paket/paket.bootstrapper.exe
7
- exit_code=$?
8
- if [ $exit_code -ne 0 ]; then
9
- exit $exit_code
10
- fi
11
-
12
- .paket/paket.exe restore
13
- exit_code=$?
14
- if [ $exit_code -ne 0 ]; then
15
- exit $exit_code
16
- fi
17
-
18
- packages/FAKE/tools/FAKE.exe $@ --fsiargs build.fsx
1
+ #!/usr/bin/env bash
2
+
3
+ ##########################################################################
4
+ # This is the Cake bootstrapper script for Linux and OS X.
5
+ # This file was downloaded from https://github.com/cake-build/resources
6
+ # Feel free to change this file to fit your needs.
7
+ ##########################################################################
8
+
9
+ # Define directories.
10
+ SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
11
+ TOOLS_DIR=$SCRIPT_DIR/tools
12
+ NUGET_EXE=$TOOLS_DIR/nuget.exe
13
+ CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe
14
+ PACKAGES_CONFIG=$TOOLS_DIR/packages.config
15
+ PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum
16
+
17
+ # Define md5sum or md5 depending on Linux/OSX
18
+ MD5_EXE=
19
+ if [[ "$(uname -s)" == "Darwin" ]]; then
20
+ MD5_EXE="md5 -r"
21
+ else
22
+ MD5_EXE="md5sum"
23
+ fi
24
+
25
+ # Define default arguments.
26
+ SCRIPT="build.cake"
27
+ TARGET="Default"
28
+ CONFIGURATION="Release"
29
+ VERBOSITY="verbose"
30
+ DRYRUN=
31
+ SHOW_VERSION=false
32
+ SCRIPT_ARGUMENTS=()
33
+
34
+ # Parse arguments.
35
+ for i in "$@"; do
36
+ case $1 in
37
+ -s|--script) SCRIPT="$2"; shift ;;
38
+ -t|--target) TARGET="$2"; shift ;;
39
+ -c|--configuration) CONFIGURATION="$2"; shift ;;
40
+ -v|--verbosity) VERBOSITY="$2"; shift ;;
41
+ -d|--dryrun) DRYRUN="-dryrun" ;;
42
+ --version) SHOW_VERSION=true ;;
43
+ --) shift; SCRIPT_ARGUMENTS+=("$@"); break ;;
44
+ *) SCRIPT_ARGUMENTS+=("$1") ;;
45
+ esac
46
+ shift
47
+ done
48
+
49
+ # Make sure the tools folder exist.
50
+ if [ ! -d "$TOOLS_DIR" ]; then
51
+ mkdir "$TOOLS_DIR"
52
+ fi
53
+
54
+ # Make sure that packages.config exist.
55
+ if [ ! -f "$TOOLS_DIR/packages.config" ]; then
56
+ echo "Downloading packages.config..."
57
+ curl -Lsfo "$TOOLS_DIR/packages.config" http://cakebuild.net/download/bootstrapper/packages
58
+ if [ $? -ne 0 ]; then
59
+ echo "An error occured while downloading packages.config."
60
+ exit 1
61
+ fi
62
+ fi
63
+
64
+ # Download NuGet if it does not exist.
65
+ if [ ! -f "$NUGET_EXE" ]; then
66
+ echo "Downloading NuGet..."
67
+ curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
68
+ if [ $? -ne 0 ]; then
69
+ echo "An error occured while downloading nuget.exe."
70
+ exit 1
71
+ fi
72
+ fi
73
+
74
+ # Restore tools from NuGet.
75
+ pushd "$TOOLS_DIR" >/dev/null
76
+ if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then
77
+ find . -type d ! -name . | xargs rm -rf
78
+ fi
79
+
80
+ mono "$NUGET_EXE" install -ExcludeVersion
81
+ if [ $? -ne 0 ]; then
82
+ echo "Could not restore NuGet packages."
83
+ exit 1
84
+ fi
85
+
86
+ $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5"
87
+
88
+ popd >/dev/null
89
+
90
+ # Make sure that Cake has been installed.
91
+ if [ ! -f "$CAKE_EXE" ]; then
92
+ echo "Could not find Cake.exe at '$CAKE_EXE'."
93
+ exit 1
94
+ fi
95
+
96
+ # Start Cake
97
+ if $SHOW_VERSION; then
98
+ exec mono "$CAKE_EXE" -version
19
99
  else
20
- # use mono
21
- mono .paket/paket.bootstrapper.exe
22
- exit_code=$?
23
- if [ $exit_code -ne 0 ]; then
24
- exit $exit_code
25
- fi
26
-
27
- mono .paket/paket.exe restore
28
- exit_code=$?
29
- if [ $exit_code -ne 0 ]; then
30
- exit $exit_code
31
- fi
32
- mono packages/FAKE/tools/FAKE.exe $@ --fsiargs -d:MONO build.fsx
100
+ exec mono "$CAKE_EXE" $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}"
33
101
  fi
@@ -5,22 +5,13 @@ machine:
5
5
  DOTNET_CLI_TELEMETRY_OPTOUT: 1
6
6
  dependencies:
7
7
  pre:
8
- - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
8
+ - sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
9
+ - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
9
10
  - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
10
11
  - echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
11
12
  - sudo apt-get update
12
13
  - sudo apt-get install mono-complete
13
- - sudo apt-get install gettext
14
- - sudo apt-get install libcurl4-openssl-dev
15
- - sudo apt-get install libicu-dev
16
- - sudo apt-get install libssl-dev
17
- - sudo apt-get install libunwind8
18
- - sudo apt-get install zlib1g
19
- - sudo apt-get install libstdc++6
20
- - curl https://download.microsoft.com/download/B/4/6/B4678511-01F4-4F97-902B-0E58A985932A/dotnet-dev-debian-x64.1.0.0-rc4-004771.tar.gz -o /tmp/dotnet.tar.gz
21
- - sudo mkdir -p /opt/dotnet
22
- - sudo tar zxf /tmp/dotnet.tar.gz -C /opt/dotnet
23
- - sudo ln -s /opt/dotnet/dotnet /usr/local/bin
14
+ - sudo apt-get install dotnet-dev-1.0.1
24
15
  test:
25
16
  override:
26
17
  - ./build.sh