Skip to content

Instantly share code, notes, and snippets.

@RandyMcMillan
Last active September 12, 2022 21:58
Show Gist options
  • Save RandyMcMillan/9aac520696f4435840269e4b41e7a441 to your computer and use it in GitHub Desktop.
Save RandyMcMillan/9aac520696f4435840269e4b41e7a441 to your computer and use it in GitHub Desktop.
GNUmakefile example

GNUmakefile example

$ make report help
[ARGUMENTS]	
  args:
    - HOME=/Users/git
    - PWD=/Users/git/9aac520696f4435840269e4b41e7a441
    - THIS_FILE=GNUmakefile
    - TIME=1627508111
    - PACKAGE_PREFIX=ghcr.io
    - ARCH=x86_64
    - HOST_USER=root
    - HOST_UID=0
    - SERVICE_TARGET=shell
    - ALPINE_VERSION=3.11.6
    - PROJECT_NAME=9aac520696f4435840269e4b41e7a441
    - DOCKER=/usr/local/bin/docker
    - DOCKER_COMPOSE=/usr/local/bin/docker-compose
    - GIT_USER_NAME=randymcmillan
    - GIT_USER_EMAIL=randy.lee.mcmillan@gmail.com
    - GIT_SERVER=gist.github.com
    - GIT_PROFILE=randymcmillan
    - GIT_BRANCH=master
    - GIT_PREVIOUS_HASH=6b18e96ce9373165f80790931174a26a94326dbe
    - GIT_REPO_ORIGIN=git@gist.github.com:9aac520696f4435840269e4b41e7a441.git
    - GIT_REPO_NAME=9aac520696f4435840269e4b41e7a441
    - GIT_REPO_PATH=/Users/git/9aac520696f4435840269e4b41e7a441
    - NOCACHE=
    - VERBOSE=
    - PASSWORD=changeme
    - CMD_ARGUMENTS=

[USAGE]: make [COMMAND] [EXTRA_ARGUMENTS]	

	 make help
	 make super
	 make signin
	 make report

[DEV ENVIRONMENT]:	

	 make signin           ~/GH_TOKEN.txt required from github.com

[EXTRA_ARGUMENTS]:	set build variables	

	nocache=true
	            	add --no-cache to command
	verbose=true
	            	add --verbose to command

[COMMANDS]:	push a command to somewhere	

	cmd=command 	
	cmd="command"	
	             	send CMD_ARGUMENTS to the [TARGET]

[EXAMPLE]:
	make push nocache=true verbose=true cmd=test

GNUmakefile example

SHELL := /bin/bash
PWD ?= pwd_unknown
THIS_FILE := $(lastword $(MAKEFILE_LIST))
export THIS_FILE
TIME := $(shell date +%s)
export TIME
ARCH := $(shell uname -m)
export ARCH
ifeq ($(user),)
HOST_USER := root
HOST_UID := $(strip $(if $(uid),$(uid),0))
else
HOST_USER := $(strip $(if $(USER),$(USER),nodummy))
HOST_UID := $(strip $(if $(shell id -u),$(shell id -u),4000))
endif
export HOST_USER
export HOST_UID
ifeq ($(target),)
SERVICE_TARGET ?= shell
else
SERVICE_TARGET := $(target)
endif
export SERVICE_TARGET
ifeq ($(docker),)
#DOCKER := $(shell find /usr/local/bin -name 'docker')
DOCKER := $(shell which docker)
else
DOCKER := $(docker)
endif
export DOCKER
ifeq ($(compose),)
DOCKER_COMPOSE := $(shell which docker-compose)
else
DOCKER_COMPOSE := $(compose)
endif
export DOCKER_COMPOSE
ifeq ($(alpine),)
ALPINE_VERSION := 3.11.6
else
ALPINE_VERSION := $(alpine)
endif
export ALPINE_VERSION
# PROJECT_NAME defaults to name of the current directory.
ifeq ($(project),)
PROJECT_NAME := $(notdir $(PWD))
else
PROJECT_NAME := $(project)
endif
export PROJECT_NAME
#GIT CONFIG
GIT_USER_NAME := $(shell git config user.name)
export GIT_USER_NAME
GIT_USER_EMAIL := $(shell git config user.email)
export GIT_USER_EMAIL
GIT_SERVER := gist.github.com
export GIT_SERVER
GIT_REPO_NAME := $(PROJECT_NAME)
export GIT_REPO_NAME
ifeq ($(GIT_REPO_NAME),d77f8ab35cafc61d85e7b775576c2481)
GIT_PROFILE := randymcmillan
else
GIT_PROFILE := randymcmillan
endif
export GIT_PROFILE
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
export GIT_BRANCH
GIT_HASH := $(shell git rev-parse HEAD)
export GIT_HASH
GIT_PREVIOUS_HASH := $(shell git rev-parse master@{0})
export GIT_PREVIOUS_HASH
GIT_REPO_ORIGIN := $(shell git remote get-url origin)
export GIT_REPO_ORIGIN
GIT_REPO_PATH := $(HOME)/$(GIT_REPO_NAME)
export GIT_REPO_PATH
ifeq ($(nocache),true)
NOCACHE := --no-cache
else
NOCACHE :=
endif
export NOCACHE
ifeq ($(verbose),true)
VERBOSE := --verbose
else
VERBOSE :=
endif
export VERBOSE
ifneq ($(passwd),)
PASSWORD := $(passwd)
else
PASSWORD := changeme
endif
export PASSWORD
ifeq ($(cmd),)
CMD_ARGUMENTS :=
else
CMD_ARGUMENTS := $(cmd)
endif
export CMD_ARGUMENTS
#######################
PACKAGE_PREFIX := ghcr.io
export PACKAGE_PREFIX
GH_TOKEN :=~/GH_TOKEN.txt
.PHONY: help
help:
@echo ''
@echo ' [USAGE]: make [COMMAND] [EXTRA_ARGUMENTS] '
@echo ''
@echo ' make help'
@echo ' make super'
@echo ' make signin'
@echo ' make report'
@echo ''
@echo ' [DEV ENVIRONMENT]: '
@echo ''
@echo ' make signin ~/GH_TOKEN.txt required from github.com'
@echo ''
@echo ' [EXTRA_ARGUMENTS]: set build variables '
@echo ''
@echo ' nocache=true'
@echo ' add --no-cache to command'
@echo ' verbose=true'
@echo ' add --verbose to command'
@echo ''
@echo ' [COMMANDS]: push a command to somewhere '
@echo ''
@echo ' cmd=command '
@echo ' cmd="command" '
@echo ' send CMD_ARGUMENTS to the [TARGET]'
@echo ''
@echo ' [EXAMPLE]:'
@echo ' make push nocache=true verbose=true cmd=test'
@echo ''
.PHONY: report
report:
@echo ''
@echo ' [ARGUMENTS] '
@echo ' args:'
@echo ' - HOME=${HOME}'
@echo ' - PWD=${PWD}'
@echo ' - THIS_FILE=${THIS_FILE}'
@echo ' - TIME=${TIME}'
@echo ' - PACKAGE_PREFIX=${PACKAGE_PREFIX}'
@echo ' - ARCH=${ARCH}'
@echo ' - HOST_USER=${HOST_USER}'
@echo ' - HOST_UID=${HOST_UID}'
@echo ' - SERVICE_TARGET=${SERVICE_TARGET}'
@echo ' - ALPINE_VERSION=${ALPINE_VERSION}'
@echo ' - PROJECT_NAME=${PROJECT_NAME}'
@echo ' - DOCKER=${DOCKER}'
@echo ' - DOCKER_COMPOSE=${DOCKER_COMPOSE}'
@echo ' - GIT_USER_NAME=${GIT_USER_NAME}'
@echo ' - GIT_USER_EMAIL=${GIT_USER_EMAIL}'
@echo ' - GIT_SERVER=${GIT_SERVER}'
@echo ' - GIT_PROFILE=${GIT_PROFILE}'
@echo ' - GIT_BRANCH=${GIT_BRANCH}'
@echo ' - GIT_PREVIOUS_HASH=${GIT_PREVIOUS_HASH}'
@echo ' - GIT_REPO_ORIGIN=${GIT_REPO_ORIGIN}'
@echo ' - GIT_REPO_NAME=${GIT_REPO_NAME}'
@echo ' - GIT_REPO_PATH=${GIT_REPO_PATH}'
@echo ' - NOCACHE=${NOCACHE}'
@echo ' - VERBOSE=${VERBOSE}'
@echo ' - PASSWORD=${PASSWORD}'
@echo ' - CMD_ARGUMENTS=${CMD_ARGUMENTS}'
#######################
.PHONY: super
super:
ifneq ($(shell id -u),0)
@echo switch to superuser
sudo -s
endif
#######################
.PHONY: signin
signin:
bash -c 'cat ~/GH_TOKEN.txt | docker login $(PACKAGE_PREFIX) -u $(GIT_USER_NAME) --password-stdin'
.PHONY: readme
readme:
#$ make report no-cache=true verbose=true cmd='make doc' user=root doc
#SHELL := /bin/bash
@echo 'readme'
bash -c "if pgrep MacDown; then pkill MacDown; fi"
# bash -c "echo '<insert string>' >> README.md"
bash -c "echo '## [$(PROJECT_NAME)](https://$(GIT_SERVER)/$(GIT_REPO_NAME)) ' > README.md"
bash -c "cat DOCS.md >> README.md"
bash -c "echo '##### &#36; <code>make report help</code>' >> README.md"
bash -c "make report >> README.md"
bash -c "make help >> README.md"
bash -c "if hash open 2>/dev/null; then open README.md; fi || echo failed to open README.md"
.PHONY: push
push: readme
@echo 'push'
bash -c "git add -f GNUmakefile README.md DOCS.md"
bash -c "git commit -m ... "
bash -c "git push -f --all git@$(GIT_SERVER):$(PROJECT_NAME).git || echo failed to push docs"
.PHONY: push-docs
push-docs: readme push
@echo 'push-docs'
-include Makefile
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment