Probe from travis config.

This commit is contained in:
Jelmer Vernooij 2021-03-18 13:56:53 +00:00
parent 7b6fecc2ac
commit bd1d18a890
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8

View file

@ -79,6 +79,14 @@ class BuildSystem(object):
def get_declared_outputs(self):
raise NotImplementedError(self.get_declared_outputs)
@classmethod
def probe(cls, path):
return None
@classmethod
def probe_from_travis(cls, path, data):
return None
class Pear(BuildSystem):
@ -766,22 +774,19 @@ class Golang(BuildSystem):
@classmethod
def probe(cls, path):
if os.path.exists(os.path.join(path, ".travis.yml")):
import ruamel.yaml.reader
with open(os.path.join(path, ".travis.yml"), "rb") as f:
try:
data = ruamel.yaml.load(f, ruamel.yaml.SafeLoader)
except ruamel.yaml.reader.ReaderError as e:
warnings.warn("Unable to parse .travis.yml: %s" % (e,))
else:
language = data.get("language")
if language == "go":
return Golang(path)
for entry in os.scandir(path):
if entry.name.endswith(".go"):
return Golang(path)
if entry.is_dir():
for entry in os.scandir(entry.path):
if entry.name.endswith(".go"):
return Golang(path)
@classmethod
def probe_from_travis(cls, path, data):
language = data.get("language")
if language == "go":
return cls(path)
class Maven(BuildSystem):
@ -871,15 +876,32 @@ class PerlBuildTiny(BuildSystem):
return cls(path)
BUILDSYSTEM_CLSES = [
Pear, SetupPy, Npm, Waf, Cargo, Meson, Cabal, Gradle, Maven,
DistInkt, Gem, Make, PerlBuildTiny, Golang]
def detect_buildsystems(path, trust_package=False):
"""Detect build systems."""
for bs_cls in [
Pear, SetupPy, Npm, Waf, Cargo, Meson, Cabal, Gradle, Maven,
DistInkt, Gem, Make, PerlBuildTiny, Golang]:
for bs_cls in BUILDSYSTEM_CLSES:
bs = bs_cls.probe(path)
if bs is not None:
yield bs
if os.path.exists(os.path.join(path, ".travis.yml")):
import ruamel.yaml.reader
with open(os.path.join(path, ".travis.yml"), "rb") as f:
try:
data = ruamel.yaml.load(f, ruamel.yaml.SafeLoader)
except ruamel.yaml.reader.ReaderError as e:
warnings.warn("Unable to parse .travis.yml: %s" % (e,))
else:
for bs_cls in BUILDSYSTEM_CLSES:
bs = bs_cls.probe_from_travis(path, data)
if bs is not None:
yield bs
def get_buildsystem(path, trust_package=False):
for buildsystem in detect_buildsystems(path, trust_package=trust_package):