Send Plagiarism Result On CI Complete #814
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Send Plagiarism Result On CI Complete | |
permissions: | |
actions: read | |
contents: read | |
issues: write | |
pull-requests: write | |
on: | |
workflow_run: | |
workflows: ["Plagiarism Checker"] | |
types: | |
- completed | |
jobs: | |
on_pr_finish: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: List available artifacts with detailed logs | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const runId = ${{ github.event.workflow_run.id }}; | |
console.log(`Fetching artifacts for workflow run ID: ${runId}`); | |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: runId | |
}); | |
console.log(`Artifacts found: ${artifacts.data.total_count}`); | |
for (const artifact of artifacts.data.artifacts) { | |
console.log(`Artifact name: ${artifact.name}, ID: ${artifact.id}, Size: ${artifact.size_in_bytes} bytes`); | |
} | |
- name: Download PR Number Artifact | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const fs = require('fs'); | |
const path = require('path'); | |
const runId = ${{ github.event.workflow_run.id }}; | |
const artifactName = 'pr-number'; | |
console.log(`Checking for artifact ${artifactName} from workflow run ID: ${runId}`); | |
try { | |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: runId | |
}); | |
const artifact = artifacts.data.artifacts.find(a => a.name === artifactName); | |
if (!artifact) { | |
console.log(`Artifact '${artifactName}' not found, skipping download.`); | |
return; | |
} | |
const artifactData = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: artifact.id, | |
archive_format: 'zip', | |
}); | |
const artifactPath = path.join(process.env.GITHUB_WORKSPACE, `${artifactName}.zip`); | |
fs.writeFileSync(artifactPath, Buffer.from(artifactData.data)); | |
console.log(`Artifact ${artifactName} downloaded to ${artifactPath}`); | |
require('child_process').execSync(`unzip -o ${artifactPath} -d ${process.env.GITHUB_WORKSPACE}`); | |
const prNumber = fs.readFileSync(path.join(process.env.GITHUB_WORKSPACE, 'pr_number.txt'), 'utf8').trim(); | |
console.log(`PR Number: ${prNumber}`); | |
} catch (error) { | |
console.log(`Error occurred: ${error.message}`); | |
console.log('Continuing workflow execution despite the error.'); | |
} | |
- name: Download Plagiarism Report Artifact from Another Workflow Run | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const fs = require('fs'); | |
const path = require('path'); | |
const runId = ${{ github.event.workflow_run.id }}; | |
const artifactName = 'plagiarism-report'; | |
console.log(`Downloading artifact '${artifactName}' from workflow run ID: ${runId}`); | |
try { | |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: runId | |
}); | |
const artifact = artifacts.data.artifacts.find(a => a.name === artifactName); | |
if (!artifact) { | |
console.log(`Artifact '${artifactName}' not found, skipping download.`); | |
return; | |
} | |
const artifactData = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: artifact.id, | |
archive_format: 'zip', | |
}); | |
const artifactPath = path.join(process.env.GITHUB_WORKSPACE, `${artifactName}.zip`); | |
fs.writeFileSync(artifactPath, Buffer.from(artifactData.data)); | |
console.log(`Artifact ${artifactName} downloaded to ${artifactPath}`); | |
require('child_process').execSync(`unzip -o ${artifactPath} -d ${process.env.GITHUB_WORKSPACE}`); | |
} catch (error) { | |
console.log(`Error occurred: ${error.message}`); | |
console.log('Continuing workflow execution despite the error.'); | |
} | |
- name: Check if Plagiarism Report Exists | |
id: check-report | |
run: | | |
if unzip -l plagiarism-report.zip; then | |
echo "REPORT_EXISTS=true" >> $GITHUB_ENV | |
else | |
echo "REPORT_EXISTS=false" >> $GITHUB_ENV | |
fi | |
- name: Unzip Plagiarism Report Artifact | |
if: env.REPORT_EXISTS == 'true' | |
run: unzip -o plagiarism-report.zip -d ${{ github.workspace }} | |
- name: Fetch Pull Request Comments | |
id: fetch-comments | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const fs = require('fs'); | |
const path = require('path'); | |
const prNumber = fs.readFileSync(path.join(process.env.GITHUB_WORKSPACE, 'pr_number.txt'), 'utf8').trim(); | |
const comments = await github.rest.issues.listComments({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: prNumber | |
}); | |
const hasPlagiarismComment = comments.data.some(comment => comment.body.includes('[Plagiarism Check Result]')); | |
console.log(`Has Plagiarism Comment: ${hasPlagiarismComment}`); | |
return hasPlagiarismComment; | |
- name: Post Markdown as Comment | |
if: env.REPORT_EXISTS == 'true' && steps.fetch-comments.outputs.result != 'true' | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const fs = require('fs'); | |
const path = require('path'); | |
const prNumber = fs.readFileSync(path.join(process.env.GITHUB_WORKSPACE, 'pr_number.txt'), 'utf8').trim(); | |
const markdownPath = path.join(process.env.GITHUB_WORKSPACE, 'plagiarism-report.md'); | |
console.log(`Reading the Markdown report from: ${markdownPath}`); | |
let markdownContent = fs.readFileSync(markdownPath, 'utf8'); | |
console.log("Fetching associated pull request..."); | |
console.log(`Found associated pull request: #${prNumber}`); | |
console.log("Posting the Markdown content as a comment..."); | |
const commentResponse = await github.rest.issues.createComment({ | |
issue_number: prNumber, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: markdownContent | |
}); | |
console.log(`Comment posted successfully: ${commentResponse.data.html_url}`); |