Skip to content

Conversation

@phuongfi91
Copy link
Contributor

@phuongfi91 phuongfi91 commented Dec 11, 2025

PR Type

Enhancement


Description

  • Add modern Unix power tools as alternatives to traditional commands

  • Install ripgrep, fd, btop, eza, dust, bat, fzf, tokei, hyperfine

  • Create symlinks to replace default ls, bat, fd commands

  • Add comprehensive tests for all new tools

  • Update Ubuntu base image from 24.04 to 25.10

  • Document all alternative tools in README


Diagram Walkthrough

flowchart LR
  A["Dockerfile"] -->|"Install modern tools"| B["ripgrep, fd, btop, eza, dust, bat, fzf, tokei, hyperfine"]
  A -->|"Create symlinks"| C["ls, bat, fd replacements"]
  D["README.md"] -->|"Document tools"| E["Alternative unix power tools section"]
  F["tests/specs.yaml"] -->|"Add verification tests"| G["Command availability tests"]
Loading

File Walkthrough

Relevant files
Enhancement
Dockerfile
Add modern Unix tools and symlinks                                             

Dockerfile

  • Upgrade base image from ubuntu:24.04 to ubuntu:25.10
  • Add 9 modern Unix power tools packages to apt installation
  • Create symlinks for eza, bat, and fd to replace default commands
+25/-1   
Documentation
README.md
Document alternative Unix power tools                                       

README.md

  • Add new "Alternative unix power tools" section
  • Document 9 tools with descriptions and their traditional equivalents
  • Note symlink for eza replacing ls command
+12/-0   
Tests
specs.yaml
Add tests for alternative Unix tools                                         

tests/specs.yaml

  • Add 10 new command tests for alternative tools
  • Verify ripgrep, fd, btop, eza, dust, bat, fzf, tokei, hyperfine
    installation
  • Add specific test for ls symlink override by eza
+41/-0   

Copilot AI review requested due to automatic review settings December 11, 2025 11:44
@gemini-code-assist
Copy link

Summary of Changes

Hello @phuongfi91, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly upgrades the development environment by updating the base Docker image to Ubuntu 25.10 and integrating a collection of modern, high-performance command-line utilities. These new tools are designed to replace or enhance traditional Unix commands, offering improved functionality and speed. The changes are fully documented and include new tests to ensure proper installation and integration.

Highlights

  • Docker Base Image Upgrade: The base Docker image has been updated from Ubuntu 24.04 to Ubuntu 25.10, bringing the environment to a more recent distribution.
  • Integration of Modern Unix Tools: A suite of alternative, performance-oriented command-line tools has been added, including ripgrep (for grep), fd-find (for find), btop (for top/htop), eza (for ls), du-dust (for du), bat (for cat), fzf, tokei, and hyperfine.
  • Command Aliasing for Enhanced UX: Several new tools are symlinked to their traditional counterparts (e.g., eza to ls, batcat to bat, fdfind to fd) to seamlessly integrate them into the existing command structure and provide an improved user experience by default.
  • Documentation and Test Coverage: The README.md has been updated to list the new alternative Unix power tools, and tests/specs.yaml now includes comprehensive tests to verify the installation and correct functioning of these tools, including the command aliasing.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@qodo-code-review
Copy link

qodo-code-review bot commented Dec 11, 2025

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
Command hijacking risk

Description: Overriding core utilities via symlinks (ls -> eza, bat -> batcat, fd -> fdfind) can
unexpectedly change behavior of scripts and tooling inside the image or downstream
containers, potentially breaking assumptions (e.g., parsing output of ls) and enabling
command confusion if scripts rely on traditional semantics.
Dockerfile [53-55]

Referred Code
&& ln -s /usr/bin/eza /usr/local/bin/ls \
&& ln -s /usr/bin/batcat /usr/local/bin/bat \
&& ln -s /usr/bin/fdfind /usr/local/bin/fd \
Unverified remote script

Description: Piping shell scripts from the internet directly into sh without pinning or signature
verification (uv and Pulumi installers) exposes supply-chain risk where a compromised
endpoint could execute arbitrary code during build.
Dockerfile [57-59]

Referred Code
&& curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="/usr/local/bin" sh \
# Install Pulumi:
&& curl -fsSL https://get.pulumi.com | sh \
Unpinned base image

Description: Using a moving ubuntu:25.10 tag without digest pinning makes builds non-reproducible and
risks unintentionally inheriting vulnerable base layers as the tag updates over time.
Dockerfile [2-2]

Referred Code
FROM ubuntu:25.10 AS base
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status:
No audit logs: The new Dockerfile steps install and override core Unix commands without adding any
mechanism to log critical actions, which may impact auditability depending on runtime
usage.

Referred Code
# Better alternative to grep
ripgrep \
# Better alternative to find
fd-find \
# Better alternative to top/htop
btop \
# Better alternative to ls
eza \
# Better alternative to du
du-dust \
# Better alternative to cat
bat \
# Pager for bat
less \
# Fuzzy finder
fzf \
# Code counter
tokei \
# Benchmarking tool
hyperfine \
# Linking preferred alternatives


 ... (clipped 3 lines)

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status:
Missing error cases: Tests only check --version success paths for new tools and do not validate failure
behavior or edge cases introduced by command overrides like ls->eza.

Referred Code
- name: "ripgrep is installed in path"
  command: "rg"
  args: ["--version"]

- name: "fd is installed in path"
  command: "fd"
  args: ["--version"]

- name: "btop is installed in path"
  command: "btop"
  args: ["--version"]

- name: "eza is installed in path"
  command: "eza"
  args: ["--version"]

- name: "ls is overridden by eza"
  command: "ls"
  args: ["--version"]
  expectedOutput: ["eza"]



 ... (clipped 19 lines)

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status:
Unpinned installs: The Dockerfile installs multiple packages and curls install scripts without pinning
versions or verifying checksums/signatures, increasing supply chain risk.

Referred Code
# Better alternative to grep
ripgrep \
# Better alternative to find
fd-find \
# Better alternative to top/htop
btop \
# Better alternative to ls
eza \
# Better alternative to du
du-dust \
# Better alternative to cat
bat \
# Pager for bat
less \
# Fuzzy finder
fzf \
# Code counter
tokei \
# Benchmarking tool
hyperfine \
# Linking preferred alternatives


 ... (clipped 7 lines)

Learn more about managing compliance generic rules or creating your own custom rules

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-code-review
Copy link

qodo-code-review bot commented Dec 11, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix incorrect package name

In the Dockerfile, change the package name du-dust to dust to fix the apt-get
install command, which would otherwise fail on Ubuntu.

Dockerfile [40-41]

 # Better alternative to du
-du-dust \
+dust \
  • Apply / Chat
Suggestion importance[1-10]: 10

__

Why: The suggestion correctly identifies that the package name du-dust is wrong for an Ubuntu-based image and will cause the Docker build to fail, proposing the correct package name dust.

High
High-level
Avoid replacing standard system commands

Avoid replacing the standard ls command with eza via a system-wide symlink.
Instead, install the new tools and let users opt-in by creating personal shell
aliases to prevent breaking scripts dependent on standard ls behavior.

Examples:

Dockerfile [53]
    && ln -s /usr/bin/eza /usr/local/bin/ls \

Solution Walkthrough:

Before:

# Dockerfile
RUN apt-get install -y \
    ...
    eza \
    ...
    # Linking preferred alternatives
    && ln -s /usr/bin/eza /usr/local/bin/ls \
    && ln -s /usr/bin/batcat /usr/local/bin/bat \
    && ln -s /usr/bin/fdfind /usr/local/bin/fd

After:

# Dockerfile
RUN apt-get install -y \
    ...
    eza \
    ...
    # Linking preferred alternatives
    # 'ls' is not replaced to avoid breaking changes.
    # Users can add 'alias ls=eza' to their shell config.
    && ln -s /usr/bin/batcat /usr/local/bin/bat \
    && ln -s /usr/bin/fdfind /usr/local/bin/fd
Suggestion importance[1-10]: 9

__

Why: This suggestion addresses a critical design flaw, as replacing a fundamental system command like ls is a significant breaking change that can cause script failures and violate the principle of least surprise for users of the image.

High
  • Update

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a suite of modern Unix power tools to the development image, such as ripgrep, eza, and bat. The changes include adding the necessary packages in the Dockerfile, updating the README.md to document them, and adding comprehensive tests to verify their installation. The implementation is solid, with good testing and documentation. However, I have one major concern regarding the update of the base image to a non-LTS version of Ubuntu, which could impact stability and long-term support.

@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1
FROM ubuntu:24.04 AS base
FROM ubuntu:25.10 AS base

Choose a reason for hiding this comment

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

high

Using Ubuntu 25.10, which is an interim release, for a base image is not recommended. Interim releases have a short 9-month support cycle and are less stable than Long-Term Support (LTS) releases. For a development image that should be stable and reliable, it's much safer to stick with an LTS version like ubuntu:24.04 (the latest LTS) or ubuntu:22.04. This ensures you get security updates and stability for a much longer period (5 years).

FROM ubuntu:24.04 AS base

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR enhances the Python development Docker image by adding modern alternative Unix power tools and upgrading the base Ubuntu image. The additions focus on improving developer productivity with faster, more feature-rich alternatives to traditional Unix utilities.

Key changes:

  • Upgrades base image from Ubuntu 24.04 to 25.10
  • Installs 9 modern Unix alternative tools (ripgrep, fd, btop, eza, dust, bat, fzf, tokei, hyperfine)
  • Creates symlinks to replace traditional commands (lseza) and handle Ubuntu package naming (batcatbat, fdfindfd)

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
Dockerfile Upgrades Ubuntu version, installs alternative power tools packages, creates symlinks for command aliases and Ubuntu package naming compatibility
tests/specs.yaml Adds comprehensive version check tests for all 9 new tools, including verification that ls is overridden by eza
README.md Documents the new alternative Unix power tools section with descriptions of each tool and their traditional counterparts

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +53 to +54
&& ln -s /usr/bin/eza /usr/local/bin/ls \
&& ln -s /usr/bin/batcat /usr/local/bin/bat \
Copy link

Copilot AI Dec 11, 2025

Choose a reason for hiding this comment

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

Overriding the system ls command with a symlink to eza can cause compatibility issues with scripts or tools that depend on the standard ls behavior and flags. While eza is largely compatible with ls, there may be subtle differences in output format or flag handling that could break existing automation. Consider creating an alias instead (e.g., in a shell configuration file) or documenting this breaking change prominently, especially since this is a base image that other projects will use.

Suggested change
&& ln -s /usr/bin/eza /usr/local/bin/ls \
&& ln -s /usr/bin/batcat /usr/local/bin/bat \
# Do NOT override ls with eza to avoid breaking scripts
&& ln -s /usr/bin/batcat /usr/local/bin/bat \
# Add alias for interactive shells
&& echo "alias ls='eza'" >> /etc/bash.bashrc \
&& echo "alias ls='eza'" >> /etc/zsh/zshrc \

Copilot uses AI. Check for mistakes.
@phuongfi91 phuongfi91 merged commit 42b53c3 into latest Dec 11, 2025
2 checks passed
@phuongfi91 phuongfi91 deleted the feat/phuongfi91/alt-unix-power-tools branch December 11, 2025 12:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants