diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 8c935ae3..0a60723d 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -26,6 +26,7 @@ jobs: - 3.10.0 - 3.11.0 - 3.12.0 + - 3.13.0 env: BACKEND_APISIX_VERSION: ${{ matrix.version }} BACKEND_APISIX_IMAGE: ${{ matrix.version }}-debian @@ -56,6 +57,7 @@ jobs: strategy: matrix: version: + - 3.13.0 - dev # test on latest release #env: # BACKEND_APISIX_VERSION: ${{ matrix.version }} diff --git a/libs/backend-apisix-standalone/src/operator.ts b/libs/backend-apisix-standalone/src/operator.ts index bd7eb282..671246d6 100644 --- a/libs/backend-apisix-standalone/src/operator.ts +++ b/libs/backend-apisix-standalone/src/operator.ts @@ -11,6 +11,7 @@ import { type Subject, catchError, from, + iif, map, of, switchMap, @@ -177,44 +178,52 @@ export class Operator extends ADCSDK.backend.BackendEventSource { }); }), switchMap(() => - from(this.client.put('/apisix/admin/configs', newConfig)).pipe( - tap((resp) => logger(this.debugLogEvent(resp))), - map( - (response) => - ({ - success: true, - event: {} as ADCSDK.Event, // keep empty - axiosResponse: response, - }) satisfies ADCSDK.BackendSyncResult, - ), - catchError< - ADCSDK.BackendSyncResult, - ObservableInput - >((error: Error | AxiosError) => { - if (opts.exitOnFailure) { - if (axios.isAxiosError(error) && error.response) - return throwError( - () => - new Error( - error.response?.data?.error_msg ?? - JSON.stringify(error.response?.data), - ), - ); - return throwError(() => error); - } - return of({ - success: false, - event: {} as ADCSDK.Event, // keep empty, - error, - ...(axios.isAxiosError(error) && { - axiosResponse: error.response, - ...(error.response?.data?.error_msg && { - error: new Error(error.response.data.error_msg), + iif( + () => events.length > 0, + from(this.client.put('/apisix/admin/configs', newConfig)).pipe( + tap((resp) => logger(this.debugLogEvent(resp))), + map( + (response) => + ({ + success: true, + event: {} as ADCSDK.Event, // keep empty + axiosResponse: response, + }) satisfies ADCSDK.BackendSyncResult, + ), + catchError< + ADCSDK.BackendSyncResult, + ObservableInput + >((error: Error | AxiosError) => { + if (opts.exitOnFailure) { + if (axios.isAxiosError(error) && error.response) + return throwError( + () => + new Error( + error.response?.data?.error_msg ?? + JSON.stringify(error.response?.data), + ), + ); + return throwError(() => error); + } + return of({ + success: false, + event: {} as ADCSDK.Event, // keep empty, + error, + ...(axios.isAxiosError(error) && { + axiosResponse: error.response, + ...(error.response?.data?.error_msg && { + error: new Error(error.response.data.error_msg), + }), }), - }), - } satisfies ADCSDK.BackendSyncResult); - }), - tap(() => logger(taskStateEvent('TASK_DONE'))), + } satisfies ADCSDK.BackendSyncResult); + }), + tap(() => logger(taskStateEvent('TASK_DONE'))), + ), + of({ + success: true, + event: {} as ADCSDK.Event, // keep empty + axiosResponse: null, + } satisfies ADCSDK.BackendSyncResult), ), ), );