forked from Lokavaluto/dev-pack
Valentin Lab
5 years ago
commit
6771363c7b
2 changed files with 412 additions and 0 deletions
-
88README.org
-
324src/install.sh
@ -0,0 +1,88 @@ |
|||||
|
#+PROPERTY: Effort_ALL 0 0:30 1:00 2:00 0.5d 1d 1.5d 2d 3d 4d 5d |
||||
|
#+PROPERTY: Max_effort_ALL 0 0:30 1:00 2:00 0.5d 1d 1.5d 2d 3d 4d 5d |
||||
|
#+PROPERTY: header-args:python :var filename=(buffer-file-name) |
||||
|
#+PROPERTY: header-args:sh :var filename=(buffer-file-name) |
||||
|
#+TODO: TODO WIP BLOCKED | DONE CANCELED |
||||
|
#+LATEX_HEADER: \usepackage[margin=0.5in]{geometry} |
||||
|
#+LaTeX_CLASS: article |
||||
|
#+OPTIONS: H:8 ^:nil prop:("Effort" "Max_effort") tags:not-in-toc |
||||
|
#+COLUMNS: %50ITEM %Effort(Min Effort) %Max_effort(Max Effort) |
||||
|
|
||||
|
#+BEGIN_LaTeX |
||||
|
\hypersetup{ |
||||
|
linkcolor=blue, |
||||
|
pdfborder={0 0 0 0} |
||||
|
} |
||||
|
#+END_LaTeX |
||||
|
|
||||
|
|
||||
|
#+TITLE: Lokavaluto Dev Pack |
||||
|
|
||||
|
#+LATEX: \pagebreak |
||||
|
|
||||
|
Resources (docs, tools) to help getting things done in the lokavaluto team |
||||
|
|
||||
|
#+LATEX: \pagebreak |
||||
|
|
||||
|
#+LATEX: \pagebreak |
||||
|
|
||||
|
* Common dev environment |
||||
|
|
||||
|
We recommend you to try to stick to a somewhat common environment to |
||||
|
avoid as much as possible any problem stemming for your installation. |
||||
|
|
||||
|
The most important part is the usage of the same docker image of odoo |
||||
|
and the same version of postgres. Here are suggestion of how to |
||||
|
install it. |
||||
|
|
||||
|
** Installation |
||||
|
|
||||
|
*** Linux |
||||
|
|
||||
|
We are using `compose` |
||||
|
|
||||
|
**** Requirements |
||||
|
|
||||
|
- =bash= >= 4.3 |
||||
|
- =docker= >= 17.06 |
||||
|
- =curl= ## for installation |
||||
|
- =git= |
||||
|
|
||||
|
**** Deployment |
||||
|
|
||||
|
We have a magic script for you that will install or update your |
||||
|
current installation of =compose= and of the =charms=. |
||||
|
|
||||
|
#+BEGIN_SRC shell |
||||
|
curl -sS https://git.myceliandre.fr/Lokavaluto/dev-pack/raw/branch/dev/src/install.sh | bash |
||||
|
#+END_SRC |
||||
|
|
||||
|
If you are curious of what it is doing, check: |
||||
|
|
||||
|
https://git.myceliandre.fr/Lokavaluto/dev-pack/src/branch/dev/src/install.sh#L203-L258 |
||||
|
|
||||
|
|
||||
|
*** MacOSX |
||||
|
|
||||
|
**** Requirements |
||||
|
|
||||
|
On MacOSX, you'll need to install homebrew and gnu tools: |
||||
|
|
||||
|
https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/ |
||||
|
|
||||
|
|
||||
|
**** Deployment |
||||
|
|
||||
|
TBD |
||||
|
|
||||
|
*** Windows |
||||
|
|
||||
|
**** Requirements |
||||
|
|
||||
|
- =bash= >= 4.3 |
||||
|
- =docker= >= 17.06 |
||||
|
- =docker-compose= |
||||
|
|
||||
|
**** Deployment |
||||
|
|
||||
|
TBD |
@ -0,0 +1,324 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
e() { printf "%s" "$*"; } |
||||
|
|
||||
|
warn() { e "${YELLOW}Warning:$NORMAL" "$*"$'\n' >&2 ; } |
||||
|
info() { e "${BLUE}II$NORMAL" "$*"$'\n' >&2 ; } |
||||
|
verb() { [ -z "$VERBOSE" ] || e "$*"$'\n' >&2; } |
||||
|
debug() { [ -z "$DEBUG" ] || e "$*"$'\n' >&2; } |
||||
|
err() { e "${RED}Error:$NORMAL $*"$'\n' >&2 ; } |
||||
|
die() { err "$@" ; exit 1; } |
||||
|
|
||||
|
|
||||
|
get_path() { ( |
||||
|
IFS=: |
||||
|
for d in $PATH; do |
||||
|
filename="$d/$1" |
||||
|
[ -f "$filename" -a -x "$filename" ] && { |
||||
|
echo "$d/$1" |
||||
|
return 0 |
||||
|
} |
||||
|
done |
||||
|
return 1 |
||||
|
) } |
||||
|
|
||||
|
ANSI_ESC=$'\e[' |
||||
|
|
||||
|
ansi_color() { |
||||
|
local choice="$1" |
||||
|
|
||||
|
if [ "$choice" == "tty" ]; then |
||||
|
if [ -t 1 ]; then |
||||
|
choice="yes" |
||||
|
else |
||||
|
choice="no" |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ "$choice" != "no" ]; then |
||||
|
|
||||
|
SET_COL_CHAR="${ANSI_ESC}${COL_CHAR}G" |
||||
|
SET_COL_STATUS="${ANSI_ESC}${COL_STATUS}G" |
||||
|
SET_COL_INFO="${ANSI_ESC}${COL_INFO}G" |
||||
|
SET_COL_ELT="${ANSI_ESC}${COL_ELT}G" |
||||
|
|
||||
|
SET_BEGINCOL="${ANSI_ESC}0G" |
||||
|
|
||||
|
UP="${ANSI_ESC}1A" |
||||
|
DOWN="${ANSI_ESC}1B" |
||||
|
LEFT="${ANSI_ESC}1D" |
||||
|
RIGHT="${ANSI_ESC}1C" |
||||
|
|
||||
|
SAVE="${ANSI_ESC}7" |
||||
|
RESTORE="${ANSI_ESC}8" |
||||
|
|
||||
|
NORMAL="${ANSI_ESC}0m" |
||||
|
|
||||
|
GRAY="${ANSI_ESC}1;30m" |
||||
|
RED="${ANSI_ESC}1;31m" |
||||
|
GREEN="${ANSI_ESC}1;32m" |
||||
|
YELLOW="${ANSI_ESC}1;33m" |
||||
|
BLUE="${ANSI_ESC}1;34m" |
||||
|
PINK="${ANSI_ESC}1;35m" |
||||
|
CYAN="${ANSI_ESC}1;36m" |
||||
|
WHITE="${ANSI_ESC}1;37m" |
||||
|
|
||||
|
DARKGRAY="${ANSI_ESC}0;30m" |
||||
|
DARKRED="${ANSI_ESC}0;31m" |
||||
|
DARKGREEN="${ANSI_ESC}0;32m" |
||||
|
DARKYELLOW="${ANSI_ESC}0;33m" |
||||
|
DARKBLUE="${ANSI_ESC}0;34m" |
||||
|
DARKPINK="${ANSI_ESC}0;35m" |
||||
|
DARKCYAN="${ANSI_ESC}0;36m" |
||||
|
DARKWHITE="${ANSI_ESC}0;37m" |
||||
|
|
||||
|
SUCCESS=$GREEN |
||||
|
WARNING=$YELLOW |
||||
|
FAILURE=$RED |
||||
|
NOOP=$BLUE |
||||
|
ON=$SUCCESS |
||||
|
OFF=$FAILURE |
||||
|
ERROR=$FAILURE |
||||
|
|
||||
|
else |
||||
|
|
||||
|
SET_COL_CHAR= |
||||
|
SET_COL_STATUS= |
||||
|
SET_COL_INFO= |
||||
|
SET_COL_ELT= |
||||
|
|
||||
|
SET_BEGINCOL= |
||||
|
|
||||
|
NORMAL= |
||||
|
RED= |
||||
|
GREEN= |
||||
|
YELLOW= |
||||
|
BLUE= |
||||
|
GRAY= |
||||
|
WHITE= |
||||
|
|
||||
|
DARKGRAY= |
||||
|
DARKRED= |
||||
|
DARKGREEN= |
||||
|
DARKYELLOW= |
||||
|
DARKBLUE= |
||||
|
DARKPINK= |
||||
|
DARKCYAN= |
||||
|
|
||||
|
SUCCESS= |
||||
|
WARNING= |
||||
|
FAILURE= |
||||
|
NOOP= |
||||
|
ON= |
||||
|
OFF= |
||||
|
ERROR= |
||||
|
|
||||
|
fi |
||||
|
|
||||
|
ansi_color="$choice" |
||||
|
|
||||
|
export SET_COL_CHAR SET_COL_STATUS SET_COL_INFO SET_COL_ELT \ |
||||
|
SET_BEGINCOL UP DOWN LEFT RIGHT SAVE RESTORE NORMAL \ |
||||
|
GRAY RED GREEN YELLOW BLUE PINK CYAN WHITE DARKGRAY \ |
||||
|
DARKRED DARKGREEN DARKYELLOW DARKBLUE DARKPINK DARKCYAN \ |
||||
|
SUCCESS WARNING FAILURE NOOP ON OFF ERROR ansi_color |
||||
|
} |
||||
|
|
||||
|
|
||||
|
depends() { |
||||
|
## Avoid colliding with variables that are created with depends. |
||||
|
local __i __path __new_name |
||||
|
|
||||
|
for __i in "$@"; do |
||||
|
if ! __path=$(get_path "$__i"); then |
||||
|
__new_name="$(echo "${__i//-/_}")" |
||||
|
if [ "$__new_name" != "$__i" ]; then |
||||
|
depends "$__new_name" |
||||
|
else |
||||
|
err "dependency check: couldn't find '$__i' required command." |
||||
|
exit 1 |
||||
|
fi |
||||
|
else |
||||
|
if ! test -z "$__path" ; then |
||||
|
export "$(echo "${__i//- /__}")"="$__path" |
||||
|
fi |
||||
|
fi |
||||
|
done |
||||
|
} |
||||
|
|
||||
|
get_os() { |
||||
|
local uname_output |
||||
|
uname_output="$(uname -s)" |
||||
|
case "${uname_output}" in |
||||
|
Linux*) |
||||
|
if [[ "$(< /proc/version)" =~ ^.*@(Microsoft|WSL).*$ ]]; then |
||||
|
e wsl |
||||
|
# elif [[ "$(< /proc/version)" == *@(microsoft|WSL)* ]]; then |
||||
|
# e wsl2 |
||||
|
else |
||||
|
e linux |
||||
|
fi |
||||
|
;; |
||||
|
Darwin*) e mac;; |
||||
|
CYGWIN*) e cygwin;; |
||||
|
MINGW*) e mingw;; |
||||
|
*) e "UNKNOWN:${uname_output}";; |
||||
|
esac |
||||
|
} |
||||
|
|
||||
|
|
||||
|
OS=$(get_os) || { |
||||
|
err "Couldn't figure what OS you are running." |
||||
|
exit 1 |
||||
|
} |
||||
|
|
||||
|
fn.exists() { declare -F "$1" >/dev/null; } |
||||
|
|
||||
|
## copy stdin to file, archive previous existing file if any |
||||
|
install_file() { |
||||
|
local path="$1" tmpfile |
||||
|
tmpfile="$(mktemp)" |
||||
|
cat > "${tmpfile}" || return 1 |
||||
|
mkdir -vp "${path%/*}" || exit 1 |
||||
|
if [[ -e "$path" ]]; then |
||||
|
if ! diff "${tmpfile}" "${path}";then |
||||
|
info "File '$path' exists but is different, archiving current content and replacing it." |
||||
|
candidate="${path}.bak" |
||||
|
n=1 |
||||
|
while [ -e "$candidate" ]; do |
||||
|
candidate="${path}.bak.$((n++))" |
||||
|
done |
||||
|
echo "Archiving previous version of '$path'" |
||||
|
mv -v "${path}" "$candidate" || return 1 |
||||
|
else |
||||
|
info "File '$path' exists and is already with the right content." |
||||
|
fi |
||||
|
else |
||||
|
echo "Creating '${path}'." |
||||
|
mv "${tmpfile}" "$path" || return 1 |
||||
|
fi |
||||
|
rm -f "$tmpfile" |
||||
|
} |
||||
|
|
||||
|
install.linux() { |
||||
|
depends docker curl git |
||||
|
|
||||
|
if [ "$UID" != 0 ]; then |
||||
|
BIN_PATH=~/bin |
||||
|
CHARM_PATH=~/.charm-store |
||||
|
DEFAULT_COMPOSE_YML=~/.compose/etc/compose.yml |
||||
|
COMPOSE_OPTION_FILE=~/.compose/etc/local.conf |
||||
|
else |
||||
|
BIN_PATH=/usr/local/bin |
||||
|
CHARM_PATH=/srv/charm-store |
||||
|
DEFAULT_COMPOSE_YML=/etc/compose/compose.yml |
||||
|
COMPOSE_OPTION_FILE=/etc/compose/local.conf |
||||
|
fi |
||||
|
|
||||
|
## COMPOSE |
||||
|
if compose=$(type -p "compose"); then |
||||
|
if [ "$compose" != "$BIN_PATH/compose" ]; then |
||||
|
warn "Found a 'compose' in \$PATH at '$compose' that doesn't match expected compose location '$BIN_PATH/compose'." \ |
||||
|
"Not doing anything." |
||||
|
elif [ -L "$compose" ]; then |
||||
|
warn "Found a 'compose' at '$compose' that is a link. " \ |
||||
|
"Not doing anything." |
||||
|
else |
||||
|
compose="" ## force overwrite |
||||
|
fi |
||||
|
fi |
||||
|
if [ -z "$compose" ]; then |
||||
|
mkdir -p "$BIN_PATH" || exit 1 |
||||
|
info "Downloading 'compose'..." |
||||
|
( |
||||
|
set +x |
||||
|
curl -sS https://git.0k.io/0k-compose.git/plain/bin/compose > /tmp/compose |
||||
|
chmod -v +x /tmp/compose |
||||
|
mv -v /tmp/compose "$BIN_PATH/" |
||||
|
) || exit 1 |
||||
|
echo " .. Done !" |
||||
|
fi |
||||
|
|
||||
|
if [[ ":$PATH:" != *":$BIN_PATH:"* ]]; then |
||||
|
warn "Please ensure that '$BIN_PATH' is in your \$PATH to ensure" \ |
||||
|
"the simple usage of 'compose' command." |
||||
|
fi |
||||
|
|
||||
|
## CHARMS |
||||
|
if ! [ -d "$CHARM_PATH" ]; then |
||||
|
echo "Creating charm-store in '$CHARM_PATH'." |
||||
|
git clone https://git.0k.io/0k-charms.git "$CHARM_PATH" || exit 1 |
||||
|
else |
||||
|
echo "Updating existing charm-store in '$CHARM_PATH'." |
||||
|
cd "$CHARM_PATH" || exit 1 |
||||
|
git checkout master && |
||||
|
git pull -r || { |
||||
|
warn "Could not update charm-store, do you have devs ingoing ?" |
||||
|
} |
||||
|
fi |
||||
|
|
||||
|
## |
||||
|
## YYYvlab: following needs to be discussed further with njeudy |
||||
|
## |
||||
|
|
||||
|
|
||||
|
## DEFAULT COMPOSE |
||||
|
# cat <<EOF | install_file "$DEFAULT_COMPOSE_YML" |
||||
|
# odoo: |
||||
|
# charm: odoo-tecnativa |
||||
|
# # docker-compose: |
||||
|
# # ## Important to keep as a list: otherwise it'll overwrite charm's arguments. |
||||
|
# # command: |
||||
|
# # - "--log-level=debug" |
||||
|
# # environment: |
||||
|
# # TOTO: TATA |
||||
|
# # image: mynewimage |
||||
|
# # options: |
||||
|
# # workers: 1 |
||||
|
# # modules: ## 'base' is automatically added |
||||
|
# # - l10n_fr |
||||
|
# # - mymodule |
||||
|
# # database: mybase ## defaults to database in relation |
||||
|
|
||||
|
|
||||
|
# frontend: |
||||
|
# charm: apache |
||||
|
|
||||
|
# EOF |
||||
|
|
||||
|
# cat <<EOF | install_file "$COMPOSE_OPTION_FILE" |
||||
|
# #CHARM_STORE=$CHARM_STORE |
||||
|
# #COMPOSE_DOCKER_IMAGE=docker.0k.io/compose:1.3.0-rc5 |
||||
|
|
||||
|
# #if [ "${docker_run_opts+x}" ]; then |
||||
|
# # docker_run_opts+=("-v" "/home/vaab/dev/sh/0k-compose/bin/compose-core:/usr/local/bin/compose-core") |
||||
|
# #fi |
||||
|
|
||||
|
# #DEFAULT_COMPOSE_YML=$DEFAULT_COMPOSE_YML |
||||
|
# EOF |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
install.mac() { |
||||
|
depends docker |
||||
|
die "Not implemented yet." |
||||
|
} |
||||
|
|
||||
|
install.wsl() { |
||||
|
die "Not implemented yet." |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
run() { |
||||
|
OS="$(get_os)" |
||||
|
if fn.exists "install.$OS"; then |
||||
|
"install.$OS" |
||||
|
else |
||||
|
echo "System '$OS' not supported yet." >&2 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
ansi_color tty |
||||
|
run |
Write
Preview
Loading…
Cancel
Save
Reference in new issue