Skip to content
Open
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
3 changes: 2 additions & 1 deletion images/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ ghcr.io/nvidia/openshell-community/sandboxes/base (upstream, multi-arch)

| Image | Directory | Description |
|-------|-----------|-------------|
| `fullsend-sandbox` | [`images/sandbox/`](sandbox/) | Base sandbox with Claude Code, rsync, jq, gitleaks, tirith, pre-commit, gitlint, and the ProtectAI DeBERTa-v3 ONNX model for prompt injection detection. |
| `fullsend-sandbox` | [`images/sandbox/`](sandbox/) | Base sandbox with Claude Code, rsync, jq, acli, gitleaks, tirith, pre-commit, gitlint, and the ProtectAI DeBERTa-v3 ONNX model for prompt injection detection. |
| `fullsend-code` | [`images/code/`](code/) | Extends `fullsend-sandbox` with Go toolchain and scan-secrets wrapper. Used by the code-implementation agent. |

Both images are built for **linux/amd64** and **linux/arm64**.
Expand Down Expand Up @@ -107,6 +107,7 @@ Every binary downloaded during the build is **version-pinned** and
| Go toolchain | `GO_VERSION` + `GO_SHA256_{AMD64,ARM64}` | `sha256sum -c` |
| ProtectAI DeBERTa model | `PROTECTAI_MODEL_REV` + per-file SHA256 | `sha256sum -c` |
| Claude Code | Official installer script | HTTPS only (no checksum, version floats) |
| acli | `ACLI_VERSION` + `ACLI_SHA256_{AMD64,ARM64}` | `sha256sum -c` |
| pre-commit, gitlint | pip version pins | pip integrity check |

GitHub Actions are pinned to full commit SHAs (not floating tags).
Expand Down
20 changes: 20 additions & 0 deletions images/sandbox/Containerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
# - rsync (for safe repo write-back)
# - jq (JSON parsing in agent scripts and skills)
# - gitleaks (secret scanner, SHA256-verified)
# - acli (Atlassian CLI for Jira issue queries)
# - pre-commit + gitlint (repo hook runner + commit message validator)
# - tirith (Rust CLI for terminal security scanning hooks)
# - ONNX Runtime + ProtectAI DeBERTa-v3 model for prompt injection
Expand Down Expand Up @@ -170,5 +171,24 @@ ENV GIT_SSL_CAINFO="/etc/openshell-tls/ca-bundle.pem" \
NODE_EXTRA_CA_CERTS="/etc/openshell-tls/ca-bundle.pem" \
HF_HUB_OFFLINE="1"

# ---------------------------------------------------------------------------
# acli — Atlassian CLI for Jira issue retrieval inside agent sandboxes.
ARG ACLI_VERSION=1.3.18-stable
ARG ACLI_SHA256_AMD64=4ad4badc481ac1eff452f531c405a20422eb57513cc898d2a1f8ea945d6c24f6
ARG ACLI_SHA256_ARM64=ac71711da43649854689ad0f74e44f18b0da3fd0ee776ceb4307ae7eb1e5da85
RUN case "$TARGETARCH" in \
amd64) ACLI_SHA="$ACLI_SHA256_AMD64" ;; \
arm64) ACLI_SHA="$ACLI_SHA256_ARM64" ;; \
*) echo "unsupported TARGETARCH=$TARGETARCH" >&2; exit 1 ;; \
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] supply-chain

The download URL uses a floating latest path segment without an explicit ACLI_VERSION build argument. SHA256 checksums mitigate binary substitution, but there is no version ARG for auditability and upstream updates will break builds silently.

Suggested fix: If the acli download server supports versioned URLs, add ARG ACLI_VERSION and use it in the URL path. If not, add a comment noting that SHA256 checksums serve as the version pin because the upstream distribution only offers a latest endpoint.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I agree with this. Does atlassian provide versioned urls?

As this currently stands (with /latest/ in the url), then when atlassian releases a new version, all of our image builds will suddenly break on our main branch because the digest doesn't match anymore.

We want to do digest checking.

Can you revise this to use a url that includes a version number so that we don't "automatically" update when atlassian puts out a new cli?

esac \
&& curl -fsSL \
"https://acli.atlassian.com/linux/${ACLI_VERSION}/acli_${ACLI_VERSION}_linux_${TARGETARCH}.tar.gz" \
-o /tmp/acli.tar.gz \
&& echo "${ACLI_SHA} /tmp/acli.tar.gz" | sha256sum -c - \
&& tar xzf /tmp/acli.tar.gz -C /tmp \
&& mv "/tmp/acli_${ACLI_VERSION}_linux_${TARGETARCH}/acli" /usr/local/bin/acli \
&& chmod +x /usr/local/bin/acli \
&& rm -rf /tmp/acli.tar.gz /tmp/acli_${ACLI_VERSION}_linux_${TARGETARCH}

# Switch back to the sandbox user.
USER sandbox
Loading