From a6db8a5209940ddd99e532e19c3b5b522b34c377 Mon Sep 17 00:00:00 2001 From: Earle Lowe Date: Wed, 8 Nov 2023 11:37:18 -0800 Subject: [PATCH 01/10] feat: support logging to log file or stdout --- app/api/dependencies.py | 4 +- app/api/v1/activities.py | 3 +- app/api/v1/cron.py | 3 +- app/api/v1/tokens.py | 3 +- app/config.py | 4 +- app/core/climate_wallet/wallet.py | 4 +- app/core/utils.py | 4 +- app/crud/chia.py | 3 +- app/crud/db.py | 4 +- app/logger.py | 62 +++++++++++++++++++++++-------- app/main.py | 11 ++++-- app/utils.py | 4 +- 12 files changed, 79 insertions(+), 30 deletions(-) diff --git a/app/api/dependencies.py b/app/api/dependencies.py index 6751d06..e172ba7 100644 --- a/app/api/dependencies.py +++ b/app/api/dependencies.py @@ -1,6 +1,7 @@ from __future__ import annotations import enum +import logging from contextlib import asynccontextmanager from pathlib import Path from typing import AsyncGenerator, AsyncIterator @@ -15,7 +16,8 @@ from app.config import settings from app.db.session import get_session_local_cls -from app.logger import logger + +logger = logging.getLogger("ClimateToken") @asynccontextmanager diff --git a/app/api/v1/activities.py b/app/api/v1/activities.py index 308797a..9b5df78 100644 --- a/app/api/v1/activities.py +++ b/app/api/v1/activities.py @@ -1,3 +1,4 @@ +import logging from typing import Any, Dict, List, Optional from fastapi import APIRouter, Depends @@ -10,10 +11,10 @@ from app.config import ExecutionMode, settings from app.core.types import GatewayMode from app.errors import ErrorCode -from app.logger import logger from app.utils import disallow router = APIRouter() +logger = logging.getLogger("ClimateToken") @router.get("/", response_model=schemas.ActivitiesResponse) diff --git a/app/api/v1/cron.py b/app/api/v1/cron.py index dd073f0..3f566aa 100644 --- a/app/api/v1/cron.py +++ b/app/api/v1/cron.py @@ -1,6 +1,7 @@ from __future__ import annotations import asyncio +import logging from typing import List from blspy import G1Element @@ -18,13 +19,13 @@ from app.db.base import Base from app.db.session import get_engine_cls from app.errors import ErrorCode -from app.logger import logger from app.models import State from app.utils import disallow router = APIRouter() errorcode = ErrorCode() lock = asyncio.Lock() +logger = logging.getLogger("ClimateToken") @router.on_event("startup") diff --git a/app/api/v1/tokens.py b/app/api/v1/tokens.py index b5d572a..1159e50 100644 --- a/app/api/v1/tokens.py +++ b/app/api/v1/tokens.py @@ -1,4 +1,5 @@ import json +import logging from typing import Any, Dict, Tuple from blspy import G1Element, G2Element @@ -15,10 +16,10 @@ from app.core import utils from app.core.climate_wallet.wallet import ClimateWallet from app.core.types import ClimateTokenIndex, GatewayMode -from app.logger import logger from app.utils import disallow router = APIRouter() +logger = logging.getLogger("ClimateToken") @router.post( diff --git a/app/config.py b/app/config.py index acb02c5..6aaf321 100644 --- a/app/config.py +++ b/app/config.py @@ -1,6 +1,7 @@ from __future__ import annotations import enum +import logging import shutil import sys from pathlib import Path @@ -9,6 +10,8 @@ import yaml from pydantic import BaseSettings, root_validator, validator +logger = logging.getLogger("ClimateToken") + class ExecutionMode(enum.Enum): DEV = "dev" @@ -79,7 +82,6 @@ def configure_port(cls, values: Dict[str, Any]) -> Dict[str, Any]: else: raise ValueError(f"Invalid mode {values['MODE']}!") - print(f"Set SERVER_PORT to {values['SERVER_PORT']}") return values @validator("CHIA_ROOT", pre=True) diff --git a/app/core/climate_wallet/wallet.py b/app/core/climate_wallet/wallet.py index 6534e2d..1cbcae6 100644 --- a/app/core/climate_wallet/wallet.py +++ b/app/core/climate_wallet/wallet.py @@ -1,6 +1,7 @@ from __future__ import annotations import dataclasses +import logging import time from typing import Any, Dict, Iterator, List, Optional, Tuple, Union @@ -36,7 +37,8 @@ from app.core.derive_keys import root_sk_to_gateway_sk from app.core.types import CLIMATE_WALLET_INDEX, ClimateTokenIndex, GatewayMode, TransactionRequest from app.core.utils import get_constants, get_created_signed_transactions, get_first_puzzle_hash, get_wallet_info_by_id -from app.logger import logger + +logger = logging.getLogger("ClimateToken") @dataclasses.dataclass diff --git a/app/core/utils.py b/app/core/utils.py index da787a4..b119fda 100644 --- a/app/core/utils.py +++ b/app/core/utils.py @@ -1,5 +1,6 @@ from __future__ import annotations +import logging from typing import Any, Dict, List, Optional from blspy import G1Element, PrivateKey @@ -20,7 +21,8 @@ from app.core.derive_keys import master_sk_to_root_sk from app.core.types import TransactionRequest -from app.logger import logger + +logger = logging.getLogger("ClimateToken") async def get_constants( diff --git a/app/crud/chia.py b/app/crud/chia.py index 68e910a..5b746d1 100644 --- a/app/crud/chia.py +++ b/app/crud/chia.py @@ -2,6 +2,7 @@ import dataclasses import json +import logging from typing import Any, Dict, List, Optional from urllib.parse import urlencode, urlparse @@ -17,9 +18,9 @@ from app.core.climate_wallet.wallet import ClimateObserverWallet from app.core.types import ClimateTokenIndex, GatewayMode from app.errors import ErrorCode -from app.logger import logger error_code = ErrorCode() +logger = logging.getLogger("ClimateToken") @dataclasses.dataclass diff --git a/app/crud/db.py b/app/crud/db.py index 46c3f00..a6dafdc 100644 --- a/app/crud/db.py +++ b/app/crud/db.py @@ -1,6 +1,7 @@ from __future__ import annotations import dataclasses +import logging from typing import Any, AnyStr, List, Optional, Tuple from fastapi.encoders import jsonable_encoder @@ -10,7 +11,8 @@ from app import models, schemas from app.db.base import Base from app.errors import ErrorCode -from app.logger import logger + +logger = logging.getLogger("ClimateToken") errorcode = ErrorCode() diff --git a/app/logger.py b/app/logger.py index 5caddf3..72fdef3 100644 --- a/app/logger.py +++ b/app/logger.py @@ -1,24 +1,54 @@ from __future__ import annotations import logging +from typing import Any, Dict +import colorlog import uvicorn +from concurrent_log_handler import ConcurrentRotatingFileHandler from app.config import settings -logging.basicConfig( - level=logging.INFO, - filename=settings.LOG_PATH, - format="%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s", - filemode="w", -) - -logger = logging.getLogger("uvicorn.error") -log_config = uvicorn.config.LOGGING_CONFIG - -log_config["formatters"]["default"].update( - { - "fmt": "%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s", - "datefmt": "%Y-%m-%d:%H:%M:%S", - } -) + +def get_file_log_handler(formatter: logging.Formatter) -> ConcurrentRotatingFileHandler: + log_path = settings.LOG_PATH + log_path.parent.mkdir(parents=True, exist_ok=True) + handler = ConcurrentRotatingFileHandler(log_path, "a", maxBytes=50 * 1024 * 1024, backupCount=7, use_gzip=False) + handler.setFormatter(formatter) + return handler + + +def initialize_logging() -> Dict[str, Any]: + log_date_format = "%Y-%m-%dT%H:%M:%S" + file_log_formatter = logging.Formatter( + fmt="%(asctime)s.%(msecs)03d %(name)s: %(levelname)-8s %(message)s", + datefmt=log_date_format, + ) + root_logger = logging.getLogger() + root_logger.setLevel(logging.INFO) + if settings.LOG_PATH.name == "stdout": + stdout_handler = colorlog.StreamHandler() + stdout_handler.setFormatter( + colorlog.ColoredFormatter( + "%(asctime)s.%(msecs)03d %(name)s: %(log_color)s%(levelname)-8s%(reset)s %(message)s", + datefmt=log_date_format, + reset=True, + ) + ) + root_logger.addHandler(stdout_handler) + else: + root_logger + root_logger.addHandler(get_file_log_handler(file_log_formatter)) + + logger = logging.getLogger("ClimateToken") + logger.info("Logging initialized") + + # Configure uvicorn logging + log_config = uvicorn.config.LOGGING_CONFIG + log_config["formatters"]["default"].update( + { + "fmt": "%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s", + "datefmt": "%Y-%m-%d:%H:%M:%S", + } + ) + return log_config diff --git a/app/main.py b/app/main.py index e61b17b..4b46941 100644 --- a/app/main.py +++ b/app/main.py @@ -1,5 +1,6 @@ from __future__ import annotations +import logging import sys import traceback @@ -11,7 +12,7 @@ from app.api import v1 from app.config import ExecutionMode, settings -from app.logger import log_config, logger +from app.logger import initialize_logging from app.utils import wait_until_dir_exists app = FastAPI( @@ -38,6 +39,8 @@ async def exception_handler(request: Request, e: Exception) -> Response: if __name__ == "__main__": + uvicorn_log_config = initialize_logging() + logger = logging.getLogger("ClimateToken") logger.info(f"Using settings {settings.dict()}") wait_until_dir_exists(str(settings.CHIA_ROOT)) @@ -52,7 +55,7 @@ async def exception_handler(request: Request, e: Exception) -> Response: elif settings.MODE == ExecutionMode.CLIENT: server_host = "127.0.0.1" else: - print(f"Invalid mode {settings.MODE}!") + logger.error(f"Invalid mode {settings.MODE}!") sys.exit(1) if settings.MODE in [ExecutionMode.EXPLORER, ExecutionMode.DEV] or server_host in [ @@ -64,8 +67,8 @@ async def exception_handler(request: Request, e: Exception) -> Response: host=server_host, port=settings.SERVER_PORT, log_level="info", - log_config=log_config, + log_config=uvicorn_log_config, ) else: - print(f"Climate Token Driver can only run on localhost in {settings.MODE.name} mode.") + logger.error(f"Climate Token Driver can only run on localhost in {settings.MODE.name} mode.") sys.exit(1) diff --git a/app/utils.py b/app/utils.py index 2218da7..4952bf5 100644 --- a/app/utils.py +++ b/app/utils.py @@ -1,6 +1,7 @@ from __future__ import annotations import functools +import logging import os import time from typing import Callable, List @@ -8,7 +9,8 @@ from fastapi import status from app.config import ExecutionMode, settings -from app.logger import logger + +logger = logging.getLogger("ClimateToken") # from typing import Any, Callable, Concatenate, Coroutine, List, ParamSpec, TypeVar From a58c7a08ef27a1368cdd422f5a29f9e87d4a3295 Mon Sep 17 00:00:00 2001 From: William Wills Date: Fri, 29 Nov 2024 17:14:01 -0500 Subject: [PATCH 02/10] fix: merge inconsistencies --- app/logger.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/app/logger.py b/app/logger.py index 5e524a1..4864c9a 100644 --- a/app/logger.py +++ b/app/logger.py @@ -15,13 +15,6 @@ # Define the log format with version log_format = f"%(asctime)s,%(msecs)d {version} %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s" -logging.basicConfig( - level=logging.INFO, - filename=settings.LOG_PATH, - format=log_format, - filemode="w", -) - def get_file_log_handler(formatter: logging.Formatter) -> ConcurrentRotatingFileHandler: log_path = settings.LOG_PATH log_path.parent.mkdir(parents=True, exist_ok=True) @@ -52,15 +45,6 @@ def initialize_logging() -> Dict[str, Any]: root_logger root_logger.addHandler(get_file_log_handler(file_log_formatter)) -logger = logging.getLogger("uvicorn.error") -log_config = uvicorn.config.LOGGING_CONFIG - -log_config["formatters"]["default"].update( - { - "fmt": log_format, - "datefmt": "%Y-%m-%d:%H:%M:%S", - } -) logger = logging.getLogger("ClimateToken") logger.info("Logging initialized") @@ -72,4 +56,4 @@ def initialize_logging() -> Dict[str, Any]: "datefmt": "%Y-%m-%d:%H:%M:%S", } ) - return log_config + return log_config \ No newline at end of file From 9a5440c2c4b966222cfed0c52ca018be1e5b386c Mon Sep 17 00:00:00 2001 From: William Wills Date: Thu, 5 Dec 2024 11:18:13 -0500 Subject: [PATCH 03/10] fix: linter errors --- app/logger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/logger.py b/app/logger.py index 4864c9a..b605085 100644 --- a/app/logger.py +++ b/app/logger.py @@ -18,11 +18,11 @@ def get_file_log_handler(formatter: logging.Formatter) -> ConcurrentRotatingFileHandler: log_path = settings.LOG_PATH log_path.parent.mkdir(parents=True, exist_ok=True) - handler = ConcurrentRotatingFileHandler(log_path, "a", maxBytes=50 * 1024 * 1024, backupCount=7, use_gzip=False) + handler = ConcurrentRotatingFileHandler(str(log_path.resolve()), "a", maxBytes=50 * 1024 * 1024, backupCount=7, use_gzip=False) handler.setFormatter(formatter) return handler - +# type: ignore def initialize_logging() -> Dict[str, Any]: log_date_format = "%Y-%m-%dT%H:%M:%S" file_log_formatter = logging.Formatter( From 50f4a88de6cbd84540602094b1a329197017ec87 Mon Sep 17 00:00:00 2001 From: William Wills Date: Thu, 5 Dec 2024 11:18:13 -0500 Subject: [PATCH 04/10] fix: linter errors --- app/logger.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/logger.py b/app/logger.py index 4864c9a..9bd2353 100644 --- a/app/logger.py +++ b/app/logger.py @@ -18,11 +18,10 @@ def get_file_log_handler(formatter: logging.Formatter) -> ConcurrentRotatingFileHandler: log_path = settings.LOG_PATH log_path.parent.mkdir(parents=True, exist_ok=True) - handler = ConcurrentRotatingFileHandler(log_path, "a", maxBytes=50 * 1024 * 1024, backupCount=7, use_gzip=False) + handler = ConcurrentRotatingFileHandler(str(log_path.resolve()), "a", maxBytes=50 * 1024 * 1024, backupCount=7, use_gzip=False) handler.setFormatter(formatter) return handler - def initialize_logging() -> Dict[str, Any]: log_date_format = "%Y-%m-%dT%H:%M:%S" file_log_formatter = logging.Formatter( @@ -42,7 +41,6 @@ def initialize_logging() -> Dict[str, Any]: ) root_logger.addHandler(stdout_handler) else: - root_logger root_logger.addHandler(get_file_log_handler(file_log_formatter)) logger = logging.getLogger("ClimateToken") @@ -56,4 +54,4 @@ def initialize_logging() -> Dict[str, Any]: "datefmt": "%Y-%m-%d:%H:%M:%S", } ) - return log_config \ No newline at end of file + return log_config # type: ignore \ No newline at end of file From 5e326f36988832ff704d2d7b2621e805bcb173c1 Mon Sep 17 00:00:00 2001 From: William Wills Date: Wed, 11 Dec 2024 14:32:38 -0500 Subject: [PATCH 05/10] fix: failing linter --- app/api/dependencies.py | 1 - app/api/v1/cron.py | 3 +-- app/logger.py | 8 ++++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/api/dependencies.py b/app/api/dependencies.py index a7b6cd3..23fbca8 100644 --- a/app/api/dependencies.py +++ b/app/api/dependencies.py @@ -2,7 +2,6 @@ import enum import logging -from contextlib import asynccontextmanager from contextlib import AbstractAsyncContextManager, asynccontextmanager from pathlib import Path from typing import AsyncGenerator, AsyncIterator diff --git a/app/api/v1/cron.py b/app/api/v1/cron.py index 27049a1..5a9e7f3 100644 --- a/app/api/v1/cron.py +++ b/app/api/v1/cron.py @@ -2,9 +2,8 @@ import asyncio import json -from typing import List, Optional import logging -from typing import List +from typing import List, Optional from chia.consensus.block_record import BlockRecord from chia.rpc.full_node_rpc_client import FullNodeRpcClient diff --git a/app/logger.py b/app/logger.py index 9bd2353..e4d2907 100644 --- a/app/logger.py +++ b/app/logger.py @@ -15,13 +15,17 @@ # Define the log format with version log_format = f"%(asctime)s,%(msecs)d {version} %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s" + def get_file_log_handler(formatter: logging.Formatter) -> ConcurrentRotatingFileHandler: log_path = settings.LOG_PATH log_path.parent.mkdir(parents=True, exist_ok=True) - handler = ConcurrentRotatingFileHandler(str(log_path.resolve()), "a", maxBytes=50 * 1024 * 1024, backupCount=7, use_gzip=False) + handler = ConcurrentRotatingFileHandler( + str(log_path.resolve()), "a", maxBytes=50 * 1024 * 1024, backupCount=7, use_gzip=False + ) handler.setFormatter(formatter) return handler + def initialize_logging() -> Dict[str, Any]: log_date_format = "%Y-%m-%dT%H:%M:%S" file_log_formatter = logging.Formatter( @@ -54,4 +58,4 @@ def initialize_logging() -> Dict[str, Any]: "datefmt": "%Y-%m-%d:%H:%M:%S", } ) - return log_config # type: ignore \ No newline at end of file + return log_config # type: ignore From 1de6ba04e9e16201b942aac030a4b1aab0c01597 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Wed, 11 Dec 2024 11:41:44 -0800 Subject: [PATCH 06/10] ci: upgrade to v4 for upload and download --- .github/workflows/build-installers.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-installers.yaml b/.github/workflows/build-installers.yaml index 9a24cba..6df737d 100644 --- a/.github/workflows/build-installers.yaml +++ b/.github/workflows/build-installers.yaml @@ -220,7 +220,7 @@ jobs: if: matrix.os.matrix == 'linux' - name: Upload deb - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.config.app-name }}_${{ steps.tag-name.outputs.TAGNAME || github.sha }}-1_${{ matrix.arch.deb-platform }}.deb path: ${{ github.workspace }}/deb/*.deb @@ -228,7 +228,7 @@ jobs: if: matrix.os.matrix == 'linux' && matrix.preconfiguration.name == 'default' - name: Upload preconfigured deb - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.config.app-name }}-${{ matrix.preconfiguration.name }}_${{ steps.tag-name.outputs.TAGNAME || github.sha }}-1_${{ matrix.arch.deb-platform }}.deb path: ${{ github.workspace }}/deb/*.deb @@ -236,7 +236,7 @@ jobs: if: matrix.os.matrix == 'linux' && matrix.preconfiguration.name != 'default' - name: Upload binary - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.config.app-name }}-${{ matrix.os.artifact-os-name }}-${{ matrix.arch.artifact-name }} path: ${{ github.workspace }}/artifacts/* @@ -244,7 +244,7 @@ jobs: if: matrix.preconfiguration.name == 'default' - name: Upload preconfigured binary - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.config.app-name }}-${{ matrix.preconfiguration.name }}-${{ matrix.os.artifact-os-name }}-${{ matrix.arch.artifact-name }} path: ${{ github.workspace }}/artifacts/* @@ -279,7 +279,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/') && matrix.os.matrix == 'linux' && matrix.config.add-to-apt == 'true' && matrix.arch.name == 'Intel' && matrix.preconfiguration.name == 'default' - name: Upload artifact to pass apt data to release job - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: APTDATA_${{ matrix.config.app-name }} path: APTDATA_${{ matrix.config.app-name }}.dat @@ -310,7 +310,7 @@ jobs: echo "github.sha is ${{ github.sha }}" - name: Download all artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 - name: Parse meta files for apt variables id: apt-metadata From e4de865df7f2e4678bb483a5583cc445a98a3d8b Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Wed, 11 Dec 2024 11:55:48 -0800 Subject: [PATCH 07/10] docs: LOG_PATH options --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e37754e..35527e5 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ The whole list of configurable variables are detailed in [config.py](app/config. - `MODE (environment variable)`: one of `dev`, `registry`, `client`, and `explorer`. In `dev` mode, the application essentially enables all functionalities (endpoints), while in the rest, some select endpoints will be allowed. Each mode has installers and executable binaries built and available on the [releases](https://github.com/Chia-Network/climate-token-driver/releases) page. - `CHIA_ROOT (environment variable)`: the root of Chia wallets on the local machine, typically `~/.chia/mainnet`. - `CONFIG_PATH (environment variable)`: the path of the `config.yaml` file, relative to `${CHIA_ROOT}`. Rarely needs to be changed. -- `LOG_PATH`: the path this application write logs to, relative to `${CHIA_ROOT}`. +- `LOG_PATH`: the path this application write logs to, relative to `${CHIA_ROOT}`. Can also be set to `stdout`. - `CADT_API_SERVER_HOST`: the CADT API URL in the format of `scheme://domain:port/path`. - `CADT_API_KEY`: the CADT API key. From 66fb5f7cba355da4ea5eef2fe5b830188a353c37 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Wed, 11 Dec 2024 12:36:14 -0800 Subject: [PATCH 08/10] chore: version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 495d679..ecdcb23 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "Chia Climate Token Driver" -version = "1.1.0" +version = "1.1.1" description = "https://github.com/Chia-Network/climate-token-driver" authors = [ "Harry Hsu ", From d5de6d2e30e85ebf00354be3f2038ef6609a80ab Mon Sep 17 00:00:00 2001 From: Earle Lowe Date: Wed, 11 Dec 2024 13:10:18 -0800 Subject: [PATCH 09/10] Fix Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35527e5..e80222c 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ The whole list of configurable variables are detailed in [config.py](app/config. - `MODE (environment variable)`: one of `dev`, `registry`, `client`, and `explorer`. In `dev` mode, the application essentially enables all functionalities (endpoints), while in the rest, some select endpoints will be allowed. Each mode has installers and executable binaries built and available on the [releases](https://github.com/Chia-Network/climate-token-driver/releases) page. - `CHIA_ROOT (environment variable)`: the root of Chia wallets on the local machine, typically `~/.chia/mainnet`. - `CONFIG_PATH (environment variable)`: the path of the `config.yaml` file, relative to `${CHIA_ROOT}`. Rarely needs to be changed. -- `LOG_PATH`: the path this application write logs to, relative to `${CHIA_ROOT}`. Can also be set to `stdout`. +- `LOG_PATH`: the path this application write logs to, relative to `${CHIA_ROOT}`. Can also be set to `stdout`. - `CADT_API_SERVER_HOST`: the CADT API URL in the format of `scheme://domain:port/path`. - `CADT_API_KEY`: the CADT API key. From 3a13e9f9f1af11bcc6514e0aaa9486521c8088b4 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Wed, 11 Dec 2024 13:32:40 -0800 Subject: [PATCH 10/10] ci: add testneta builds to the release --- .github/workflows/build-installers.yaml | 6 +++--- README.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-installers.yaml b/.github/workflows/build-installers.yaml index 6df737d..66d5f6c 100644 --- a/.github/workflows/build-installers.yaml +++ b/.github/workflows/build-installers.yaml @@ -257,20 +257,20 @@ jobs: type: "zip" filename: ${{ matrix.config.app-name }}_${{ matrix.os.artifact-os-name }}_${{ steps.tag-name.outputs.TAGNAME || github.sha }}_${{ matrix.arch.artifact-name }}.zip directory: "artifacts" - if: startsWith(github.ref, 'refs/tags/') && matrix.preconfiguration.name == 'default' + if: startsWith(github.ref, 'refs/tags/') - name: Release executable uses: softprops/action-gh-release@v0.1.15 with: files: ./artifacts/${{ matrix.config.app-name }}_${{ matrix.os.artifact-os-name }}_${{ steps.tag-name.outputs.TAGNAME || github.sha }}_${{ matrix.arch.artifact-name }}.zip - if: startsWith(github.ref, 'refs/tags/') && matrix.preconfiguration.name == 'default' + if: startsWith(github.ref, 'refs/tags/') - name: Release debs uses: softprops/action-gh-release@v0.1.15 with: files: | ${{ github.workspace }}/deb/${{ matrix.config.app-name }}_${{ steps.tag-name.outputs.TAGNAME || github.sha }}-1_${{ matrix.arch.deb-platform }}.deb - if: startsWith(github.ref, 'refs/tags/') && matrix.os.matrix == 'linux' && matrix.preconfiguration.name == 'default' + if: startsWith(github.ref, 'refs/tags/') && matrix.os.matrix == 'linux' # Only do for Intel builds as we know we build ARM and can pass that info along to the apt update automation - name: Create artifact with metadata for apt upload diff --git a/README.md b/README.md index 35527e5..e80222c 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ The whole list of configurable variables are detailed in [config.py](app/config. - `MODE (environment variable)`: one of `dev`, `registry`, `client`, and `explorer`. In `dev` mode, the application essentially enables all functionalities (endpoints), while in the rest, some select endpoints will be allowed. Each mode has installers and executable binaries built and available on the [releases](https://github.com/Chia-Network/climate-token-driver/releases) page. - `CHIA_ROOT (environment variable)`: the root of Chia wallets on the local machine, typically `~/.chia/mainnet`. - `CONFIG_PATH (environment variable)`: the path of the `config.yaml` file, relative to `${CHIA_ROOT}`. Rarely needs to be changed. -- `LOG_PATH`: the path this application write logs to, relative to `${CHIA_ROOT}`. Can also be set to `stdout`. +- `LOG_PATH`: the path this application write logs to, relative to `${CHIA_ROOT}`. Can also be set to `stdout`. - `CADT_API_SERVER_HOST`: the CADT API URL in the format of `scheme://domain:port/path`. - `CADT_API_KEY`: the CADT API key.