Minimal container setup. Install docker (or podman), build container with scripts/build_container.sh, then start with scripts/start_container.sh. Exit with ^C for now. (#61)
This commit is contained in:
parent
044ccc6dd7
commit
99f5ed9ecb
|
@ -0,0 +1,39 @@
|
|||
FROM node:20-slim
|
||||
|
||||
# install minimal set of packages, then clean up
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
man-db \
|
||||
curl \
|
||||
dnsutils \
|
||||
less \
|
||||
jq \
|
||||
bc \
|
||||
gh \
|
||||
git \
|
||||
unzip \
|
||||
rsync \
|
||||
ripgrep \
|
||||
procps \
|
||||
psmisc \
|
||||
lsof \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# set up npm global package folder under /usr/local/share
|
||||
# give it to non-root user node, already set up in base image
|
||||
RUN mkdir -p /usr/local/share/npm-global \
|
||||
&& chown -R node:node /usr/local/share/npm-global
|
||||
ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global
|
||||
ENV PATH=$PATH:/usr/local/share/npm-global/bin
|
||||
|
||||
# switch to non-root user node
|
||||
USER node
|
||||
|
||||
# install gemini-code and clean up
|
||||
COPY packages/cli/dist/gemini-code-cli-*.tgz /usr/local/share/npm-global/gemini-code-cli.tgz
|
||||
COPY packages/server/dist/gemini-code-server-*.tgz /usr/local/share/npm-global/gemini-code-server.tgz
|
||||
RUN npm install -g /usr/local/share/npm-global/gemini-code-cli.tgz /usr/local/share/npm-global/gemini-code-server.tgz \
|
||||
&& npm cache clean --force \
|
||||
&& rm -f /usr/local/share/npm-global/gemini-code-cli.tgz \
|
||||
&& rm -f /usr/local/share/npm-global/gemini-code-server.tgz
|
||||
|
|
@ -266,7 +266,9 @@ Use this tool for running build steps (\`npm install\`, \`make\`), linters (\`es
|
|||
`Persistent bash process exited unexpectedly (code: ${code}, signal: ${signal}). State is lost. Queued commands cancelled.`,
|
||||
),
|
||||
);
|
||||
setTimeout(() => this.initializeShell(), 1000);
|
||||
if (signal !== 'SIGINT') {
|
||||
setTimeout(() => this.initializeShell(), 1000);
|
||||
}
|
||||
});
|
||||
setTimeout(() => {
|
||||
if (this.bashProcess && !this.bashProcess.killed) {
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
#!/bin/bash
|
||||
|
||||
IMAGE=gemini-code-sandbox
|
||||
|
||||
# use docker if installed, otherwise try to use podman instead
|
||||
if command -v docker &> /dev/null; then
|
||||
CMD=docker
|
||||
elif command -v podman &> /dev/null; then
|
||||
CMD=podman
|
||||
else
|
||||
echo "ERROR: docker or podman must be installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
npm install
|
||||
npm run build
|
||||
rm -f packages/cli/dist/gemini-code-cli-*.tgz
|
||||
npm pack -w @gemini-code/cli --pack-destination ./packages/cli/dist
|
||||
rm -f packages/server/dist/gemini-code-server-*.tgz
|
||||
npm pack -w @gemini-code/server --pack-destination ./packages/server/dist
|
||||
|
||||
$CMD build -t "$IMAGE" .
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/bash
|
||||
|
||||
IMAGE=gemini-code-sandbox
|
||||
CLI_DIST=/usr/local/share/npm-global/lib/node_modules/\@gemini-code/cli/dist
|
||||
|
||||
# use docker if installed, otherwise try to use podman instead
|
||||
if command -v docker &> /dev/null; then
|
||||
CMD=docker
|
||||
elif command -v podman &> /dev/null; then
|
||||
CMD=podman
|
||||
else
|
||||
echo "ERROR: docker or podman must be installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
$CMD run -it --rm -v"$PWD:/project" --workdir /project "$IMAGE" node "$CLI_DIST"
|
Loading…
Reference in New Issue