- .NET 10 Migration: Alle .NET-Projekte auf net10.0 umgestellt (#459) - Client-SDK: ResolveAgentPath bereinigt und DLL-Pruefung ergaenzt (#458) - Packager: Commit-Ermittlung aus publishDir / Assembly InformationalVersion (#456) - BuildInfo.targets: ExitCode-Abfang und Regex-Validierung gegen Git-Fehlertexte (#363) - UpdateService: Re-Publish erhaelt bestehende Manifeste und Werte (#457) - Bugtracker API: on_roadmap-Filter in manage?action=list durchgereicht (#349) - Watchdog API: project_slug-Filter in GET /status ergaenzt (#420) - UpdateService API: no_release_for_platform mit verfuegbaren Plattformen (#421) - Bugtracker Core: Fehler-Normalisierung gegen zersplitterte error_hashes (#419) - UpdateAgent: Kopfloser Installationsmodus via --answers (#89) - Installer & Agent: Automatische Selbstaktualisierung beim Start - Tooling: AGENTS.md, CLAUDE.md und Standalone-CLI scripts/dc.py hinzugefuegt
152 lines
7.9 KiB
XML
152 lines
7.9 KiB
XML
<Project>
|
|
<!--
|
|
Erzeugt vor jeder Uebersetzung eine BuildInfo-Klasse mit Version,
|
|
UTC-Build-Datum und Git-Commit.
|
|
|
|
Einbindung in der .csproj des Consumers:
|
|
|
|
<Import Project="..\Deploymentcenter.Client\Deploymentcenter.BuildInfo.targets" />
|
|
|
|
Die Klasse entsteht im Namensraum des einbindenden Projekts
|
|
($(RootNamespace)), nicht in dem des SDK.
|
|
|
|
Die vorherige Fassung erzeugte "public static partial class BuildInfo" im
|
|
Namensraum Deploymentcenter.Client.Models. Dort liefert das SDK aber bereits
|
|
eine gleichnamige, nicht partielle Klasse aus: im Consumer entstand ein
|
|
zweiter Typ mit demselben vollen Namen in einer zweiten Assembly (CS0433),
|
|
und der generierte statische Konstruktor setzte Eigenschaften, die in seiner
|
|
Teilklasse gar nicht deklariert waren (CS0103). Einbinden war damit
|
|
unmoeglich - obwohl der UpdateService-Leitfaden genau dazu riet. Der
|
|
generierte Code deklariert seine Werte jetzt selbst und braucht keine
|
|
Gegenstelle im SDK.
|
|
|
|
Ueberschreibbare Eigenschaften:
|
|
DeploymentcenterBuildInfoNamespace Zielnamensraum (Vorgabe: RootNamespace)
|
|
DeploymentcenterBuildInfoClass Klassenname (Vorgabe: BuildInfo)
|
|
BuildChannel prod, beta, ... (Vorgabe: prod)
|
|
GenerateDeploymentcenterBuildInfo auf false setzen, um abzuschalten
|
|
-->
|
|
|
|
<PropertyGroup>
|
|
<GenerateDeploymentcenterBuildInfo Condition="'$(GenerateDeploymentcenterBuildInfo)' == ''">true</GenerateDeploymentcenterBuildInfo>
|
|
<DeploymentcenterBuildInfoClass Condition="'$(DeploymentcenterBuildInfoClass)' == ''">BuildInfo</DeploymentcenterBuildInfoClass>
|
|
</PropertyGroup>
|
|
|
|
<Target Name="GenerateDeploymentcenterBuildInfo"
|
|
BeforeTargets="CoreCompile"
|
|
Condition="'$(GenerateDeploymentcenterBuildInfo)' == 'true'">
|
|
|
|
<PropertyGroup>
|
|
<!-- Zielnamensraum: ausdrueckliche Angabe, sonst RootNamespace, sonst Projektname. -->
|
|
<DeploymentcenterBuildInfoNamespace Condition="'$(DeploymentcenterBuildInfoNamespace)' == ''">$(RootNamespace)</DeploymentcenterBuildInfoNamespace>
|
|
<DeploymentcenterBuildInfoNamespace Condition="'$(DeploymentcenterBuildInfoNamespace)' == ''">$(MSBuildProjectName)</DeploymentcenterBuildInfoNamespace>
|
|
|
|
<BuildInfoFile>$(IntermediateOutputPath)DeploymentcenterBuildInfo.g.cs</BuildInfoFile>
|
|
|
|
<!-- Version aus <Version>, ersatzweise <AssemblyVersion>, sonst 0.0.0. -->
|
|
<BuildVersion Condition="'$(BuildVersion)' == ''">$(Version)</BuildVersion>
|
|
<BuildVersion Condition="'$(BuildVersion)' == ''">$(AssemblyVersion)</BuildVersion>
|
|
<BuildVersion Condition="'$(BuildVersion)' == ''">0.0.0</BuildVersion>
|
|
|
|
<BuildChannel Condition="'$(BuildChannel)' == ''">prod</BuildChannel>
|
|
</PropertyGroup>
|
|
|
|
<!--
|
|
ContinueOnError, damit ein Build ohne Git-Arbeitskopie oder ohne
|
|
installiertes Git nicht scheitert. IgnoreExitCode allein genuegte nicht:
|
|
fehlt die ausfuehrbare Datei, bricht Exec selbst ab.
|
|
-->
|
|
<Exec Command="git rev-parse HEAD"
|
|
ConsoleToMSBuild="true"
|
|
IgnoreExitCode="true"
|
|
ContinueOnError="true"
|
|
StandardErrorImportance="low">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="DcGitCommitLong" />
|
|
<Output TaskParameter="ExitCode" PropertyName="DcGitExitCodeLong" />
|
|
</Exec>
|
|
|
|
<Exec Command="git rev-parse --short HEAD"
|
|
ConsoleToMSBuild="true"
|
|
IgnoreExitCode="true"
|
|
ContinueOnError="true"
|
|
StandardErrorImportance="low">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="DcGitCommitShort" />
|
|
<Output TaskParameter="ExitCode" PropertyName="DcGitExitCodeShort" />
|
|
</Exec>
|
|
|
|
<PropertyGroup>
|
|
<!--
|
|
Nur das Datum, nicht die Uhrzeit.
|
|
|
|
Zuvor stand hier DateTime.UtcNow mit voller Genauigkeit. Das aenderte
|
|
sich bei JEDEM Build, die erzeugte .g.cs unterschied sich dadurch
|
|
immer, WriteOnlyWhenDifferent griff nie - und jedes Projekt, das diese
|
|
Targets einbindet, wurde bei jedem Build neu uebersetzt, samt allem,
|
|
was davon abhaengt. Bei einer Projektmappe mit mehreren
|
|
Abhaengigkeiten kostet das jedes Mal spuerbar Zeit.
|
|
|
|
Mit Tagesgenauigkeit faellt hoechstens ein Neubau pro Tag an. Die
|
|
genaue Bauzeit war ohnehin selten die interessante Angabe - welcher
|
|
Stand gebaut wurde, sagt GitCommit praeziser, und der aendert sich
|
|
genau dann, wenn eine Neuuebersetzung faellig ist.
|
|
|
|
Das Commit-Datum waere noch stabiler, laesst sich aber nicht
|
|
verlaesslich holen: Die Formatangabe von "git log" muss durch MSBuild
|
|
und cmd.exe, und das Prozentzeichen ueberlebt diese Kette nicht.
|
|
-->
|
|
<BuildDateUtc>$([System.DateTime]::UtcNow.ToString("yyyy-MM-dd"))</BuildDateUtc>
|
|
</PropertyGroup>
|
|
|
|
<PropertyGroup>
|
|
<DcGitExitCodeLong Condition="'$(DcGitExitCodeLong)' == ''">1</DcGitExitCodeLong>
|
|
<DcGitExitCodeShort Condition="'$(DcGitExitCodeShort)' == ''">1</DcGitExitCodeShort>
|
|
|
|
<!--
|
|
ConsoleToMSBuild faengt auch stderr ein. Wenn git fehlschlaegt (z. B.
|
|
ausserhalb einer Git-Arbeitskopie, Quell-Tarball, Docker-Build ohne .git),
|
|
landet die Fehlermeldung (z. B. "fatal: Kein Git-Repository...") in
|
|
der Eigenschaft. Wir pruefen daher ExitCode und validieren die Ausgabe
|
|
per Hex-Regex, um verlaesslich auf UNKNOWN_COMMIT/UNKNOWN zurueckzufallen.
|
|
-->
|
|
<DcGitCommitLong Condition="'$(DcGitExitCodeLong)' != '0' Or !$([System.Text.RegularExpressions.Regex]::IsMatch('$(DcGitCommitLong.Trim())', '^[0-9a-fA-F]{40}$'))">UNKNOWN_COMMIT</DcGitCommitLong>
|
|
<DcGitCommitShort Condition="'$(DcGitExitCodeShort)' != '0' Or !$([System.Text.RegularExpressions.Regex]::IsMatch('$(DcGitCommitShort.Trim())', '^[0-9a-fA-F]{7,40}$'))">UNKNOWN</DcGitCommitShort>
|
|
<!-- Zeilenumbrueche aus der Git-Ausgabe entfernen, sie wuerden das Literal sprengen. -->
|
|
<DcGitCommitLong>$(DcGitCommitLong.Trim())</DcGitCommitLong>
|
|
<DcGitCommitShort>$(DcGitCommitShort.Trim())</DcGitCommitShort>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<BuildInfoLine Include="// <auto-generated />" />
|
|
<BuildInfoLine Include="// Erzeugt von Deploymentcenter.BuildInfo.targets - nicht von Hand aendern." />
|
|
<BuildInfoLine Include="namespace $(DeploymentcenterBuildInfoNamespace)" />
|
|
<BuildInfoLine Include="{" />
|
|
<BuildInfoLine Include=" /// <summary>Zur Uebersetzungszeit eingebettete Build-Daten.</summary>" />
|
|
<BuildInfoLine Include=" public static class $(DeploymentcenterBuildInfoClass)" />
|
|
<BuildInfoLine Include=" {" />
|
|
<BuildInfoLine Include=" public const string Version = "$(BuildVersion)"%3B" />
|
|
<BuildInfoLine Include=" public const string GitCommit = "$(DcGitCommitLong)"%3B" />
|
|
<BuildInfoLine Include=" public const string GitCommitShort = "$(DcGitCommitShort)"%3B" />
|
|
<BuildInfoLine Include=" public const string BuildDateUtc = "$(BuildDateUtc)"%3B" />
|
|
<BuildInfoLine Include=" public const string Channel = "$(BuildChannel)"%3B" />
|
|
<!-- Include darf nicht leer sein, daher ein Leerzeichen statt einer Leerzeile. -->
|
|
<BuildInfoLine Include=" " />
|
|
<BuildInfoLine Include=" public static string Summary" />
|
|
<BuildInfoLine Include=" {" />
|
|
<BuildInfoLine Include=" get { return "v" + Version + " (" + GitCommitShort + ") built on " + BuildDateUtc + " [" + Channel + "]"%3B }" />
|
|
<BuildInfoLine Include=" }" />
|
|
<BuildInfoLine Include=" }" />
|
|
<BuildInfoLine Include="}" />
|
|
</ItemGroup>
|
|
|
|
<WriteLinesToFile File="$(BuildInfoFile)"
|
|
Lines="@(BuildInfoLine)"
|
|
Overwrite="true"
|
|
WriteOnlyWhenDifferent="true" />
|
|
|
|
<ItemGroup>
|
|
<Compile Include="$(BuildInfoFile)" />
|
|
<FileWrites Include="$(BuildInfoFile)" />
|
|
</ItemGroup>
|
|
</Target>
|
|
</Project>
|