From 2c739a4c154bbf35e91f8e757a058a552c9858f7 Mon Sep 17 00:00:00 2001 From: Stuart Bell <141676627+stu-bell@users.noreply.github.com> Date: Fri, 23 Jan 2026 21:23:28 +0000 Subject: [PATCH 1/4] update depends on --- src/gemini-cli/devcontainer-feature.json | 4 +++- todo/install_oci_feature.md | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 todo/install_oci_feature.md diff --git a/src/gemini-cli/devcontainer-feature.json b/src/gemini-cli/devcontainer-feature.json index f01476d..9756a02 100644 --- a/src/gemini-cli/devcontainer-feature.json +++ b/src/gemini-cli/devcontainer-feature.json @@ -27,7 +27,9 @@ }, "dependsOn": { "ghcr.io/stu-bell/devcontainer-features/node": { - "min_node_version": "20" + "min_node_version": "20", + "installYarnUsingApt": false, + "nodeGypDependencies": false } } } diff --git a/todo/install_oci_feature.md b/todo/install_oci_feature.md new file mode 100644 index 0000000..cde3f97 --- /dev/null +++ b/todo/install_oci_feature.md @@ -0,0 +1,18 @@ +# Progress +Agent to update this section at relevant progress points... + +# Intro +- This document contains instructions for a task +- Review the whole doc and ask me for more info if needed +- Check for edge cases or design flaws or features that I may have missed and ask me for clarification if necessary +- Keep a note to, at significant points during the task, replace the #Progress section with a progress update. Keep progress updates concise. They should only contain enough for me to decide if I need to assist or course-correct. Include any decisions about removing functionality or changes that might break backward compatibility. Especially make sure to highlight any changes or removals to existing tests +- Keep a note to, after completion of all tasks, prepend a summary of changes to this todo doc for me to review + +- Run test commands by directing test output to a temp file, to save tokens. Grep (or read the tail lines of the file) for failure messages if the tests have a non-zero exit code, rather than reading the whole file. +- Run tests: `test/heartbeat.sh "test/test-builds.sh -s test/path/to/scenarios.json -o scenario names"` +- Test docs: `test/test-builds.sh --help` + +# Task details... + +gemini build is failing on ddebian in gemini tests, and \_global tests. I believe it's to do with the passing of args via install_oci_feature. INSTALLYARNUSINGAPT should remain true in node, to mirror the official feature, however, we should be able to set it to false in the gemini feature. Why isn't this feature option flowing through? In the test build logs, we can see the values of the args and see that INSTALLYARNUSINGAPT=false in gemini feature becomes INSTALLYARNUSINGAPT=true in the node feature. + From feea25e9c1570cd3461530ce6a1710032d3ad65a Mon Sep 17 00:00:00 2001 From: Stuart Bell <141676627+stu-bell@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:08:37 +0000 Subject: [PATCH 2/4] gemini install update path after node install --- src/gemini-cli/util.sh | 7 ++++++- test/gemini-cli/scenarios.json | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/gemini-cli/util.sh b/src/gemini-cli/util.sh index 7fb72ca..961d015 100644 --- a/src/gemini-cli/util.sh +++ b/src/gemini-cli/util.sh @@ -2,7 +2,7 @@ # Copyright (c) 2026 Stuart Bell # Licensed under the MIT License. See https://github.com/stu-bell/devcontainer-features/blob/main/LICENSE for license information. -# v0.1.5 +# v0.1.6 # Colors for output RED='\033[0;31m' @@ -295,5 +295,10 @@ esac cd - rm -rf "$TEMP_DIR" + # Re-source profile.d to pick up any PATH changes made by the feature + for f in /etc/profile.d/*.sh; do + . "$f" 2>/dev/null || true + done + echo "Feature installation complete for $FEATURE_URI" } diff --git a/test/gemini-cli/scenarios.json b/test/gemini-cli/scenarios.json index a8a3c1f..fa3ddf8 100644 --- a/test/gemini-cli/scenarios.json +++ b/test/gemini-cli/scenarios.json @@ -1,6 +1,6 @@ [ { - "name": "Build on alpine", + "name": "alpine", "expected_exit_code": 0, "devcontainer": { "image": "mcr.microsoft.com/devcontainers/base:alpine", @@ -11,7 +11,7 @@ } }, { - "name": "Build on Ubuntu", + "name": "ubuntu", "expected_exit_code": 0, "devcontainer": { "image": "mcr.microsoft.com/devcontainers/base:ubuntu", @@ -22,7 +22,7 @@ } }, { - "name": "Build on Debian", + "name": "debian", "expected_exit_code": 0, "devcontainer": { "image": "mcr.microsoft.com/devcontainers/base:debian", @@ -33,7 +33,7 @@ } }, { - "name": "Build on debian - node upgrade required", + "name": "debian-node-update-required", "expected_exit_code": 0, "devcontainer": { "image": "mcr.microsoft.com/devcontainers/javascript-node:1-18-bookworm", From 79f20e676b888cf55b3478a27b92c3094b01e3cc Mon Sep 17 00:00:00 2001 From: Stuart Bell <141676627+stu-bell@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:52:53 +0000 Subject: [PATCH 3/4] bump gemini v --- src/gemini-cli/devcontainer-feature.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gemini-cli/devcontainer-feature.json b/src/gemini-cli/devcontainer-feature.json index 9756a02..8e9915b 100644 --- a/src/gemini-cli/devcontainer-feature.json +++ b/src/gemini-cli/devcontainer-feature.json @@ -2,7 +2,7 @@ // Copyright (c) 2026 Stuart Bell // Licensed under the MIT License. See https://github.com/stu-bell/devcontainer-features/blob/main/LICENSE for license information. "id": "gemini-cli", - "version": "0.1.5", + "version": "0.1.6", "name": "Google Gemini CLI (via npm)", "description": "Installs Google Gemini CLI for AI code assistance https://geminicli.com", "keywords": ["AI", "agent", "code", "coding", "alpine", "ubuntu", "debian"], From 3e36019d1ad00fcac36b77acdf4759c37edf5db5 Mon Sep 17 00:00:00 2001 From: Stuart Bell <141676627+stu-bell@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:53:00 +0000 Subject: [PATCH 4/4] add beans --- .beans.yml | 6 ++++++ ...i-install-fails-on-windows-without-node.md | 11 ++++++++++ .../df-9ui4--migrate-todo-folder-to-beans.md | 11 ++++++++++ .beans/df-g2t5--new-feature-brew.md | 21 +++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 .beans.yml create mode 100644 .beans/df-96x0--bug-gemini-install-fails-on-windows-without-node.md create mode 100644 .beans/df-9ui4--migrate-todo-folder-to-beans.md create mode 100644 .beans/df-g2t5--new-feature-brew.md diff --git a/.beans.yml b/.beans.yml new file mode 100644 index 0000000..cfd3538 --- /dev/null +++ b/.beans.yml @@ -0,0 +1,6 @@ +beans: + path: .beans + prefix: df- + id_length: 4 + default_status: draft + default_type: task diff --git a/.beans/df-96x0--bug-gemini-install-fails-on-windows-without-node.md b/.beans/df-96x0--bug-gemini-install-fails-on-windows-without-node.md new file mode 100644 index 0000000..88a409b --- /dev/null +++ b/.beans/df-96x0--bug-gemini-install-fails-on-windows-without-node.md @@ -0,0 +1,11 @@ +--- +# df-96x0 +title: BUG gemini install fails on windows without node +status: draft +type: task +priority: normal +created_at: 2026-03-12T15:26:49Z +updated_at: 2026-03-12T15:30:09Z +--- + +gemini install fails on windows when using devcontainer json without node already installed. THe install OCI feature funtion appears from the logs to correctly install node, however, the remainder of the gemini install script can't seem to find the node installation, and so fails. THis doesn't seem to be reproducible in tests, even when using the published tests in _global, however attempts to install the feature on an ubuntu image without node preinstalled, on a windows host, fail. diff --git a/.beans/df-9ui4--migrate-todo-folder-to-beans.md b/.beans/df-9ui4--migrate-todo-folder-to-beans.md new file mode 100644 index 0000000..a9e2d32 --- /dev/null +++ b/.beans/df-9ui4--migrate-todo-folder-to-beans.md @@ -0,0 +1,11 @@ +--- +# df-9ui4 +title: migrate todo folder to beans +status: draft +type: task +priority: normal +created_at: 2026-03-12T15:19:23Z +updated_at: 2026-03-12T15:26:18Z +--- + +prior to installing beans to the project, todo tasks were tracked in md files in the todo folder. Items should be migrated to beans, by creating a bean for each file in the todo folder, and applying the corresponding status, inferred from the file path orcontent of the file. Once the todo has been created in beans, the original file for that todo should be deleted. diff --git a/.beans/df-g2t5--new-feature-brew.md b/.beans/df-g2t5--new-feature-brew.md new file mode 100644 index 0000000..f428531 --- /dev/null +++ b/.beans/df-g2t5--new-feature-brew.md @@ -0,0 +1,21 @@ +--- +# df-g2t5 +title: 'new feature: Brew' +status: draft +type: task +created_at: 2026-03-12T15:40:26Z +updated_at: 2026-03-12T15:40:26Z +--- + +Install script from homebrew: https://brew.sh/ +NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + +Note it provides instructions at the end on how to add brew to the PATH. We should provide an option in devcontainer.json to do this automatically (so that brew power users can override it manually). + +Should first check if the required version of brew is already installed. only install brew if a sufficient version of brew cannot be found. + +Add an option to install a brew package immediately after brew installs. Must be able to pass brew args. Note we can only install one package this way. can we find a workaround for this? + +Add an option to remove brew after package install to keep the image small? This is just for the purpose of installing a package with brew + +