more audit work

This commit is contained in:
master
2026-01-08 10:21:51 +02:00
parent 43c02081ef
commit 51cf4bc16c
546 changed files with 36721 additions and 4003 deletions

View File

@@ -1,3 +1,4 @@
using System.Globalization;
using System.Text.Json;
using StellaOps.Signals.Scm.Models;
@@ -53,7 +54,7 @@ public sealed class GitHubEventMapper : IScmEventMapper
EventId = deliveryId,
Provider = ScmProvider.GitHub,
EventType = scmEventType,
Timestamp = DateTimeOffset.UtcNow,
Timestamp = ExtractTimestamp(payload),
Repository = repository,
Actor = ExtractActor(payload),
Ref = refName ?? GetString(payload, "ref"),
@@ -266,6 +267,36 @@ public sealed class GitHubEventMapper : IScmEventMapper
};
}
private static DateTimeOffset ExtractTimestamp(JsonElement payload)
{
var timestamp = GetNestedString(payload, "head_commit", "timestamp")
?? GetNestedString(payload, "workflow_run", "updated_at")
?? GetNestedString(payload, "workflow_run", "created_at")
?? GetNestedString(payload, "pull_request", "updated_at")
?? GetNestedString(payload, "pull_request", "created_at")
?? GetNestedString(payload, "release", "published_at")
?? GetNestedString(payload, "check_run", "completed_at")
?? GetNestedString(payload, "check_run", "started_at");
return TryParseTimestamp(timestamp) ?? DateTimeOffset.UnixEpoch;
}
private static DateTimeOffset? TryParseTimestamp(string? value)
{
if (string.IsNullOrWhiteSpace(value))
{
return null;
}
return DateTimeOffset.TryParse(
value,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
out var parsed)
? parsed
: null;
}
private static string? GetString(JsonElement element, string property)
{
return element.TryGetProperty(property, out var value) && value.ValueKind == JsonValueKind.String

View File

@@ -1,3 +1,4 @@
using System.Globalization;
using System.Text.Json;
using StellaOps.Signals.Scm.Models;
@@ -41,7 +42,7 @@ public sealed class GitLabEventMapper : IScmEventMapper
EventId = deliveryId,
Provider = ScmProvider.GitLab,
EventType = scmEventType,
Timestamp = DateTimeOffset.UtcNow,
Timestamp = ExtractTimestamp(payload),
Repository = repository,
Actor = ExtractActor(payload),
Ref = refName,
@@ -272,6 +273,46 @@ public sealed class GitLabEventMapper : IScmEventMapper
};
}
private static DateTimeOffset ExtractTimestamp(JsonElement payload)
{
var timestamp = GetNestedString(payload, "object_attributes", "updated_at")
?? GetNestedString(payload, "object_attributes", "created_at")
?? GetNestedString(payload, "object_attributes", "timestamp")
?? GetFirstCommitTimestamp(payload)
?? GetString(payload, "created_at")
?? GetString(payload, "timestamp");
return TryParseTimestamp(timestamp) ?? DateTimeOffset.UnixEpoch;
}
private static string? GetFirstCommitTimestamp(JsonElement payload)
{
if (!payload.TryGetProperty("commits", out var commits) ||
commits.ValueKind != JsonValueKind.Array ||
commits.GetArrayLength() == 0)
{
return null;
}
return GetString(commits[0], "timestamp");
}
private static DateTimeOffset? TryParseTimestamp(string? value)
{
if (string.IsNullOrWhiteSpace(value))
{
return null;
}
return DateTimeOffset.TryParse(
value,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
out var parsed)
? parsed
: null;
}
private static string? GetString(JsonElement element, string property)
{
if (!element.TryGetProperty(property, out var value))

View File

@@ -1,3 +1,4 @@
using System.Globalization;
using System.Text.Json;
using StellaOps.Signals.Scm.Models;
@@ -38,7 +39,7 @@ public sealed class GiteaEventMapper : IScmEventMapper
EventId = deliveryId,
Provider = ScmProvider.Gitea,
EventType = scmEventType,
Timestamp = DateTimeOffset.UtcNow,
Timestamp = ExtractTimestamp(payload),
Repository = repository,
Actor = ExtractActor(payload),
Ref = refName ?? GetString(payload, "ref"),
@@ -172,6 +173,45 @@ public sealed class GiteaEventMapper : IScmEventMapper
};
}
private static DateTimeOffset ExtractTimestamp(JsonElement payload)
{
var timestamp = GetFirstCommitTimestamp(payload)
?? GetNestedString(payload, "pull_request", "updated_at")
?? GetNestedString(payload, "pull_request", "created_at")
?? GetNestedString(payload, "release", "published_at")
?? GetString(payload, "created_at");
return TryParseTimestamp(timestamp) ?? DateTimeOffset.UnixEpoch;
}
private static string? GetFirstCommitTimestamp(JsonElement payload)
{
if (!payload.TryGetProperty("commits", out var commits) ||
commits.ValueKind != JsonValueKind.Array ||
commits.GetArrayLength() == 0)
{
return null;
}
return GetString(commits[0], "timestamp");
}
private static DateTimeOffset? TryParseTimestamp(string? value)
{
if (string.IsNullOrWhiteSpace(value))
{
return null;
}
return DateTimeOffset.TryParse(
value,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
out var parsed)
? parsed
: null;
}
private static string? GetString(JsonElement element, string property)
{
if (!element.TryGetProperty(property, out var value))