MidnightCI/CD设置Skill midnight-tooling:midnight-ci

这是一个用于Midnight区块链项目的CI/CD自动化配置技能,专门针对智能合约开发和DApp测试。该技能提供GitHub Actions工作流模板,实现合约编译自动化、TypeScript测试执行、版本一致性验证和集成测试。关键词包括:Midnight区块链、智能合约CI/CD、Compact编译器、GitHub Actions自动化、DApp测试、证明服务器集成、版本控制、持续集成部署。

智能合约 0 次安装 6 次浏览 更新于 2/26/2026

name: midnight-tooling:midnight-ci description: 用于为Midnight项目设置CI/CD,配置GitHub Actions进行Compact合约编译,在CI中运行TypeScript测试,验证版本一致性,或自动化合约构建。

Midnight CI/CD 设置

使用GitHub Actions为Midnight智能合约项目配置持续集成。

概述

Midnight项目的CI应:

  1. 验证合约编译
  2. 运行TypeScript/JavaScript测试
  3. 验证版本一致性
  4. 可选地使用证明服务器运行集成测试

快速开始

将适当的工作流模板复制到您的项目:

mkdir -p .github/workflows

# 用于合约编译
cp ${CLAUDE_PLUGIN_ROOT}/skills/midnight-ci/templates/github-workflows/compile-contracts.yml .github/workflows/

# 用于完整的dApp测试
cp ${CLAUDE_PLUGIN_ROOT}/skills/midnight-ci/templates/github-workflows/test-dapp.yml .github/workflows/

可用模板

模板 用途
compile-contracts.yml 基本的合约编译检查
test-dapp.yml 使用证明服务器的完整dApp测试
release.yml 带版本控制的发布工作流

工作流配置

环境设置

所有工作流都需要以下工具:

  • Node.js 18+
  • Compact开发者工具和编译器
  • Docker(用于证明服务器测试)

CI中的Compact安装

- name: 安装Compact开发者工具
  run: |
    curl --proto '=https' --tlsv1.2 -LsSf \
      https://github.com/midnightntwrk/compact/releases/latest/download/compact-installer.sh | sh
    echo "$HOME/.compact/bin" >> $GITHUB_PATH

- name: 安装Compact编译器
  run: compact update

缓存

缓存Compact编译器以加快构建速度:

- name: 缓存Compact编译器
  uses: actions/cache@v4
  with:
    path: ~/.compact
    key: compact-${{ runner.os }}-${{ hashFiles('.compact-version') }}
    restore-keys: |
      compact-${{ runner.os }}-

创建.compact-version文件:

0.26.0

版本锁定

为了可重现的CI,锁定编译器版本:

- name: 安装特定编译器版本
  run: |
    compact update 0.26.0
    compact compile --version  # 验证

模板详情

compile-contracts.yml

用于合约编译的最小工作流:

name: 编译合约
on: [push, pull_request]

jobs:
  compile:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: 设置Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: 安装Compact
        run: |
          curl --proto '=https' --tlsv1.2 -LsSf \
            https://github.com/midnightntwrk/compact/releases/latest/download/compact-installer.sh | sh
          echo "$HOME/.compact/bin" >> $GITHUB_PATH
          compact update

      - name: 编译合约
        run: compact compile contracts/*.compact build/

test-dapp.yml

使用证明服务器的完整测试:

name: 测试dApp
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      proof-server:
        image: midnightnetwork/proof-server:latest
        ports:
          - 6300:6300
        options: >-
          --health-cmd "curl -f http://localhost:6300/health || exit 1"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
      # ... 设置步骤 ...

      - name: 运行测试
        run: npm test
        env:
          PROOF_SERVER_URL: http://localhost:6300

最佳实践

1. 锁定所有版本

env:
  NODE_VERSION: '20'
  COMPACT_VERSION: '0.26.0'
  PROOF_SERVER_TAG: '4.0.0'

2. 使用 npm ci

- name: 安装依赖
  run: npm ci

3. 缓存依赖

- name: 缓存node模块
  uses: actions/cache@v4
  with:
    path: node_modules
    key: npm-${{ hashFiles('package-lock.json') }}

4. 版本不匹配时快速失败

添加版本检查步骤:

- name: 验证版本一致性
  run: |
    COMPILER_VERSION=$(compact compile --version)
    EXPECTED="0.26.0"
    if [[ "$COMPILER_VERSION" != *"$EXPECTED"* ]]; then
      echo "版本不匹配:预期 $EXPECTED,得到 $COMPILER_VERSION"
      exit 1
    fi

5. 工件上传

保存编译后的合约:

- name: 上传编译后的合约
  uses: actions/upload-artifact@v4
  with:
    name: contracts
    path: build/
    retention-days: 7

CI故障排除

Compact未找到

确保PATH已更新:

echo "$HOME/.compact/bin" >> $GITHUB_PATH

证明服务器不健康

增加启动时间:

options: >-
  --health-retries 10
  --health-start-period 30s

Node版本问题

指定确切版本:

node-version: '20.10.0'

缓存失效

在缓存键中包含版本:

key: compact-${{ env.COMPACT_VERSION }}-${{ runner.os }}

其他资源

  • templates/github-workflows/ - 即用型工作流文件
  • references/ci-best-practices.md - 详细的CI指南

有关本地环境设置,请参阅midnight-setup技能。