Пример #1
0
        /// <summary>
        /// 同步Github标签
        /// </summary>
        /// <param name="value"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static async Task ApiresourcePublishGithub(GithubQueueModel value, TextWriter log)
        {
            log.WriteLine(JsonConvert.SerializeObject(value));

            if (string.IsNullOrWhiteSpace(value.token))
            {
                return;
            }

            var client = new GithubService(value.userAgent, value.owner, value.repo, value.token);

            var exists = await client.ReposCreateIfNotExistsAsync(value.repo);

            if (!exists.IsSuccessStatusCode)
            {
                var ReasonPhrase = exists.ReasonPhrase;

                var ResponseMessage = await exists.Content.ReadAsStringAsync();

                log.WriteLine(ReasonPhrase + ":" + ResponseMessage);
            }

            var labels = await client.LabelsAsync();

            var operations = await client.OperationsAsync(value.swaggerUrl);

            foreach (var o in operations)
            {
                if (labels.Any(x => x.name.ToLower().Equals(o.Key.ToLower())))
                {
                    continue;
                }

                var result = await client.LabelPostAsync(o.Key, o.Value);

                if (!result.IsSuccessStatusCode)
                {
                    var ReasonPhrase = result.ReasonPhrase;

                    var RequestMessage = result.Content.ReadAsStringAsync().Result;
                }
            }
        }
 /// <summary>
 /// 初始化Github项目中readthedocs的配置
 /// </summary>
 /// <param name="value"></param>
 /// <param name="log"></param>
 /// <returns></returns>
 public static async Task ApiresourcePublishGithubReadthedocs([QueueTrigger("apiresource-publish-github-readthedocs")] GithubQueueModel value, TextWriter log)
 {
     await Fns.ApiresourcePublishGithubReadthedocs(value, log);
 }
Пример #3
0
        /// <summary>
        /// 初始化Github项目中readthedocs的配置
        /// </summary>
        /// <param name="value"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static async Task ApiresourcePublishGithubReadthedocs(GithubQueueModel value, TextWriter log)
        {
            log.WriteLine(JsonConvert.SerializeObject(value));

            if (string.IsNullOrWhiteSpace(value.token))
            {
                return;
            }

            var client = new GithubService(value.userAgent, value.owner, value.repo, value.token);

            #region  存在项目就创建
            var exists = await client.ReposCreateIfNotExistsAsync(value.repo);

            if (!exists.IsSuccessStatusCode)
            {
                var ReasonPhrase = exists.ReasonPhrase;

                var ResponseMessage = await exists.Content.ReadAsStringAsync();

                log.WriteLine(ReasonPhrase + ":" + ResponseMessage);
            }
            #endregion

            var contentResult = await client.ContentGetAsync("docs");

            #region  存在Read the docs配置就创建
            if (!contentResult.IsSuccessStatusCode)
            {
                var readthedocsPath = Environment.CurrentDirectory + @"\Templates\readthedocs";

                var initFiles = Directory.GetFiles(readthedocsPath);

                var keywords = new Dictionary <string, string>()
                {
                    { "<%repo%>", client.repo },
                    { "<%owner%>", client.owner },
                    { "<%year%>", DateTime.Now.Year.ToString() },
                };

                foreach (var file in initFiles)
                {
                    var content = string.Empty;

                    using (var reader = new StreamReader(file))
                    {
                        content = await reader.ReadToEndAsync();
                    }

                    foreach (var k in keywords)
                    {
                        content = content.Replace(k.Key, k.Value);
                    }

                    var base64Content = Convert.ToBase64String(Encoding.UTF8.GetBytes(content));

                    var fileName = Path.GetFileName(file);

                    var result = await client.FilePostAsync("docs/" + fileName, base64Content);

                    if (!result.IsSuccessStatusCode)
                    {
                        var ReasonPhrase = result.ReasonPhrase;

                        var ResponseMessage = await result.Content.ReadAsStringAsync();

                        log.WriteLine(ReasonPhrase + ":" + ResponseMessage);
                    }
                }

                contentResult = await client.ContentGetAsync("docs");
            }
            #endregion

            #region 生成的微服务文档
            var msdocName = md5String(value.swaggerUrl);
            var msdoc     = string.Empty;
            var msdocPath = "docs/" + msdocName + ".rst";

            try
            {
                using (var hc = new HttpClient())
                {
                    var body = new StringContent(JsonConvert.SerializeObject(new
                    {
                        genName = "readthedocs.gen",
                        value.swaggerUrl
                    }), Encoding.UTF8, "application/json");

                    var result = await hc.PostAsync(ConfigurationManager.AppSettings["identityserver"] + "/CodeGen/Gen", body);

                    if (result.IsSuccessStatusCode)
                    {
                        var resultString = await result.Content.ReadAsStringAsync();

                        var resultJson = JsonConvert.DeserializeObject <JObject>(resultString);

                        if (resultJson["code"].Value <int>() == 200)
                        {
                            var data = resultJson["data"].Value <string>();

                            msdoc = Convert.ToBase64String(Encoding.UTF8.GetBytes(data));
                        }
                        else
                        {
                            log.WriteLine(resultString);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteLine("生成微服务文档失败:" + ex.Message);
            }
            #endregion

            var contentResultStr = await contentResult.Content.ReadAsStringAsync();

            var items = JsonConvert.DeserializeObject <List <GithubFile> >(contentResultStr);

            #region 创建或更新微服务文档
            HttpResponseMessage msdocResult = null;
            var msdocFileName = msdocName + ".rst";
            var msdocItem     = items.FirstOrDefault(x => x.name.Equals(msdocFileName));
            if (msdocItem != null)
            {
                msdocResult = await client.FilePutAsync(msdocPath, msdoc, msdocItem.sha);
            }
            else
            {
                msdocResult = await client.FilePostAsync(msdocPath, msdoc);
            }
            #endregion

            #region 加入或更新索引
            var file_Index         = items.FirstOrDefault(x => x.name.Equals("index.rst"));
            var file_Index_Content = string.Empty;
            using (var hc = new HttpClient())
            {
                file_Index_Content = await hc.GetStringAsync(file_Index.download_url);
            }

            if (!file_Index_Content.Contains(msdocName))
            {
                var startPostion = "开放能力\r\n\r\n";
                var lineSymbol   = "\r\n";
                if (file_Index_Content.IndexOf(startPostion) <= -1)
                {
                    startPostion = "开放能力\n\n";
                    lineSymbol   = "\n";
                }

                file_Index_Content = file_Index_Content.Replace(startPostion, startPostion + "   " + msdocName + lineSymbol);

                var data = Encoding.UTF8.GetBytes(file_Index_Content);

                file_Index_Content = Convert.ToBase64String(data);

                var putResult = await client.FilePutAsync(file_Index.path, file_Index_Content, file_Index.sha);

                if (!putResult.IsSuccessStatusCode)
                {
                    var ReasonPhrase = putResult.ReasonPhrase;

                    var ResponseMessage = await putResult.Content.ReadAsStringAsync();

                    log.WriteLine(ReasonPhrase + ":" + ResponseMessage);
                }
            }
            #endregion
        }