Process Workflow Artifacts and Update Status After Echo Job #126
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: Process Workflow Artifacts and Update Status After Echo Job | |
on: | |
workflow_run: | |
workflows: ["Echo on PR"] | |
types: | |
- completed | |
jobs: | |
process_artifacts: | |
if: ${{ github.event.workflow_run.conclusion == 'success' }} | |
runs-on: ubuntu-latest | |
outputs: | |
artifact_downloaded: ${{ steps.download_artifact.outputs.artifact_downloaded }} | |
permissions: | |
actions: read | |
checks: read | |
contents: read | |
deployments: read | |
id-token: write | |
issues: read | |
discussions: read | |
packages: read | |
pages: read | |
pull-requests: read | |
repository-projects: read | |
security-events: read | |
statuses: write | |
steps: | |
- name: Download artifact | |
id: download_artifact | |
uses: actions/github-script@v7 | |
with: | |
retries: 3 | |
script: | | |
const fs = require('fs'); | |
const path = require('path'); | |
const artifactName = 'gh-status'; | |
const allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: context.payload.workflow_run.id, | |
}); | |
// Find the specific artifact | |
const artifact = allArtifacts.data.artifacts.find(artifact => artifact.name === artifactName); | |
if (!artifact) { | |
core.info(`Artifact "${artifactName}" not found. Exiting safely.`); | |
core.setOutput('artifact_downloaded', 'false'); | |
return; | |
} | |
core.setOutput('artifact_downloaded', 'true'); | |
// Download the artifact | |
const download = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: artifact.id, | |
archive_format: 'zip', | |
}); | |
// Write the artifact to a file | |
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/${artifactName}.zip`, Buffer.from(download.data)); | |
- name: 'Unzip artifact' | |
if: ${{ steps.download_artifact.outputs.artifact_downloaded == 'true' }} | |
run: unzip 'gh-status.zip' | |
- name: Create status | |
if: ${{ steps.download_artifact.outputs.artifact_downloaded == 'true' }} | |
uses: actions/github-script@v7 | |
env: | |
WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} | |
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }} | |
ATTEMPTS: ${{ github.event.workflow_run.run_attempt }} | |
with: | |
retries: 3 | |
script: | | |
// Load the JSON content | |
const contentJSON = require('./gh-status.json'); | |
const { | |
job_name: JOB_NAME, | |
context: CUSTOM_CONTEXT = 'Custom CI Status Check', | |
description: CUSTOM_DESCRIPTION = 'Custom CI Status description', | |
target_url: CUSTOM_TARGET_URL, | |
state: CUSTOM_STATE = 'success' | |
} = contentJSON; | |
// Fetch all jobs using pagination | |
const jobs = await github.paginate( | |
github.rest.actions.listJobsForWorkflowRun, | |
{ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: process.env.WORKFLOW_RUN_ID, | |
} | |
); | |
//console.log(JSON.stringify(jobs.data.jobs, undefined, 2)); | |
const job = jobs.find(job => job.name === JOB_NAME); | |
const JOB_ID = job ? job.id : null; | |
// Set default target URL if not defined | |
const targetUrl = CUSTOM_TARGET_URL || `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${process.env.WORKFLOW_RUN_ID}/attempts/${process.env.ATTEMPTS}#summary-${JOB_ID}`; | |
console.log("job id: ", JOB_ID); | |
console.log("state: ", CUSTOM_STATE); | |
console.log("target url: ", targetUrl); | |
console.log("description: ", CUSTOM_DESCRIPTION); | |
console.log("context: ", CUSTOM_CONTEXT); | |
// Create status | |
await github.rest.repos.createCommitStatus({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
sha: process.env.COMMIT_SHA, | |
state: CUSTOM_STATE, | |
target_url: targetUrl, | |
description: CUSTOM_DESCRIPTION, | |
context: CUSTOM_CONTEXT, | |
}); | |
#abc123 |