You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

279 lines
8.0 KiB
Makefile

#
# Author: Hari Sekhon
# Date: 2016-01-17 12:56:53 +0000 (Sun, 17 Jan 2016)
#
# vim:ts=4:sts=4:sw=4:noet
#
# https://github.com/harisekhon/bash-tools
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback
#
# https://www.linkedin.com/in/harisekhon
#
include Makefile.in
REPO := HariSekhon/DevOps-Bash-tools
#CODE_FILES := $(shell find . -type f -name '*.sh' -o -type f -name '.bash*' | sort)
CODE_FILES := $(shell git ls-files | grep -E -e '\.sh$$' -e '\.bash[^/]*$$' | sort)
CONF_FILES := $(shell sed "s/\#.*//; /^[[:space:]]*$$/d" setup/files.txt)
BASH_PROFILE_FILES := $(shell echo .bashrc .bash_profile .bash.d/*.sh)
#.PHONY: *
define MAKEFILE_USAGE
Repo specific options:
make install builds all script dependencies, installs AWS CLI, symlinks all config files to $$HOME and adds sourcing of bash profile
make link symlinks all config files to $$HOME and adds sourcing of bash profile
make unlink removes all symlinks pointing to this repo's config files and removes the sourcing lines from .bashrc and .bash_profile
make python-desktop installs all Python Pip packages for desktop workstation listed in setup/pip-packages-desktop.txt
make perl-desktop installs all Perl CPAN packages for desktop workstation listed in setup/cpan-packages-desktop.txt
make ruby-desktop installs all Ruby Gem packages for desktop workstation listed in setup/gem-packages-desktop.txt
make golang-desktop installs all Golang packages for desktop workstation listed in setup/go-packages-desktop.txt
make nodejs-desktop installs all NodeJS packages for desktop workstation listed in setup/npm-packages-desktop.txt
make desktop installs all of the above + many desktop OS packages listed in setup/
make mac-desktop all of the above + installs a bunch of major common workstation software packages like Ansible, Terraform, MiniKube, MiniShift, SDKman, Travis CI, CCMenu, Parquet tools etc.
make linux-desktop
make ls-scripts print list of scripts in this project, ignoring code libraries in lib/ and .bash.d/
make vim installs Vundle and plugins
make tmux installs TMUX TPM and plugin for kubernetes context
make ccmenu installs and (re)configures CCMenu to watch this and all other major HariSekhon GitHub repos
make status open the Github Status page of all my repos build statuses across all CI platforms
make aws installs AWS CLI tools
make azure installs Azure CLI
make azure-shell sets up Azure Cloud Shell (limited, doesn't install OS packages since there is no sudo)
make gcp installs GCloud SDK
make gcp-shell sets up GCP Cloud Shell: installs core packages and links configs
(maintains itself across future Cloud Shells via .customize_environment hook)
endef
# not including azure here because it requires interactive prompt and hangs automatic testing of make docker-*
.PHONY: build
build:
@echo ================
@echo Bash Tools Build
@echo ================
@$(MAKE) git-summary
@$(MAKE) init
@$(MAKE) system-packages aws
.PHONY: init
init: git
@echo "running init:"
git submodule update --init --recursive
@echo
.PHONY: install
install: build link aws
@:
.PHONY: uninstall
uninstall: unlink
@echo "Not removing any system packages for safety"
.PHONY: bash
bash: link
@:
.PHONY: link
link:
@setup/shell_link.sh
.PHONY: unlink
unlink:
@setup/shell_unlink.sh
.PHONY: mac-desktop
mac-desktop: desktop
@setup/mac_desktop.sh
.PHONY: linux-desktop
linux-desktop: desktop
@setup/linux_desktop.sh
.PHONY:
ccmenu:
@setup/configure_ccmenu.sh
.PHONY: desktop
desktop: install
@if [ -x /sbin/apk ]; then $(MAKE) apk-packages-desktop; fi
@if [ -x /usr/bin/apt-get ]; then $(MAKE) apt-packages-desktop; fi
@if [ -x /usr/bin/yum ]; then $(MAKE) yum-packages-desktop; fi
@if [ -x /usr/local/bin/brew -a `uname` = Darwin ]; then $(MAKE) homebrew-packages-desktop; fi
@# do these late so that we have the above system packages installed first to take priority and not install from source where we don't need to
@$(MAKE) perl-desktop
@$(MAKE) golang-desktop
@$(MAKE) nodejs-desktop
@# no packages any more since jgrep is no longer found
@#$(MAKE) ruby-desktop
.PHONY: apk-packages-desktop
apk-packages-desktop: system-packages
@echo "Alpine desktop not supported at this time"
@exit 1
.PHONY: apt-packages-desktop
apt-packages-desktop: system-packages
NO_FAIL=1 NO_UPDATE=1 $(BASH_TOOLS)/apt_install_packages.sh setup/deb-packages-desktop.txt
.PHONY: yum-packages-desktop
yum-packages-desktop: system-packages
NO_FAIL=1 NO_UPDATE=1 $(BASH_TOOLS)/yum_install_packages.sh setup/rpm-packages-desktop.txt
.PHONY: homebrew-packages-desktop
homebrew-packages-desktop: system-packages homebrew
@:
.PHONY: homebrew
homebrew: system-packages brew
@:
.PHONY: brew
brew:
NO_FAIL=1 NO_UPDATE=1 $(BASH_TOOLS)/brew_install_packages.sh setup/brew-packages-desktop.txt
NO_FAIL=1 NO_UPDATE=1 CASK=1 $(BASH_TOOLS)/brew_install_packages.sh setup/brew-packages-desktop-casks.txt
NO_FAIL=1 NO_UPDATE=1 TAP=1 $(BASH_TOOLS)/brew_install_packages.sh setup/brew-packages-desktop-taps.txt
.PHONY: perl-desktop
perl-desktop: system-packages cpan
@:
.PHONY: cpan
cpan:: cpanm
@:
.PHONY: cpanm
cpanm:
NO_FAIL=1 NO_UPDATE=1 $(BASH_TOOLS)/perl_cpanm_install_if_absent.sh setup/cpan-packages-desktop.txt
.PHONY: golang-desktop
golang-desktop: system-packages go-desktop
@:
.PHONY: go-desktop
go-desktop: system-packages go
@:
.PHONY: go
go:
NO_FAIL=1 $(BASH_TOOLS)/golang_get_install_if_absent.sh setup/go-packages-desktop.txt
.PHONY: ruby-desktop
ruby-desktop: system-packages gems
@:
.PHONY: gems
gems: gem
@:
.PHONY: gem
gem:
NO_FAIL=1 $(BASH_TOOLS)/ruby_gem_install_if_absent.sh setup/gem-packages-desktop.txt
.PHONY: python-desktop
python-desktop: system-packages pip
.PHONY: pip
pip:: python-version
./python_pip_install_if_absent.sh setup/pip-packages-desktop.txt
.PHONY: nodejs-desktop
nodejs-desktop: system-packages npm
.PHONY: npm
npm::
$(BASH_TOOLS)/nodejs_npm_install_if_absent.sh $(BASH_TOOLS)/setup/npm-packages-desktop.txt
.PHONY: aws
aws: system-packages python-version
@setup/install_aws_cli.sh
.PHONY: azure
azure: system-packages
@setup/install_azure_cli.sh
.PHONY: azure-shell
azure-shell: link
:
.PHONY: gcp
gcp: system-packages
@./setup/install_gcloud_sdk.sh
.PHONY: gcp-shell
gcp-shell:
@if [ -z "${DEVSHELL_PROJECT_ID:-}" ]; then echo "Not running inside Google Cloud Shell"; exit 1; fi
@$(MAKE) system-packages link
.PHONY: vim
vim:
setup/install_vundle.sh
.PHONY: tmux
tmux: ~/.tmux/plugins/tpm ~/.tmux/plugins/kube.tmux
@:
~/.tmux/plugins/tpm:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
~/.tmux/plugins/kube.tmux:
wget -O ~/.tmux/plugins/kube.tmux https://raw.githubusercontent.com/jonmosco/kube-tmux/master/kube.tmux
.PHONY: test
test:
./check_all.sh
.PHONY: clean
clean:
@rm -fv setup/terraform.zip
.PHONY: ls-scripts
ls-scripts:
@$(MAKE) ls | grep -v -e 'lib/' -e '\.bash'
.PHONY: ls-scripts2
ls-scripts2:
@$(MAKE) ls | grep -v -e 'lib/' -e '\.bash' -e 'setup/'
.PHONY: wcbashrc
wcbashrc:
@wc $(BASH_PROFILE_FILES)
@printf "Total Bash Profile files: "
@ls $(BASH_PROFILE_FILES) | wc -l
.PHONY: wcbash
wcbash: wcbashrc
@:
.PHONY: wcbashrc2
wcbashrc2:
@printf "Total Bash Profile files: "
@ls $(BASH_PROFILE_FILES) | wc -l
@printf "Total line count without # comments: "
@ls $(BASH_PROFILE_FILES) | xargs sed 's/#.*//;/^[[:space:]]*$$/d' | wc -l
.PHONY: wcbash2
wcbash2: wcbashrc2
@:
.PHONY: pipreqs-mapping
pipreqs-mapping:
#wget -O resources/pipreqs_mapping.txt https://raw.githubusercontent.com/HariSekhon/pipreqs/mysql-python/pipreqs/mapping
wget -O resources/pipreqs_mapping.txt https://raw.githubusercontent.com/bndr/pipreqs/master/pipreqs/mapping
.PHONY: pip-mapping
pip-mapping: pipreqs-mapping
@: