diff --git a/.github/scripts/check_version.py b/.github/scripts/check_version.py new file mode 100644 index 000000000..b11a3aa2e --- /dev/null +++ b/.github/scripts/check_version.py @@ -0,0 +1,20 @@ +import re +import sys +from pathlib import Path + + +def get_version(file_path, pattern): + content = Path(file_path).read_text() + match = re.search(pattern, content) + return match.group(1) if match else None + + +pyproject_version = get_version("pyproject.toml", r'version\s*=\s*"([^"]+)"') +version_py_version = get_version("src/warnet/version.py", r'VERSION\s*=\s*"([^"]+)"') + +if pyproject_version == version_py_version: + print(f"Versions match: {pyproject_version}") + sys.exit(0) +else: + print(f"Version mismatch: pyproject.toml={pyproject_version}, version.py={version_py_version}") + sys.exit(1) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d223ef4e8..771103a4d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,16 +1,24 @@ name: deploy on: - workflow_run: - workflows: ["test"] - types: - - completed + push: + tags: + - '*' jobs: - deploy-to-dockerhub: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Check version consistency + run: python .github/scripts/check_version.py + deploy: + needs: [check-version] runs-on: ubuntu-latest - if: > - github.event.workflow_run.conclusion == 'success' steps: - uses: actions/checkout@v4 - name: Set up QEMU @@ -24,8 +32,6 @@ jobs: images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_RPC_REPO }} tags: | type=ref,event=tag - type=ref,event=pr - type=raw,value=latest,enable={{is_default_branch}} labels: | maintainer=bitcoindevproject org.opencontainers.image.title=warnet-rpc @@ -40,21 +46,9 @@ jobs: with: file: resources/images/rpc/Dockerfile_prod platforms: linux/amd64,linux/arm64 - context: src/warnet/templates/rpc + context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - - name: Build and push dev RPC image - if: github.ref == 'refs/heads/main' - uses: docker/build-push-action@v5 - with: - file: resources/images/rpc/Dockerfile_dev - platforms: linux/amd64,linux/arm64 - context: src/warnet/templates/rpc - push: true - tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_RPC_REPO }}:dev - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.github/workflows/publish-dist.yml b/.github/workflows/publish-dist.yml index d228464e0..b9a5cdce3 100644 --- a/.github/workflows/publish-dist.yml +++ b/.github/workflows/publish-dist.yml @@ -1,6 +1,10 @@ name: Publish Python 🐍 distribution 📦 to PyPI -on: push +on: + pull_request: + push: + branches: + - main jobs: build: diff --git a/.github/workflows/test-images.yml b/.github/workflows/test-images.yml new file mode 100644 index 000000000..c5492489b --- /dev/null +++ b/.github/workflows/test-images.yml @@ -0,0 +1,50 @@ +name: test image builds + +on: + workflow_run: + workflows: ["test"] + types: + - completed + +jobs: + test-prod: + runs-on: ubuntu-latest + if: > + github.event.workflow_run.conclusion == 'success' + steps: + - uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build production RPC image + uses: docker/build-push-action@v5 + with: + file: resources/images/rpc/Dockerfile_prod + platforms: linux/amd64,linux/arm64 + context: . + push: false + tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_RPC_REPO }}:latest + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + test-dev: + runs-on: ubuntu-latest + if: > + github.event.workflow_run.conclusion == 'success' + steps: + - uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build dev RPC image + uses: docker/build-push-action@v5 + with: + file: resources/images/rpc/Dockerfile_dev + platforms: linux/amd64,linux/arm64 + context: resources/images/rpc + push: false + tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_RPC_REPO }}:dev + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 57359f36a..da18c238c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,8 +19,18 @@ jobs: - uses: chartboost/ruff-action@v1 with: args: 'format --check' + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Check version consistency + run: python .github/scripts/check_version.py build-image: - needs: [ruff, ruff-format] + needs: [ruff, ruff-format, check-version] runs-on: ubuntu-latest steps: - name: Checkout diff --git a/pyproject.toml b/pyproject.toml index 458dcfa9d..e9ac46be8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "warnet" -version = "0.9.11" +version = "0.9.12" description = "Monitor and analyze the emergent behaviours of bitcoin networks" readme = "README.md" requires-python = ">=3.10" diff --git a/src/warnet/cli/cluster.py b/src/warnet/cli/cluster.py index 74a9f99a5..2ce66c49e 100644 --- a/src/warnet/cli/cluster.py +++ b/src/warnet/cli/cluster.py @@ -4,6 +4,7 @@ from importlib.resources import files import click +from warnet.version import VERSION MANIFEST_PATH = files("manifests") RPC_PATH = files("images").joinpath("rpc") @@ -55,21 +56,17 @@ def run_command(command, stream_output=False): @cluster.command() def minikube_setup(): """Setup minikube for use with Warnet""" - script_content = f""" + script_content = """ #!/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=4000mb --cpus=4 --mount --mount-string="$PWD:/mnt/src" - }} + check_minikube() { + minikube status | grep -q "Running" && echo "Minikube is already running" || minikube start --memory=4000mb --cpus=4 + } # Check minikube status check_minikube - - # Build image in local registry and load into minikube - docker build -t warnet/dev -f {RPC_PATH}/Dockerfile_dev {RPC_PATH} --load - minikube image load warnet/dev """ run_command(script_content, stream_output=True) @@ -94,7 +91,7 @@ def deploy(): 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 + sed "s|bitcoindevproject/warnet-rpc:latest|bitcoindevproject/warnet-rpc:{VERSION}|" {MANIFEST_PATH}/warnet-rpc-statefulset.yaml | kubectl apply -f - kubectl config set-context --current --namespace=warnet # Check for warnet-rpc container @@ -119,12 +116,7 @@ def deploy(): @cluster.command() def minikube_clean(): """Reinit minikube images""" - script_content = """ - #!/usr/bin/env bash - set -euxo pipefail - minikube image rm warnet/dev - """ - run_command(script_content, stream_output=True) + run_command("minikube delete", stream_output=True) @cluster.command() diff --git a/src/warnet/version.py b/src/warnet/version.py new file mode 100644 index 000000000..53f53bc5c --- /dev/null +++ b/src/warnet/version.py @@ -0,0 +1 @@ +VERSION = "0.9.12"