Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 2 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ jobs:
version: node20
- stack: rust
version: 1.91-bookworm
- stack: java
version: 21-bookworm
permissions:
contents: read
packages: write
Expand Down
57 changes: 57 additions & 0 deletions .monkeycode/MEMORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# 用户指令记忆

本文件记录了用户的指令、偏好和教导,用于在未来的交互中提供参考。

## 格式

### 用户指令条目
用户指令条目应遵循以下格式:

[用户指令摘要]
- Date: [YYYY-MM-DD]
- Context: [提及的场景或时间]
- Instructions:
- [用户教导或指示的内容,逐行描述]

### 项目知识条目
Agent 在任务执行过程中发现的条目应遵循以下格式:

[项目知识摘要]
- Date: [YYYY-MM-DD]
- Context: Agent 在执行 [具体任务描述] 时发现
- Category: [代码结构|代码模式|代码生成|构建方法|测试方法|依赖关系|环境配置]
- Instructions:
- [具体的知识点,逐行描述]

## 去重策略
- 添加新条目前,检查是否存在相似或相同的指令
- 若发现重复,跳过新条目或与已有条目合并
- 合并时,更新上下文或日期信息
- 这有助于避免冗余条目,保持记忆文件整洁

## 条目

[依赖来源偏好]
- Date: 2026-04-10
- Context: 用户在新增 Java 开发镜像任务中强调依赖来源要求
- Instructions:
- 所有语言运行时和工具链都应优先从官方渠道下载或安装。
- 禁止使用用户认为不够正式或不够稳定的第三方直链发布地址。
- 当用户要求 Java 使用 OpenJDK 时,优先使用 OpenJDK 官方直链下载,而不是第三方发行版仓库。

[镜像仓库结构与构建方式]
- Date: 2026-04-10
- Context: Agent 在执行新增 Java 开发镜像任务时发现
- Category: 代码结构
- Instructions:
- 镜像目录遵循 `docker/{stack}/{version}/Dockerfile` 结构。
- `base` 镜像位于 `docker/base/bookworm/Dockerfile`,其他语言栈基于 `ghcr.io/chaitin/monkeycode-runner/base:bookworm` 扩展。

[本地构建与 CI 约定]
- Date: 2026-04-10
- Context: Agent 在执行新增 Java 开发镜像任务时发现
- Category: 构建方法
- Instructions:
- 本地通过 `STACK=<stack> VERSION=<version> ./scripts/build.sh` 构建镜像。
- GitHub Actions 在 `.github/workflows/ci.yaml` 的 `build-stacks` matrix 中维护需要构建的语言栈。
- README 需要同步维护每个镜像的构建、推送和运行示例。
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Base container images for Chaitin MonkeyCode developer workflows.
DEBIAN_MIRROR=https://mirrors.tuna.tsinghua.edu.cn/debian \
DEBIAN_SECURITY_MIRROR=https://mirrors.tuna.tsinghua.edu.cn/debian-security \
STACK=base VERSION=bookworm ./scripts/build.sh
```

- Run: `docker run --rm -it ghcr.io/chaitin/monkeycode-runner/base:bookworm bash`

## Devbox image (bookworm) - All-in-one Development Environment
Expand Down Expand Up @@ -62,12 +64,19 @@ python3 -c "import scrapy; print('scrapy:', scrapy.__version__)" # 2.14.1
- Push to GHCR: `PUSH=true REGISTRY=ghcr.io/chaitin/monkeycode-runner STACK=rust VERSION=1.91-bookworm ./scripts/build.sh`
- Run: `docker run --rm -it ghcr.io/chaitin/monkeycode-runner/rust:1.91-bookworm rustc --version`

## Java image (21-bookworm)
- Dockerfile: `docker/java/21-bookworm/Dockerfile` (extends the base image, installs OpenJDK 21.0.2 from the official OpenJDK download archive, plus Maven 3.9.14 and Gradle 9.4.1 from their official distribution endpoints with checksum verification).
- Build locally: `STACK=java VERSION=21-bookworm ./scripts/build.sh`
- Push to GHCR: `PUSH=true REGISTRY=ghcr.io/chaitin/monkeycode-runner STACK=java VERSION=21-bookworm ./scripts/build.sh`
- Run: `docker run --rm -it ghcr.io/chaitin/monkeycode-runner/java:21-bookworm bash`

## Layout
- `docker/base/bookworm/Dockerfile` – base image definition.
- `docker/devbox/bookworm/Dockerfile` – all-in-one devbox with Go, Node.js, and Python.
- `docker/frontend/node20/Dockerfile` – Node.js frontend developer image.
- `docker/golang/1.25-bookworm/Dockerfile` – Go developer image (bookworm + Go 1.25).
- `docker/rust/1.91-bookworm/Dockerfile` – Rust developer image (bookworm + Rust 1.91).
- `docker/java/21-bookworm/Dockerfile` – Java developer image (bookworm + JDK 21, Maven, Gradle).
- `scripts/build.sh` – helper to build/push images (env-driven: STACK, VERSION, REGISTRY, PUSH).
- `docs/` – docs placeholder for future stacks and CI notes.

Expand Down
61 changes: 61 additions & 0 deletions docker/java/21-bookworm/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Java developer image based on DevRunner base (Debian bookworm)
ARG BASE_IMAGE=ghcr.io/chaitin/monkeycode-runner/base:bookworm
FROM ${BASE_IMAGE}

LABEL org.opencontainers.image.title="DevRunner Java" \
org.opencontainers.image.source="https://github.com/chaitin/DevRunner" \
org.opencontainers.image.description="Java developer toolbox image for DevRunner stacks"

ARG DEBIAN_FRONTEND=noninteractive
ARG JAVA_VERSION=21.0.2
ARG JAVA_SHA256_AMD64=a2def047a73941e01a73739f92755f86b895811afb1f91243db214cff5bdac3f
ARG JAVA_SHA256_ARM64=08db1392a48d4eb5ea5315cf8f18b89dbaf36cda663ba882cf03c704c9257ec2
ARG MAVEN_VERSION=3.9.14
ARG MAVEN_SHA512=d50af8ab5e6005b46a07f0ce9d3719e67cfdf898da988a84871304cd59fb1af0fef2f99dea709e6e66f21f732f905979b5c2dce6b6860406f60a70e84d9cf0b8
ARG GRADLE_VERSION=9.4.1
ARG GRADLE_SHA256=2ab2958f2a1e51120c326cad6f385153bb11ee93b3c216c5fccebfdfbb7ec6cb

ARG TARGETARCH

ENV JAVA_HOME=/usr/local/java \
MAVEN_HOME=/opt/maven \
GRADLE_HOME=/opt/gradle \
PATH=/usr/local/java/bin:/opt/maven/bin:/opt/gradle/bin:${PATH}

RUN set -eux; \
case "${TARGETARCH:-amd64}" in \
amd64) java_arch="x64"; java_sha256="${JAVA_SHA256_AMD64}" ;; \
arm64) java_arch="aarch64"; java_sha256="${JAVA_SHA256_ARM64}" ;; \
"") java_arch="x64"; java_sha256="${JAVA_SHA256_AMD64}" ;; \
*) echo "Unsupported architecture: ${TARGETARCH}" >&2; exit 1 ;; \
esac; \
curl -fsSL "https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-${JAVA_VERSION}_linux-${java_arch}_bin.tar.gz" -o /tmp/jdk.tar.gz; \
echo "${java_sha256} /tmp/jdk.tar.gz" | sha256sum -c -; \
mkdir -p /usr/local/java; \
tar -xzf /tmp/jdk.tar.gz -C /usr/local/java --strip-components=1; \
rm /tmp/jdk.tar.gz; \
java --version; \
javac --version

RUN set -eux; \
curl -fsSL "https://downloads.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -o /tmp/maven.tar.gz; \
echo "${MAVEN_SHA512} /tmp/maven.tar.gz" | sha512sum -c -; \
mkdir -p /opt/maven; \
tar -xzf /tmp/maven.tar.gz -C /opt/maven --strip-components=1; \
rm /tmp/maven.tar.gz; \
mvn --version

RUN set -eux; \
curl -fsSL "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" -o /tmp/gradle.zip; \
echo "${GRADLE_SHA256} /tmp/gradle.zip" | sha256sum -c -; \
mkdir -p /opt/gradle; \
unzip -q /tmp/gradle.zip -d /tmp; \
cp -a "/tmp/gradle-${GRADLE_VERSION}/." /opt/gradle/; \
rm -rf "/tmp/gradle-${GRADLE_VERSION}" /tmp/gradle.zip; \
gradle --version

ENV JAVA_VERSION=${JAVA_VERSION} \
MAVEN_VERSION=${MAVEN_VERSION} \
GRADLE_VERSION=${GRADLE_VERSION}

WORKDIR /workspace
Loading