asfyaml/feature/jekyll.py (50 lines of code) (raw):
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import strictyaml
from asfyaml.asfyaml import ASFYamlFeature
import requests
# Jekyll website builds via CI2
class ASFJekyllFeature(ASFYamlFeature, name="jekyll", env="production", priority=4):
schema = strictyaml.Map(
{
strictyaml.Optional("whoami"): strictyaml.Str(),
strictyaml.Optional("target"): strictyaml.Str(),
strictyaml.Optional("theme"): strictyaml.Str(),
strictyaml.Optional("notify"): strictyaml.Str(),
strictyaml.Optional("outputdir"): strictyaml.Str(),
}
)
def run(self):
"""
Jekyll auto-build. Sample entry:
jekyll:
whoami: applicable branch (optional; 'asf-site' not allowed)
target: branch (optional)
theme: name (optional, default: 'theme')
notify: recipients (optional)
outputdir: dirname (optional, default: 'output')
"""
# Don't build from asf-site, like...ever
ref = self.instance.branch
if ref == "asf-site":
print("Not auto-building from asf-site, ever...")
return
# If whoami specified, ignore this payload if branch does not match
whoami = self.yaml.get("whoami")
if whoami and whoami != ref:
return
# Get target branch, if any, default to same branch
target = self.yaml.get("target", ref)
# Get optional theme
theme = self.yaml.get("theme", "theme")
# Get optional outputdirectory name, Default 'output'
outputdir = self.yaml.get("outputdir", "output")
# Get notification list - TODO: fix to reuse the old default git recipients
pnotify = self.yaml.get("notify", f"commits@{self.repository.hostname}.apache.org")
payload = {
"method": "force",
"jsonrpc": "2.0",
"id": 0,
"params": {
"reason": "Triggered jekyll auto-build via .asf.yaml by %s" % self.committer.username,
"builderid": "7",
"source": "https://gitbox.apache.org/repos/asf/%s.git" % self.repository.name,
"sourcebranch": ref,
"outputbranch": target,
"outputdir": outputdir,
"project": self.repository.project,
"theme": theme,
"notify": pnotify,
},
}
print("Triggering jekyll build...")
if not self.noop("jekyll"):
# Contact buildbot 2
bbusr, bbpwd = open("/x1/gitbox/auth/bb2.txt").read().strip().split(":", 1)
s = requests.Session()
s.get("https://ci2.apache.org/auth/login", auth=(bbusr, bbpwd))
s.post("https://ci2.apache.org/api/v2/forceschedulers/jekyll_websites", json=payload)
else:
print(payload)
print("Done!")