From 6764b3147703606b9c398f40f56c0dfd3f093862 Mon Sep 17 00:00:00 2001 From: xiaomakuaiz Date: Fri, 10 Apr 2026 13:21:30 +0000 Subject: [PATCH] Add Java development stack and update CI docs Co-authored-by: monkeycode-ai --- .github/workflows/ci.yaml | 2 + .monkeycode/MEMORY.md | 57 ++++++++++++++++++++++++++++ README.md | 9 +++++ docker/java/21-bookworm/Dockerfile | 61 ++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 .monkeycode/MEMORY.md create mode 100644 docker/java/21-bookworm/Dockerfile diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 27ddaba..6ccca48 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -86,6 +86,8 @@ jobs: version: node20 - stack: rust version: 1.91-bookworm + - stack: java + version: 21-bookworm permissions: contents: read packages: write diff --git a/.monkeycode/MEMORY.md b/.monkeycode/MEMORY.md new file mode 100644 index 0000000..e831caa --- /dev/null +++ b/.monkeycode/MEMORY.md @@ -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= VERSION= ./scripts/build.sh` 构建镜像。 + - GitHub Actions 在 `.github/workflows/ci.yaml` 的 `build-stacks` matrix 中维护需要构建的语言栈。 + - README 需要同步维护每个镜像的构建、推送和运行示例。 diff --git a/README.md b/README.md index ee0f401..a7f4f0a 100644 --- a/README.md +++ b/README.md @@ -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 @@ -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. diff --git a/docker/java/21-bookworm/Dockerfile b/docker/java/21-bookworm/Dockerfile new file mode 100644 index 0000000..486523a --- /dev/null +++ b/docker/java/21-bookworm/Dockerfile @@ -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