From 4c870143aa383fbcd854340340bdd7ff7814c023 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 27 Apr 2026 21:52:56 +0530 Subject: [PATCH 01/18] chore(devcontainer): fix dockerfile broken yarn repo in base image --- .devcontainer/Dockerfile | 6 +++++- .devcontainer/devcontainer.json | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 761820702..edea5ae20 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -8,7 +8,7 @@ FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye ARG ANDROID_PLATFORM=35 -ARG ANDROID_BUILD_TOOLS=35.0.0 +ARG ANDROID_BUILD_TOOLS=36.0.0 ARG CMDLINE_TOOLS_VERSION=11076708 ARG NODE_VERSION=22 ARG GRADLE_VERSION=8.11 @@ -18,9 +18,13 @@ ENV ANDROID_SDK_ROOT=/opt/android-sdk ENV GRADLE_HOME=/opt/gradle ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${GRADLE_HOME}/bin" +# removes broken yarn repo present in base image +RUN rm -f /etc/apt/sources.list.d/yarn.list + RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ unzip \ + curl \ && rm -rf /var/lib/apt/lists/* # Install Gradle diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a4a3827ab..c5067346d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,17 +1,17 @@ { "name": "Acode Development", - "image": "mcr.microsoft.com/devcontainers/java:1-21-bullseye", + "build": { + "dockerfile": "Dockerfile" + }, + + "containerEnv": { + "JAVA_HOME": "/usr/local/openjdk-21" +}, +"remoteEnv": { + "JAVA_HOME": "/usr/local/openjdk-21" +}, "features": { - "ghcr.io/devcontainers/features/java:1": { - "installGradle": true, - "installGroovy": false, - "installMaven": false, - "installAnt": false, - "version": "21", - "jdkDistro": "ms", - "gradleVersion": "latest" - }, "ghcr.io/nordcominc/devcontainer-features/android-sdk:1": { "platform": "35", "build_tools": "35.0.0" @@ -24,9 +24,9 @@ "nvmVersion": "latest" } }, - + "overrideCommand": true, "postCreateCommand": "pnpm run setup", - + "remoteUser": "root", "customizations": { "vscode": { "extensions": ["biomejs.biome", "redhat.java"], From 748dd87fbf0c04f5e0bf73333a32e117e38ee78f Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:41:06 +0530 Subject: [PATCH 02/18] Update .devcontainer/devcontainer.json Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .devcontainer/devcontainer.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c5067346d..595234bc3 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,11 +5,11 @@ }, "containerEnv": { - "JAVA_HOME": "/usr/local/openjdk-21" -}, -"remoteEnv": { - "JAVA_HOME": "/usr/local/openjdk-21" -}, + "JAVA_HOME": "/usr/local/openjdk-21" + }, + "remoteEnv": { + "JAVA_HOME": "/usr/local/openjdk-21" + }, "features": { "ghcr.io/nordcominc/devcontainer-features/android-sdk:1": { From def1fcc7584e6e0040ada25d9ac6324ff158cb86 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:49:33 +0530 Subject: [PATCH 03/18] Update Dockerfile --- .devcontainer/Dockerfile | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index edea5ae20..910f0afc9 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -34,15 +34,16 @@ RUN wget -q "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}- && ln -s /opt/gradle-${GRADLE_VERSION} ${GRADLE_HOME} # Install fnm and Node.js -ENV FNM_DIR=/usr/local/fnm -ENV PATH="${FNM_DIR}:${PATH}" -RUN curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "${FNM_DIR}" --skip-shell \ - && eval "$(${FNM_DIR}/fnm env)" \ - && fnm install ${NODE_VERSION} \ - && fnm default ${NODE_VERSION} \ - && npm install -g pnpm +# Not required, mostly. When dev containers are used. +# ENV FNM_DIR=/usr/local/fnm +# ENV PATH="${FNM_DIR}:${PATH}" +# RUN curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "${FNM_DIR}" --skip-shell \ +# && eval "$(${FNM_DIR}/fnm env)" \ +# && fnm install ${NODE_VERSION} \ +# && fnm default ${NODE_VERSION} \ +# && npm install -g pnpm -ENV PATH="${FNM_DIR}/aliases/default/bin:${PATH}" +# ENV PATH="${FNM_DIR}/aliases/default/bin:${PATH}" # Install Android SDK RUN mkdir -p ${ANDROID_HOME}/cmdline-tools \ From 7da39e9cc44eeac9f75cc0304bedffc423ab60f0 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:55:13 +0530 Subject: [PATCH 04/18] Update devcontainer.json --- .devcontainer/devcontainer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 595234bc3..a40d3ae21 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -13,8 +13,8 @@ "features": { "ghcr.io/nordcominc/devcontainer-features/android-sdk:1": { - "platform": "35", - "build_tools": "35.0.0" + "platform": "36", + "build_tools": "36.0.0" }, "ghcr.io/devcontainers/features/node:1": { "nodeGypDependencies": false, From 9f166755a0d38d842c012b7a698a67135b5548a8 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:55:57 +0530 Subject: [PATCH 05/18] Update Dockerfile --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 910f0afc9..1d296d915 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -7,7 +7,7 @@ FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye -ARG ANDROID_PLATFORM=35 +ARG ANDROID_PLATFORM=36 ARG ANDROID_BUILD_TOOLS=36.0.0 ARG CMDLINE_TOOLS_VERSION=11076708 ARG NODE_VERSION=22 From 9fea25c39987561f2e379d2715ef153de1780791 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 27 Apr 2026 23:06:53 +0530 Subject: [PATCH 06/18] Update devcontainer.json --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a40d3ae21..58656a504 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -25,7 +25,7 @@ } }, "overrideCommand": true, - "postCreateCommand": "pnpm run setup", + "postCreateCommand": "npm i -g pnpm && pnpm run setup", "remoteUser": "root", "customizations": { "vscode": { From 0129870dd730db8e5bdb78db51a0d20231b10e96 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 27 Apr 2026 23:30:54 +0530 Subject: [PATCH 07/18] remove: redundant pnpm installation. --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 58656a504..a40d3ae21 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -25,7 +25,7 @@ } }, "overrideCommand": true, - "postCreateCommand": "npm i -g pnpm && pnpm run setup", + "postCreateCommand": "pnpm run setup", "remoteUser": "root", "customizations": { "vscode": { From 96cb3af8f7ddec1666c2556098bca9cba53cf4da Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Tue, 28 Apr 2026 21:32:53 +0530 Subject: [PATCH 08/18] chore(dockerFile): dual android sdk installation and conflicts between them. This Commit, comments out certain Docker commands in dockerFile as it's used inside devcontainers too, which are not needed when using dev containers. But those should be uncommented for Standalone Docker Build in the dockerFile. --- .devcontainer/Dockerfile | 41 ++++++++++++++++++++------------- .devcontainer/devcontainer.json | 9 ++++++-- CONTRIBUTING.md | 5 +++- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 1d296d915..3f197f91a 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -4,19 +4,23 @@ # Usage: # docker build -t acode-dev .devcontainer/ # docker run -it -v $(pwd):/workspaces/acode acode-dev +# Uncomment certain commands when used in Standalone (MANUAL) Docker Builds (Kindly review them in throughout this file). FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye +ARG DEVCONTAINER=false ARG ANDROID_PLATFORM=36 ARG ANDROID_BUILD_TOOLS=36.0.0 ARG CMDLINE_TOOLS_VERSION=11076708 ARG NODE_VERSION=22 ARG GRADLE_VERSION=8.11 -ENV ANDROID_HOME=/opt/android-sdk -ENV ANDROID_SDK_ROOT=/opt/android-sdk +# (Uncomment when using Docker) +# ENV ANDROID_HOME=/opt/android-sdk +# ENV ANDROID_SDK_ROOT=/opt/android-sdk ENV GRADLE_HOME=/opt/gradle -ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${GRADLE_HOME}/bin" +# Not required, mostly. When dev containers are used. (Uncomment when using Docker) +# ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools" # removes broken yarn repo present in base image RUN rm -f /etc/apt/sources.list.d/yarn.list @@ -33,7 +37,9 @@ RUN wget -q "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}- && rm /tmp/gradle.zip \ && ln -s /opt/gradle-${GRADLE_VERSION} ${GRADLE_HOME} -# Install fnm and Node.js +ENV PATH="${PATH}:${GRADLE_HOME}/bin" + +# Install fnm and Node.js (Uncomment this when used in DOCKER) # Not required, mostly. When dev containers are used. # ENV FNM_DIR=/usr/local/fnm # ENV PATH="${FNM_DIR}:${PATH}" @@ -46,18 +52,21 @@ RUN wget -q "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}- # ENV PATH="${FNM_DIR}/aliases/default/bin:${PATH}" # Install Android SDK -RUN mkdir -p ${ANDROID_HOME}/cmdline-tools \ - && cd ${ANDROID_HOME}/cmdline-tools \ - && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" -O cmdline-tools.zip \ - && unzip -q cmdline-tools.zip \ - && rm cmdline-tools.zip \ - && mv cmdline-tools latest \ - && yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses 2>/dev/null || true \ - && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --update \ - && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager \ - "platform-tools" \ - "platforms;android-${ANDROID_PLATFORM}" \ - "build-tools;${ANDROID_BUILD_TOOLS}" +# Skipped when built by devcontainer. handled by the android-sdk feature instead. +RUN if [ "$DEVCONTAINER" = "false" ]; then \ + mkdir -p ${ANDROID_HOME}/cmdline-tools \ + && cd ${ANDROID_HOME}/cmdline-tools \ + && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" -O cmdline-tools.zip \ + && unzip -q cmdline-tools.zip \ + && rm cmdline-tools.zip \ + && mv cmdline-tools latest \ + && yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses 2>/dev/null || true \ + && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --update \ + && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager \ + "platform-tools" \ + "platforms;android-${ANDROID_PLATFORM}" \ + "build-tools;${ANDROID_BUILD_TOOLS}"; \ + fi WORKDIR /workspaces/acode diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a40d3ae21..6aa2cd1a1 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,14 +1,19 @@ { "name": "Acode Development", "build": { - "dockerfile": "Dockerfile" + "dockerfile": "Dockerfile", + "args": { + "DEVCONTAINER": "true" + } }, "containerEnv": { "JAVA_HOME": "/usr/local/openjdk-21" }, "remoteEnv": { - "JAVA_HOME": "/usr/local/openjdk-21" + "JAVA_HOME": "/usr/local/openjdk-21", + "ANDROID_SDK_ROOT": "${containerEnv:ANDROID_HOME}", + "PATH": "${containerEnv:PATH}:${containerEnv:ANDROID_HOME}/build-tools/36.0.0" }, "features": { diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4b61d19f..d7e6a78f9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Thank you for your interest in contributing to Acode! This guide will help you g ### Option 1: DevContainer (Recommended) -1. Install the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) in VS Code or other editors that support DevContainers. +1. Install the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) in VS Code or other editors that support [DevContainers](https://containers.dev/). 2. Clone and open the repository: ```bash @@ -35,6 +35,9 @@ If your editor doesn't support DevContainers, you can use Docker directly: git clone https://github.com/Acode-Foundation/Acode.git cd Acode +# Check .devcontainer/Dockerfile to uncomment docker related commands. +# As certain commands cannot be guarded with checks, Kindly check the file throughout. + # Build the Docker image from our Dockerfile docker build -t acode-dev .devcontainer/ From 9bc06610c9bb3e065817dd4bc663d8248c735dda Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Tue, 28 Apr 2026 22:00:46 +0530 Subject: [PATCH 09/18] Update .devcontainer/Dockerfile Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 3f197f91a..2cc1f56bb 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -53,20 +53,8 @@ ENV PATH="${PATH}:${GRADLE_HOME}/bin" # Install Android SDK # Skipped when built by devcontainer. handled by the android-sdk feature instead. -RUN if [ "$DEVCONTAINER" = "false" ]; then \ - mkdir -p ${ANDROID_HOME}/cmdline-tools \ - && cd ${ANDROID_HOME}/cmdline-tools \ - && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" -O cmdline-tools.zip \ - && unzip -q cmdline-tools.zip \ - && rm cmdline-tools.zip \ - && mv cmdline-tools latest \ - && yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses 2>/dev/null || true \ - && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --update \ - && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager \ - "platform-tools" \ - "platforms;android-${ANDROID_PLATFORM}" \ - "build-tools;${ANDROID_BUILD_TOOLS}"; \ - fi +# Only install Android SDK if ANDROID_HOME is set (skipped in devcontainers where the android-sdk feature handles this). +RUN if [ -n "${ANDROID_HOME}" ] && [ "$DEVCONTAINER" != "true" ]; then \ WORKDIR /workspaces/acode From a8ebdb4ca97568535eeb2989bb50cac2fa0bdc90 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Tue, 28 Apr 2026 22:02:45 +0530 Subject: [PATCH 10/18] Update Dockerfile to install Android SDK conditionally --- .devcontainer/Dockerfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2cc1f56bb..b664a35be 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -55,6 +55,19 @@ ENV PATH="${PATH}:${GRADLE_HOME}/bin" # Skipped when built by devcontainer. handled by the android-sdk feature instead. # Only install Android SDK if ANDROID_HOME is set (skipped in devcontainers where the android-sdk feature handles this). RUN if [ -n "${ANDROID_HOME}" ] && [ "$DEVCONTAINER" != "true" ]; then \ + mkdir -p ${ANDROID_HOME}/cmdline-tools \ + && cd ${ANDROID_HOME}/cmdline-tools \ + && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" -O cmdline-tools.zip \ + && unzip -q cmdline-tools.zip \ + && rm cmdline-tools.zip \ + && mv cmdline-tools latest \ + && yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses 2>/dev/null || true \ + && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --update \ + && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager \ + "platform-tools" \ + "platforms;android-${ANDROID_PLATFORM}" \ + "build-tools;${ANDROID_BUILD_TOOLS}"; \ + fi WORKDIR /workspaces/acode From 731f7e0b07d4343ee9d2728407dba86310aafd5f Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:01:02 +0530 Subject: [PATCH 11/18] chore(docker): split into multi-stage setup to allow devcontainers --- .devcontainer/Dockerfile | 85 +++++++++++++++++---------------- .devcontainer/devcontainer.json | 6 +-- 2 files changed, 45 insertions(+), 46 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index b664a35be..b289a7e9c 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,26 +1,19 @@ -# Acode Development Container - Standalone Docker Build -# -# This Dockerfile is for MANUAL Docker builds (docker build/run). -# Usage: -# docker build -t acode-dev .devcontainer/ +# Acode Development Container +# +# Devcontainer usage: automatic via devcontainer.json +# Standalone usage: +# docker build --target standalone -t acode-dev .devcontainer/ # docker run -it -v $(pwd):/workspaces/acode acode-dev -# Uncomment certain commands when used in Standalone (MANUAL) Docker Builds (Kindly review them in throughout this file). -FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye +FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye AS base -ARG DEVCONTAINER=false ARG ANDROID_PLATFORM=36 ARG ANDROID_BUILD_TOOLS=36.0.0 ARG CMDLINE_TOOLS_VERSION=11076708 ARG NODE_VERSION=22 ARG GRADLE_VERSION=8.11 -# (Uncomment when using Docker) -# ENV ANDROID_HOME=/opt/android-sdk -# ENV ANDROID_SDK_ROOT=/opt/android-sdk ENV GRADLE_HOME=/opt/gradle -# Not required, mostly. When dev containers are used. (Uncomment when using Docker) -# ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools" # removes broken yarn repo present in base image RUN rm -f /etc/apt/sources.list.d/yarn.list @@ -39,37 +32,45 @@ RUN wget -q "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}- ENV PATH="${PATH}:${GRADLE_HOME}/bin" -# Install fnm and Node.js (Uncomment this when used in DOCKER) -# Not required, mostly. When dev containers are used. -# ENV FNM_DIR=/usr/local/fnm -# ENV PATH="${FNM_DIR}:${PATH}" -# RUN curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "${FNM_DIR}" --skip-shell \ -# && eval "$(${FNM_DIR}/fnm env)" \ -# && fnm install ${NODE_VERSION} \ -# && fnm default ${NODE_VERSION} \ -# && npm install -g pnpm +WORKDIR /workspaces/acode + +LABEL org.opencontainers.image.authors="Acode Foundation " +LABEL description="Development environment for building Acode - Code Editor for Android" + + +# Devcontainer stage +# Android SDK and Node handled by devcontainer features. +FROM base AS devcontainer -# ENV PATH="${FNM_DIR}/aliases/default/bin:${PATH}" + +# Standalone stage +# Includes Android SDK and Node/pnpm for plain docker build/run usage. +FROM base AS standalone + +ENV ANDROID_HOME=/opt/android-sdk +ENV ANDROID_SDK_ROOT=/opt/android-sdk +ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS}" # Install Android SDK -# Skipped when built by devcontainer. handled by the android-sdk feature instead. -# Only install Android SDK if ANDROID_HOME is set (skipped in devcontainers where the android-sdk feature handles this). -RUN if [ -n "${ANDROID_HOME}" ] && [ "$DEVCONTAINER" != "true" ]; then \ - mkdir -p ${ANDROID_HOME}/cmdline-tools \ - && cd ${ANDROID_HOME}/cmdline-tools \ - && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" -O cmdline-tools.zip \ - && unzip -q cmdline-tools.zip \ - && rm cmdline-tools.zip \ - && mv cmdline-tools latest \ - && yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses 2>/dev/null || true \ - && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --update \ - && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager \ - "platform-tools" \ - "platforms;android-${ANDROID_PLATFORM}" \ - "build-tools;${ANDROID_BUILD_TOOLS}"; \ - fi +RUN mkdir -p ${ANDROID_HOME}/cmdline-tools \ + && cd ${ANDROID_HOME}/cmdline-tools \ + && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" -O cmdline-tools.zip \ + && unzip -q cmdline-tools.zip \ + && rm cmdline-tools.zip \ + && mv cmdline-tools latest \ + && yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses 2>/dev/null || true \ + && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --update \ + && ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager \ + "platform-tools" \ + "platforms;android-${ANDROID_PLATFORM}" \ + "build-tools;${ANDROID_BUILD_TOOLS}" -WORKDIR /workspaces/acode +# Install fnm and Node.js +ENV FNM_DIR=/usr/local/fnm +RUN curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "${FNM_DIR}" --skip-shell \ + && eval "$(${FNM_DIR}/fnm env)" \ + && fnm install ${NODE_VERSION} \ + && fnm default ${NODE_VERSION} \ + && npm install -g pnpm -LABEL maintainer="Acode Foundation" -LABEL description="Development environment for building Acode - Code Editor for Android" +ENV PATH="${FNM_DIR}/aliases/default/bin:${PATH}" \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6aa2cd1a1..6a7d809c4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,9 +2,7 @@ "name": "Acode Development", "build": { "dockerfile": "Dockerfile", - "args": { - "DEVCONTAINER": "true" - } + "target": "devcontainer" }, "containerEnv": { @@ -21,7 +19,7 @@ "platform": "36", "build_tools": "36.0.0" }, - "ghcr.io/devcontainers/features/node:1": { + "ghcr.io/devcontainers/features/node:2.0": { "nodeGypDependencies": false, "installYarnUsingApt": false, "version": "lts", From 7cda01c6341f158e9cefc3189c5c1cf3d7f60644 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:05:01 +0530 Subject: [PATCH 12/18] remove(contributing): dockerFile uncomment note as it's resolved now. --- CONTRIBUTING.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d7e6a78f9..02a9516b5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,9 +35,6 @@ If your editor doesn't support DevContainers, you can use Docker directly: git clone https://github.com/Acode-Foundation/Acode.git cd Acode -# Check .devcontainer/Dockerfile to uncomment docker related commands. -# As certain commands cannot be guarded with checks, Kindly check the file throughout. - # Build the Docker image from our Dockerfile docker build -t acode-dev .devcontainer/ From 8dbc2df735b5936b034b1de4980e122dc81813cf Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:11:29 +0530 Subject: [PATCH 13/18] fix `ARG` order in the dockerFile --- .devcontainer/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index b289a7e9c..2563b8cc5 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -5,14 +5,14 @@ # docker build --target standalone -t acode-dev .devcontainer/ # docker run -it -v $(pwd):/workspaces/acode acode-dev -FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye AS base - ARG ANDROID_PLATFORM=36 ARG ANDROID_BUILD_TOOLS=36.0.0 ARG CMDLINE_TOOLS_VERSION=11076708 ARG NODE_VERSION=22 ARG GRADLE_VERSION=8.11 +FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye AS base + ENV GRADLE_HOME=/opt/gradle # removes broken yarn repo present in base image @@ -73,4 +73,4 @@ RUN curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "${FNM_ && fnm default ${NODE_VERSION} \ && npm install -g pnpm -ENV PATH="${FNM_DIR}/aliases/default/bin:${PATH}" \ No newline at end of file +ENV PATH="${FNM_DIR}/aliases/default/bin:${PATH}" From f43b3325f51fb82966a8232bee4f539e9f9c3f08 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:13:11 +0530 Subject: [PATCH 14/18] update: specify 'standalone' target in Docker build command Updated Docker build command to specify the 'standalone' target. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 02a9516b5..15a47e561 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,7 +36,7 @@ git clone https://github.com/Acode-Foundation/Acode.git cd Acode # Build the Docker image from our Dockerfile -docker build -t acode-dev .devcontainer/ +docker build --target standalone -t acode-dev .devcontainer/ # Run the container with your code mounted docker run -it --rm \ From e9c0d538abac8a31719a262b570ac578b4107053 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:32:35 +0530 Subject: [PATCH 15/18] fix: move ARG below FROM --- .devcontainer/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2563b8cc5..c6b85485f 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -5,14 +5,14 @@ # docker build --target standalone -t acode-dev .devcontainer/ # docker run -it -v $(pwd):/workspaces/acode acode-dev +FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye AS base + ARG ANDROID_PLATFORM=36 ARG ANDROID_BUILD_TOOLS=36.0.0 ARG CMDLINE_TOOLS_VERSION=11076708 ARG NODE_VERSION=22 ARG GRADLE_VERSION=8.11 -FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye AS base - ENV GRADLE_HOME=/opt/gradle # removes broken yarn repo present in base image From 090d876d6fdec533b7874580d72979fc2853fdaa Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:33:57 +0530 Subject: [PATCH 16/18] update: ANDROID paths --- .devcontainer/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index c6b85485f..3bd1ce670 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -47,8 +47,8 @@ FROM base AS devcontainer # Includes Android SDK and Node/pnpm for plain docker build/run usage. FROM base AS standalone -ENV ANDROID_HOME=/opt/android-sdk -ENV ANDROID_SDK_ROOT=/opt/android-sdk +ENV ANDROID_HOME=/usr/local/lib/android +ENV ANDROID_SDK_ROOT=/usr/local/lib/android ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS}" # Install Android SDK From aaabb81de04c64fca9affb1b27aaa1c013a23c9e Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 15:07:01 +0530 Subject: [PATCH 17/18] update(CONTRIBUTING.md): add note for podman Mentioning about https://github.com/containers/buildah/pull/5845 --- CONTRIBUTING.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 15a47e561..74c850497 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,6 +28,9 @@ Thank you for your interest in contributing to Acode! This guide will help you g ### Option 2: Docker CLI (For Any Editor) +> [!NOTE] +> If you try to use Podman, Kindly note that it would not work properly until https://github.com/containers/buildah/pull/5845 is merged/implemented in Podmon. + If your editor doesn't support DevContainers, you can use Docker directly: ```bash From fabd5267cdbb7b6923a49372d52e3ab11a410cb0 Mon Sep 17 00:00:00 2001 From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Date: Wed, 29 Apr 2026 15:14:58 +0530 Subject: [PATCH 18/18] fix(CONTRIBUTING.md): `Podmon` to Podman. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 74c850497..2457415d2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,7 @@ Thank you for your interest in contributing to Acode! This guide will help you g ### Option 2: Docker CLI (For Any Editor) > [!NOTE] -> If you try to use Podman, Kindly note that it would not work properly until https://github.com/containers/buildah/pull/5845 is merged/implemented in Podmon. +> If you try to use Podman, Kindly note that it would not work properly until https://github.com/containers/buildah/pull/5845 is merged/implemented in Podman. If your editor doesn't support DevContainers, you can use Docker directly: