Skip to content

Commit

Permalink
Finish ARTIFACT_URL setup
Browse files Browse the repository at this point in the history
  • Loading branch information
fauust committed Oct 11, 2023
1 parent f224dac commit a8c9c3f
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 43 deletions.
29 changes: 21 additions & 8 deletions common_factories.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import os
from utils import *
from constants import *
from buildbot.plugins import *
from buildbot.process.properties import Property, Properties
from buildbot.steps.package.rpm.rpmlint import RpmLint
Expand All @@ -7,9 +10,6 @@
from buildbot.process.remotecommand import RemoteCommand
from twisted.internet import defer

from utils import *
from constants import *

def getQuickBuildFactory(mtrDbPool):
f_quick_build = util.BuildFactory()
f_quick_build.addStep(steps.ShellCommand(name="Environment details", command=['bash', '-c', 'date -u && uname -a && ulimit -a']))
Expand Down Expand Up @@ -93,7 +93,21 @@ def getRpmAutobakeFactory(mtrDbPool):
f_rpm_autobake.addStep(steps.ShellCommand(name="Environment details", command=['bash', '-c', 'date -u && uname -a && ulimit -a']))
f_rpm_autobake.addStep(steps.SetProperty(property="dockerfile", value=util.Interpolate("%(kw:url)s", url=dockerfile), description="dockerfile"))
f_rpm_autobake.workdir=f_rpm_autobake.workdir + "/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/"
f_rpm_autobake.addStep(steps.ShellCommand(name='fetch packages for MariaDB-compat', command=["sh", "-c", util.Interpolate('wget --no-check-certificate -cO ../MariaDB-shared-5.3.%(kw:arch)s.rpm "https://ci.mariadb.org/helper_files/mariadb-shared-5.3-%(kw:arch)s.rpm" && wget -cO ../MariaDB-shared-10.1.%(kw:arch)s.rpm "https://ci.mariadb.org/helper_files/mariadb-shared-10.1-kvm-rpm-%(kw:rpm_type)s-%(kw:arch)s.rpm"', arch=getArch, rpm_type=util.Property('rpm_type'))], doStepIf=hasCompat))
f_rpm_autobake.addStep(
steps.ShellCommand(
name="fetch packages for MariaDB-compat",
command=[
"sh",
"-c",
util.Interpolate("""
wget --no-check-certificate -cO ../MariaDB-shared-5.3.%(kw:arch)s.rpm " """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/helper_files/mariadb-shared-5.3-%(kw:arch)s.r pm" && wget -cO ../MariaDB-shared-10.1.%(kw:arch)s.rpm " """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/helper_files/mariadb-shared-10.1-kvm-rpm-%(kw:rpm_type)s-%(kw:arch)s.rpm"',
arch=getArch,
rpm_type=util.Property("rpm_type"),
"""),
],
doStepIf=hasCompat,
)
)
f_rpm_autobake.addStep(downloadSourceTarball())
f_rpm_autobake.addStep(steps.ShellCommand(command=util.Interpolate("tar -xvzf /mnt/packages/%(prop:tarbuildnum)s_%(prop:mariadb_version)s.tar.gz --strip-components=1")))
f_rpm_autobake.addStep(steps.ShellCommand(command="ls .."))
Expand Down Expand Up @@ -125,15 +139,13 @@ def getRpmAutobakeFactory(mtrDbPool):
cat << EOF > MariaDB.repo
[MariaDB-%(prop:branch)s]
name=MariaDB %(prop:branch)s repo (build %(prop:tarbuildnum)s)
baseurl=https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:buildername)s/rpms
baseurl=""" + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:buildername)s/rpms
gpgcheck=0
EOF
if [ "%(prop:rpm_type)s" = rhel8 ] || [ "%(prop:rpm_type)s" = centosstream8 ]; then
echo "module_hotfixes = 1" >> MariaDB.repo
fi
""")]))
#f_rpm_autobake.addStep(steps.MultipleFileUpload(workersrcs=util.Property('packages'),
# masterdest=util.Interpolate('/srv/buildbot/packages/' + '%(prop:tarbuildnum)s' + '/' + '%(prop:buildername)s'), mode=0o755, url=util.Interpolate('https://ci.mariadb.org/' + "%(prop:tarbuildnum)s" + "/" + '%(prop:buildername)s' + "/"), doStepIf=lambda step: hasFiles(step) and savePackage(step)))
f_rpm_autobake.addStep(steps.ShellCommand(
name='save_packages',
timeout=7200,
Expand All @@ -145,7 +157,8 @@ def getRpmAutobakeFactory(mtrDbPool):
),
doStepIf=lambda step: hasFiles(step) and savePackage(step),
descriptionDone=util.Interpolate("""
Repository available with: curl https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:buildername)s/MariaDB.repo -o /etc/yum.repos.d/MariaDB.repo""")
Repository available with: curl """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:buildername)s/MariaDB.repo -o /etc/yum.repos.d/MariaDB.repo
""")
))
f_rpm_autobake.addStep(steps.Trigger(name='install', schedulerNames=['s_install'], waitForFinish=False, updateSourceStamp=False,
set_properties={"tarbuildnum" : Property("tarbuildnum"), "mariadb_version" : Property("mariadb_version"), "master_branch" : Property("master_branch"), "parentbuildername": Property("buildername")}, doStepIf=lambda step: hasInstall(step) and savePackage(step) and hasFiles(step)))
Expand Down
62 changes: 48 additions & 14 deletions master-docker-nonstandard/master.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -434,10 +434,8 @@ f_without_server.addStep(steps.ShellCommand(command="ls -la"))
# build steps
f_without_server.addStep(steps.Compile(command=
["sh", "-c", util.Interpolate("export PATH=/usr/lib/ccache:/usr/lib64/ccache:$PATH && cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITHOUT_SERVER=1 && make -j%(kw:jobs)s package", jobs=util.Property('jobs', default='$(getconf _NPROCESSORS_ONLN)'), c_compiler=util.Property('c_compiler', default='gcc'), cxx_compiler=util.Property('cxx_compiler', default='g++'))], env={'CCACHE_DIR':'/mnt/ccache'}, haltOnFailure="true"))
# ["sh", "-c", util.Interpolate("export PATH=/usr/lib/ccache:/usr/lib64/ccache:$PATH && mkdir -p ../builddir && cd ../builddir && cmake ${OLDPWD} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITHOUT_SERVER=ON && cmake --build . --parallel %(kw:jobs)s --target package", jobs=util.Property('jobs', default='$(getconf _NPROCESSORS_ONLN)'), c_compiler=util.Property('c_compiler', default='gcc'), cxx_compiler=util.Property('cxx_compiler', default='g++'))], env={'CCACHE_DIR':'/mnt/ccache'}, haltOnFailure="true"))
# create package and upload to master
f_without_server.addStep(steps.SetPropertyFromCommand(command="basename mariadb-*-linux-*.tar.gz", property="mariadb_binary"))
#f_without_server.addStep(steps.FileUpload(workersrc=util.Interpolate("%(prop:mariadb_binary)s"), masterdest=util.Interpolate('/srv/buildbot/packages/' + '%(prop:tarbuildnum)s' + "/" + '%(prop:buildername)s' + "/" + "%(prop:mariadb_binary)s"), mode=0o755, url=util.Interpolate('https://ci.mariadb.org/' + "%(prop:tarbuildnum)s" + "/" + '%(prop:buildername)s' + "/"), urlText="Download", doStepIf=savePackage))
f_without_server.addStep(steps.ShellCommand(name='save_packages', timeout=7200, haltOnFailure=True, command=util.Interpolate('mkdir -p ' + '/packages/' + '%(prop:tarbuildnum)s' + '/' + '%(prop:buildername)s'+ ' && sha256sum %(prop:mariadb_binary)s >> sha256sums.txt && cp ' + '%(prop:mariadb_binary)s sha256sums.txt' + ' /packages/' + '%(prop:tarbuildnum)s' + '/' + '%(prop:buildername)s' + '/' + ' && sync /packages/' + '%(prop:tarbuildnum)s'), doStepIf=savePackage))
f_without_server.addStep(steps.ShellCommand(name="cleanup", command="rm -r * .* 2> /dev/null || true", alwaysRun=True))

Expand All @@ -449,9 +447,18 @@ f_eco_php.addStep(steps.ShellCommand(
f_eco_php.addStep(steps.ShellCommand(
name="fetch_test_script",
command=["sh", "-xc", "curl https://raw.githubusercontent.com/MariaDB/buildbot/main/dockerfiles/ecofiles/test-php.sh -o /buildbot/test-php.sh && chmod a+x /buildbot/test-php.sh"]))
f_eco_php.addStep(steps.ShellCommand(
name="fetching and installing database",
command=["sh", "-xc", util.Interpolate("/buildbot/installdb.sh \"https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s\" --plugin-load-add=auth_pam --pam_use_cleartext_plugin")]))
f_eco_php.addStep(
steps.ShellCommand(
name="fetching and installing database",
command=[
"sh",
"-xc",
util.Interpolate("""
"/buildbot/installdb.sh " """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s" --plugin-load-add=auth _pam --pam_use_cleartext_plugin"
"""),
],
)
)
f_eco_php.addStep(steps.ShellCommand(
name="test PHP-7.1",
command=["sh", "-xc", "/buildbot/test-php.sh PHP-7.1"]))
Expand All @@ -473,9 +480,18 @@ f_eco_dbdeployer.addStep(steps.ShellCommand(
f_eco_dbdeployer.addStep(steps.ShellCommand(
name="download if needed latest dbdeployer",
command=["sh", "-xc", "/buildbot/test-dbdeployer.sh dbdeployerfetch"]))
f_eco_dbdeployer.addStep(steps.ShellCommand(
name="fetching mariadb tarball",
command=["sh", "-xc", util.Interpolate("/buildbot/test-dbdeployer.sh init \"https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s\"")]))
f_eco_dbdeployer.addStep(
steps.ShellCommand(
name="fetching mariadb tarball",
command=[
"sh",
"-xc",
util.Interpolate("""
'/buildbot/test-dbdeployer.sh init " """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s"'
"""),
],
)
)
f_eco_dbdeployer.addStep(steps.ShellCommand(
name="deploy single ma",
command=["sh", "-xc", util.Interpolate("/buildbot/test-dbdeployer.sh deploy single ma%(prop:mariadb_version)s")]))
Expand All @@ -497,9 +513,18 @@ f_eco_pymysql.addStep(steps.ShellCommand(
f_eco_pymysql.addStep(steps.ShellCommand(
name="fetch_test_script",
command=["sh", "-xc", "curl https://raw.githubusercontent.com/MariaDB/buildbot/main/dockerfiles/ecofiles/test-pymysql.sh -o /buildbot/test-pymysql.sh && chmod a+x /buildbot/test-pymysql.sh"]))
f_eco_pymysql.addStep(steps.ShellCommand(
name="fetching and installing database",
command=["sh", "-xc", util.Interpolate("/buildbot/installdb.sh \"https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s\"")]))
f_eco_dbdeployer.addStep(
steps.ShellCommand(
name="fetching and installing database",
command=[
"sh",
"-xc",
util.Interpolate("""
"/buildbot/installdb.sh " """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s"
"""),
],
)
)
f_eco_pymysql.addStep(steps.ShellCommand(
name="test pymysql-main",
command=["sh", "-xc", "/buildbot/test-pymysql.sh"]))
Expand All @@ -515,9 +540,18 @@ f_eco_mysqljs.addStep(steps.ShellCommand(
f_eco_mysqljs.addStep(steps.ShellCommand(
name="fetch_test_script",
command=["sh", "-xc", "curl https://raw.githubusercontent.com/MariaDB/buildbot/main/dockerfiles/ecofiles/test-mysqljs.sh -o /buildbot/test-mysqljs.sh && chmod a+x /buildbot/test-mysqljs.sh"]))
f_eco_mysqljs.addStep(steps.ShellCommand(
name="fetching and installing database",
command=["sh", "-xc", util.Interpolate("/buildbot/installdb.sh \"https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s\"")]))
f_eco_dbdeployer.addStep(
steps.ShellCommand(
name="fetching and installing database",
command=[
"sh",
"-xc",
util.Interpolate("""
"/buildbot/installdb.sh " """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:parentbuildername)s/%(prop:mariadb_binary)s"
"""),
],
)
)
f_eco_mysqljs.addStep(steps.ShellCommand(
name="test mysqljs-master",
command=["sh", "-xc", "/buildbot/test-mysqljs.sh"]))
Expand Down
96 changes: 82 additions & 14 deletions master-nonlatent/master.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,27 @@ f_windows.addStep(steps.ShellCommand(name="stop_processes", command="taskkill /i
f_windows.addStep(steps.ShellCommand(name="unlock_file_handles", command=["dojob", "unlock_handles.bat"], alwaysRun=True))
f_windows.addStep(steps.ShellCommand(name="removedirs", command=["dojob", '"', "powershell", "-command", "Remove-Item", '"$pwd\*"', "-Recurse", "-Force", '"'], alwaysRun=True))
f_windows.addStep(steps.ShellCommand(name="create tmp dir", command="mkdir tmpdir"))
f_windows.addStep(steps.ShellCommand(
name="fetch_tarball",
description="fetching source tarball",
descriptionDone="fetching source tarball...done",
haltOnFailure=True,
command=["dojob", '"', "powershell", "-command", "curl", util.Interpolate("https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:mariadb_version)s.tar.gz"), "-o", util.Interpolate("%(prop:tarbuildnum)s_%(prop:mariadb_version)s.tar.gz"), '"']))
f_windows.addStep(
steps.ShellCommand(
name="fetch_tarball",
description="fetching source tarball",
descriptionDone="fetching source tarball...done",
haltOnFailure=True,
command=[
"dojob",
'"',
"powershell",
"-command",
"curl",
util.Interpolate("""
" """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:mariadb_version)s.tar.gz"
"""),
"-o",
util.Interpolate("%(prop:tarbuildnum)s_%(prop:mariadb_version)s.tar.gz"),
'"',
],
)
)
f_windows.addStep(steps.ShellCommand(name="unpack tarball", env=f_windows_env, command=["dojob", '"', util.Interpolate("tar -xvzf %(prop:tarbuildnum)s_%(prop:mariadb_version)s.tar.gz --strip-components=1"), '"']))
f_windows.addStep(steps.Compile(name="cmake", env=f_windows_env, command=["dojob", '"', util.Interpolate('"C:\Program Files (x86)\Microsoft Visual Studio\\2022\BuildTools\Common7\Tools\VsDevCmd.bat" -arch=%(kw:arch)s && cmake . -A %(kw:arch_cmake)s -DPLUGIN_ROCKSDB=NO -DMYSQL_MAINTAINER_MODE=ERR -Wno-dev', arch=util.Property('arch', default='x64'), arch_cmake=util.Property('arch_cmake', default='x64')), '"'], warningPattern=vsWarningPattern))
f_windows.addStep(steps.Compile(name="compile", env=f_windows_env, command=["dojob", '"', util.Interpolate('"C:\Program Files (x86)\Microsoft Visual Studio\\2022\BuildTools\Common7\Tools\VsDevCmd.bat" -arch=%(kw:arch)s && cmake --build . --verbose --config Debug -- -m', arch=util.Property('arch', default='x64')), '"'], timeout=600, warningPattern=vsWarningPattern))
Expand Down Expand Up @@ -178,12 +193,27 @@ f_windows_msi.addStep(steps.ShellCommand(name="stop_processes", command="taskkil
f_windows_msi.addStep(steps.ShellCommand(name="unlock_file_handles", command=["dojob", "unlock_handles.bat"], alwaysRun=True, workdir=util.Interpolate("C:\\Buildbot\\%(prop:buildername)s")))
f_windows_msi.addStep(steps.ShellCommand(name="removedirs", command=["dojob", '"', "powershell", "-command", "Remove-Item", '"$pwd\*"', "-Recurse", "-Force", '"'], alwaysRun=True))
f_windows_msi.addStep(steps.ShellCommand(name="create tmp dir", command="mkdir tmpdir"))
f_windows_msi.addStep(steps.ShellCommand(
name="fetch_tarball",
description="fetching source tarball",
descriptionDone="fetching source tarball...done",
haltOnFailure=True,
command=["dojob", '"', "powershell", "-command", "curl", util.Interpolate("https://ci.mariadb.org/%(prop:tarbuildnum)s/%(prop:mariadb_version)s.tar.gz"), "-o", util.Interpolate("%(prop:tarbuildnum)s_%(prop:mariadb_version)s.tar.gz"), '"']))
f_windows_msi.addStep(
steps.ShellCommand(
name="fetch_tarball",
description="fetching source tarball",
descriptionDone="fetching source tarball...done",
haltOnFailure=True,
command=[
"dojob",
'"',
"powershell",
"-command",
"curl",
util.Interpolate("""
" """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/%(prop:tarbuildnum)s/%(prop:mariadb_version)s.tar.gz"
"""),
"-o",
util.Interpolate("%(prop:tarbuildnum)s_%(prop:mariadb_version)s.tar.gz"),
'"',
],
)
)
f_windows_msi.addStep(steps.ShellCommand(name="unpack tarball", command=["dojob", '"', util.Interpolate("tar -xvzf %(prop:tarbuildnum)s_%(prop:mariadb_version)s.tar.gz --strip-components=1"), '"']))
f_windows_msi.addStep(steps.Compile(name="cmake", env=f_windows_msi_env, command=["dojob", '"', util.Interpolate('"C:\Program Files (x86)\Microsoft Visual Studio\\2022\BuildTools\Common7\Tools\VsDevCmd.bat" -arch=%(kw:arch)s && cmake . -G "Visual Studio 17 2022" -A %(kw:arch_cmake)s -DBUILD_CONFIG=mysql_release -DWITH_THIRD_PARTY=HeidiSQL -DWITH_EMBEDDED_SERVER=0 -DSIGNCODE=ON -DSIGNTOOL_PARAMETERS="/fd;SHA256;/a;/t;http://timestamp.globalsign.com/?signature=sha2" -DWITH_UNIT_TESTS=0 -DMYSQL_MAINTAINER_MODE=ERR', arch=util.Property('arch', default='x64'), arch_cmake=util.Property('arch_cmake', default='x64')), '"'], warningPattern=vsWarningPattern))
f_windows_msi.addStep(steps.Compile(name="compile", env=f_windows_msi_env, command=["dojob", '"', util.Interpolate('"C:\Program Files (x86)\Microsoft Visual Studio\\2022\BuildTools\Common7\Tools\VsDevCmd.bat" -arch=%(kw:arch)s && cmake --build . --verbose --config RelWithDebInfo -- -m', arch=util.Property('arch', default='x64')), '"'], timeout=600, warningPattern=vsWarningPattern))
Expand Down Expand Up @@ -214,8 +244,46 @@ f_windows_msi.addStep(steps.MTR(
f_windows_msi.addStep(steps.ShellCommand(command='dojob "dir"'))
f_windows_msi.addStep(steps.ShellCommand(name="sha256sums", command=["powershell", "-command", 'Get-ChildItem .\* -Include @("*.msi", "*.zip") | Get-FileHash | Select-Object Hash, @{Name="Name";Expression={[System.IO.Path]::GetFileName($_.Path)}} | Format-Table -HideTableHeaders | Out-File sha256sums.txt']))
f_windows_msi.addStep(steps.SetPropertyFromCommand(command=["dojob", '"', 'dir /b *.msi *.zip', '"'], extract_fn=ls2list))
f_windows_msi.addStep(steps.MultipleFileUpload(workersrcs=util.Property("packages"), masterdest=util.Interpolate('/srv/buildbot/packages/' + '%(prop:tarbuildnum)s' + "/" + '%(prop:buildername)s' + "/"), mode=0o755, url=util.Interpolate('https://ci.mariadb.org/' + "%(prop:tarbuildnum)s" + "/" + '%(prop:buildername)s' + "/"), doStepIf=savePackage))
f_windows_msi.addStep(steps.FileUpload(workersrc="sha256sums.txt", masterdest=util.Interpolate('/srv/buildbot/packages/' + '%(prop:tarbuildnum)s' + "/" + '%(prop:buildername)s' + "/sha256sums.txt"), mode=0o755, url=util.Interpolate('https://ci.mariadb.org/' + "%(prop:tarbuildnum)s" + "/" + '%(prop:buildername)s' + "/"), doStepIf=savePackage))
f_windows_msi.addStep(
steps.MultipleFileUpload(
workersrcs=util.Property("packages"),
masterdest=util.Interpolate(
"/srv/buildbot/packages/"
+ "%(prop:tarbuildnum)s"
+ "/"
+ "%(prop:buildername)s"
+ "/"
),
mode=0o755,
url=util.Interpolate("""
" """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/"%(prop:tarbuildnum)s"
+ "/"
+ "%(prop:buildername)s"
+ "/"
"""),
doStepIf=savePackage,
)
)
f_windows_msi.addStep(
steps.FileUpload(
workersrc="sha256sums.txt",
masterdest=util.Interpolate(
"/srv/buildbot/packages/"
+ "%(prop:tarbuildnum)s"
+ "/"
+ "%(prop:buildername)s"
+ "/sha256sums.txt"
),
mode=0o755,
url=util.Interpolate("""
" """ + os.getenv('ARTIFACTS_URL', default='https://ci.mariadb.org') + """/"%(prop:tarbuildnum)s"
+ "/"
+ "%(prop:buildername)s"
+ "/"
"""),
doStepIf=savePackage,
)
)
f_windows_msi.addStep(steps.ShellCommand(name="cleanup", command=["dojob", '"', "powershell", "-command", "Remove-Item", '"$pwd\*"', "-Recurse", "-Force", '"'], alwaysRun=True))

# f_wordpress
Expand Down
Loading

0 comments on commit a8c9c3f

Please sign in to comment.