From cc6792a4f5606b4a1289c943e42317444ccb9ee1 Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Thu, 1 Aug 2024 15:35:02 +0100 Subject: [PATCH 1/5] deploy tagged versions to dockerhub Don't even push these images, just test they build. --- .github/workflows/deploy.yml | 45 ++++++++++++++---------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d223ef4e8..e199ed292 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: deploy +name: test-deploy on: workflow_run: @@ -7,7 +7,7 @@ on: - completed jobs: - deploy-to-dockerhub: + deploy-prod: runs-on: ubuntu-latest if: > github.event.workflow_run.conclusion == 'success' @@ -17,44 +17,33 @@ jobs: uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - 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 - org.opencontainers.image.description=Warnet RPC server - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push production RPC image + - name: Build production RPC image uses: docker/build-push-action@v5 with: file: resources/images/rpc/Dockerfile_prod platforms: linux/amd64,linux/arm64 - context: src/warnet/templates/rpc - push: true - tags: ${{ steps.meta.outputs.tags }} + 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 - - name: Build and push dev RPC image - if: github.ref == 'refs/heads/main' + build-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: src/warnet/templates/rpc - push: true + push: false tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_RPC_REPO }}:dev - labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max From 8781780e8fa34a2f946b7980bf0daba81c559071 Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Thu, 1 Aug 2024 14:14:18 +0100 Subject: [PATCH 2/5] add version to warnet Also keep synced using a CI action --- .github/scripts/check_version.py | 20 ++++++++++++++++++++ .github/workflows/test.yml | 12 +++++++++++- src/warnet/cli/cluster.py | 1 + src/warnet/version.py | 1 + 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 .github/scripts/check_version.py create mode 100644 src/warnet/version.py 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/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/src/warnet/cli/cluster.py b/src/warnet/cli/cluster.py index 74a9f99a5..14677d051 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") diff --git a/src/warnet/version.py b/src/warnet/version.py new file mode 100644 index 000000000..184e18b07 --- /dev/null +++ b/src/warnet/version.py @@ -0,0 +1 @@ +VERSION = "0.9.11" From 55a3f1f8b21166b73c45ca4dbab311c1b0fa7ffc Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Thu, 1 Aug 2024 14:18:51 +0100 Subject: [PATCH 3/5] use deployed versions with warcli cluster commands --- src/warnet/cli/cluster.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/warnet/cli/cluster.py b/src/warnet/cli/cluster.py index 14677d051..2ce66c49e 100644 --- a/src/warnet/cli/cluster.py +++ b/src/warnet/cli/cluster.py @@ -56,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) @@ -95,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 @@ -120,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() From fa64f56003ebfadbf02f630738df8537b0f3762a Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Thu, 1 Aug 2024 15:26:39 +0100 Subject: [PATCH 4/5] tidy up CI --- .github/workflows/deploy.yml | 63 ++++++++++++++++-------------- .github/workflows/publish-dist.yml | 6 ++- .github/workflows/test-images.yml | 50 ++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 30 deletions(-) create mode 100644 .github/workflows/test-images.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e199ed292..771103a4d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,49 +1,54 @@ -name: test-deploy +name: deploy on: - workflow_run: - workflows: ["test"] - types: - - completed + push: + tags: + - '*' jobs: - deploy-prod: + check-version: 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 + - name: Set up Python + uses: actions/setup-python@v4 with: - file: resources/images/rpc/Dockerfile_prod - platforms: linux/amd64,linux/arm64 - 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 - build-dev: + 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 uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Build dev RPC image + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_RPC_REPO }} + tags: | + type=ref,event=tag + labels: | + maintainer=bitcoindevproject + org.opencontainers.image.title=warnet-rpc + org.opencontainers.image.description=Warnet RPC server + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push production RPC image uses: docker/build-push-action@v5 with: - file: resources/images/rpc/Dockerfile_dev + file: resources/images/rpc/Dockerfile_prod platforms: linux/amd64,linux/arm64 - context: src/warnet/templates/rpc - push: false - tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_RPC_REPO }}:dev + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + 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 From d50bd621b62e0d806161479da2e891d684a63852 Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Thu, 1 Aug 2024 15:07:46 +0100 Subject: [PATCH 5/5] bump version to 0.9.12 --- pyproject.toml | 2 +- src/warnet/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/version.py b/src/warnet/version.py index 184e18b07..53f53bc5c 100644 --- a/src/warnet/version.py +++ b/src/warnet/version.py @@ -1 +1 @@ -VERSION = "0.9.11" +VERSION = "0.9.12"