Skip to content

Commit

Permalink
feat: grab screenshot of the running job
Browse files Browse the repository at this point in the history
  • Loading branch information
NiNiyas committed Jan 2, 2024
1 parent 1f76b46 commit 8b371a0
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 40 deletions.
80 changes: 58 additions & 22 deletions dist/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/index.js.map

Large diffs are not rendered by default.

34 changes: 21 additions & 13 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ const axios = require("axios");
const github = require("@actions/github");
const {
screenshot,
uploadFile
uploadFile,
getJobID
} = require("./screenshot");

async function githubmessage() {
Expand Down Expand Up @@ -139,7 +140,7 @@ async function run() {
const title = core.getInput("title") || "GitHub Actions";
const details = core.getInput("details");
const priority = core.getInput("priority") || 3;
const icon = core.getInput("icon")
const icon = core.getInput("icon");
const image = core.getInput("image");
const actionsInput = core.getInput("actions");
let actions;
Expand Down Expand Up @@ -172,18 +173,25 @@ async function run() {
};

if (ImageEnabled) {
await screenshot(
`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`
const jobId = await getJobID(
process.env.GITHUB_REPOSITORY,
process.env.GITHUB_RUN_ID
);
const uploadResult = await uploadFile("/tmp/screenshot.png");

if (uploadResult && uploadResult.filename && uploadResult.url) {
const {
filename,
url
} = uploadResult;
Payload.attach = url;
Payload.filename = filename;
if (jobId) {
await screenshot(
`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}/job/${jobId}`
);

const uploadResult = await uploadFile("/tmp/screenshot.png");

if (uploadResult && uploadResult.filename && uploadResult.url) {
const {
filename,
url
} = uploadResult;
Payload.attach = url;
Payload.filename = filename;
}
}
}

Expand Down
40 changes: 36 additions & 4 deletions src/screenshot.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ async function screenshot(URL) {
);
return null;
}
core.info("Screengrabbing...");
core.info("Capturing screenshot...");
const browser = await playwright.chromium.launch({
executablePath: "/usr/bin/google-chrome",
});
Expand All @@ -22,15 +22,46 @@ async function screenshot(URL) {
await page.goto(URL);
await page.screenshot({
path: "/tmp/screenshot.png",
fullPage: true

});
core.info("Screenshot captured successfully!");
await browser.close();
}

async function getJobID(REPOSITORY, RUN_ID) {
const jobUrl = `https://api.github.com/repos/${REPOSITORY}/actions/runs/${RUN_ID}/jobs`;
const isSiteReachable = await checkSiteReachable(jobUrl);
if (!isSiteReachable) {
core.warning(
"Fetching job id failed. Please ensure that the repository is not private."
);
return null;
}
try {
const response = await axios.get(jobUrl, {
headers: {
Accept: "application/vnd.github.v3+json",
},
});
const {jobs} = response.data;
if (jobs.length > 0) {
return jobs[0].id;
} else {
return null;
}
} catch (error) {
core.error(error);
return null;
}
}

async function checkSiteReachable(URL) {
try {
const response = await axios.head(URL);
return response.status === 200;
} catch (error) {
core.error(error);
return false;
}
}
Expand All @@ -48,22 +79,23 @@ async function uploadFile(filePath) {
return null;
}

core.info("Uploading image to uguu.se...");
const response = await axios.post(siteUrl, formData, {
headers: formData.getHeaders(),
});

if (response.data.success) {
const { filename, url } = response.data.files[0];
return { filename, url };
return response.data.files[0];
} else {
return null;
}
} catch (error) {
return null;
core.error(error);
}
}

module.exports = {
screenshot,
uploadFile,
getJobID,
};

0 comments on commit 8b371a0

Please sign in to comment.