Integration Tests #31
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Copyright 2023 Adobe. All rights reserved. | |
# This file is licensed to you 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 http://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 REPRESENTATIONS | |
# OF ANY KIND, either express or implied. See the License for the specific language | |
# governing permissions and limitations under the License. | |
# | |
# Action to execute upstream integration tests - Edge Network (Konductor) | |
name: Integration Tests | |
on: | |
# `*` is a special character in YAML so you have to quote this string | |
# Avoiding start of hour and other common times to avoid conflicts with peak times | |
schedule: | |
# Run every weekday at 12:45 PM PDT (Daylight saving time) -> 7:45 PM UTC | |
# Add +1 hour when back in PST | |
- cron: '45 19 * * 1-5' | |
workflow_dispatch: | |
inputs: | |
branch: | |
description: 'The branch to use when running the integration tests' | |
required: false | |
default: 'main' | |
id: | |
description: '(Optional) The identifier for the run.' | |
required: false | |
tags-mobile-property-id: | |
type: string | |
description: '(Optional) The tags mobile property ID to use for the test. A default is used if not set.' | |
required: false | |
default: '' | |
edge-location-hint: | |
type: choice | |
description: '(Optional) The Edge location hint to set before each test.' | |
required: false | |
default: 'None' | |
options: | |
- 'or2' | |
- 'va6' | |
- 'irl1' | |
- 'ind1' | |
- 'jpn3' | |
- 'sgp3' | |
- 'aus3' | |
- 'EmptyString' | |
- 'Invalid' | |
- 'None' | |
jobs: | |
test-integration-upstream: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
api-level: [29] | |
steps: | |
- name: Job run identifier ${{ github.event.inputs.id }} | |
run: | | |
if [ -z "${{ github.event.inputs.id }}" ]; then \ | |
echo No job run identifier was set. | |
else | |
echo 'Job run identifier is:' ${{ inputs.id }} | |
fi; | |
- name: Delete unnecessary tools 🔧 | |
uses: jlumbroso/[email protected] | |
with: | |
android: false # Don't remove Android tools | |
tool-cache: true # Remove image tool cache - rm -rf "$AGENT_TOOLSDIRECTORY" | |
dotnet: true # rm -rf /usr/share/dotnet | |
haskell: true # rm -rf /opt/ghc... | |
swap-storage: true # rm -f /mnt/swapfile (4GiB) | |
docker-images: false # Takes 16s, enable if needed in the future | |
large-packages: false # includes google-cloud-sdk and it's slow | |
# Set up KVM permissions to enable efficient Android emulator runs by modifying udev rules for universal access. | |
# From https:/android/nowinandroid/blob/main/.github/workflows/Build.yaml#L142 | |
- name: Enable KVM group perms | |
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 | |
ls /dev/kvm | |
- name: Checkout | |
uses: actions/[email protected] | |
with: | |
ref: ${{ github.event.inputs.branch }} | |
- name: Set up Java | |
uses: actions/[email protected] | |
with: | |
distribution: 'zulu' | |
java-version: 17 | |
# - name: Gradle cache | |
# uses: gradle/actions/[email protected] | |
# - name: AVD cache | |
# uses: actions/[email protected] | |
# id: avd-cache | |
# with: | |
# path: | | |
# ~/.android/avd/* | |
# ~/.android/adb* | |
# key: avd-${{ matrix.api-level }} | |
# - name: create AVD and generate snapshot for caching | |
# if: steps.avd-cache.outputs.cache-hit != 'true' | |
# uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # v2.32.0 | |
# with: | |
# api-level: ${{ matrix.api-level }} | |
# arch: x86_64 | |
# disk-size: 6000M | |
# heap-size: 600M | |
# force-avd-creation: false | |
# emulator-options: -no-metrics -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
# disable-animations: false | |
# script: echo "Generated AVD snapshot for caching." | |
- name: Run tests | |
uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # v2.32.0 | |
with: | |
api-level: ${{ matrix.api-level }} | |
arch: x86_64 | |
disk-size: 6000M | |
heap-size: 600M | |
force-avd-creation: false | |
emulator-options: -no-metrics -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
disable-animations: true | |
script: | | |
mkdir -p logs # Ensure the 'logs' directory exists | |
adb logcat -c # clear logs | |
touch logs/emulator.log # create log file | |
chmod 777 logs/emulator.log # allow writing to log file | |
adb logcat >> logs/emulator.log & # pipe all logcat messages into log file as a background process | |
make upstream-integration-test TAGS_MOBILE_PROPERTY_ID=${{ github.event.inputs.tags-mobile-property-id }} EDGE_LOCATION_HINT=${{ github.event.inputs.edge-location-hint }} | |
- name: Upload Logcat Logs | |
if: always() | |
uses: actions/[email protected] | |
with: | |
name: logcat-logs | |
path: logs/emulator.log | |
# Potential workflow solutions on job failure | |
- name: On failure | |
if: ${{ failure() }} | |
run: | | |
echo 'Job used branch: ' ${{ github.event.inputs.branch }}. Please make sure this is the branch to run off of. |