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"]
|
||||
mint-cache-secrets: ["false", "true"]
|
||||
mint-only-deprecated: ["false", "true"]
|
||||
# db-url: ["", "postgres://cashu:cashu@localhost:5432/cashu"] # TODO: Postgres test not working
|
||||
db-url: [""]
|
||||
mint-database: ["./test_data/test_mint", "postgres://cashu:cashu@localhost:5432/cashu"]
|
||||
# mint-database: [""]
|
||||
backend-wallet-class: ["FakeWallet"]
|
||||
uses: ./.github/workflows/tests.yml
|
||||
with:
|
||||
@@ -27,6 +27,7 @@ jobs:
|
||||
poetry-version: ${{ matrix.poetry-version }}
|
||||
mint-cache-secrets: ${{ matrix.mint-cache-secrets }}
|
||||
mint-only-deprecated: ${{ matrix.mint-only-deprecated }}
|
||||
mint-database: ${{ matrix.mint-database }}
|
||||
regtest:
|
||||
uses: ./.github/workflows/regtest.yml
|
||||
strategy:
|
||||
@@ -38,3 +39,4 @@ jobs:
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
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:
|
||||
default: "ubuntu-latest"
|
||||
type: string
|
||||
db-url:
|
||||
mint-database:
|
||||
default: ""
|
||||
type: string
|
||||
backend-wallet-class:
|
||||
@@ -23,6 +23,20 @@ jobs:
|
||||
regtest:
|
||||
runs-on: ${{ inputs.os-version }}
|
||||
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:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
@@ -47,7 +61,7 @@ jobs:
|
||||
WALLET_NAME: test_wallet
|
||||
MINT_HOST: localhost
|
||||
MINT_PORT: 3337
|
||||
MINT_DATABASE: ${{ inputs.db-url }}
|
||||
MINT_TEST_DATABASE: ${{ inputs.mint-database }}
|
||||
TOR: false
|
||||
MINT_LIGHTNING_BACKEND: ${{ inputs.backend-wallet-class }}
|
||||
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:
|
||||
default: "1.7.1"
|
||||
type: string
|
||||
db-url:
|
||||
mint-database:
|
||||
default: ""
|
||||
type: string
|
||||
os:
|
||||
@@ -24,7 +24,7 @@ on:
|
||||
|
||||
jobs:
|
||||
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 }}
|
||||
services:
|
||||
postgres:
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
WALLET_NAME: test_wallet
|
||||
MINT_HOST: localhost
|
||||
MINT_PORT: 3337
|
||||
MINT_DATABASE: ${{ inputs.db-url }}
|
||||
MINT_TEST_DATABASE: ${{ inputs.mint-database }}
|
||||
MINT_CACHE_SECRETS: ${{ inputs.mint-cache-secrets }}
|
||||
DEBUG_MINT_ONLY_DEPRECATED: ${{ inputs.mint-only-deprecated }}
|
||||
TOR: false
|
||||
|
||||
@@ -56,6 +56,7 @@ class MintSettings(CashuSettings):
|
||||
mint_listen_port: int = Field(default=3338)
|
||||
mint_lightning_backend: str = Field(default="LNbitsWallet")
|
||||
mint_database: str = Field(default="data/mint")
|
||||
mint_test_database: str = Field(default="test_data/test_mint")
|
||||
mint_peg_out_only: bool = Field(
|
||||
default=False,
|
||||
title="Peg-out only",
|
||||
|
||||
@@ -35,7 +35,7 @@ settings.mint_lightning_backend = settings.mint_lightning_backend or "FakeWallet
|
||||
settings.fakewallet_brr = True
|
||||
settings.fakewallet_delay_payment = 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_list = []
|
||||
settings.mint_private_key = "TEST_PRIVATE_KEY"
|
||||
@@ -100,6 +100,13 @@ async def ledger():
|
||||
db_file = os.path.join(settings.mint_database, "mint.sqlite3")
|
||||
if os.path.exists(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")
|
||||
lightning_backend = getattr(wallets_module, settings.mint_lightning_backend)()
|
||||
backends = {
|
||||
|
||||
@@ -31,6 +31,7 @@ is_fake: bool = WALLET.__class__.__name__ == "FakeWallet"
|
||||
is_regtest: bool = not is_fake
|
||||
is_deprecated_api_only = settings.debug_mint_only_deprecated
|
||||
is_github_actions = os.getenv("GITHUB_ACTIONS") == "true"
|
||||
is_postgres = settings.mint_database.startswith("postgres")
|
||||
|
||||
docker_lightning_cli = [
|
||||
"docker",
|
||||
|
||||
@@ -6,6 +6,7 @@ from cashu.mint.ledger import Ledger
|
||||
from cashu.wallet.wallet import Wallet
|
||||
from cashu.wallet.wallet import Wallet as Wallet1
|
||||
from tests.conftest import SERVER_ENDPOINT
|
||||
from tests.helpers import is_postgres
|
||||
|
||||
|
||||
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.paid_time is None
|
||||
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