-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
119 lines (104 loc) · 3.74 KB
/
index.js
File metadata and controls
119 lines (104 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const core = require("@actions/core");
const github = require("@actions/github");
const fs = require("fs");
const archiver = require("archiver");
const axios = require("axios");
const context = github.context;
const { owner, repo } = context.repo;
if (context.payload.pull_request) {
number = context.payload.pull_request.number;
} else if (context.payload.issue) {
number = context.payload.issue.number;
} else {
core.setFailed("No pull request or issue found in the payload.");
return;
}
async function postComment(message) {
try {
const token = core.getInput('github-token');
const octokit = github.getOctokit(token);
await octokit.rest.issues.createComment({
owner,
repo,
issue_number: number,
body: message
});
} catch (error) {
core.setFailed(`Failed to post comment: ${error.message}`);
}
}
function createZip(sourceDir) {
return new Promise((resolve, reject) => {
const output = fs.createWriteStream(`file.zip`);
const archive = archiver("zip", { zlib: { level: 9 } });
archive
.directory(sourceDir, false)
.pipe(output)
.on('close', () => resolve())
.on('error', reject);
archive.finalize();
});
}
async function sendZipToExternalAPI() {
const url = "https://app.pushpreview.com/api/previews/";
const secretToken = core.getInput("pushpreview-token");
const file = fs.createReadStream("file.zip");
try {
const response = await axios.post(url, {
pr_identifier: number,
organization: owner,
repository_name: repo,
origin_source: 'GitHub',
file
}, {
headers: {
'Content-Type': 'multipart/form-data',
Authorization: `Api-Key ${secretToken}`
}
});
return response.data.previewUrl;
} catch (error) {
let errorMessage;
switch (error.response.status) {
case 401:
errorMessage = "🚨 Error: Invalid API key or team not found. Please verify your credentials.";
break;
case 402:
errorMessage = "🚨 Error: Preview limit reached. Upgrade your plan at pushpreview.com for additional previews and features.";
break;
case 403:
errorMessage = "🚨 Error: Invalid API key or team not found. Please verify your credentials.";
break;
case 413:
errorMessage = "🚨 Error: The preview exceeds the MB limit. Upgrade your plan at pushpreview.com for higher limits and additional features.";
break;
default:
errorMessage = "🚨 Error: Internal server error. Please try again later.";
break;
}
await postComment(errorMessage);
core.setFailed(errorMessage);
return null;
}
}
async function main() {
const sourceDir = core.getInput("source-directory");
console.log(sourceDir);
if (!fs.existsSync(sourceDir)) {
const errorMessage = `The source directory "${sourceDir}" does not exist.`;
await postComment(`Workflow failed with the following error: ${errorMessage}`);
core.setFailed(errorMessage);
return;
}
try {
await createZip(sourceDir);
const previewUrl = await sendZipToExternalAPI();
if (previewUrl) {
await postComment(`🎉 Success! Your live preview is now available. Check it out here: ${previewUrl}`);
}
} catch (error) {
await postComment(`Workflow failed with the following error: ${error.message}`);
core.setFailed(error.message);
}
}
main();