Hey everyone,
Last month, I mentioned that I was going to start working on automated
website builds for Calcite and its sub-projects. I have completed most
of the work but am current stuck on how to trigger them.
The commits are currently in this branch:
https://github.com/apache/calcite/tree/test-site
The jenkins job is here: https://builds.apache.org/job/calcite-site/
First off, here are my proposed changes to the way websites are built:
1. Force the Jekyll build environment/docker image to use UTC as its
default timezone:
https://github.com/apache/calcite/blob/test-site/site/_config.yml#L58
and
https://github.com/apache/calcite/blob/test-site/site/docker-compose.yml#L33
This allows us to have a definite reference point to calculate the dates
for news items. I think UTC is a pretty "neutral" timezone compared to
other ones and it's often much easier for people to calculate the date
mentally as we tend to know how many hours ahead or behind UTC we are in.
2. Allow publication of future
posts:https://github.com/apache/calcite/blob/test-site/site/_config.yml#L56
When releasing avatica and avatica-go, I often find it annoying to have
to wait for a certain time before building and publishing the release
item (for it to show up) due to the release date. I think if the news
item is published a couple of hours earlier, not much harm is done,
considering that if we have automated website builds in place, it would
be quite annoying to have to push another commit and have it build to
show up.
3. Add a site branch for calcite-avatica and calcite-avatica-go. The
avatica and avatica-go sites don't tend to get updated all that much. We
usually just push it, along with the news item after a release. However,
there may be some commits that make changes to the documentation on the
site as part of a PR and we do not want to build the site from master.
If we build when the repository is tagged, the news item won't be
published as it's committed after the tag's commit. Therefore, we should
have a site branch (like calcite) for those 2 repositories where
everything on site is build immediately, and after a release, the RM
should even the master and site branches.
4. Build triggers:
- For Javadocs (Calcite and Avatica) trigger and build when a final
version is tagged.
- Build the site branch (Calcite, Avatica and Avatica Go) every time a
new commit is added.
5. For the calcite-site repository, we need to push the changes to the
`asf-site` branch and ask infra to set gitpubsub to that branch. The
reason for this is that the git credentials on the gitwebsites build
nodes can only push to a branch called `asf-site`.
Please let me know what you guys think of these proposals.
Problem:
So, the build works correctly and I have verified this using the Jenkins
job. However, when it comes to triggering the jobs, it seems to not be
working correctly. My memory is a bit hazy as I last worked on this a
few weeks ago, but if I am just triggering the build on a push to the
`test-site` branch, everything works correctly. However, once I try to
get it to trigger on a tag, sometimes it doesn't trigger and sometimes,
it just skips all the builds in the Jenkins pipeline.
I think Jenkins is a much more complex beast than I've anticipated and I
currently don't have enough bandwidth to dig into its internals. Could
someone who knows more about Jenkins find some time to look into it?
Another solution might be to use an external CI such as Travis (which is
easier to configure), but I am not sure how happy INFRA would be with
putting the git credential as a secret on those services. There is
currently some general discussion for external CI services on the builds
list here:
https://lists.apache.org/thread.html/af52e2a3e865c01596d46374e8b294f2740587dbd59d85e132429b6c@%3Cbuilds.apache.org%3E
Francis