name: KTX Release on: workflow_dispatch: inputs: publish_live: description: "Publish @kaelio/ktx to npm instead of running a dry-run" required: true type: boolean default: false permissions: contents: read concurrency: group: ktx-release-${{ github.ref }} cancel-in-progress: false jobs: npm-public-release: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 with: run_install: false - name: Setup Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: "24" cache: "pnpm" cache-dependency-path: "pnpm-lock.yaml" - name: Install TypeScript dependencies run: pnpm install --frozen-lockfile - name: Setup Python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.13" - name: Setup uv uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: enable-cache: true cache-dependency-glob: "uv.lock" - name: Install Python dependencies run: uv sync --all-packages - name: Build and verify artifacts run: pnpm run artifacts:check - name: Check release readiness run: pnpm run release:readiness - name: Dry-run npm publish if: ${{ !inputs.publish_live }} run: pnpm run release:npm-publish - name: Publish npm package if: ${{ inputs.publish_live }} run: pnpm run release:npm-publish -- --publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}