name: Release on: push: tags: ['v[0-9]*.[0-9]*.[0-9]*'] permissions: contents: write id-token: write # required for npm provenance (OIDC signing) jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version: 22 cache: npm - name: Upgrade npm for OIDC trusted publishing run: npx npm@11.5.1 install -g npm@11.5.1 - name: Validate tag matches all package versions run: | TAG_VERSION="${GITHUB_REF_NAME#v}" MISMATCH=0 for pkg in package.json packages/*/package.json; do PKG_VERSION=$(node -p "require('./${pkg}').version") if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then echo "::error::${pkg} version ($PKG_VERSION) does not match tag ($TAG_VERSION)" MISMATCH=1 fi done if [ "$MISMATCH" -eq 1 ]; then exit 1 fi - run: npm ci - run: npm run build - run: npm run lint - run: npm run check - run: npm test - name: Publish packages to npm run: | publish() { local ws="$1" pkg="$2" ver="$3" if npm view "${pkg}@${ver}" version >/dev/null 2>&1; then echo "::warning::${pkg}@${ver} already published, skipping" return 0 fi npm publish --workspace "$ws" --provenance --access public } VERSION=$(node -p "require('./package.json').version") publish packages/core @manifest-network/manifest-mcp-core "$VERSION" publish packages/chain @manifest-network/manifest-mcp-chain "$VERSION" publish packages/lease @manifest-network/manifest-mcp-lease "$VERSION" publish packages/fred @manifest-network/manifest-mcp-fred "$VERSION" publish packages/cosmwasm @manifest-network/manifest-mcp-cosmwasm "$VERSION" publish packages/agent-core @manifest-network/manifest-agent-core "$VERSION" publish packages/agent @manifest-network/manifest-mcp-agent "$VERSION" publish packages/node @manifest-network/manifest-mcp-node "$VERSION" publish packages/sdk @manifest-network/manifest-sdk "$VERSION" - name: Create GitHub Release env: GH_TOKEN: ${{ github.token }} run: | if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then echo "Release $GITHUB_REF_NAME already exists, skipping" else gh release create "$GITHUB_REF_NAME" --generate-notes || { echo "::warning::Packages were published to npm, but GitHub Release creation failed." echo "::warning::Create it manually: gh release create $GITHUB_REF_NAME --generate-notes" } fi