{"id":39456030,"url":"https://github.com/zakodium/workflows","last_synced_at":"2026-01-18T04:35:59.614Z","repository":{"id":56661903,"uuid":"417764685","full_name":"zakodium/workflows","owner":"zakodium","description":"Shared reusable GitHub workflows","archived":false,"fork":false,"pushed_at":"2025-09-24T09:02:34.000Z","size":87,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-20T10:41:51.679Z","etag":null,"topics":["tools"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zakodium.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-10-16T08:20:12.000Z","updated_at":"2025-09-24T09:02:18.000Z","dependencies_parsed_at":"2025-12-09T20:07:00.672Z","dependency_job_id":null,"html_url":"https://github.com/zakodium/workflows","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/zakodium/workflows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zakodium%2Fworkflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zakodium%2Fworkflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zakodium%2Fworkflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zakodium%2Fworkflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zakodium","download_url":"https://codeload.github.com/zakodium/workflows/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zakodium%2Fworkflows/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28529853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["tools"],"created_at":"2026-01-18T04:35:59.479Z","updated_at":"2026-01-18T04:35:59.581Z","avatar_url":"https://github.com/zakodium.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# workflows\n\nShared reusable GitHub workflows.\n\n## Available workflows\n\n* [`nodejs` (Node.js CI)](#nodejs-ci)\n* [`release`](#release)\n* [`docker-image`](#docker-image)\n* [`typedoc`](#typedoc)\n* [`npm-prerelease`](#npm-prerelease)\n\n### Node.js CI\n\nGeneric workflow to run linters and tests for Node.js projects. It supports `eslint`,\n`prettier`, and `check-types` linter steps, will run tests using a matrix of\nNode.js versions, and verify that the package can be published to a registry\nand imported.\n\n#### Inputs\n\n* **node-version**:\n  * Version of Node.js used to run the lint steps.\n  * Default: `24.x`\n* **npm-setup-command**:\n  * Command used to set up the package before running other steps.\n  * Default: `npm ci` if there is a `package-lock.json`, `npm install` otherwise.\n* **lint-eslint**:\n  * Whether to run the `eslint` npm script.\n  * Default: `true`\n* **lint-prettier**:\n  * Whether to run the `prettier` npm script.\n  * Default: `true`\n* **lint-check-types**:\n  * Whether to run the `check-types` npm script. This should be set to `true`\n    for TypeScript projects.\n  * Default: `false`\n* **disable-tests**:\n  * Disable the test matrix.\n  * Default: `false`\n* **disable-test-package**:\n  * Disable testing that the package can safely be published to a registry\n    and imported.\n  * Default: `false`\n* **node-version-matrix**:\n  * Versions of Node.js to test on, as a JSON array.\n  * Default: `'[20, 22, 24, 25]'`\n* **test-setup-command**:\n  * Command used to set up the package before running npm tests.\n    Will run between `npm-setup-command` and `npm-test-command`.\n  * Default: `undefined`\n* **npm-test-command**:\n  * Command used to run the tests.\n  * Default: `npm run test-only`\n* **upload-coverage**:\n  * Whether to run the Codecov action to upload coverage data.\n    This requires to pass the `codecov-token` secret for private repos.\n  * Default: `true` for public repos and `false` for private repos.\n* **cwd**:\n  * Usefully for monorepos. Set the working directory to run the steps in.\n  * Default: `.`.\n\n#### Secrets\n\n* **codecov-token**\n  A token for code coverage uploads.\n  Necessary for private repos and public repos if the organization hasn't enabled [tokenless uploads](https://docs.codecov.com/docs/codecov-tokens#uploading-without-a-token).\n* **env**\n  Environment variables necessary to run the tests.\n  Must be passed with the `KEY=value` format (one per line).\n  Values will be automatically treated as secrets and redacted from the logs.\n\n#### Example usage for a TypeScript project\n  \n```yml\nname: Node.js CI\n\non:\n  push:\n    branches:\n      - main\n  pull_request:\n\njobs:\n  nodejs:\n    # Documentation: https://github.com/zakodium/workflows#nodejs-ci\n    uses: zakodium/workflows/.github/workflows/nodejs.yml@nodejs-v1\n    with:\n      lint-check-types: true\n```\n\n### Release\n\nThe release workflow helps to automatically release packages that conform to the\n[conventional commits specification](https://www.conventionalcommits.org/en/v1.0.0/).\n\nIt uses the [Release Please Action](https://github.com/google-github-actions/release-please-action#release-please-action)\nto maintain a release pull request. When the pull request is merged, the changelog\nis updated and a release is created in GitHub. Additionally, it is possible to\npublish the package to the npm and GitHub package registries.\n\n#### Inputs\n\n* **github-app-id**\n  * The id of a GitHub app used to publish the release.\n    The `github-app-key` secret is mandatory when this is set.\n* **npm**:\n  * Pass `true` to enable the npm publish steps. In that case, the `npm-token`\n    or `github-token` (or both) secret is mandatory.\n  * Default: `false`\n* **node-version**:\n  * Version of Node.js used to run the npm publish steps.\n  * Default: `24.x`\n* **npm-setup-command**:\n  * Command used to set up the package before publishing to npm.\n  * Default: `npm ci` if there is a `package-lock.json`, `npm install` otherwise.\n* **public**:\n  * This option only affects scoped packages.\n    Whether the package will be published to the public npm registry. If `false`,\n    the package will be published only to the GitHub Package Registry (GPR).\n    When publishing to GPR, the `github-token` must have the `packages: write` permission.\n  * Default: `false`\n* **release-type**:\n  * Option passed to the [release-please action](https://github.com/googleapis/release-please-action?tab=readme-ov-file#release-types-supported).\n    Set to the empty string to use a [release manifest config](https://github.com/googleapis/release-please/blob/main/docs/manifest-releaser.md).\n  * Default: `node`\n\n#### Secrets\n\n* **github-app-key**\n  A GitHub app private key belonging to the app referenced by `github-app-id`.\n  Mandatory when `github-app-id` is passed.\n* **github-token**\n  A GitHub token passed to release-please (if not using `github-app-key`) and npm (if the package is published to GPR).\n* **npm-token**\n  A npm automation token with the permission to publish this package.\n\n#### Example usages\n\n##### With a GitHub app - package released to GPR\n\n````yml\nname: Release\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  release:\n    # Documentation: https://github.com/zakodium/workflows#release\n    uses: zakodium/workflows/.github/workflows/release.yml@release-v1\n    permissions:\n      packages: write\n    with:\n      npm: true\n      public: false\n      github-app-id: ${{ vars.RELEASE_APP_ID }}\n    secrets:\n      github-app-key: ${{ secrets.RELEASE_APP_KEY }}\n      github-token: ${{ secrets.GITHUB_TOKEN }}\n````\n\n##### With a GitHub app - repository not published to a registry\n\n````yml\nname: Release\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  release:\n    # Documentation: https://github.com/zakodium/workflows#release\n    uses: zakodium/workflows/.github/workflows/release.yml@release-v1\n    with:\n      github-app-id: ${{ vars.RELEASE_APP_ID }}\n    secrets:\n      github-app-key: ${{ secrets.RELEASE_APP_KEY }}\n````\n\n##### With a GitHub PAT - package released to the public npm registry\n\n````yml\nname: Release\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  release:\n    # Documentation: https://github.com/zakodium/workflows#release\n    uses: zakodium/workflows/.github/workflows/release.yml@release-v1\n    with:\n      npm: true\n    secrets:\n      github-token: ${{ secrets.BOT_TOKEN }}\n      npm-token: ${{ secrets.NPM_BOT_TOKEN }}\n````\n\n### Docker image\n\nThis workflow allows to build and push a Docker image to some registry. It can handle simple explicit tags and releases.\n\n#### Inputs\n\n* **dockerfile**\n  * Path to the Dockerfile to build.\n  * Default: `Dockerfile`\n* **registry**\n  * Hostname for the Docker registry.\n  * Default: `ghcr.io`\n* **registry-user**\n  * Username to log in to the registry.\n  * Default: `${{ github.actor }}`\n* **image-name**\n  * Name of the Docker image. E.g. `zakodium/workflows`\n  * Default: `${{ github.repository }}`\n* **tag**\n  * Name of the tag to push. Ignored if `tag-version` is passed.\n  * Default: `HEAD`\n* **tag-version**\n  * Semver version to use as a tag (v prefix is optional). E.g. `v1.2.3`.\n    It will automatically be split to publish three versions. E.g. `1.2.3`, `1.2`, `1`.\n* **tag-latest**\n  * Whether a `latest` tag should be published as well.\n  * Default: `true` if `tag-version` is passed, `false` otherwise.\n* **cwd**:\n  * Set the working directory to run the Docker build in.\n  * Default: `.`\n* **ref**:\n  * GitHub ref to checkout.\n  * Default: Ref that corresponds to the triggering event.\n* **checkout-submodules**:\n  * Whether submodules should be initialized during checkout.\n  * Default `false`\n\n#### Secrets\n\n* **registry-token**\n  * Token for the Docker registry.\n  * Default: Job's `secret.GITHUB_TOKEN`.\n\n#### Example usage\n\nPublish an image to the GitHub package registry using the default job's token:\n\n```yml\nname: Docker Image CI\n\non:\n  workflow_dispatch:\n    inputs:\n      ref:\n        description: 'GitHub ref to checkout'\n        required: true\n        default: main\n      tag:\n        description: 'Docker tag to push (do NOT use \"latest\" or version numbers)'\n        required: true\n        default: 'HEAD'\n  push:\n    tags:\n      - v*\n\njobs:\n  docker-image:\n    # Documentation: https://github.com/zakodium/workflows#docker-image\n    uses: zakodium/workflows/.github/workflows/docker-image.yml@docker-image-v1\n    with:\n      ref: ${{ inputs.ref }}\n      tag: ${{ inputs.tag }}\n      tag-version: ${{ github.event_name == 'push' \u0026\u0026 github.ref_name || '' }}\n```\n\n### TypeDoc\n\nThe typedoc workflow can be used to generate a documentation website with [TypeDoc](https://typedoc.org/)\nand publish it to GitHub pages.\n\n#### Inputs\n\n* **entry**:\n  * Entry point of the API.\n    Multiple entry points can be specified using spaces as separators.\n    Defaults to `src/index.ts`.\n* **name**:\n  * Name of the package. It will be used as a documentation title.\n    Defaults to `package.json`'s name field.\n* **node-version**:\n  * Version of Node.js used to run the build steps.\n  * Default: `24.x`\n* **npm-setup-command**:\n  * Command used to set up the package before publishing to npm.\n  * Default: `npm ci` if there is a `package-lock.json`, `npm install` otherwise.\n\n#### Secrets\n\n* **github-token**\n  Token used to deploy to GitHub pages.\n\n#### Example usage\n\n````yml\nname: TypeDoc\n\non:\n  workflow_dispatch:\n  release:\n    types: [published]\n\njobs:\n  typedoc:\n    # Documentation: https://github.com/zakodium/workflows#typedoc\n    uses: zakodium/workflows/.github/workflows/typedoc.yml@typedoc-v1\n    with:\n      entry: 'src/index.ts'\n    secrets:\n      github-token: ${{ secrets.BOT_TOKEN }}\n````\n\n### npm prerelease\n\nThis workflow allows to create a npm pre-release.\nThe state of the repository will be published as-is, using `$currentVersion-pre-$epoch` as a version number\nand `pre` as the npm dist-tag.\nScoped packages are not supported for security reasons.\n\n#### Inputs\n\n* **node-version**:\n  * Version of Node.js used to run the npm publish steps.\n  * Default: `24.x`\n* **npm-setup-command**:\n  * Command used to set up the package before publishing to npm.\n  * Default: `npm ci` if there is a `package-lock.json`, `npm install` otherwise.\n\n#### Example usage\n\n````yml\nname: Prerelease package on npm\n\non:\n  pull_request:\n    types: [labeled]\n  workflow_dispatch:\n\njobs:\n  prerelease:\n    # Documentation: https://github.com/zakodium/workflows#npm-prerelease\n    uses: zakodium/workflows/.github/workflows/npm-prerelease.yml@npm-prerelease-v1\n    secrets:\n      github-token: ${{ secrets.BOT_TOKEN }}\n      npm-token: ${{ secrets.NPM_BOT_TOKEN }}\n````\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzakodium%2Fworkflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzakodium%2Fworkflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzakodium%2Fworkflows/lists"}