name: Publish AI SDK on: push: branches: - main paths: - "packages/ai-sdk/package.json" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: false jobs: publish: runs-on: ubuntu-latest timeout-minutes: 15 permissions: contents: read id-token: write defaults: run: working-directory: ./packages/ai-sdk steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: '24' registry-url: 'https://registry.npmjs.org' - name: Upgrade npm for trusted publishing support run: npm install -g npm@latest - name: Setup Bun uses: oven-sh/setup-bun@v2 - name: Install dependencies working-directory: . run: bun install --frozen-lockfile - name: Check if version changed id: version-check run: | PACKAGE_NAME=$(jq -r '.name' package.json) LOCAL_VERSION=$(jq -r '.version' package.json) if npm view "$PACKAGE_NAME@$LOCAL_VERSION" version >/dev/null 2>&1; then echo "Version $LOCAL_VERSION already published, skipping." echo "changed=false" >> "$GITHUB_OUTPUT" else echo "Publishing $LOCAL_VERSION." echo "changed=true" >> "$GITHUB_OUTPUT" fi - name: Wait for the Tools dependency if: steps.version-check.outputs.changed == 'true' run: | TOOLS_SPEC=$(jq -r '.dependencies["@supermemory/tools"]' package.json) TOOLS_VERSION=${TOOLS_SPEC#^} TOOLS_VERSION=${TOOLS_VERSION#~} if [[ ! "$TOOLS_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+([+-][0-9A-Za-z.-]+)?$ ]]; then echo "Unsupported @supermemory/tools dependency spec: $TOOLS_SPEC" >&2 exit 1 fi for attempt in {1..20}; do PUBLISHED_VERSION=$(npm view "@supermemory/tools@$TOOLS_VERSION" version 2>/dev/null || true) if [ "$PUBLISHED_VERSION" = "$TOOLS_VERSION" ]; then echo "@supermemory/tools@$TOOLS_VERSION is available on npm." exit 0 fi echo "Waiting for @supermemory/tools@$TOOLS_VERSION (attempt $attempt/20)." sleep 15 done echo "@supermemory/tools@$TOOLS_VERSION was not published within five minutes." >&2 exit 1 - name: Build Tools dependency if: steps.version-check.outputs.changed == 'true' run: bun run --cwd ../tools build - name: Build AI SDK package if: steps.version-check.outputs.changed == 'true' run: bun run build - name: Verify packed artifact if: steps.version-check.outputs.changed == 'true' run: | npm pack --dry-run --json > "$RUNNER_TEMP/ai-sdk-pack.json" jq -e ' (.[0].files | any(.path == "dist/index.js")) and (.[0].files | any(.path == "dist/index.d.ts")) ' "$RUNNER_TEMP/ai-sdk-pack.json" >/dev/null - name: Publish if: steps.version-check.outputs.changed == 'true' run: npm publish --access public --provenance