npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@junaid-fts/expo-automation

v1.0.2

Published

Expo Automation Framework

Downloads

57

Readme

🚀 Expo Build Automation (Direct Execution)

Streamline your React Native build and submission workflow. Automate Android & iOS builds and TestFlight submissions directly from your server.


📋 Overview

Expo Build Automation is a web-based tool designed to simplify the complex process of building and deploying Expo apps. Unlike dispersed CI/CD pipelines, this version runs directly on your server, giving you full control over the build environment and execution.

It abstracts away the command-line intricacies (EAS CLI), offering a user-friendly form to:

  1. Generate/Clone Expo apps.
  2. inject configuration and credentials dynamically.
  3. Build & Submit using the server's local resources.

🚀 User Guide

How to Use the Application

  1. Access the Web Interface: Navigate to http://localhost:3000 (or your server's IP).

  2. Fill in App Details:

    • App Name: Enter a unique slug. This will be used to create a dedicated Git branch app/<slug>.
    • Expo Access Token: Your Expo authentication token.
    • Source Repo: (Optional) URL of a Template repository to clone. If left blank, a default "Blank" template is used.
  3. Configure Credentials:

    • Android: Upload/path to Keystore (or let it auto-generate one).
    • iOS: Provide P12 Certificate and Provisioning Profile paths.
  4. Start Build:

    • Click Create & Build App.
    • Live Logs: You will see real-time logs streaming from the server as it:
      • Clones/Scaffolds the app.
      • Configures app.json.
      • Runs eas build.
  5. Artifacts:

    • Once the build completes, a direct download link (Expo Artifact URL) will be provided.

🏗️ Architecture & Internal Workflow

This branch uses a Direct Server Execution model.

High-Level Flow

graph TD
    User[User @ Web UI] -->|Submits Form| API[Next.js API Route]
    API -->|Instantiates| Framework[MyFramework Class]
    
    subgraph Server Context
        Framework -->|1. Scaffolds| AppDir[Temp App Directory]
        Framework -->|2. Injects| Config[app.json / eas.json]
        Framework -->|3. Git Ops| Git[Push to Branch app/xyz]
        Framework -->|4. Executes| EAS[EAS CLI Process]
    end
    
    EAS -->|Builds| Cloud[Expo Cloud Builders]
    EAS -->|Submits| Apple[TestFlight]
    
    EAS -.->|Streams Logs| API
    API -.->|SSE Stream| User

Key Components (src/lib/framework.ts)

  1. MyFramework Class: The core orchestrator that manages the lifecycle of an automated build.

  2. App Generation Strategy:

    • Branch Reuse: Checks if a branch app/<appName> already exists in the hosting repo. If so, it reuses it.
    • Template Cloning: If repoUrl is provided, it clones that repo.
    • Scaffolding: If neither, it runs npx create-expo-app to generate a fresh blank app.
  3. Git Management:

    • The tool runs inside a Git repository.
    • For every new app build, it creates an Orphan Branch (app/<appName>).
    • It commits the generated code and pushes it to origin. This ensures every build has a reproducible source history.
  4. Local Execution:

    • Instead of dispatching to GitHub Actions, this tool uses Node.js spawn and execSync to run eas build commands locally on the server.
    • Benefit: Immediate feedback, no external CI dependencies.
    • Requirement: The server must be capable of running Node.js processes for extended periods.

💻 Prerequisites & Setup

Since this runs builds locally, your server environment must be prepared.

System Requirements

  • OS: Linux (Ubuntu/Debian recommended), macOS, or Windows using WSL.
  • Runtime: Node.js 18+.
  • Git: Installed and authenticated (SSH keys or HTTPS credentials stored).

Installation

  1. Clone the Repo:

    git clone https://github.com/YourRepo/Expo-Automation.git
    cd Expo-Automation
  2. Install Dependencies:

    npm install
  3. Install Global Tools: The framework relies on eas-cli.

    npm install -g eas-cli
  4. Environment Variables: Create a .env.local file:

    EXPO_TOKEN=your_token_here (Optional default)

Running the Server

# Development
npm run dev

# Production
npm run build
npm start

🔑 Credentials Handling

  • Transient: Credentials used during the build are written to credentials.json in a temporary directory.
  • Cleanup: The temporary directory is deleted after the build completes (success or fail).
  • Security: Ensure your server is secure, as credentials exist on the filesystem for the duration of the build.

Built with ❤️ for the Expo Community.