Skip to content

Commit

Permalink
add a quick and dirty android build workflow (#330)
Browse files Browse the repository at this point in the history
* add first 2e2 local test using detox

* Remove unused import statement

* add android e2e workflow

* add a quick and dirty android build workflow

* clean up

* fmt

* lint

* Update android.yml

* Update android.yml

* Update android.yml

* Update android.yml

* Delete e2e-android.yml

* ci

* fmt

* update deps

* Create renovate.json

* Create dependabot.yml

* update e2e test

---------

Co-authored-by: First-Terraner <m.echerbebo@gmail.com>
  • Loading branch information
BilligsterUser and KKA11010 committed Apr 1, 2024
1 parent 36f30f6 commit ec22329
Show file tree
Hide file tree
Showing 20 changed files with 2,534 additions and 604 deletions.
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"
6 changes: 6 additions & 0 deletions .github/renovate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"extends": [
"config:base"
],
"forkProcessing": "enabled"
}
170 changes: 170 additions & 0 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
name: Build-for-android-production

on:
push:
branches: [main, dev]
pull_request:
# types: [opened, reopened]
# types: [opened, synchronize, edited, ready_for_review]

env:
EXPO_NO_TELEMETRY: 1
SENTRY_DISABLE_AUTO_UPLOAD: true
jobs:
build:
name: build-android-production
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Restore cached Cache
id: cache-restore
uses: actions/cache/restore@v4
with:
path: |
~/**/*android*
~/*android*
~/**/*gradle*
~/*gradle*
**/node_modules
./node_modules
**/android
./android
key: ${{ runner.os }}-android-build
restore-keys: |
${{ runner.os }}-android-build
ci-${{ runner.os }}-android-build
- uses: actions/setup-node@v4
with:
cache: npm

- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

- uses: expo/expo-github-action@v8

- name: Setup Android SDK
uses: android-actions/setup-android@v3
with:
packages: platform-tools platforms;android-34 build-tools;33.0.1 build-tools;34.0.0 ndk;25.1.8937393 cmake;3.22.1

- name: Install deps
run: npm ci

- name: PreBuild Android
run: npx expo prebuild -p android --clean

- name: make gradlew executable
run: chmod +x ./android/gradlew

- name: Build android APK
run: |
cd ./android && ./gradlew assembleRelease --no-daemon --stacktrace
find . -type f -name '*.apk' 2>/dev/null
cd ${{ env.GITHUB_WORKSPACE }}
shell: bash

- name: Save Cache
id: cache-save
uses: actions/cache/save@v4
with:
path: |
~/**/*android*
~/*android*
~/**/*gradle*
~/*gradle*
**/node_modules
./node_modules
**/android
./android
key: ${{ runner.os }}-android-build

build-debug:
name: build-android-debug
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Enable KVM
run: |
mkdir -p /etc/udev/rules.d
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 cached Cache
id: cache-restore
uses: actions/cache/restore@v4
with:
path: |
~/**/*android*
~/*android*
~/**/*gradle*
~/*gradle*
**/node_modules
./node_modules
**/android
./android
key: ${{ runner.os }}-android-build-debug
restore-keys: |
${{ runner.os }}-android-build-debug
ci-${{ runner.os }}-android-build-debug
- uses: actions/setup-node@v4
with:
cache: npm

- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

- uses: expo/expo-github-action@v8

- name: Setup Android SDK
uses: android-actions/setup-android@v3
with:
packages: platform-tools platforms;android-34 build-tools;33.0.1 build-tools;34.0.0 ndk;25.1.8937393 cmake;3.22.1

- name: Install deps
run: npm ci

- name: PreBuild Android
run: npx expo prebuild -p android --clean

- name: make gradlew executable
run: chmod +x ./android/gradlew

- name: Detox build
run: npm run detox:build:android

- name: Get device name
id: device-name
run: echo "::set-output name=DEVICE_NAME::$(node -e "console.log(require('./detox.config.js').devices.emulator.device.avdName)")"

- name: Detox test
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 33
arch: x86_64
avd-name: ${{ steps.device-name.outputs.DEVICE_NAME }}
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
script: npm run detox:test:android:ci

- name: Save Cache
id: cache-save
uses: actions/cache/save@v4
with:
path: |
~/**/*android*
~/*android*
~/**/*gradle*
~/*gradle*
**/node_modules
./node_modules
**/android
./android
key: ${{ runner.os }}-android-build-debug
14 changes: 4 additions & 10 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Node.js CI

on:
Expand All @@ -19,23 +16,20 @@ jobs:

strategy:
matrix:
node-version: [18.x, 20.x, 21.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
node-version: [18.x, 21.x]

steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
- run: npm install
cache: npm
- run: npm ci
- run: npm run lint

# - run: npx tsc

- run: npm run test:coverage
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{secrets.CODECOV_TOKEN}}
- run: npm run test:coverage
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,12 @@ web-build/
.*.env.*
.env

# Detox
artifacts/
.artifacts/

# Diagnostic reports (https://nodejs.org/api/report.html)
report/
report/


!.github/workflows/actions/build
3 changes: 2 additions & 1 deletion config/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ const config: ExpoConfig = {
dsn: process?.env?.SENTRY_DSN, // || 'sentry dsn, or use the `SENTRY_DSN` environment variable',
authToken: process?.env?.SENTRY_AUTH_TOKEN, // || 'sentry auth token, or use the `SENTRY_AUTH_TOKEN` environment variable',
}
]
],
'@config-plugins/detox'
],
ios: {
supportsTablet: false,
Expand Down
2 changes: 1 addition & 1 deletion config/jest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export default (): JestConfigWithTsJest => ({
}]
},
resolver: 'ts-jest-resolver',
testRegex: 'test/.*\\.(test|spec)?\\.(ts|tsx)$',
testRegex: 'test/(?!e2e/).*\\.(test|spec)?\\.(ts|tsx)$',
// moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
preset: 'jest-expo',
transformIgnorePatterns: [
Expand Down
57 changes: 57 additions & 0 deletions detox.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/** @type {Detox.DetoxConfig} */
module.exports = {
logger: {
level: process.env.CI ? 'debug' : undefined
},
testRunner: {
args: {
$0: 'jest',
config: './test/e2e/jest.config.ts',
_: ['e2e']
}
},
artifacts: {
rootDir: '.artifacts',
plugins: {
log: process.env.CI ? 'failing' : undefined,
screenshot: 'failing'
}
},
apps: {
'ios.release': {
type: 'ios.app',
build:
'xcodebuild -workspace ios/eastestsexample.xcworkspace -scheme eastestsexample -configuration Release -sdk iphonesimulator -arch x86_64 -derivedDataPath ios/build',
binaryPath: 'ios/build/Build/Products/Release-iphonesimulator/eastestsexample.app'
},
'android.release': {
type: 'android.apk',
build: 'cd android && ./gradlew clean :app:assembleRelease :app:assembleAndroidTest -DtestBuildType=release && cd ..',
binaryPath: 'android/app/build/outputs/apk/release/app-release.apk'
},
},
devices: {
simulator: {
type: 'ios.simulator',
device: {
type: 'iPhone 14'
}
},
emulator: {
type: 'android.emulator',
device: {
avdName: 'Pixel_7_Pro_API_34'
}
}
},
configurations: {
'ios.release': {
device: 'simulator',
app: 'ios.release'
},
'android.emu.release': {
device: 'emulator',
app: 'android.release'
}
}
}
Loading

0 comments on commit ec22329

Please sign in to comment.