https://github.com/itzg/easy-add
A utility for easily adding a file from a downloaded archive during Docker builds
https://github.com/itzg/easy-add
Last synced: 11 months ago
JSON representation
A utility for easily adding a file from a downloaded archive during Docker builds
- Host: GitHub
- URL: https://github.com/itzg/easy-add
- Owner: itzg
- License: mit
- Created: 2019-08-29T03:04:09.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2025-06-17T11:33:28.000Z (about 1 year ago)
- Last Synced: 2025-06-17T12:35:37.423Z (about 1 year ago)
- Language: Go
- Size: 45.9 KB
- Stars: 31
- Watchers: 3
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/itzg/easy-add/releases/latest)
[](https://github.com/itzg/easy-add/actions/workflows/test.yaml)
A utility for easily adding a file from a downloaded archive during Docker builds
## Usage
Running the binary with `--help` can be used to obtain usage at any time.
```
-file path
The path to executable to extract within archive
-from URL
URL of a tar.gz archive to download. May contain Go template references to 'var' entries.
-mkdirs
Attempt to create the directory path specified by to
-to path
The path where executable will be placed (default "/usr/local/bin")
-var name=value
Sets variables that can be referenced in 'from'. Format is name=value (default os=linux,arch=amd64)
-version
Show version and exit
```
## Template variables in `from`
The `from` argument is process as a Go template with `var` as the context. For example, repetition in the URL can be simplified such as:
```
--var version=1.2.0 \
--from https://github.com/itzg/restify/releases/download/{{.version}}/restify_{{.version}}_{{.os}}_{{.arch}}.tar.gz
```
## Example usage within `Dockerfile`
```
FROM ubuntu
ARG EASY_ADD_VER=0.5.3
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${EASY_ADD_VER}_linux_amd64 /usr/bin/easy-add
RUN chmod +x /usr/bin/easy-add
RUN easy-add --var version=1.2.0 --var app=restify --file restify --from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_linux_amd64.tar.gz
```
## `Dockerfile` usage with BuildKit and multi-arch builds
```
# hook into docker BuildKit --platform support
# see https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
ARG TARGETOS=linux
ARG TARGETARCH=amd64
ARG TARGETVARIANT=""
ARG EASY_ADD_VER=0.5.3
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
RUN chmod +x /usr/bin/easy-add
```
## Alternative when adding only a single archived-binary
easy-add is somewhat overkill adding only a single archived-binary to a Docker image. The following is an alternative solution that doesn't require curl to be installed in the image:
```
ADD https://github.com/itzg/rcon-cli/releases/download/1.4.7/rcon-cli_1.4.7_linux_amd64.tar.gz /tmp/rcon-cli.tgz
RUN tar -xf /tmp/rcon-cli.tgz -C /usr/local/bin rcon-cli && rm /tmp/rcon-cli.tgz
```