From d615b36bedb82eef728a01d161fb296b7299579b Mon Sep 17 00:00:00 2001 From: f Date: Mon, 6 Jan 2025 00:20:17 +0300 Subject: [PATCH] update --- .github/workflows/ai_bot.yml | 76 ++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ai_bot.yml b/.github/workflows/ai_bot.yml index 35ca43b..be838e1 100644 --- a/.github/workflows/ai_bot.yml +++ b/.github/workflows/ai_bot.yml @@ -186,51 +186,77 @@ jobs: readmeContent = readmeContent.slice(0, contributorsIndex) + newSection + readmeContent.slice(contributorsIndex); } - // Get current files from PR branch to get their SHAs - const { data: prReadmeFile } = await octokit.repos.getContent({ + // Prepare CSV content + const csvContent = Buffer.from(csvFile.content, 'base64').toString('utf-8') + + `\n"${actName.replace(/"/g, '""')}","${newPrompt.replace(/"/g, '""')}"`; + + // Create a tree with both files + const { data: mainTree } = await octokit.git.getTree({ owner: event.repository.owner.login, repo: event.repository.name, - path: 'README.md', - ref: pr.head.ref + tree_sha: pr.head.sha, + recursive: true }); - const { data: prCsvFile } = await octokit.repos.getContent({ + // Create blobs for both files + const [readmeBlob, csvBlob] = await Promise.all([ + octokit.git.createBlob({ + owner: event.repository.owner.login, + repo: event.repository.name, + content: Buffer.from(readmeContent).toString('base64'), + encoding: 'base64' + }), + octokit.git.createBlob({ + owner: event.repository.owner.login, + repo: event.repository.name, + content: Buffer.from(csvContent).toString('base64'), + encoding: 'base64' + }) + ]); + + // Create a new tree + const { data: newTree } = await octokit.git.createTree({ owner: event.repository.owner.login, repo: event.repository.name, - path: 'prompts.csv', - ref: pr.head.ref + base_tree: mainTree.sha, + tree: [ + { + path: 'README.md', + mode: '100644', + type: 'blob', + sha: readmeBlob.data.sha + }, + { + path: 'prompts.csv', + mode: '100644', + type: 'blob', + sha: csvBlob.data.sha + } + ] }); - // Update files in PR branch using PR's file SHAs - await octokit.repos.createOrUpdateFileContents({ + // Create a commit + const { data: newCommit } = await octokit.git.createCommit({ owner: event.repository.owner.login, repo: event.repository.name, - path: 'README.md', - message: `feat: Add "${actName}" to README`, - content: Buffer.from(readmeContent).toString('base64'), - branch: pr.head.ref, - sha: prReadmeFile.sha // Use PR's file SHA + message: `feat: Add "${actName}" to prompts`, + tree: newTree.sha, + parents: [pr.head.sha] }); - // Update CSV in PR branch - const csvContent = Buffer.from(csvFile.content, 'base64').toString('utf-8') + - `\n"${actName.replace(/"/g, '""')}","${newPrompt.replace(/"/g, '""')}"`; - - await octokit.repos.createOrUpdateFileContents({ + // Update the reference + await octokit.git.updateRef({ owner: event.repository.owner.login, repo: event.repository.name, - path: 'prompts.csv', - message: `feat: Add "${actName}" to prompts.csv`, - content: Buffer.from(csvContent).toString('base64'), - branch: pr.head.ref, - sha: prCsvFile.sha // Use PR's file SHA + ref: `heads/${pr.head.ref}`, + sha: newCommit.sha }); await octokit.issues.createComment({ owner: event.repository.owner.login, repo: event.repository.name, issue_number: issueNumber, - body: `✨ Updated files in your PR using main branch as base:\n1. Added "${actName}" to README.md\n2. Added the prompt to prompts.csv` + body: `✨ Added "${actName}" to both files` }); } catch (error) {