From d649e6a5c01ac8ac6c775ea289a23b3b9d4aa902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Wed, 17 Aug 2022 15:42:01 +0200 Subject: [PATCH] fix migrations, add documentation, hopefully fix workflow (#899) * fix migrations, add documentation, hopefully fix workflow * renaming to test-migration and add migration Co-authored-by: dni --- .github/workflows/migrations.yml | 15 ++++----------- Makefile | 21 ++++++++++++++++++++- docs/devs/extensions.md | 23 ++++++++++++++++++++++- docs/guide/installation.md | 5 +++-- tests/data/mock_data.zip | Bin 26065 -> 23937 bytes tools/conv.py | 12 ++++-------- 6 files changed, 53 insertions(+), 23 deletions(-) diff --git a/.github/workflows/migrations.yml b/.github/workflows/migrations.yml index 8e72cf624..90006d2a8 100644 --- a/.github/workflows/migrations.yml +++ b/.github/workflows/migrations.yml @@ -9,9 +9,9 @@ jobs: postgres: image: postgres:latest env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: postgres + POSTGRES_USER: lnbits + POSTGRES_PASSWORD: lnbits + POSTGRES_DB: migration ports: # maps tcp port 5432 on service container to the host - 5432:5432 @@ -36,11 +36,4 @@ jobs: sudo apt install unzip - name: Run migrations run: | - rm -rf ./data - mkdir -p ./data - export LNBITS_DATA_FOLDER="./data" - unzip tests/data/mock_data.zip -d ./data - timeout 5s poetry run lnbits --host 0.0.0.0 --port 5001 || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi - export LNBITS_DATABASE_URL="postgres://postgres:postgres@0.0.0.0:5432/postgres" - timeout 5s poetry run lnbits --host 0.0.0.0 --port 5001 || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi - poetry run python tools/conv.py + make test-migration diff --git a/Makefile b/Makefile index d91d0421d..20fe65ce8 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ all: format check requirements.txt format: prettier isort black -check: mypy checkprettier checkisort checkblack +check: mypy checkprettier checkisort checkblack prettier: $(shell find lnbits -name "*.js" -name ".html") ./node_modules/.bin/prettier --write lnbits/static/js/*.js lnbits/core/static/js/*.js lnbits/extensions/*/templates/*/*.html ./lnbits/core/templates/core/*.html lnbits/templates/*.html lnbits/extensions/*/static/js/*.js lnbits/extensions/*/static/components/*/*.js lnbits/extensions/*/static/components/*/*.html @@ -46,5 +46,24 @@ test-venv: PYTHONUNBUFFERED=1 \ ./venv/bin/pytest --durations=1 -s --cov=lnbits --cov-report=xml tests +test-migration: + rm -rf ./migration-data + mkdir -p ./migration-data + unzip tests/data/mock_data.zip -d ./migration-data + HOST=0.0.0.0 \ + PORT=5002 \ + LNBITS_DATA_FOLDER="./migration-data" \ + timeout 5s poetry run lnbits --host 0.0.0.0 --port 5002 || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi + HOST=0.0.0.0 \ + PORT=5002 \ + LNBITS_DATABASE_URL="postgres://lnbits:lnbits@localhost:5432/migration" \ + timeout 5s poetry run lnbits --host 0.0.0.0 --port 5002 || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi + LNBITS_DATA_FOLDER="./migration-data" \ + LNBITS_DATABASE_URL="postgres://lnbits:lnbits@localhost:5432/migration" \ + poetry run python tools/conv.py + +migration: + poetry run python tools/conv.py + bak: # LNBITS_DATABASE_URL=postgres://postgres:postgres@0.0.0.0:5432/postgres diff --git a/docs/devs/extensions.md b/docs/devs/extensions.md index 0ceb9cb3f..cd81a0210 100644 --- a/docs/devs/extensions.md +++ b/docs/devs/extensions.md @@ -48,4 +48,25 @@ LNbits currently supports SQLite and PostgreSQL databases. There is a migration ### Adding mock data to `mock_data.zip` -`mock_data.zip` contains a few lines of sample SQLite data and is used in automated GitHub test to see whether your migration in `conv.py` works. Run your extension and save a few lines of data into a SQLite `your_extension.sqlite3` file. Unzip `tests/data/mock_data.zip`, add `your_extension.sqlite3` and zip it again. Add the updated `mock_data.zip` to your PR. \ No newline at end of file +`mock_data.zip` contains a few lines of sample SQLite data and is used in automated GitHub test to see whether your migration in `conv.py` works. Run your extension and save a few lines of data into a SQLite `your_extension.sqlite3` file. Unzip `tests/data/mock_data.zip`, add `your_extension.sqlite3`, updated `database.sqlite3` and zip it again. Add the updated `mock_data.zip` to your PR. + +### running migration locally +you will need a running postgres database + +#### create lnbits user for migration database +```console +sudo su - postgres -c "psql -c 'CREATE ROLE lnbits LOGIN PASSWORD 'lnbits';'" +``` +#### create migration database +```console +sudo su - postgres -c "psql -c 'CREATE DATABASE migration;'" +``` +#### run the migration +```console +make test-migration +``` +sudo su - postgres -c "psql -c 'CREATE ROLE lnbits LOGIN PASSWORD 'lnbits';'" +#### clean migration database afterwards, fails if you try again +```console +sudo su - postgres -c "psql -c 'DROP DATABASE IF EXISTS migration;'" +``` diff --git a/docs/guide/installation.md b/docs/guide/installation.md index cc5b96a98..6de893adb 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -170,8 +170,9 @@ LNBITS_DATABASE_URL="postgres://postgres:postgres@localhost/lnbits" # START LNbits # STOP LNbits -# on the LNBits folder, locate and edit 'tools/conv.py' with the relevant credentials -python3 tools/conv.py +poetry run python tools/conv.py +# or +make migration ``` Hopefully, everything works and get migrated... Launch LNbits again and check if everything is working properly. diff --git a/tests/data/mock_data.zip b/tests/data/mock_data.zip index 3a7938917afec15b1d86421d25bf5f8947d4d1fc..8704eb6d4305fdf6c5911ac3a39a0bff6bda6cb0 100644 GIT binary patch delta 8240 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 delta 10485 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 diff --git a/tools/conv.py b/tools/conv.py index 10e8c9cdd..5084660ff 100644 --- a/tools/conv.py +++ b/tools/conv.py @@ -19,16 +19,12 @@ env.read_env() # Change these values as needed -sqfolder = "data/" +sqfolder = env.str("LNBITS_DATA_FOLDER", default=None) LNBITS_DATABASE_URL = env.str("LNBITS_DATABASE_URL", default=None) if LNBITS_DATABASE_URL is None: - pgdb = "lnbits" - pguser = "lnbits" - pgpswd = "postgres" - pghost = "localhost" - pgport = "5432" - pgschema = "" + print("missing LNBITS_DATABASE_URL") + sys.exit(1) else: # parse postgres://lnbits:postgres@localhost:5432/lnbits pgdb = LNBITS_DATABASE_URL.split("/")[-1] @@ -129,7 +125,7 @@ def migrate_db(file: str, schema: str, exclude_tables: List[str] = []): sq = get_sqlite_cursor(file) tables = sq.execute( """ - SELECT name FROM sqlite_master + SELECT name FROM sqlite_master WHERE type='table' AND name not like 'sqlite?_%' escape '?' """ ).fetchall()