Hi Ashley and all,
I just read this through and have an initial summary, which I want to
capture before I go read and reply to any specific inline items, thus
please pardon the top-post.
What I read you proposing is we take the logic for "what is draft" and
"what is ready to publish" out of GitHub, and make it metadata for our
publishing tool to use.
We've identified that GitHub isn't really a documentation or book
publishing workflow tool, the needs of code and content are different
here and it shows.
By contrast, the publishing tools do have content workflows in mind, and
have the idea of draft/publish built in for us.
On the face of it, moving the logic to the publishing tool seems like
quite a good solution.
On 8/4/20 8:57 AM, Ashley Nicolson wrote:
Just following up from our discussion point, from the 30th July weekly call, on making a
decision on the repo’s workflow. We are looking to come to a decision on the definition
and implementation from the initial PR to tagging and releasing. I wanted to highlight a
few points we all agreed on during that weekly call:
• We want the ‘main’ branch (will be renamed from the previous ‘master’) to be hub
of activity and the default branch of the repo.
• We want authors initial contributions to be merged into the repo as soon as
possible rather than waiting for the PR to be ‘perfect’.
• We want to tag releases (if possible) to indicate versions of the guidebook e.g.
1.99 or 2.0
So I experimented a bit the past nights and discovered a few things:
• tags are snapshots of a branch’s history, not a selection of files but the tagging
of a particular commit. This mean ALL files (if there is no static website generator at
works here) will be included, some of which could be unpolished chapters.
• We don’t need to use the GitHub publish feature, tags are visible on the
‘releases’ page [https://github.com/samus-aran/super-book-1/releases
] but if we use tags
for ‘development’ stages then it would be better to deem “releases” as a major release of
I have created a repo named “super-book-1” which the ‘main’ branch is the one I merge all
my edits into and my ‘publish’ branch is what I would deem as the finished product.
If I tag my main branch v1.5 then that will include my draft content:
GitHub automatically creates
these assets if you’ve tagged a commit.
Since this tag I’ve created a new file/commit which I pushed up to ‘main’ but I also
cherry picked to the publish branch!
Now, unfortunately with selective cherry picking we are picking out commits not files
which leads to the new ‘publish’ branch only having 1 file (the one commit I selected).
I wouldn’t wish my worse enemy to have to cherry pick all the files we ‘deem ready’ for
publish without some sort of identifier on the page itself. Without it we are just combing
the ‘since modified’ between tags without confirmation which page is ready for which
So what I suggest at least is we start to identify on the pages themselves (not just
labels on their issues or PRS) what is their current state. This state could simply be
I also think we should consider what tool we would use to publish the site itself and
whether we need to use an off the shelve static website generator or need to make our own
to handle releases.
Depending on the tools we use to ‘publish’ the repo we can utilise the static generator’s
own filtering to not publish pages if the page meta data states ‘draft’. Examples of these
◦ Hugo: Draft, Future, and Expired Content
◦ Jekyll: _drafts folders or draft:true
Alternatively we can generate the publish branch ourselves by gathering all the
‘modified’ files since a tag or even branch so we can identify we want “these, these and
these” files if they have been since updated from the last release.
zip modified-files.zip $(git diff --name-only publish..main –diff-filter=ACMRT)
This will generate a zipped folder of all the files that have been since modified so at
least we can see the differences between a previous release to now (and also release it as
a asset as another publishing option). Note here, there is a quirk with deleted files but
I know a workaround for this also if we decide to need to do a manual comparison.
In our scenario, we want to selectively choose only the files that aren’t draft and merge
them into the publish branch. In our example that would be all the chapters except
chapter-4… so that would be crawling through those files and gathering all the commits (if
we want to retain the commit history) and cherry picking them (or squashing them) into our
publish branch. It’s doable, but prone to human error. I’ll be honest, I haven’t explored
re-basing or am I an expert in git but I feel git isn’t the right tool for these bulk
selection of files.
So long story short it can be done but I think that having the right publishing tool that
would just simply generate the website (or gather the data) based on each chapter’s
metadata would be the quickest and easiest way for us. This will allow us also to ‘tag’
based on a folder directory or ‘publish’ branch which just stores the published files.
Aside from that static website generator discussion we can have a quick win and identify
that a page is ‘draft’ in it’s metadata similarly to what we do with ‘authors’ and
‘updated’. We don’t need any more statuses than that i.e. if it has no state then it’s
Conclusion, I’m not further forward on a suggestion of the right workflow (beyond using
'main' branch and status draft ) without knowing how we release a complete product
but only provided ‘there is a way’ for either and the details can always be ironed out.
I've asked other OS projects for advice on their documentation process, so I'll
update if there is more that could help.
Contrib mailing list -- contrib(a)theopensourceway.org
To unsubscribe send an email to contrib-leave(a)theopensourceway.org
Karsten Wade [he/him/his]| Senior Community Architect | @quaid
Red Hat Open Source Program Office (OSPO) : @redhatopen