Compare commits
24 Commits
v1.3.0
...
594ca7efbf
| Author | SHA1 | Date | |
|---|---|---|---|
|
594ca7efbf
|
|||
|
709e7ba55d
|
|||
|
899983545c
|
|||
|
6d736c4c4d
|
|||
|
ac74afb299
|
|||
|
a38fbca502
|
|||
|
38c61a516b
|
|||
|
38e8e37397
|
|||
|
ba2cbf34f5
|
|||
|
7d5050ab86
|
|||
|
4850536629
|
|||
|
a6b98ad8d9
|
|||
|
07a1081751
|
|||
|
070a66460c
|
|||
|
dbbe42466c
|
|||
|
270e6e7e62
|
|||
|
a690bd1348
|
|||
|
26b90fe167
|
|||
|
a2168e397e
|
|||
|
1721ecd1f5
|
|||
|
81e97efd0a
|
|||
|
8479411327
|
|||
|
ef6dac4f47
|
|||
|
7111df14d3
|
@@ -85,7 +85,7 @@ function client::install()
|
||||
function client::finance::gen()
|
||||
{
|
||||
local -r _tags=("micro" "tiny" "slim" "default")
|
||||
local -r _types=("env" "build" "superscript" "env,build,superscript")
|
||||
local -r _types=("env" "build" "compose" "superscript" "env,build,compose,superscript")
|
||||
|
||||
for _tag in "${_tags[@]}"; do
|
||||
for _type in "${_types[@]}"; do
|
||||
@@ -112,10 +112,16 @@ function client::finance::edit()
|
||||
types+=("env")
|
||||
types+=("shell" "superscript")
|
||||
types+=("build" "dockerfile")
|
||||
types+=("compose")
|
||||
types+=("env,shell,build")
|
||||
types+=("env,superscript,dockerfile")
|
||||
types+=("env,superscript,dockerfile,compose")
|
||||
declare -r types
|
||||
|
||||
# The expected default path for default finance image
|
||||
local _path
|
||||
_path="${HOME:?}/docker-finance/conf.d/client/$(uname -s)-$(uname -m)/archlinux/default"
|
||||
declare -r _path
|
||||
|
||||
for _tag in "${tags[@]}"; do
|
||||
for _type in "${types[@]}"; do
|
||||
local _edit="dfi archlinux/${USER}:${_tag} edit"
|
||||
@@ -127,12 +133,25 @@ function client::finance::edit()
|
||||
# Valid
|
||||
"${ci_shell[@]}" "$_edit type=${_type} & wait ; kill -9 %1"
|
||||
done
|
||||
# Build: uncomment all optional packages and plugin dependencies
|
||||
|
||||
if [[ "$_tag" == "default" ]]; then
|
||||
local _file
|
||||
_file="${HOME:?}/docker-finance/conf.d/client/$(uname -s)-$(uname -m)/archlinux/default/Dockerfiles/${USER:?}@$(uname -n)"
|
||||
|
||||
# Build: uncomment all optional packages and plugin dependencies from custom build file
|
||||
_file="${_path}/Dockerfiles/${USER:?}@$(uname -n)"
|
||||
[ ! -f "$_file" ] && exit 1
|
||||
sed -i '18,56s/#//' "$_file"
|
||||
sed -i '18,51s/#//' "$_file"
|
||||
|
||||
# Build: uncomment custom compose merge file
|
||||
_file+=".yml"
|
||||
[ ! -f "$_file" ] && exit 1
|
||||
sed -i '8,13s/#//' "$_file"
|
||||
|
||||
# env: add variables used in custom compose merge file
|
||||
_file="${_path}/env/${USER:?}@$(uname -n)"
|
||||
[ ! -f "$_file" ] && exit 1
|
||||
echo "DOCKER_FINANCE_CLIENT_TESTING=/tmp/testing" >>$_file
|
||||
echo "DOCKER_FINANCE_CONTAINER_TESTING=/tmp/testing" >>$_file
|
||||
fi
|
||||
done
|
||||
}
|
||||
@@ -722,7 +741,7 @@ function container::finance::root()
|
||||
function client::dev-tools::gen()
|
||||
{
|
||||
local -r _tags=("micro" "tiny" "slim" "default")
|
||||
local -r _types=("env" "build" "superscript" "env,build,superscript")
|
||||
local -r _types=("env" "build" "compose" "superscript" "env,build,compose,superscript")
|
||||
|
||||
# TODO: 'default' should only be supported
|
||||
for _tag in "${_tags[@]}"; do
|
||||
@@ -747,7 +766,8 @@ function client::dev-tools::edit()
|
||||
_types+=("env")
|
||||
_types+=("shell" "superscript")
|
||||
_types+=("build" "dockerfile")
|
||||
_types+=("env,shell,build")
|
||||
_types+=("compose")
|
||||
_types+=("env,shell,build,compose")
|
||||
_types+=("env,superscript,dockerfile")
|
||||
declare -r _types
|
||||
|
||||
|
||||
@@ -33,15 +33,39 @@ COPY --from=hledger-suite /usr/local/bin/hledger-flow /usr/local/bin/hledger-flo
|
||||
|
||||
RUN pacman -Syu --noconfirm --disable-download-timeout
|
||||
|
||||
# Apply man page support, as it's unsupported in upstream image (by default)
|
||||
# NOTE: must be applied here before installing any other packages (that have man pages)
|
||||
RUN sed -i '/NoExtract = usr\/share\/man\/\* usr\/share\/info\/\*/d' /etc/pacman.conf
|
||||
|
||||
# System packages
|
||||
# NOTE: although these are already default-installed in the upstream image,
|
||||
# they're re-installed here in order to capture their respective man pages.
|
||||
RUN pacman -Syu \
|
||||
bash \
|
||||
coreutils \
|
||||
gawk \
|
||||
sed \
|
||||
--noconfirm --disable-download-timeout
|
||||
|
||||
# Base packages
|
||||
RUN pacman -Syu \
|
||||
bc \
|
||||
csvkit \
|
||||
less \
|
||||
vim \
|
||||
xan \
|
||||
yq \
|
||||
--noconfirm --disable-download-timeout
|
||||
|
||||
#
|
||||
# Related "useful" packages (not dependencies)
|
||||
#
|
||||
|
||||
RUN pacman -Syu \
|
||||
calc \
|
||||
less \
|
||||
man-db \
|
||||
--noconfirm --disable-download-timeout
|
||||
|
||||
#
|
||||
# Entrypoint
|
||||
#
|
||||
|
||||
@@ -27,7 +27,7 @@ RUN sed -i 's/# %wheel ALL=(ALL:ALL) NOPASSWD: ALL/%wheel ALL=(ALL:ALL) NOPASSWD
|
||||
|
||||
USER builder
|
||||
WORKDIR /home/builder
|
||||
RUN git clone --depth=1 https://gitlab.archlinux.org/archlinux/packaging/packages/root -b 6.38.02-1
|
||||
RUN git clone --depth=1 https://gitlab.archlinux.org/archlinux/packaging/packages/root -b 6.38.04-1
|
||||
|
||||
WORKDIR /home/builder/root
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# docker-finance | modern accounting for the power-user
|
||||
#
|
||||
# Copyright (C) 2021-2024,2026 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# docker-finance @DOCKER_FINANCE_VERSION@
|
||||
|
||||
## This is a custom compose file that will be *merged* with the base compose file
|
||||
## See https://docs.docker.com/compose/how-tos/multiple-compose-files/merge/ for details
|
||||
|
||||
## An example of adding a custom volume and environment variables
|
||||
## NOTE: *MUST* also add these variables to the env file (`edit type=env`)
|
||||
#services:
|
||||
# docker-finance:
|
||||
# volumes:
|
||||
# - ${DOCKER_FINANCE_CLIENT_TESTING}:${DOCKER_FINANCE_CONTAINER_TESTING}
|
||||
# environment:
|
||||
# - DOCKER_FINANCE_CONTAINER_TESTING=${DOCKER_FINANCE_CONTAINER_TESTING}
|
||||
|
||||
# vim: sw=2 sts=2 si ai et
|
||||
@@ -36,11 +36,6 @@ RUN pacman -Syu --noconfirm
|
||||
## Optional (examples)
|
||||
##
|
||||
|
||||
## Finance-related
|
||||
#RUN pacman -Syu \
|
||||
# calc \
|
||||
# --noconfirm --disable-download-timeout
|
||||
|
||||
## Text editors
|
||||
#RUN pacman -Syu \
|
||||
# emacs-nox \
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# docker-finance | modern accounting for the power-user
|
||||
#
|
||||
# Copyright (C) 2021-2024,2026 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# docker-finance @DOCKER_FINANCE_VERSION@
|
||||
|
||||
## This is a custom compose file that will be *merged* with the base compose file
|
||||
## See https://docs.docker.com/compose/how-tos/multiple-compose-files/merge/ for details
|
||||
|
||||
## An example of adding a custom volume and environment variables
|
||||
## NOTE: *MUST* also add these variables to the env file (`edit type=env`)
|
||||
#services:
|
||||
# docker-finance:
|
||||
# volumes:
|
||||
# - ${DOCKER_FINANCE_CLIENT_TESTING}:${DOCKER_FINANCE_CONTAINER_TESTING}
|
||||
# environment:
|
||||
# - DOCKER_FINANCE_CONTAINER_TESTING=${DOCKER_FINANCE_CONTAINER_TESTING}
|
||||
|
||||
# vim: sw=2 sts=2 si ai et
|
||||
@@ -0,0 +1,32 @@
|
||||
# docker-finance | modern accounting for the power-user
|
||||
#
|
||||
# Copyright (C) 2021-2024,2026 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# docker-finance @DOCKER_FINANCE_VERSION@
|
||||
|
||||
## This is a custom compose file that will be *merged* with the base compose file
|
||||
## See https://docs.docker.com/compose/how-tos/multiple-compose-files/merge/ for details
|
||||
|
||||
## An example of adding a custom volume and environment variables
|
||||
## NOTE: *MUST* also add these variables to the env file (`edit type=env`)
|
||||
#services:
|
||||
# docker-finance:
|
||||
# volumes:
|
||||
# - ${DOCKER_FINANCE_CLIENT_TESTING}:${DOCKER_FINANCE_CONTAINER_TESTING}
|
||||
# environment:
|
||||
# - DOCKER_FINANCE_CONTAINER_TESTING=${DOCKER_FINANCE_CONTAINER_TESTING}
|
||||
|
||||
# vim: sw=2 sts=2 si ai et
|
||||
@@ -38,7 +38,6 @@ container:
|
||||
packages:
|
||||
- "bc"
|
||||
- "csvkit"
|
||||
- "less"
|
||||
- "vim"
|
||||
- "xan"
|
||||
- "yq"
|
||||
@@ -48,6 +47,12 @@ container:
|
||||
- "hledger-iadd --version"
|
||||
- "hledger-ui --version"
|
||||
- "hledger-web --version"
|
||||
related:
|
||||
packages:
|
||||
- "calc"
|
||||
- "less"
|
||||
- "man-db"
|
||||
commands:
|
||||
fetch:
|
||||
packages:
|
||||
- "composer"
|
||||
|
||||
@@ -66,6 +66,8 @@ function lib_docker::__docker()
|
||||
# Generate docker-compose.yml
|
||||
#
|
||||
|
||||
# NOTE: custom compose file merging happens at runtime
|
||||
|
||||
local _path="${global_repo_dockerfiles}/docker-compose.yml"
|
||||
lib_utils::print_debug "Generating '${_path}'"
|
||||
|
||||
@@ -83,12 +85,16 @@ function lib_docker::__docker_compose()
|
||||
{
|
||||
[ -z "$global_env_file" ] && lib_utils::die_fatal
|
||||
[ -z "$global_repo_dockerfiles" ] && lib_utils::die_fatal
|
||||
[ -z "$global_custom_composefile" ] && lib_utils::die_fatal
|
||||
|
||||
[ ! -f "$global_env_file" ] \
|
||||
&& lib_utils::die_fatal "$global_env_file not found! Run the gen command!"
|
||||
&& lib_utils::die_fatal "$global_env_file not found! Run the \`gen\` command!"
|
||||
|
||||
[ ! -f "$global_custom_composefile" ] \
|
||||
&& lib_utils::die_fatal "$global_custom_composefile not found! Run \`gen type${global_arg_delim_2}compose\`"
|
||||
|
||||
pushd "$global_repo_dockerfiles" 1>/dev/null || return $?
|
||||
docker compose -f docker-compose.yml --env-file "$global_env_file" "$@" || return $?
|
||||
docker compose -f docker-compose.yml -f "$global_custom_composefile" --env-file "$global_env_file" "$@" || return $?
|
||||
popd 1>/dev/null || return $?
|
||||
}
|
||||
|
||||
@@ -505,7 +511,7 @@ function lib_docker::__shell()
|
||||
[ -z "$global_container" ] && lib_utils::die_fatal
|
||||
lib_utils::print_debug "Spawning shell in container '${global_container}'"
|
||||
|
||||
docker exec -it --user "$global_arg_user" --workdir / "$global_container" /bin/bash
|
||||
docker exec -it --user "$global_arg_user" "$global_container" /bin/bash
|
||||
}
|
||||
|
||||
function lib_docker::__exec()
|
||||
@@ -546,7 +552,7 @@ function lib_docker::__parse_args_edit()
|
||||
|
||||
Configuration type:
|
||||
|
||||
type${global_arg_delim_2}<env|{shell|superscript}|{build|dockerfile}>
|
||||
type${global_arg_delim_2}<env | {shell | superscript} | {build | dockerfile} | compose>
|
||||
|
||||
\e[32mExamples:\e[0m
|
||||
|
||||
@@ -556,11 +562,11 @@ function lib_docker::__parse_args_edit()
|
||||
\e[37;2m# Edit client/container shell (superscript) \e[0m
|
||||
$ $global_usage type${global_arg_delim_2}shell
|
||||
|
||||
\e[37;2m# Edit client's custom Dockerfile (appended to final Dockerfile) \e[0m
|
||||
$ $global_usage type${global_arg_delim_2}build
|
||||
\e[37;2m# Edit client's custom Dockerfile (appended to final Dockerfile) and custom docker-compose.yml \e[0m
|
||||
$ $global_usage type${global_arg_delim_2}build${global_arg_delim_3}compose
|
||||
|
||||
\e[37;2m# Previous commands with alternate wordings\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}superscript${global_arg_delim_3}dockerfile${global_arg_delim_3}env
|
||||
$ $global_usage type${global_arg_delim_2}superscript${global_arg_delim_3}dockerfile${global_arg_delim_3}env${global_arg_delim_3}compose
|
||||
"
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
@@ -593,7 +599,7 @@ function lib_docker::__parse_args_edit()
|
||||
read -ra _read <<<"$_arg_type"
|
||||
|
||||
for _type in "${_read[@]}"; do
|
||||
if [[ ! "$_type" =~ ^env$|^shell$|^superscript$|^build$|^dockerfile$ ]]; then
|
||||
if [[ ! "$_type" =~ ^env$|^shell$|^superscript$|^build$|^dockerfile$|^compose$ ]]; then
|
||||
lib_utils::die_usage "$_usage"
|
||||
fi
|
||||
done
|
||||
@@ -638,6 +644,11 @@ function lib_docker::__edit()
|
||||
|
||||
_paths+=("$global_custom_dockerfile")
|
||||
;;
|
||||
compose)
|
||||
[ -z "$global_custom_composefile" ] && lib_utils::die_fatal
|
||||
|
||||
_paths+=("$global_custom_composefile")
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
@@ -208,6 +208,12 @@ function lib_env::__set_client_globals()
|
||||
&& lib_utils::die_fatal "Missing default custom Dockerfile '${global_repo_custom_dockerfile}'"
|
||||
lib_utils::print_debug "global_repo_custom_dockerfile=${global_repo_custom_dockerfile}"
|
||||
|
||||
# Base custom end-user .in docker-compose.yml
|
||||
declare -g global_repo_custom_composefile="${global_repo_conf_dir}/client/Dockerfiles/${global_platform_image}/docker-compose.yml.${global_platform}.in"
|
||||
[ ! -f "$global_repo_custom_composefile" ] \
|
||||
&& lib_utils::die_fatal "Missing default custom docker-compose.yml '${global_repo_custom_composefile}'"
|
||||
lib_utils::print_debug "global_repo_custom_composefile=${global_repo_custom_composefile}"
|
||||
|
||||
#
|
||||
# Client-side env
|
||||
#
|
||||
@@ -226,12 +232,18 @@ function lib_env::__set_client_globals()
|
||||
global_env_file="${_client_env_dir}/${global_conf_filename}"
|
||||
lib_utils::print_debug "global_env_file=${global_env_file}"
|
||||
|
||||
# Custom Dockerfile (if available)
|
||||
# Custom docker files (docker related) location
|
||||
local _client_dockerfile_dir="${DOCKER_FINANCE_CLIENT_CONF}/${global_tag_dir}/Dockerfiles"
|
||||
[ ! -d "$_client_dockerfile_dir" ] && mkdir -p "$_client_dockerfile_dir"
|
||||
|
||||
# Custom Dockerfile
|
||||
global_custom_dockerfile="${_client_dockerfile_dir}/${global_conf_filename}"
|
||||
lib_utils::print_debug "global_custom_dockerfile=${global_custom_dockerfile}"
|
||||
|
||||
# Custom docker-compose.yml
|
||||
global_custom_composefile="${_client_dockerfile_dir}/${global_conf_filename}.yml"
|
||||
lib_utils::print_debug "global_custom_composefile=${global_custom_composefile}"
|
||||
|
||||
# NOTE:
|
||||
#
|
||||
# Client env tag format is avoided because:
|
||||
|
||||
@@ -64,7 +64,7 @@ function lib_gen::__parse_args()
|
||||
|
||||
Category type:
|
||||
|
||||
type${global_arg_delim_2}<env | build | flow | superscript>
|
||||
type${global_arg_delim_2}<env | build | compose | flow | superscript>
|
||||
|
||||
Flow (only):
|
||||
|
||||
@@ -111,21 +111,21 @@ function lib_gen::__parse_args()
|
||||
\e[37;2m# Generate only the Docker environment\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}env
|
||||
|
||||
\e[37;2m# Generate custom Dockerfile and joint client/container superscript\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}build${global_arg_delim_3}superscript
|
||||
\e[37;2m# Generate custom Dockerfile, docker-compose.yml and joint client/container superscript\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}build${global_arg_delim_3}compose${global_arg_delim_3}superscript
|
||||
|
||||
\e[37;2m# Generate all client related data\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}env${global_arg_delim_3}build${global_arg_delim_3}superscript
|
||||
$ $global_usage type${global_arg_delim_2}env${global_arg_delim_3}build${global_arg_delim_3}compose${global_arg_delim_3}superscript
|
||||
|
||||
\e[37;2m#\e[0m
|
||||
\e[37;2m# Flow: Profile -> Configs / Accounts\e[0m
|
||||
\e[37;2m#\e[0m
|
||||
|
||||
\e[37;2m# Generate all client related and all flow related for profile/subprofile called 'parent/child'\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}env${global_arg_delim_3}build${global_arg_delim_3}superscript${global_arg_delim_3}flow profile${global_arg_delim_2}parent${global_arg_delim_1}child
|
||||
$ $global_usage type${global_arg_delim_2}env${global_arg_delim_3}build${global_arg_delim_3}compose${global_arg_delim_3}superscript${global_arg_delim_3}flow profile${global_arg_delim_2}parent${global_arg_delim_1}child
|
||||
|
||||
\e[37;2m# Same command as above but without confirmations and with developer mockups\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}env${global_arg_delim_3}build${global_arg_delim_3}superscript${global_arg_delim_3}flow profile${global_arg_delim_2}parent${global_arg_delim_1}child confirm${global_arg_delim_2}false dev${global_arg_delim_2}true
|
||||
$ $global_usage type${global_arg_delim_2}env${global_arg_delim_3}build${global_arg_delim_3}compose${global_arg_delim_3}superscript${global_arg_delim_3}flow profile${global_arg_delim_2}parent${global_arg_delim_1}child confirm${global_arg_delim_2}false dev${global_arg_delim_2}true
|
||||
|
||||
\e[37;2m# Generate only the given configurations for 'parent/child'\e[0m
|
||||
$ $global_usage type${global_arg_delim_2}flow profile${global_arg_delim_2}parent${global_arg_delim_1}child config${global_arg_delim_2}fetch${global_arg_delim_3}hledger${global_arg_delim_3}meta${global_arg_delim_3}subscript
|
||||
@@ -279,7 +279,7 @@ function lib_gen::__parse_args()
|
||||
if [ ! -z "$_arg_type" ]; then
|
||||
read -ra _read <<<"$_arg_type"
|
||||
for _arg in "${_read[@]}"; do
|
||||
if [[ ! "$_arg" =~ ^env$|^build$|^flow$|^superscript$ ]]; then
|
||||
if [[ ! "$_arg" =~ ^env$|^build$|^compose$|^flow$|^superscript$ ]]; then
|
||||
lib_utils::die_usage "$_usage"
|
||||
fi
|
||||
done
|
||||
@@ -440,6 +440,9 @@ function lib_gen::__gen_client()
|
||||
|
||||
fi
|
||||
|
||||
# Filter to de-clutter output file (license cleanup)
|
||||
local -r _filter="1,17d"
|
||||
|
||||
#
|
||||
# Custom (optional) Dockerfile
|
||||
#
|
||||
@@ -467,9 +470,6 @@ function lib_gen::__gen_client()
|
||||
lib_utils::print_debug "$global_custom_dockerfile"
|
||||
fi
|
||||
|
||||
# Filter to de-clutter output file (license cleanup)
|
||||
local -r _filter="1,17d"
|
||||
|
||||
sed \
|
||||
-e "$_filter" \
|
||||
-e "s:@DOCKER_FINANCE_VERSION@:${global_client_version}:g" \
|
||||
@@ -479,6 +479,42 @@ function lib_gen::__gen_client()
|
||||
lib_gen::__gen_edit "$global_custom_dockerfile"
|
||||
fi
|
||||
|
||||
#
|
||||
# Custom (optional) docker-compose.yml
|
||||
#
|
||||
|
||||
if [[ -z "${global_arg_type[*]}" || "${global_arg_type[*]}" =~ compose ]]; then
|
||||
|
||||
[ -z "$global_custom_composefile" ] && lib_utils::die_fatal
|
||||
[ -z "$global_repo_custom_composefile" ] && lib_utils::die_fatal
|
||||
|
||||
# Backup existing custom compose file
|
||||
if [ -f "$global_custom_composefile" ]; then
|
||||
lib_utils::print_custom " \e[32m│\e[0m\n"
|
||||
lib_utils::print_custom " \e[32m├─\e[34;1m Custom docker-compose.yml found, backup then generate new one? [Y/n] \e[0m"
|
||||
|
||||
[ -z "$global_arg_confirm" ] && lib_utils::print_custom "\n" || read -p "" _read
|
||||
local _confirm="${_read:-y}"
|
||||
if [[ "$_confirm" == [yY] || -z "$global_arg_confirm" ]]; then
|
||||
cp -a "$global_custom_composefile" "${global_custom_composefile}_${global_suffix}" || lib_utils::die_fatal
|
||||
fi
|
||||
else
|
||||
lib_utils::print_custom " \e[32m│\e[0m\n"
|
||||
lib_utils::print_custom " \e[32m├─\e[34;1m Generating new custom docker-compose.yml\e[0m\n"
|
||||
|
||||
lib_utils::print_debug "$global_repo_custom_composefile"
|
||||
lib_utils::print_debug "$global_custom_composefile"
|
||||
fi
|
||||
|
||||
sed \
|
||||
-e "$_filter" \
|
||||
-e "s:@DOCKER_FINANCE_VERSION@:${global_client_version}:g" \
|
||||
"$global_repo_custom_composefile" >"$global_custom_composefile" || lib_utils::die_fatal
|
||||
|
||||
lib_utils::print_custom " \e[32m│ └─\e[34m Edit file now? [Y/n] \e[0m"
|
||||
lib_gen::__gen_edit "$global_custom_composefile"
|
||||
fi
|
||||
|
||||
#
|
||||
# Generate client-side `plugins` layout (custom)
|
||||
#
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
// docker-finance | modern accounting for the power-user
|
||||
//
|
||||
// Copyright (C) 2021-2025 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||
// Copyright (C) 2021-2026 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
@@ -77,9 +77,11 @@ namespace dfi\blockchains
|
||||
$metadata->set_year($this->get_env()->get_env('API_FETCH_YEAR'));
|
||||
|
||||
// Reconstruct subaccount directory for out directory
|
||||
// API_OUT_DIR format: hledger-flow/profiles/parent_profile/child_profile/import/child_profile/account/subaccount/1-in/year
|
||||
// API_OUT_DIR format: flow/profiles/parent_profile/child_profile/import/child_profile/account/subaccount/1-in/year
|
||||
$path = explode('/', $this->get_env()->get_env('API_OUT_DIR'));
|
||||
$path = array_filter($path, function ($element) { return $element !== '';}); // Clear out extra / that get turned into nulls
|
||||
$path = array_filter($path, function ($element) {
|
||||
return $element !== '';
|
||||
}); // Clear out extra '/' that get turned into nulls
|
||||
$head_end = $path;
|
||||
$tail_end = $path;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# docker-finance | modern accounting for the power-user
|
||||
#
|
||||
# Copyright (C) 2021-2025 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||
# Copyright (C) 2021-2026 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -365,10 +365,16 @@ function lib_reports::__reports()
|
||||
"$_index" \
|
||||
""
|
||||
|
||||
lib_utils::print_custom "\n Now, open your browser to:\n"
|
||||
[ -z "$DOCKER_FINANCE_CLIENT_FLOW" ] && lib_utils::die_fatal
|
||||
local -r _client_out_dir="${DOCKER_FINANCE_CLIENT_FLOW}/profiles/${global_parent_profile}/${global_child_profile}/reports/${_year}"
|
||||
|
||||
[ -z "${DOCKER_FINANCE_CLIENT_FLOW}" ] && lib_utils::die_fatal
|
||||
lib_utils::print_custom "\n file://${DOCKER_FINANCE_CLIENT_FLOW}/profiles/${global_parent_profile}/${global_child_profile}/reports/${_year}/${_index}.html\n\n"
|
||||
lib_utils::print_custom "\n Reports are located:\n\n"
|
||||
|
||||
lib_utils::print_custom "\tclient (host): ${_client_out_dir}/\n\n"
|
||||
lib_utils::print_custom "\tcontainer: ${_out_dir}/\n"
|
||||
|
||||
lib_utils::print_custom "\n On your client (host), open your browser to:\n\n"
|
||||
lib_utils::print_custom "\tfile://${_client_out_dir}/${_index}.html\n\n"
|
||||
|
||||
lib_utils::print_info "Done!"
|
||||
}
|
||||
|
||||
@@ -1119,7 +1119,13 @@ function lib_taxes::__taxes_write()
|
||||
local -r _return=$?
|
||||
|
||||
if [ $_return -eq 0 ]; then
|
||||
lib_utils::print_custom "\n"
|
||||
[ -z "$DOCKER_FINANCE_CLIENT_FLOW" ] && lib_utils::die_fatal
|
||||
|
||||
lib_utils::print_custom "\n Taxes are located:\n\n"
|
||||
|
||||
lib_utils::print_custom "\tclient (host): ${DOCKER_FINANCE_CLIENT_FLOW}/profiles/${global_parent_profile}/${global_child_profile}/taxes/${global_arg_year}/\n\n"
|
||||
lib_utils::print_custom "\tcontainer: ${_tax_root_dir}/\n\n"
|
||||
|
||||
lib_utils::print_info "Done!"
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user