Skip to content

Commit

Permalink
feat: e2e self-hosted runner
Browse files Browse the repository at this point in the history
  • Loading branch information
limpbrains committed Feb 9, 2024
1 parent 52fbd29 commit cbe3d23
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 10 deletions.
2 changes: 1 addition & 1 deletion .detoxrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ module.exports = {
simulator: {
type: 'ios.simulator',
device: {
type: 'iPhone 14 Pro',
type: 'iPhone 15 Pro',
},
},
emulator: {
Expand Down
101 changes: 101 additions & 0 deletions .github/workflows/e2e-ios-macmini.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: e2e-ios-macmini

on: pull_request

env:
NO_FLIPPER: 1
E2E_TESTS: 1 # build without transform-remove-console babel plugin
DEBUG: 'lnurl* lnurl server'

jobs:
e2e:
runs-on: self-hosted

steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 1

- name: Reset testing enviroment
continue-on-error: true
run: |
pkill -f react-native || echo 0
pkill -f Simulator || echo 0
rm -rf /tmp/lock/*
cd docker && docker compose down -v
- name: Docker info
run: |
docker --version
docker volume ls
docker ps
- name: Run regtest setup
run: |
cd docker
mkdir lnd && chmod 777 lnd
docker-compose pull --quiet
docker compose up -d
- name: Wait for electrum server
timeout-minutes: 10
run: while ! nc -z '127.0.0.1' 60001; do sleep 1; done

- name: Activate enviroment variables
run: cp .env.test.template .env

- name: Yarn Install
run: yarn --no-audit --prefer-offline || yarn --no-audit --prefer-offline
env:
HUSKY: 0

- name: Pod Install
run: pod install --project-directory=ios || pod install --project-directory=ios

- name: Build
run: yarn e2e:build:ios-release || yarn e2e:build:ios-release

- name: Test attempt 1
continue-on-error: true
id: test1
run: yarn e2e:test:ios-release --record-videos all --take-screenshots all --record-logs all

- name: Test attempt 2
continue-on-error: true
id: test2
if: steps.test1.outcome != 'success'
run: yarn e2e:test:ios-release --record-videos all --take-screenshots all --record-logs all

- name: Test attempt 3
continue-on-error: true
id: test3
if: steps.test1.outcome != 'success' && steps.test2.outcome != 'success'
run: yarn e2e:test:ios-release --record-videos all --take-screenshots all --record-logs all

- name: Restart docker before last attempt
if: steps.test1.outcome != 'success' && steps.test2.outcome != 'success' && steps.test3.outcome != 'success'
run: |
cd docker && docker compose down -t 60 && docker compose up --quiet-pull -d && cd ..
while ! nc -z '127.0.0.1' 60001; do sleep 1; done
- name: Test attempt 4
id: test4
if: steps.test1.outcome != 'success' && steps.test2.outcome != 'success' && steps.test3.outcome != 'success'
run: yarn e2e:test:ios-release --record-videos all --take-screenshots all --record-logs all

- uses: actions/upload-artifact@v3
if: failure()
# if: ${{ always() }}
with:
name: e2e-test-videos
path: ./artifacts/

- name: Dump docker logs on failure
if: failure()
uses: jwalton/gh-docker-logs@v2

- name: Clean docker
if: ${{ always() }}
run: |
cd docker && docker compose down -v
6 changes: 5 additions & 1 deletion e2e/helpers.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import fs from 'fs';
import path from 'path';

const LOCK_PATH = '/tmp/';
const LOCK_PATH = '/tmp/lock/';

export const bitcoinURL = 'http://polaruser:[email protected]:43782';
export const electrumHost = '127.0.0.1';
Expand Down Expand Up @@ -31,6 +31,7 @@ export const markComplete = (name) => {
return;
}

fs.mkdirSync(LOCK_PATH, { recursive: true });
fs.writeFileSync(path.join(LOCK_PATH, 'lock-' + name), '1');
};

Expand Down Expand Up @@ -97,6 +98,9 @@ export const launchAndWait = async () => {
});

// wait for AssetsTitle to appear and be accessible
await waitFor(element(by.id('AssetsTitle')))
.toBeVisible()
.withTimeout(300000); // 5 min
for (let i = 0; i < 60; i++) {
try {
await element(by.id('AssetsTitle')).tap();
Expand Down
11 changes: 3 additions & 8 deletions e2e/settings.e2e.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import jestExpect from 'expect';
import parse from 'url-parse';

import {
sleep,
Expand Down Expand Up @@ -537,12 +536,8 @@ d('Settings', () => {
by.id('ConnectedUrl'),
).getAttributes();

// add port to url
const url = parse(origRelay, true);
url.set('hostname', url.hostname + ':443');
const relayUrl = url.toString();

await element(by.id('UrlInput')).replaceText(relayUrl);
const alteredRelay = origRelay + '/';
await element(by.id('UrlInput')).replaceText(alteredRelay);
await element(by.id('Status')).tap(); // close keyboard
await element(by.id('ConnectToUrl')).tap();
await sleep(1000);
Expand All @@ -552,7 +547,7 @@ d('Settings', () => {
by.id('ConnectedUrl'),
).getAttributes();

jestExpect(newRelay).toBe(relayUrl);
jestExpect(newRelay).toBe(alteredRelay);

// now change it back
await element(by.id('UrlInput')).replaceText(origRelay);
Expand Down

0 comments on commit cbe3d23

Please sign in to comment.