private static void SetCommonConfiguration(IAppConfigurator appConfigurator)
        {
            var sdkConfiguration = appConfigurator.Of <DotNETBuildSDKConfiguration>();

            if (sdkConfiguration.EnableSetCommonConfiguration)
            {
                var compileConfiguration = appConfigurator.Of <CompileConfiguration>();

                compileConfiguration.SetCommonConfiguration();
            }
        }
        /// <summary>
        /// 协助部署使用的,用于协助将所有的构建需要的命令更新
        /// </summary>
        /// <param name="appConfigurator"></param>
        private static void CheckCommandInstall(IAppConfigurator appConfigurator)
        {
            var localToolList = new List <string>
            {
                "dotnetCampus.GitRevisionTask",
                "dotnetCampus.NuGetTask",
                "dotnetCampus.DotNETTask",
                "dotnetCampus.GetAssemblyVersionTask",
                "dotnetCampus.WriteAppVersionTask",
                "dotnetCampus.MatrixRun",
                "dotnetCampus.NuGetPublishTask",
                "dotnetCampus.PickTextValueTask",
                "dotnetCampus.SendEmailTask",
                "dotnetCampus.BuildMd5Task",

                // 用于 Tag 打包
                // https://github.com/dotnet-campus/dotnetCampus.TagToVersion
                "dotnetCampus.TagToVersion",
                // 用于更新所有的 dotnet tool 工具
                // https://github.com/dotnet-campus/dotnetCampus.UpdateAllDotNetTools
                "dotnetCampus.UpdateAllDotNetTools",
                // 用于下载文件
                // https://github.com/dotnet-campus/dotnetCampus.FileDownloader
                "dotnetCampus.FileDownloader.Tool",
            };

            // 读取全局配置的工具
            var configToolList = appConfigurator.Of <ToolConfiguration>().DotNETToolList;

            Log.Debug("开始确认工具准备完成");
            localToolList.AddRange(configToolList);
            var dotNetTool = new DotNet(appConfigurator);

            dotNetTool.TryInstall(localToolList);
        }
示例#3
0
        public static Git GetGitRepo(IAppConfigurator appConfigurator)
        {
            // 先尝试从项目配置获取
            var compileConfiguration = appConfigurator.Of <CompileConfiguration>();
            var codeDirectory        = compileConfiguration.CodeDirectory;

            if (string.IsNullOrEmpty(codeDirectory))
            {
                // 也就是现在还没找过这个文件夹
                var fileSniff = new FileSniff(appConfigurator);
                fileSniff.Sniff();
            }
            codeDirectory = compileConfiguration.CodeDirectory;
            if (string.IsNullOrEmpty(codeDirectory))
            {
                throw new ArgumentException("没有找到 git 仓库文件夹,请确定当前项目被 Git 管理 当前工作路径:" + Environment.CurrentDirectory);
            }

            var git = new Git(new DirectoryInfo(codeDirectory))
            {
                NeedWriteLog = false,
            };

            return(git);
        }
示例#4
0
        private static FileInfo GetCurrentBuildLogFile(IAppConfigurator appConfigurator)
        {
            var currentBuildLogFile = new FileInfo(Path.GetTempFileName());
            var logConfiguration    = appConfigurator.Of <LogConfiguration>();

            logConfiguration.BuildLogFile = currentBuildLogFile.FullName;
            return(currentBuildLogFile);
        }
示例#5
0
        public static void FillGitInfo(IAppConfigurator appConfigurator = null)
        {
            appConfigurator ??= AppConfigurator.GetAppConfigurator();
            var git = GitHelper.GetGitRepo(appConfigurator);
            var gitCommitRevisionCount = git.GetGitCommitRevisionCount();
            var gitConfiguration       = appConfigurator.Of <GitConfiguration>();

            gitConfiguration.GitCount = gitCommitRevisionCount;

            gitConfiguration.CurrentCommit = git.GetCurrentCommit();

            var compileConfiguration = appConfigurator.Of <CompileConfiguration>();

            if (string.IsNullOrEmpty(compileConfiguration.CurrentCommit))
            {
                compileConfiguration.CurrentCommit = gitConfiguration.CurrentCommit;
            }
        }
#pragma warning restore CS0618 // 类型或成员已过时

        /// <summary>
        /// 尝试重新加载此配置文件的外部修改(例如使用其他编辑器或其他客户端修改的部分)。
        /// <para>外部修改会自动同步到此配置中,但此同步不会立刻发生,所以如果你明确知道外部修改了文件后需要立刻重新加载外部修改,才需要调用此方法。</para>
        /// </summary>
        public static Task ReloadExternalChangesAsync(this IAppConfigurator configs)
        {
            if (configs is null)
            {
                throw new ArgumentNullException(nameof(configs));
            }

            if (configs.Of <DefaultConfiguration>().Repo is FileConfigurationRepo repo)
            {
                return(repo.ReloadExternalChangesAsync());
            }
            return(Task.FromResult <object?>(null));
        }
        public void WhenFileChanged()
        {
//            "监听后,文件内容发生了改变,可以读到文件的新值。".Test(async () =>
//            {
//                const string dcc = "configs.01.dcc";
//                IAppConfigurator configs = ConfigurationFactory.FromFile(dcc).CreateAppConfigurator();
//                var fake = configs.Of<FakeConfiguration>();
//                var oldValue = fake.Key;
//                Assert.AreEqual("Value", oldValue);
//                File.WriteAllText(dcc, @">
//Key
//NewValue
//>");
//                await configs.ReloadExternalChangesAsync().ConfigureAwait(false);
//                var newValue = fake.Key;
//                Assert.AreEqual("NewValue", newValue);
//            });

            "监听后,文件才被创建,可以读到文件中一开始就存放的值。".Test(async() =>
            {
                const string dcc         = "configs.new.dcc";
                IAppConfigurator configs = ConfigurationFactory.FromFile(dcc).CreateAppConfigurator();
                var fake     = configs.Of <FakeConfiguration>();
                var oldValue = fake.Key;
                Assert.AreEqual("", oldValue);
                File.WriteAllText(dcc, @">
Key
NewValue
>");
                await configs.ReloadExternalChangesAsync().ConfigureAwait(false);
                var newValue = fake.Key;
                Assert.AreEqual("NewValue", newValue);
            });

            "监听后,文件被删除,相当于所有未保存的值全部被删除。".Test(async() =>
            {
                const string dcc         = "configs.02.dcc";
                IAppConfigurator configs = ConfigurationFactory.FromFile(dcc).CreateAppConfigurator();
                var fake     = configs.Of <FakeConfiguration>();
                var oldValue = fake.Key;
                Assert.AreEqual("Value", oldValue);
                File.Delete(dcc);
                await configs.ReloadExternalChangesAsync().ConfigureAwait(false);
                var newValue = fake.Key;
                Assert.AreEqual("", newValue);
            });
        }
示例#8
0
        /// <summary>
        /// 填充程序集信息,包括版本号
        /// </summary>
        /// <returns></returns>
        public static IAppConfigurator FillAssemblyInfo(this IAppConfigurator appConfigurator, Assembly assembly)
        {
            var compileConfiguration = appConfigurator.Of <CompileConfiguration>();

            var assemblyInformationalVersionAttribute = assembly.GetCustomAttribute <AssemblyInformationalVersionAttribute>();

            if (string.IsNullOrEmpty(compileConfiguration.AppVersion))
            {
                compileConfiguration.AppVersion = assemblyInformationalVersionAttribute !.InformationalVersion;
            }

            if (string.IsNullOrEmpty(compileConfiguration.AssemblyVersion))
            {
                compileConfiguration.AssemblyVersion = assemblyInformationalVersionAttribute !.InformationalVersion;
            }

            return(appConfigurator);
        }
        public BinaryChopCompiler(IAppConfigurator appConfigurator,
                                  DirectoryInfo codeDirectory,
                                  DirectoryInfo targetDirectory,
                                  DirectoryInfo?outputDirectory = null,
                                  string?originBranch           = null,
                                  ILogger?logger = null)
        {
            AppConfigurator = appConfigurator;

            CodeDirectory   = codeDirectory;
            TargetDirectory = targetDirectory;

            if (logger is null)
            {
                var logConfiguration = appConfigurator.Of <LogConfiguration>();

                logger = logConfiguration.GetLogger();
            }

            Logger = logger;

            if (!string.IsNullOrEmpty(originBranch))
            {
                OriginBranch = originBranch;
            }

            var git = new Git(codeDirectory)
            {
                DefaultCommandTimeout = TimeSpan.FromMinutes(3)
            };

            _git = git;

            if (outputDirectory is null)
            {
                outputDirectory = new DirectoryInfo(Path.Combine(codeDirectory.FullName, "bin"));
            }

            OutputDirectory = outputDirectory;
        }