fix(ci): resolve duplicate assembly attributes and flaky tests for deploy-prod and collection orchestrator
This commit is contained in:
@@ -218,20 +218,34 @@ jobs:
|
||||
echo "✓ Artifact checksum verified"
|
||||
|
||||
- name: Validate Release Manifest
|
||||
env:
|
||||
ARTIFACT_NAME: ${{ steps.fetch.outputs.artifact }}
|
||||
RELEASE_TAG: ${{ steps.fetch.outputs.tag }}
|
||||
COMMIT_SHA: ${{ steps.fetch.outputs.commit }}
|
||||
run: |
|
||||
ARTIFACT="${{ steps.fetch.outputs.artifact }}"
|
||||
python3 - <<'PY'
|
||||
import json
|
||||
import hashlib
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
artifact = pathlib.Path("${ARTIFACT}")
|
||||
manifest = json.loads(pathlib.Path("${ARTIFACT}.manifest.json").read_text(encoding="utf-8"))
|
||||
artifact_name = os.environ["ARTIFACT_NAME"]
|
||||
release_tag = os.environ["RELEASE_TAG"]
|
||||
commit_sha = os.environ["COMMIT_SHA"]
|
||||
|
||||
artifact = pathlib.Path(artifact_name)
|
||||
manifest_path = pathlib.Path(f"{artifact_name}.manifest.json")
|
||||
|
||||
if not manifest_path.exists():
|
||||
print(f"ERROR: Manifest file not found: {manifest_path}")
|
||||
sys.exit(1)
|
||||
|
||||
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
|
||||
expected = {
|
||||
"artifact": artifact.name,
|
||||
"version": "${{ steps.fetch.outputs.tag }}",
|
||||
"commit": "${{ steps.fetch.outputs.commit }}",
|
||||
"version": release_tag,
|
||||
"commit": commit_sha,
|
||||
}
|
||||
|
||||
for key, value in expected.items():
|
||||
|
||||
@@ -20,6 +20,8 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
private readonly ILogger<KisDataCollectionOrchestrator> _logger;
|
||||
private readonly IRuntimeAuditTrailService _auditTrail;
|
||||
|
||||
public Func<DateTime> UtcNowProvider { get; set; } = () => DateTime.UtcNow;
|
||||
|
||||
public KisDataCollectionOrchestrator(
|
||||
IKisApiClient kisApiClient,
|
||||
ICollectionWriteRepository repository,
|
||||
@@ -70,7 +72,7 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
if (IsMarketClosed())
|
||||
{
|
||||
var latest = await _readRepository.GetLatestSnapshotsForTickerAsync(ticker, 1);
|
||||
var todayPrefix = DateTime.UtcNow.AddHours(9).ToString("yyyy-MM-dd");
|
||||
var todayPrefix = UtcNowProvider().AddHours(9).ToString("yyyy-MM-dd");
|
||||
if (latest.Count > 0 && latest[0].CapturedAt.StartsWith(todayPrefix))
|
||||
{
|
||||
cachedSnapshot = latest[0];
|
||||
@@ -111,7 +113,7 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
// Persist daily OHLCV bars
|
||||
try
|
||||
{
|
||||
var today = DateTime.UtcNow.AddHours(9).ToString("yyyyMMdd");
|
||||
var today = UtcNowProvider().AddHours(9).ToString("yyyyMMdd");
|
||||
var chartResult = await _kisApiClient.GetDailyItemChartPriceAsync(ticker, today, today, "D", account);
|
||||
if (chartResult.TryGetValue("output2", out var output2Obj) && output2Obj is JsonElement output2Elem && output2Elem.ValueKind == JsonValueKind.Array)
|
||||
{
|
||||
@@ -307,10 +309,10 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
return Path.Combine(Path.GetTempPath(), "kis_dotnet_collection_v1.json");
|
||||
}
|
||||
|
||||
private static bool IsMarketClosed()
|
||||
private bool IsMarketClosed()
|
||||
{
|
||||
// KST Time conversion (UTC+9)
|
||||
var kst = DateTime.UtcNow.AddHours(9);
|
||||
var kst = UtcNowProvider().AddHours(9);
|
||||
|
||||
// Weekend check
|
||||
if (kst.DayOfWeek == DayOfWeek.Saturday || kst.DayOfWeek == DayOfWeek.Sunday)
|
||||
|
||||
@@ -48,10 +48,13 @@ public class KisDataCollectionOrchestratorTests
|
||||
[Fact]
|
||||
public async Task RunCollectionAsync_WithCachedSnapshot_ShouldNotCallKisApiClient()
|
||||
{
|
||||
var mockTime = new DateTime(2026, 7, 13, 13, 0, 0, DateTimeKind.Utc); // 2026-07-13 22:00:00 KST (Market closed)
|
||||
_orchestrator.UtcNowProvider = () => mockTime;
|
||||
|
||||
var runId = "test-run-001";
|
||||
var ticker = "005930";
|
||||
var account = "mock";
|
||||
var todayPrefix = DateTime.UtcNow.AddHours(9).ToString("yyyy-MM-dd");
|
||||
var todayPrefix = mockTime.AddHours(9).ToString("yyyy-MM-dd");
|
||||
|
||||
var cachedSnapshot = new CollectionSnapshotRecord(
|
||||
RunId: "prev-run",
|
||||
|
||||
Reference in New Issue
Block a user