in functions/src/plugins/size.ts [223:261]
async upsertNewArtifacts(context: Context, artifacts: BuildArtifact[]): Promise<void> {
this.logDebug(`[size] Storing artifacts for: ${context.payload.sha}, on branches [${context.payload.branches.map((b: Github.ReposListBranchesResponseItem) => b.commit.url).join(', ')}]`);
const updatedAt = context.payload.updated_at;
const branch = context.payload.branches
.find((b: Github.ReposListBranchesResponseItem) => b.commit.sha === context.payload.commit.sha);
const sizeArtifacts = this.repositories
.doc(context.payload.repository.id.toString())
.collection('sizeArtifacts');
// Generate Document IDs from sha and artifact path
const artifactDocs = artifacts.map(a => sizeArtifacts.doc(
Buffer.from(context.payload.sha + a.path).toString('base64'),
));
return sizeArtifacts.firestore.runTransaction(async transaction => {
const results = await transaction.getAll(...artifactDocs as [any]);
for(let i = 0; i < results.length; ++i) {
if(results[i].exists) {
if(results[i].data().updatedAt < updatedAt) {
transaction.update(results[i].ref, {
...artifacts[i],
sha: context.payload.commit.sha,
updatedAt: context.payload.updated_at,
...(branch ? {branch: branch.name} : {}),
});
}
} else {
transaction.create(results[i].ref, {
...artifacts[i],
sha: context.payload.commit.sha,
updatedAt: context.payload.updated_at,
...(branch ? {branch: branch.name} : {}),
});
}
}
});
}