Example #1
0
        private static void InstallAndLoadMessageNugetPackage(PackageInstaller nugetPackageInstaller, PackageIdentity nugetPackage)
        {
            nugetPackageInstaller
            .InstallPackageAsync(nugetPackage)
            .Wait();

            // Load Messages
            var packagePath       = nugetPackageInstaller.GetInstalledPath(nugetPackage);
            var assemblyFileNames = Directory.GetFiles(packagePath, "*.dll", SearchOption.AllDirectories);

            foreach (var assemblyFileName in assemblyFileNames)
            {
                LoadMessageAssembly(assemblyFileName);
            }
        }
        private async Task <EnvironmentPackageResult> AddEnvironmentPackageAsync(
            DeploymentExecutionDefinition deploymentExecutionDefinition,
            DirectoryInfo tempDirectoryInfo,
            List <FileMatch> possibleXmlTransformations,
            List <FileMatch> replaceFiles,
            List <DirectoryInfo> tempDirectoriesToClean,
            SemanticVersion version,
            CancellationToken cancellationToken = default)
        {
            _logger.Debug("Fetching environment configuration {EnvironmentConfig}",
                          deploymentExecutionDefinition.EnvironmentConfig);

            SemanticVersion expectedVersion   = version;
            string          expectedPackageId =
                $"{deploymentExecutionDefinition.PackageId}.{DeploymentConstants.EnvironmentLiteral}.{deploymentExecutionDefinition.EnvironmentConfig}";

            ImmutableArray <SemanticVersion> allVersions = await _nugetPackageInstaller.GetAllVersionsAsync(
                new NuGetPackageId(expectedPackageId),
                allowPreRelease : expectedVersion.IsPrerelease,
                nuGetSource : deploymentExecutionDefinition.NuGetPackageSource,
                nugetConfig : deploymentExecutionDefinition.NuGetConfigFile,
                nugetExePath : deploymentExecutionDefinition.NuGetExePath,
                timeoutInSeconds : 35,
                adaptiveEnabled : deploymentExecutionDefinition.PackageListPrefixEnabled,
                prefix : deploymentExecutionDefinition.PackageListPrefixEnabled.HasValue && deploymentExecutionDefinition.PackageListPrefixEnabled.Value?deploymentExecutionDefinition.PackageListPrefix : ""
                );

            var matchingFoundEnvironmentPackage = allVersions
                                                  .Where(currentVersion => currentVersion == expectedVersion)
                                                  .ToList();

            if (matchingFoundEnvironmentPackage.Count > 1)
            {
                _logger.Error("Found multiple environment packages matching '{ExpectedMatch}', {Found}",
                              expectedVersion.ToNormalizedString(),
                              string.Join(", ", matchingFoundEnvironmentPackage.Select(currentVersion => $"'{currentVersion.ToNormalizedString()}'")));
                return(new EnvironmentPackageResult(false));
            }

            const string environmentConfigPrefix = "EF_";

            if (matchingFoundEnvironmentPackage.Any())
            {
                var tempInstallDirectory =
                    new DirectoryInfo(
                        Path.Combine(
                            tempDirectoryInfo.FullName,
                            $"{environmentConfigPrefix}tmp",
                            deploymentExecutionDefinition.EnvironmentConfig));

                var deploymentDefinition =
                    new DeploymentExecutionDefinition(
                        expectedPackageId,
                        tempInstallDirectory.FullName,
                        expectedVersion,
                        nugetExePath: deploymentExecutionDefinition.NuGetExePath,
                        nuGetPackageSource: deploymentExecutionDefinition.NuGetPackageSource,
                        nuGetConfigFile: deploymentExecutionDefinition.NuGetConfigFile);

                var tempOutputDirectory =
                    new DirectoryInfo(
                        Path.Combine(
                            tempDirectoryInfo.FullName,
                            $"{environmentConfigPrefix}out",
                            deploymentExecutionDefinition.EnvironmentConfig));

                MayBe <InstalledPackage> installedEnvironmentPackage =
                    await
                    _packageInstaller.InstallPackageAsync(
                        deploymentDefinition,
                        tempOutputDirectory,
                        false,
                        null,
                        cancellationToken).ConfigureAwait(false);

                if (!installedEnvironmentPackage.HasValue)
                {
                    _logger.Error(
                        "No environment NuGet package was installed for deployment definition {DeploymentDefinition}",
                        deploymentDefinition);

                    return(new EnvironmentPackageResult(false));
                }

                var configContentDirectory =
                    new DirectoryInfo(
                        Path.Combine(tempOutputDirectory.FullName, expectedPackageId, "content"));

                if (!configContentDirectory.Exists)
                {
                    _logger.Debug("The content directory for the environment package does not exist");
                }
                else
                {
                    ImmutableArray <EnvironmentFile> environmentFiles = GetEnvironmentFiles(
                        configContentDirectory,
                        deploymentExecutionDefinition);

                    if (environmentFiles.Any())
                    {
                        foreach (EnvironmentFile item in environmentFiles)
                        {
                            FindMatches(item, possibleXmlTransformations, configContentDirectory, replaceFiles);
                        }
                    }
                    else
                    {
                        IEnumerable <string> fileNamesToConcat =
                            configContentDirectory.GetFiles().Select(file => $"'{file.Name}'");

                        string foundFiles = string.Join(", ", fileNamesToConcat);

                        _logger.Debug("Could not find any action files in package, all files {FoundFiles}",
                                      foundFiles);
                    }
                }

                _logger.Verbose("Deleting transformation package temp directory '{TempOutputDirectory}'",
                                tempOutputDirectory);

                tempDirectoriesToClean.Add(tempOutputDirectory);
            }
            else
            {
                if (deploymentExecutionDefinition.RequireEnvironmentConfig)
                {
                    _logger.Error(
                        "Environment config was set to {EnvironmentConfig} but no package was found with id {ExpectedPackageId} and version {Version}, deployment definition require the environment config",
                        deploymentExecutionDefinition.EnvironmentConfig,
                        expectedPackageId,
                        expectedVersion.ToNormalizedString());

                    return(new EnvironmentPackageResult(false));
                }

                _logger.Debug(
                    "Environment config was set to {EnvironmentConfig} but no package was found with id {ExpectedPackageId} and version {Version}",
                    deploymentExecutionDefinition.EnvironmentConfig,
                    expectedPackageId,
                    expectedVersion.ToNormalizedString());
            }

            var foundPackage = matchingFoundEnvironmentPackage.SingleOrDefault();

            return(new EnvironmentPackageResult(true, foundPackage));
        }