diff --git a/.gitignore b/.gitignore index b425911..27748bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # install tmp *.deb -*.log +logs/* **/plugged **/autoload diff --git a/Dockerfile b/Dockerfile index 506484b..931c422 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,14 +14,14 @@ RUN echo "$USER ALL=(ALL) NOPASSWD: ALL" \ # Filesystem steps ENV WORKSPACE="/home/$USER/workspace" +ENV LOG_TARGET="STDOUT" ADD --chown=test-user . "$WORKSPACE/dotfiles" WORKDIR "$WORKSPACE/dotfiles" # Install steps USER test-user -ENV FAST_MODE="true" ARG TARGET="all" -RUN make TARGET=$TARGET +RUN make install TARGET=$TARGET # Test entrypoint ENTRYPOINT [ "make", "--directory", "tests", "TARGET=$TARGET" ] diff --git a/Makefile b/Makefile index 96d484b..8bdd8d8 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ # ---------------------------------------------------------------------------- # .PHONY: clean install +# Install dotfiles to home folder all: ./bootstrap.pl @@ -11,7 +12,7 @@ install: ./install.pl clean: - rm ./.install.*.log + rm -rf logs # ---------------------------------------------------------------------------- # # Docker commands diff --git a/bootstrap.pl b/bootstrap.pl index 3c6c823..a5bd2cd 100755 --- a/bootstrap.pl +++ b/bootstrap.pl @@ -7,16 +7,17 @@ use Cwd; use Stow; -# Stow files my $dir = getcwd; +my $target = $ENV{'HOME'}; +print "Stowing $dir/files to $target\n"; + my %stow_options = ( dir => $dir, - target => $ENV{'HOME'}); + target => $target); my $stow = new Stow(%stow_options); my @pkgs = ('files'); $stow->plan_stow(@pkgs); -# my %conflicts = $stow->get_conflicts(); $stow->process_tasks(); print "done\n"; diff --git a/files/.bash_profile b/files/.bash_profile index afc8566..d3f72bd 100644 --- a/files/.bash_profile +++ b/files/.bash_profile @@ -1,3 +1,5 @@ +echo "Loading bash profile" + # Load .profile, containing login, non-bash related initializations. source "$HOME/.profile" diff --git a/files/.profile b/files/.profile index fcbd7e7..1c9b92e 100644 --- a/files/.profile +++ b/files/.profile @@ -27,28 +27,22 @@ if [ -z "$PROFILE_LOCK" ]; then # pyenv export PYENV_ROOT="$HOME/.pyenv" + export PATH="$PYENV_ROOT/bin:$PATH" + export PATH="$PYENV_ROOT/shims:$PATH" if [ -d "$PYENV_ROOT" ]; then - export PATH="$PYENV_ROOT/bin:$PATH" - export PATH="$PYENV_ROOT/shims:$PATH" [ -x "$(command -v pyenv)" ] && eval "$(pyenv init -)" fi # poetry export POETRY_ROOT="$HOME/.poetry" - if [ -d "$POETRY_ROOT" ]; then - export PATH="$POETRY_ROOT/bin:$PATH" - fi + export PATH="$POETRY_ROOT/bin:$PATH" # nvm export NVM_DIR="$XDG_CONFIG_HOME/nvm" - if [ -d "$NVM_DIR" ]; then - export PATH="$NVM_DIR/bin:$PATH" - fi + export PATH="$NVM_DIR/bin:$PATH" # yarn export YARN_DIR="$HOME/.yarn" - if [ -d "$YARN_DIR" ]; then - export PATH="$YARN_DIR/bin:$PATH" - fi + export PATH="$YARN_DIR/bin:$PATH" fi diff --git a/install.pl b/install.pl index 1e2e5c0..d119195 100755 --- a/install.pl +++ b/install.pl @@ -4,6 +4,7 @@ use warnings; use autodie; use Cwd; +use File::Path qw( make_path ); # Prevent running as root if ($< == 0) { @@ -13,25 +14,40 @@ if ($< == 0) { my $dir = getcwd; -# Generate unique logfile -my $uuid = `uuidgen`; -chomp $uuid; -my $log_path = "$dir/.install.$uuid.log"; -print "Logs: $log_path\n"; +my $log_target = $ENV{'LOG_TARGET'} // ''; +my $log_path = ''; +if ($log_target ne 'STDOUT') { + # Generate unique logfile + my $log_dir = "$dir/logs"; + make_path $log_dir or die "Failed to create path: $log_dir"; + my $uuid = `uuidgen`; + chomp $uuid; + $log_path = "$log_dir/$uuid.log"; + print "Logs: $log_target\n"; +} + +# Execute given command and log appropriately +# @arg 0 command to run +sub execute { + my $command = $log_path ne '' + ? "$_[0] &> $log_path" + : $_[0]; + return system($command); +} + # Ensure dependencies installed -`sudo apt-get update -y && sudo apt-get install -y liblocal-lib-perl cpanminus stow >> $log_path 2>&1`; +execute("sudo apt-get update -qqy && sudo apt-get install -qqy liblocal-lib-perl cpanminus stow"); # Bootstrap files -my $exit_status = `./bootstrap.pl >> $log_path 2>&1`; -print $exit_status; +execute("./bootstrap.pl"); # Read scripts to be installed my $install_dir = "$dir/install"; print "Installing $install_dir\n"; -opendir(DIR, $install_dir) or die "Could not open $install_dir\n"; -my @files = readdir(DIR); -closedir(DIR); +opendir($dir, $install_dir) or die "Could not open $install_dir\n"; +my @files = readdir($dir); +closedir($dir); @files = grep(/^\d{2}-.*\.sh$/, @files); @files = sort { lc($a) cmp lc($b) } @files; @@ -42,7 +58,7 @@ if ($target ne 'all') { } foreach my $file (@files) { print "Running $file...\r"; - my $exit_status = system("/bin/bash -l $install_dir/$file >> $log_path 2>&1"); + my $exit_status = execute("/bin/bash -l $install_dir/$file"); if ($exit_status != 0) { print "Failure in $file, see above and logs for more detail.\n"; exit ($exit_status); diff --git a/install/utils.sh b/install/utils.sh index 7fc69bd..0aec29e 100755 --- a/install/utils.sh +++ b/install/utils.sh @@ -1,14 +1,7 @@ #!/usr/bin/env bash -# ---------------------------------------------------------------------------- # -# Helper variables # -# ---------------------------------------------------------------------------- # -install_dir="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"; -dotfiles_dir="$(dirname "$install_dir")"; - # ---------------------------------------------------------------------------- # # Helper functions # ---------------------------------------------------------------------------- # - clean() { sudo apt-get clean } @@ -29,13 +22,13 @@ upgrade() { # @arg $1 packages to install install() { - sudo apt-get install $1 + sudo apt-get install -qqy $1 refresh } # @arg $1 package list file to install install_file() { - sudo apt-get install -f $(cat $1) + sudo apt-get install -qqyf $(cat $1) refresh } @@ -109,3 +102,12 @@ C_LCYAN='\033[1;36m' C_LGRAY='\033[0;37m' C_WHITE='\033[1;37m' C_NC='\033[0m' + +# ---------------------------------------------------------------------------- # +# Helper variables # +# ---------------------------------------------------------------------------- # +install_dir="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" +dotfiles_dir="$(dirname "$install_dir")" +source "$dotfiles_dir/files/.bash_profile" +refresh +