Hola,
I would like to use this as a discussion for a set of proposals that I think would enhance user workflows for both contributors and screeners. This does not include a challenge to the CA signing process. I've seen it come up in recent contributor discussions for other OSS projects so I'd like to be explicit: I have zero interest in this thread being used as a forum to debate the CA as I both understand and agree with it. Phew now that's outta the way... :)
While I would eventually like to see Clojure accept PR's as common place I very much understand it's not going to happen overnight. I do however think there's a few changes/integrations that could subtly enhance the broader user experience for contributors and screeners alike.
Those changes are:
- Convert README.txt to README.md.
- Add Jira service to GitHub.
- Publish Jenkins build status to GitHub.
- Slack build notifications.
I'm sure there are other integrations/changes that I'm not thinking of but these are the ones that immediately come to mind and would aid in discoverability and workflow. I'd be willing to assist in these changes by either providing step-by-step documentation or doing some of the work. Given some of the access that would be required is near and dear to the heart of Clojure I won't be offended if the latter offer is turned down at this point.
## Convert README.txt to README.md
Benefits:
- Provide ability to support some of the other recommendations below.
- Improved styling/readability.
## Add Jira service to GitHub
Benefits:
- Cross-link between Jira and GitHub for related commits.
- Should PR's be used it would make it easier for Screeners to track changes both in Jira and via GitHub.
## Publish Jenkins build status to GitHub
Benefits:
- Cross-link between Jenkins and GitHub for related commits.
- Visibility on a per-commit level of the build status for that commit.
- Provide high-level build status via "badges" located in the README (would require migrating README.txt to README.md).
An example can be seen here for what commit-level build status looks like in GitHub (albeit linked to Travis CI) https://github.com/nfisher/mig31/commits/master.
Note the Green checkmarks for success, red x for failed, and yellow circles for other. Those status link through to the specific build on the CI box.
### Supporting Material
- https://wiki.jenkins.io/display/JENKINS/Embeddable+Build+Status+Plugin
## Slack build notifications
Benefits:
- Increased visibility of CI build status (e.g. create channel in Clojure slack - #clojure-builds).
- provides another avenue to notify developers of CI build status.
### Supporting Material
- https://github.com/jenkinsci/slack-plugin
## Summary
None of the above would require a change to the current Jira patch workflow but I think it would enhance visibility and cross linking between GitHub, Jira, and Jenkins. Something which I expect would be of benefit to everyone.
# Accepting PR's
I expect at a minimum two things would need to happen before accepting PR's becomes common place:
1) understanding the screeners current workflow to ensure any changes are a net benefit. 2) create a persuasive argument to use PR's as a new code review workflow that incorporates and improves on the existing Screeners workflow.
Accepting PR's is predicated on GitHub being the source of truth and not a read-only shadow repo to a private repo hosted by Cognitect.
Given GIT is a DVCS I could see ways of making it work but it would be outside the commonly accepted PR workflow. This would only be a concern if GitHub is a shadow repo/mirror. Can anyone of the Screeners comment if that is that the case?
Should there be a desire/willingness to shift to accepting PR's I would also suggest these additional changes:
## PR Builder
This would automatically build PR's giving Screeners and Contributors alike confidence that nothings been broken.
Some consideration would need to be given to how the build Infra handles PR's as Jenkins doesn't have a great story regarding build isolation and malicious PR's could be used to impact the CI box in various ways. There's two approaches I could see to provide isolation of CI builds:
1. use docker containers.
2. transition Clojure, ClojureScript, etc to Travis CI or Google Container Builder in a way that supports all current Java builds.
### Supporting Material
- https://wiki.jenkins.io/display/JENKINS/GitHub+pull+request+builder+plugin
- https://github.com/jenkinsci/docker-plugin
- https://cloud.google.com/container-builder/
## PR Documentation
Documentation to get Contributors/Screeners up to speed on using a GitHub based code review process.
----
All of the above is probably better done as a Wiki but I don't appear to have access at the moment and haven't tracked down what I need for access.
--
You received this message because you are subscribed to the Google Groups "Clojure Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev...@googlegroups.com.
To post to this group, send email to cloju...@googlegroups.com.
Visit this group at https://groups.google.com/group/clojure-dev.
For more options, visit https://groups.google.com/d/optout.
So it would be a good idea
to once and for all get rid of those white spaces and other problematic stuff like indentations on the source code.
When you create a patch, you can ignore all whitespace differences, which helps to some extent (see the git format-patch docs for the various options).
Part of me feels like saying “What? Wait! There’s more than one way to format Clojure code??” 😊
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
--
#!/bin/sh -eu # example usage: ./pr.sh 72 PR_NUM=$1 curl -L "https://github.com/clojure/clojure/pull/${PR_NUM}.patch" \ -o "pr${PR_NUM}.patch"
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev+unsubscribe@googlegroups.com.
To post to this group, send email to cloju...@googlegroups.com.
Visit this group at https://groups.google.com/group/clojure-dev.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Clojure Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev+unsubscribe@googlegroups.com.
To post to this group, send email to cloju...@googlegroups.com.
Visit this group at https://groups.google.com/group/clojure-dev.
For more options, visit https://groups.google.com/d/optout.
--- sent from my mobile
--
You received this message because you are subscribed to the Google Groups "Clojure Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev+unsubscribe@googlegroups.com.
Further to the links provided by Andy, I would also point to the recently revamped Clojure web site that has further enshrined the contribution process: https://clojure.org/community/contributing
This has come up over, and over, and over, and over again over the years. It’s Rich’s project – let’s just respect his choices on how to contribute to it. The process is clearly documented and not onerous. Clojure is critical infrastructure for a number of companies these days. Rich and the Cognitect team take great pains to ensure that it remains stable at all times – to the point where running alpha and beta builds in production is “safe” and upgrades are “easy”, and we can all rely on Clojure for our livelihood. The contribution and review process are, in large part, responsible for that, as far as I’m concerned.
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev...@googlegroups.com.
To post to this group, send email to cloju...@googlegroups.com.
Visit this group at https://groups.google.com/group/clojure-dev.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Clojure Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev...@googlegroups.com.
To post to this group, send email to cloju...@googlegroups.com.
Visit this group at https://groups.google.com/group/clojure-dev.
For more options, visit https://groups.google.com/d/optout.
----- sent from my mobile
You received this message because you are subscribed to the Google Groups "Clojure Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev...@googlegroups.com.
To post to this group, send email to cloju...@googlegroups.com.
Visit this group at https://groups.google.com/group/clojure-dev.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Clojure Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure-dev...@googlegroups.com.
To post to this group, send email to cloju...@googlegroups.com.
Visit this group at https://groups.google.com/group/clojure-dev.
For more options, visit https://groups.google.com/d/optout.
Nathan,
I’m not going to address all your points (I’m not entirely sure what you mean by some of them anyway) but I will observe that I’ve been an open source software developer across a range of technologies for about 25 years now. The projects I’ve contributed to have had a range of processes from “nothing” to heavily structured workflows and from small libraries to fairly large systems (Mono and OpenOffice, for example). Many have been covered by paper-based Contributor Agreements and some have required very specific formats and processes for code submission.
Many newer developers have only known GitHub as an OSS ecosystem and, yes, GitHub has helped casual OSS flourish. I don’t want to sound like one of “The Four Yorkshiremen” but that doesn’t mean it’s automatically an improvement nor a one-size-fits-all system…
In the Clojure world, I maintain a couple of the Contrib projects that operate under the CA/JIRA/patch process and I also maintain a number of projects on GitHub that operate under the PR process. I’ve also contributed to both types of projects. So I’ve seen this from both sides, in both types of projects.
Here are a few of your points I do, specifically, want to respond to:
An OSS developer is a difficult and undervalued role don't make it unnecessarily difficult
Remember that there are two groups of OSS developers and they’re not inherently equal: there’s the group that runs the project and there’s those folks in the broader community that contribute. For the folks running the project, they spend a lot of their time on the code, documentation, tooling, whatever. They have a right – and a reasonable expectation – that their role is not made difficult by outside contributors. They determine how the project is run to best suit their needs, they determine the contribution process, they determine guidelines for code that is submitted, and so on. In addition to all the work they do, planning, documenting, building, and testing the features of the project, they also have to deal with bug reports and enhancement requests. Bug reports are rarely accompanied by small, self-contained, complete examples so reproducing a reported bug can be a time-consuming process. Enhancement requests may or may not fall within the project’s goals so there is often a justification process required when they reject an enhancement, and they often come without tests and without documentation. I can tell you, as a long-time project maintainer, that some community members get really bent out of shape when their bug report is dismissed for a lack of a repro case or their enhancement is rejected as not in line with the project goals! When asked for tests or documentation updates to accompany their enhancement request, a common response is “Sorry, I don’t have time for that” and they expect the project team to do that work for them. That all means that the core project team can get dragged into public flame wars over how they run a project. That can be extremely frustrating and time-consuming and does no one – either on the project team or in the broader community – any good at all.
Points 3, 4, 5, and 6 re: “slowness”
As I said in a previous post, many of us value Clojure’s stability for our critical production infrastructure. My company has about 75,000 lines of Clojure and we regularly run prerelease builds in production so that we can leverage new features as they are being developed and made available in alpha and beta releases. We’re able to do that because the core Clojure team are extremely careful about what they change and what they add. They care about the design of features, they care about the language’s overall coherence, and they care about performance and robustness. That takes time. Do they make mistakes sometimes? Sure, but more often those mistakes come from rushed decisions (and I’m talking about large, critical projects in general in this case: rushed decisions are usually the ones that lead to changes that many people consider mistakes in hindsight!).
One of the great things about Clojure – about a Lisp – is that the core language is small and very powerful so folks can easily build new “language features” themselves using functions and macros. At World Singles we have a worldsingles.clojure.extensions namespace with a handful of functions that we’d love to see in core but we know are unlikely to be accepted. That’s fine. We can treat them just like core functions by referring them into our application namespaces. We all have the power to extend Clojure to suit our needs. Many things that would need to be built-in features in other languages can be libraries in Clojure (core.async is a stunning example of this), and those libraries can move at a different speed, and have different contribution processes if they want.
Ingroup in terms of OSS can be reinforced by contribution in filling a community need
There are thousands of projects out there that Clojurians can contribute to. There are community-run documentation sites that accept PRs without any ceremony and even sites that can be directly edited by the community (the examples on ClojureDocs, for instance). The reality is, however, that the number of actual contributors is tiny compared to the size of any community. Then there are people who complain about the contribution processes on projects but don’t contribute even when the process is made simpler (and before anyone says #notallcomplainers – be honest: there is, in every community, a vocal group of folks who kvetch about how the project is run and that’s the totality of their “contribution”).
An example I like to bring up in discussions like these is the clojure.java.jdbc documentation. It used to be in the GitHub repo with the code. I had a steady stream of complaints about how “ridiculous” it was that contributing to documentation required both a signed CA and a JIRA-based patch process. So I moved it all to the clojure-doc guides site instead, where anyone can contribute changes via simple Pull Requests with no CA needed. How many of those complainers do you think have contributed to that documentation since then?
So, forgive me for being less than sympathetic when this topic comes up (and thank you for reading this far!). 😊
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
Many newer developers have only known GitHub as an OSS ecosystem and, yes, GitHub has helped casual OSS flourish. I don’t want to sound like one of “The Four Yorkshiremen” but that doesn’t mean it’s automatically an improvement nor a one-size-fits-all system…
In the Clojure world, I maintain a couple of the Contrib projects that operate under the CA/JIRA/patch process and I also maintain a number of projects on GitHub that operate under the PR process. I’ve also contributed to both types of projects. So I’ve seen this from both sides, in both types of projects.
Here are a few of your points I do, specifically, want to respond to:
An OSS developer is a difficult and undervalued role don't make it unnecessarily difficult
Points 3, 4, 5, and 6 re: “slowness”
As I said in a previous post, many of us value Clojure’s stability for our critical production infrastructure. My company has about 75,000 lines of Clojure and we regularly run prerelease builds in production so that we can leverage new features as they are being developed and made available in alpha and beta releases. We’re able to do that because the core Clojure team are extremely careful about what they change and what they add. They care about the design of features, they care about the language’s overall coherence, and they care about performance and robustness. That takes time. Do they make mistakes sometimes? Sure, but more often those mistakes come from rushed decisions (and I’m talking about large, critical projects in general in this case: rushed decisions are usually the ones that lead to changes that many people consider mistakes in hindsight!).
One of the great things about Clojure – about a Lisp – is that the core language is small and very powerful so folks can easily build new “language features” themselves using functions and macros. At World Singles we have a worldsingles.clojure.extensions namespace with a handful of functions that we’d love to see in core but we know are unlikely to be accepted. That’s fine. We can treat them just like core functions by referring them into our application namespaces. We all have the power to extend Clojure to suit our needs. Many things that would need to be built-in features in other languages can be libraries in Clojure (core.async is a stunning example of this), and those libraries can move at a different speed, and have different contribution processes if they want.
Ingroup in terms of OSS can be reinforced by contribution in filling a community need
There are thousands of projects out there that Clojurians can contribute to. There are community-run documentation sites that accept PRs without any ceremony and even sites that can be directly edited by the community (the examples on ClojureDocs, for instance). The reality is, however, that the number of actual contributors is tiny compared to the size of any community. Then there are people who complain about the contribution processes on projects but don’t contribute even when the process is made simpler (and before anyone says #notallcomplainers – be honest: there is, in every community, a vocal group of folks who kvetch about how the project is run and that’s the totality of their “contribution”).
An example I like to bring up in discussions like these is the clojure.java.jdbc documentation. It used to be in the GitHub repo with the code. I had a steady stream of complaints about how “ridiculous” it was that contributing to documentation required both a signed CA and a JIRA-based patch process. So I moved it all to the clojure-doc guides site instead, where anyone can contribute changes via simple Pull Requests with no CA needed. How many of those complainers do you think have contributed to that documentation since then?
So, forgive me for being less than sympathetic when this topic comes up (and thank you for reading this far!). 😊