# Conventional Commits WG July 15th Guests: * Ben. * Cedric. * Eemeli. * What are folks hoping to get out of this meeting: * Eemeli: is having trouble finding tooling in the ecosystem that meets needs for releases: * hoping to replace some of the lerna tool chain. * figuring out the best starting point. * Ben: would like to get conventional commits to the point where it's a good foundation for building tooling. * Eemeli: would like to get what he's working on back in the ecosystem. * Lots of work for commit lint. Not a super strong opinion towards anything: * has been using it in work at Expo. * believes in the approach. * Show and tell from Ben: * Grammar and AST parser: https://github.com/conventional-commits/parser/tree/main/lib * Library using this approach: https://github.com/googleapis/release-please * release-please is what we've been using for all our stuff at google. * Eemeli: talk a bit about parser: * oddities found in parsing: comma separted #122, #133, #144. ``` fix(my-thing): hello world Fixes #390 this is fixing an issue. hello world. Author: @bcoe" message[5] (1:1-6:14, 0-91) ├─0 summary[5] (1:1-1:27, 0-26) │ ├─0 type "fix" (1:1-1:4, 0-3) │ ├─1 scope[3] (1:4-1:14, 3-13) │ │ ├─0 scope-start "(" (1:4-1:5, 3-4) │ │ ├─1 scope-text "my-thing" (1:5-1:13, 4-12) │ │ └─2 scope-end ")" (1:13-1:14, 12-13) │ ├─2 separator ":" (1:14-1:15, 13-14) │ ├─3 whitespace " " (1:15-1:16, 14-15) │ └─4 text "hello world" (1:16-1:27, 15-26) ├─1 newline "\n\n" (1:27-3:1, 26-28) ├─2 body[3] (3:1-4:13, 28-76) │ ├─0 text "Fixes #390 this is fixing an issue." (3:1-3:36, 28-63) │ ├─1 newline "\n" (3:36-4:1, 63-64) │ └─2 text "hello world." (4:1-4:13, 64-76) ├─3 newline "\n\n" (4:13-6:1, 76-78) └─4 footer[4] (6:1-6:14, 78-91) ├─0 token[1] (6:7-6:7, 84-84) │ └─0 type "Author" (6:1-6:7, 78-84) ├─1 separator ":" (6:7-6:8, 84-85) ├─2 whitespace " " (6:8-6:9, 85-86) └─3 value[1] (6:9-6:14, 86-91) └─0 text "@bcoe" (6:9-6:14, 86-91) ``` * Eemeli what usage is footer? * Ben: we use this for a several things at Google: rollbacks, tracking commits. * Cedric: having something resembling key value pairs. * [git-trailers](https://git-scm.com/docs/git-interpret-trailers). May 7th * Ben * Wes * TODO: let's make an issue to move our meeting time. * Wes has something that comes up on Fridays. * Ben is going to be EST now. * Ben approval to ship randomUUID(). * So now has time to put work into this. * Conventional Commit technical * April 9th * Benjamin * Cedric * Wes * Wes' patch to make our tree a full AST. * [Wes]: I think nesting it in a node is reasonable. * Ben agrees. * https://gist.github.com/bcoe/f2330eae198c5d720fb1c8ed44d73d6a * [ben]: Google continues to double down on Conventional Commits. * LTS becoming a really important need for us. * Wes how tightly tied to semver are we: ``` Auto-generated CL for //google/pubsub:pubsub_public_proto_gen It contains one or more of the following: - sanitized API protos - sanitized OnePlatform service config - gRPC ServiceConfig file(s) (unmodified from source) - generated Bazel BUILD files BEGIN_PUBLIC feat: Add topic retention options. END_PUBLIC ``` * We have a pool of people on our team who reviewd the message format for the first few months. * Working on next version of spec. * v2 of the spec <-- consider standards body. * https://hackmd.io/2Rl1AYyPTJSks5R4KjhlDg <-- we should start fleshing this out. * https://google.aip.dev/ * `DEPRECATION`, similar to `BREAKING-CHANGE` footer: * feature request from angular folks, we keep getting more stakeholders. * Any /[A-Z-]{2}/ <-- this is very English centric. * Wes' tool recommended bump: * https://github.com/conventional-commits/git-recommended-bump * Markdown generation. * https://github.com/googleapis/google-api-nodejs-client/pull/2582 <-- so we can customize PRs like that. * customization is the user need. * https://github.com/googleapis/release-please/blob/a99a5357c0797f9a5651b492ceab9c123216e042/src/manifest.ts#L514 February 26th **Attendance:** * Benjamin. * Cedric. * Wes. * Rolling out a bunch of original tooling; * not using the new parser yet; it was promising and hoping to pick it up soon. * the part with the parser worked well: * Ben: noticing really weird bugs. Conventional Changelog Markdown generation: * order is random depending on operating system (compare-func). * would love to pull in Cedric's markdown implementation at some point in the future. * integration tests for current markdown: https://github.com/googleapis/release-please * Ben: pick a few key tools we need: * bump figuring out. * changelog. * parser. * conventional-commits. * Wes: let's reach out to Daniel Stockman. * Fun monorepo stuff: * https://github.com/googleapis/release-please/pull/803 * Moving towards v2 of the spec: * let's flesh out v2 of the spec: https://hackmd.io/2Rl1AYyPTJSks5R4KjhlDg * could I find someone who's excited to contribute to conventional commits website? * Outstanding work in the parser: * maybe "* " is a bad idea? * inconclusive. * we're still missing some elements in the token: * some tokens aren't in tree. Meeting January 15th 2021 *Attendance:** * Cedric. * Ben. * Wes. * Talk about what standardization continues to look lik * IETF maybe not a good fit. * Wes: pushing on this a little bit: * v1 didn't align very well with some very common practices. * Ben: agrees let's make v2 less likely to change. * Can we find something similar to conventional commits specified anywhere? * Internal adoption: ``` feat: adds v4 UUID to crypto This adds support for v4 UUIDs to the library. fix(utils): unicode no longer throws exception PiperOrigin-RevId: 345559154 BREAKING-CHANGE: encode method no longer throws. Source-Link: googleapis/googleapis@5e0dcb2 feat(utils): update encode to support unicode PiperOrigin-RevId: 345559182 Source-Link: googleapis/googleapis@e5eef86 ``` * Wes we should be careful about not underdefining things. * Ben: what if we enshrine this in our spec. * Wes: maybe it's enough to have this in the companion document. ``` feat: adds v4 UUID to crypto This adds support for v4 UUIDs to the library. * fix(utils): unicode no longer throws exception PiperOrigin-RevId: 345559154 BREAKING-CHANGE: encode method no longer throws. Source-Link: googleapis/googleapis@5e0dcb2 [* ]feat(utils): update encode to support unicode PiperOrigin-RevId: 345559182 Source-Link: googleapis/googleapis@e5eef86 ``` * parser updates. * let's add support for "* ". * Reverts "feat: 93994994" <-- Ben finds this one wonky: * Wes/Ben don't love "Reverts", leave it to people's opinions. * Cedric: considers Revert commits a pain; what are we supposed to do when a breaking change was introduced in a Reverts commits; BitBucket has a different format. * Wes: one argument, if we had it in a spec we could perhaps try to aim for more standardization across vendors. * "(" <-- should be in tree: * CST good. * Moving to v2 of Conventional Commits: * the "spec" spec, is on its own page, i.e., * no tools listed. * no useful tips. * what is it?: * it's the formal grammar. * it's the very small number of symantic tokens we define: * "BREAKING-CHANGE", "!", feat, fix, feat(foo), fix(foo). * how footers work. * how body works. * pages: * really clear lead in on the main landing page. * the formal spec. * some best practices, e.g., here's what angular used. * tools, etc. * Cedric is working on a CHANGELOG on the fly. * Ben: what's the plan for the linter? * Cedric: might start as side project to see if it works as a CST. * Ben: I'm excited to see how this goes. * Wes: it will be very important for the linter that these errors are good. * Cedric: we're not quite there yet, but doesn't think it should be too hard. Next Steps: * thinking about v2 of spec, but don't make PR yet: * Wes: still haven't come up with concrete plan for monorepo stuff: * Let's talk about this topic more before we take a stab at writing a new one pager. * perhaps get one or two guests to join and give us feedback. * Ben: Add "* " token to parser, and make sure that works for GitHub use case. * Full CST: Cedric: not much availability next week, but available after. * Website Work, in support of v2: * Wes: perhaps we can find someone at Netflix. Meeting December 22nd 2020 **Attendance:** * Cedric. * Ben. * Wes. Agenda: * Ben and Cedric sat down and started writing parser: * https://github.com/conventional-commits/parser * https://github.com/syntax-tree/unist <-- the tool kit. * Footer:\n<whitespace>more stuff. * Ben: there might still be some edge cases: * Cedric: there's sometimes post processing in other tools to deal with these edge cases. Ben: perhaps we could formalize some of the post processing steps: * Wes: we could define @ mentions. Ben: Example commit https://github.com/googleapis/google-cloud-go/pull/3391: * Wes: suggested as '---'. Cedric: we should probably support how GitHub is doing it, as a happy path. * Next steps: * Ben: I'd love to get the initial grammar implemented. * Cedric: it won't be a pain if Ben finishes implmenting the grammar. * Cedric: Excited to do a Node refactor. * Everyone: chime on whether you like the node names, etc. * IETF draft proposal vs., ECMA spec. * Ben: was suggesting we rethink the pros a bit. * https://www.ietf.org/standards/process/ * Adoption at Google. * Wes: would be good to have Daniel join. Meeting December 4th 2020 **Attendance:** * Cedric. * Ben. * Proper AST for Conventionl Commits * https://github.com/byCedric/commit-ast-experiment * https://github.com/micromark/common-markup-state-machine * https://github.com/micromark/micromark * unified is the underlying parser. * Action Items: * Ben and Cedric going to play with the parsing tool chain linked above. * Stream parsing broken in newer Node.js versions: * https://github.com/googleapis/release-please/pull/581 * no updates ECMA, haven't done anything for IETF * https://tools.ietf.org/html/rfc4122 * https://www.ietf.org/standards/ids/guidelines/#1 Meeting November 6th 2020 **Attendance:** * Wes Todd (@wesleytodd) * Ben Coe (@bcoe) * update re: ECMA process. * bencoe: maybe wait a couple weeks and send a follow on. * IETF: https://www.ietf.org/rfc/rfc2119.txt * _what do we do with the current licensing?_ * [bencoe] current state of ecosystem: * [14 open issues on conventional changelog]. * [31 open issues on standard-version]. * Wes: * the number of projects in the mono-repo. * Ben: think the conventional changelog is maybe sliced into a few too many pieces. * Wes: I'm used to dealing with lots of repos, find the mono-repo approach hard. * probably only using 3 or 4 directly. * ben: should we consider splitting out some of the most important libraries? * parser perhaps could sit on its own. * which bump could sit own its own. * We: not blocking progress just a hurtle. * supporting multiple scopes: https://github.com/conventional-commits/conventionalcommits.org/issues/302 * feat(module,fs): * cedric: common request for commit lint: * in theory a commit should only touch one part of the code. * module/errors <-- when I'm working on stack trace stuff. * module part of system where source maps are collected. * errors are where they're displayed. * Wes: what are the valid characters. * we need to define the valid characters. * wes: would be nice to collect all these ideas that would be breaking. * Ben: is the scope the component we're touching, or the action that the commit is performing. * Wes: I've sometimes seen both; unless we come up with recommendation. * Cedric: if we allow multiple full conventional commit messages: * this could also also solve this same issue. * Wes: multiple headers could be a better solution because it solves both use cases. * _Plan a new major version eventually._ * what the heck are our tokens for different things, what characters are valid? ---- chore(deps): synced with latest version of protos this is a description of my normal conventional commit message. feat(module): improved error output this is a description of this. hello world. feat(errors): improved error output multiline feat(errors): improved error output muliline Refs: 20222 Signed-Of-By: @wes ---- https://git-scm.com/docs/git-interpret-trailers Ben: aside Wes, can we please use your parser, and actually have a reference implementation for JavaScript. * Cedric: we would also love this for commit lint. * https://github.com/conventional-commits/conventionalcommits.org/issues/294 * https://github.com/conventional-commits/conventionalcommits.org/issues/200 * https://github.com/conventional-commits/meta/pull/6 New Business: * what do conventional commits look like in a mono-repo? ----- * @bycedric, @wesleytodd: hash out parser implmentation? * bencoe@ would really love to pull this into conventional-changelog. * big strict about writing down aspects that are poorly specificed (what are strings? unicode?); TC39 spec defines unicode tokens that work with API. * Unified <-- when building parser. * https://unifiedjs.com/ * https://commitist-7a7qx1zbs.vercel.app/ast/simple * @bencoe: keep trying to poke and prod standards bodies. Meeting October 9th 2020 **Attendance:** * Ben Coe (@bcoe) * Wes Todd (@wesleytodd) * Damiano Petrungaro (@damianopetrungaro) * Cedric van Putten (@bycedric) * Guilherme Hermeto (@ghermeto) * Zeke Sikelianos (@zeke) ## Agenda * Introductions: * what interests you about conventional commits? * Ben Coe: * works at Google/wrote this while I worked at npm. * wrote the document initially at npm for our Enterprise product. * Wes Todd: * Works at Netflix. * Looking at the question of how we can improve the user story for libraries authors. * Trying to put their own release process into place. * has been working on a parser that's more formally to spec. * Damiano: * based in Italy. * writing code for about five years. * started looking into Conventional Commits when they were in a small startup: * and was asking the question of how we can improve workflow for a fast moving team. * combined advice on how to write good commits, with the convention. * knowing what broke something in production; aligned with atomic commits, so that it's easy to roll back. * Working for a unicorn startup "Message Bird". * trying to make conventional commits a thing here as well. * folks aren't adopting it yet on back end. * Guilherme: * Has been using conventional commits for a while now, as the Node.js platform uses it: * there is a deprecated too at Netflix that was reaching the end of its life (_became abandon ware_). * we've been talking for a while. * Cedric: * based in Amsterdam (NL), working on expo (a react native based technology). * was working at incubator with high velocity, which benefited from having more structure. * found conventional commits, and it helped development performance signficantly. * moved to atomic commits. * also introduced commitlint, which a few folks on commitlint (Hannes, Mario, Scott). * Zeke: * works at GitHub on the docs team; used to work with Ben at npm. * we just open sourced GitHub's docs. * somewhere along the line started embracing conventional commits. * what's challenging is it's hard to onboard new people to this idea. * paticularly it's difficult to help folks not release breaking changes appropriately. * decisions we make don't necessarily propagate. * How do we manage issues on Conventional Commits. * Damiano: start with bi-monthly meeting, to start to burn down some issues. * probably we'd be okay to move down to a monthly after that. * something like a TSC? * Gui: good idea but might be problematic as we move to to ECMA; we might need to rethink it in a couple months. * It's up to eveyone on this call to de4cide if we're okay about this. * Wes: can you outline what is needed. * Gui: ECMA has a thing about not allowing just anyone on the governance call, we can't just accept a separate group of delegates. * Wes: would this be resolved by having a formal chartered document for how folks enter and leave. * Gui: we can't have an approval process. * Ben: * maybe call this a steering call? * you show up, you get a vote? * Gui: likes how we're doing it on the web severs framework team: * you can join to by submiting your PR to the list: put people's name in the "Collaborators" list if they ask to be. * Ben: how do we resolve a deadlock. * this is known to happen. * this can be a good reason: it allows us to see everyone's perspective and everyone's point of view. * in ECMA or Node, you can force vote; we shouldn't do this yet as it might specifically hurt our ability to move into ECMA. * Wes: leave it open for now, we'll try to reach consensus; anything that's left open: * self select, and we could potentialy have votes on a call. * Topics: * Standardizing Conventional Commits in Standards Body: * benefits: * Tooling: * easier for tooling to know what they should build against. * e.g., it sounded like semantic release could be into it. * Adoption by other languages: * Gui: lots of push back from Java folks, as an example. * Damiano: this is something I see myself, the risk of introducing something that is too JavaScript specific. * Ben: JSON is a good example of an ECMA standard. * Adoption in general. * challenges: * IP <-- as Ben (not a lawyer) reads the license. * lawyers Ben talked to seemed to be slightly concerened. * Gui: Myles Borins wondered if we could perhaps try something different. * Zeke: is there prior art we could follow. JSON perhaps? * maybe we only have 20 significant contributors? * Ben: non ECMA company contributors: * Gui: Open JS foundation has some contributors; I wonder if we could perhaps do something like this. * domain experts could be permanent invited guests, e.g., Henry from Babel. * Gui: one wrinkle, is invited guests can't technically vote -- but we could create governance that says vote is the last resort for anything, or say that there is no vote. * Ben: how do folks feel about standardizing Conventional Commits? * Damiano: one concern, having the specification only used in some specific areas. * we may just deep hole on some issues we already have. * be careful not to bring just our own perspctive to the table. * Gui: standards body could make it easier to get other languages involved. * Conclusions: * In two weeks, same meeting time?, let's bring some issues to it? * let's move an hour earlier; 9AM PDT. * add labels to issues for meeting. * Invite gregor. * Invite the person doing go library; try to do this each week. * Gui: we'll keep conversation going with ECMA.