Skip to content

Commit 916108b

Browse files
feature/story_006b: Atomic Aggregation | Bug 2 | saveRepo method appends -- automated
1 parent 4d63711 commit 916108b

File tree

8 files changed

+56
-32
lines changed

8 files changed

+56
-32
lines changed

.semver.commit.tag

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
Last Commit: commit c156825300878f21ab73dadb2623e359ccf54607
1+
Last Commit: commit 4d637115a3e8d234b8937ab78d94092cbed4c111
22
Author: Lyns <104910306+lotsofthoughts@users.noreply.github.com>
3-
Date: Wed Jul 16 12:34:06 2025 -0400
3+
Date: Mon Jul 21 11:24:30 2025 -0400

.semver.version.tag

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.5
1+
0.3.6

deno.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@softdist/extensions",
3-
"version": "0.3.5",
3+
"version": "0.3.6",
44
"license": "MIT",
55
"exports": "./src/mod.ts",
66
"test": {

release-notes.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ _An abstract extension system for inspection of Github scopes and settings_
1010
- Package: [@softdist/extensions](https://jsr.io/@softdist/extensions)
1111
- Repository: [@pkgdist/extensions](https://github.com/pkgdist/extensions)
1212

13+
## ^0.3.6
14+
- Implement a new saveRepo object in `class_reporting.ts` because repos keep getting clobbered due to using `createReport` before each dynamic test in `deno run`
15+
- New object saves data by appending to existing files.
16+
- Updated the `check_branch.ts` file and multi-test case in `tests.class_reporting.ts`
17+
1318
## ^0.3.5
1419

1520
- Implemented a bug where the repo aggregator was not seeing other extensiobs of

src/check_branch.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ console.log(
3737
)
3838

3939
// mock the reporting for fun
40-
const report = await $reporting.createReport([], 'report_aggregate.json')
40+
const report1 = await $reporting.createReport([], 'report_aggregate.json')
4141
type ReportRecord = Record<string, unknown>
42-
await report.addEntry(
42+
await report1.addEntry(
4343
'aggregate_report',
4444
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
4545
score: 2,
@@ -55,8 +55,8 @@ await report.addEntry(
5555
},
5656
}),
5757
)
58-
59-
await report.addEntry(
58+
const report2 = await $reporting.createReport([], 'report_aggregate.json')
59+
await report2.addEntry(
6060
'aggregate_report',
6161
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
6262
score: 2,
@@ -72,8 +72,8 @@ await report.addEntry(
7272
},
7373
}),
7474
)
75-
76-
await report.addEntry(
75+
const report3 = await $reporting.createReport([], 'report_aggregate.json')
76+
await report3.addEntry(
7777
'aggregate_report',
7878
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
7979
score: 2,
@@ -90,7 +90,8 @@ await report.addEntry(
9090
}),
9191
)
9292

93-
await report.addEntry(
93+
const report4 = await $reporting.createReport([], 'report_aggregate.json')
94+
await report4.addEntry(
9495
'aggregate_report',
9596
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
9697
score: 2,
@@ -107,7 +108,8 @@ await report.addEntry(
107108
}),
108109
)
109110

110-
await report.addEntry(
111+
const report5 = await $reporting.createReport([], 'report_aggregate.json')
112+
await report5.addEntry(
111113
'aggregate_report',
112114
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
113115
score: 0,
@@ -124,7 +126,8 @@ await report.addEntry(
124126
}),
125127
)
126128

127-
await report.addEntry(
129+
const report6 = await $reporting.createReport([], 'report_aggregate.json')
130+
await report6.addEntry(
128131
'aggregate_report',
129132
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
130133
score: 2,
@@ -141,7 +144,8 @@ await report.addEntry(
141144
}),
142145
)
143146

144-
await report.addEntry(
147+
const report7 = await $reporting.createReport([], 'report_aggregate.json')
148+
await report7.addEntry(
145149
'aggregate_report',
146150
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
147151
score: 2,
@@ -158,7 +162,8 @@ await report.addEntry(
158162
}),
159163
)
160164

161-
await report.addEntry(
165+
const report8 = await $reporting.createReport([], 'report_aggregate.json')
166+
await report8.addEntry(
162167
'aggregate_report',
163168
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
164169
score: 2,
@@ -175,7 +180,8 @@ await report.addEntry(
175180
}),
176181
)
177182

178-
await report.addEntry(
183+
const report9 = await $reporting.createReport([], 'report_aggregate.json')
184+
await report9.addEntry(
179185
'aggregate_report',
180186
$reporting.createReportEntry<Type.ReportEntryWithNone<ReportRecord>>({
181187
score: 2,

src/class_reporting.ts

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,27 @@ export class Reporting<T> {
122122
// Save each repo's data to a temporary JSON file
123123
private async saveRepo(repo: string) {
124124
const tempFile = `${repo}.tmp.json`
125-
const repoData = this.aggregate.repos[repo]
126-
if (!repoData) {
127-
console.error(`No data found for repo: ${repo}. Skipping save.`)
128-
return
125+
let existingData: Type.GenericReportEntry<T>[] = []
126+
127+
// Load existing data from the temporary file if it exists
128+
try {
129+
const data = await Deno.readTextFile(tempFile)
130+
existingData = JSON.parse(data)
131+
} catch (error) {
132+
if (error instanceof Deno.errors.NotFound) {
133+
console.log(`No existing data found for repo: ${repo}. Starting fresh.`)
134+
} else {
135+
console.error(`Failed to load temporary file for repo: ${repo}. Error:`, error)
136+
throw error
137+
}
129138
}
130139

131-
this.writeLock = this.writeLock.then(async () => {
132-
await Deno.writeTextFile(tempFile, JSON.stringify(repoData, null, 2))
133-
console.log(`Saved temporary file for repo: ${repo}`)
134-
})
135-
await this.writeLock
140+
// Append new data to the existing data
141+
const updatedData = [...existingData, ...this.aggregate.repos[repo]]
142+
143+
// Write the updated data back to the temporary file
144+
await Deno.writeTextFile(tempFile, JSON.stringify(updatedData, null, 2))
145+
console.log(`Saved updated data for repo: ${repo} to ${tempFile}`)
136146
}
137147

138148
// Combine all temporary files into the final aggregate report
@@ -185,6 +195,7 @@ export class Reporting<T> {
185195
async load() {
186196
try {
187197
const data = await Deno.readTextFile(this.outputFile)
198+
console.log(`Loading report file: ${this.outputFile}`)
188199
this.aggregate = JSON.parse(data)
189200
} catch (error) {
190201
if (error instanceof Deno.errors.NotFound) {

src/tests/tests.class_reporting.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,22 @@ Deno.test('Reporting: creates and saves aggregate report with correct structure'
2929
const testFile = 'test_report_aggregate.json'
3030
await cleanup(testFile)
3131

32-
const report = await $reporting.createReport([], testFile)
33-
34-
// Register mock hook
35-
report.registerHook(mockNotifyTeams)
32+
const report1 = await $reporting.createReport([], testFile)
33+
report1.registerHook(mockNotifyTeams)
3634

3735
// Add entries for two repos
38-
await report.addEntry('name', {
36+
await report1.addEntry('name', {
3937
score: 1,
4038
rule: 'require-connect-yml',
4139
description: 'desc1',
4240
repo: 'repo1',
4341
path: '/repo1',
4442
success: true,
4543
})
46-
await report.addEntry('name', {
44+
45+
const report2 = await $reporting.createReport([], testFile)
46+
report2.registerHook(mockNotifyTeams)
47+
await report2.addEntry('name', {
4748
score: 0,
4849
rule: 'require-connect-yml',
4950
description: 'desc2',

src/version.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
12
// This file is auto-generated. Do not edit.
2-
export const generatedVersion = '0.3.5'
3+
export const generatedVersion = "0.3.6";

0 commit comments

Comments
 (0)