Skip to content
This repository was archived by the owner on Aug 16, 2025. It is now read-only.

Commit 868e3f7

Browse files
committed
Merge branch 'develop'
2 parents 0dfa3e7 + 7b879dc commit 868e3f7

91 files changed

Lines changed: 1160 additions & 470 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Supports multiple programming languages and frameworks.
2525

2626
== Key features
2727

28-
* Written in POSIX compliant Bash. Available on Linux, Windows and MacOS
28+
* Written in Bash. Available on Linux, Windows and MacOS
2929
* Create a new project, whether it's a full application or a library
3030
* Set up a project using locally installed tools (languages, package managers,...) or containers (Docker)
3131
* Containerized projects with zero dependencies on your locally installed tech stack
@@ -73,7 +73,7 @@ Configure ProjectInit.sh by running:
7373

7474
[source,shell]
7575
----
76-
sh configure.sh
76+
bash configure.sh
7777
----
7878

7979
== How to use
@@ -83,7 +83,7 @@ Go to ProjectInit's `bin` directory and simply run it:
8383
[source,shell]
8484
----
8585
cd bin
86-
sh projectinit.sh
86+
bash projectinit.sh
8787
----
8888

8989
== Supported project types (applications and libraries)

bin/projectinit.sh

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
#!/bin/bash
22

3-
set -e
3+
set -Eeuo pipefail
4+
trap 'echo "Error in $0 at line $LINENO: command \"$BASH_COMMAND\" exited with status $?"' ERR
5+
46
source ../src/git/git.sh
57
source ../src/filesystem/directory_management.sh
6-
source ../src/info_print.sh
8+
source ../src/projectinit_subsystem/info_print/info_print.sh
79
source ../src/language/flow.sh
810
source ../src/language/ask_flow.sh
9-
source ../src/tools/documentation/documentation.sh
11+
source ../src/projectinit_subsystem/documentation/documentation.sh
1012
source ../src/projectinit_subsystem/projectinit_cli/projectinit_cli.sh
1113

1214
cat << "EOF"

doc/dev/globals.adoc

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
== ProjectInit
66

7-
87
|===
98
|variable |type |description
109

@@ -24,17 +23,31 @@
2423
|string value
2524
|Project name. Used throughout the project configuration for various purposes (example: Docker Compose service names)
2625

27-
|`projectinit_tools_count`
28-
|integer
29-
|The number of additional tools configured for the project (example: memcached, redis,...)
30-
3126
|`projectinit_generate_id_card_text`
3227
|0/1 flag
3328
|Flag to determine whether to generate the text version of the Project ID card (`projectinit_id_card.txt`) in project's
3429
root directory.
3530

3631
|===
3732

33+
=== ProjectInit Integrations subsystem
34+
35+
|===
36+
|variable |type |description
37+
38+
|`projectinit_tools_list`
39+
|array (strings)
40+
|List of tools to be integrated into the project. Example: `memcached`
41+
42+
|`projectinit_main_app_dependencies_list`
43+
|array (strings)
44+
|List of main application dependencies (service names). Example: `sample_project_memcached`
45+
46+
|`projectinit_libraries_list`
47+
|array (strings)
48+
|List of libraries to be integrated into the project. Example: `phpunit`
49+
|===
50+
3851
== Git
3952

4053
|===
@@ -72,10 +85,6 @@ root directory.
7285
|===
7386
|variable |type |description
7487

75-
|`projectinit_docker_service_dependencies`
76-
|integer
77-
|The number of dependency services for your app service. If it's 0, dependencies block is removed from `compose.yaml`
78-
7988
|`projectinit_language_version`
8089
|string
8190
|Version of the base language or technology (PHP, Node,...)
@@ -153,7 +162,7 @@ contains your application
153162

154163
|`projectinit_composer_library_name`
155164
|string value
156-
|Composer library name. Format: `<your_brand>/<your_livrary_name>`
165+
|Composer library name. Format: `<your_brand>/<your_livrary_name>`. Used when creating a new Composer library project.
157166

158167
|===
159168
==== Symfony
@@ -246,14 +255,6 @@ contains your application
246255
|===
247256
|variable |type |description
248257

249-
|`projectinit_use_memcached`
250-
|0/1 flag
251-
|Whether Memcached is used in the project or not.
252-
253-
|`projectinit_memcached_service_name`
254-
|string value
255-
|Autogenerated from `projectinit_project_name` by adding `_memcached` suffix. Memcached service name in Docker compose
256-
257258
|`projectinit_memcached_version`
258259
|string value
259260
|Memcached Docker image version

src/container/docker/dev.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
build_dev() {
44
echo ""
55
echo "Performing configuration cleanup..."
6-
cleanup_before_build
6+
cleanup_dev_docker_compose
77
echo "Configuration ready..."
88
if [ "${projectinit_build_containers}" -eq 1 ]; then
99
echo ""
@@ -14,7 +14,7 @@ build_dev() {
1414
fi
1515
}
1616

17-
cleanup_before_build() {
17+
cleanup_dev_docker_compose() {
1818
if [ "${projectinit_compose_has_root_volumes}" = 1 ]; then
1919
perl -pi -e "s/~~~root volumes~~~/volumes:/g" "${project_root_dir}/compose.yaml"
2020
else

src/container/docker/docker.sh

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,26 @@ ask_base_service_properties() {
1515
read -r -e projectinit_app_host_port
1616
}
1717

18-
calculate_app_service_dependencies() {
19-
projectinit_docker_service_dependencies=0
20-
if [ ! "${projectinit_database_type}" = "no database" ]; then
21-
projectinit_docker_service_dependencies=$((projectinit_docker_service_dependencies + 1))
18+
cleanup_docker_compose() {
19+
local target_file="$1"
20+
21+
if [ "${projectinit_compose_has_secrets}" -eq 1 ]; then
22+
perl -pi -e "s/~~~secrets~~~/secrets:/g" "${target_file}"
23+
else
24+
perl -i -ne 'print unless /~~~secrets~~~/;' "${target_file}"
2225
fi
23-
if [ "${projectinit_use_memcached}" -eq 1 ]; then
24-
projectinit_docker_service_dependencies=$((projectinit_docker_service_dependencies + 1))
26+
27+
if [[ ! -v projectinit_main_app_dependencies_list ]]; then
28+
perl -i -ne 'print unless /~~~main application dependencies~~~/;' "${target_file}"
29+
else
30+
perl -pi -e "s/~~~main application dependencies~~~/depends_on:/g" "${target_file}"
2531
fi
32+
33+
if [ "${projectinit_compose_has_root_volumes}" = 1 ]; then
34+
perl -pi -e "s/~~~root volumes~~~/volumes:/g" "${target_file}"
35+
else
36+
perl -i -ne 'print unless /~~~root volumes~~~/;' "${target_file}"
37+
fi
38+
39+
perl -i -ne 'print unless /~~~container services~~~/;' "${target_file}"
2640
}

src/database/ask_database.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
ask_database_engine() {
44
echo ""
55
echo "Database engine:"
6-
local options=("no database" "PostgreSQL" "MySQL" "Percona" "MariaDB")
6+
local options=("no database" "PostgreSQL" "MySQL" "Percona" "MariaDB" "MongoDB")
77
local option
88
select option in "${options[@]}"; do
99
case $option in
@@ -12,28 +12,39 @@ ask_database_engine() {
1212
break;;
1313
"PostgreSQL" )
1414
projectinit_database_type="pgsql"
15+
projectinit_main_app_dependencies_list+=( "${projectinit_project_name}_database" )
1516
# shellcheck source=./pgsql/ask_pgsql.sh
1617
source "${tool_dir}/src/database/pgsql/ask_pgsql.sh"
1718
ask_pgsql_config
1819
break;;
1920
"MySQL" )
2021
projectinit_database_type="mysql"
22+
projectinit_main_app_dependencies_list+=( "${projectinit_project_name}_database" )
2123
# shellcheck source=./mysql/ask_mysql.sh
2224
source "${tool_dir}/src/database/mysql/ask_mysql.sh"
2325
ask_mysql_config
2426
break;;
2527
"Percona" )
2628
projectinit_database_type="percona"
29+
projectinit_main_app_dependencies_list+=( "${projectinit_project_name}_database" )
2730
# shellcheck source=./percona/ask_percona.sh
2831
source "${tool_dir}/src/database/percona/ask_percona.sh"
2932
ask_percona_config
3033
break;;
3134
"MariaDB" )
3235
projectinit_database_type="mariadb"
36+
projectinit_main_app_dependencies_list+=( "${projectinit_project_name}_database" )
3337
# shellcheck source=./mariadb/ask_mariadb.sh
3438
source "${tool_dir}/src/database/mariadb/ask_mariadb.sh"
3539
ask_mariadb_config
3640
break;;
41+
"MongoDB" )
42+
projectinit_database_type="mongodb"
43+
projectinit_main_app_dependencies_list+=( "${projectinit_project_name}_database" )
44+
# shellcheck source=./mongodb/ask_mongodb.sh
45+
source "${tool_dir}/src/database/mongodb/ask_mongodb.sh"
46+
ask_mongodb_config
47+
break;;
3748
esac
3849
done
3950
}

src/database/database_flow.sh

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ setup_database_docker_compose_dev() {
88
;;
99
"pgsql" )
1010
projectinit_compose_has_root_volumes=1
11-
# shellcheck source=pgsql/container/docker/v1/pqsql.sh
11+
projectinit_compose_has_secrets=1
12+
# shellcheck source=./pgsql/container/docker/v1/pqsql.sh
1213
source "${tool_dir}/src/database/pgsql/container/docker/v1/pqsql.sh"
1314
setup_pgsql_docker_compose_dev
1415
setup_pgsql_dev_dockerfile
1516
;;
1617
"mysql" )
1718
projectinit_compose_has_root_volumes=1
1819
projectinit_compose_has_secrets=1
19-
# shellcheck source=mysql/container/docker/v1/mysql.sh
20+
# shellcheck source=./mysql/container/docker/v1/mysql.sh
2021
source "${tool_dir}/src/database/mysql/container/docker/v1/mysql.sh"
2122
setup_mysql_docker_compose_dev
2223
setup_mysql_my_cnf_dev
@@ -26,7 +27,7 @@ setup_database_docker_compose_dev() {
2627
"percona" )
2728
projectinit_compose_has_root_volumes=1
2829
projectinit_compose_has_secrets=1
29-
# shellcheck source=percona/container/docker/v1/percona.sh
30+
# shellcheck source=./percona/container/docker/v1/percona.sh
3031
source "${tool_dir}/src/database/percona/container/docker/v1/percona.sh"
3132
setup_percona_docker_compose_dev
3233
setup_percona_my_cnf_dev
@@ -36,13 +37,22 @@ setup_database_docker_compose_dev() {
3637
"mariadb" )
3738
projectinit_compose_has_root_volumes=1
3839
projectinit_compose_has_secrets=1
39-
# shellcheck source=mariadb/container/docker/v1/mariadb.sh
40+
# shellcheck source=./mariadb/container/docker/v1/mariadb.sh
4041
source "${tool_dir}/src/database/mariadb/container/docker/v1/mariadb.sh"
4142
setup_mariadb_docker_compose_dev
4243
setup_mariadb_my_cnf_dev
4344
setup_mariadb_dev_entrypoint
4445
setup_mariadb_dev_dockerfile
4546
;;
47+
"mongodb" )
48+
projectinit_compose_has_root_volumes=1
49+
projectinit_compose_has_secrets=1
50+
# shellcheck source=./mongodb/container/docker/v1/mongodb.sh
51+
source "${tool_dir}/src/database/mongodb/container/docker/v1/mongodb.sh"
52+
setup_mongodb_docker_compose_dev
53+
setup_mongodb_config_dev
54+
setup_mongodb_dev_entrypoint
55+
setup_mongodb_dev_dockerfile
4656
esac
4757

4858
if [ ! "${projectinit_database_type}" = "no database" ]; then
@@ -57,42 +67,60 @@ setup_database_docker_compose_prod() {
5767
perl -i -ne 'print unless /~~~database creation and migration~~~/;' "${project_root_dir}/projectinit_docker/prod/start.sh"
5868
;;
5969
"pgsql" )
60-
# shellcheck source=pgsql/container/docker/v1/pqsql.sh
70+
# shellcheck source=./pgsql/container/docker/v1/pqsql.sh
6171
source "${tool_dir}/src/database/pgsql/container/docker/v1/pqsql.sh"
6272
setup_pgsql_docker_compose_prod
6373
setup_pgsql_prod_dockerfile
6474
;;
6575
"mysql" )
66-
# shellcheck source=mysql/container/docker/v1/mysql.sh
76+
# shellcheck source=./mysql/container/docker/v1/mysql.sh
6777
source "${tool_dir}/src/database/mysql/container/docker/v1/mysql.sh"
6878
setup_mysql_docker_compose_prod
6979
setup_mysql_my_cnf_prod
7080
setup_mysql_prod_entrypoint
7181
setup_mysql_prod_dockerfile
7282
;;
7383
"percona" )
74-
# shellcheck source=percona/container/docker/v1/percona.sh
84+
# shellcheck source=./percona/container/docker/v1/percona.sh
7585
source "${tool_dir}/src/database/percona/container/docker/v1/percona.sh"
7686
setup_percona_docker_compose_prod
7787
setup_percona_my_cnf_prod
7888
setup_percona_prod_entrypoint
7989
setup_percona_prod_dockerfile
8090
;;
8191
"mariadb" )
82-
# shellcheck source=mariadb/container/docker/v1/mariadb.sh
92+
# shellcheck source=./mariadb/container/docker/v1/mariadb.sh
8393
source "${tool_dir}/src/database/mariadb/container/docker/v1/mariadb.sh"
8494
setup_mariadb_docker_compose_prod
8595
setup_mariadb_my_cnf_prod
8696
setup_mariadb_prod_entrypoint
8797
setup_mariadb_prod_dockerfile
8898
;;
99+
"mongodb" )
100+
# shellcheck source=./mongodb/container/docker/v1/mongodb.sh
101+
source "${tool_dir}/src/database/mongodb/container/docker/v1/mongodb.sh"
102+
setup_mongodb_docker_compose_prod
103+
setup_mongodb_config_prod
104+
setup_mongodb_prod_entrypoint
105+
setup_mongodb_prod_dockerfile
89106
esac
90107

91108
if [ ! "${projectinit_database_type}" = "no database" ]; then
92109
perl -pi -e "s/(.*~~~main application dependencies~~~.*)/\1\n ${projectinit_database_service_name}:\n condition: service_healthy/" "${project_root_dir}/projectinit_docker/prod/compose.yaml"
93110
fi
94111
}
95112

113+
setup_database_dockerfile_installer() {
114+
local target_file
115+
target_file="${project_root_dir}/Dockerfile"
116+
117+
case "${projectinit_database_type}" in
118+
"mongodb" )
119+
perl -pi -e "s/(.*~~~php extension~~~.*)/\1\n mongodb \\\\/g" "${target_file}"
120+
;;
121+
esac
122+
}
123+
96124
setup_database_dockerfile_dev() {
97125
local target_file
98126
target_file="${project_root_dir}/Dockerfile"
@@ -110,6 +138,9 @@ setup_database_dockerfile_dev() {
110138
"mariadb" )
111139
perl -pi -e "s/(.*~~~php extension~~~.*)/\1\n pdo_mysql \\\\/g" "${target_file}"
112140
;;
141+
"mongodb" )
142+
perl -pi -e "s/(.*~~~php extension~~~.*)/\1\n mongodb \\\\/g" "${target_file}"
143+
;;
113144
esac
114145
}
115146

@@ -130,5 +161,8 @@ setup_database_dockerfile_prod() {
130161
"mariadb" )
131162
perl -pi -e "s/(.*~~~php extension~~~.*)/\1\n pdo_mysql \\\\/g" "${target_file}"
132163
;;
164+
"mongodb" )
165+
perl -pi -e "s/(.*~~~php extension~~~.*)/\1\n mongodb \\\\/g" "${target_file}"
166+
;;
133167
esac
134168
}

src/database/mariadb/container/docker/v1/mariadb.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ setup_mariadb_docker_compose_dev() {
2525
mkdir -p "${project_root_dir}/projectinit_docker/dev/mariadb/docker-entrypoint-initdb.d"
2626
fi
2727

28-
perl -pi -e "s/~~~compose secrets~~~/$(<"${tool_dir}/src/database/mariadb/container/docker/v1/template/secrets" perl -pe 's/([\/\& \t])/\\$1/g')/g" "${target_file}"
28+
perl -pi -e "s/~~~secrets~~~/$(<"${tool_dir}/src/database/mariadb/container/docker/v1/template/secrets" perl -pe 's/([\/\& \t])/\\$1/g')/g" "${target_file}"
2929
}
3030

3131
setup_mariadb_docker_compose_prod() {
3232
local target_file
3333
target_file="${project_root_dir}/projectinit_docker/prod/compose.yaml"
3434
if [ ! -d "${project_root_dir}/projectinit_docker/prod" ]; then
35-
mkdir "${project_root_dir}/projectinit_docker/prod"
35+
mkdir -p "${project_root_dir}/projectinit_docker/prod"
3636
fi
3737

3838
perl -pi -e "s/~~~database service~~~/$(<"${tool_dir}/src/database/mariadb/container/docker/v1/template/prod" perl -pe 's/([\/\& \t])/\\$1/g')/g" "${target_file}"
@@ -46,7 +46,7 @@ setup_mariadb_docker_compose_prod() {
4646
mkdir -p "${project_root_dir}/projectinit_docker/prod/mariadb/docker-entrypoint-initdb.d"
4747
fi
4848

49-
perl -pi -e "s/~~~compose secrets~~~/$(<"${tool_dir}/src/database/mariadb/container/docker/v1/template/secrets" perl -pe 's/([\/\& \t])/\\$1/g')/g" "${target_file}"
49+
perl -pi -e "s/~~~secrets~~~/$(<"${tool_dir}/src/database/mariadb/container/docker/v1/template/secrets" perl -pe 's/([\/\& \t])/\\$1/g')/g" "${target_file}"
5050
}
5151

5252
setup_mariadb_dev_dockerfile() {

src/database/mariadb/container/docker/v1/template/dockerfile/dev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ FROM mariadb:~~~database server version~~~
33
ENV MARIADB_MYSQL_LOCALHOST_USER=1
44

55
COPY --chown=mysql:mysql --chmod=644 ./projectinit_docker/dev/mariadb/etc/mysql/conf.d/*.cnf /etc/mysql/conf.d/
6-
COPY --chown=mysql:mysql ./projectinit_docker/dev/mariadb/entrypoint.sh /entrypoint.sh
6+
COPY --chown=mysql:mysql --chmod=544 ./projectinit_docker/dev/mariadb/entrypoint.sh /entrypoint.sh
77

88
HEALTHCHECK --timeout=10s --start-period=1m \
99
CMD healthcheck.sh --connect --innodb_initialized

0 commit comments

Comments
 (0)