Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
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
123 changes: 123 additions & 0 deletions .github/actions/submit-survey/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Run all automated tests in the e2eTeest module

inputs:
android-repository:
description: 'ground-android repository under test'
default: google/ground-android

upload-artifacts:
description: 'Whether to upload the final emulator data artifacts'
default: 'false'

google-maps-key:
description: 'A Google Maps API key'

runs:
using: composite
steps:
- name: Checkout
uses: actions/checkout@v6
with:
repository: ${{ inputs.android-repository }}
clean: false

- name: Check Firebase emulator connection
shell: bash
run: |
echo "Checking connection to Firebase emulator..."
if curl -v http://localhost:4000; then
echo "Successfully connected to Firebase emulator!"
else
echo "Failed to connect to Firebase emulator (http://localhost:4000)"
exit 1
fi

- name: Validate and setup MAPS_API_KEY
env:
MAPS_API_KEY: ${{ inputs.google-maps-key }}
shell: bash
run: |
if [ -z "${MAPS_API_KEY}" ]; then
echo "MAPS_API_KEY is missing from GitHub secrets"
exit 1
fi
echo "MAPS_API_KEY is set"
echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" > secrets.properties

- name: Enable KVM group perms
shell: bash
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: Setup JDK 17
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 17

- name: Gradle cache
uses: gradle/actions/setup-gradle@v5

- name: Run tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 30
target: google_apis
arch: x86_64
emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -camera-back none
disable-animations: true
script: |
adb wait-for-device
adb emu geo fix -122.084 37.422
sleep 2
./gradlew connectedLocalDebugAndroidTest --stacktrace

- name: Upload test reports
if: always()
uses: actions/upload-artifact@v6
with:
name: test-reports
path: '**/build/reports/androidTests'
retention-days: 7
if-no-files-found: warn

- name: Upload test screenshots
if: always()
uses: actions/upload-artifact@v6
with:
name: test-screenshots
path: '**/build/outputs/connected_android_test_additional_output'
retention-days: 7
if-no-files-found: ignore

- name: Export Firebase emulator data
if: always()
working-directory: ground-platform
shell: bash
run: |
echo "Exporting emulator data..."
npx firebase emulators:export ${{ github.workspace }}/test-android-result --project demo-local --force

- name: Upload Firebase emulator data
if: always() && inputs.upload-artifacts == 'true'
uses: actions/upload-artifact@v6
with:
name: firebase-emulator-data
path: ${{ github.workspace }}/test-android-result
retention-days: 7
if-no-files-found: warn
179 changes: 0 additions & 179 deletions .github/actions/submit-test/action.yml

This file was deleted.

6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,9 @@
curl -Os https://uploader.codecov.io/latest/linux/codecov
chmod +x codecov
./codecov --verbose upload-process --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} -n 'service'-${{ github.run_id }} -F service -f app/build/reports/jacoco/jacocoLocalDebugUnitTestReport/jacocoLocalDebugUnitTestReport.xml
instrumentation-tests:
needs: build
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
uses: ./.github/workflows/test-e2e.yml
secrets: inherit
56 changes: 15 additions & 41 deletions .github/workflows/test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,53 +14,27 @@
name: End to End Test

on:
issue_comment:
types: [created]
workflow_dispatch:
workflow_call:

jobs:
e2eTest:
run-instrumentation-tests:
runs-on: ubuntu-latest
timeout-minutes: 15
if: github.event.issue.pull_request && contains(github.event.comment.body, '/e2eTest')
steps:
- name: Start test
run: |
echo "Begin end to end test"

timeout-minutes: 30
env:
FIREBASE_CLI_EXPERIMENTS: webframeworks

createTest:
needs: e2eTest
name: Create a new survey
runs-on: ubuntu-latest
timeout-minutes: 10
# See docs/e2e-testing-doc.md for details on how this is setup
steps:
- name: Run create-test
uses: google/ground-platform/.github/actions/create-test@master
with:
upload-artifacts: true
- name: Checkout repository
uses: actions/checkout@v6

submitTest:
needs: createTest
name: Submit to survey
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Run submit-test
uses: ./.github/actions/submit-test
- name: Start Firebase emulator
uses: google/ground-platform/.github/actions/start-emulator@master

- name: Run Android tests on e2eTest module
uses: google/ground-android/.github/actions/submit-survey@master
with:
android-repository: ${{ github.repository }}
google-maps-key: ${{ secrets.GOOGLE_MAPS_KEY }}
use-repo-data: false
upload-artifacts: true


verifyTest:
needs: submitTest
name: Verify survey submissions
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Run verify-test
uses: google/ground-platform/.github/actions/verify-test@master
with:
use-repo-data: false
google-maps-key: ${{ secrets.MAPS_API_KEY }}
Loading