Skip to content

dataconnect: move github actions command into a shell script out of the yml workflow file #209

dataconnect: move github actions command into a shell script out of the yml workflow file

dataconnect: move github actions command into a shell script out of the yml workflow file #209

Workflow file for this run

name: Data Connect Integration Tests
on:
workflow_dispatch:
inputs:
javaVersion:
androidEmulatorApiLevel:
nodeJsVersion:
firebaseToolsVersion:
githubNotificationsIssue:
pull_request:
paths:
- .github/workflows/dataconnect.yml
- 'firebase-dataconnect/**'
- '!firebase-dataconnect/demo/**'
- '!firebase-dataconnect/scripts/**'
- '!firebase-dataconnect/**/*.md'
- '!firebase-dataconnect/**/*.txt'
schedule:
- cron: '0 11 * * *' # Run nightly at 11am UTC (3am Pacific, 6am Eastern)
env:
FDC_JAVA_VERSION: ${{ inputs.javaVersion || '17' }}
FDC_ANDROID_EMULATOR_API_LEVEL: ${{ inputs.androidEmulatorApiLevel || '34' }}
FDC_NODEJS_VERSION: ${{ inputs.nodeJsVersion || '20' }}
FDC_FIREBASE_TOOLS_VERSION: ${{ inputs.firebaseToolsVersion || '13.29.1' }}
FDC_FIREBASE_COMMAND: firebase-dataconnect/ci/build/firebase-tools/node_modules/.bin/firebase
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
integration-test:
continue-on-error: false
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: password
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Set environment variables
run: |
echo "ORG_GRADLE_PROJECT_firebaseToolsVersion=$FDC_FIREBASE_TOOLS_VERSION" >>"$GITHUB_ENV"
echo "ORG_GRADLE_PROJECT_debugLoggingEnabled=${{ runner.debug || '0' }}" >>"$GITHUB_ENV"
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
show-progress: false
- uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
with:
java-version: ${{ env.FDC_JAVA_VERSION }}
distribution: temurin
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
with:
node-version: ${{ env.FDC_NODEJS_VERSION }}
- name: Install Firebase Tools ("firebase" command-line tool)
run: ./gradlew -P firebase-dataconnect/ci installFirebaseTools
- name: Restore Gradle Cache
id: restore-gradle-cache
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2
if: github.event_name != 'schedule'
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-cache-jqnvfzw6w7-${{ github.run_id }}
restore-keys: |
gradle-cache-jqnvfzw6w7-
- name: Print Command-Line Tool Versions
continue-on-error: true
run: ./gradlew -P firebase-dataconnect/ci printToolVersions
- name: Gradle assembleDebugAndroidTest
run: ./gradlew -P firebase-dataconnect/ci buildIntegrationTests
- name: Save Gradle Cache
uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2
if: github.event_name == 'schedule'
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-cache-jqnvfzw6w7-${{ github.run_id }}
- name: Enable KVM Group Permissions for Android Emulator
run: |
./firebase-dataconnect/ci.zsh \
kvm_setup
- name: Restore AVD Cache
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2
if: github.event_name != 'schedule'
id: restore-avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-cache-zhdsn586je-api${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}-${{ github.run_id }}
restore-keys: |
avd-cache-zhdsn586je-api${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}-
- name: Create AVD
if: github.event_name == 'schedule' || steps.restore-avd-cache.outputs.cache-matched-key == ''
uses: reactivecircus/android-emulator-runner@62dbb605bba737720e10b196cb4220d374026a6d #v2.33.0
with:
api-level: ${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}
arch: x86_64
force-avd-creation: false
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
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
uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # 4.2.2
if: github.event_name == 'schedule'
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-cache-zhdsn586je-api${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}-${{ github.run_id }}
- name: Start Firebase Emulators
run: |
./firebase-dataconnect/ci.zsh \
start_firebase_emulators \
-firebase_command '${{ env.FDC_FIREBASE_COMMAND }}' \
-postgres_connection_url 'postgresql://postgres:[email protected]:5432?sslmode=disable' \
-log_file firebase.emulators.log \
-enable_debug_logs ${{ runner.debug || '0' }}
- name: Logcat Log Capture Start
id: logcat-capture
continue-on-error: true
run: |
./firebase-dataconnect/ci.zsh \
start_logcat_capture \
-adb_command "$ANDROID_HOME/platform-tools/adb" \
-log_file logcat.log
- name: Gradle connectedCheck
id: connectedCheck
uses: reactivecircus/android-emulator-runner@62dbb605bba737720e10b196cb4220d374026a6d #v2.33.0
# Allow this GitHub Actions "job" to continue even if the tests fail so that logs from a
# failed test run get uploaded as "artifacts" and are available to investigate failed runs.
# A later step in this "job" will fail the job if this step fails
continue-on-error: true
with:
api-level: ${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}
arch: x86_64
force-avd-creation: false
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
script: ./gradlew -P firebase-dataconnect/ci runIntegrationTests
- name: Upload Log Files
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
with:
name: integration_test_logs
path: "**/*.log"
if-no-files-found: warn
compression-level: 9
- name: Upload Gradle Build Reports
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
with:
name: integration_test_gradle_build_reports
path: firebase-dataconnect/**/build/reports/
if-no-files-found: warn
compression-level: 9
- name: Verify "Gradle connectedCheck" Step Was Successful
run: |
./firebase-dataconnect/ci.zsh \
verify_connected_check_success \
-connected_check_step_outcome '${{ steps.connectedCheck.outcome }}'
# Check this yml file with "actionlint": https://github.com/rhysd/actionlint
# To run actionlint yourself, run `brew install actionlint` followed by
# `actionlint .github/workflows/dataconnect.yml`
actionlint-dataconnect-yml:
continue-on-error: false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
show-progress: false
sparse-checkout: '.github/'
- uses: docker://rhysd/actionlint:1.7.7
with:
args: -color /github/workspace/.github/workflows/dataconnect.yml
send-notifications:
needs: [integration-test, actionlint-dataconnect-yml]
if: always()
permissions:
issues: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
show-progress: false
sparse-checkout: 'firebase-dataconnect/ci.zsh'
- name: Post Comment on Issue
#if: github.event_name == 'schedule'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -eu
if [[ '${{ github.event_name }}' == 'schedule' ]] ; then
readonly github_notification_issue=6857
else
# Use the "testing" issue for non-scheduled jobs to avoid spamming the other issue
readonly github_notification_issue=6863
fi
./firebase-dataconnect/ci.zsh \
send_notifications \
-github_notification_issue $github_notification_issue \
-github_workflow_name '${{ github.workflow }}' \
-github_repository '${{ github.repository }}' \
-job_status '${{ job.status }}' \
-git_commit_hash '${{ github.sha }}' \
-run_url '${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}' \
-run_id '${{ github.run_id }}' \
-run_number '${{ github.run_number }}' \
-run_attempt '${{ github.run_attempt }}'