nushell/docker/Dockerfile
Saurabh Shinde 0c72f881a6
Fix Docker image build failure (#13938)
## Description
While building the docker image under `nushell/docker` directory,
following build failure observed.


![nushell-docker-error](https://github.com/user-attachments/assets/972048d7-b001-4325-b947-93e95b98f4d1)

The problem here is the following lines of code that decide which
`nushell` binary to download, extract, and install
https://github.com/nushell/nushell/blob/main/docker/Dockerfile#L16-L19

The issue is especially with wildcard asterisk (*) which downloads both
`amd64` and `arm64` binary while building.

## Fix
Introduced build arg `TARGETARCH` which will be populated implicitly by
docker `build/buildx` which will help us to decide which binary to
download.

## User-Facing Changes
None. 

## Testing Details
Tested building docker image on both `amd64` and `arm64` systems.
**amd64/x86_64**

![nushell-docker-amd64](https://github.com/user-attachments/assets/ea30b7e3-0664-4a5b-bb13-4c18cdae2a31)

**arm64**

![nushell-docker-arm64](https://github.com/user-attachments/assets/54e47051-1ee7-4695-bc6c-1e211532a545)
2024-09-26 09:57:37 -05:00

46 lines
1.5 KiB
Docker

# Git: git version 2.30.2
# /etc/os-release: Alpine Linux v3.16
# Kernel: Linux ca3abedc4fb1 5.17.15-76051715-generic #202206141358~1655919116~22.04~1db9e34 SMP PREEMPT Wed Jun 22 19 x86_64 Linux
# Build cmd: docker build --no-cache . -t nushell-latest
# Other tags: nushell/alpine-nu:latest, nushell
FROM alpine
LABEL maintainer=nushell
ARG TARGETARCH
RUN set -eux; \
if [ "${TARGETARCH}" = "amd64" ] || [ "${TARGETARCH}" = "x86_64" ]; then \
echo "Downloading x86_64 binary for ${TARGETARCH}..."; \
arch_path="x86_64"; \
elif [ "${TARGETARCH}" = "arm64" ] || [ "${TARGETARCH}" = "aarch64"]; then \
echo "Downloading aarch64 binary for ${TARGETARCH}..."; \
arch_path="aarch64"; \
else \
arch_path=""; \
fi; \
echo '/usr/bin/nu' >> /etc/shells \
&& adduser -D -s /usr/bin/nu nushell \
&& mkdir -p /home/nushell/.config/nushell/ \
&& cd /tmp \
&& wget -qO - https://api.github.com/repos/nushell/nushell/releases/latest \
| grep browser_download_url \
| grep "${arch_path}.*.musl.tar.gz" \
| cut -f4 -d '"' \
| xargs -I{} wget {} \
&& tar -xzf nu* \
&& cd nu*-musl \
&& mv nu* /usr/bin \
&& chmod +x /usr/bin/nu \
&& chown -R nushell:nushell /home/nushell/.config/nushell \
# Reset Nushell config to default
&& su -c 'config reset -w' nushell \
&& ls /usr/bin/nu_plugin* \
| xargs -I{} su -c 'plugin add {}' nushell \
&& rm -rf /tmp/*
USER nushell
WORKDIR /home/nushell
ENTRYPOINT ["nu"]