从 Github 问题中生成更新日志?

23

有没有一种方式可以从Github问题自动生成变更日志?

理想情况下,我希望能够指向一个已关闭的里程碑,并生成一个包含它们标题的已关闭问题的纯文本列表或者更好的是一个链接到这些问题和问题的标题的标记列表。


你可以尝试使用 https://github.com/onmyway133/github-changelogs-maker。 - onmyway133
8个回答

15
您可以尝试使用Github-Changelog-Generator。(我是项目的作者)该工具可从标签和已合并的拉取请求生成更改日志。此脚本还支持GitHub问题。
此更改日志是由此脚本生成的。CHANGELOG.md 示例:

更改日志

1.2.5(2015-01-15)

完整更改日志

已实现的增强功能:

  • 使用里程碑指定修复bug的版本#22

已解决的缺陷:

  • 当尝试为没有标签的存储库生成日志时出错#32

已合并的拉取请求:

  • 使用小写的“pp”包含PrettyPrint类#43 (schwing)

  • 通过命令行选项支持企业级 GitHub #42 (glenlovett)


  • 11
    通过Git,你可以将日志运行到漂亮的打印中,生成类似于变更日志的HTML页面。这并非专门针对Github,而是通用的方法。
    来源:https://coderwall.com/p/5cv5lg
    git log v2.1.0...v2.1.1 --pretty=format:'<li> <a href="http://github.com/jerel/<project>/commit/%H">view commit &bull;</a> %s</li> ' --reverse | grep "#changelog"
    

    2
    有趣的替代方案,比我的答案更实用。+1 - VonC
    @james-mcmahon,这不是一个很好的解决方案,特别是对于拥有自己问题跟踪器的GitHub来说,它可以为您提供生成更好的变更日志的能力。根据这篇文章,将提交放入变更日志中是一个不好的例子:http://keepachangelog.com/。 因此,请查看我下面的答案,它正好解决了你所问的主题。 - skywinder

    4
    你可以使用GitHub API获取与给定里程碑相关联的问题列表。 例如:
    curl https://api.github.com/repos/<user>/<project>/issues\?milestone\=1\&state\=closed
    

    <user><project>替换为用户名和项目名称,这将返回一个具有id为1的里程碑的所有已关闭问题的json列表。然后,您可以使用脚本提取您感兴趣的信息。以下是一个打印问题列表作为重构文本的Python示例:

    import json
    
    with open("issues.json") as of:
        data = json.load(of)
    
    for issue in data:
        t = issue['title']
        n = issue['number']
        url = issue['html_url']
        print "* %s [`Issue %s <%s>`_]" % (t, n, url)
    

    有趣的方法,比我的答案更详细。+1 - VonC

    3
    看看下面的工具是否适合您:github-changes
    披露:我是该工具的作者。

    1
    终于!非常感谢@idefine,这正是我想要已久的 - 通过解析适当格式化的版本历史记录生成发布说明。是否有匹配的Git-pre-commit脚本来确保格式得以维护?虽然很容易创建,但我喜欢重复使用轮子 :)。 - AnneTheAgile
    另外,我想知道“问题”是否也包括“拉取请求”,在Github中它们看起来也像票据。 - AnneTheAgile
    1
    @AnneTheAgile 是的,它将会提取拉取请求。我还没有编写预提交脚本,但是你可以在这里看到我使用的release.sh:https://github.com/lalitkapoor/github-changes/blob/master/release.sh - Lalit Kapoor

    2

    1
    不是通过GitHub直接实现的:这将是一种您可以采取的钩子,它将基于命名约定或评论约定,而这些约定可能符合您的项目。
    即使使用问题标题也不总是生成有意义的变更日志的可靠方法,除非您审核并编辑项目的每个问题标题(如有必要)。

    换句话说,这非常依赖于您如何管理项目,并且不容易推广到所有 GitHub 存储库。
    我在一个非常相似的问题 "Publish a project release (binary/source packages) on Github?" 中也这样说过。


    1

    除了使用第三方解决方案(或者像generate-changelog这样的 GitHub Action),您很快可能在 2021 年第三季度从 GitHub 获得一个原生功能:

    软件生命周期中最重要的部分之一是发布代码供他人使用。GitHub Releases通过提供引人注目且自动化的发布说明,使这一过程变得更加容易。创建发布时,您可以单击一个按钮自动生成发布说明。如果您想要更多自定义内容,可以使用REST API获取生成的发布说明并将其集成到现有的发布流程中。我们还希望确保这些发布说明在维护者分享时看起来很棒,并使它们更易于发现。我们对发布进行了完全重新设计,使项目公告看起来令人惊叹。我们正在推出这些发布以增加发现。我们还正在改进发布的开放图形数据,以便在GitHub平台之外共享时同样美观。我们的首要目标是让维护者轻松创建出色的发布说明,以便更多人能够发现维护者正在做的惊人工作。通过最小的努力,许多项目将能够从详细的发布说明中获益。对于那些花费更多时间编写编辑内容的维护者,我们的目标是释放他们目前用于维护自定义基础架构和编译变更日志的时间,以便他们专注于为客户提供最重要的内容,即高质量的编辑内容。我们的另一个目标是确保发布说明看起来很棒,并且维护者和开发人员都会对其感到兴奋。新的发布UI将能够通过功能预览启用。在发布创建UI中,将有一个新的按钮,可以从任何标记生成发布说明。可以通过.github/release.yml配置生成的说明。一个新的REST API将允许客户方便地生成说明,以进一步自动化和定制GitHub操作的体验。

    0

    最近我参与了一个 jQuery 插件的开发,它使用 GitHub 问题跟用户直接沟通应用程序更新。该仓库可以在这里找到 https://github.com/uberVU/github-changelog

    使用方法非常简单:

    $(function() {
      var $demoChangelog = $('.demo-changelog');
    
      //call the plugin on a dom none
      $demoChangelog.changelog({
        //give it a repo to monitor
        githubRepo: 'uberVU/github-changelog-playground',
      });
    
      //manually check for new closed issues
      $('.demo-button').on('click', function(e) {
        e.stopPropagation();
        $demoChangelog.changelog('checkForUpdates');
      });
    });
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接