name: Release on: workflow_dispatch: inputs: tag: description: "Optional tag (e.g. v0.1.2). Leave blank when running from a tag push." required: false push: tags: - "v*" jobs: publish: runs-on: ubuntu-latest environment: npm-publish permissions: contents: write steps: - name: Checkout uses: actions/checkout@v4 - name: Verify tag matches package version if: startsWith(github.ref, 'refs/tags/') run: | PKG_VERSION=$(jq -r '.version' package.json) TAG_VERSION=${GITHUB_REF#refs/tags/} if [ "v${PKG_VERSION}" != "${TAG_VERSION}" ]; then echo "Tag (${TAG_VERSION}) does not match package.json version (v${PKG_VERSION})." exit 1 fi - name: Setup Bun uses: oven-sh/setup-bun@v1 with: bun-version: 1.3.0 - name: Install dependencies run: bun install - name: Build bundle run: bun run build - name: Smoke test - help run: ./letta.js --help - name: Smoke test - version run: ./letta.js --version || echo "Version flag not implemented yet" - name: Integration smoke test (real API) env: LETTA_API_KEY: ${{ secrets.LETTA_API_KEY }} run: ./letta.js --prompt "ping" --tools "" --permission-mode plan - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.ref_name }} files: letta.js fail_on_unmatched_files: true - name: Publish to npm env: NPM_CONFIG_TOKEN: ${{ secrets.NPM_TOKEN }} run: bun publish --access public --no-git-checks