Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Acode Development Container (Manual Docker Build)

FROM mcr.microsoft.com/devcontainers/base:ubuntu-22.04

ARG ANDROID_SDK_VERSION=35
ARG ANDROID_BUILD_TOOLS_VERSION=35.0.0
ARG NODE_MAJOR=22

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_VERSION}"

# Install essential packages
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
wget \
unzip \
git \
ca-certificates \
gnupg \
&& rm -rf /var/lib/apt/lists/*

# Install Java 21 (Temurin JDK)
RUN curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor -o /usr/share/keyrings/adoptium.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" > /etc/apt/sources.list.d/adoptium.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends temurin-21-jdk \
&& rm -rf /var/lib/apt/lists/*

# Set JAVA_HOME dynamically based on installed JDK
RUN JAVA_DIR=$(dirname $(dirname $(readlink -f $(which java)))) \
&& echo "export JAVA_HOME=$JAVA_DIR" >> /etc/profile.d/java.sh \
&& echo "export JAVA_HOME=$JAVA_DIR" >> ~/.bashrc
ENV JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-arm64
Comment thread
bajrangCoder marked this conversation as resolved.
Outdated
Comment thread
bajrangCoder marked this conversation as resolved.
Outdated

# Install Node.js via NodeSource
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*

# Install pnpm
RUN npm install -g pnpm

# Install Android SDK command-line tools
RUN mkdir -p ${ANDROID_HOME}/cmdline-tools \
&& cd ${ANDROID_HOME}/cmdline-tools \
&& wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip \
Comment thread
bajrangCoder marked this conversation as resolved.
Outdated
&& unzip -q cmdline-tools.zip \
&& rm cmdline-tools.zip \
&& mv cmdline-tools latest

# Accept Android SDK licenses and install required components
RUN 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_SDK_VERSION}" \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}"

# Install Gradle
ARG GRADLE_VERSION=8.11
RUN wget -q https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip -O /tmp/gradle.zip \
&& unzip -q /tmp/gradle.zip -d /opt \
&& rm /tmp/gradle.zip \
&& ln -s /opt/gradle-${GRADLE_VERSION}/bin/gradle /usr/local/bin/gradle

WORKDIR /workspaces/acode

LABEL maintainer="Acode Foundation"
LABEL description="Development environment for building Acode - Code Editor for Android"
83 changes: 49 additions & 34 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,43 +1,58 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/java
{
"name": "Java",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/java:1-21-bullseye",
"name": "Acode Development",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/java:1-21-bullseye",

"features": {
"ghcr.io/devcontainers/features/java:1": {
"installGradle": true,
"installGroovy": false,
"installMaven": false,
"installAnt": false,
"version": "21",
"jdkDistro": "ms",
"gradleVersion": "latest",
"mavenVersion": "none"
},
"ghcr.io/nordcominc/devcontainer-features/android-sdk:1": {
"platform": "35",
"build_tools": "35.0.0"
},
"ghcr.io/devcontainers/features/node:1": {
"nodeGypDependencies": false,
"installYarnUsingApt": false,
"version": "lts",
"pnpmVersion": "latest",
"nvmVersion": "latest"
}
}
"features": {
"ghcr.io/devcontainers/features/java:1": {
"installGradle": true,
"installGroovy": false,
"installMaven": false,
"installAnt": false,
"version": "21",
"jdkDistro": "ms",
"gradleVersion": "latest",
"mavenVersion": "none",
},
Comment thread
bajrangCoder marked this conversation as resolved.
"ghcr.io/nordcominc/devcontainer-features/android-sdk:1": {
"platform": "35",
"build_tools": "35.0.0",
},
"ghcr.io/devcontainers/features/node:1": {
"nodeGypDependencies": false,
"installYarnUsingApt": false,
"version": "lts",
"pnpmVersion": "latest",
"nvmVersion": "latest",
},
},
Comment thread
bajrangCoder marked this conversation as resolved.

// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
"postCreateCommand": "pnpm run setup",

// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "java -version",
"customizations": {
"vscode": {
"extensions": ["biomejs.biome", "redhat.java"],
"settings": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "biomejs.biome",
"[java]": {
"editor.defaultFormatter": "redhat.java",
},
},
},
},

// Configure tool-specific properties.
// "customizations": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],

// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "java -version",

// Configure tool-specific properties.
// "customizations": {},

// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
24 changes: 24 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Dependencies
node_modules/
.pnpm-store/

# Build outputs
platforms/
plugins/
www/css/build/
www/js/build/

# IDE
.vscode/
.idea/

# Git
.git/
.gitignore

# Misc
*.log
*.apk
*.aab
.DS_Store
Thumbs.db
173 changes: 173 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
# Contributing to Acode

Thank you for your interest in contributing to Acode! This guide will help you get started with development.

## Quick Start Options

### 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.

2. Clone and open the repository:
```bash
git clone https://github.com/Acode-Foundation/Acode.git
code Acode
```

3. When VS Code prompts "Reopen in Container", click it
- Or use Command Palette (Cmd/Ctrl+Shift+P) → "Dev Containers: Reopen in Container"

4. Wait for the container to build (~5-10 minutes first time, subsequent opens are instant)

5. Once ready, build the APK:
```bash
pnpm run build paid dev apk
```

> Use any package manager (pnpm, bun, npm, yarn, etc.)
Comment thread
bajrangCoder marked this conversation as resolved.

### Option 2: Docker CLI (For Any Editor)

If your editor doesn't support DevContainers, you can use Docker directly:

```bash
# Clone the repository
git clone https://github.com/Acode-Foundation/Acode.git
cd Acode

# Build the Docker image from our Dockerfile
docker build -t acode-dev .devcontainer/
Comment thread
bajrangCoder marked this conversation as resolved.

# Run the container with your code mounted
docker run -it --rm \
-v "$(pwd):/workspaces/acode" \
-w /workspaces/acode \
acode-dev \
bash

# Inside the container, run setup and build
# bun run setup && bun run build paid dev apk
Comment thread
bajrangCoder marked this conversation as resolved.
pnpm run setup
pnpm run build paid dev apk # or pnpm run build p d
```

**Keep container running for repeated use:**
```bash
# Start container in background
docker run -d --name acode-dev \
-v "$(pwd):/workspaces/acode" \
-w /workspaces/acode \
acode-dev \
sleep infinity

# Execute commands in the running container
docker exec -it acode-dev bash -c "pnpm run setup"
docker exec -it acode-dev pnpm run build paid dev apk

# Stop and remove when done
docker stop acode-dev && docker rm acode-dev
```

---

## 🛠️ Manual Setup (Without Docker)

If you prefer not to use Docker at all:

### Prerequisites

| Requirement | Version |
|------------|---------|
| **Node.js** | 18+ (22 recommended) |
| **pnpm** or **bun** | Latest |
| **Java JDK** | 17+ (21 recommended) |
| **Android SDK** | API 35 |
| **Gradle** | 8.x |

### Environment Setup

Add these to your shell profile (`~/.bashrc`, `~/.zshrc`, or `~/.config/fish/config.fish`):

**macOS:**
```bash
export ANDROID_HOME="$HOME/Library/Android/sdk"
export PATH="$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin"
```

**Linux:**
```bash
export ANDROID_HOME="$HOME/Android/Sdk"
export PATH="$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin"
```

Some more environment variables, check [cordova docs](https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html).

### Build Steps

```bash
# Clone the repository
git clone https://github.com/Acode-Foundation/Acode.git
cd Acode

# Install dependencies and set up Cordova
pnpm run setup

# Build the APK
pnpm run build paid dev apk # or pnpm run build p d
```

The APK will be at: `platforms/android/app/build/outputs/apk/debug/app-debug.apk`


## 📝 Contribution Guidelines

### Before Submitting a PR

1. **Fork** the repository and create a branch from `main`
2. **Make changes** - keep commits focused and atomic
3. **Check code quality:**
```bash
pnpm run check
```
4. **Test** on a device or emulator if possible

### Pull Request Checklist

- [ ] Clear description of changes
- [ ] Reference to related issue (if applicable)
- [ ] Screenshots/GIFs for UI changes
- [ ] Passing CI checks

### Code Style

We use [Biome](https://biomejs.dev/) for linting and formatting:
- Run `pnpm run check` before committing
- Install the Biome VS Code extension for auto-formatting

### Commit Messages

Use clear, descriptive messages:
```
feat: add dark mode toggle to settings
fix: resolve crash when opening large files
docs: update build instructions
refactor: simplify file loading logic
```

## 🌍 Adding Translations

1. Create a JSON file in `src/lang/` (e.g., `fr-fr.json` for French)
2. Add it to `src/lib/lang.js`
3. Use the translation utilities:
```bash
pnpm run lang add # Add new string
pnpm run lang remove # Remove string
pnpm run lang search # Search strings
pnpm run lang update # Update translations
```

## 🔌 Plugin Development

To create plugins for Acode:
- [Plugin Starter Repository](https://github.com/Acode-Foundation/acode-plugin)
- [Plugin Documentation](https://docs.acode.app/)
1 change: 1 addition & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading