name: Setup Mobile Environment description: "Sets up the environment for mobile app builds" inputs: app_path: description: "Path to the app directory" required: true node_version: description: "Node version" required: true ruby_version: description: "Ruby version" required: true workspace: description: "Workspace directory path" required: true runs: using: "composite" steps: - name: Install locales and dialog for local development if: ${{ env.ACT }} shell: bash run: | sudo apt-get update sudo apt-get install -y locales dialog unzip # for fastlane - name: Install locales and dialog if: runner.os != 'macOS' shell: bash run: | sudo locale-gen en_US.UTF-8 sudo update-locale LANG=en_US.UTF-8 - name: Setup Ruby environment uses: ruby/setup-ruby@v1 with: ruby-version: ${{ inputs.ruby_version }} - name: Setup Node.js environment uses: actions/setup-node@v4 with: node-version: ${{ inputs.node_version }} - name: Configure bundler shell: bash run: | cd ${{ inputs.app_path }} bundle config set --local path 'vendor/bundle' bundle config set --local deployment 'true' echo "✅ Bundler configured for strict mode (deployment=true)" - name: Install app dependencies shell: bash run: | cd ${{ inputs.app_path }} # Configure Yarn corepack enable yarn set version 4.12.0 echo "📦 Installing JavaScript dependencies with strict lock file..." if ! yarn install --immutable --inline-builds; then echo "" echo "❌ ERROR: yarn.lock is out of date!" echo "" echo "This happens when package.json was modified but yarn.lock wasn't updated." echo "" echo "To fix this:" echo " 1. Run 'yarn install' locally in the app directory" echo " 2. Commit the updated yarn.lock file" echo " 3. Push your changes" echo "" echo "This ensures everyone has the exact same dependency versions." exit 1 fi # Run mobile-specific installation yarn install-app:mobile-deploy - name: Install Ruby dependencies shell: bash run: | cd ${{ inputs.app_path }} # Install Ruby gems with bundler (respecting cache) echo "📦 Installing Ruby gems with strict lock file..." if ! bundle install --jobs 4 --retry 3; then echo "" echo "❌ ERROR: Gemfile.lock is out of date!" echo "" echo "This happens when Gemfile was modified but Gemfile.lock wasn't updated." echo "" echo "To fix this:" echo " 1. Run 'bundle install' locally in the app directory" echo " 2. Commit the updated Gemfile.lock file" echo " 3. Push your changes" echo "" echo "This ensures everyone has the exact same gem versions." exit 1 fi