async upsertNewArtifacts()

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} : {}),
          });
        }
      }
    });
  }