{"id":18320571,"url":"https://github.com/lukasbach/publish-fast","last_synced_at":"2026-04-13T13:32:33.655Z","repository":{"id":148386979,"uuid":"620008531","full_name":"lukasbach/publish-fast","owner":"lukasbach","description":"A straight forward tool for streamlining the publishing of NPM packages without a lot of setup and work","archived":false,"fork":false,"pushed_at":"2023-04-03T22:12:17.000Z","size":1464,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-09T13:41:54.053Z","etag":null,"topics":["build","changelog","ci","cli","deploy","github","npm","pnpm","publish","release","release-notes","tag","workflow","yarn"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/lukasbach.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"lukasbach"}},"created_at":"2023-03-27T21:08:31.000Z","updated_at":"2023-10-17T16:44:04.000Z","dependencies_parsed_at":"2023-05-19T23:30:39.207Z","dependency_job_id":null,"html_url":"https://github.com/lukasbach/publish-fast","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":"lukasbach/ts-starter","purl":"pkg:github/lukasbach/publish-fast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbach%2Fpublish-fast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbach%2Fpublish-fast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbach%2Fpublish-fast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbach%2Fpublish-fast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukasbach","download_url":"https://codeload.github.com/lukasbach/publish-fast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbach%2Fpublish-fast/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31754946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T13:27:56.013Z","status":"ssl_error","status_checked_at":"2026-04-13T13:21:23.512Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["build","changelog","ci","cli","deploy","github","npm","pnpm","publish","release","release-notes","tag","workflow","yarn"],"created_at":"2024-11-05T18:16:44.218Z","updated_at":"2026-04-13T13:32:33.636Z","avatar_url":"https://github.com/lukasbach.png","language":"TypeScript","funding_links":["https://github.com/sponsors/lukasbach"],"categories":[],"sub_categories":[],"readme":"# Publish Fast\n\n\u003e A straight forward tool for streamlining the publishing of NPM packages without a lot of setup and work\n\nThis project is inspired by [np](https://github.com/sindresorhus/np), and pretty much does the same thing,\nexcept that publish-fast is suitable to run in CI, directly creates a github release from a local template\ninstead of just drafting one, supports uploading release assets, automatically updates a changelog file\nand supports config files. It thus does more stuff automatically without much manual effort, and is more \nsuitable to run in automated workflows.\n\n![pf-release.gif](pf-release.gif)\n\n## Features\n\n- Automatically bumps version, creates a commit, creates a tag, and pushes it to the remote\n- A list of scripts to be run before the release can be provided (e.g. \"lint,test\")\n- Supports npm, yarn and pnpm\n- Automatically checks that the user is on the correct branch before releasing\n- Automatically checks that the working directory is clean before releasing\n- Loads release notes from a local file, and clears that file after publishing to an empty file or a predefined template\n- Can update a local changelog file with release notes\n- Can create a github release with release notes\n- Can upload assets to the github release defined by a glob option\n- Dry Run mode\n- Almost all steps can be skipped\n- Options can be passed in through a `.publishrc.json` file or the `publish` property in a `package.json` file\n\n## Caveats\n\n- The tool is currently opinionated about using github, and doesn't support other git hosting services\n- There is no support for reading changelog data from commit messages. The intended workflow is to collect changes\n  in a markdown file which is used for creating the changelog and github release, or not use a changelog at all.\n\n## Release Notes Workflow\n\nThis tool supports to automatically read release notes to be used in the changelog and github release.\nCreate a file in your repo, e.g. `release-notes.md`. There, every time you add new changes to your project,\ndocument the changes you made in that file.\n\nWhen running `publish-fast` to create a new release, use the option `--release-notes-source release-notes.md`.\nRemember that you can create a script alias in your package.json for the release script, so you don't need to\npass that every time. The release notes will be read from that file, and then the file will be cleared to an empty\nfile.\n\nYou can also define a template to which the release notes will be reset after the release instead of clearing it.\nUse the option `--release-notes-template release-notes-template.md` to do that.\n\n## Github Token\n\nIf uploading a github release is enabled, the tool needs a valid Github Auth token. If you run the tool on your\ndev machine, the easiest way is to install the [gh cli](https://cli.github.com/) and run `gh auth login` to\ncreate a token. Then, the tool will automatically use that token.\n\nIf you do not want to install the Github CLI, you can pass the token via the `--github-token` option or through the\n`GITHUB_TOKEN` environment variable. Alternatively, the tool will interactively ask for the token when run.\n\n## How to use\n\nYou can install `publish-fast` as dependency to your project, \n\n    npm install publish-fast\n\nand then add a script to your `package.json`:\n\n    \"scripts\": {\n      \"release\": \"publish-fast patch\"\n    }\n\nThen you can run `yarn release` or `npm run release` to publish a new version.\n\nYou can also install it globally via\n\n    npm install -g publish-fast\n\nor directly use via\n\n    npx publish-fast\n\nUsage:\n    Usage: publish-fast [options] [bump]\n    \n    Options:\n      -V, --version                                      output the version number\n      --verbose                                          verbose output (default: false)\n      --dry-run                                          dry run (default: false)\n      --package-manager \u003cpackage-manager\u003e                package manager, detected from lock file by default (default: \"auto\")\n      --pre-scripts \u003cpre-scripts\u003e                        pre scripts seperated by commas (e.g. lint,test) (default: \"lint,test\")\n      --commit-message \u003ccommit-message\u003e                  new version commit message (default: \"chore(release): {version}\")\n      --commit-author \u003ccommit-author\u003e                    new version commit author\n      --commit-email \u003ccommit-email\u003e                      new version commit email\n      --branch \u003cbranch\u003e                                  release branch, for verification (default: \"main\")\n      --release-notes-source \u003crelease-notes-source\u003e      path to release notes source markdown file. Leave empty to use empty release notes.\n      --release-notes-template \u003crelease-notes-template\u003e  path to release notes template markdown file. Leave empty to not recreate the file after publishing.\n      --changelog \u003cchangelog\u003e                            path to changelog file. Leave empty to not update changelog. Will automatically be skipped if file doesn't exist. (default: \"CHANGELOG.md\")\n      --github-token \u003cgithub-token\u003e                      github token for creating github release. If not provided, CLI will attempt to load through gh CLI, or alternatively interactively ask.\n      --draft-release                                    create github release as draft (default: false)\n      --npm-tag \u003cnpm-tag\u003e                                npm tag to publish to (default: \"latest\")\n      --npm-access \u003cnpm-access\u003e                          npm access level\n      --otp \u003cnpm-otp\u003e                                    npm otp code\n      --release-assets \u003cglob\u003e                            glob for release assets to upload to the github release\n      --pipe-stdout                                      pipe stdout of child processes through (default: false)\n      --no-version-prefix                                dont prefix the version with \"v\" (i.e. 1.0.0 instead of v1.0.0) in tag and github release name\n      --yes                                              skip verify prompt (default: false)\n      --skip-install                                     skip installing dependencies (default: false)\n      --skip-github-release                              skip creating github release (default: false)\n      --skip-publish                                     skip publishing to npm (default: false)\n      --skip-bump                                        skip bumping version (default: false)\n      --skip-push                                        skip pushing changes (default: false)\n      --skip-commit                                      skip committing changes (default: false)\n      -h, --help                                         display help for command\n\nYou can also pass in options through a `.publishrc.json` file or the `publish` property in a `package.json` file.\nNote that all options, which are snake-case in the CLI, are camelCase in the config file, i.e. the `--release-notes-source`\noption becomes `releaseNotesSource` in the config file.\n\n## Dry Run Demo\n\n![pf-dryrun.gif](pf-dryrun.gif)\n\n## How to develop\n\n- `yarn` to install dependencies\n- `yarn start` to run in dev mode\n- `yarn test` to run tests\n- `yarn lint` to test and fix linter errors\n\nTo publish a new version, run `yarn release`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukasbach%2Fpublish-fast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukasbach%2Fpublish-fast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukasbach%2Fpublish-fast/lists"}