From 3efb432858ed8fdb9596d2a47283c1c93f990a7b Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Thu, 2 Dec 2021 16:30:41 +0100 Subject: [PATCH 01/13] [UPT] docker-compose.xml, docker_start.sh docker-compose.xml: add db volumes, docker_start.sh: add -d --delete parameter for deleting project --- docker-compose.yml | 2 ++ docker_start.sh | 40 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 7094312..15be1e7 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,8 @@ services: - POSTGRES_PASSWORD=odoo - POSTGRES_USER=odoo - PGDATA=/var/lib/postgresql/data/pgdata + volumes: + - ${PROJECT_LOCATION}/psql:/var/lib/postgresql/data/pgdata smtp4dev: image: rnwood/smtp4dev:latest container_name: ${SMTP_CONT_NAME} diff --git a/docker_start.sh b/docker_start.sh index 8e07a34..edd5c59 100755 --- a/docker_start.sh +++ b/docker_start.sh @@ -64,8 +64,32 @@ clone_enterprise() { fi } +delete_project() { + echo "DELETING PROJECT" + # stop containers + echo "stoping containers" + docker container stop "${PROJECT_NAME}-web" "${PROJECT_NAME}-db" "${PROJECT_NAME}-smtp" + # save id's of volumes + VOLUMES="$(docker inspect -f "{{range .Mounts}}{{.Name}}{{end}}" ${PROJECT_NAME}-db ${PROJECT_NAME}-web ${PROJECT_NAME}-smtp)" + # remove containers + echo "deleting containers" + docker container rm "${PROJECT_NAME}-web" "${PROJECT_NAME}-db" "${PROJECT_NAME}-smtp" + # remove volumes + echo "deleting volumes" + for i in "${VOLUMES}"; do + docker volume rm $i + done + sudo rm -r ${PROJECT_FULLPATH} + +} + project_exist() { - echo "PROJECT EXIST" + if [ ! -z "${DELETE}" ]; then + delete_project + exit 1 + else + echo "PROJECT EXIST" + fi } create_project() { @@ -94,7 +118,10 @@ create_project_directiories() { check_project() { PROJECT_FULLPATH="$PROJECTS_DIR""$PROJECT_NAME" if [ -d "${PROJECT_FULLPATH}" ]; then - echo "Project Exist" + project_exist + elif [ ! -z "${DELETE}" ]; then + echo "PROJECT DESN'T EXIST" + exit 1 else create_project_directiories create_project @@ -169,7 +196,8 @@ display_help() { echo " -p, --psql (N) Set version of postgreSQL " echo " -a, --addons (N) Set addons repository HTTPS url" echo " -b, --branch (N) Set addons repository branch" - echo " -e, --enterprise Set for install enterprise modules " + echo " -e, --enterprise Set for install enterprise modules" + echo " -d, --delete Delete project if exist" echo # echo some stuff here for the -a or --add-options @@ -180,7 +208,7 @@ display_help() { # Process the input options. Add options as needed. # ############################################################ -PARSED_ARGS=$(getopt -a -o n:o:p:a:b:eh -l name:,odoo:,psql:,addons:,branch:,enterprise,help -- "$@") +PARSED_ARGS=$(getopt -a -o n:o:p:a:b:edh -l name:,odoo:,psql:,addons:,branch:,enterprise,delete,help -- "$@") VALID_ARGS=$? if [ "$VALID_ARGS" != "0" ]; then display_help @@ -213,6 +241,10 @@ while :; do INSTALL_ENTERPRISE_MODULES='T' shift ;; + -d | --delete) + DELETE='T' + shift + ;; -h | --help) display_help shift From a2094ce902d5a9f6059b4495f9e545699f462e69 Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Mon, 6 Dec 2021 12:37:27 +0100 Subject: [PATCH 02/13] [UPT] entrypoint.sh, docker-compose.yml, odoo.conf -- fix requirements.txt path in entrypoint.sh -- fix entrypoint.sh mount -- add smtp hostname to docker-compose.yml and odoo.conf --- config/odoo.conf | 2 +- docker-compose.yml | 3 ++- entrypoint.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/config/odoo.conf b/config/odoo.conf index 6928939..7ba6aa6 100644 --- a/config/odoo.conf +++ b/config/odoo.conf @@ -45,7 +45,7 @@ data_dir = /var/lib/odoo ; server_wide_modules = base,web smtp_password = False smtp_port = 25 -smtp_server = localhost +smtp_server = smtp4dev_odoo smtp_ssl = False smtp_user = False ; syslog = False diff --git a/docker-compose.yml b/docker-compose.yml index 15be1e7..dfbee2b 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: - "8069:8069" tty: true volumes: - # - ${PROJECT_LOCATION}:/entrypoint.sh + - ${PROJECT_LOCATION}/entrypoint.sh:/entrypoint.sh - ${PROJECT_LOCATION}/config:/etc/odoo - ${PROJECT_LOCATION}/addons:/mnt/extra-addons - ${PROJECT_LOCATION}/enterprise:/mnt/enterprise @@ -32,4 +32,5 @@ services: - "5080:80" - "25:25" - "143:143" + hostname: smtp4dev_odoo restart: always diff --git a/entrypoint.sh b/entrypoint.sh index 7f9125d..edb7170 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -11,7 +11,7 @@ set -e # install python packages pip3 install pip --upgrade -pip3 install -r /etc/odoo/requirements.txt +pip3 install -r /mnt/extra-addons/requirements.txt # sed -i 's|raise werkzeug.exceptions.BadRequest(msg)|self.jsonrequest = {}|g' /usr/lib/python3/dist-packages/odoo/http.py From d018e5b44de60bcbb0bae059cebc27b389c9fe24 Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Mon, 6 Dec 2021 16:17:36 +0100 Subject: [PATCH 03/13] [UPT] entrypoint.sh -- change entrypoint.sh to install requirements only if file requirements.txt exist --- entrypoint.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/entrypoint.sh b/entrypoint.sh index edb7170..be683ac 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -11,7 +11,9 @@ set -e # install python packages pip3 install pip --upgrade -pip3 install -r /mnt/extra-addons/requirements.txt +if [[ -f "/mnt/extra-addons/requirements.txt" ]]; then + pip3 install -r /mnt/extra-addons/requirements.txt +fi # sed -i 's|raise werkzeug.exceptions.BadRequest(msg)|self.jsonrequest = {}|g' /usr/lib/python3/dist-packages/odoo/http.py From 37a0693c74c4bce3f1cc7abff861cf66696313f0 Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Tue, 14 Dec 2021 10:51:13 +0100 Subject: [PATCH 04/13] [UPT] docker-compose.xml -- Update delete_project function -- Create project_start function --- docker_start.sh | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/docker_start.sh b/docker_start.sh index edd5c59..243f9e7 100755 --- a/docker_start.sh +++ b/docker_start.sh @@ -65,30 +65,37 @@ clone_enterprise() { } delete_project() { - echo "DELETING PROJECT" - # stop containers - echo "stoping containers" - docker container stop "${PROJECT_NAME}-web" "${PROJECT_NAME}-db" "${PROJECT_NAME}-smtp" - # save id's of volumes - VOLUMES="$(docker inspect -f "{{range .Mounts}}{{.Name}}{{end}}" ${PROJECT_NAME}-db ${PROJECT_NAME}-web ${PROJECT_NAME}-smtp)" - # remove containers - echo "deleting containers" - docker container rm "${PROJECT_NAME}-web" "${PROJECT_NAME}-db" "${PROJECT_NAME}-smtp" - # remove volumes - echo "deleting volumes" - for i in "${VOLUMES}"; do - docker volume rm $i - done + echo "DELETING PROJECT AND VOLUMES" + (cd $PROJECT_FULLPATH; docker-compose down -v) + echo "DELETING PROJECT DIRECTORY" sudo rm -r ${PROJECT_FULLPATH} } +project_start() { + # Find project in running containers and start or restart + RUNNING_CONTAINERS="$(docker ps)" + # echo "$RUNNING_CONTAINERS" | wc -l + if [[ $RUNNING_CONTAINERS == *"$PROJECT_NAME"* ]]; then + echo "RESTARTING $PROJECT_NAME" + (cd $PROJECT_FULLPATH; docker-compose restart) + else + echo "UPDATE GIT REPO" + git -C "${PROJECT_FULLPATH}/addons" stash + git -C "${PROJECT_FULLPATH}/addons" pull + git -C "${PROJECT_FULLPATH}/addons" stash pop + echo "STARTING $PROJECT_NAME" + (cd $PROJECT_FULLPATH; docker-compose start) + fi + +} + project_exist() { if [ ! -z "${DELETE}" ]; then delete_project exit 1 else - echo "PROJECT EXIST" + project_start fi } From 6dba3155607a04d4ea8cf324d840b486ea298062 Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Mon, 6 Dec 2021 12:37:27 +0100 Subject: [PATCH 05/13] [UPT] entrypoint.sh, docker-compose.yml, odoo.conf -- fix requirements.txt path in entrypoint.sh -- fix entrypoint.sh mount -- add smtp hostname to docker-compose.yml and odoo.conf --- entrypoint.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/entrypoint.sh b/entrypoint.sh index be683ac..2bf2819 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -14,6 +14,7 @@ pip3 install pip --upgrade if [[ -f "/mnt/extra-addons/requirements.txt" ]]; then pip3 install -r /mnt/extra-addons/requirements.txt fi +pip3 install -r /mnt/extra-addons/requirements.txt # sed -i 's|raise werkzeug.exceptions.BadRequest(msg)|self.jsonrequest = {}|g' /usr/lib/python3/dist-packages/odoo/http.py From 9614cf4abbe82f3686a24335f025e47884364193 Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Mon, 6 Dec 2021 16:17:36 +0100 Subject: [PATCH 06/13] [UPT] entrypoint.sh -- change entrypoint.sh to install requirements only if file requirements.txt exist --- entrypoint.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/entrypoint.sh b/entrypoint.sh index 2bf2819..be683ac 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -14,7 +14,6 @@ pip3 install pip --upgrade if [[ -f "/mnt/extra-addons/requirements.txt" ]]; then pip3 install -r /mnt/extra-addons/requirements.txt fi -pip3 install -r /mnt/extra-addons/requirements.txt # sed -i 's|raise werkzeug.exceptions.BadRequest(msg)|self.jsonrequest = {}|g' /usr/lib/python3/dist-packages/odoo/http.py From 2dedd92c25b3e51037caa8228d24402a165ce934 Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Tue, 1 Feb 2022 10:30:13 +0100 Subject: [PATCH 07/13] Add settings for debugging odoo in vscode --Add installation of debugpy in entrypoint.sh --Add creation of .vscode/launch.json config to project in docker_start.py --Add in docker-compose.yml expose port 5858 for debuger and create command to run odoo witch debuger --- docker-compose.yml | 4 ++++ docker_start.sh | 3 ++- entrypoint.sh | 3 +++ launch.json | 20 ++++++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 launch.json diff --git a/docker-compose.yml b/docker-compose.yml index dfbee2b..302885e 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,8 +6,12 @@ services: depends_on: - db - smtp4dev + expose: + - "5858" ports: - "8069:8069" + - "5858:5858" + command: /usr/bin/python3 -m debugpy --listen 0.0.0.0:5858 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo tty: true volumes: - ${PROJECT_LOCATION}/entrypoint.sh:/entrypoint.sh diff --git a/docker_start.sh b/docker_start.sh index 243f9e7..5d2a427 100755 --- a/docker_start.sh +++ b/docker_start.sh @@ -87,7 +87,6 @@ project_start() { echo "STARTING $PROJECT_NAME" (cd $PROJECT_FULLPATH; docker-compose start) fi - } project_exist() { @@ -104,6 +103,7 @@ create_project() { cp -r ./config/* "${PROJECT_FULLPATH}/config/" cp -r ./docker-compose.yml "${PROJECT_FULLPATH}/" cp -r ./entrypoint.sh "${PROJECT_FULLPATH}/" + cp -r ./launch.json "${PROJECT_FULLPATH}/.vscode/" clone_addons if [ ! -z "${INSTALL_ENTERPRISE_MODULES}" ]; then clone_enterprise @@ -120,6 +120,7 @@ create_project_directiories() { mkdir -p "$PROJECT_FULLPATH/addons" mkdir -p "$PROJECT_FULLPATH/enterprise" mkdir -p "$PROJECT_FULLPATH/config" + mkdir -p "${PROJECT_FULLPATH}/.vscode" } check_project() { diff --git a/entrypoint.sh b/entrypoint.sh index be683ac..d96d445 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -15,6 +15,9 @@ if [[ -f "/mnt/extra-addons/requirements.txt" ]]; then pip3 install -r /mnt/extra-addons/requirements.txt fi +# install debugpy package for debugging +pip3 install debugpy + # sed -i 's|raise werkzeug.exceptions.BadRequest(msg)|self.jsonrequest = {}|g' /usr/lib/python3/dist-packages/odoo/http.py DB_ARGS=() diff --git a/launch.json b/launch.json new file mode 100644 index 0000000..fa4d20d --- /dev/null +++ b/launch.json @@ -0,0 +1,20 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Odoo", + "type": "python", + "request": "attach", + "port": 8069, + "debugServer": 5858, + "host": "localhost", + "pathMappings": [ + { + "localRoot": "${workspaceFolder}/addons", + "remoteRoot": "/mnt/extra-addons" + } + ], + "logToFile": true + } + ] +} \ No newline at end of file From b094f43a8fc022e563a51eb79e6299a9030bccbd Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Thu, 12 May 2022 11:05:05 +0200 Subject: [PATCH 08/13] [UPDATE] docker_start.sh * Add run_unit_tests function. * Add parameters for running tests -t, -m/--module, --db --- docker-compose.yml | 2 +- docker_start.sh | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 302885e..bac8d44 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: ports: - "8069:8069" - "5858:5858" - command: /usr/bin/python3 -m debugpy --listen 0.0.0.0:5858 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo + command: /usr/bin/python3 -m debugpy --listen 0.0.0.0:5858 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo -c /etc/odoo/odoo.conf tty: true volumes: - ${PROJECT_LOCATION}/entrypoint.sh:/entrypoint.sh diff --git a/docker_start.sh b/docker_start.sh index 5d2a427..44789ec 100755 --- a/docker_start.sh +++ b/docker_start.sh @@ -89,10 +89,29 @@ project_start() { fi } +run_unit_tests(){ + if [ -z TEST_DB ] || [ "$TEST_DB" == "" ]; then + echo "You need to specify database to run tests on. Use --db." + display_help + fi + if [ -v TEST_MODULE ]; then + echo "START ODOO UNIT TESTS ON ($TEST_DB) DB FOR ($TEST_MODULE) MODULE" + (cd $PROJECT_FULLPATH; docker-compose run --rm web --test-enable --log-level=test --stop-after-init -d ${TEST_DB} -i ${TEST_MODULE}) + elif [ -v TEST_TAGS ]; then + echo "START ODOO UNIT TESTS ON ($TEST_DB) DB FOR ($TEST_TAGS) TAGS" + (cd $PROJECT_FULLPATH; docker-compose run --rm web --test-enable --log-level=test --stop-after-init -d ${TEST_DB} --test-tags=${TEST_TAGS}) + else + echo "You need to specify module or tags. Use -m or --tags" + display_help + fi +} + project_exist() { if [ ! -z "${DELETE}" ]; then delete_project exit 1 + elif [ ! -z "${TEST}" ]; then + run_unit_tests else project_start fi @@ -195,6 +214,8 @@ display_help() { echo " Examples:" echo " $0 -n Test_Project -e -o 14.0 -p 12" >&2 echo " $0 -n Test_Project" >&2 + echo " $0 -n Test_Project -t --db=test_db -m my_module " >&2 + echo " $0 -n Test_Project -t --db=test_db --tags=my_tag,my_tag2 " >&2 echo echo " (M) --> Mandatory parameter " echo " (N) --> Need parameter " @@ -206,6 +227,10 @@ display_help() { echo " -b, --branch (N) Set addons repository branch" echo " -e, --enterprise Set for install enterprise modules" echo " -d, --delete Delete project if exist" + echo " -t, --test Run tests." + echo " -m, --module (N) Module to test" + echo " --tags (N) Tags to test" + echo " --db (N) Database to test on" echo # echo some stuff here for the -a or --add-options @@ -216,7 +241,7 @@ display_help() { # Process the input options. Add options as needed. # ############################################################ -PARSED_ARGS=$(getopt -a -o n:o:p:a:b:edh -l name:,odoo:,psql:,addons:,branch:,enterprise,delete,help -- "$@") +PARSED_ARGS=$(getopt -a -o n:o:p:a:b:m:edth -l name:,odoo:,psql:,addons:,branch:,module:,db:,tags:,enterprise,delete,test,help -- "$@") VALID_ARGS=$? if [ "$VALID_ARGS" != "0" ]; then display_help @@ -253,6 +278,22 @@ while :; do DELETE='T' shift ;; + -t | --test) + TEST='T' + shift + ;; + -m | --module) + TEST_MODULE="$2" + shift 2 + ;; + --db) + TEST_DB="$2" + shift 2 + ;; + --tags) + TEST_TAGS="$2" + shift 2 + ;; -h | --help) display_help shift From a6a99e6926891702aafd94d77458e800e4303e8e Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Fri, 13 May 2022 16:06:04 +0200 Subject: [PATCH 09/13] [ADD] docker_start.ps1 --in_progres --- docker_start.ps1 | 377 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 377 insertions(+) create mode 100644 docker_start.ps1 diff --git a/docker_start.ps1 b/docker_start.ps1 new file mode 100644 index 0000000..6c86e6f --- /dev/null +++ b/docker_start.ps1 @@ -0,0 +1,377 @@ +############################################################ +# Default Values # +############################################################ + +# Flags + +# Variables +$ODOO_VER="15.0" +$PSQL_VER="13" +$PROJECTS_DIR="$HOME/Dokumenty/DockerProjects/" +# Odoo +$ODOO_GITHUB_NAME="odoo" +$ODOO_ENTERPRISE_REPOSITORY="enterprise" +############################################################ +# Functions # +############################################################ + +function customize_env { + # CUSTOMIZE .ENV VARIABLES + (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_NAME=TEST_PROJECT", "PROJECT_NAME=$PROJECT_NAME" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_VER=15.0", "ODOO_VER=$ODOO_VER" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_VER=13", "PSQL_VER=$PSQL_VER" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_CONT_NAME=ODOO_TEMP_CONT", "ODOO_CONT_NAME=$PROJECT_NAME-web" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_CONT_NAME=PSQL_TEMP_CONT", "PSQL_CONT_NAME=$PROJECT_NAME-db" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "SMTP_CONT_NAME=SMTP_TEMP_CONT", "SMTP_CONT_NAME=$PROJECT_NAME-smtp" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_LOCATION=TEST_LOCATION", "PROJECT_LOCATION=$PROJECT_FULLPATH" } | Set-Content test.txt + + Get-Content .env +} + +function standarize_env { + # RETURN TO STANDARD .ENV VARIABLES + (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_NAME=$PROJECT_NAME", "PROJECT_NAME=TEST_PROJECT" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_VER=$ODOO_VER", "ODOO_VER=15.0" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_VER=$PSQL_VER", "PSQL_VER=13" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_CONT_NAME=$PROJECT_NAME-web", "ODOO_CONT_NAME=ODOO_TEMP_CONT" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_CONT_NAME=$PROJECT_NAME-db", "PSQL_CONT_NAME=PSQL_TEMP_CONT" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "SMTP_CONT_NAME=$PROJECT_NAME-smtp", "SMTP_CONT_NAME=SMTP_TEMP_CONT" } | Set-Content test.txt + (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_LOCATION=$PROJECT_FULLPATH", "PROJECT_LOCATION=TEST_LOCATION" } | Set-Content test.txt +} + +function clone_addons { + if ( $null -ne $ADDONS_CLONE_URL ) + { + if ( $null -ne $BRANCH_NAME ) + { + git -C $PROJECT_FULLPATH clone $ADDONS_CLONE_URL --branch $BRANCH_NAME addons + } + else + { + git -C $PROJECT_FULLPATH clone $ADDONS_CLONE_URL addons + } + } +} +function clone_enterprise { + enterprise_link_compose + if ($null -ne $ENTERPRISE_CLONE_URL ) + { + git -C $PROJECT_FULLPATH clone $ENTERPRISE_CLONE_URL --branch $ODOO_VER enterprise + } +} + +function delete_project { + Write-Output "DELETING PROJECT AND VOLUMES" + $location = Get-Location + Set-Location $PROJECT_FULLPATH; docker-compose down -v + Set-Location $location + Write-Output "DELETING PROJECT DIRECTORY" + Remove-Item $PROJECT_FULLPATH -Recurse +} + +function project_start { + # Find project in running containers and start or restart + $RUNNING_CONTAINERS = docker ps + if ( $RUNNING_CONTAINERS -like "*$PROJECT_NAME*" ) + { + Write-Output "RESTARTING $PROJECT_NAME" + $location = Get-Location + Set-Location $PROJECT_FULLPATH; docker-compose restart + Set-Location $location + } + else + { + Write-Output "UPDATE GIT REPO" + git -C "$PROJECT_FULLPATH/addons" stash + git -C "$PROJECT_FULLPATH/addons" pull + git -C "$PROJECT_FULLPATH/addons" stash pop + Write-Output "STARTING $PROJECT_NAME" + $location = Get-Location + Set-Location $PROJECT_FULLPATH; docker-compose start + Set-Location $location + } +} + +function run_unit_tests { + $location = Get-Location + if ( $null -eq $TEST_DB -or $TEST_DB -eq "" ) + { + Write-Output "You need to specify database to run tests on. Use --db." + display_help + } + if ( $null -ne $TEST_MODULE ) + { + Write-Output "START ODOO UNIT TESTS ON ($TEST_DB) DB FOR ($TEST_MODULE) MODULE" + Set-Location $PROJECT_FULLPATH; docker-compose run --rm web --test-enable --log-level=test --stop-after-init -d $TEST_DB -i $TEST_MODULE + Set-Location $location + } + elseif ( $null -ne $TEST_TAGS ) + { + Write-Output "START ODOO UNIT TESTS ON ($TEST_DB) DB FOR ($TEST_TAGS) TAGS" + Set-Location $PROJECT_FULLPATH; docker-compose run --rm web --test-enable --log-level=test --stop-after-init -d $TEST_DB --test-tags=$TEST_TAGS + Set-Location $location + } + else + { + Write-Output "You need to specify module or tags. Use -m or --tags" + display_help + } +} + +function project_exist { + if ( $null -ne $DELETE ) + { + delete_project + exit 1 + } + elseif ( $null -ne $TEST ) + { + run_unit_tests + } + else + { + project_start + } +} + +function create_project { + Write-Output "CREATE PROJECT" + Copy-Item .\config\* -Destination $PROJECT_FULLPATH\config\ -Recurse + Copy-Item .\docker-compose.yml -Destination $PROJECT_FULLPATH\ -Recurse + Copy-Item .\entrypoint.sh -Destination $PROJECT_FULLPATH\ -Recurse + Copy-Item .\launch.json -Destination $PROJECT_FULLPATH\.vscode\ -Recurse + clone_addons + if ( $null -ne $INSTALL_ENTERPRISE_MODULES ) + { + clone_enterprise + } + customize_env + Copy-Item .\.env -Destination $PROJECT_FULLPATH\ -Recurse + docker-compose -p $PROJECT_NAME -f $PROJECT_FULLPATH\docker-compose.yml up --detach + standarize_env +} + +function create_project_directiories { + New-Item $PROJECT_FULLPATH -ItemType "directory" + New-Item $PROJECT_FULLPATH\addons -ItemType "directory" + New-Item $PROJECT_FULLPATH\enterprise -ItemType "directory" + New-Item $PROJECT_FULLPATH\config -ItemType "directory" + New-Item $PROJECT_FULLPATH\.vscode -ItemType "directory" +} + +function check_project { + $PROJECT_FULLPATH="$PROJECTS_DIR$PROJECT_NAME" + if ( Test-Path $PROJECT_FULLPATH ) + { + project_exist + } + elseif ( $null -ne $DELETE ) + { + Write-Output "PROJECT DESN'T EXIST" + exit 1 + } + else + { + create_project_directiories + create_project + } +} + +function check_odoo_version { + $ODOO_VER=$args[1] + if ( $ODOO_VER.Substring($ODOO_VER.Length-1) -ne ".0" ) + { + $ODOO_VER="$ODOO_VER.0" + } +} + +function check_psql_version { + $PSQL_VER=$args[1] + if ( $PSQL_VER.Substring($PSQL_VER.Length-1) -eq ".0" ) + { + $PSQL_VER=$PSQL_VER.Substring(0,2) + } +} +################################### +# CREATE AND RETRIEVE SECRET KEYS # +################################### +function get_addons_secret { + $GITHUB_ADDONS_TOKEN=get_secret github_addons_token + $GITHUB_ADDONS_ACCOUNT=get_secret github_addons_account +} + +function get_enterprise_secret { + $GITHUB_ENTERPRISE_TOKEN=get_secret github_enterprise_token + $GITHUB_ENTERPRISE_ACCOUNT=get_secret github_enterprise_account +} + +function addons_link_compose { + + # https://github.com/rnwood/smtp4dev.git + $ADDONS_URL=$args[1] + if ( $ADDONS_URL -notlike "*github.com*" ) + { + Write-Output "Currently only github URLs accepted" + display_help + } + # Currently support only HTTPS connection + if ( $ADDONS_URL -like "*https://*" ) + { + $ADDONS_URL=$ADDONS_URL.Substring(8, $ADDONS_URL.Length-1) + } + else + { + Write-Output "Currently only HTTPS URLs are accepted" + display_help + } + get_addons_secret + $ADDONS_CLONE_URL="https://$GITHUB_ADDONS_TOKEN@$ADDONS_URL" +} + +function enterprise_link_compose { + get_enterprise_secret + $ENTERPRISE_CLONE_URL="https://$GITHUB_ENTERPRISE_TOKEN@github.com/$ODOO_GITHUB_NAME/$ODOO_ENTERPRISE_REPOSITORY.git" +} +############################################################ +# Help # +############################################################ +function display_help { + $script_name = "docker_start.ps1" + # taken from https://stackoverflow.com/users/4307337/vincent-stans + Write-Output "Usage: $script_name -n {project_name} [parameters...] " + Write-Output " Examples:" + Write-Output " $script_name -n Test_Project -e -o 14.0 -p 12" + Write-Output " $script_name -n Test_Project" + Write-Output " $script_name -n Test_Project -t --db=test_db -m my_module " + Write-Output " $script_name -n Test_Project -t --db=test_db --tags=my_tag,my_tag2 " + Write-Output + Write-Output " (M) --> Mandatory parameter " + Write-Output " (N) --> Need parameter " + Write-Output + Write-Output " -n, -name (M) (N) Set project directory and containers names" + Write-Output " -o, -odoo (N) Set version of Odoo" + Write-Output " -p, -psql (N) Set version of postgreSQL " + Write-Output " -a, -addons (N) Set addons repository HTTPS url" + Write-Output " -b, -branch (N) Set addons repository branch" + Write-Output " -e, -enterprise Set for install enterprise modules" + Write-Output " -d, -delete Delete project if exist" + Write-Output " -t, -test Run tests." + Write-Output " -m, -module (N) Module to test" + Write-Output " -tags (N) Tags to test" + Write-Output " -db (N) Database to test on" + + # echo some stuff here for the -a or --add-options + exit 2 +} + +############################################################ +# Process the input options. Add options as needed. # +############################################################ + +#$PARSED_ARGS=$(getopt -a -o n:o:p:a:b:m:edth -l name:,odoo:,psql:,addons:,branch:,module:,db:,tags:,enterprise,delete,test,help -- "$@") +param( + [Parameter(Mandatory)] [Alias('n', 'name')] $PROJECT_NAME, + + [Alias('o', 'odoo')] $check_odoo_version, + + [Alias('p', 'psql')] $check_psql_version, + + [Alias('a', 'addons')] $addons_link_compose, + + [Alias('b', 'branch')] $BRANCH_NAME, + + [Alias('e', 'enterprise')] $INSTALL_ENTERPRISE_MODULES, + + [Alias('d', 'delete')] [switch] $DELETE, + + [Alias('t', 'test')] [switch] $TEST, + + [Alias('m', 'module')] $TEST_MODULE, + + [Alias('db')] $TEST_DB, + + [Alias('tags')] $TEST_TAGS, + + [Alias('h', 'help')] [switch] $display_help + +) +VALID_ARGS=$? +if [ "$VALID_ARGS" != "0" ]; then + display_help +fi + +eval set -- "$PARSED_ARGS" +while :; do + case "$1" in + -n | --name) + PROJECT_NAME="$2" + shift 2 + ;; + -o | --odoo) + check_odoo_version "$2" + shift 2 + ;; + -p | --psql) + check_psql_version "$2" + shift 2 + ;; + -a | --addons) + addons_link_compose "$2" + shift 2 + ;; + -b | --branch) + BRANCH_NAME="$2" + shift 2 + ;; + -e | --enterprise) + INSTALL_ENTERPRISE_MODULES='T' + shift + ;; + -d | --delete) + DELETE='T' + shift + ;; + -t | --test) + TEST='T' + shift + ;; + -m | --module) + TEST_MODULE="$2" + shift 2 + ;; + --db) + TEST_DB="$2" + shift 2 + ;; + --tags) + TEST_TAGS="$2" + shift 2 + ;; + -h | --help) + display_help + shift + ;; + --) + shift + break + ;; + *) + echo "Unexpected option: $1" + display_help + ;; + esac +done + +if [ -z "$PROJECT_NAME" ]; then + echo "ERROR Need to specify project name." + display_help + exit 2 +fi + +############################################################ +############################################################ +# Main Program # +############################################################ +############################################################ + +check_project From 52fef9fe2a04d437200d39604021ccf1f443cc6b Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Fri, 20 May 2022 14:46:29 +0200 Subject: [PATCH 10/13] [ADD] docker_start.ps1 Added powershell script as a windows version of the oryginal docker_start.sh --- .gitignore | 2 + docker_start.ps1 | 290 ++++++++++++++++++++++------------------------- 2 files changed, 140 insertions(+), 152 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0388039 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/secret +/secret/* \ No newline at end of file diff --git a/docker_start.ps1 b/docker_start.ps1 index 6c86e6f..5d05e2b 100644 --- a/docker_start.ps1 +++ b/docker_start.ps1 @@ -1,3 +1,34 @@ +############################################################ +# Parameters # +############################################################ + +param( + [Alias('n', 'name')] $PROJECT_NAME, + + [Alias('o', 'odoo')] [string[]] $ODOO_VER="15.0", + + [Alias('p', 'psql')] [string[]] $PSQL_VER="13", + + [Alias('a', 'addons')] $ADDONS_URL, + + [Alias('b', 'branch')] $BRANCH_NAME, + + [Alias('e', 'enterprise')] [switch] $INSTALL_ENTERPRISE_MODULES, + + [Alias('d', 'delete')] [switch] $DELETE_PROJECT, + + [Alias('t', 'test')] [switch] $RUN_TEST, + + [Alias('m', 'module')] $TEST_MODULE, + + [Alias('database')] $TEST_DB, + + [Alias('tags')] $TEST_TAGS, + + [Alias('h', 'help')] [switch] $display_help + +) + ############################################################ # Default Values # ############################################################ @@ -5,9 +36,9 @@ # Flags # Variables -$ODOO_VER="15.0" -$PSQL_VER="13" -$PROJECTS_DIR="$HOME/Dokumenty/DockerProjects/" +# $ODOO_VER="15.0" +# $PSQL_VER="13" +$PROJECTS_DIR=(Get-Location) -replace "SmartOdoo", "DockerProjects" # Odoo $ODOO_GITHUB_NAME="odoo" $ODOO_ENTERPRISE_REPOSITORY="enterprise" @@ -17,26 +48,26 @@ $ODOO_ENTERPRISE_REPOSITORY="enterprise" function customize_env { # CUSTOMIZE .ENV VARIABLES - (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_NAME=TEST_PROJECT", "PROJECT_NAME=$PROJECT_NAME" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_VER=15.0", "ODOO_VER=$ODOO_VER" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_VER=13", "PSQL_VER=$PSQL_VER" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_CONT_NAME=ODOO_TEMP_CONT", "ODOO_CONT_NAME=$PROJECT_NAME-web" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_CONT_NAME=PSQL_TEMP_CONT", "PSQL_CONT_NAME=$PROJECT_NAME-db" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "SMTP_CONT_NAME=SMTP_TEMP_CONT", "SMTP_CONT_NAME=$PROJECT_NAME-smtp" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_LOCATION=TEST_LOCATION", "PROJECT_LOCATION=$PROJECT_FULLPATH" } | Set-Content test.txt + (Get-Content .\.env) | ForEach-Object { $_ -replace "PROJECT_NAME=TEST_PROJECT", "PROJECT_NAME=$PROJECT_NAME" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "ODOO_VER=15.0", "ODOO_VER=$ODOO_VER" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "PSQL_VER=13", "PSQL_VER=$PSQL_VER" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "ODOO_CONT_NAME=ODOO_TEMP_CONT", "ODOO_CONT_NAME=$PROJECT_NAME-web" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "PSQL_CONT_NAME=PSQL_TEMP_CONT", "PSQL_CONT_NAME=$PROJECT_NAME-db" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "SMTP_CONT_NAME=SMTP_TEMP_CONT", "SMTP_CONT_NAME=$PROJECT_NAME-smtp" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "PROJECT_LOCATION=TEST_LOCATION", "PROJECT_LOCATION=$PROJECT_FULLPATH" } | Set-Content .env Get-Content .env } function standarize_env { # RETURN TO STANDARD .ENV VARIABLES - (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_NAME=$PROJECT_NAME", "PROJECT_NAME=TEST_PROJECT" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_VER=$ODOO_VER", "ODOO_VER=15.0" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_VER=$PSQL_VER", "PSQL_VER=13" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "ODOO_CONT_NAME=$PROJECT_NAME-web", "ODOO_CONT_NAME=ODOO_TEMP_CONT" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "PSQL_CONT_NAME=$PROJECT_NAME-db", "PSQL_CONT_NAME=PSQL_TEMP_CONT" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "SMTP_CONT_NAME=$PROJECT_NAME-smtp", "SMTP_CONT_NAME=SMTP_TEMP_CONT" } | Set-Content test.txt - (Get-Content .\env) | ForEach-Object { $_ -replace "PROJECT_LOCATION=$PROJECT_FULLPATH", "PROJECT_LOCATION=TEST_LOCATION" } | Set-Content test.txt + (Get-Content .\.env) | ForEach-Object { $_ -replace "PROJECT_NAME=$PROJECT_NAME", "PROJECT_NAME=TEST_PROJECT" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "ODOO_VER=$ODOO_VER", "ODOO_VER=15.0" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "PSQL_VER=$PSQL_VER", "PSQL_VER=13" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "ODOO_CONT_NAME=$PROJECT_NAME-web", "ODOO_CONT_NAME=ODOO_TEMP_CONT" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "PSQL_CONT_NAME=$PROJECT_NAME-db", "PSQL_CONT_NAME=PSQL_TEMP_CONT" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace "SMTP_CONT_NAME=$PROJECT_NAME-smtp", "SMTP_CONT_NAME=SMTP_TEMP_CONT" } | Set-Content .env + (Get-Content .\.env) | ForEach-Object { $_ -replace [Regex]::Escape("PROJECT_LOCATION=$PROJECT_FULLPATH"), "PROJECT_LOCATION=TEST_LOCATION" } | Set-Content .env } function clone_addons { @@ -66,7 +97,7 @@ function delete_project { Set-Location $PROJECT_FULLPATH; docker-compose down -v Set-Location $location Write-Output "DELETING PROJECT DIRECTORY" - Remove-Item $PROJECT_FULLPATH -Recurse + Remove-Item $PROJECT_FULLPATH -Recurse -Force } function project_start { @@ -119,12 +150,12 @@ function run_unit_tests { } function project_exist { - if ( $null -ne $DELETE ) + if ( $DELETE_PROJECT ) { delete_project exit 1 } - elseif ( $null -ne $TEST ) + elseif ( $RUN_TEST ) { run_unit_tests } @@ -139,9 +170,11 @@ function create_project { Copy-Item .\config\* -Destination $PROJECT_FULLPATH\config\ -Recurse Copy-Item .\docker-compose.yml -Destination $PROJECT_FULLPATH\ -Recurse Copy-Item .\entrypoint.sh -Destination $PROJECT_FULLPATH\ -Recurse + # Change CRLF to LF + (Get-Content "$PROJECT_FULLPATH\entrypoint.sh" -Raw) -replace "`r`n", "`n" | Set-Content "$PROJECT_FULLPATH\entrypoint.sh" -Force Copy-Item .\launch.json -Destination $PROJECT_FULLPATH\.vscode\ -Recurse clone_addons - if ( $null -ne $INSTALL_ENTERPRISE_MODULES ) + if ( $INSTALL_ENTERPRISE_MODULES ) { clone_enterprise } @@ -160,12 +193,12 @@ function create_project_directiories { } function check_project { - $PROJECT_FULLPATH="$PROJECTS_DIR$PROJECT_NAME" + $PROJECT_FULLPATH="$PROJECTS_DIR\$PROJECT_NAME" if ( Test-Path $PROJECT_FULLPATH ) { project_exist } - elseif ( $null -ne $DELETE ) + elseif ( $DELETE_PROJECT ) { Write-Output "PROJECT DESN'T EXIST" exit 1 @@ -178,37 +211,68 @@ function check_project { } function check_odoo_version { - $ODOO_VER=$args[1] - if ( $ODOO_VER.Substring($ODOO_VER.Length-1) -ne ".0" ) + if ( $ODOO_VER.Substring(2) -ne ".0" ) { - $ODOO_VER="$ODOO_VER.0" + $script:ODOO_VER="$ODOO_VER.0" } } function check_psql_version { - $PSQL_VER=$args[1] if ( $PSQL_VER.Substring($PSQL_VER.Length-1) -eq ".0" ) { - $PSQL_VER=$PSQL_VER.Substring(0,2) + $script:PSQL_VER=$PSQL_VER.Substring(0,2) } } ################################### # CREATE AND RETRIEVE SECRET KEYS # ################################### function get_addons_secret { - $GITHUB_ADDONS_TOKEN=get_secret github_addons_token - $GITHUB_ADDONS_ACCOUNT=get_secret github_addons_account + if ( Test-Path "./secret/git_addons.xml" ) + { + $GITHUB_ADDONS_CREDENTIALS=Import-CliXml -Path "./secret/git_addons.xml" + $script:GITHUB_ADDONS_ACCOUNT=$GITHUB_ADDONS_CREDENTIALS.Username + $script:GITHUB_ADDONS_TOKEN=$GITHUB_ADDONS_CREDENTIALS.GetNetworkCredential().Password + } + else + { + if ( -not (Test-Path "./secret") ) + { + New-Item -ItemType 'directory' -Path './secret' + $FILE=Get-Item './secret' -Force + $FILE.attributes='Hidden' + } + $GITHUB_ADDONS_CREDENTIALS=Get-Credential -Message "Provide login and token for YOUR github account." + $script:GITHUB_ADDONS_ACCOUNT=$GITHUB_ADDONS_CREDENTIALS.Username + $script:GITHUB_ADDONS_TOKEN=$GITHUB_ADDONS_CREDENTIALS.GetNetworkCredential().Password + $GITHUB_ADDONS_CREDENTIALS | Export-CliXml -Path "./secret/git_addons.xml" + } } function get_enterprise_secret { - $GITHUB_ENTERPRISE_TOKEN=get_secret github_enterprise_token - $GITHUB_ENTERPRISE_ACCOUNT=get_secret github_enterprise_account + if ( Test-Path "./secret/git_ent.xml" ) + { + $GITHUB_ENTERPRISE_CREDENTIALS=Import-CliXml -Path "./secret/git_ent.xml" + $script:GITHUB_ENTERPRISE_ACCOUNT=$GITHUB_ENTERPRISE_CREDENTIALS.Username + $script:GITHUB_ENTERPRISE_TOKEN=$GITHUB_ENTERPRISE_CREDENTIALS.GetNetworkCredential().Password + } + else + { + if ( -not (Test-Path "./secret") ) + { + New-Item -ItemType 'directory' -Path './secret' + $FILE=Get-Item './secret' -Force + $FILE.attributes='Hidden' + } + $GITHUB_ENTERPRISE_CREDENTIALS=Get-Credential -Message "Provide login and token for COMPANY github account." + $script:GITHUB_ENTERPRISE_ACCOUNT=$GITHUB_ENTERPRISE_CREDENTIALS.Username + $script:GITHUB_ENTERPRISE_TOKEN=$GITHUB_ENTERPRISE_CREDENTIALS.GetNetworkCredential().Password + $GITHUB_ENTERPRISE_CREDENTIALS | Export-CliXml -Path "./secret/git_ent.xml" + } } function addons_link_compose { # https://github.com/rnwood/smtp4dev.git - $ADDONS_URL=$args[1] if ( $ADDONS_URL -notlike "*github.com*" ) { Write-Output "Currently only github URLs accepted" @@ -217,7 +281,7 @@ function addons_link_compose { # Currently support only HTTPS connection if ( $ADDONS_URL -like "*https://*" ) { - $ADDONS_URL=$ADDONS_URL.Substring(8, $ADDONS_URL.Length-1) + $ADDONS_URL=$ADDONS_URL.Substring(8) } else { @@ -225,12 +289,12 @@ function addons_link_compose { display_help } get_addons_secret - $ADDONS_CLONE_URL="https://$GITHUB_ADDONS_TOKEN@$ADDONS_URL" + $script:ADDONS_CLONE_URL="https://$GITHUB_ADDONS_TOKEN@$ADDONS_URL" } function enterprise_link_compose { get_enterprise_secret - $ENTERPRISE_CLONE_URL="https://$GITHUB_ENTERPRISE_TOKEN@github.com/$ODOO_GITHUB_NAME/$ODOO_ENTERPRISE_REPOSITORY.git" + $script:ENTERPRISE_CLONE_URL="https://$GITHUB_ENTERPRISE_TOKEN@github.com/$ODOO_GITHUB_NAME/$ODOO_ENTERPRISE_REPOSITORY.git" } ############################################################ # Help # @@ -239,26 +303,26 @@ function display_help { $script_name = "docker_start.ps1" # taken from https://stackoverflow.com/users/4307337/vincent-stans Write-Output "Usage: $script_name -n {project_name} [parameters...] " - Write-Output " Examples:" - Write-Output " $script_name -n Test_Project -e -o 14.0 -p 12" - Write-Output " $script_name -n Test_Project" - Write-Output " $script_name -n Test_Project -t --db=test_db -m my_module " - Write-Output " $script_name -n Test_Project -t --db=test_db --tags=my_tag,my_tag2 " - Write-Output - Write-Output " (M) --> Mandatory parameter " - Write-Output " (N) --> Need parameter " - Write-Output - Write-Output " -n, -name (M) (N) Set project directory and containers names" - Write-Output " -o, -odoo (N) Set version of Odoo" - Write-Output " -p, -psql (N) Set version of postgreSQL " - Write-Output " -a, -addons (N) Set addons repository HTTPS url" - Write-Output " -b, -branch (N) Set addons repository branch" - Write-Output " -e, -enterprise Set for install enterprise modules" - Write-Output " -d, -delete Delete project if exist" - Write-Output " -t, -test Run tests." - Write-Output " -m, -module (N) Module to test" - Write-Output " -tags (N) Tags to test" - Write-Output " -db (N) Database to test on" + Write-Output "Examples:" + Write-Output "$script_name -n Test_Project -e -o 14.0 -p 12" + Write-Output "$script_name -n Test_Project" + Write-Output "$script_name -n Test_Project -t --db=test_db -m my_module " + Write-Output "$script_name -n Test_Project -t --db=test_db --tags=my_tag,my_tag2 " + Write-Output "" + Write-Output "(M) --> Mandatory parameter " + Write-Output "(N) --> Need parameter " + Write-Output "" + Write-Output "-n, -name (M) (N) Set project directory and containers names" + Write-Output "-o, -odoo (N) Set version of Odoo" + Write-Output "-p, -psql (N) Set version of postgreSQL " + Write-Output "-a, -addons (N) Set addons repository HTTPS url" + Write-Output "-b, -branch (N) Set addons repository branch" + Write-Output "-e, -enterprise Set for install enterprise modules" + Write-Output "-d, -delete Delete project if exist" + Write-Output "-t, -test Run tests." + Write-Output "-m, -module (N) Module to test" + Write-Output " -tags (N) Tags to test" + Write-Output " -database (N) Database to test on" # echo some stuff here for the -a or --add-options exit 2 @@ -267,106 +331,28 @@ function display_help { ############################################################ # Process the input options. Add options as needed. # ############################################################ - -#$PARSED_ARGS=$(getopt -a -o n:o:p:a:b:m:edth -l name:,odoo:,psql:,addons:,branch:,module:,db:,tags:,enterprise,delete,test,help -- "$@") -param( - [Parameter(Mandatory)] [Alias('n', 'name')] $PROJECT_NAME, - - [Alias('o', 'odoo')] $check_odoo_version, - - [Alias('p', 'psql')] $check_psql_version, - - [Alias('a', 'addons')] $addons_link_compose, - - [Alias('b', 'branch')] $BRANCH_NAME, - - [Alias('e', 'enterprise')] $INSTALL_ENTERPRISE_MODULES, - - [Alias('d', 'delete')] [switch] $DELETE, - - [Alias('t', 'test')] [switch] $TEST, - - [Alias('m', 'module')] $TEST_MODULE, - - [Alias('db')] $TEST_DB, - - [Alias('tags')] $TEST_TAGS, - - [Alias('h', 'help')] [switch] $display_help - -) -VALID_ARGS=$? -if [ "$VALID_ARGS" != "0" ]; then +if($PSBoundParameters.Count -eq 0) { display_help -fi - -eval set -- "$PARSED_ARGS" -while :; do - case "$1" in - -n | --name) - PROJECT_NAME="$2" - shift 2 - ;; - -o | --odoo) - check_odoo_version "$2" - shift 2 - ;; - -p | --psql) - check_psql_version "$2" - shift 2 - ;; - -a | --addons) - addons_link_compose "$2" - shift 2 - ;; - -b | --branch) - BRANCH_NAME="$2" - shift 2 - ;; - -e | --enterprise) - INSTALL_ENTERPRISE_MODULES='T' - shift - ;; - -d | --delete) - DELETE='T' - shift - ;; - -t | --test) - TEST='T' - shift - ;; - -m | --module) - TEST_MODULE="$2" - shift 2 - ;; - --db) - TEST_DB="$2" - shift 2 - ;; - --tags) - TEST_TAGS="$2" - shift 2 - ;; - -h | --help) - display_help - shift - ;; - --) - shift - break - ;; - *) - echo "Unexpected option: $1" - display_help - ;; - esac -done +} +if ($null -ne $ODOO_VER) +{ + check_odoo_version +} +if ($null -ne $PSQL_VER) +{ + check_psql_version +} +if ($null -ne $ADDONS_URL) +{ + addons_link_compose +} -if [ -z "$PROJECT_NAME" ]; then - echo "ERROR Need to specify project name." +if ( $null -eq $PROJECT_NAME ) +{ + Write-Output "ERROR Need to specify project name." display_help exit 2 -fi +} ############################################################ ############################################################ From 85e5ea798dab358688522ae89c8c6ae989499a5e Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Tue, 24 May 2022 09:24:06 +0200 Subject: [PATCH 11/13] [UPT] docker-compose.yml Change restart option for smtp4dev to 'on-failure'. --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index bac8d44..4beec55 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,4 +37,4 @@ services: - "25:25" - "143:143" hostname: smtp4dev_odoo - restart: always + restart: on-failure From 02779709072ffc56799445b2878d6441256ca1fe Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Thu, 14 Jul 2022 16:07:31 +0200 Subject: [PATCH 12/13] [UPDATE] docker_start.sh * Add rebuild_container for rebuilding specific container in project * Add install_and_rebuild for installing module at odoo install -- IN PROGRESS --- docker_start.sh | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/docker_start.sh b/docker_start.sh index 44789ec..e2e3e4f 100755 --- a/docker_start.sh +++ b/docker_start.sh @@ -106,12 +106,34 @@ run_unit_tests(){ fi } +rebuild_container(){ + if [ -z CONTAINER_NAME ] || [ "$CONTAINER_NAME" == "" ]; then + echo "You need to specify container name that you want to rebuild. Use -r or --rebuild" + display_help + fi + (cd $PROJECT_FULLPATH; docker-compose up -d --no-deps --force-recreate --build "$CONTAINER_NAME") +} + +install_and_rebuild(){ + # TODO: Install module + if [ -z INSTALL_MODULE ] || [ "$INSTALL_MODULE" == "" ]; then + echo "You need to specify modue name that you want to install. Use --install" + display_help + fi + (cd $PROJECT_FULLPATH; docker-compose up -d --no-deps --force-recreate --build "$CONTAINER_NAME") + +} + project_exist() { if [ ! -z "${DELETE}" ]; then delete_project exit 1 elif [ ! -z "${TEST}" ]; then run_unit_tests + elif [ ! -z "${CONTAINER_NAME}" ]; then + rebuild_container + elif [ ! -z "${INSTALL_MODULE}" ]; then + install_and_rebuild else project_start fi @@ -227,10 +249,12 @@ display_help() { echo " -b, --branch (N) Set addons repository branch" echo " -e, --enterprise Set for install enterprise modules" echo " -d, --delete Delete project if exist" + echo " -r, --rebuild (N) Rebuild container in project with given name" echo " -t, --test Run tests." echo " -m, --module (N) Module to test" echo " --tags (N) Tags to test" echo " --db (N) Database to test on" + echo " --install (N) Rebuild web container and install given module" echo # echo some stuff here for the -a or --add-options @@ -241,7 +265,7 @@ display_help() { # Process the input options. Add options as needed. # ############################################################ -PARSED_ARGS=$(getopt -a -o n:o:p:a:b:m:edth -l name:,odoo:,psql:,addons:,branch:,module:,db:,tags:,enterprise,delete,test,help -- "$@") +PARSED_ARGS=$(getopt -a -o n:o:p:a:b:m:r:edth -l name:,odoo:,psql:,addons:,branch:,module:,db:,tags:,rebuild:,install:,enterprise,delete,test,help -- "$@") VALID_ARGS=$? if [ "$VALID_ARGS" != "0" ]; then display_help @@ -286,6 +310,15 @@ while :; do TEST_MODULE="$2" shift 2 ;; + -r | --rebuild) + CONTAINER_NAME="$2" + shift 2 + ;; + --install) + CONTAINER_NAME="web" + INSTALL_MODULE="$2" + shift 2 + ;; --db) TEST_DB="$2" shift 2 From 330b997c35043a02ae1cf11c5044d5e1a99a2cf7 Mon Sep 17 00:00:00 2001 From: kz-myodoo Date: Thu, 1 Dec 2022 16:25:22 +0100 Subject: [PATCH 13/13] [UPT] Some fixes * Fix location in .ps1 son now it can be run from anywhere * Add --dev reload to command in compose * Uncommented dp_port in odoo config --- config/odoo.conf | 2 +- docker-compose.yml | 2 +- docker_start.ps1 | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/config/odoo.conf b/config/odoo.conf index 7ba6aa6..45e8872 100644 --- a/config/odoo.conf +++ b/config/odoo.conf @@ -7,7 +7,7 @@ data_dir = /var/lib/odoo # db_maxconn = 64 # db_name = odoo # db_password = odoo -# db_port = 5432 +db_port = 5432 # db_sslmode = prefer # db_template = template1 # db_user = odoo diff --git a/docker-compose.yml b/docker-compose.yml index 4beec55..2b2e492 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: ports: - "8069:8069" - "5858:5858" - command: /usr/bin/python3 -m debugpy --listen 0.0.0.0:5858 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo -c /etc/odoo/odoo.conf + command: /usr/bin/python3 -m debugpy --listen 0.0.0.0:5858 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo -c /etc/odoo/odoo.conf --dev reload tty: true volumes: - ${PROJECT_LOCATION}/entrypoint.sh:/entrypoint.sh diff --git a/docker_start.ps1 b/docker_start.ps1 index 5d05e2b..64b7736 100644 --- a/docker_start.ps1 +++ b/docker_start.ps1 @@ -38,7 +38,8 @@ param( # Variables # $ODOO_VER="15.0" # $PSQL_VER="13" -$PROJECTS_DIR=(Get-Location) -replace "SmartOdoo", "DockerProjects" +$RUN_LOCATION = Get-Location +$PROJECTS_DIR=$PSScriptRoot -replace "SmartOdoo", "DockerProjects" # Odoo $ODOO_GITHUB_NAME="odoo" $ODOO_ENTERPRISE_REPOSITORY="enterprise" @@ -153,6 +154,7 @@ function project_exist { if ( $DELETE_PROJECT ) { delete_project + Set-Location $RUN_LOCATION exit 1 } elseif ( $RUN_TEST ) @@ -193,6 +195,7 @@ function create_project_directiories { } function check_project { + Set-Location $PSScriptRoot $PROJECT_FULLPATH="$PROJECTS_DIR\$PROJECT_NAME" if ( Test-Path $PROJECT_FULLPATH ) { @@ -201,6 +204,7 @@ function check_project { elseif ( $DELETE_PROJECT ) { Write-Output "PROJECT DESN'T EXIST" + Set-Location $RUN_LOCATION exit 1 } else @@ -325,6 +329,7 @@ function display_help { Write-Output " -database (N) Database to test on" # echo some stuff here for the -a or --add-options + Set-Location $RUN_LOCATION exit 2 } @@ -351,6 +356,7 @@ if ( $null -eq $PROJECT_NAME ) { Write-Output "ERROR Need to specify project name." display_help + Set-Location $RUN_LOCATION exit 2 }