Skip to content

Added notification feature #36

Added notification feature

Added notification feature #36

Workflow file for this run

name: React Native CI/CD
on:
push:
branches: [main, master]
paths-ignore:
- "**.md"
- "LICENSE"
- "docs/**"
pull_request:
branches: [main, master]
workflow_dispatch:
inputs:
buildType:
type: choice
description: "Build type to run"
options:
- dev
- all
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
NODE_OPTIONS: --openssl-legacy-provider
jobs:
check-skip:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Skip CI check
run: echo "Proceeding with workflow"
build-and-deploy:
needs: check-skip
if: (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')) || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: πŸ— Checkout repository
uses: actions/checkout@v4
- name: πŸ— Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "yarn"
- name: πŸ“¦ Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: πŸ“¦ Setup yarn cache
uses: actions/cache@v3
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: πŸ“¦ Install dependencies
run: |
yarn install
yarn global add eas-cli@latest
- name: πŸ“± Setup EAS build cache
uses: actions/cache@v3
with:
path: ~/.eas-build-local
key: ${{ runner.os }}-eas-build-local-${{ hashFiles('**/package.json') }}
restore-keys: |
${{ runner.os }}-eas-build-local-
- name: πŸ”„ Verify EAS CLI installation
run: |
echo "EAS CLI version:"
eas --version
- name: πŸ“‹ Fix package.json main entry
run: |
# Check if jq is installed, if not install it
if ! command -v jq &> /dev/null; then
echo "Installing jq..."
sudo apt-get update && sudo apt-get install -y jq
fi
# Fix the main entry in package.json
if [ -f ./package.json ]; then
# Create a backup
cp package.json package.json.bak
# Update the package.json
jq '.main = "node_modules/expo/AppEntry.js"' package.json > package.json.tmp && mv package.json.tmp package.json
echo "Updated package.json main entry"
cat package.json | grep "main"
else
echo "package.json not found"
exit 1
fi
- name: πŸ“‹ Update metro.config.js for SVG support
run: |
if [ -f ./metro.config.js ]; then
echo "Creating backup of metro.config.js"
cp ./metro.config.js ./metro.config.js.backup
echo "Updating metro.config.js to CommonJS format"
cat > ./metro.config.js << 'EOFMARKER'
/* eslint-disable @typescript-eslint/no-var-requires */
const { getDefaultConfig } = require('expo/metro-config');
const config = getDefaultConfig(__dirname);
const { transformer, resolver } = config;
config.transformer = {
...transformer,
babelTransformerPath: require.resolve('react-native-svg-transformer/expo'),
};
config.resolver = {
...resolver,
assetExts: resolver.assetExts.filter(ext => ext !== 'svg'),
sourceExts: [...resolver.sourceExts, 'svg'],
};
module.exports = config;
EOFMARKER
echo "metro.config.js updated to CommonJS format"
else
echo "metro.config.js not found"
fi
- name: πŸ“± Build Development APK
if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'dev' || github.event_name == 'push'
run: |
# Build with increased memory limit
export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096"
eas build --platform android --profile development --local --non-interactive --output=./app-dev.apk
env:
NODE_ENV: development
- name: πŸ“¦ Upload build artifacts to GitHub
uses: actions/upload-artifact@v4
with:
name: app-builds
path: |
./app-dev.apk
retention-days: 7