Skip to content

Commit 0cd67f3

Browse files
committed
feat: retry if upload files 3 times
1 parent 14b5977 commit 0cd67f3

File tree

3 files changed

+133
-31
lines changed

3 files changed

+133
-31
lines changed

dist/index.js

Lines changed: 66 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.js

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ async function main() {
3030
}
3131

3232
for (const serverId of serverIds) {
33+
core.debug(`Uploading to server ${serverId}`);
3334
for (const source of fileSourcePaths) {
35+
core.debug(`Processing source ${source}`);
3436
await validateSourceFile(source);
3537
const targetFile = getTargetFile(targetPath, source);
3638
const buffer = await fs.readFile(source);
@@ -44,6 +46,7 @@ async function main() {
4446
}
4547

4648
for (const element of targets) {
49+
core.debug(`Processing target ${JSON.stringify(element)}`);
4750
const { source, target } = element;
4851
const globber = await glob.create(source, {
4952
followSymbolicLinks: settings.followSymbolicLinks,
@@ -188,17 +191,48 @@ function getTargetFile(targetPath, source) {
188191
}
189192

190193
async function uploadFile(serverId, targetFile, buffer) {
191-
await axios.post(`/api/client/servers/${serverId}/files/write`, buffer, {
192-
params: { file: targetFile },
193-
onUploadProgress: (progressEvent) => {
194-
const percentCompleted = Math.round(
195-
(progressEvent.loaded * 100) / progressEvent.total
196-
);
197-
core.info(
198-
`Uploading ${targetFile} to ${serverId} (${percentCompleted}%)`
199-
);
200-
},
201-
});
194+
core.debug(`Uploading ${targetFile} to ${serverId}`);
195+
let response = await axios.post(
196+
`/api/client/servers/${serverId}/files/write`,
197+
buffer,
198+
{
199+
params: { file: targetFile },
200+
onUploadProgress: (progressEvent) => {
201+
const percentCompleted = Math.round(
202+
(progressEvent.loaded * 100) / progressEvent.total
203+
);
204+
core.info(
205+
`Uploading ${targetFile} to ${serverId} (${percentCompleted}%)`
206+
);
207+
},
208+
}
209+
);
210+
const successful = response.status === 204;
211+
if (!successful) {
212+
core.debug(`Upload failed with status ${response.status}`);
213+
core.debug(`Response data: ${JSON.stringify(response.data)}`);
214+
}
215+
// check if the response was 403 (forbidden), try again until the max retries is reached
216+
let retries = 0;
217+
while (response.status === 403 && retries < 3) {
218+
core.info(`Upload failed, retrying...`);
219+
response = await axios.post(
220+
`/api/client/servers/${serverId}/files/write`,
221+
buffer,
222+
{
223+
params: { file: targetFile },
224+
onUploadProgress: (progressEvent) => {
225+
const percentCompleted = Math.round(
226+
(progressEvent.loaded * 100) / progressEvent.total
227+
);
228+
core.info(
229+
`Uploading ${targetFile} to ${serverId} (${percentCompleted}%)`
230+
);
231+
},
232+
}
233+
);
234+
retries++;
235+
}
202236
}
203237

204238
async function restartServer(serverId) {
@@ -215,10 +249,27 @@ async function decompressFile(serverId, targetFile) {
215249
}
216250

217251
async function deleteFile(serverId, targetFile) {
218-
await axios.post(`/api/client/servers/${serverId}/files/delete`, {
219-
root: "/",
220-
files: [targetFile],
221-
});
252+
let response = await axios.post(
253+
`/api/client/servers/${serverId}/files/delete`,
254+
{
255+
root: "/",
256+
files: [targetFile],
257+
}
258+
);
259+
260+
// check if the response was 403 (forbidden), try again until the max retries is reached
261+
let retries = 0;
262+
while (response.status === 403 && retries < 3) {
263+
core.info(`Delete failed, retrying...`);
264+
response = await axios.post(
265+
`/api/client/servers/${serverId}/files/delete`,
266+
{
267+
root: "/",
268+
files: [targetFile],
269+
}
270+
);
271+
retries++;
272+
}
222273
}
223274

224275
function getInput(name, options = { required: false }) {

0 commit comments

Comments
 (0)