@@ -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
190193async 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
204238async function restartServer ( serverId ) {
@@ -215,10 +249,27 @@ async function decompressFile(serverId, targetFile) {
215249}
216250
217251async 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
224275function getInput ( name , options = { required : false } ) {
0 commit comments