Skip to content

Commit

Permalink
fix: add CI for appium back
Browse files Browse the repository at this point in the history
  • Loading branch information
Bilb committed Nov 14, 2024
1 parent 3fdb341 commit 847cba7
Show file tree
Hide file tree
Showing 16 changed files with 407 additions and 98 deletions.
17 changes: 17 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# this is a sample .env file. Copy it to .env, and edit the .env file to match your needs.

export ANDROID_APK=/home/yougotthis/Downloads/session-android-universal.apk
export SDK_MANAGER_FULL_PATH=/home/yougotthis/Android/Sdk/cmdline-tools/latest/bin/sdkmanager
export AVD_MANAGER_FULL_PATH=/home/yougotthis/Android/Sdk/cmdline-tools/latest/bin/avdmanager
export EMULATOR_FULL_PATH=/home/yougotthis/Android/Sdk/emulator/emulator
export ANDROID_SYSTEM_IMAGE="system-images;android-35;google_atd;x86_64"
export EMULATOR_FULL_PATH=/home/yougotthis/Android/Sdk/cmdline-tools/latest/bin/avdmanager
export IOS_APP_PATH_PREFIX=just_not_empty
export IOS_FIRST_SIMULATOR=just_not_empty
export IOS_SECOND_SIMULATOR=just_not_empty
export IOS_THIRD_SIMULATOR=just_not_empty
export IOS_FOURTH_SIMULATOR=just_not_empty
export IOS_FIFTH_SIMULATOR=just_not_empty
export IOS_SIXTH_SIMULATOR=just_not_empty
export IOS_SEVENTH_SIMULATOR=just_not_empty
export IOS_EIGHTH_SIMULATOR=just_not_empty
166 changes: 158 additions & 8 deletions .github/workflows/android-regression.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,168 @@
name: Run android regression tests
name: Android regression tests
on:
workflow_dispatch:
inputs:
tags:
APK_URL:
description: 'APK.tar.gz url to test'
required: true
type: string
# push:
# branches:
# - test-docker-container
default: https://oxen.rocks/session-foundation/session-android/release/1.20.3/session-android-20241101T052421Z-be16d3bf9-universal.tar.xz

APPIUM_REPO:
description: 'appium repo to checkout'
required: true
type: choice
options:
- session-foundation/session-appium
- burtonemily/session-appium
- bilb/session-appium
default: session-foundation/session-appium

BRANCH_TO_CHECKOUT:
description: 'branch to checkout'
required: true
type: string
default: test-ci-regression

SHARD_NUMBER:
description: 'shard number'
required: true
type: choice
options:
- '1'
- '2'
- '3'
- '4'
default: '1'

SHARD_COUNT:
description: 'shard count'
required: true
type: choice
options:
- '1'
- '2'
- '3'
- '4'
default: '1'

PRINT_FAILED_TEST_LOGS:
description: 'print failed test logs (1 to enable)'
required: true
type: choice
options:
- '0'
- '1'
default: '0'

PRINT_ONGOING_TEST_LOGS:
description: 'print ongoing test logs (1 to enable)'
required: true
type: choice
options:
- '0'
- '1'
default: '0'

# concurrency:
# group: ${{ github.workflow }}
# cancel-in-progress: true

jobs:
android-regression:
runs-on: [self-hosted, linux, x64, qa-android]
runs-on: [self-hosted, linux, X64, qa-android]
env:
ANDROID_APK: '../extracted/session-android.apk'
APPIUM_ADB_FULL_PATH: '/opt/android/platform-tools/adb'
ANDROID_SDK_ROOT: '/opt/android'
PLAYWRIGHT_WORKERS_COUNT: 1
PLAYWRIGHT_RETRIES_COUNT: 0
PRINT_FAILED_TEST_LOGS: ${{ github.event.inputs.PRINT_FAILED_TEST_LOGS }}
PRINT_ONGOING_TEST_LOGS: ${{ github.event.inputs.PRINT_ONGOING_TEST_LOGS }}
IOS_APP_PATH_PREFIX: 'just_not_empty'
IOS_FIRST_SIMULATOR: 'just_not_empty'
IOS_SECOND_SIMULATOR: 'just_not_empty'
IOS_THIRD_SIMULATOR: 'just_not_empty'
IOS_FOURTH_SIMULATOR: 'just_not_empty'
IOS_FIFTH_SIMULATOR: 'just_not_empty'
IOS_SIXTH_SIMULATOR: 'just_not_empty'
IOS_SEVENTH_SIMULATOR: 'just_not_empty'
IOS_EIGHTH_SIMULATOR: 'just_not_empty'

steps:
- name: run tests in already running container
run: docker exec $(docker ps -q) sh -c "dl_and_test"
- uses: actions/checkout@v4
- name: Runner Details
run: |
echo "BRANCH_TO_CHECKOUT ${{ github.event.inputs.BRANCH_TO_CHECKOUT }}"
echo "APPIUM_REPO ${{ github.event.inputs.APPIUM_REPO }}"
echo "APK_URL ${{ github.event.inputs.APK_URL }}"
echo "SHARD_NUMBER ${{ github.event.inputs.SHARD_NUMBER }}"
echo "SHARD_COUNT ${{ github.event.inputs.SHARD_COUNT }}"
- name: Download APK
run: |
wget -q -O session-android.apk.tar.xz ${{ github.event.inputs.APK_URL }}
ls
pwd
- name: Extract APK
run: |
tar xf session-android.apk.tar.xz
ls
pwd
- name: Rename extracted folder
run: |
mv session-android-*universal extracted
ls extracted
mv extracted/*.apk extracted/session-android.apk
ls extracted
pwd
- uses: actions/checkout@v4
with:
repository: ${{ github.event.inputs.APPIUM_REPO }}
ref: ${{ github.event.inputs.BRANCH_TO_CHECKOUT }}
path: 'forked-session-appium'

- uses: actions/setup-node@v4
with:
# node-version-file: 'forked-session-appium/.nvmrc'
node-version: 18.15.0

- name: Install yarn
run: |
npm install -g yarn
corepack enable
yarn set version 4.1.1
- name: Install test dependencies
run: |
cd forked-session-appium
ls
git status
touch yarn.lock
yarn install --immutable
- name: Build the Android tests
run: |
cd forked-session-appium
yarn tsc
- name: Restart adb server
shell: bash
continue-on-error: true # just so we don't fail if adb wasn't alreadu running
run: |
source ./scripts/ci.sh
adb kill-server;
adb start-server;
- name: Start 4 android emulators with snapshots
shell: bash
run: |
source ./scripts/ci.sh
start_with_snapshots
- name: Run the Android tests
run: |
cd forked-session-appium
pwd
yarn test-android-shard ${{ github.event.inputs.SHARD_NUMBER }}​​/${{ github.event.inputs.SHARD_COUNT }}​​
- name: Killall running emulators
if: always()
continue-on-error: true # just so we don't fail
shell: bash
run: |
source ./scripts/ci.sh
killall_emulators
7 changes: 4 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ chromeDriver
run/**/*.js
*.js.map
*.js
run/test/specs/to do
run/test/specs/to do
to do
.vscode/
.yarn/
.env
playwright.config.js
test-results/
output/
dist/
dist/
avd/*
.eslintcache
8 changes: 5 additions & 3 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ chromeDriver
run/**/*.js
*.js.map
*.js
run/test/specs/to do
run/test/specs/to do
to do
.vscode/
.yarn/
.env
playwright.config.js
test-results/
.prettierrc
.prettierrc
README.md
package.json
/avd/
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Once done, you should be able to start each emulators and have them running at t

## Environment variables needed

Before you can start the tests, you need to setup some environment variables:
Before you can start the tests, you need to setup some environment variables. See the file .env.sample for an example.

#### ANDROID_SDK_ROOT

Expand Down Expand Up @@ -54,7 +54,7 @@ Somehow, Appium asks for the sdk tools but do not force the adb binary to come f

## Running tests on iOS Emulators

First you need to get correct branch of Session that you want to test from Github. See [(https://github.com/oxen-io/session-ios/releases/)] and download the latest **ipa** under **Assets**
First you need to get correct branch of Session that you want to test from Github. See [(https://github.com/session-foundation/session-ios/releases/)] and download the latest **ipa** under **Assets**

Then to access the **.app** file that Appium needs for testing you need to build in Xcode and then find .app in your **Derived Data** folder for Xcode.

Expand Down
28 changes: 28 additions & 0 deletions adbkey
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDGvv6TARgHpm86
ROYUGk7YJ0AT7A61Sa74YaNz2IiE8nqECpEQ25NJyg0jZluXSb99XEAFjVDOGswh
nJtsrFmG0IEQh9kiQuLOVcyW5pxLiwoRaQgdcUlrocwe/HPkdQ6FbFqm+m9v8wJ3
6zqLp6dm3xPpIdfp11ZTvPb1uRTEXF7ciRzq1I25h7spDXVJcA4yECooD4gvWUrd
FqoxL88pn/9MVjqKYQYUeC+pUbwkdm5fn4jWBcP5zFVB2fvzup9R3C0D1vuN2V5Z
Ef9P+XjJw9TUfKTQxzAHfQsHhkau5SGut+UCwpdSn9wDcgFpQhby4rAcPN1IFshD
/BYxwfM/AgMBAAECggEAHX+3ysX8yms6UyHALKJYVYjt39xyX8IXWv0oWkd8wTmO
/w46czrED8289CYl2Ly01BHfMXPE10fu8zDgI4R+p/NGqizKXmV4beZvlBjtKzab
QJ5K+rkX4VvbL4uKVWcdHVH0hULioMZ8SqRQGkPA0GoH9dsfcFvqj59FNeT0tM2Q
oCPg4wuEhQdSSmBGHyDH1B7vPMJJ5i9Rqe2+hT8WMhIvlAdDVpA3AY9xpg2PsBYb
JSMhjbeQz5OoHSsfw6+KsQcKoA2xqnwFDUz5VtnWhnUvarVbBfPZ+LJ30NB8oz3M
i/vt7qs2BKr1Eo36cQuVtskDnq7jHbXFOXnYiUCuIQKBgQDvai3CSftMW/GEMh91
FCY9+2TtrFQHz92bqY4EEo11mCGOXiU06U15KXuONz4ntTCoPjk/+e0+iQ0G05dT
P+zHTwiAcMkVE7NpaReArowD+xV4Bax0pLq6QYSE9/uzy4OJlrTVsGrklfAUMvsk
Sg06zgBUBPY9fIR8P/qqkiNguQKBgQDUg5cjWsfTtkx9oGHxanYSZ6b0YZXQnJP8
/5S1RSNtEMX2yyq9b5Nyn7BrDTaSTa3fGXY//qXMOOOZArYvrDmu8MwsiW5jUrca
C6n2qTRCHKQ1DbWhy2etx7+zAzL8V1e0S18Rf8ESw63SgxkYIlQs6WwhZKLhpMYH
wAZ9mIjHtwKBgQDpmGfdUeHnty4HFgCrc2V8xHTNkX7LwH0xDFaMkq2DN1RGXIVh
AuGcfmUXdb8nbxpyjYO+cFSS15XmOz1C9PRJ40sgRutrrTU4fFl6LNRgbfOcj6yc
gr3OTW7Hbk4gN0m4TVtTxDYHomQE0VlJJxeRcL3RPKYliACcWrBxDPWHwQKBgGPZ
5ITHHccbC7unRP3SwOGK9EY1J9haCarBR9UYRDn1vJ5l/ZH+v/AGmjTig3agqwZ9
hzMwaiSXwlDdlk62BHBvUe/HLyfZ8JB7VIPCIvzBSmJnK6V21iMwDKGG6kjonRvo
oiWtukEf0idsU7kkQBrOHnFeQK325tkzX5lZt0LnAoGBAN+ZocRrObAYtaZ9AB5h
imN+fX2tm07UbkHiIlADlVINI9X26PkzkZHUzuAoniWh+ScxBlLzA80IR8BfbK5Y
Lq6oiVq7P627938L4hQV6z0OyijV+xkz5zJG61KClbd6dUJXS0fx4ZxuD5EP8y0D
M/SZ1KBz7Vg/LLeSpdVbqDnM
-----END PRIVATE KEY-----
2 changes: 2 additions & 0 deletions adbkey.pub
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
QAAAAEGDuHc/88ExFvxDyBZI3TwcsOLyFkJpAXID3J9Sl8IC5beuIeWuRoYHC30HMMfQpHzU1MPJePlP/xFZXtmN+9YDLdxRn7rz+9lBVcz5wwXWiJ9fbnYkvFGpL3gUBmGKOlZM/58pzy8xqhbdSlkviA8oKhAyDnBJdQ0pu4e5jdTqHIncXlzEFLn19rxTVtfp1yHpE99mp6eLOut3AvNvb/qmWmyFDnXkc/wezKFrSXEdCGkRCotLnOaWzFXO4kIi2YcQgdCGWaxsm5whzBrOUI0FQFx9v0mXW2YjDcpJk9sQkQqEevKEiNhzo2H4rkm1DuwTQCfYThoU5kQ6b6YHGAGT/r7G4qMNYnPnzAoCHKvL7n1oNNGqrbRETN3blNtQfjzzoCAZMIE+1gAK9BMaJu2gdsn8py1Ri8wejmcwL6/1eXtjrEVXByMQh8Tv4WcgMkQQzdjkafuwOxZaLVvlCqZvSgPpCpBKPgnvRSTlQJt185/k0D+lBocKUZNQ84QDLfQhV+0+uBssaUGc9lNcXDtHC1DvhmR9gThAAJqvazHMoskprLoLqySWqAgVJs3x/bsWJhy8Cnslfx5nGk3EG3wpVrjuc9lwauFEHef/5x1M4+Ofag+iVIqoscjMKNq8TIXl0APfgm6c4CF41poUhQccfAJ2tOaSm7txfnpRiUBh4wzoHAEAAQA= @buildkitsandbox

2 changes: 1 addition & 1 deletion eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export default tseslint.config(
files: ['**/*.{ts,tsx,cts,mts,js,cjs,mjs}'],
},
{
ignores: ['**/node_modules/**', '.yarn/', 'eslint.config.mjs', 'run/**/*.js'],
ignores: ['**/node_modules/**', '.yarn/', 'eslint.config.mjs', 'run/**/*.js', 'avd/'],
},
eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked, // see https://typescript-eslint.io/getting-started/typed-linting/
Expand Down
18 changes: 8 additions & 10 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ import dotenv from 'dotenv';
dotenv.config();

import { defineConfig } from '@playwright/test';
import { toNumber } from 'lodash';
import {
getRepeatEachCount,
getRetriesCount,
getWorkersCount,
} from './run/test/specs/utils/binaries';

const useSessionReporter = true;
// NOTE: without this, the wrong source map is loaded and the stacktraces are all wrong
Expand All @@ -16,15 +20,9 @@ export default defineConfig({
testDir: './run/test/specs',
testIgnore: '*.js',
// outputDir: './tests/automation/test-results',
retries: process.env.PLAYWRIGHT_RETRIES_COUNT
? toNumber(process.env.PLAYWRIGHT_RETRIES_COUNT)
: 0,
repeatEach: process.env.PLAYWRIGHT_REPEAT_COUNT
? toNumber(process.env.PLAYWRIGHT_REPEAT_COUNT)
: 0,
workers: process.env.PLAYWRIGHT_WORKERS_COUNT
? toNumber(process.env.PLAYWRIGHT_WORKERS_COUNT)
: 1,
retries: getRetriesCount(),
repeatEach: getRepeatEachCount(),
workers: getWorkersCount(),
reportSlowTests: null,
fullyParallel: true, // otherwise, tests in the same file are not run in parallel
});
2 changes: 1 addition & 1 deletion run/test/specs/test.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { newUser } from './utils/create_account';
import { SupportedPlatformsType, closeApp, openAppOnPlatformSingleDevice } from './utils/open_app';

iosIt('Tiny test', undefined, tinyTest, true);
androidIt('Tiny test', undefined, tinyTest, true);
androidIt('Tiny test', undefined, tinyTest, false);

async function tinyTest(platform: SupportedPlatformsType) {
const { device } = await openAppOnPlatformSingleDevice(platform);
Expand Down
Loading

0 comments on commit 847cba7

Please sign in to comment.