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 8e72cf62..90006d2a 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 d91d0421..20fe65ce 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 0ceb9cb3..cd81a021 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 cc5b96a9..6de893ad 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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 Jh9i+6MF1aHc+da< diff --git a/tools/conv.py b/tools/conv.py index 10e8c9cd..5084660f 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()