Benoit Marty
3 months ago
2 changed files with 94 additions and 0 deletions
@ -0,0 +1,82 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
|
||||||
|
import os |
||||||
|
import subprocess |
||||||
|
|
||||||
|
|
||||||
|
def getProjectDependencies(): |
||||||
|
print("=> Computing dependencies...") |
||||||
|
command = subprocess.run( |
||||||
|
["./gradlew :app:dependencies |grep project"], |
||||||
|
shell=True, |
||||||
|
capture_output=True, |
||||||
|
text=True, |
||||||
|
) |
||||||
|
data = command.stdout |
||||||
|
# Remove the trailing info like "(*)" |
||||||
|
result = list(map(lambda x: x.split(" (")[0], data.split("\n"))) |
||||||
|
# Filter out comment line |
||||||
|
result = list(filter(lambda x: "---" in x, result)) |
||||||
|
return result |
||||||
|
|
||||||
|
|
||||||
|
def checkThatModulesExist(dependencies): |
||||||
|
print("=> Checking that all modules exist...") |
||||||
|
error = 0 |
||||||
|
modules = set() |
||||||
|
for line in dependencies: |
||||||
|
if line: |
||||||
|
line = line.split(" ") |
||||||
|
for elem in line: |
||||||
|
if ":" in elem: |
||||||
|
modules.add(elem) |
||||||
|
for module in modules: |
||||||
|
path = "." + module.replace(":", "/") + "/build.gradle.kts" |
||||||
|
if not os.path.exists(path): |
||||||
|
error += 1 |
||||||
|
print("Error: there is at least one dependency to '" + module + "' but the module does not exist.") |
||||||
|
print(" Please remove occurrence(s) of 'implementation(projects" + module.replace(":", ".") + ")'.") |
||||||
|
return error |
||||||
|
|
||||||
|
|
||||||
|
def checkThatThereIsNoTestDependency(dependencies): |
||||||
|
print("=> Checking that there are no test dependencies...") |
||||||
|
errors = set() |
||||||
|
currentProject = "" |
||||||
|
for line in dependencies: |
||||||
|
if line.startswith("+--- project "): |
||||||
|
currentProject = line.split(" ")[2] |
||||||
|
else: |
||||||
|
if ":test" in currentProject: |
||||||
|
continue |
||||||
|
else: |
||||||
|
subProject = line.split(" ")[-1] |
||||||
|
if subProject.endswith(":test") or ":tests:" in subProject: |
||||||
|
error = "Error: '" + currentProject + "' depends on the test project '" + subProject + "'\n" |
||||||
|
error += " Please replace occurrence(s) of 'implementation(projects" + subProject.replace(":", ".") + ")'" |
||||||
|
error += " with 'testImplementation(projects" + subProject.replace(":", ".") + ")'." |
||||||
|
errors.add(error) |
||||||
|
for error in errors: |
||||||
|
print(error) |
||||||
|
return len(errors) |
||||||
|
|
||||||
|
|
||||||
|
def main(): |
||||||
|
dependencies = getProjectDependencies() |
||||||
|
# for dep in dependencies: |
||||||
|
# print(dep) |
||||||
|
errors = 0 |
||||||
|
errors += checkThatModulesExist(dependencies) |
||||||
|
errors += checkThatThereIsNoTestDependency(dependencies) |
||||||
|
print() |
||||||
|
if (errors == 0): |
||||||
|
print("All checks passed successfully.") |
||||||
|
elif (errors == 1): |
||||||
|
print("Please fix the error above.") |
||||||
|
else: |
||||||
|
print("Please fix the " + str(errors) + " errors above.") |
||||||
|
exit(errors) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
main() |
Loading…
Reference in new issue