Delete upstream workflows

This fork does not ship upstream's releases, and its hosted-runner jobs
never start here.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
This commit is contained in:
2026-09-24 09:55:37 -07:00
parent accac98c88
commit 89e7d1090f
10 changed files with 0 additions and 749 deletions
-158
View File
@@ -1,158 +0,0 @@
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
concurrency:
group: claude-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
permissions:
contents: read
# This allows posting comments and reviews
# It does not allow pushing any commits or modifying any files in the repo
pull-requests: write
jobs:
review:
name: Review PR
# Note: This job runs on the BaseRunnerGroup to be able to access LLM Gateway
# It will not work on other runners
# Skip for external contributor PRs (forks) — secrets and runner group are unavailable
if: github.event.pull_request.head.repo.full_name == github.repository
timeout-minutes: 30
runs-on:
group: BaseRunnerGroup
steps:
- name: Harden the runner (Block unauthorized outbound calls)
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
with:
egress-policy: block
allowed-endpoints: >
api.github.com:443
bun.sh:443
github.com:443
objects.githubusercontent.com:443
registry.npmjs.org:443
release-assets.githubusercontent.com:443
${{ vars.LLM_GATEWAY_HOSTNAME }}:443
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
- name: Run Claude Code
id: claude-review
uses: anthropics/claude-code-action@1b8ee3b94104046d71fde52ec3557651ad8c0d71 # v1.0.29
env:
ANTHROPIC_BASE_URL: https://${{ vars.LLM_GATEWAY_HOSTNAME }}
with:
anthropic_api_key: ${{ secrets.LLM_GATEWAY_API_KEY }}
github_token: ${{ secrets.GITHUB_TOKEN }}
# When track_progress is enabled:
# - Creates a tracking comment with progress checkboxes
# - Includes all PR context (comments, attachments, images)
# - Updates progress as the review proceeds
# - Marks as completed when done
track_progress: false
# review instructions
prompt: |
You are reviewing a Pull Request for Base Account SDK — a TypeScript monorepo providing Coinbase Base's account, payment, and subscription libraries.
CODEBASE:
- Yarn 4 (Berry) workspaces monorepo, Node 20
- packages/account-sdk (@base-org/account): core SDK — payments, subscriptions, EIP-1193 provider, signing, RPC, embedded UI (Preact + zustand)
- packages/account-ui (@base-org/account-ui): multi-framework UI components (Preact, React, Vue, Svelte entrypoints)
- packages/account-cli (@base-org/account-cli): CLI tool
- examples/testapp: Next.js 14 playground/demo app
- Key dependencies: viem, ox, @coinbase/cdp-sdk, preact, zustand, eventemitter3
- Dual browser/node entrypoints via conditional exports in package.json
- Browser bundle built with Rollup + terser, bundle size budget enforced by size-limit (31 KB)
- CI already enforces: Biome lint + format (explicit ruleset, not recommended preset), TypeScript strict typecheck, Vitest tests on Node 20 & 22, CodeQL
PR TITLE ENFORCEMENT (do this FIRST, before the code review):
The PR title MUST follow Conventional Commits: `type(optional-scope): description` or `type!: description` for breaking changes.
Allowed types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert.
Rules:
- The type must be lowercase
- A colon and space (": ") must follow the type (or scope, or "!")
- The description must start with a lowercase letter
- Example valid titles: "feat: add payment retry logic", "fix(provider): handle null RPC response", "feat!: redesign subscription API"
Steps:
1. Get the current PR title: gh pr view ${{ github.event.pull_request.number }} --json title --jq '.title'
2. Check if it matches the pattern: ^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?!?: .+
3. If it does NOT match, infer the correct type from the PR diff and description, then fix it:
gh pr edit ${{ github.event.pull_request.number }} --title "<corrected title>"
4. Post a short comment explaining what you changed and why (use the summary comment, not a separate one)
REVIEW GUIDELINES:
- Review like a senior TypeScript engineer who owns this SDK
- Focus on correctness, type safety, security, and public API design
- DO NOT comment on formatting, import ordering, or style — Biome handles all of that
- DO NOT post praise, "looks good", or filler comments. If everything is fine, post nothing
- Use inline comments for specific code feedback via mcp__github_inline_comment__create_inline_comment
- Post one summary comment at the end with your overall assessment (only if you have findings)
DUPLICATE AVOIDANCE:
Before posting any inline comment, first fetch all existing inline review comments on this PR by running:
gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/comments --jq '.[] | select(.user.login == "github-actions[bot]") | {path, body}'
Do NOT post a comment if there is already a comment from github-actions[bot] on the same file raising the same or substantially similar issue.
Only post new findings that haven't been raised before.
WHAT TO LOOK FOR (ordered by severity):
1. Security (critical):
- Private keys, mnemonics, or secrets leaking into logs, error messages, or analytics
- Signature validation gaps — verify that signed data is checked before trust
- Untrusted RPC responses used without validation (e.g., trusting returned addresses or amounts)
- XSS vectors in embedded UI: innerHTML, dangerouslySetInnerHTML, unsanitized user input rendered in Preact components
- postMessage handlers without origin checks
- Sensitive data in localStorage/IndexedDB without encryption
2. Correctness & type safety:
- `as` type assertions that bypass the compiler — prefer type guards or narrowing
- `any` types leaking into non-test code (Biome warns, but review for subtle cases)
- Non-null assertions (`!`) on values that can genuinely be null/undefined at runtime
- Unhandled promise rejections — async functions called without await or .catch()
- Race conditions in async state management (zustand store updates, concurrent provider calls)
- BigInt / numeric handling: mixing Number and BigInt, precision loss on token amounts or gas values
- Incorrect error subclassing or swallowed error context in catch blocks
3. Public API & SDK design (this is a published npm package):
- Breaking changes to exported types, function signatures, or behavior without a major version bump
- New exports missing from package.json "exports" map (browser/node conditional paths)
- Leaking internal types or implementation details through the public API surface
- Generic error messages that don't help SDK consumers debug integration issues
- Missing or incorrect JSDoc on public APIs — consumers rely on these for IDE hints
4. Performance & bundle size:
- Large new dependencies or deep dependency trees that inflate the browser bundle (31 KB budget)
- Top-level side effects in modules that should be tree-shakeable
- Heavy operations (crypto, encoding, network calls) on the main thread without consideration for web workers
- Unnecessary re-renders in Preact components: missing memoization, new object/array refs in render
5. Architecture & patterns:
- Circular dependencies between packages or within the SDK's internal modules
- Browser-only APIs (window, document, DOM) used in code paths reachable from the node entrypoint
- Node-only APIs (fs, crypto, Buffer) used in code paths reachable from the browser entrypoint
- State management anti-patterns: direct store mutation, subscriptions without cleanup
- Event listener or WebSocket connections not cleaned up on unmount/disconnect
6. Testing gaps:
- New logic paths introduced without corresponding test coverage
- Tests that pass trivially (e.g., testing mocks instead of behavior)
- Flaky patterns: real timers, undeterministic ordering, network calls in unit tests
COMMENT MANAGEMENT:
Before posting your review summary, clean up previous summary comments from earlier runs:
1. Delete your previous summary comments by running: gh pr comment ${{ github.event.pull_request.number }} --delete-last --yes
2. Repeat step 1 until it returns an error (no more comments to delete)
3. Then post your new summary using: gh pr comment ${{ github.event.pull_request.number }} --body "<!-- CLAUDE_REVIEW_SUMMARY -->\n\n<your summary>"
Note: --delete-last only deletes your own top-level comments, not inline review comments or other users' comments.
claude_args: |
--model claude-opus-4-6-default
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr edit ${{ github.event.pull_request.number }} --title:*),Bash(gh pr comment ${{ github.event.pull_request.number }} --body:*),Bash(gh pr comment ${{ github.event.pull_request.number }} --edit-last --body:*),Bash(gh pr comment ${{ github.event.pull_request.number }} --delete-last:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/comments:*)"
-73
View File
@@ -1,73 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [master]
pull_request:
# The branches below must be a subset of the branches above
branches: [master]
schedule:
- cron: "45 14 * * 6"
# paths-ignore:
# - packages/wallet-native-sdk
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: ["javascript"]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
-109
View File
@@ -1,109 +0,0 @@
name: CI
on:
pull_request:
push:
branches: [master]
jobs:
lint:
name: Lint Check
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Checkout node action
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache-dependency-path: 'yarn.lock'
- name: 'Setup'
uses: ./.github/actions/setup
- name: Lint
run: yarn lint
format:
name: Format Check
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Checkout node action
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache-dependency-path: 'yarn.lock'
- name: 'Setup'
uses: ./.github/actions/setup
- name: Format Check
run: yarn format:check
typecheck:
name: Type Check
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Checkout node action
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache-dependency-path: '**/yarn.lock'
- name: 'Setup'
uses: ./.github/actions/setup
- name: Build packages
run: yarn build:packages
- name: Check Types
run: yarn typecheck
tests:
name: Tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
strategy:
matrix:
node-version: [20.x, 22.x, 24.x]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache-dependency-path: '**/yarn.lock'
- name: 'Setup'
uses: ./.github/actions/setup
- name: Build packages
run: yarn build:packages
- name: Run Unit Tests
run: yarn test
-67
View File
@@ -1,67 +0,0 @@
name: Slack notifications for PRs and Issues
on:
issues:
types: [opened, reopened]
env:
CHANNEL_WALLET_FEEDBACK: ${{ vars.CHANNEL_WALLET_FEEDBACK }}
CHANNEL_WALLET_SQUAD_BUILD: ${{ vars.CHANNEL_WALLET_SQUAD_BUILD }}
ON_CALL_WALLET: ${{ vars.ON_CALL_WALLET }}
ON_CALL_BUILD_SQUAD: ${{ vars.ON_CALL_BUILD_SQUAD }}
jobs:
checks:
runs-on: ubuntu-latest
outputs:
skip: ${{ env.skip }}
steps:
- name: Check spam labels
if: ${{ contains(github.event.*.labels.*.name, 'spam') }}
run: |
echo "skip=true" >> $GITHUB_ENV
echo "::error:: Spam label found."
notify:
runs-on: ubuntu-latest
needs: checks
if: ${{ vars.SLACK_ENABLED == 'true' && needs.checks.outputs.skip != 'true' }}
steps:
- name: Set channel and mention
run: |
if ${{ contains(join(github.event.issue.labels.*.name), 'type:') }}; then
echo "channel=${{ env.CHANNEL_WALLET_FEEDBACK }}" >> $GITHUB_ENV
echo "mention=!subteam^${{ env.ON_CALL_WALLET }}" >> $GITHUB_ENV
else
echo "channel=${{ env.CHANNEL_WALLET_SQUAD_BUILD }}" >> $GITHUB_ENV
echo "mention=!subteam^${{ env.ON_CALL_BUILD_SQUAD }}" >> $GITHUB_ENV
fi
- name: Set text
run: |
text=$(echo "${{ vars.SLACK_TEMPLATE }}")
text=${text//'{{event}}'/Issue ${{ env.action }}}
text=${text//'{{author}}'/${{ env.author }}}
text=${text//'{{url}}'/${{ env.url }}}
text=${text//'{{mention}}'/${{ env.mention }}}
text=${text//'{{repo}}'/${{ github.repository }}}
text="${text//$'\r\n'/'\n'}"
text="${text//$'\n'/'\n'}"
echo "text=$text" >> $GITHUB_ENV
env:
action: ${{ github.event.action }}
author: ${{ github.event.issue.user.login }}
url: ${{ github.event.issue.html_url }}
- name: Notify Slack
uses: slackapi/[email protected]
with:
payload: |
{
"channel": "#${{ env.channel }}",
"text": "*${{ env.title }}*\n${{ env.text }}",
"icon_emoji": ":${{ vars.ICON_EMOJI }}:"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
title: ${{ github.event.issue.title }}
-50
View File
@@ -1,50 +0,0 @@
name: Deploy Base Account SDK Playground to Pages
on:
workflow_dispatch:
push:
branches: [master]
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: yarn
- name: Setup Pages
uses: actions/configure-pages@v4
with:
static_site_generator: next
- name: Install dependencies
run: yarn install
- name: Build and export with Next.js
run: yarn deploy
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./examples/testapp/out
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
-33
View File
@@ -1,33 +0,0 @@
name: PR Title
on:
pull_request:
types: [opened, edited, synchronize, reopened]
permissions:
pull-requests: read
jobs:
lint:
name: Validate Conventional Commit format
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: |
feat
fix
chore
docs
style
refactor
perf
test
build
ci
revert
requireScope: false
subjectPattern: ^.+$
subjectPatternError: "PR title must not be empty after the type prefix."
@@ -1,66 +0,0 @@
name: Release Account (Canary)
on:
workflow_dispatch:
inputs:
packageVersion:
description: >
Base version for the canary release in MAJOR.MINOR.PATCH format.
Leave empty to auto-detect from the pending release-please PR.
Examples:
- Empty (default): reads version from Release PR (e.g., 2.6.0) and publishes 2.6.0-canary.<timestamp>
- "3.0.0": publishes 3.0.0-canary.<timestamp> (use to override when no Release PR exists)
required: false
default: ""
jobs:
canary:
name: Release canary
runs-on: ubuntu-latest
environment: publish
permissions:
contents: write
pull-requests: write
id-token: write
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup
uses: ./.github/actions/setup
- name: Resolve base version
id: version
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ -n "${{ github.event.inputs.packageVersion }}" ]; then
echo "base=${{ github.event.inputs.packageVersion }}" >> "$GITHUB_OUTPUT"
else
VERSION=$(gh pr list --label "autorelease: pending" --json title --jq '.[] | select(.title | test("chore\\(account\\)")) | .title | capture("release (?<v>[0-9]+\\.[0-9]+\\.[0-9]+)") | .v')
if [ -z "$VERSION" ]; then
echo "::error::No pending release-please PR found for account. Please provide a version manually."
exit 1
fi
echo "base=$VERSION" >> "$GITHUB_OUTPUT"
fi
- name: Update npm
run: npm install -g npm@latest
- name: Set version
run: yarn workspace @base-org/account version ${{ steps.version.outputs.base }}-canary.$(date +'%Y%m%d%H%M%S')
- name: Prebuild Packages
run: yarn workspace @base-org/account prebuild
- name: Build Packages
run: yarn workspace @base-org/account build
- name: Publish to npm
run: |
cd packages/account-sdk
npm publish --tag canary --access public
-58
View File
@@ -1,58 +0,0 @@
# Manual publish workflow for @base-org/account.
#
# This is the canonical workflow tied to the npm Trusted Publisher entry
# for @base-org/account (workflow filename: release-account.yml,
# environment: publish). The OIDC token minted by this workflow is the
# only one npm will accept for publishing this package.
#
# Use this workflow to publish a specific version that was prepared (and
# already tagged on master) by release-please but not yet pushed to npm,
# or for any out-of-band publish.
name: Release Account
on:
workflow_dispatch:
inputs:
packageVersion:
description: "The version to publish in MAJOR.MINOR.PATCH format (e.g., 2.6.0)"
required: true
default: ""
jobs:
release:
env:
PACKAGE_VERSION: ${{ github.event.inputs.packageVersion }}
name: Release
runs-on: ubuntu-latest
environment: publish
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: 'Setup'
uses: ./.github/actions/setup
- name: Update npm
run: |
npm install -g npm@latest
- name: Set version
run: yarn workspace @base-org/account version ${{ env.PACKAGE_VERSION }}
# Build the package
- name: Prebuild Packages
run: yarn workspace @base-org/account prebuild
- name: Build Packages
run: yarn workspace @base-org/account build
- name: Publish to npm
run: |
cd packages/account-sdk
npm publish --tag latest --access public
-89
View File
@@ -1,89 +0,0 @@
name: Release Please
on:
push:
branches:
- master
permissions:
contents: write
pull-requests: write
jobs:
release-please:
runs-on: ubuntu-latest
outputs:
account--release_created: ${{ steps.release.outputs['packages/account-sdk--release_created'] }}
account-ui--release_created: ${{ steps.release.outputs['packages/account-ui--release_created'] }}
steps:
- uses: googleapis/release-please-action@v4
id: release
with:
# Use a PAT (or GitHub App token) instead of GITHUB_TOKEN so that
# release-please's release PRs trigger CI. Events from GITHUB_TOKEN
# do not start new workflow runs:
# https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow
token: ${{ secrets.RELEASE_PLEASE_TOKEN }}
publish-account:
needs: release-please
if: ${{ needs.release-please.outputs.account--release_created == 'true' }}
name: Publish @base-org/account
runs-on: ubuntu-latest
environment: publish
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup
uses: ./.github/actions/setup
- name: Update npm
run: npm install -g npm@latest
- name: Prebuild Packages
run: yarn workspace @base-org/account prebuild
- name: Build Packages
run: yarn workspace @base-org/account build
- name: Publish to npm
run: |
cd packages/account-sdk
npm publish --tag latest --access public
publish-account-ui:
needs: release-please
if: ${{ needs.release-please.outputs.account-ui--release_created == 'true' }}
name: Publish @base-org/account-ui
runs-on: ubuntu-latest
environment: publish
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup
uses: ./.github/actions/setup
- name: Update npm
run: npm install -g npm@latest
- name: Build Packages
run: yarn build:packages
- name: Publish to npm
run: |
cd packages/account-ui
npm publish --tag latest --access public
-46
View File
@@ -1,46 +0,0 @@
# DEPRECATED: This workflow is superseded by the release-please automation (release-please.yml).
# Use this only as a fallback if release-please fails.
# To be removed after the first successful automated release.
name: "[DEPRECATED] Release Account UI (Manual)"
on:
workflow_dispatch:
inputs:
packageVersion:
description: "The version to publish in MAJOR.MINOR.PATCH format (e.g., 1.1.0)"
required: true
default: ""
jobs:
release:
env:
PACKAGE_VERSION: ${{ github.event.inputs.packageVersion }}
name: Release
runs-on: ubuntu-latest
environment: publish
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: 'Setup'
uses: ./.github/actions/setup
- name: Update npm
run: npm install -g npm@latest
- name: Set version
run: yarn workspace @base-org/account-ui version ${{ env.PACKAGE_VERSION }}
- name: Build Packages
run: yarn build:packages
- name: Publish to npm
run: |
cd packages/account-ui
npm publish --tag latest --access public