- Vagga now resets O_NONBLOCK flag on stdout after each command during build
(because some programs, e.g. nodejs fail to do that)
vagga --version
now works without vagga.yaml
- Add
rules
param to !Build
similar to !Copy
- Add
propagate-environ
setting
- Add
group
option for commands
- Add
aliases
option for commands
- Add
default-shell
container option
!AptTrust
uses TLS for downloading keys by default
- Add
content-hash
option for !Build
- Add
vagga --containers-only
which is useful to prepare all the containers
needed to run some command
- Add
vagga.local.yaml
and similar implicit mixins used for overriding
things locally
- Add
pattern
parameter to !GitDescribe
command
- Add
isolate-network
parameter for !Command
and !CapsuleCommand
- Add
vagga _hardlink
and vagga _verify
commands and
hard-link-between-project
setting
- Add
vagga _capsule download
and vagga _capsule script
subcommands
to make writing capsule commands easier
- Add
ubuntu-skip-locking
setting
- Add
versioned-build-dir
setting
- Bugfix: long symbolic links were truncated when unpacking tar
- Bugfix: AptTrust was broken on ubuntu bionic
- Note: Ubuntu precise is no longer supported, as well as old non-LTS releases,
they may work, but some features may work suboptimal or even incorrectly
- [breaking]
!Copy
now resets file modification time to unixtime 1
,
this improves reproducibility of containers
- Added
!YarnDependencies
command (still a bit experimental)
- Added
!GitDescribe
command
- Added
rules
to !Copy
command
- Added
sha256
option to !Download
buildd step
- Added
allow-pre-releases
option to PipConfig
- Added
disable-auto-clean
setting (mostly useful for CI)
- The
/etc/resolv.conf
and /etc/hosts
are mounted into container
instead of copying/owerwriting (this is potentially a breaking issue)
- Default alpine mirror is now
dl-cdn.alpinelinux.org
instead of random
- Vagga now installs
locales
package on ubuntu where no locale-gen
binary exists in original image
- Disabled universe and multiverse repositories in new ubuntu xenial images
where they are enabled by default (this effectively reverts behavior of
package installation to how it was before 31.03.2017 and also consistent
with the all pre-xenial releases.
- Implemented
hard-link-identical-files
setting (experimental)
- Implemented
storage-subdir-from-env-var
setting (experimental), for use
in CI systems
- Implemented
vagga _clean --unused --global at-least=..
(the --global
suboption)
- Added
symlink-name
parameter and vagga _update_symlinks
- Added experimental
mixins
setting
- Implemented
wait-all-successful
supervision mode for letting multiple
commands finish successfully in parallel
- Added long-awaited
!CacheDir
volume
- Added some zsh completion
- Added experimental
!CapsuleCommand
and vagga _capsule
command family
- Added
vagga _base_dir
and vagga _relative_work_dir
commands for
easier script usage
- Changed internal commands to
vagga __cmd__
of arg zero,
this allows symlinking vagga to different names
- Added optional auto-indexing of all images (not useful for now)
- Added lock on
apt-get remove
to remove race condition on parallel builds
- Added support of custom command-line options with help for all kinds of
commands
- Added
!Persistent
volumes (#204)
- Added
isolate-network
option for commands and command-line option
- Added
isolate-network
option for !RunAs
build step
- Py2/Py3Requirements now properly hashes files containing
-r
(basically
includes)
- Added
include-regex
option for !Copy
!Snapshot
root now preserves ownership and permissions of
source directory
!Depends
now supports directories and include-regex
, being on par
with !Copy
command for features
- Added
expect-inotify-limit
option
- Fixed PHP integration commands for Ubuntu xenial and Alpine v3.4
- Multiple
vagga _clean
can now be run in single directory without
issues (this is mostly useful in CI and scripts)
- Added a warning when
vagga.yml
(not yaml
) is present
- Fixes bug with wrong precedence of directories in
PATH
when running a
command using vagga _run
- Allow mounting files (not only dirs) as external volumes
- Added
files
option to !Tmpfs
volume
- Added
umask
option to !Copy
!Copy
and !Depends
no longer respect mode for generating hashes,
only executable bit is used
- Allow to copy from different container when using
!Snapshot
volume
- Added
data-dirs
option for container
- Added
AlpineRepo
and Repo
commands
- Supports
!*Include
directive to compose multiple files
- Fixed environment variable precedence (#326)
resolv.conf
and hosts
are propagated from host more reliably in
case of using subcontainers
- Fixed
external-user-id
for !RunAs
vagga _list -A
now includes hidden commands as expected
ca-certificates
are now added to BuildDeps
whenever any build
tools are installed (by Py2Install
, NpmInstall
and similar commands)
/run
volume mounted by default has now mode 0o755
(had 0o766
by
a mistake)
- Fixes bug with remounting to readonly on volumes that were previously
mounted with
nosuid
, nodev
or few other options
eatmydata
is only enabled for !Install
and !BuildDeps
rather
than everything because it conflicts with some other ``LD_PRELOAD``ed
things (like faketime)
- Added
vagga _clean --volumes
and vagga _clean --unused-volumes
- Implemented
vagga _clean --everything
(again after 0.2)
- Upgraded embedded alpine tools (apk-tools 2.6.8, busybox 1.25.1)
- Vagga does not output environment of a running command any more,
use
VAGGA_DEBUG_CMDENV
to show
- Removed writing
/tmp/vagga/hosts
in !Supervise
commands, it was
rarely useful and never documented
- Blacklists some non-working alpine mirrors
- vagga uses rust 1.9 and ubuntu xenial for building
- Refactored internals to use traits for commands instead of large enum. This
makes adding more commands much easier.
- Ubuntu images are now fetched from
http://partner-images.ubuntu.com
rather than http://cdimage.ubuntu.com
- vagga now uses single level of uid mappings and doesn't use the actual
mapping as part of container hash. This allows to use
mount
in container
more easily and also means we have reproducible containers hashes across
machines
!Copy
: fixed crash on absent directories, fix copying paths outside of
the /work
- Uses
libmount
for many mount operations (not all yet)
- Added
keep-composer
and vendor-dir
options to !ComposerSettings
- New command
!Unzip
similar to !Tar
- Implement (optional) checksum checking in
!Tar
and !TarInstall
- The
minimum-vagga
now works even when it doesn't know all the commands
in the config (still YAML syntax must be correct)
- Add support for
volumes
in commands (not only in containers)
- Vagga now uses
tar-rs
library for unpacking archives instead of busybox,
this may mean some features are new, and some archives could fail (please
report if you find one)
- Add
!Container
volume type, which allows to mount other container as a
volume, mostly useful for deployment tools
- Vagga now runs
id -u -n
for finding out username, previously was using
long names which aren't supported by some distributions (alpine == busybox)
- Root user may now run vagga without
/etc/subuid
this makes container in
container scenario easier
- Failed remount read-only is now a warning, this has two implications: you can
run vagga on tmpfs and in this case your root image is writable
- Add
vagga -m
which allows to run multiple vagga commands in sequence
- Add
prerequsites
option, which allows to run sequences of commands in
different containers
- Add
pass-tcp-port
which allows to test systemd-like socket activation and
other scenarios that need passing tcp socket as file descriptor
- Add
image-cache-url
option which allows to fetch cached image from
somewhere instead of building it locally
!Tar
command now supports getting tar from /volumes/
- Add
!RunAs
command which allows to get rid of sudo
and su
in
build steps
- Add
--at-least
option for vagga _clean --unused
!Build
command can copy file (previoulsy could only directory)
- Add
build-lock-wait
setting to allow simultaneous builds of containers
- Package lists from
apt-get
are now cached for each distribution and
doesn't fail on concurrent builds
- Add
--allow-multiple
option to _init_storage_dir
- Commands with name starting with underscore are not listed in
vagga
and vagga _list
by default (like built-in ones)
- Ubuntu commands now use
libeatmydata
by default, which makes installing
packages about 3x faster
- We remove
/var/spool/rsyslog
in ubuntu, this is only folder that makes
issues when rsyncing image because of permissions (it's not useful in
container anyway)
BuildDeps
now don't try to apt-mark
in subcontainer
- Updated
quire
requires you need to write !*Unpack
instead
of !Unpack
- Remove
change-dir
option from SubConfig
that never worked and was
never documented
!Depends
doesn't resolve symlinks but depends on the link itself
- Pseudo-terminals in vagga containers now work
!Remove
removes files when encountered (previously removed only when
container already built), also the command works with files (not only dirs)
- Add
!Shapshot`, ``!Empty
, !BindRO
volume types
- Add
external-volumes
setting, which allows to mount directories outside
of the project dir
- Add
minimum-vagga
option, which hints user which version they should use
- Implement
!Build
, !Download
, !Copy
build steps
- Add
_init_storage_dir
builtin command
- Add
vagga _clean --unused
mode of operation which is superior
to --old
- Allow to customize python and nodejs versions for
Py*
and Npm*
steps
- Fix various bugs in networking implementation
- Add shell autocomplete (bash included, zsh can be configured)
- The
.vagga/.mnt
is now unmounted during build (fixes bugs with bad tools)
- Improved SIGINT handling, now Ctrl+C in interactive processes such as
python
(without arguments) works as expected
- The signal messages ("Received SIGINT...") are now printed into stderr rather
than stdout (for
!Supervise
type of commands)
- Killing vagga supervise with TERM mistakenly reported SIGINT on exit, fixed
- Signal SIGQUIT is now correctly propagated
- Add PHP/Composer support
- Add Ruby/Bundler support
- Add support for
arch
parameter in !UbuntuRelease
this changes hash
sum of all containers built using !UbuntuRelease
- The stdin redirected from
/dev/null
and stdout is redirected to stderr
during the build
- You can now filter commands in supervise by tags
- Change gateway network from
172.18.0.0/16
to 172.23.0.0/16
,
hopefully this will have less collisions
- The
TERM
and *_proxy
env vars are now propagated for supervise
commands in the same way as with normal commands (previously was absent)
- Implemented shared image cache via
_push_image
command
and image-cache-url
option
!Tar
and !TarInstall
commands now support unpacking local files (#81)
- Container build process now locked, which avoid failure with cryptic error
message on simultaneous builds (#80)
- Add
_pack_image
command
- Upgrade rust to v1.4.0
- Renamed and fixed
vagga_network
command as vagga _network
subcommand
- The pip cache is now namespaced over distro and version (was singleton)
- Vagga now cleans apt lists cache on failed
apt-get update
(#108)
- Add
UbuntuPPA
and AptTrust
build steps
- Vagga now uses "unshare" and "signal" crates for working with containers
- Signal handling is changed:
- User visible changes: Ctrl+C doesn't sent twice to children (was
rarely noticeable), Ctrl+/ reliably kills vagga and children
- The only signal that is propagated by vagga to children is now SIGTERM
- SIGINT is never propagate to children by vagga itself (because it's usually
sent to process group anyway by Ctrl+C)
- Other signals like SIGQUIT (SIGHUP, SIGUSR1, ...), are not captured by
vagga, so they terminate vagga, resulting child processes are killed by OS
by the KILL signal).
- So if you want to send one of the signals except SIGTERM, send it to the
specific process not to vagga
- Fix broken
!Alpine
, which always installed latests known version of the
distribution instead specified
- Add kill-unresponsive-after setting
- In ubuntu guests by default /usr/bin/chfn is symlinked to /bin/true, this
prevents errors on some host systems (#52), this changes hash of the
!UbuntuRelease
step
- Fix
--only
and --exclude
for supervision commands (was broken since
0.2.0)
- Add
--no-build
and --no-version-check
options
- Fixed
epilog
option
- Implement support of
git+https
and hg+https
urls in python
requirements (#58)
- Add support of Py3Requirements/Py3Install for alpine (v3.2 has python3)
- Mount /dev/shm by default (needed for ubuntu host, fixes #32)
- Implement forwarding proxy variables by default (#38)
- Run
!Sh
scripts with -ex
options (#72)
- Implement
subdirs
key for !Tmpfs
volume
- Support tilde-expansion in
storage-dir
and cache-dir
settings
- The
/etc/hosts
file now copied inside the container at start (#39)
- !Tar command without subdir specified ignores invisible files and dirs
(ones starting with dot .) to determine subdir.
- Vagga now list of packages and log of duration of each step at a container
folder (e.g.
.vagga/container_name/../timings.log
)
- Add
!UbuntuRelease
builder to build non-lts ubuntu
- Add
!Git
and !GitInstall
commands to install from git repository
(similar to !Tar
and !TarInstall
)
- Add
user-id
and external-user-id
settings
- Implement
!SubConfig
build step (very experimental)
- Add
trusted-hosts
to !PipConfig
- Add
timings.log
and various package lists to the container metadata for
easier troubleshooting
- Add
BindRW
subvolume type
- No longer clean
/var/lib/apt
by default (better for reusing containers)
- A quick bugfix release of NpmInstall command
- Implement support of
https
links for Tar, TarInstall commands
- The
!Py*
commands now download latest pip via get-pip.py. This
effectively means (a) that new features (like checkout a git subdirectory)
works, (b) the version of pip is uniform across distributions and
(c) installing dependencies to not interfere with pip dependencies on ubuntu
(e.g. previously requests library where removed when removing build
dependencies)
- Fix
!CacheDirs
command which was broken few versions ago
- Add
!Text
command for easier writing files into container (e.g. configs)
- Reasonable error message when not enough uids available (#7)
- When running as root vagga now can use all available uids and doesn't require
subuid/subgid files setup, mostly useful for container-in-container
scenarios (#7)
- The
VAGGAENV_*
environment vars will now be propagated to containers with
the prefix stripped
- vagga now supports
--env
and --use-env
command-line switch to set
envionment variable for child processes and to propagate a variable from
parent (i.e. user's) environment
- Add
!Container
build command, which may be used to build on top of
another container
- The
vagga _run
now works with relative commands
- Experimantal
auto-clean
option for containers
- Add
node-legacy
as dependency of !Npm
for ubuntu (required for many
scripts)
- Add
_version_hash
command, mostly for scripting
- No need for tilde or null after
!UbuntuUniverse
(and probably other cases)
- Fix permission of ubuntu
policy-rc.d
, which fixes installing packages
having a daemon that start on install
- Configure apt to always use
--no-install-recommends
in ubuntu
- Add
-W
flag to _run
command, to run writable (copy of) container
- Ubuntu will automatically use nearest mirror and allow to customize mirror
in personal settings
This release fixes small issues appeared right after release and adds python
requirements.txt support.
make install
did not install vagga's busybox, effectively making vagga
work only from source folder
- Add Py2Requirements and Py3Requirements
commands
- Implement writing
/etc/resolv.conf
(previously worked only by the fact
that libc tries 127.0.0.1 when the file is empty)
- Fix positional arguments for shell-wrapped commands
This is backwards-incompatible release of vagga. See Upgrading. The need for
changes in configuration format is dictated by the following:
- Better isolation of build process from host system
- More flexible build steps (i.e. don't fall back to shell scripting for
everything beyond "install this package")
- Caching for all downloads and packages systems (not only for OS-level
packages but also for packages installed by pip and npm)
- Deep dependency tracking (in future version we will not only track
changes of dependencies in
vagga.yaml
but also in requirements.txt
and package.json
or whatever convention exists; it's partially possible
using Depends build step)
More features:
There are some features missing, but we believe it doesn't
affect a lot of users.