From dbd115c8399b6dd3a6fb39ad8462f41113630940 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 12:25:56 -0400 Subject: [PATCH 1/7] dataconnect.yml: lots of improvements, especially terminating async commands --- .github/workflows/dataconnect.yml | 105 ++++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 14 deletions(-) diff --git a/.github/workflows/dataconnect.yml b/.github/workflows/dataconnect.yml index 0c9eb2205e3..f17ef2eea8d 100644 --- a/.github/workflows/dataconnect.yml +++ b/.github/workflows/dataconnect.yml @@ -64,15 +64,16 @@ jobs: with: node-version: ${{ env.FDC_NODEJS_VERSION }} - - name: install firebase-tools + - name: Install Firebase Tools ("firebase" command-line tool) run: | + set -euo pipefail set -v mkdir -p ${{ env.FDC_FIREBASE_TOOLS_DIR }} cd ${{ env.FDC_FIREBASE_TOOLS_DIR }} echo '{}' > package.json npm install --fund=false --audit=false --save --save-exact firebase-tools@${{ env.FDC_FIREBASE_TOOLS_VERSION }} - - name: Restore Gradle cache + - name: Restore Gradle Cache id: restore-gradle-cache uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2 if: github.event_name != 'schedule' @@ -84,9 +85,11 @@ jobs: restore-keys: | gradle-cache-jqnvfzw6w7- - - name: tool versions + - name: Print Command-Line Tool Versions continue-on-error: true run: | + set -euo pipefail + function run_cmd { echo "===============================================================================" echo "Running Command: $*" @@ -105,6 +108,7 @@ jobs: - name: Gradle assembleDebugAndroidTest run: | + set -euo pipefail set -v # Speed up build times and also avoid configuring firebase-crashlytics-ndk @@ -117,7 +121,7 @@ jobs: ${{ (inputs.gradleInfoLog && '--info') || '' }} \ :firebase-dataconnect:assembleDebugAndroidTest - - name: Save Gradle cache + - name: Save Gradle Cache uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2 if: github.event_name == 'schedule' with: @@ -126,14 +130,15 @@ jobs: ~/.gradle/wrapper key: gradle-cache-jqnvfzw6w7-${{ github.run_id }} - - name: Enable KVM group permissions for Android Emulator + - name: Enable KVM Group Permissions for Android Emulator run: | + set -euo pipefail echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \ | sudo tee /etc/udev/rules.d/99-kvm4all.rules sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm - - name: Restore AVD cache + - name: Restore AVD Cache uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2 if: github.event_name != 'schedule' id: restore-avd-cache @@ -156,7 +161,7 @@ jobs: disable-animations: true script: 'echo "Generated AVD snapshot for caching; event_name=${{ github.event_name }}, cache-matched-key=${{ steps.restore-avd-cache.outputs.cache-matched-key }}"' - - name: Save AVD cache + - name: Save AVD Cache uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2 if: github.event_name == 'schedule' with: @@ -165,8 +170,10 @@ jobs: ~/.android/adb* key: avd-cache-zhdsn586je-api${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}-${{ github.run_id }} - - name: Data Connect Emulator + - name: Data Connect Emulator Start + id: data-connect-emulator run: | + set -euo pipefail set -x echo 'emulator.postgresConnectionUrl=postgresql://postgres:password@127.0.0.1:5432?sslmode=disable' > firebase-dataconnect/dataconnect.local.properties @@ -175,15 +182,27 @@ jobs: ${{ (inputs.gradleInfoLog && '--info') || '' }} \ :firebase-dataconnect:connectors:runDebugDataConnectEmulator \ >firebase.emulator.dataconnect.log 2>&1 & + echo "FIREBASE_DATA_CONNECT_EMULATOR_PID=$!" >> "$GITHUB_OUTPUT" - - name: Firebase Auth Emulator + - name: Firebase Auth Emulator Start + id: firebase-auth-emulator run: | + set -euo pipefail set -x cd firebase-dataconnect/emulator ${{ env.FDC_FIREBASE_COMMAND }} emulators:start --only=auth >firebase.emulator.auth.log 2>&1 & + echo "FIREBASE_AUTH_EMULATOR_PID=$!" >> "$GITHUB_OUTPUT" + + - name: Logcat Log Capture Start + id: logcat-capture + continue-on-error: true + run: | + set -euo pipefail + set -v - - name: Capture Logcat Logs - run: adb logcat >logcat.log & + "$ANDROID_HOME/platform-tools/adb" logcat -c + "$ANDROID_HOME/platform-tools/adb" logcat >logcat.log & + echo "LOGCAT_PID=$!" >> "$GITHUB_OUTPUT" - name: Gradle connectedCheck id: connectedCheck @@ -201,7 +220,64 @@ jobs: script: | set -eux && ./gradlew ${{ (inputs.gradleInfoLog && '--info') || '' }} :firebase-dataconnect:connectedCheck :firebase-dataconnect:connectors:connectedCheck - - name: Upload log file artifacts + - name: Logcat Log Capture Stop + if: steps.logcat-capture.outcome == 'success' + continue-on-error: true + run: | + set -euo pipefail + set -v + + kill -s SIGINT ${{ steps.logcat-capture.outputs.LOGCAT_PID }} + loop_count=0 + while kill -0 ${{ steps.logcat-capture.outputs.LOGCAT_PID }} ; do + loop_count=$((loop_count+1)) + if [[ $loop_count == 60 ]] ; then + echo "ERROR: timeout waiting for logcat process to terminate" >&2 + exit 1 + fi + echo "Waiting for logcat process to terminate" + sleep 1 + done + + - name: Firebase Auth Emulator Stop + continue-on-error: true + run: | + set -euo pipefail + set -v + + kill -s SIGINT ${{ steps.firebase-auth-emulator.outputs.FIREBASE_AUTH_EMULATOR_PID }} + + loop_count=0 + while kill -0 ${{ steps.firebase-auth-emulator.outputs.FIREBASE_AUTH_EMULATOR_PID }} ; do + loop_count=$((loop_count+1)) + if [[ $loop_count == 60 ]] ; then + echo "ERROR: timeout waiting for Firebase Auth Emulator process to terminate" >&2 + exit 1 + fi + echo "Waiting for Firebase Auth Emulator process to terminate" + sleep 1 + done + + - name: Data Connect Emulator Stop + continue-on-error: true + run: | + set -euo pipefail + set -v + + kill -s SIGINT ${{ steps.data-connect-emulator.outputs.FIREBASE_DATA_CONNECT_EMULATOR_PID }} + + loop_count=0 + while kill -0 ${{ steps.data-connect-emulator.outputs.FIREBASE_DATA_CONNECT_EMULATOR_PID }} ; do + loop_count=$((loop_count+1)) + if [[ $loop_count == 60 ]] ; then + echo "ERROR: timeout waiting for Firebase Data Connect Emulator process to terminate" >&2 + exit 1 + fi + echo "Waiting for Firebase Data Connect Emulator process to terminate" + sleep 1 + done + + - name: Upload Log Files uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 with: name: integration_test_logs @@ -209,7 +285,7 @@ jobs: if-no-files-found: warn compression-level: 9 - - name: Upload Gradle build report artifacts + - name: Upload Gradle Build Reports uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 with: name: integration_test_gradle_build_reports @@ -217,9 +293,10 @@ jobs: if-no-files-found: warn compression-level: 9 - - name: Verify "Gradle connectedCheck" step was successful + - name: Verify "Gradle connectedCheck" Step Was Successful if: steps.connectedCheck.outcome != 'success' run: | + set -euo pipefail echo 'Failing because the outcome of the "Gradle connectedCheck" step ("${{ steps.connectedCheck.outcome }}") was not successful' exit 1 From d9b7abf6cecd98c1675f3172330bc3b8b5feea1e Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 12:39:59 -0400 Subject: [PATCH 2/7] dataconnect.yml: remove call to adb logcat since it livelocks waiting for the android emulator to launch. --- .github/workflows/dataconnect.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/dataconnect.yml b/.github/workflows/dataconnect.yml index f17ef2eea8d..df8cd1b2f24 100644 --- a/.github/workflows/dataconnect.yml +++ b/.github/workflows/dataconnect.yml @@ -200,7 +200,6 @@ jobs: set -euo pipefail set -v - "$ANDROID_HOME/platform-tools/adb" logcat -c "$ANDROID_HOME/platform-tools/adb" logcat >logcat.log & echo "LOGCAT_PID=$!" >> "$GITHUB_OUTPUT" From 2c9a72177cfe7221ba881dc608daa73aff853587 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 19:19:17 +0000 Subject: [PATCH 3/7] empty commit to trigger github actions From ebd6d02790bd21151459e8599fe1912b29e0bf16 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 15:51:35 -0400 Subject: [PATCH 4/7] dataconnect.yml: use -eq instead of == when comparing integers --- .github/workflows/dataconnect.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dataconnect.yml b/.github/workflows/dataconnect.yml index df8cd1b2f24..a523867a038 100644 --- a/.github/workflows/dataconnect.yml +++ b/.github/workflows/dataconnect.yml @@ -230,7 +230,7 @@ jobs: loop_count=0 while kill -0 ${{ steps.logcat-capture.outputs.LOGCAT_PID }} ; do loop_count=$((loop_count+1)) - if [[ $loop_count == 60 ]] ; then + if [[ $loop_count -eq 60 ]] ; then echo "ERROR: timeout waiting for logcat process to terminate" >&2 exit 1 fi @@ -249,7 +249,7 @@ jobs: loop_count=0 while kill -0 ${{ steps.firebase-auth-emulator.outputs.FIREBASE_AUTH_EMULATOR_PID }} ; do loop_count=$((loop_count+1)) - if [[ $loop_count == 60 ]] ; then + if [[ $loop_count -eq 60 ]] ; then echo "ERROR: timeout waiting for Firebase Auth Emulator process to terminate" >&2 exit 1 fi @@ -268,7 +268,7 @@ jobs: loop_count=0 while kill -0 ${{ steps.data-connect-emulator.outputs.FIREBASE_DATA_CONNECT_EMULATOR_PID }} ; do loop_count=$((loop_count+1)) - if [[ $loop_count == 60 ]] ; then + if [[ $loop_count -eq 60 ]] ; then echo "ERROR: timeout waiting for Firebase Data Connect Emulator process to terminate" >&2 exit 1 fi From 02beb1e984bcb9f30cfff584e2ab95d3a6348daf Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 20:27:55 +0000 Subject: [PATCH 5/7] dataconnect.yml: more robustly kill async processes --- .github/workflows/dataconnect.yml | 56 ++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/.github/workflows/dataconnect.yml b/.github/workflows/dataconnect.yml index a523867a038..a300e1421ba 100644 --- a/.github/workflows/dataconnect.yml +++ b/.github/workflows/dataconnect.yml @@ -182,7 +182,10 @@ jobs: ${{ (inputs.gradleInfoLog && '--info') || '' }} \ :firebase-dataconnect:connectors:runDebugDataConnectEmulator \ >firebase.emulator.dataconnect.log 2>&1 & - echo "FIREBASE_DATA_CONNECT_EMULATOR_PID=$!" >> "$GITHUB_OUTPUT" + + readonly FIREBASE_DATA_CONNECT_EMULATOR_PID=$! + echo "FIREBASE_DATA_CONNECT_EMULATOR_PID=$FIREBASE_DATA_CONNECT_EMULATOR_PID" + echo "FIREBASE_DATA_CONNECT_EMULATOR_PID=$FIREBASE_DATA_CONNECT_EMULATOR_PID" >> "$GITHUB_ENV" - name: Firebase Auth Emulator Start id: firebase-auth-emulator @@ -191,7 +194,10 @@ jobs: set -x cd firebase-dataconnect/emulator ${{ env.FDC_FIREBASE_COMMAND }} emulators:start --only=auth >firebase.emulator.auth.log 2>&1 & - echo "FIREBASE_AUTH_EMULATOR_PID=$!" >> "$GITHUB_OUTPUT" + + readonly FIREBASE_AUTH_EMULATOR_PID=$! + echo "FIREBASE_AUTH_EMULATOR_PID=$FIREBASE_AUTH_EMULATOR_PID" + echo "FIREBASE_AUTH_EMULATOR_PID=$FIREBASE_AUTH_EMULATOR_PID" >> "$GITHUB_ENV" - name: Logcat Log Capture Start id: logcat-capture @@ -200,8 +206,10 @@ jobs: set -euo pipefail set -v - "$ANDROID_HOME/platform-tools/adb" logcat >logcat.log & - echo "LOGCAT_PID=$!" >> "$GITHUB_OUTPUT" + "$ANDROID_HOME/platform-tools/adb" logcat >logcat.log 2>&1 & + readonly LOGCAT_PID=$! + echo "LOGCAT_PID=$LOGCAT_PID" + echo "LOGCAT_PID=$LOGCAT_PID" >> "$GITHUB_ENV" - name: Gradle connectedCheck id: connectedCheck @@ -224,58 +232,68 @@ jobs: continue-on-error: true run: | set -euo pipefail - set -v - kill -s SIGINT ${{ steps.logcat-capture.outputs.LOGCAT_PID }} + echo "Sending SIGINT to logcat process $LOGCAT_PID" + kill -s SIGINT "$LOGCAT_PID" + loop_count=0 - while kill -0 ${{ steps.logcat-capture.outputs.LOGCAT_PID }} ; do + while kill -0 "$LOGCAT_PID" ; do loop_count=$((loop_count+1)) if [[ $loop_count -eq 60 ]] ; then - echo "ERROR: timeout waiting for logcat process to terminate" >&2 + echo "ERROR: timeout waiting for logcat process $LOGCAT_PID to terminate" >&2 exit 1 fi - echo "Waiting for logcat process to terminate" + + echo "Waiting for logcat process $LOGCAT_PID to terminate" sleep 1 done + echo "logcat process $LOGCAT_PID has been successfully terminated" + - name: Firebase Auth Emulator Stop continue-on-error: true run: | set -euo pipefail - set -v - kill -s SIGINT ${{ steps.firebase-auth-emulator.outputs.FIREBASE_AUTH_EMULATOR_PID }} + echo "Sending SIGINT to Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID" + kill -s SIGINT "$FIREBASE_AUTH_EMULATOR_PID" loop_count=0 - while kill -0 ${{ steps.firebase-auth-emulator.outputs.FIREBASE_AUTH_EMULATOR_PID }} ; do + while kill -0 "$FIREBASE_AUTH_EMULATOR_PID" ; do loop_count=$((loop_count+1)) if [[ $loop_count -eq 60 ]] ; then - echo "ERROR: timeout waiting for Firebase Auth Emulator process to terminate" >&2 + echo "ERROR: timeout waiting for Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID to terminate" >&2 exit 1 fi - echo "Waiting for Firebase Auth Emulator process to terminate" + + echo "Waiting for Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID to terminate" sleep 1 done + echo "Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID has been successfully terminated" + - name: Data Connect Emulator Stop continue-on-error: true run: | set -euo pipefail - set -v - kill -s SIGINT ${{ steps.data-connect-emulator.outputs.FIREBASE_DATA_CONNECT_EMULATOR_PID }} + echo "Sending SIGINT to Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID" + kill -s SIGINT "$FIREBASE_DATA_CONNECT_EMULATOR_PID" loop_count=0 - while kill -0 ${{ steps.data-connect-emulator.outputs.FIREBASE_DATA_CONNECT_EMULATOR_PID }} ; do + while kill -0 "$FIREBASE_DATA_CONNECT_EMULATOR_PID" ; do loop_count=$((loop_count+1)) if [[ $loop_count -eq 60 ]] ; then - echo "ERROR: timeout waiting for Firebase Data Connect Emulator process to terminate" >&2 + echo "ERROR: timeout waiting for Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID to terminate" >&2 exit 1 fi - echo "Waiting for Firebase Data Connect Emulator process to terminate" + + echo "Waiting for Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID to terminate" sleep 1 done + echo "Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID has been successfully terminated" + - name: Upload Log Files uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 with: From df34a52085b6e06e0959c8eb278db98f1a183b46 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 20:36:55 +0000 Subject: [PATCH 6/7] dataconnect.yml: use set -xv instead of manually echoing information --- .github/workflows/dataconnect.yml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/.github/workflows/dataconnect.yml b/.github/workflows/dataconnect.yml index a300e1421ba..e59b31b6f66 100644 --- a/.github/workflows/dataconnect.yml +++ b/.github/workflows/dataconnect.yml @@ -174,7 +174,7 @@ jobs: id: data-connect-emulator run: | set -euo pipefail - set -x + set -xv echo 'emulator.postgresConnectionUrl=postgresql://postgres:password@127.0.0.1:5432?sslmode=disable' > firebase-dataconnect/dataconnect.local.properties @@ -183,33 +183,29 @@ jobs: :firebase-dataconnect:connectors:runDebugDataConnectEmulator \ >firebase.emulator.dataconnect.log 2>&1 & - readonly FIREBASE_DATA_CONNECT_EMULATOR_PID=$! - echo "FIREBASE_DATA_CONNECT_EMULATOR_PID=$FIREBASE_DATA_CONNECT_EMULATOR_PID" - echo "FIREBASE_DATA_CONNECT_EMULATOR_PID=$FIREBASE_DATA_CONNECT_EMULATOR_PID" >> "$GITHUB_ENV" + echo "FIREBASE_DATA_CONNECT_EMULATOR_PID=$!" >> "$GITHUB_ENV" - name: Firebase Auth Emulator Start id: firebase-auth-emulator run: | set -euo pipefail - set -x + set -xv + cd firebase-dataconnect/emulator ${{ env.FDC_FIREBASE_COMMAND }} emulators:start --only=auth >firebase.emulator.auth.log 2>&1 & - readonly FIREBASE_AUTH_EMULATOR_PID=$! - echo "FIREBASE_AUTH_EMULATOR_PID=$FIREBASE_AUTH_EMULATOR_PID" - echo "FIREBASE_AUTH_EMULATOR_PID=$FIREBASE_AUTH_EMULATOR_PID" >> "$GITHUB_ENV" + echo "FIREBASE_AUTH_EMULATOR_PID=$!" >> "$GITHUB_ENV" - name: Logcat Log Capture Start id: logcat-capture continue-on-error: true run: | set -euo pipefail - set -v + set -xv "$ANDROID_HOME/platform-tools/adb" logcat >logcat.log 2>&1 & - readonly LOGCAT_PID=$! - echo "LOGCAT_PID=$LOGCAT_PID" - echo "LOGCAT_PID=$LOGCAT_PID" >> "$GITHUB_ENV" + + echo "LOGCAT_PID=$!" >> "$GITHUB_ENV" - name: Gradle connectedCheck id: connectedCheck From 821c9f4d3ca8915fc392144fe61a20a6e4936773 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 20:53:19 +0000 Subject: [PATCH 7/7] dataconnect.yml: don't bother killing the async processes because it's buggy and does not yield much (any?) benefit --- .github/workflows/dataconnect.yml | 67 ------------------------------- 1 file changed, 67 deletions(-) diff --git a/.github/workflows/dataconnect.yml b/.github/workflows/dataconnect.yml index e59b31b6f66..5fa65aa1eef 100644 --- a/.github/workflows/dataconnect.yml +++ b/.github/workflows/dataconnect.yml @@ -223,73 +223,6 @@ jobs: script: | set -eux && ./gradlew ${{ (inputs.gradleInfoLog && '--info') || '' }} :firebase-dataconnect:connectedCheck :firebase-dataconnect:connectors:connectedCheck - - name: Logcat Log Capture Stop - if: steps.logcat-capture.outcome == 'success' - continue-on-error: true - run: | - set -euo pipefail - - echo "Sending SIGINT to logcat process $LOGCAT_PID" - kill -s SIGINT "$LOGCAT_PID" - - loop_count=0 - while kill -0 "$LOGCAT_PID" ; do - loop_count=$((loop_count+1)) - if [[ $loop_count -eq 60 ]] ; then - echo "ERROR: timeout waiting for logcat process $LOGCAT_PID to terminate" >&2 - exit 1 - fi - - echo "Waiting for logcat process $LOGCAT_PID to terminate" - sleep 1 - done - - echo "logcat process $LOGCAT_PID has been successfully terminated" - - - name: Firebase Auth Emulator Stop - continue-on-error: true - run: | - set -euo pipefail - - echo "Sending SIGINT to Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID" - kill -s SIGINT "$FIREBASE_AUTH_EMULATOR_PID" - - loop_count=0 - while kill -0 "$FIREBASE_AUTH_EMULATOR_PID" ; do - loop_count=$((loop_count+1)) - if [[ $loop_count -eq 60 ]] ; then - echo "ERROR: timeout waiting for Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID to terminate" >&2 - exit 1 - fi - - echo "Waiting for Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID to terminate" - sleep 1 - done - - echo "Firebase Auth Emulator process $FIREBASE_AUTH_EMULATOR_PID has been successfully terminated" - - - name: Data Connect Emulator Stop - continue-on-error: true - run: | - set -euo pipefail - - echo "Sending SIGINT to Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID" - kill -s SIGINT "$FIREBASE_DATA_CONNECT_EMULATOR_PID" - - loop_count=0 - while kill -0 "$FIREBASE_DATA_CONNECT_EMULATOR_PID" ; do - loop_count=$((loop_count+1)) - if [[ $loop_count -eq 60 ]] ; then - echo "ERROR: timeout waiting for Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID to terminate" >&2 - exit 1 - fi - - echo "Waiting for Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID to terminate" - sleep 1 - done - - echo "Firebase Data Connect Emulator process $FIREBASE_DATA_CONNECT_EMULATOR_PID has been successfully terminated" - - name: Upload Log Files uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 with: