diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4a13e9552..ddef42f1b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -38,7 +38,7 @@ jobs: - name: Build and push production RPC image uses: docker/build-push-action@v5 with: - file: images/rpc/Dockerfile_prod + file: resources/images/rpc/Dockerfile_prod platforms: linux/amd64,linux/arm64 context: . push: true @@ -50,7 +50,7 @@ jobs: if: github.ref == 'refs/heads/main' uses: docker/build-push-action@v5 with: - file: images/rpc/Dockerfile_dev + file: resources/images/rpc/Dockerfile_dev platforms: linux/amd64,linux/arm64 context: . push: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7bb2d5a6a..348551aac 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,7 +35,7 @@ jobs: - name: Build and export uses: docker/build-push-action@v5 with: - file: images/rpc/Dockerfile_prod + file: resources/images/rpc/Dockerfile_prod context: . tags: warnet/dev cache-from: type=gha @@ -74,13 +74,13 @@ jobs: uv pip install -e . echo "Contents of warnet-rpc-statefulset-dev.yaml being used:" - cat manifests/warnet-rpc-statefulset-dev.yaml + cat resources/manifests/warnet-rpc-statefulset-dev.yaml echo Setting up k8s - kubectl apply -f manifests/namespace.yaml - kubectl apply -f manifests/rbac-config.yaml - kubectl apply -f manifests/warnet-rpc-service.yaml - kubectl apply -f manifests/warnet-rpc-statefulset-dev.yaml + kubectl apply -f resources/manifests/namespace.yaml + kubectl apply -f resources/manifests/rbac-config.yaml + kubectl apply -f resources/manifests/warnet-rpc-service.yaml + kubectl apply -f resources/manifests/warnet-rpc-statefulset-dev.yaml kubectl config set-context --current --namespace=warnet echo sleeping for 30s to give k8s time to boot diff --git a/MANIFEST.in b/MANIFEST.in index 5ce90e3e6..e96af9d3b 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,2 @@ include src/warnet/*.json -graft images -graft manifests -graft scripts +graft resources diff --git a/pyproject.toml b/pyproject.toml index 2e4b24432..729c797eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,8 +32,11 @@ build-backend = "setuptools.build_meta" [tool.setuptools.dynamic] dependencies = {file = ["requirements.txt"]} +[tool.setuptools] +include-package-data = true + [tool.setuptools.packages.find] -where = ["src"] +where = ["src", "resources"] [tool.ruff] extend-exclude = [ diff --git a/resources/__init__.py b/resources/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/resources/graphs/__init__.py b/resources/graphs/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/graphs/default.graphml b/resources/graphs/default.graphml similarity index 100% rename from graphs/default.graphml rename to resources/graphs/default.graphml diff --git a/resources/images/__init__.py b/resources/images/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/images/bitcoin/Dockerfile b/resources/images/bitcoin/Dockerfile similarity index 100% rename from images/bitcoin/Dockerfile rename to resources/images/bitcoin/Dockerfile diff --git a/images/bitcoin/addrman.patch b/resources/images/bitcoin/addrman.patch similarity index 100% rename from images/bitcoin/addrman.patch rename to resources/images/bitcoin/addrman.patch diff --git a/images/bitcoin/entrypoint.sh b/resources/images/bitcoin/entrypoint.sh similarity index 100% rename from images/bitcoin/entrypoint.sh rename to resources/images/bitcoin/entrypoint.sh diff --git a/images/bitcoin/isroutable.patch b/resources/images/bitcoin/isroutable.patch similarity index 100% rename from images/bitcoin/isroutable.patch rename to resources/images/bitcoin/isroutable.patch diff --git a/images/rpc/Dockerfile_dev b/resources/images/rpc/Dockerfile_dev similarity index 100% rename from images/rpc/Dockerfile_dev rename to resources/images/rpc/Dockerfile_dev diff --git a/images/rpc/Dockerfile_prod b/resources/images/rpc/Dockerfile_prod similarity index 100% rename from images/rpc/Dockerfile_prod rename to resources/images/rpc/Dockerfile_prod diff --git a/images/rpc/Dockerfile_rpc.dockerignore b/resources/images/rpc/Dockerfile_rpc.dockerignore similarity index 100% rename from images/rpc/Dockerfile_rpc.dockerignore rename to resources/images/rpc/Dockerfile_rpc.dockerignore diff --git a/images/rpc/entrypoint.sh b/resources/images/rpc/entrypoint.sh similarity index 100% rename from images/rpc/entrypoint.sh rename to resources/images/rpc/entrypoint.sh diff --git a/images/sidecar/Dockerfile b/resources/images/sidecar/Dockerfile similarity index 100% rename from images/sidecar/Dockerfile rename to resources/images/sidecar/Dockerfile diff --git a/images/tor/Dockerfile_tor_da b/resources/images/tor/Dockerfile_tor_da similarity index 100% rename from images/tor/Dockerfile_tor_da rename to resources/images/tor/Dockerfile_tor_da diff --git a/images/tor/Dockerfile_tor_relay b/resources/images/tor/Dockerfile_tor_relay similarity index 100% rename from images/tor/Dockerfile_tor_relay rename to resources/images/tor/Dockerfile_tor_relay diff --git a/images/tor/tor-entrypoint.sh b/resources/images/tor/tor-entrypoint.sh similarity index 100% rename from images/tor/tor-entrypoint.sh rename to resources/images/tor/tor-entrypoint.sh diff --git a/images/tor/tor-keys/authority_certificate b/resources/images/tor/tor-keys/authority_certificate similarity index 100% rename from images/tor/tor-keys/authority_certificate rename to resources/images/tor/tor-keys/authority_certificate diff --git a/images/tor/tor-keys/authority_identity_key b/resources/images/tor/tor-keys/authority_identity_key similarity index 100% rename from images/tor/tor-keys/authority_identity_key rename to resources/images/tor/tor-keys/authority_identity_key diff --git a/images/tor/tor-keys/authority_signing_key b/resources/images/tor/tor-keys/authority_signing_key similarity index 100% rename from images/tor/tor-keys/authority_signing_key rename to resources/images/tor/tor-keys/authority_signing_key diff --git a/images/tor/tor-keys/ed25519_master_id_public_key b/resources/images/tor/tor-keys/ed25519_master_id_public_key similarity index 100% rename from images/tor/tor-keys/ed25519_master_id_public_key rename to resources/images/tor/tor-keys/ed25519_master_id_public_key diff --git a/images/tor/tor-keys/ed25519_master_id_secret_key b/resources/images/tor/tor-keys/ed25519_master_id_secret_key similarity index 100% rename from images/tor/tor-keys/ed25519_master_id_secret_key rename to resources/images/tor/tor-keys/ed25519_master_id_secret_key diff --git a/images/tor/tor-keys/ed25519_signing_cert b/resources/images/tor/tor-keys/ed25519_signing_cert similarity index 100% rename from images/tor/tor-keys/ed25519_signing_cert rename to resources/images/tor/tor-keys/ed25519_signing_cert diff --git a/images/tor/tor-keys/ed25519_signing_secret_key b/resources/images/tor/tor-keys/ed25519_signing_secret_key similarity index 100% rename from images/tor/tor-keys/ed25519_signing_secret_key rename to resources/images/tor/tor-keys/ed25519_signing_secret_key diff --git a/images/tor/tor-keys/secret_id_key b/resources/images/tor/tor-keys/secret_id_key similarity index 100% rename from images/tor/tor-keys/secret_id_key rename to resources/images/tor/tor-keys/secret_id_key diff --git a/images/tor/tor-keys/secret_onion_key b/resources/images/tor/tor-keys/secret_onion_key similarity index 100% rename from images/tor/tor-keys/secret_onion_key rename to resources/images/tor/tor-keys/secret_onion_key diff --git a/images/tor/tor-keys/secret_onion_key_ntor b/resources/images/tor/tor-keys/secret_onion_key_ntor similarity index 100% rename from images/tor/tor-keys/secret_onion_key_ntor rename to resources/images/tor/tor-keys/secret_onion_key_ntor diff --git a/images/tor/torrc b/resources/images/tor/torrc similarity index 100% rename from images/tor/torrc rename to resources/images/tor/torrc diff --git a/images/tor/torrc.da b/resources/images/tor/torrc.da similarity index 100% rename from images/tor/torrc.da rename to resources/images/tor/torrc.da diff --git a/images/tor/torrc.relay b/resources/images/tor/torrc.relay similarity index 100% rename from images/tor/torrc.relay rename to resources/images/tor/torrc.relay diff --git a/resources/manifests/__init__.py b/resources/manifests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/manifests/grafana_values.yaml b/resources/manifests/grafana_values.yaml similarity index 100% rename from manifests/grafana_values.yaml rename to resources/manifests/grafana_values.yaml diff --git a/manifests/loki_values.yaml b/resources/manifests/loki_values.yaml similarity index 100% rename from manifests/loki_values.yaml rename to resources/manifests/loki_values.yaml diff --git a/manifests/namespace.yaml b/resources/manifests/namespace.yaml similarity index 100% rename from manifests/namespace.yaml rename to resources/manifests/namespace.yaml diff --git a/manifests/rbac-config.yaml b/resources/manifests/rbac-config.yaml similarity index 100% rename from manifests/rbac-config.yaml rename to resources/manifests/rbac-config.yaml diff --git a/manifests/warnet-rpc-service.yaml b/resources/manifests/warnet-rpc-service.yaml similarity index 100% rename from manifests/warnet-rpc-service.yaml rename to resources/manifests/warnet-rpc-service.yaml diff --git a/manifests/warnet-rpc-statefulset-dev.yaml b/resources/manifests/warnet-rpc-statefulset-dev.yaml similarity index 100% rename from manifests/warnet-rpc-statefulset-dev.yaml rename to resources/manifests/warnet-rpc-statefulset-dev.yaml diff --git a/manifests/warnet-rpc-statefulset.yaml b/resources/manifests/warnet-rpc-statefulset.yaml similarity index 100% rename from manifests/warnet-rpc-statefulset.yaml rename to resources/manifests/warnet-rpc-statefulset.yaml diff --git a/resources/scripts/__init__.py b/resources/scripts/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/apidocs.py b/resources/scripts/apidocs.py similarity index 100% rename from scripts/apidocs.py rename to resources/scripts/apidocs.py diff --git a/scripts/build-k8s-rpc.sh b/resources/scripts/build-k8s-rpc.sh similarity index 100% rename from scripts/build-k8s-rpc.sh rename to resources/scripts/build-k8s-rpc.sh diff --git a/scripts/connect_logging.sh b/resources/scripts/connect_logging.sh similarity index 100% rename from scripts/connect_logging.sh rename to resources/scripts/connect_logging.sh diff --git a/scripts/graphdocs.py b/resources/scripts/graphdocs.py similarity index 100% rename from scripts/graphdocs.py rename to resources/scripts/graphdocs.py diff --git a/scripts/install_logging.sh b/resources/scripts/install_logging.sh similarity index 100% rename from scripts/install_logging.sh rename to resources/scripts/install_logging.sh diff --git a/scripts/quick_start.sh b/resources/scripts/quick_start.sh similarity index 100% rename from scripts/quick_start.sh rename to resources/scripts/quick_start.sh diff --git a/src/warnet/__init__.py b/src/warnet/__init__.py index fa3d8a33f..db25872f7 100644 --- a/src/warnet/__init__.py +++ b/src/warnet/__init__.py @@ -1,3 +1,3 @@ -from pathlib import Path +from importlib.resources import files -SRC_DIR = Path(__file__).parent +SRC_DIR = files("warnet") diff --git a/src/warnet/cli/cluster.py b/src/warnet/cli/cluster.py index 7f50b4eb0..74a9f99a5 100644 --- a/src/warnet/cli/cluster.py +++ b/src/warnet/cli/cluster.py @@ -1,10 +1,13 @@ import os import subprocess import sys -from pathlib import Path +from importlib.resources import files import click +MANIFEST_PATH = files("manifests") +RPC_PATH = files("images").joinpath("rpc") + @click.group(name="cluster", chain=True) def cluster(): @@ -52,24 +55,20 @@ def run_command(command, stream_output=False): @cluster.command() def minikube_setup(): """Setup minikube for use with Warnet""" - template_path = ( - Path(os.path.dirname(os.path.abspath(__file__))) / ".." / ".." / ".." / "manifests" / "rpc" - ) - script_content = f""" #!/usr/bin/env bash set -euxo pipefail # Function to check if minikube is running check_minikube() {{ - minikube status | grep -q "Running" && echo "Minikube is already running" || minikube start --memory=max --cpus=max --mount --mount-string="$PWD:/mnt/src" + minikube status | grep -q "Running" && echo "Minikube is already running" || minikube start --memory=4000mb --cpus=4 --mount --mount-string="$PWD:/mnt/src" }} # Check minikube status check_minikube # Build image in local registry and load into minikube - docker build -t warnet/dev -f {template_path}/Dockerfile_dev {template_path} --load + docker build -t warnet/dev -f {RPC_PATH}/Dockerfile_dev {RPC_PATH} --load minikube image load warnet/dev """ @@ -79,23 +78,23 @@ def minikube_setup(): @cluster.command() def deploy(): """Setup Warnet using the current kubectl-configured cluster""" - script_content = """ + script_content = f""" #!/usr/bin/env bash set -euxo pipefail # Function to check if warnet-rpc container is already running - check_warnet_rpc() { + check_warnet_rpc() {{ if kubectl get pods --all-namespaces | grep -q "bitcoindevproject/warnet-rpc"; then echo "warnet-rpc already running in minikube" exit 1 fi - } + }} # Setup K8s - kubectl apply -f manifests/namespace.yaml - kubectl apply -f manifests/rbac-config.yaml - kubectl apply -f manifests/warnet-rpc-service.yaml - kubectl apply -f manifests/warnet-rpc-statefulset-dev.yaml + kubectl apply -f {MANIFEST_PATH}/namespace.yaml + kubectl apply -f {MANIFEST_PATH}/rbac-config.yaml + kubectl apply -f {MANIFEST_PATH}/warnet-rpc-service.yaml + kubectl apply -f {MANIFEST_PATH}/warnet-rpc-statefulset-dev.yaml kubectl config set-context --current --namespace=warnet # Check for warnet-rpc container diff --git a/src/warnet/cli/image_build.py b/src/warnet/cli/image_build.py index 860418d43..ace12a78d 100644 --- a/src/warnet/cli/image_build.py +++ b/src/warnet/cli/image_build.py @@ -1,18 +1,9 @@ -import os import subprocess -from pathlib import Path +from importlib.resources import files ARCHES = ["amd64", "arm64", "armhf"] -dockerfile_path = ( - Path(os.path.dirname(os.path.abspath(__file__))) - / ".." - / ".." - / ".." - / "images" - / "bitcoin" - / "Dockerfile" -) +dockerfile_path = files("images.bitcoin").joinpath("Dockerfile") def run_command(command): diff --git a/src/warnet/cli/network.py b/src/warnet/cli/network.py index 09d19dd58..29039420b 100644 --- a/src/warnet/cli/network.py +++ b/src/warnet/cli/network.py @@ -1,7 +1,7 @@ import base64 # noqa: I001 import json -import os from pathlib import Path +from importlib.resources import files import click from rich import print @@ -10,14 +10,8 @@ from .rpc import rpc_call # noqa: I001 -DEFAULT_GRAPH_FILE = ( - Path(os.path.dirname(os.path.abspath(__file__))) - / ".." - / ".." - / ".." - / "graphs" - / "default.graphml" -) + +DEFAULT_GRAPH_FILE = files("graphs").joinpath("default.graphml") def print_repr(wn: dict) -> None: diff --git a/src/warnet/server.py b/src/warnet/server.py index d4bb6e842..13066482c 100644 --- a/src/warnet/server.py +++ b/src/warnet/server.py @@ -73,7 +73,7 @@ def __init__(self): def setup_global_exception_handler(self): """ - Use flask to log traceback of unhandled excpetions + Use flask to log traceback of unhandled exceptions """ @self.app.errorhandler(Exception)