Merge pull request #8 from mabdullahadeel/update-actions

Update actions
This commit is contained in:
Abdullah Adeel 2022-01-28 15:21:17 +05:00 committed by GitHub
commit af508588e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 93 additions and 11 deletions

View File

@ -43,10 +43,14 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
script: script:
- name: Basic - name: Basic - Postgres
args: "database_engine=postgresql database_version=postgresql@14.1" args: "database_engine=postgresql database_version='postgresql@14.1'"
- name: Extended - name: Extended - Postgres
args: "use_celery=y use_drf=y js_task_runner=Gulp database_engine=postgresql database_version=postgresql@14.1" args: "use_celery=y use_drf=y js_task_runner=Gulp database_engine=postgresql database_version='postgresql@14.1'"
- name: Basic - MySQL
args: "database_engine=mysql database_version='mysql@8.0.28'"
- name: Extended - MySQL
args: "use_celery=y use_drf=y js_task_runner=Gulp database_engine=mysql database_version='mysql@8.0.28'"
name: "${{ matrix.script.name }} Docker" name: "${{ matrix.script.name }} Docker"
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@ -257,7 +257,7 @@ def set_database_user(file_path: str, value: str, database_engine: str):
def set_database_password(file_path: str, database_engine: str, value: str = None): def set_database_password(file_path: str, database_engine: str, value: str = None):
database_password = set_flag( database_password = set_flag(
file_path, file_path,
f"!!!SET {database_engine.upper()}_USER!!!", f"!!!SET {database_engine.upper()}_PASSWORD!!!",
value=value, value=value,
length=64, length=64,
using_digits=True, using_digits=True,
@ -266,6 +266,18 @@ def set_database_password(file_path: str, database_engine: str, value: str = Non
return database_password return database_password
def set_mysql_root_password(file_path: str, database_engine: str, value: str = None):
database_root_password = set_flag(
file_path,
f"!!!SET {database_engine.upper()}_ROOT_PASSWORD!!!",
value=value,
length=74,
using_digits=True,
using_ascii_letters=True,
)
return database_root_password
def get_database_env_path(env: str, database_engine: str): def get_database_env_path(env: str, database_engine: str):
local_postgres_envs_path = os.path.join(".envs", ".local", ".postgres") local_postgres_envs_path = os.path.join(".envs", ".local", ".postgres")
production_postgres_envs_path = os.path.join(".envs", ".production", ".postgres") production_postgres_envs_path = os.path.join(".envs", ".production", ".postgres")
@ -345,6 +357,19 @@ def set_flags_in_envs(database_user, celery_flower_user, debug=False):
value=DEBUG_VALUE if debug else None, value=DEBUG_VALUE if debug else None,
) )
if selected_database == "mysql":
set_mysql_root_password(
get_database_env_path(env="local", database_engine=selected_database),
database_engine=selected_database,
value=DEBUG_VALUE if debug else None,
)
set_mysql_root_password(
get_database_env_path(env="prod", database_engine=selected_database),
database_engine=selected_database,
value=DEBUG_VALUE if debug else None,
)
set_celery_flower_user(local_django_envs_path, value=celery_flower_user) set_celery_flower_user(local_django_envs_path, value=celery_flower_user)
set_celery_flower_password( set_celery_flower_password(
local_django_envs_path, value=DEBUG_VALUE if debug else None local_django_envs_path, value=DEBUG_VALUE if debug else None

View File

@ -6,4 +6,3 @@ MYSQL_DATABASE={{ cookiecutter.project_slug }}
MYSQL_USER=!!!SET MYSQL_USER!!! MYSQL_USER=!!!SET MYSQL_USER!!!
MYSQL_PASSWORD=!!!SET MYSQL_PASSWORD!!! MYSQL_PASSWORD=!!!SET MYSQL_PASSWORD!!!
MYSQL_ROOT_PASSWORD=!!!SET MYSQL_ROOT_PASSWORD!!! MYSQL_ROOT_PASSWORD=!!!SET MYSQL_ROOT_PASSWORD!!!

View File

@ -3,5 +3,5 @@
POSTGRES_HOST=postgres POSTGRES_HOST=postgres
POSTGRES_PORT=5432 POSTGRES_PORT=5432
POSTGRES_DB={{ cookiecutter.project_slug }} POSTGRES_DB={{ cookiecutter.project_slug }}
POSTGRES_USER=!!!SET POSTGRES_USER!!! POSTGRES_USER=!!!SET POSTGRESQL_USER!!!
POSTGRES_PASSWORD=!!!SET POSTGRES_PASSWORD!!! POSTGRES_PASSWORD=!!!SET POSTGRESQL_PASSWORD!!!

View File

@ -3,5 +3,5 @@
POSTGRES_HOST=postgres POSTGRES_HOST=postgres
POSTGRES_PORT=5432 POSTGRES_PORT=5432
POSTGRES_DB={{ cookiecutter.project_slug }} POSTGRES_DB={{ cookiecutter.project_slug }}
POSTGRES_USER=!!!SET POSTGRES_USER!!! POSTGRES_USER=!!!SET POSTGRESQL_USER!!!
POSTGRES_PASSWORD=!!!SET POSTGRES_PASSWORD!!! POSTGRES_PASSWORD=!!!SET POSTGRESQL_PASSWORD!!!

View File

@ -12,8 +12,13 @@ ENV PYTHONDONTWRITEBYTECODE 1
RUN apt-get update && apt-get install --no-install-recommends -y \ RUN apt-get update && apt-get install --no-install-recommends -y \
# dependencies for building Python packages # dependencies for building Python packages
build-essential \ build-essential \
{%- if cookiecutter.database_engine == "postgresql" %}
# psycopg2 dependencies # psycopg2 dependencies
libpq-dev \ libpq-dev \
{%- elif cookiecutter.database_engine == "mysql" %}
# mysql dependency
default-libmysqlclient-dev \
{%- endif %}
# cleaning up unused files # cleaning up unused files
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
@ -37,8 +42,13 @@ ENV PYTHONDONTWRITEBYTECODE 1
RUN apt-get update && apt-get install --no-install-recommends -y \ RUN apt-get update && apt-get install --no-install-recommends -y \
# To run the Makefile # To run the Makefile
make \ make \
{%- if cookiecutter.database_engine == "postgresql" %}
# psycopg2 dependencies # psycopg2 dependencies
libpq-dev \ libpq-dev \
{%- elif cookiecutter.database_engine == "mysql" %}
# mysql dependency
default-libmysqlclient-dev \
{%- endif %}
# Translations dependencies # Translations dependencies
gettext \ gettext \
# Uncomment below lines to enable Sphinx output to latex and pdf # Uncomment below lines to enable Sphinx output to latex and pdf

View File

@ -19,7 +19,7 @@ export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES
{%- endif %} {%- endif %}
{%- if cookiecutter.database_engine == 'mysql' %} {%- if cookiecutter.database_engine == 'mysql' %}
if [ -z "${MYSQL_USER}" ]; then if [ -z "${MYSQL_USER}" ]; then
base_mysql_image_default_user='mysql' base_mysql_image_default_user='root'
export MYSQL_USER="${base_mysql_image_default_user}" export MYSQL_USER="${base_mysql_image_default_user}"
fi fi
export DATABASE_URL="mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}" export DATABASE_URL="mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}"

View File

@ -4,3 +4,7 @@ COPY ./compose/production/mysql/maintenance /usr/local/bin/maintenance
RUN chmod +x /usr/local/bin/maintenance/* RUN chmod +x /usr/local/bin/maintenance/*
RUN mv /usr/local/bin/maintenance/* /usr/local/bin \ RUN mv /usr/local/bin/maintenance/* /usr/local/bin \
&& rmdir /usr/local/bin/maintenance && rmdir /usr/local/bin/maintenance
COPY ./compose/production/mysql/init.sh /docker-entrypoint-initdb.d
RUN sed -i 's/\r$//g' /docker-entrypoint-initdb.d/init.sh
RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/init.sh

View File

@ -0,0 +1,40 @@
#!/bin/bash
initialize() {
{
mysql_note "Giving user ${MYSQL_USER} access to schema test_${MYSQL_DATABASE}"
docker_process_sql --database=mysql <<<"GRANT ALL ON \`test_${MYSQL_DATABASE//_/\\_}\`.* TO '$MYSQL_USER'@'%' ;"
# exporting dummy MYSQL_ONETIME_PASSWORD to avoid -> MYSQL_ONETIME_PASSWORD: unbound variable
export DUMMY_ONETIME_PASSWORD="$MYSQL_ROOT_PASSWORD"
} || {
exit 1
}
}
docker_process_sql() {
if [ -n "$MYSQL_DATABASE" ]; then
set -- --database="$MYSQL_DATABASE" "$@"
fi
mysql --protocol=socket -uroot --password="${MYSQL_ROOT_PASSWORD}" -hlocalhost --socket="${SOCKET}" --comments "$@"
}
# logging functions
mysql_log() {
local type="$1"; shift
# accept argument string or stdin
local text="$*"; if [ "$#" -eq 0 ]; then text="$(cat)"; fi
local dt; dt="$(date --rfc-3339=seconds)"
printf '%s [%s] [Entrypoint]: %s\n' "$dt" "$type" "$text"
}
mysql_note() {
mysql_log Note "$@"
}
until (initialize); do
>&2 echo 'Waiting for MYSQL to execute init'
sleep 1
done