chore: add eas build ci (#2741)

* eas build

Signed-off-by: Innei <tukon479@gmail.com>

* fix pnpm

Signed-off-by: Innei <tukon479@gmail.com>

* fix

Signed-off-by: Innei <tukon479@gmail.com>

---------

Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
Innei 2025-02-13 21:56:24 +08:00 committed by GitHub
parent a397ab7f7c
commit fcdf4df5b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 67 additions and 21 deletions

50
.github/workflows/build-eas.yml vendored Normal file
View File

@ -0,0 +1,50 @@
name: Build iOS IPA
on:
push:
branches: [dev, main]
paths:
- "apps/mobile/**"
pull_request:
branches: [dev, main]
paths:
- "apps/mobile/**"
workflow_dispatch:
jobs:
build:
name: Build iOS IPA
runs-on: macos-latest
steps:
- name: 📦 Checkout code
uses: actions/checkout@v4
- name: 📦 Setup pnpm
uses: pnpm/action-setup@v2
with:
run_install: true
- name: 🏗 Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
- name: 📱 Setup EAS
uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- name: 🔨 Build iOS IPA
run: |
cd apps/mobile
eas build --platform ios --profile production --non-interactive --local --output=./build.ipa
# Optional: Upload artifact
- name: 📤 Upload IPA
uses: actions/upload-artifact@v4
with:
name: app-ios
path: apps/mobile/build.ipa
retention-days: 5

View File

@ -4,6 +4,7 @@ import type { ConfigContext, ExpoConfig } from "expo/config"
import PKG from "./package.json"
const isDev = process.env.NODE_ENV === "development"
// const roundedIconPath = resolve(__dirname, "../../resources/icon.png")
const iconPath = resolve(__dirname, "./assets/icon.png")
const adaptiveIconPath = resolve(__dirname, "./assets/adaptive-icon.png")
@ -105,7 +106,7 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
require("./scripts/with-follow-assets.js"),
{
// Add asset directory paths, the plugin copies the files in the given paths to the app bundle folder named Assets
assetsPath: resolve(__dirname, "..", "..", "out", "rn-web"),
assetsPath: isDev ? resolve(__dirname, "..", "..", "out", "rn-web") : "/tmp/rn-web",
},
],
[require("./scripts/with-follow-app-delegate.js")],

View File

@ -1,5 +1,3 @@
const path = require("node:path")
module.exports = function (api) {
api.cache(true)
return {
@ -9,20 +7,12 @@ module.exports = function (api) {
[
"module-resolver",
{
root: ["./"],
alias: {
"es-toolkit/compat": path.resolve(
__dirname,
"../../node_modules/es-toolkit/dist/compat/index.js",
),
"es-toolkit": path.resolve(__dirname, "../../node_modules/es-toolkit/dist/index.js"),
"better-auth/react": path.resolve(
__dirname,
"../../node_modules/better-auth/dist/react.js",
),
"@better-auth/expo/client": path.resolve(
__dirname,
"../../node_modules/@better-auth/expo/dist/client.js",
),
"es-toolkit/compat": "../../node_modules/es-toolkit/dist/compat/index.js",
"es-toolkit": "../../node_modules/es-toolkit/dist/index.js",
"better-auth/react": "../../node_modules/better-auth/dist/react.js",
"@better-auth/expo/client": "../../node_modules/@better-auth/expo/dist/client.js",
},
extensions: [".js", ".jsx", ".ts", ".tsx"],
},

View File

@ -1,14 +1,11 @@
const { getDefaultConfig } = require("expo/metro-config")
const { withNativeWind } = require("nativewind/metro")
const path = require("node:path")
const { wrapWithReanimatedMetroConfig } = require("react-native-reanimated/metro-config")
const config = getDefaultConfig(__dirname, { isCSSEnabled: true })
config.resolver.sourceExts.push("sql")
config.resolver.extraNodeModules = {
"follow-native": "./native",
}
config.transformer.getTransformOptions = async () => ({
transform: {
experimentalImportSupport: false,
@ -16,6 +13,11 @@ config.transformer.getTransformOptions = async () => ({
},
})
config.resolver.nodeModulesPaths = [
path.resolve(__dirname, "./node_modules"),
path.resolve(__dirname, "../../node_modules"),
]
module.exports = wrapWithReanimatedMetroConfig(
withNativeWind(config, { input: "./src/global.css" }),
)

View File

@ -6,11 +6,14 @@ import { defineConfig } from "vite"
import { viteRenderBaseConfig } from "../../../../configs/vite.render.config"
import { astPlugin } from "../../../../plugins/vite/ast"
const isDev = process.env.NODE_ENV === "development"
export default defineConfig({
...viteRenderBaseConfig,
base: "",
build: {
outDir: path.resolve(import.meta.dirname, "../../../../out/rn-web/html-renderer"),
outDir: isDev
? path.resolve(import.meta.dirname, "../../../../out/rn-web/html-renderer")
: path.resolve("/tmp/rn-web/html-renderer"),
},
plugins: [react({}), astPlugin],