datahaven/.github/workflows/task-build-operator.yml
Facundo Farall 935babe36a
ci: 👷 Add CI to check PAPI metadata (#107)
Add CI check for Polkadot-API metadata freshness

This PR adds a new CI workflow that ensures the Polkadot-API metadata
file (`test/.papi/metadata/datahaven.scale`)
   is kept up-to-date when runtime changes are made.

  Changes:

  - Added task-check-metadata.yml workflow that:
- Reuses the WASM artifact from the build-operator job (no duplicate
compilation)
    - Runs `bun x papi add` to regenerate metadata
    - Fails if the metadata file has uncommitted changes
- Integrated the check into `CI.yml` as a second-tier job alongside
`docker-build`

  Why:

- Prevents TypeScript type definitions from becoming out of sync with
the runtime
- Reminds developers to run `bun generate:types:fast` when making
runtime changes
  - Ensures consistent type safety across the codebase

The check provides clear error messages with instructions when metadata
is outdated.
2025-06-19 19:12:04 -03:00

79 lines
2.6 KiB
YAML

# Build Operator: CI for building the operator binary
name: DataHave Operator Rust Tests
on:
workflow_dispatch:
workflow_call:
outputs:
binary-hash:
description: "The hash of the operator binary"
value: ${{ jobs.build-node.outputs.binary-hash }}
jobs:
build-node:
outputs:
binary-hash: ${{ steps.hash-binary.outputs.datahaven-node-hash }}
name: Build operator binary
runs-on: ubuntu-latest
env:
RUSTC_WRAPPER: "sccache"
CARGO_INCREMENTAL: "0"
CARGO_TERM_COLOR: always
RUSTFLAGS: "-C linker=clang -C link-arg=-fuse-ld=mold"
SCCACHE_GHA_ENABLED: "true"
defaults:
run:
working-directory: ./operator
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1
# Re-enable if you get GH issues with the runner being full
# - uses: ./.github/workflows/actions/cleanup-runner
- uses: ./.github/workflows/actions/setup-env
with:
cache-key: BUILD-RELEASE
install-deps: true
- name: Build node binary
run: |
cargo build --release --locked --features fast-runtime
- name: Prepare binary
run: |
mkdir -p ./target/ci
mkdir -p ./target/x86_64-unknown-linux-gnu/release
cp ./target/release/datahaven-node ./target/ci/datahaven-node
cp ./target/release/datahaven-node ./target/x86_64-unknown-linux-gnu/release/datahaven-node
- name: Hash binary
id: hash-binary
run: |
TIMESTAMP=$(date +%s)
BINARY_PATH=./target/ci/datahaven-node
HASH=$(echo "$TIMESTAMP" | cat - $BINARY_PATH | sha256sum | awk '{ print $1 }')
echo "datahaven-node-hash=$HASH" >> $GITHUB_OUTPUT
echo "Hash of the datahaven-node is: $HASH (with timestamp: $TIMESTAMP)"
- name: Upload binary to workflow
uses: actions/upload-artifact@v4
with:
name: datahaven-node-${{ steps.hash-binary.outputs.datahaven-node-hash }}
path: operator/target/x86_64-unknown-linux-gnu/release/datahaven-node
retention-days: 1
- name: Upload WASM to workflow
uses: actions/upload-artifact@v4
with:
name: datahaven-wasm-${{ steps.hash-binary.outputs.datahaven-node-hash }}
path: operator/target/release/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.wasm
retention-days: 1
- name: Build Stats
run: |
sccache --show-stats
echo "Binary size: $(du -h ./target/ci/datahaven-node | cut -f1)"