{
  "markdown": "# Node.js Actions\n\nReusable GitHub workflows and composite actions for Node.js / TypeScript\nrepos in the agent-ix ecosystem.\n\nTwo entry-point workflows, picked by repo type:\n\n| Workflow | Use for | Docker? |\n|---|---|---|\n| `build-test.yml` | Libraries (npm-only publish) | No — bare pnpm |\n| `build-test-app.yml` | Apps (runtime image + Helm chart) | Yes |\n\nLibs are the common case. Apps are only the handful that ship a k8s\ndeployment.\n\n---\n\n## `build-test.yml` — library CI (non-docker)\n\nParallel `test` and `lint` status checks plus `publish`. Each job runs\n`make install` then `make test`/`make lint`/`make build`+publish against a\nshared pnpm store cache. No Docker image is built.\n\n**Jobs:**\n1. `test` — `make install && make test`\n2. `lint` — `make install && make lint`\n3. `publish` — `make install && make build`, then npm publish with\n   PR dist-tag (`pr-N`) on PRs or `latest` on tags. Auto-bumps patch\n   if the resolved version is already published, idempotent on races.\n\n**Inputs:**\n\n| Name | Required | Default |\n|---|---|---|\n| `node_version` | No | `20` |\n| `npm_registry` | No | `https://npm.pkg.github.com` |\n\n**Secrets:**\n\n| Name | Required |\n|---|---|\n| `NPM_REGISTRY_TOKEN` | Yes |\n\n**Example:**\n\n```yaml\nname: CI\non:\n  push:\n    tags: ['*.*.*']\n  workflow_dispatch:\n\njobs:\n  ci:\n    uses: agent-ix/nodejs-actions/.github/workflows/build-test.yml@main\n    secrets:\n      NPM_REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}\n```\n\nVersion resolution uses the git tag when checked out on one (clean tree);\notherwise falls back to `make version`.\n\n---\n\n## `build-test-app.yml` — app CI (docker + Helm)\n\nBuilds a Docker runtime image, optionally packages and pushes an OCI Helm\nchart, runs `test`/`eslint`/`prettier` inside the image, then publishes\nnpm + image. Used by apps whose deploy artifact is a container image.\n\n**Inputs:**\n\n| Name | Required | Default |\n|---|---|---|\n| `docker_repository` | Yes | — |\n| `docker_registry` | No | `ghcr.io` |\n| `npm_registry` | No | `https://npm.pkg.github.com` |\n| `helm_chart_path` | No | `\"\"` (no chart published) |\n| `helm_chart_registry` | No | `ghcr.io` |\n| `helm_chart_repository` | No | `\"\"` |\n\n**Secrets:** `DOCKER_REGISTRY_USER`, `DOCKER_REGISTRY_PASSWORD`,\n`NPM_REGISTRY_TOKEN`.\n\n**Example:**\n\n```yaml\njobs:\n  ci:\n    uses: agent-ix/nodejs-actions/.github/workflows/build-test-app.yml@main\n    with:\n      docker_repository: ${{ github.repository }}\n      helm_chart_path: helm\n      helm_chart_repository: agent-ix/my-app\n    secrets:\n      DOCKER_REGISTRY_USER: ${{ github.actor }}\n      DOCKER_REGISTRY_PASSWORD: ${{ secrets.REGISTRY_TOKEN }}\n      NPM_REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}\n```\n\n---\n\n## Composite actions\n\n### `setup-npmrc`\nWrites a CI `.npmrc` scoping `@agent-ix` at the configured registry with\nan auth token. Used by `build-test.yml` jobs before `make install`.\n\nInputs: `npm_registry` (default `https://npm.pkg.github.com`),\n`npm_registry_token` (required).\n\n### `image-metadata`, `test`, `eslint`, `prettier`, `publish`\nUsed internally by `build-test-app.yml`. Pull a dev Docker image and run\nthe named command inside it, plus image-metadata for version resolution\nand publish for npm release. Not intended for direct use by repos; call\n`build-test-app.yml` instead.\n\n---\n\n## Versioning\n\nThe repo is tagged with floating major tags (e.g. `v2`). `@main` tracks\nlatest; pin to `@v2` if you need to insulate against future breaking\nchanges.\n\nConsumer-side version is computed by the `publish` job:\n- On an exact git tag with a clean tree → that tag\n- Otherwise → `make version` from the consumer repo (semver with\n  commit metadata, e.g. `0.2.7-20260419.163812-abc123.xyz`)\n",
  "bytes": 3673,
  "sha": "7ea91649e61fcc3846319f47beea1054c021427256f984c3bb7901ea21fc1ba9",
  "repo_slug": "agent-ix/nodejs-actions",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_agent_ix_nodejs_actions_spec_index_md_6a4cdbfb/readme"
}