From b6c151299dca142049a3195d7cd9d266891193c6 Mon Sep 17 00:00:00 2001 From: Marfin <248203147+arifinahmad99-cloud@users.noreply.github.com> Date: Sun, 1 Mar 2026 02:43:01 +0800 Subject: [PATCH 1/4] Update devcontainer configuration for React Native MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Explanation of Key Parts Section Purpose image Uses a Microsoft-maintained Node.js 18 image (includes git, curl, etc.). features Adds Java 17 (for Android builds), Docker-in-Docker (if you need to run Android emulators in containers – not typical), and Ruby (for CocoaPods). postCreateCommand Runs a setup script (see below) after the container is created. This script installs React Native CLI, CocoaPods, Watchman, and Android SDK. forwardPorts Exposes Metro bundler (8081) and Expo ports. customizations Configures VS Code with essential extensions and settings for React Native. remoteUser Runs as node user to avoid permission issues with mounted files. Accompanying Script: .devcontainer/post-create.sh --- .devcontainer/devcontainer.json | 65 +++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..1eb0e0f55 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,65 @@ +{ + "name": "React Native (macOS)", + // Use a pre-built image with Node.js and common tools + "image": "mcr.microsoft.com/devcontainers/javascript-node:18", + // Or build from a Dockerfile for more control (uncomment the lines below) + // "build": { + // "dockerfile": "Dockerfile" + // }, + + // Add additional features (CLI tools) + "features": { + "ghcr.io/devcontainers/features/java:1": { + "version": "17", + "installMaven": false, + "installGradle": true + }, + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/ruby:1": { + "version": "3.2" + } + }, + + // Configure environment variables (optional) + "containerEnv": { + "ANDROID_HOME": "/usr/local/android-sdk", + "JAVA_HOME": "/usr/local/sdkman/candidates/java/current" + }, + + // Run commands after the container is created + "postCreateCommand": "bash .devcontainer/post-create.sh", + + // Ports to forward (Metro bundler uses 8081) + "forwardPorts": [8081, 19000, 19001, 19002, 8081], + "portsAttributes": { + "8081": { + "label": "Metro Bundler", + "onAutoForward": "notify" + } + }, + + // Install VS Code extensions for React Native + "customizations": { + "vscode": { + "extensions": [ + "msjsdiag.vscode-react-native", + "msjsdiag.vscode-react-native-tools", + "dsznajder.es7-react-js-snippets", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "streetsidesoftware.code-spell-checker", + "vscjava.vscode-java-pack", + "redhat.vscode-xml", + "vadimcn.vscode-lldb" + ], + "settings": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "react-native-tools.showDevMenuOnStartup": true + } + } + }, + + // Use a non-root user to avoid permission issues + "remoteUser": "node" +} From f1f0c8abc09b32cc9e9f3e9f76d0714741e527f8 Mon Sep 17 00:00:00 2001 From: Marfin <248203147+arifinahmad99-cloud@users.noreply.github.com> Date: Sun, 1 Mar 2026 02:49:22 +0800 Subject: [PATCH 2/4] Create Dockerfile for Node.js and Java 17 setup Set up a Dockerfile for Node.js development environment with Java 17, React Native CLI, CocoaPods, and Watchman. --- .devcontainer/dockerfile | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .devcontainer/dockerfile diff --git a/.devcontainer/dockerfile b/.devcontainer/dockerfile new file mode 100644 index 000000000..f741dd61b --- /dev/null +++ b/.devcontainer/dockerfile @@ -0,0 +1,28 @@ +# Start from the official Node.js 18 image (Debian-based) +FROM node:18 + +# Install Java 17 (OpenJDK) and other system dependencies +RUN apt-get update && apt-get install -y \ + openjdk-17-jdk \ + wget \ + unzip \ + git \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Set JAVA_HOME environment variable +ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 +ENV PATH=$JAVA_HOME/bin:$PATH + +# Install React Native CLI globally (optional) +RUN npm install -g react-native-cli + +# Install CocoaPods (requires Ruby) +RUN gem install cocoapods + +# Install Watchman (optional but recommended) +RUN apt-get update && apt-get install -y watchman + +# Set up a non-root user (optional but good practice) +RUN useradd -m -s /bin/bash node +USER node From 2dc74e8bd35981cfb449352c5de0443d35396017 Mon Sep 17 00:00:00 2001 From: Marfin <248203147+arifinahmad99-cloud@users.noreply.github.com> Date: Sun, 1 Mar 2026 02:51:03 +0800 Subject: [PATCH 3/4] Add post-create script for Android SDK setup This script sets up the Android SDK by downloading command line tools, accepting licenses, and installing required SDK components. --- .devcontainer/post-create.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .devcontainer/post-create.sh diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh new file mode 100644 index 000000000..48ffc664d --- /dev/null +++ b/.devcontainer/post-create.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -e + +echo "📲 Setting up Android SDK..." +mkdir -p $ANDROID_HOME/cmdline-tools +cd $ANDROID_HOME +wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip +unzip commandlinetools-linux-*.zip -d cmdline-tools +rm commandlinetools-linux-*.zip +mv cmdline-tools/cmdline-tools cmdline-tools/latest + +# Accept licenses +yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses + +# Install required SDK components +$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.2" From c710dd3ce68f5ede6d2774af3c1cf1708d0457e9 Mon Sep 17 00:00:00 2001 From: Marfin <248203147+arifinahmad99-cloud@users.noreply.github.com> Date: Sun, 1 Mar 2026 02:55:02 +0800 Subject: [PATCH 4/4] Add Docker Compose configuration for app and db services --- .devcontainer/docker-compose.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .devcontainer/docker-compose.yml diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 000000000..07429f6dd --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,30 @@ +version: '3.8' + +services: + app: + build: + context: . + dockerfile: Dockerfile # Your app's Dockerfile + volumes: + - ..:/workspace:cached + command: sleep infinity # Keep container alive + environment: + DATABASE_URL: postgresql://postgres:password@db:5432/mydb + depends_on: + - db + + db: + build: + context: ./postgres # Path to custom Dockerfile (or use image: postgres:15) + restart: unless-stopped + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + POSTGRES_DB: mydb + ports: + - "5432:5432" # Expose port if needed + +volumes: + postgres-data: