Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
77 changes: 77 additions & 0 deletions .github/workflows/devshard-testenv.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: devshard testenv

on:
pull_request:
paths:
- 'devshard/testenv/**'
- 'devshard/chainoracle/**'
- 'devshard/runtimeconfig/**'
- 'devshard/runtimeparams/**'
- 'common/runtimeconfig/**'
- 'common/chain/**'
- 'decentralized-api/nodemanager/**'
- '.github/workflows/devshard-testenv.yml'
workflow_dispatch:
inputs:
integration:
description: 'Run Docker stack citest (S1–S6 + A1–A4)'
required: false
type: boolean
default: false
issue_comment:
types: [created]

jobs:
unit:
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
name: testenv unit
defaults:
run:
working-directory: ./devshard
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version: '1.24.2'
cache-dependency-path: |
devshard/go.sum
common/go.sum
decentralized-api/go.sum

- name: Run ci-testenv-unit
run: make ci-testenv-unit

integration:
if: |
(github.event_name == 'workflow_dispatch' && inputs.integration) ||
(
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
contains(github.event.comment.body, '/run-testenv') &&
(
github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'MEMBER'
)
)
runs-on: ubuntu-latest
name: testenv integration (Docker)
permissions:
contents: read
pull-requests: read
defaults:
run:
working-directory: ./devshard
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event_name == 'issue_comment' && format('refs/pull/{0}/head', github.event.issue.number) || github.ref }}

- uses: actions/setup-go@v5
with:
go-version: '1.24.2'
cache-dependency-path: devshard/go.sum

- name: Run ci-testenv-integration
run: make ci-testenv-integration
38 changes: 22 additions & 16 deletions .github/workflows/test-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,18 +163,19 @@ jobs:
- name: Make Docker Images
env:
GENESIS_OVERRIDES_FILE: "inference-chain/test_genesis_overrides.json"
USE_REGISTRY_CACHE: "1"
GHCR_CACHE_NAMESPACE: ${{ github.repository }}
USE_REGISTRY_CACHE: "0"
run: |
make build-docker
# devshardd self-checks build_version == the version versiond forces (dev via build/devshard-version).
DEVSHARD_VERSION=dev make devshardd-build
echo "=== devshard version (make DEVSHARD_VERSION / build/devshard-version) ==="
# Host Linux binaries for Testermint:
# - build/devshardd: mounted into versiond (VERSIOND_OVERRIDE)
# - build/devshardctl: docker-cp'd into *-api for startDevshardProxy
# Stamp both versiond route name and BinaryVersion as "testapp" for CI
# (matches VERSIOND_BINARY_NAME default / local-build-pixelplex e2e convention).
DEVSHARD_VERSION=testapp DEVSHARD_BINARY_VERSION=testapp make devshardd-build devshardctl-build
echo "=== devshard version (DEVSHARD_VERSION / build/devshard-version) ==="
make -s print-devshard-version
cat build/devshard-version
echo "=== devshard protocol version (DEVSHARD_PROTOCOL_VERSION / build/devshard-protocol-version) ==="
make -s print-devshard-protocol-version
cat build/devshard-protocol-version
ls -la build/devshardd build/devshardctl
echo "=== Images immediately after build ==="
docker images | head -20

Expand All @@ -187,6 +188,8 @@ jobs:
docker save -o docker-images/proxy.tar ghcr.io/product-science/proxy:latest
docker save -o docker-images/versiond.tar versiond:latest
docker save -o docker-images/testapp-server.tar testapp-server:latest
docker save -o docker-images/edge-api.tar edge-api:latest
docker save -o docker-images/edge-api-router.tar edge-api-router:latest
gzip docker-images/*.tar
echo "=== Created files ==="
ls -la docker-images/
Expand All @@ -198,14 +201,14 @@ jobs:
path: docker-images/
retention-days: 1

- name: Upload devshardd Host Binary
- name: Upload Devshard Host Binaries
uses: actions/upload-artifact@v4
with:
name: devshardd-host-binary
name: devshard-host-binaries
path: |
build/devshardd
build/devshardctl
build/devshard-version
build/devshard-protocol-version
retention-days: 1

- name: Make Upgrade Build
Expand Down Expand Up @@ -251,10 +254,10 @@ jobs:
name: docker-images
path: docker-images/

- name: Download devshardd Host Binary
- name: Download Devshard Host Binaries
uses: actions/download-artifact@v4
with:
name: devshardd-host-binary
name: devshard-host-binaries
path: build/

- name: Load Docker Images
Expand All @@ -266,14 +269,17 @@ jobs:
sudo docker load -i docker-images/proxy.tar || true
sudo docker load -i docker-images/versiond.tar || true
sudo docker load -i docker-images/testapp-server.tar || true
sudo docker load -i docker-images/edge-api.tar || true
sudo docker load -i docker-images/edge-api-router.tar || true
rm -rf docker-images/

- name: Prepare devshardd Host Binary
- name: Prepare Devshard Host Binaries
run: |
chmod +x build/devshardd
chmod +x build/devshardd build/devshardctl
echo "=== devshard version stamp (for Testermint) ==="
cat build/devshard-version 2>/dev/null || echo "(missing build/devshard-version)"
cat build/devshard-protocol-version 2>/dev/null || echo "(missing build/devshard-protocol-version)"
ls -la build/devshardd build/devshardctl
file build/devshardd build/devshardctl || true

- name: Install Make
run: |
Expand Down
62 changes: 62 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,68 @@ jobs:
path: versioned/junit-report.xml
reporter: java-junit

build-and-test-edge-api:
runs-on: ubuntu-latest
name: Build and Test edge-api (validation)
permissions:
contents: read
checks: write
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up Go
uses: actions/setup-go@v3.0.0
with:
go-version: '1.24.2'

- name: Cache Go modules
uses: actions/cache@v4
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('edge-api/go.sum', 'common/go.sum') }}
restore-keys: |
${{ runner.os }}-go-

- name: Install dependencies
working-directory: edge-api
run: go mod download

- name: Build edge-api
working-directory: edge-api
run: go build ./...

- name: Run edge-api tests (fork PRs)
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork
run: bash scripts/validate-edge-api.sh

- name: Install go-junit-report
if: github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork
run: go install github.com/jstemmer/go-junit-report/v2@v2.1.0

- name: Run edge-api tests and generate JUnit report
if: github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork
run: |
cd edge-api
go test ./queryapi/... -count=1 -v 2>&1 | go-junit-report -set-exit-code > junit-report.xml
cd ..
bash scripts/validate-edge-api.sh

- name: Publish Test Results
uses: actions/upload-artifact@v4
if: always() && (github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork)
with:
name: edge-api-junit-report
path: edge-api/junit-report.xml

- name: Report Test Results in GitHub
if: always() && (github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork)
uses: dorny/test-reporter@v1
with:
name: edge-api Tests
path: edge-api/junit-report.xml
reporter: java-junit

build-and-test-devshard:
runs-on: ubuntu-22.04
name: Build and Test Devshard
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ inference-chain/build/
inference-chain/dist/
/decentralized-api/decentralized-api
/decentralized-api/devshardd
/edge-api/build/edge-api
/devshard/devshardctl
/devshard/devshardd
/devshard/cmd/devshardd/devshardd
/devshard/cmd/devshardctl/devshardctl
chain-venv/
.inference/
prod-genesis/
Expand Down Expand Up @@ -55,4 +58,4 @@ actionlint
inference-chain/proto/github.com/
inference-chain/proto/api/
inference-chain/proto/**/module/*.pb.go
/inference-chain/.docker-context/
inference-chain/.docker-context
52 changes: 28 additions & 24 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,23 +1,15 @@
.PHONY: release decentralized-api-release inference-chain-release tmkms-release proxy-release proxy-ssl-release bridge-release versiond-release check-docker build-testermint run-blockchain-tests test-blockchain local-build api-local-build node-local-build api-test node-test mock-server-build-docker proxy-build-docker proxy-ssl-build-docker bridge-build-docker run-bls-tests devshardctl-build devshardd-build devshardd-release print-devshard-version print-devshard-protocol-version versiond-build-docker testapp-server-build-docker

# For binary release: default linux/amd64 before local Docker defaults.
DEVSHARDD_RELEASE_DOCKER_PLATFORM := $(if $(DOCKER_PLATFORM),$(DOCKER_PLATFORM),linux/amd64)
DEVSHARDD_RELEASE_DOCKER_GOOS := $(if $(DOCKER_GOOS),$(DOCKER_GOOS),linux)
DEVSHARDD_RELEASE_DOCKER_GOARCH := $(if $(DOCKER_GOARCH),$(DOCKER_GOARCH),$(if $(filter linux/arm64,$(DEVSHARDD_RELEASE_DOCKER_PLATFORM)),arm64,amd64))
.PHONY: release decentralized-api-release inference-chain-release tmkms-release proxy-release proxy-ssl-release bridge-release versiond-release edge-api-release edge-api-router-release check-docker build-testermint run-blockchain-tests test-blockchain local-build api-local-build node-local-build api-test node-test mock-server-build-docker proxy-build-docker proxy-ssl-build-docker bridge-build-docker run-bls-tests devshardctl-build devshardd-build print-devshard-version versiond-build-docker edge-api-build-docker edge-api-router-build-docker testapp-server-build-docker

include scripts/blst-portable.mk

VERSION ?= $(shell git describe --always)
# devshardd link stamp; Testermint VERSIOND_FORCE follows this via build/devshard-version or `make print-devshard-version`.
# devshardd protocol name (approved_versions.name); Testermint VERSIOND_FORCE uses build/devshard-version.
DEVSHARD_VERSION ?= dev
# State-root / settlement protocol tag (not versiond runtime name). See devshard/docs/protocol-version.md.
DEVSHARD_PROTOCOL_VERSION ?= v2
# devshardd build id for logs (e.g. 0.2.13-v2-r2); can change without protocol bump.
DEVSHARD_BINARY_VERSION ?= dev-log

print-devshard-version:
@echo $(DEVSHARD_VERSION)

print-devshard-protocol-version:
@echo $(DEVSHARD_PROTOCOL_VERSION)
TAG_NAME := "release/v$(VERSION)"
USE_REGISTRY_CACHE ?= 0
GHCR_CACHE_NAMESPACE ?= gonka-ai
Expand All @@ -28,7 +20,7 @@ DEVSHARDD_RELEASE_DIR ?= build/devshardd-release
ifeq ($(USE_REGISTRY_CACHE),1)
_MOCK_CACHE_ARGS := --cache-from type=registry,ref=ghcr.io/$(GHCR_CACHE_NAMESPACE)/mock-server:buildcache --cache-to type=registry,ref=ghcr.io/$(GHCR_CACHE_NAMESPACE)/mock-server:buildcache,mode=min
_MOCK_BUILD_CMD := docker buildx build --load $(_MOCK_CACHE_ARGS)
_DEVSHARDD_CACHE_ARGS := --cache-from type=registry,ref=ghcr.io/$(GHCR_CACHE_NAMESPACE)/devshardd:buildcache --cache-to type=registry,ref=ghcr.io/$(GHCR_CACHE_NAMESPACE)/devshardd:buildcache,mode=min
_DEVSHARDD_CACHE_ARGS := --cache-from type=registry,ref=ghcr.io/gonka-ai/devshardd:buildcache --cache-to type=registry,ref=ghcr.io/gonka-ai/devshardd:buildcache,mode=min
_DEVSHARDD_BUILD_CMD := docker buildx build --load $(_DEVSHARDD_CACHE_ARGS)
else
_MOCK_CACHE_ARGS :=
Expand All @@ -39,7 +31,7 @@ endif

all: build-docker

build-docker: api-build-docker node-build-docker mock-server-build-docker proxy-build-docker proxy-ssl-build-docker bridge-build-docker versiond-build-docker testapp-server-build-docker
build-docker: api-build-docker node-build-docker mock-server-build-docker proxy-build-docker proxy-ssl-build-docker bridge-build-docker versiond-build-docker edge-api-build-docker edge-api-router-build-docker testapp-server-build-docker

api-build-docker:
@make -C decentralized-api build-docker SET_LATEST=1 \
Expand Down Expand Up @@ -71,6 +63,14 @@ versiond-build-docker:
@echo "Building versiond docker image ($(DOCKER_PLATFORM), matches devshardd-build)..."
@docker build --platform $(DOCKER_PLATFORM) -t versiond:latest -f versioned/Dockerfile versioned

edge-api-build-docker:
@make -C edge-api build-docker SET_LATEST=1 \
BLST_PORTABLE=$(BLST_PORTABLE) \
DOCKER_PLATFORM=$(DOCKER_PLATFORM) DOCKER_GOOS=$(DOCKER_GOOS) DOCKER_GOARCH=$(DOCKER_GOARCH)

edge-api-router-build-docker:
@make -C edge-api-router build-docker SET_LATEST=1

testapp-server-build-docker:
@echo "Building testapp-server docker image ($(DOCKER_PLATFORM))..."
@docker build --platform $(DOCKER_PLATFORM) -t testapp-server:latest -f local-test-net/Dockerfile.testapp-server .
Expand Down Expand Up @@ -139,35 +139,39 @@ api-local-build:
@echo "Building decentralized-api locally..."
@cd decentralized-api && go build -mod=mod -o ./build/dapi

DEVSHARD_PROTOCOL_LDFLAGS = -X devshard/types.buildStateRootProtocolVersion=$(DEVSHARD_PROTOCOL_VERSION)
DEVSHARD_VERSION_LDFLAGS = -X main.Version=$(DEVSHARD_VERSION) -X devshard/types.buildStateRootProtocolVersion=$(DEVSHARD_VERSION)
DEVSHARDD_LDFLAGS = $(DEVSHARD_VERSION_LDFLAGS) -X main.BinaryVersion=$(DEVSHARD_BINARY_VERSION)

# Linux binary for Testermint: docker-cp'd into *-api containers (not baked into the api image).
devshardctl-build:
@echo "Building devshardctl (DEVSHARD_PROTOCOL_VERSION=$(DEVSHARD_PROTOCOL_VERSION))..."
@cd devshard && go build -ldflags "-X main.Version=$(DEVSHARD_VERSION) $(DEVSHARD_PROTOCOL_LDFLAGS)" -o ../build/devshardctl ./cmd/devshardctl/
@echo "Building devshardctl for $(DOCKER_GOOS)/$(DOCKER_GOARCH) (DEVSHARD_VERSION=$(DEVSHARD_VERSION))..."
@mkdir -p build
@cd devshard && CGO_ENABLED=0 GOOS=$(DOCKER_GOOS) GOARCH=$(DOCKER_GOARCH) \
go build -ldflags "$(DEVSHARD_VERSION_LDFLAGS)" -o ../build/devshardctl ./cmd/devshardctl/
@chmod +x build/devshardctl

devshardd-build:
@echo "Building devshardd (DEVSHARD_VERSION=$(DEVSHARD_VERSION) DEVSHARD_PROTOCOL_VERSION=$(DEVSHARD_PROTOCOL_VERSION))..."
@echo "Building devshardd (DEVSHARD_VERSION=$(DEVSHARD_VERSION) DEVSHARD_BINARY_VERSION=$(DEVSHARD_BINARY_VERSION))..."
@mkdir -p build
@$(_DEVSHARDD_BUILD_CMD) --platform $(DOCKER_PLATFORM) --target builder \
--build-arg GOOS=$(DOCKER_GOOS) \
--build-arg GOARCH=$(DOCKER_GOARCH) \
--build-arg BLST_PORTABLE=1 \
--build-arg BLST_PORTABLE=$(BLST_PORTABLE) \
--build-arg DEVSHARD_VERSION=$(DEVSHARD_VERSION) \
--build-arg DEVSHARD_PROTOCOL_VERSION=$(DEVSHARD_PROTOCOL_VERSION) \
-f decentralized-api/Dockerfile . \
--build-arg DEVSHARD_BINARY_VERSION=$(DEVSHARD_BINARY_VERSION) \
-f devshard/Dockerfile . \
-t devshardd-builder:latest -q >/dev/null
@CID=$$(docker create devshardd-builder:latest) && \
docker cp $$CID:/app/decentralized-api/build/devshardd build/devshardd && \
docker cp $$CID:/app/devshard/build/devshardd build/devshardd && \
docker rm $$CID >/dev/null
@chmod +x build/devshardd
@echo "$(DEVSHARD_VERSION)" > build/devshard-version
@echo "$(DEVSHARD_PROTOCOL_VERSION)" > build/devshard-protocol-version
@echo "Built build/devshardd ($$(file build/devshardd | grep -o 'statically linked\|dynamically linked'))"

devshardd-release:
@$(MAKE) devshardd-build \
DEVSHARD_VERSION=$(DEVSHARD_VERSION) \
DEVSHARD_PROTOCOL_VERSION=$(DEVSHARD_PROTOCOL_VERSION) \
DEVSHARD_BINARY_VERSION=$(DEVSHARD_BINARY_VERSION) \
DOCKER_PLATFORM=$(DEVSHARDD_RELEASE_DOCKER_PLATFORM) \
DOCKER_GOOS=$(DEVSHARDD_RELEASE_DOCKER_GOOS) \
DOCKER_GOARCH=$(DEVSHARDD_RELEASE_DOCKER_GOARCH)
Expand Down
20 changes: 20 additions & 0 deletions common/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.PHONY: generate generate-proto build test check-gen ci-testenv-runtimeconfig

generate: generate-proto

generate-proto:
go generate ./nodemanager/...

build:
go build ./...

test:
go test ./... -v

# Phase 11 — runtimeconfig server + client unit tests (testenv CI).
ci-testenv-runtimeconfig:
go test ./runtimeconfig/... ./runtimeconfig/client/... -count=1
go test ./chain/... -count=1

check-gen: generate
git diff --exit-code nodemanager/gen/
Loading
Loading