Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
0711032
(revert me) delete existing workflows for convenience while developing
dconeybe Jan 20, 2025
71c8827
dataconnect.yml added
dconeybe Jan 21, 2025
6f369a7
dataconnect.yml fix?
dconeybe Jan 21, 2025
76884b5
dataconnect.yml: compile before doing all the avd stuff
dconeybe Jan 21, 2025
c4b7334
dataconnect.yml: disable firebase-crashlytics-ndk
dconeybe Jan 21, 2025
f6ab119
dataconnect.yml: use actions/checkout@v3v4
dconeybe Jan 21, 2025
f8e31dd
dataconnect.yml: specify show-progress correctly within a "with" block
dconeybe Jan 21, 2025
c975260
dataconnect.yml: remove superfluous repetition of full cache key
dconeybe Jan 21, 2025
acb8586
dataconnect.yml: setup auth emulator
dconeybe Jan 21, 2025
bee5612
dataconnect.yml: FST -> FDC
dconeybe Jan 21, 2025
120d46b
fix tests due to slower github actions runners
dconeybe Jan 21, 2025
c8fec68
dataconnect.yml: more FST -> FDC
dconeybe Jan 21, 2025
c4eb174
dataconnect.yml: set org.gradle.configureondemand=true
dconeybe Jan 21, 2025
0170dc8
dataconnect.yml: echo a newline into gradle.properties since it does …
dconeybe Jan 22, 2025
4cdbd58
dataconnect.yml: refactor, especially to have cache only saved on sch…
dconeybe Jan 22, 2025
9721a18
dataconnect.yml: use /tmp instead of runner.temp because the latter i…
dconeybe Jan 22, 2025
6eef3fa
dataconnect.yaml: add actionlint and fix actionlint errors
dconeybe Jan 22, 2025
b5682ff
dataconnect.yaml: remove extra "avd-cache" id
dconeybe Jan 22, 2025
d4d60dc
dataconnect.yml: use actionlint image
dconeybe Jan 22, 2025
f0e401b
dataconnect.yml: forgot to actually check out the code for actionlint
dconeybe Jan 22, 2025
201a788
dataconnect.yml: accidentally deleted the "steps" part :facepalm:
dconeybe Jan 22, 2025
6849212
dataconnect.yml: specify path to yml file
dconeybe Jan 22, 2025
e8ab235
dataconnect.yml: put an error in that actionlint should find
dconeybe Jan 22, 2025
341e144
Back out "dataconnect.yml: put an error in that actionlint should find"
dconeybe Jan 22, 2025
ee88ce0
dataconnect.yml: use dashes instead of underscores in job name
dconeybe Jan 22, 2025
ebd9c52
dataconnect.yml: add a comment about running actionlint locally
dconeybe Jan 22, 2025
f4f6d9f
Back out "(revert me) delete existing workflows for convenience while…
dconeybe Jan 22, 2025
98da38d
subprojects.cfg: add back firebase-crashlytics-ndk, which was acciden…
dconeybe Jan 22, 2025
de2daa3
dataconnect.yml: get gradle cache before printing tool versions
dconeybe Jan 22, 2025
1913001
dataconnect.yml: remove annoying echos
dconeybe Jan 22, 2025
1a535cb
dataconnect.yml: minor improvements
dconeybe Jan 22, 2025
af9f384
dataconnect.yml: fix multiline
dconeybe Jan 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
215 changes: 215 additions & 0 deletions .github/workflows/dataconnect.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
name: Data Connect Integration Tests

on:
workflow_dispatch:
inputs:
javaVersion:
androidEmulatorApiLevel:
nodeJsVersion:
firebaseToolsVersion:
gradleInfoLog:
type: boolean
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_TOOLS_DIR: /tmp/firebase-tools
FDC_FIREBASE_COMMAND: /tmp/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:
- uses: actions/checkout@v4
with:
show-progress: false

- uses: actions/setup-java@v4
with:
java-version: ${{ env.FDC_JAVA_VERSION }}
distribution: temurin

- uses: actions/setup-node@v4
with:
node-version: ${{ env.FDC_NODEJS_VERSION }}

- name: install firebase-tools
run: |
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
uses: actions/cache/restore@v4
if: github.event_name != 'schedule'
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-cache-jqnvfzw6w7

- name: tool versions
continue-on-error: true
run: |
set +e -v
uname -a
which java
java -version
which javac
javac -version
which node
node --version
${{ env.FDC_FIREBASE_COMMAND }} --version
./gradlew --version

- name: Gradle assembleDebugAndroidTest
run: |
set -v

# Speed up build times and also avoid configuring firebase-crashlytics-ndk
# which is finicky integrating with the Android NDK.
echo >> gradle.properties
echo "org.gradle.configureondemand=true" >> gradle.properties

./gradlew \
--profile \
${{ (inputs.gradleInfoLog && '--info') || '' }} \
:firebase-dataconnect:assembleDebugAndroidTest

- name: Save Gradle cache
uses: actions/cache/save@v4
if: github.event_name == 'schedule'
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-cache-jqnvfzw6w7

- name: Enable KVM group permissions for Android Emulator
run: |
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
uses: actions/cache/restore@v4
if: github.event_name != 'schedule'
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-cache-zhdsn586je-api${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}

- run: echo "github.event_name == '${{ github.event_name }}' steps.avd-cache.outputs.cache-hit == '${{ steps.avd-cache.outputs.cache-hit }}'"

- name: Create AVD
if: github.event_name == 'schedule' || steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
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: false
script: echo "Generated AVD snapshot for caching."

- name: Save AVD cache
uses: actions/cache/save@v4
if: github.event_name == 'schedule'
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-cache-zhdsn586je-api${{ env.FDC_ANDROID_EMULATOR_API_LEVEL }}

- name: Data Connect Emulator
run: |
set -x

echo 'emulator.postgresConnectionUrl=postgresql://postgres:[email protected]:5432?sslmode=disable' > firebase-dataconnect/dataconnect.local.properties

./gradlew \
${{ (inputs.gradleInfoLog && '--info') || '' }} \
:firebase-dataconnect:connectors:runDebugDataConnectEmulator \
>firebase.emulator.dataconnect.log 2>&1 &

- name: Firebase Auth Emulator
run: |
set -x
cd firebase-dataconnect/emulator
${{ env.FDC_FIREBASE_COMMAND }} emulators:start --only=auth >firebase.emulator.auth.log 2>&1 &

- name: Gradle connectedCheck
uses: reactivecircus/android-emulator-runner@v2
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: |
set -eux && ./gradlew ${{ (inputs.gradleInfoLog && '--info') || '' }} :firebase-dataconnect:connectedCheck :firebase-dataconnect:connectors:connectedCheck

- uses: actions/upload-artifact@v4
if: true
with:
name: logs
path: "**/*.log"
if-no-files-found: warn
compression-level: 9

- uses: actions/upload-artifact@v4
with:
name: gradle_build_reports
path: firebase-dataconnect/**/build/reports/
if-no-files-found: warn
compression-level: 9

# 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@v4
with:
show-progress: false
- uses: docker://rhysd/actionlint:1.7.7
with:
args: -color /github/workspace/.github/workflows/dataconnect.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import io.kotest.matchers.shouldBe
import io.kotest.matchers.types.shouldBeInstanceOf
import io.kotest.property.Arb
import io.kotest.property.arbitrary.next
import kotlin.time.Duration.Companion.seconds
import kotlin.time.Duration.Companion.minutes
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.test.runTest
Expand Down Expand Up @@ -388,7 +388,7 @@ class QueryRefIntegrationTest : DataConnectIntegrationTestBase() {

@Test
fun executeShouldSupportMassiveConcurrency() =
runTest(timeout = 60.seconds) {
runTest(timeout = 5.minutes) {
val latch = SuspendingCountDownLatch(25_000)
val query = personSchema.getPerson(id = "foo")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ class QuerySubscriptionIntegrationTest : DataConnectIntegrationTestBase() {
.toList()

assertSoftly {
withClue("results.size") { results.size shouldBeInRange 1..2000 }
withClue("results.size") { results.size shouldBeInRange 1..5000 }
results.forEachIndexed { i, result ->
withClue("results[$i]") { result.shouldHavePersonWithName("NewName") }
}
Expand Down
Loading