mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-20 02:24:20 +01:00
Github CI with Postgres (#417)
* with postgres * postgres test explicit * make format * start postgres only if needed * remove if again * print db * db in matrix * delete schema * use new env var MINT_TEST_DATABASE for tests * add db path to regtest
This commit is contained in:
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -17,8 +17,8 @@ jobs:
|
|||||||
poetry-version: ["1.7.1"]
|
poetry-version: ["1.7.1"]
|
||||||
mint-cache-secrets: ["false", "true"]
|
mint-cache-secrets: ["false", "true"]
|
||||||
mint-only-deprecated: ["false", "true"]
|
mint-only-deprecated: ["false", "true"]
|
||||||
# db-url: ["", "postgres://cashu:cashu@localhost:5432/cashu"] # TODO: Postgres test not working
|
mint-database: ["./test_data/test_mint", "postgres://cashu:cashu@localhost:5432/cashu"]
|
||||||
db-url: [""]
|
# mint-database: [""]
|
||||||
backend-wallet-class: ["FakeWallet"]
|
backend-wallet-class: ["FakeWallet"]
|
||||||
uses: ./.github/workflows/tests.yml
|
uses: ./.github/workflows/tests.yml
|
||||||
with:
|
with:
|
||||||
@@ -27,6 +27,7 @@ jobs:
|
|||||||
poetry-version: ${{ matrix.poetry-version }}
|
poetry-version: ${{ matrix.poetry-version }}
|
||||||
mint-cache-secrets: ${{ matrix.mint-cache-secrets }}
|
mint-cache-secrets: ${{ matrix.mint-cache-secrets }}
|
||||||
mint-only-deprecated: ${{ matrix.mint-only-deprecated }}
|
mint-only-deprecated: ${{ matrix.mint-only-deprecated }}
|
||||||
|
mint-database: ${{ matrix.mint-database }}
|
||||||
regtest:
|
regtest:
|
||||||
uses: ./.github/workflows/regtest.yml
|
uses: ./.github/workflows/regtest.yml
|
||||||
strategy:
|
strategy:
|
||||||
@@ -38,3 +39,4 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
backend-wallet-class: ${{ matrix.backend-wallet-class }}
|
backend-wallet-class: ${{ matrix.backend-wallet-class }}
|
||||||
|
mint-database: "./test_data/test_mint"
|
||||||
|
|||||||
18
.github/workflows/regtest.yml
vendored
18
.github/workflows/regtest.yml
vendored
@@ -12,7 +12,7 @@ on:
|
|||||||
os-version:
|
os-version:
|
||||||
default: "ubuntu-latest"
|
default: "ubuntu-latest"
|
||||||
type: string
|
type: string
|
||||||
db-url:
|
mint-database:
|
||||||
default: ""
|
default: ""
|
||||||
type: string
|
type: string
|
||||||
backend-wallet-class:
|
backend-wallet-class:
|
||||||
@@ -23,6 +23,20 @@ jobs:
|
|||||||
regtest:
|
regtest:
|
||||||
runs-on: ${{ inputs.os-version }}
|
runs-on: ${{ inputs.os-version }}
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:latest
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: cashu
|
||||||
|
POSTGRES_PASSWORD: cashu
|
||||||
|
POSTGRES_DB: cashu
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
options: >-
|
||||||
|
--health-cmd pg_isready
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
@@ -47,7 +61,7 @@ jobs:
|
|||||||
WALLET_NAME: test_wallet
|
WALLET_NAME: test_wallet
|
||||||
MINT_HOST: localhost
|
MINT_HOST: localhost
|
||||||
MINT_PORT: 3337
|
MINT_PORT: 3337
|
||||||
MINT_DATABASE: ${{ inputs.db-url }}
|
MINT_TEST_DATABASE: ${{ inputs.mint-database }}
|
||||||
TOR: false
|
TOR: false
|
||||||
MINT_LIGHTNING_BACKEND: ${{ inputs.backend-wallet-class }}
|
MINT_LIGHTNING_BACKEND: ${{ inputs.backend-wallet-class }}
|
||||||
MINT_LNBITS_ENDPOINT: http://localhost:5001
|
MINT_LNBITS_ENDPOINT: http://localhost:5001
|
||||||
|
|||||||
6
.github/workflows/tests.yml
vendored
6
.github/workflows/tests.yml
vendored
@@ -9,7 +9,7 @@ on:
|
|||||||
poetry-version:
|
poetry-version:
|
||||||
default: "1.7.1"
|
default: "1.7.1"
|
||||||
type: string
|
type: string
|
||||||
db-url:
|
mint-database:
|
||||||
default: ""
|
default: ""
|
||||||
type: string
|
type: string
|
||||||
os:
|
os:
|
||||||
@@ -24,7 +24,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
poetry:
|
poetry:
|
||||||
name: Run (mint-cache-secrets ${{ inputs.mint-cache-secrets }}, mint-only-deprecated ${{ inputs.mint-only-deprecated }})
|
name: Run (mint-cache-secrets ${{ inputs.mint-cache-secrets }}, mint-only-deprecated ${{ inputs.mint-only-deprecated }}, mint-database ${{ inputs.mint-database }})
|
||||||
runs-on: ${{ inputs.os }}
|
runs-on: ${{ inputs.os }}
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
WALLET_NAME: test_wallet
|
WALLET_NAME: test_wallet
|
||||||
MINT_HOST: localhost
|
MINT_HOST: localhost
|
||||||
MINT_PORT: 3337
|
MINT_PORT: 3337
|
||||||
MINT_DATABASE: ${{ inputs.db-url }}
|
MINT_TEST_DATABASE: ${{ inputs.mint-database }}
|
||||||
MINT_CACHE_SECRETS: ${{ inputs.mint-cache-secrets }}
|
MINT_CACHE_SECRETS: ${{ inputs.mint-cache-secrets }}
|
||||||
DEBUG_MINT_ONLY_DEPRECATED: ${{ inputs.mint-only-deprecated }}
|
DEBUG_MINT_ONLY_DEPRECATED: ${{ inputs.mint-only-deprecated }}
|
||||||
TOR: false
|
TOR: false
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class MintSettings(CashuSettings):
|
|||||||
mint_listen_port: int = Field(default=3338)
|
mint_listen_port: int = Field(default=3338)
|
||||||
mint_lightning_backend: str = Field(default="LNbitsWallet")
|
mint_lightning_backend: str = Field(default="LNbitsWallet")
|
||||||
mint_database: str = Field(default="data/mint")
|
mint_database: str = Field(default="data/mint")
|
||||||
|
mint_test_database: str = Field(default="test_data/test_mint")
|
||||||
mint_peg_out_only: bool = Field(
|
mint_peg_out_only: bool = Field(
|
||||||
default=False,
|
default=False,
|
||||||
title="Peg-out only",
|
title="Peg-out only",
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ settings.mint_lightning_backend = settings.mint_lightning_backend or "FakeWallet
|
|||||||
settings.fakewallet_brr = True
|
settings.fakewallet_brr = True
|
||||||
settings.fakewallet_delay_payment = False
|
settings.fakewallet_delay_payment = False
|
||||||
settings.fakewallet_stochastic_invoice = False
|
settings.fakewallet_stochastic_invoice = False
|
||||||
settings.mint_database = "./test_data/test_mint"
|
settings.mint_database = settings.mint_test_database
|
||||||
settings.mint_derivation_path = "m/0'/0'/0'"
|
settings.mint_derivation_path = "m/0'/0'/0'"
|
||||||
settings.mint_derivation_path_list = []
|
settings.mint_derivation_path_list = []
|
||||||
settings.mint_private_key = "TEST_PRIVATE_KEY"
|
settings.mint_private_key = "TEST_PRIVATE_KEY"
|
||||||
@@ -100,6 +100,13 @@ async def ledger():
|
|||||||
db_file = os.path.join(settings.mint_database, "mint.sqlite3")
|
db_file = os.path.join(settings.mint_database, "mint.sqlite3")
|
||||||
if os.path.exists(db_file):
|
if os.path.exists(db_file):
|
||||||
os.remove(db_file)
|
os.remove(db_file)
|
||||||
|
else:
|
||||||
|
# clear postgres database
|
||||||
|
db = Database("mint", settings.mint_database)
|
||||||
|
async with db.connect() as conn:
|
||||||
|
await conn.execute("DROP SCHEMA public CASCADE;")
|
||||||
|
await conn.execute("CREATE SCHEMA public;")
|
||||||
|
|
||||||
wallets_module = importlib.import_module("cashu.lightning")
|
wallets_module = importlib.import_module("cashu.lightning")
|
||||||
lightning_backend = getattr(wallets_module, settings.mint_lightning_backend)()
|
lightning_backend = getattr(wallets_module, settings.mint_lightning_backend)()
|
||||||
backends = {
|
backends = {
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ is_fake: bool = WALLET.__class__.__name__ == "FakeWallet"
|
|||||||
is_regtest: bool = not is_fake
|
is_regtest: bool = not is_fake
|
||||||
is_deprecated_api_only = settings.debug_mint_only_deprecated
|
is_deprecated_api_only = settings.debug_mint_only_deprecated
|
||||||
is_github_actions = os.getenv("GITHUB_ACTIONS") == "true"
|
is_github_actions = os.getenv("GITHUB_ACTIONS") == "true"
|
||||||
|
is_postgres = settings.mint_database.startswith("postgres")
|
||||||
|
|
||||||
docker_lightning_cli = [
|
docker_lightning_cli = [
|
||||||
"docker",
|
"docker",
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from cashu.mint.ledger import Ledger
|
|||||||
from cashu.wallet.wallet import Wallet
|
from cashu.wallet.wallet import Wallet
|
||||||
from cashu.wallet.wallet import Wallet as Wallet1
|
from cashu.wallet.wallet import Wallet as Wallet1
|
||||||
from tests.conftest import SERVER_ENDPOINT
|
from tests.conftest import SERVER_ENDPOINT
|
||||||
|
from tests.helpers import is_postgres
|
||||||
|
|
||||||
|
|
||||||
async def assert_err(f, msg):
|
async def assert_err(f, msg):
|
||||||
@@ -61,3 +62,10 @@ async def test_melt_quote(wallet1: Wallet, ledger: Ledger):
|
|||||||
assert quote.checking_id == invoice.payment_hash
|
assert quote.checking_id == invoice.payment_hash
|
||||||
assert quote.paid_time is None
|
assert quote.paid_time is None
|
||||||
assert quote.created_time
|
assert quote.created_time
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
@pytest.mark.skipif(not is_postgres, reason="only works with Postgres")
|
||||||
|
async def test_postgres_working():
|
||||||
|
assert is_postgres
|
||||||
|
assert True
|
||||||
|
|||||||
Reference in New Issue
Block a user