{"id":23443335,"url":"https://github.com/swiftggteam/gghexo","last_synced_at":"2025-04-09T22:27:14.592Z","repository":{"id":1597738,"uuid":"40290853","full_name":"SwiftGGTeam/GGHexo","owner":"SwiftGGTeam","description":"打造国内第一 Swift 译文站","archived":false,"fork":false,"pushed_at":"2023-08-26T12:20:12.000Z","size":56178,"stargazers_count":100,"open_issues_count":12,"forks_count":17,"subscribers_count":45,"default_branch":"stage","last_synced_at":"2025-04-05T17:02:01.482Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://swift.gg","language":"Stylus","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SwiftGGTeam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-08-06T07:25:33.000Z","updated_at":"2024-12-27T01:57:13.000Z","dependencies_parsed_at":"2023-07-05T20:46:49.379Z","dependency_job_id":"2e260cc2-4f50-45a0-9cbb-f5abd9cfa680","html_url":"https://github.com/SwiftGGTeam/GGHexo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwiftGGTeam%2FGGHexo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwiftGGTeam%2FGGHexo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwiftGGTeam%2FGGHexo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwiftGGTeam%2FGGHexo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SwiftGGTeam","download_url":"https://codeload.github.com/SwiftGGTeam/GGHexo/tar.gz/refs/heads/stage","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248121907,"owners_count":21051202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-23T18:17:45.409Z","updated_at":"2025-04-09T22:27:14.567Z","avatar_url":"https://github.com/SwiftGGTeam.png","language":"Stylus","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GGHexo\n\nmaster deploy status:![master branch](https://travis-ci.org/SwiftGGTeam/GGHexo.svg?branch=master)\n\nstage deploy status:![stage branch](https://travis-ci.org/SwiftGGTeam/GGHexo.svg?branch=stage)\n\n打造国内第一的 Swift 译文站。\n\n## 使用流程\n\nclone 项目\n\n    git clone git@github.com:SwiftGGTeam/GGHexo.git\n\n拉取子项目\n\n    cd GGHexo\n    git submodule init\n    git submodule update\n\n安装依赖  \n\n    (npm install -g yarn)\n    yarn install\n\n本地查看效果 \n\n```shell\n# src 下没有新添加的文章时\nyarn run hexo s\n# src 下有自己新添加的文章\n./preDeploy.sh local\n```\n\n## 翻译提交流程\n\n1. 在 github 网页使用 [create new file](https://github.com/SwiftGGTeam/GGHexo/new/stage/src) 在 src 目录下创建要翻译的文章，文件命名请用以下格式：`20170903_swift-weekly-brief-75.md`，其中`swift-weekly-brief-75`对应md文件中permalink字段。内容格式按照 `书写规范以及 demo`下的例子来。然后创建 PR。\n2. 提交 PR 申请合入到 stage 分支，并根据大家的 comment 进行修改。\n3. PR 合入 stage 后，触发 travis build，将网站部署到 [stage 环境](http://pages.swift.gg)，部署在 swiftggteam.github.io 这个项目的 master 分支下)，可以通过 readme 顶部的 status image 来查看状态，也可以通过 [commits](https://github.com/SwiftGGTeam/GGHexo/commits/stage) 页面下的每个 commit 后面的对勾来查看构建状态。\n4. 在 stage 环境确认无误后，将 stage 合入到 master 分支，随后 travis ci 会将静态资源部署到 swiftggteam.github.io 项目的 aliyun-pages 分支，aliyun 部署的 crontab 脚本隔一段时间会拉取 aliyun-pages 分支的静态资源。travis.ci 同时还会将自动生成的其他平台运营用的 md 文件提交到 master 分支。\n5. 如果本次提交不包含网站相关的变更，比如 readme.md 的变更，可以在提交的最后一个 commit 中加入 `[skip ci]`，详情参考 [Skipping a build](https://docs.travis-ci.com/user/customizing-the-build#Skipping-a-build)\n\n## 自动化部署做的一些事\n\n###  自动提取图片（暂停使用）\n\n**暂时停用。之前服务器在香港，可以下载转存一些无法直接访问的图片。目前服务器在北京阿里云，和用户直接加载原图片 URL 没有区别。**\n\n在项目根目录下执行 `python 2-extractImgs.py` 或者 `python 3-extractImgs.py`，取决于你的 Python 版本。\n\n脚本会自动遍历 `_posts` 下的文章，提取其中的图片地址并下载到`jacman/source/img/articles`中对应文章的目录，然后更新文章中的图片链接。\n\n注意：\n\n- 文章头部必须包含 `permalink`\n- 图片链接必须正确\n\n以上两条如果违反会直接报错，请根据错误信息修改对应文章，然后再次执行即可。\n\n### 文件头修改\n\n项目根目录下执行 `babel-node generatePosts.js` 就会在 `_posts` 中生成最终文件。主要做了两件事：\n\n1. 把作者原文日期等内容换成统一的头部，以及添加来源尾部\n2. 过滤掉一些没有授权的文章\n\n#### md 文件头示例\n\n```\ntitle: \"Swift 函数式编程实践\"\ndate: 2015-09-04\ntags: [Swift]\ncategories: [harlan kellaway]\npermalink: swift-functional-programming-intro\n\n---\n原文链接=http://harlankellaway.com/blog/2015/08/10/swift-functional-programming-intro/\n作者=harlan kellaway\n原文日期=2015-08-10\n译者=shanks,mmoaay\n校对=numbbbbb\n定稿=小锅\n\n正文......\n```\n\ntitle 是标题，date 是发布日期，tag 是标签，categories 是分类（我们填写来源网站名），permalink 是最终生成的 URL。\n\n下面的应该不用解释了，需要注意的是文字要写对，比如“链接”不要写成“连接”。\n\n译者、校对和定稿都支持多人，用英文逗号分隔即可。\n\n### 统计\n\n统计脚本是 `generateStat.js`，使用 ES6 语法编写，执行方法：\n\n执行 `babel-node generateStat.js`，会自动生成 `source/stat` 下的 `md` 文件\n\n### 运营版本生成\n\n由于在各个网站发文章都需要修改文章，因此编写脚本自动生成。\n\n目前运营目标：\n\n- 简书\n- 微信公众号\n- CSDN（发邮件给 txy，不需要生成）\n- CSDN 极客头条（直接投稿链接，不需要生成）\n\n通用处理：\n\n- 去掉头部 hexo 信息\n- 去掉原文链接\n- 去掉尾部二维码\n- 图片链接换成完整 URL\n- 第一行加文章名称，方便复制到微信和简书的标题栏，使用的时候删除本行\n\n简书特殊要求：\n\n- 第二行加引用，引流到公众号\n\n微信公众号特殊要求：\n\n- 第二行加原文链接，方便复制到原文输入框，使用的时候删除本行\n\n使用：\n\n`babel-node generateShareMD.js`\n\n生成好的文章在 `share` 目录下，每篇文章一个文件夹，用 `permalink` 命名文件夹，用运营目标命名具体的 `md` 文件\n\n## 其他信息\n\n### google 分析\n\nID：UA-66150920-1\n\n### backup 注意事项\n\n每到新的一年，执行一次 `backupPost.js`，把上一年的文章自动放入 /backup/YYYY，否则生成文章会报错。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftggteam%2Fgghexo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswiftggteam%2Fgghexo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftggteam%2Fgghexo/lists"}