-
Notifications
You must be signed in to change notification settings - Fork 757
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update development with fixes from v9.4.0-rc (#2928)
Update development with fixes from v9.4.0-rc
- Loading branch information
Showing
45 changed files
with
537 additions
and
429 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# Building Dnn | ||
|
||
You do not always need to build the entire solution, you can download and install from the releases and only build the part you are working on, please read [How to Contribue](CONTRIBUTING.md) first. | ||
|
||
If you do need to build the entire solution and the distribution packages, you need to be aware that the entire distribution is split in multiple github repositories. | ||
* This repository - contains all the core APIs | ||
* [CKEditorProvider](https://github.com/DNN-Connect/CKEditorProvider) - The default HTML Editor Provider | ||
* [CDF](https://github.com/dnnsoftware/ClientDependency) - The Dnn Client Dependency Framework | ||
* [Admin Experience](https://github.com/dnnsoftware/Dnn.AdminExperience) The default administration interface (Persona Bar) | ||
|
||
Also, we currently maintain two branches, the development branch is the next major release and we also maintain a release/x.x.x branch that allows doing bug fixes on the current major version. | ||
|
||
To prevent issues with long paths in some build scripts, fork this repository in a short named folder on the root of any drive such as `c:\dnnsrc\` if you fork to a long path such as `c:\users\username\documents\dnn\source\` you may encounter long path issues. | ||
|
||
If you need to build the next major release you simply need to open PowerShell and run the following command: | ||
``` | ||
.\build.ps1 -Target BuildAll | ||
``` | ||
|
||
But if you need to build from one of the release branches, then you also need to reference each branch you want to pull from those repositories as such (example for the 9.4.0 release, replace the branch names as needed): | ||
``` | ||
.\build.ps1 -Target BuildAll -ScriptArgs '--CkBranch="development"','--CdfBranch="dnn"','--CpBranch="release/3.0.x"' | ||
``` | ||
|
||
If you encounter any build issues, please re-run the build with more verbosity as such: | ||
``` | ||
.\build.ps1 -Target BuildAll -Verbosity diagnostic | ||
``` | ||
This will log much more information about the problem and allow you to open an issue with those more detailed logs. | ||
|
||
If you encounter PowerShell security issues, please read [Cake - PowerShell Security](https://cakebuild.net/docs/tutorials/powershell-security) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,131 +1,131 @@ | ||
|
||
string connectionString = @"server=(localdb)\MSSQLLocalDB"; | ||
|
||
Task("CreateDatabase") | ||
.Does(() => | ||
{ | ||
var deleteScript = "if db_id('Dnn_Platform') is not null DROP DATABASE Dnn_Platform;"; | ||
|
||
Information("Dropping LocalDb: {0}", ExecuteSqlScript(deleteScript)); | ||
|
||
var createDbScript = string.Format(@" | ||
CREATE DATABASE | ||
[Dnn_Platform] | ||
ON PRIMARY ( | ||
NAME=Dnn_data, | ||
FILENAME = '{0}\Dnn_Platform.mdf' | ||
) | ||
LOG ON ( | ||
NAME=Dnn_log, | ||
FILENAME = '{0}\Dnn_Platform.ldf' | ||
)", | ||
tempDir | ||
); | ||
var createDbStatus = ExecuteSqlScript(createDbScript); | ||
Information("Created LocalDb: {0}", createDbStatus); | ||
|
||
if (createDbStatus) | ||
{ | ||
connectionString = @"server=(localdb)\MSSQLLocalDB;Database=Dnn_Platform;Trusted_Connection=True;"; | ||
|
||
var schemaScriptName = XmlPeek("./Website/Install/DotNetNuke.install.config.resources", "/dotnetnuke/scripts/script[@name='Schema']"); | ||
var dataScriptName = XmlPeek("./Website/Install/DotNetNuke.install.config.resources", "/dotnetnuke/scripts/script[@name='Data']"); | ||
var schemaVersion = XmlPeek("./Website/Install/DotNetNuke.install.config.resources", "/dotnetnuke/version"); | ||
|
||
//##################################################################### | ||
//run initial schema first | ||
//##################################################################### | ||
var fileContents = System.IO.File.ReadAllText("./Website/Providers/DataProviders/SqlDataProvider/" + schemaScriptName.ToString() + ".SqlDataProvider"); | ||
|
||
var sqlDelimiterRegex = new System.Text.RegularExpressions.Regex("(?<=(?:[^\\w]+|^))GO(?=(?: |\\t)*?(?:\\r?\\n|$))", System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline); | ||
string[] sqlStatements = sqlDelimiterRegex.Split(fileContents); | ||
foreach (string statement in sqlStatements) | ||
{ | ||
ExecuteSqlScript(statement); | ||
} | ||
Information("Initial Schema for v{0}", schemaVersion); | ||
|
||
//##################################################################### | ||
//populate with data next | ||
//##################################################################### | ||
fileContents = System.IO.File.ReadAllText("./Website/Providers/DataProviders/SqlDataProvider/" + dataScriptName.ToString() + ".SqlDataProvider"); | ||
|
||
sqlStatements = sqlDelimiterRegex.Split(fileContents); | ||
foreach (string statement in sqlStatements) | ||
{ | ||
Information("Test Data: {1}", schemaVersion, ExecuteSqlScript(statement)); | ||
} | ||
|
||
var createDummyPortalStatement = "INSERT [dbo].[dnn_Portals] ([ExpiryDate], [UserRegistration], [BannerAdvertising], [AdministratorId], [Currency], [HostFee], [HostSpace], [AdministratorRoleId], [RegisteredRoleId], [GUID], [PaymentProcessor], [ProcessorUserId], [ProcessorPassword], [SiteLogHistory], [DefaultLanguage], [TimezoneOffset], [HomeDirectory], [PageQuota], [UserQuota], [CreatedByUserID], [CreatedOnDate], [LastModifiedByUserID], [LastModifiedOnDate], [PortalGroupID]) VALUES (NULL, 1, 0, 1, N'USD', 0.0000, 0, 0, 1, N'97debbc9-4643-4bd9-b0a0-b14170b38b0f', N'PayPal', NULL, NULL, 0, N'en-US', -8, N'Portals/0', 0, 0, -1, CAST(N'2015-02-05 14:49:37.873' AS DateTime), 1, CAST(N'2015-10-13 11:08:13.513' AS DateTime), -1)"; | ||
|
||
Information("Test Portal: {1}", schemaVersion, ExecuteSqlScript(createDummyPortalStatement)); | ||
|
||
//##################################################################### | ||
//now get all other SqlDataProvider files and run those.... | ||
//##################################################################### | ||
var files = GetFiles("./Website/Providers/DataProviders/SqlDataProvider/*.SqlDataProvider"); | ||
|
||
var currentFileToProcess = string.Empty; | ||
|
||
foreach(var file in files) | ||
{ | ||
currentFileToProcess = file.GetFilenameWithoutExtension().ToString(); | ||
var fileBits = currentFileToProcess.Split('.'); | ||
|
||
int firstBit; | ||
int secondBit; | ||
int thirdBit; | ||
|
||
if (int.TryParse(fileBits[0], out firstBit) && int.TryParse(fileBits[1], out secondBit) && int.TryParse(fileBits[2], out thirdBit)) { | ||
var schemaVersionBits = schemaVersion.Split('.'); | ||
|
||
int schemaFirstBit = int.Parse(schemaVersionBits[0]); | ||
int schemaSecondBit = int.Parse(schemaVersionBits[1]); | ||
int schemaThirdBit = int.Parse(schemaVersionBits[2]); | ||
|
||
if ((firstBit == schemaFirstBit && (secondBit >= schemaSecondBit && thirdBit >= schemaThirdBit)) || firstBit > schemaFirstBit){ | ||
Information("Updated to v{0}", currentFileToProcess); | ||
|
||
fileContents = System.IO.File.ReadAllText(file.ToString()); | ||
|
||
sqlStatements = sqlDelimiterRegex.Split(fileContents); | ||
foreach (string statement in sqlStatements) | ||
{ | ||
var statementSuccess = ExecuteSqlScript(statement); | ||
} | ||
} | ||
|
||
} | ||
} | ||
|
||
} | ||
else { | ||
Information("An Error has occured. Please review and try again."); | ||
} | ||
|
||
|
||
}); | ||
|
||
|
||
public bool ExecuteSqlScript(string ScriptStatement) | ||
{ | ||
try | ||
{ | ||
using (var connection = new System.Data.SqlClient.SqlConnection(connectionString)) | ||
{ | ||
connection.Open(); | ||
|
||
var command = new System.Data.SqlClient.SqlCommand(ScriptStatement.Replace("{databaseOwner}", "dbo.").Replace("{objectQualifier}", "dnn_"), connection); | ||
command.ExecuteNonQuery(); | ||
|
||
connection.Close(); | ||
} | ||
} | ||
catch (Exception err){ | ||
Error(err); | ||
|
||
return false; | ||
} | ||
|
||
return true; | ||
|
||
string connectionString = @"server=(localdb)\MSSQLLocalDB"; | ||
|
||
Task("CreateDatabase") | ||
.Does(() => | ||
{ | ||
var deleteScript = "if db_id('Dnn_Platform') is not null DROP DATABASE Dnn_Platform;"; | ||
|
||
Information("Dropping LocalDb: {0}", ExecuteSqlScript(deleteScript)); | ||
|
||
var createDbScript = string.Format(@" | ||
CREATE DATABASE | ||
[Dnn_Platform] | ||
ON PRIMARY ( | ||
NAME=Dnn_data, | ||
FILENAME = '{0}\Dnn_Platform.mdf' | ||
) | ||
LOG ON ( | ||
NAME=Dnn_log, | ||
FILENAME = '{0}\Dnn_Platform.ldf' | ||
)", | ||
tempDir | ||
); | ||
var createDbStatus = ExecuteSqlScript(createDbScript); | ||
Information("Created LocalDb: {0}", createDbStatus); | ||
|
||
if (createDbStatus) | ||
{ | ||
connectionString = @"server=(localdb)\MSSQLLocalDB;Database=Dnn_Platform;Trusted_Connection=True;"; | ||
|
||
var schemaScriptName = XmlPeek("./Website/Install/DotNetNuke.install.config.resources", "/dotnetnuke/scripts/script[@name='Schema']"); | ||
var dataScriptName = XmlPeek("./Website/Install/DotNetNuke.install.config.resources", "/dotnetnuke/scripts/script[@name='Data']"); | ||
var schemaVersion = XmlPeek("./Website/Install/DotNetNuke.install.config.resources", "/dotnetnuke/version"); | ||
|
||
//##################################################################### | ||
//run initial schema first | ||
//##################################################################### | ||
var fileContents = System.IO.File.ReadAllText("./Website/Providers/DataProviders/SqlDataProvider/" + schemaScriptName.ToString() + ".SqlDataProvider"); | ||
|
||
var sqlDelimiterRegex = new System.Text.RegularExpressions.Regex("(?<=(?:[^\\w]+|^))GO(?=(?: |\\t)*?(?:\\r?\\n|$))", System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline); | ||
string[] sqlStatements = sqlDelimiterRegex.Split(fileContents); | ||
foreach (string statement in sqlStatements) | ||
{ | ||
ExecuteSqlScript(statement); | ||
} | ||
Information("Initial Schema for v{0}", schemaVersion); | ||
|
||
//##################################################################### | ||
//populate with data next | ||
//##################################################################### | ||
fileContents = System.IO.File.ReadAllText("./Website/Providers/DataProviders/SqlDataProvider/" + dataScriptName.ToString() + ".SqlDataProvider"); | ||
|
||
sqlStatements = sqlDelimiterRegex.Split(fileContents); | ||
foreach (string statement in sqlStatements) | ||
{ | ||
Information("Test Data: {1}", schemaVersion, ExecuteSqlScript(statement)); | ||
} | ||
|
||
var createDummyPortalStatement = "INSERT [dbo].[dnn_Portals] ([ExpiryDate], [UserRegistration], [BannerAdvertising], [AdministratorId], [Currency], [HostFee], [HostSpace], [AdministratorRoleId], [RegisteredRoleId], [GUID], [PaymentProcessor], [ProcessorUserId], [ProcessorPassword], [SiteLogHistory], [DefaultLanguage], [TimezoneOffset], [HomeDirectory], [PageQuota], [UserQuota], [CreatedByUserID], [CreatedOnDate], [LastModifiedByUserID], [LastModifiedOnDate], [PortalGroupID]) VALUES (NULL, 1, 0, 1, N'USD', 0.0000, 0, 0, 1, N'97debbc9-4643-4bd9-b0a0-b14170b38b0f', N'PayPal', NULL, NULL, 0, N'en-US', -8, N'Portals/0', 0, 0, -1, CAST(N'2015-02-05 14:49:37.873' AS DateTime), 1, CAST(N'2015-10-13 11:08:13.513' AS DateTime), -1)"; | ||
|
||
Information("Test Portal: {1}", schemaVersion, ExecuteSqlScript(createDummyPortalStatement)); | ||
|
||
//##################################################################### | ||
//now get all other SqlDataProvider files and run those.... | ||
//##################################################################### | ||
var files = GetFiles("./Website/Providers/DataProviders/SqlDataProvider/*.SqlDataProvider"); | ||
|
||
var currentFileToProcess = string.Empty; | ||
|
||
foreach(var file in files) | ||
{ | ||
currentFileToProcess = file.GetFilenameWithoutExtension().ToString(); | ||
var fileBits = currentFileToProcess.Split('.'); | ||
|
||
int firstBit; | ||
int secondBit; | ||
int thirdBit; | ||
|
||
if (int.TryParse(fileBits[0], out firstBit) && int.TryParse(fileBits[1], out secondBit) && int.TryParse(fileBits[2], out thirdBit)) { | ||
var schemaVersionBits = schemaVersion.Split('.'); | ||
|
||
int schemaFirstBit = int.Parse(schemaVersionBits[0]); | ||
int schemaSecondBit = int.Parse(schemaVersionBits[1]); | ||
int schemaThirdBit = int.Parse(schemaVersionBits[2]); | ||
|
||
if ((firstBit == schemaFirstBit && (secondBit >= schemaSecondBit && thirdBit >= schemaThirdBit)) || firstBit > schemaFirstBit){ | ||
Information("Updated to v{0}", currentFileToProcess); | ||
|
||
fileContents = System.IO.File.ReadAllText(file.ToString()); | ||
|
||
sqlStatements = sqlDelimiterRegex.Split(fileContents); | ||
foreach (string statement in sqlStatements) | ||
{ | ||
var statementSuccess = ExecuteSqlScript(statement); | ||
} | ||
} | ||
|
||
} | ||
} | ||
|
||
} | ||
else { | ||
Information("An Error has occured. Please review and try again."); | ||
} | ||
|
||
|
||
}); | ||
|
||
|
||
public bool ExecuteSqlScript(string ScriptStatement) | ||
{ | ||
try | ||
{ | ||
using (var connection = new System.Data.SqlClient.SqlConnection(connectionString)) | ||
{ | ||
connection.Open(); | ||
|
||
var command = new System.Data.SqlClient.SqlCommand(ScriptStatement.Replace("{databaseOwner}", "dbo.").Replace("{objectQualifier}", "dnn_"), connection); | ||
command.ExecuteNonQuery(); | ||
|
||
connection.Close(); | ||
} | ||
} | ||
catch (Exception err){ | ||
Error(err); | ||
|
||
return false; | ||
} | ||
|
||
return true; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,33 @@ | ||
|
||
Task("EnsureAllProjectsBuilt") | ||
.IsDependentOn("UpdateDnnManifests") | ||
.IsDependentOn("Restore-NuGet-Packages") | ||
.Does(() => | ||
{ | ||
MSBuild("DNN_Platform.sln", new MSBuildSettings { | ||
Verbosity = Verbosity.Minimal, | ||
ToolVersion = MSBuildToolVersion.VS2017, | ||
Configuration = configuration | ||
}); | ||
}); | ||
|
||
Task("UnitTests") | ||
.IsDependentOn("EnsureAllProjectsBuilt") | ||
.Does(() => | ||
{ | ||
var testAssemblies = GetFiles($@"**\bin\{configuration}\DotNetNuke.Tests.*.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Data.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Integration.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Utilities.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Urls.dll"); | ||
|
||
foreach(var file in testAssemblies) { | ||
VSTest(file.FullPath, new VSTestSettings() { | ||
Logger = $"trx;LogFileName={file.GetFilename()}.xml", | ||
Parallel = true, | ||
EnableCodeCoverage = true, | ||
FrameworkVersion = VSTestFrameworkVersion.NET45, | ||
TestAdapterPath = @"tools\NUnitTestAdapter.2.1.1\tools" | ||
}); | ||
} | ||
}); | ||
|
||
Task("EnsureAllProjectsBuilt") | ||
.IsDependentOn("UpdateDnnManifests") | ||
.IsDependentOn("Restore-NuGet-Packages") | ||
.Does(() => | ||
{ | ||
MSBuild("DNN_Platform.sln", new MSBuildSettings { | ||
Verbosity = Verbosity.Minimal, | ||
ToolVersion = MSBuildToolVersion.VS2017, | ||
Configuration = configuration | ||
}); | ||
}); | ||
|
||
Task("UnitTests") | ||
.IsDependentOn("EnsureAllProjectsBuilt") | ||
.Does(() => | ||
{ | ||
var testAssemblies = GetFiles($@"**\bin\{configuration}\DotNetNuke.Tests.*.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Data.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Integration.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Utilities.dll"); | ||
testAssemblies -= GetFiles(@"**\DotNetNuke.Tests.Urls.dll"); | ||
|
||
foreach(var file in testAssemblies) { | ||
VSTest(file.FullPath, new VSTestSettings() { | ||
Logger = $"trx;LogFileName={file.GetFilename()}.xml", | ||
Parallel = true, | ||
EnableCodeCoverage = true, | ||
FrameworkVersion = VSTestFrameworkVersion.NET45, | ||
TestAdapterPath = @"tools\NUnitTestAdapter.2.1.1\tools" | ||
}); | ||
} | ||
}); |
File renamed without changes.
Oops, something went wrong.