Skip to content

Commit

Permalink
Merge pull request #7 from torenware/factor-env-builder
Browse files Browse the repository at this point in the history
Factor env builder
  • Loading branch information
torenware authored Oct 12, 2022
2 parents 1a41bbf + 0a8a34b commit b79989b
Show file tree
Hide file tree
Showing 6 changed files with 166 additions and 86 deletions.
62 changes: 57 additions & 5 deletions install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,72 @@ pre_install_actions:
if ! ( ddev debug capabilities 2>/dev/null | grep multiple-dockerfiles >/dev/null 2>&1 ) ; then
echo "This add-on requires DDEV v1.19.3 or higher, please upgrade." && exit 2
fi
- |
#ddev-nodisplay
echo "pre-upgrade for older versions of add-on:"
if [ -f $HOME/.ddev/command/web/vite-serve ]; then
rm $HOME/.ddev/command/web/vite-serve
fi
for file in \
docker-compose.viteserve.yaml \
web-build/Dockerfile.ddev-viteserve \
viteserve/vite-test-listener \
viteserve/build-dotenv.sh \
commands/web/vite-serve; do
if [ -f $file ]; then
if ! grep "#ddev-generated" $file; then
echo "remove old style file $file"
rm $file
fi
fi
done
project_files:
- docker-compose.viteserve.yaml
- web-build/Dockerfile.ddev-viteserve
- viteserve/vite-test-listener
- viteserve/build-dotenv.sh
- viteserve/build-dotenv1.sh
- viteserve/build-dotenv2.sh
- viteserve/build-dotenv3.sh
- commands/web/vite-serve

post_install_actions:
- ddev exec .ddev/viteserve/build-dotenv1.sh
- ddev exec .ddev/viteserve/build-dotenv2.sh
- ddev exec .ddev/viteserve/build-dotenv3.sh

# global_files:
# - commands/web/vite-serve

# post_install_actions:
# - ddev exec .ddev/viteserve/build-dotenv.sh
# - |
# #ddev-nodisplay
# # cd .ddev
# if [ -f .allow-upgrade ]; then
# if grep ask .allow-upgrade >/dev/null ; then
# read replace
# if [ "$replace" = "y" ]; then
# echo "true" >.allow-upgrade
# else
# echo "false" >.allow-upgrade
# fi
# fi
# fi
# - |
# #ddev-nodisplay
# # cd .ddev
# if [ -f .allow-upgrade ]; then
# if grep "true" .allow-upgrade >/dev/null ; then
# if [ -f .env ]; then
# sed -i.bak '/^# start vite/,/^\# end vite/d;' .env
# cat .env-frag >>.env
# echo ".env updated to:"
# cat .env
# else
# cp .env-frag .env
# fi
# rm .env-frag
# fi
# fi

post_install_actions:
- ddev exec .ddev/viteserve/build-dotenv.sh


12 changes: 10 additions & 2 deletions tests/test.bats
Original file line number Diff line number Diff line change
Expand Up @@ -177,21 +177,29 @@ TYPE_UPDATE
rm .ddev/.env
fi

echo "# build default .env" >&3
ddev exec .ddev/viteserve/build-dotenv.sh -y >/dev/null
echo "# build done" >&3
cat .ddev/.env >&3
echo "# end of .env"
cmp -s .ddev/.env $TEST_FILES/all-vite.env || exit 1

# should not change file:
echo "# repeat build (should be idenpotent)" >&3
ddev exec .ddev/viteserve/build-dotenv.sh -y >/dev/null
cat .ddev/.env >&3
cmp -s .ddev/.env $TEST_FILES/all-vite.env || exit 1

cp $TEST_FILES/other.env .ddev/.env

echo "# build .env with merge" >&3
ddev exec .ddev/viteserve/build-dotenv.sh -y >/dev/null
cmp -s .ddev/.env $TEST_FILES/other-vite.env || exit 1
cat .ddev/.env >&3
cmp -l .ddev/.env $TEST_FILES/other-vite.env >&3 || exit 1

# should not change file
ddev exec .ddev/viteserve/build-dotenv.sh -y >/dev/null
cmp -s .ddev/.env $TEST_FILES/other-vite.env || exit 1
cmp -l .ddev/.env $TEST_FILES/other-vite.env >&3 || exit 1
}

@test "install from release" {
Expand Down
84 changes: 5 additions & 79 deletions viteserve/build-dotenv.sh
Original file line number Diff line number Diff line change
@@ -1,82 +1,8 @@
#! /usr/bin/env bash
#ddev-generated

y_flag=''

print_usage() {
printf "Usage: $0 [-y]"
}

while getopts 'y' flag; do
case "${flag}" in
y) y_flag='true' ;;
*)
print_usage
exit 1
;;
esac
done

# defaults
PROJ_DIR=frontend

# check for special cases
if [ "$DDEV_PROJECT_TYPE" = "laravel" ]; then
PROJ_DIR=.
fi

# @see https://stackoverflow.com/a/27650122/8600734
mapfile VITE_SETTINGS <<VITE
# start vite
VITE_PROJECT_DIR=$PROJ_DIR
VITE_PRIMARY_PORT=5173
VITE_SECONDARY_PORT=5273
# end vite
VITE

echo "New settings are:"
printf %s "${VITE_SETTINGS[@]}"
echo "--------------"
echo

cd .ddev

if [ -f "./.env" ]; then
if grep "^# start vite" .env >/dev/null; then
echo "Found vite settings in your .ddev/.env file."
if [ -z "$y_flag" ]; then
echo -n "Replace old settings (y/n)? "
read replace
else
replace=y
fi
if [ "$replace" == "y" ]; then
sed -i.bak '/^# start vite/,/^\# end vite/d;' .env
printf %s "${VITE_SETTINGS[@]}" >>.env
else
echo "Skipping changes to your .env file."
fi
else
echo "You have an existing .ddev/.env file."
if [ -z "$y_flag" ]; then
echo "May I append settings for this add-on to"
echo -n "your .env file (y/n)? "
read replace
else
replace=y
fi

if [ "$replace" == "y" ]; then
printf %s "${VITE_SETTINGS[@]}" >>.env
else
echo "Skipping changes to your .env file."
fi
fi
else
echo "Create a .ddev/.env file with your add-on settings:"
printf %s "${VITE_SETTINGS[@]}" >.env
fi
echo
echo "Your .ddev/.env file now contains:"
echo "----------------------------------"
cat .env
BASE_DIR=$(dirname $0)
echo "BASEDIR $BASE_DIR"
$BASE_DIR/build-dotenv1.sh "$@"
$BASE_DIR/build-dotenv2.sh
$BASE_DIR/build-dotenv3.sh
62 changes: 62 additions & 0 deletions viteserve/build-dotenv1.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#! /usr/bin/env bash
#ddev-generated

y_flag=''

print_usage() {
printf "Usage: $0 [-y]"
}

while getopts 'y' flag; do
case "${flag}" in
y) y_flag='true' ;;
*)
print_usage
exit 1
;;
esac
done

# defaults
PROJ_DIR=frontend

# check for special cases
if [ "$DDEV_PROJECT_TYPE" = "laravel" ]; then
PROJ_DIR=.
fi

# @see https://stackoverflow.com/a/27650122/8600734
mapfile VITE_SETTINGS <<VITE
# start vite
VITE_PROJECT_DIR=$PROJ_DIR
VITE_PRIMARY_PORT=5173
VITE_SECONDARY_PORT=5273
# end vite
VITE

echo
echo "New settings are:"
printf %s "${VITE_SETTINGS[@]}"
echo "--------------"
echo

cd .ddev
if [ -f .allow-upgrade ]; then
rm .allow-upgrade
fi
printf %s "${VITE_SETTINGS[@]}" >.env-frag

allow_upgrade=${y_flag}

if [ "$allow_upgrade" = "" ]; then
if [ ! -f "./.env" ]; then
allow_upgrade="true"
else
if grep "^# start vite" .env >/dev/null; then
echo "Found vite settings in your .ddev/.env file."
echo -n "Replace old settings (y/n)? "
allow_upgrade=ask
fi
fi
fi
echo $allow_upgrade >.allow-upgrade
13 changes: 13 additions & 0 deletions viteserve/build-dotenv2.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash
#ddev-generated
cd .ddev
if [ -f .allow-upgrade ]; then
if grep ask .allow-upgrade >/dev/null; then
read replace
if [ "$replace" = "y" ]; then
echo "true" >.allow-upgrade
else
echo "false" >.allow-upgrade
fi
fi
fi
19 changes: 19 additions & 0 deletions viteserve/build-dotenv3.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#! /usr/bin/env bash
#ddev-generated
cd .ddev
if [ -f .allow-upgrade ]; then
if grep "true" .allow-upgrade >/dev/null; then
if [ -f .env ]; then
sed -i.bak '/^# start vite/,/^\# end vite/d;' .env
# strip weird null characters from sed output.
tr <.env -d '\000' >.env-post-sed
cat .env-post-sed .env-frag >.env
echo ".env updated to:"
cat .env
rm .env-post-sed
else
cp .env-frag .env
fi
rm .env-frag
fi
fi

0 comments on commit b79989b

Please sign in to comment.