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
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
1from pathlib import Path
3import coxbuild
4from coxbuild.configurations import Configuration, ConfigurationAccessor
5from coxbuild.schema import group, run, task
6from coxbuild.tasks import Task, TaskContext
8from .. import ProjectSettings, withProject
10grouped = group("dotnet")
13class Settings(ConfigurationAccessor):
14 __configname__ = "dotnet"
16 def __init__(self, config: Configuration) -> None:
17 self.config = config
19 @property
20 def buildConfig(self) -> str:
21 """Build configuration."""
22 return self.get("buildConfig") or "Release"
24 @buildConfig.setter
25 def buildConfig(self, value: str) -> None:
26 self.config["buildConfig"] = value
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"
33 @nugetSource.setter
34 def nugetSource(self, value: str) -> None:
35 self.config["nugetSource"] = value
37 @property
38 def nugetToken(self) -> str:
39 """Token to NuGet source."""
40 return self.get("nugetToken") or ""
42 @nugetToken.setter
43 def nugetToken(self, value: str) -> None:
44 self.config["nugetToken"] = value
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))
53 task.before(hook)
54 return task
57@grouped
58@withProject
59@task
60def restore(*, project: ProjectSettings):
61 run(["dotnet", "restore"], cwd=project.src, retry=3)
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)
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)
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])