Coverage for /home/runner/work/coxbuild/coxbuild/src/coxbuild/extensions/dotnet/__init__.py: 0%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

65 statements  

1from pathlib import Path 

2 

3import coxbuild 

4from coxbuild.configurations import Configuration, ConfigurationAccessor 

5from coxbuild.schema import group, run, task 

6from coxbuild.tasks import Task, TaskContext 

7 

8from .. import ProjectSettings, withProject 

9 

10grouped = group("dotnet") 

11 

12 

13class Settings(ConfigurationAccessor): 

14 __configname__ = "dotnet" 

15 

16 def __init__(self, config: Configuration) -> None: 

17 self.config = config 

18 

19 @property 

20 def buildConfig(self) -> str: 

21 """Build configuration.""" 

22 return self.get("buildConfig") or "Release" 

23 

24 @buildConfig.setter 

25 def buildConfig(self, value: str) -> None: 

26 self.config["buildConfig"] = value 

27 

28 @property 

29 def nugetSource(self) -> str: 

30 """Url to NuGet source.""" 

31 return self.get("nugetSource") or "https://api.nuget.org/v3/index.json" 

32 

33 @nugetSource.setter 

34 def nugetSource(self, value: str) -> None: 

35 self.config["nugetSource"] = value 

36 

37 @property 

38 def nugetToken(self) -> str: 

39 """Token to NuGet source.""" 

40 return self.get("nugetToken") or "" 

41 

42 @nugetToken.setter 

43 def nugetToken(self, value: str) -> None: 

44 self.config["nugetToken"] = value 

45 

46 

47def withSettings(task: Task) -> Task: 

48 """Decorator to add settings argument to task context.""" 

49 def hook(context: TaskContext): 

50 if context.config: 

51 context.kwds.update(settings=Settings(context.config)) 

52 

53 task.before(hook) 

54 return task 

55 

56 

57@grouped 

58@withProject 

59@task 

60def restore(*, project: ProjectSettings): 

61 run(["dotnet", "restore"], cwd=project.src, retry=3) 

62 

63 

64@grouped 

65@withProject 

66@withSettings 

67@task 

68def build(*, project: ProjectSettings, settings: Settings): 

69 args = ["dotnet", "build", "-c", settings.buildConfig] 

70 if project.version: 

71 args.append(f"/p:Version={project.version}") 

72 run(args, cwd=project.src) 

73 

74 

75@grouped 

76@withProject 

77@withSettings 

78@task 

79def pack(*, project: ProjectSettings, settings: Settings): 

80 args = ["dotnet", "pack", "-c", settings.buildConfig] 

81 if project.version: 

82 args.append(f"/p:Version={project.version}") 

83 args.extend(["-o", str(project.package)]) 

84 run(args, cwd=project.src) 

85 

86 

87@grouped 

88@withProject 

89@withSettings 

90@task 

91def push(*, project: ProjectSettings, settings: Settings): 

92 run(["dotnet", "nuget", "push", f"{str(project.package)}/*", 

93 "-s", settings.nugetSource, "-k", settings.nugetToken])