From d8a7fd3337d057f0547a051f25351584fdeced03 Mon Sep 17 00:00:00 2001 From: Stefano Verna Date: Mon, 31 Aug 2026 10:47:28 +0200 Subject: [PATCH] ci: publish a preview of the package on every push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every commit pushed to a branch now produces an installable tarball, so a rendering change can be tried in a real Next.js site without a release: npm i https://pkg.pr.new/datocms/react-datocms@ Nothing reaches npm, no version is spent, and there is nothing to clean up afterwards. This replaces `npm link` and pinning a git branch by hand, and it means a fix can be handed to whoever reported it before we cut a release. Runs only on pushes to branches of this repo, so a fork cannot mint a URL under our namespace without a maintainer pushing the code first. Also replaces the `git://` in `repository.url` with `git+https://`. GitHub stopped serving `git://` in 2022, so the field was stale either way; it is also what pkg.pr.new reads — from the npm registry, not from here — to decide whether it can mint the shorter URL form. So the short form starts working one release from now, and until then the URL above is the one to use. Claude-Session: https://claude.ai/code/session_01TbxhxyU1XBsSKtoCJXwAoD --- .github/workflows/continuous-releases.yml | 46 +++++++++++++++++++++++ README.md | 17 +++++++++ package-lock.json | 11 ++++++ package.json | 3 +- 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/continuous-releases.yml diff --git a/.github/workflows/continuous-releases.yml b/.github/workflows/continuous-releases.yml new file mode 100644 index 0000000..fe23a15 --- /dev/null +++ b/.github/workflows/continuous-releases.yml @@ -0,0 +1,46 @@ +# Every commit pushed to a branch of this repo gets an installable preview of +# the package, without publishing anything to npm: +# +# npm i https://pkg.pr.new/datocms/react-datocms@ +# +# The point is to cross a repo boundary while developing. A change here can be +# tried inside a site or a demo that lives in another repository from a real +# tarball, instead of `npm link` or pinning a git branch by hand and +# remembering to unpin it later. It also means a fix can be handed to whoever +# reported it before we cut a release. +# +# Pull requests opened from forks are deliberately not published: this runs on +# pushes to branches of *this* repo, which only people with write access can +# make, so an unreviewed fork cannot mint a URL under our namespace. If we ever +# want fork previews too, pkg.pr.new documents an "approved pull requests only" +# recipe that gates them behind a maintainer's review. +name: Continuous releases + +on: + push: + # Every branch. Defining `branches` on its own also means tag pushes don't + # trigger this, which is what we want: a tag points at a commit that was + # already published when it landed on its branch. + branches: ["**"] + +permissions: {} + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js + uses: actions/setup-node@v4 + with: + # Pinned, and deliberately not the matrix `node.js.yml` runs: this + # job only has to build a tarball, not prove which Node versions the + # package supports. + node-version: 22 + cache: "npm" + - run: npm ci + - run: npm run build + # No path argument: this is a single-package repo, so pkg-pr-new packs + # the working directory. + - run: npm exec -- pkg-pr-new publish --commentWithSha diff --git a/README.md b/README.md index 000fa23..81998a0 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,23 @@ npm run start --- +# Trying a change before it's released + +Every push to a branch here publishes a preview of the package, which you can +install anywhere — no npm release, no `npm link`: + +``` +npm i https://pkg.pr.new/datocms/react-datocms@ +``` + +The exact URL shows up in the commit's check run on GitHub, and in a comment on +the pull request once there is one. This is the supported way to try a change +inside a site that lives in another repository, or to hand a fix to whoever +reported it before it is released. + +Previews are throwaway: they are never published to npm, and the URL stops +resolving after a while. Never commit one to a `package.json` that ships. + # What is DatoCMS? DatoCMS - The Headless CMS for the Modern Web diff --git a/package-lock.json b/package-lock.json index c38b48c..3ce81a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "intersection-observer": "^0.12.0", "jest-environment-jsdom": "^29.7.0", "np": "^10.0.7", + "pkg-pr-new": "^0.0.88", "raf": "^3.4.1", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -8860,6 +8861,16 @@ "node": ">=8" } }, + "node_modules/pkg-pr-new": { + "version": "0.0.88", + "resolved": "https://registry.npmjs.org/pkg-pr-new/-/pkg-pr-new-0.0.88.tgz", + "integrity": "sha512-Xc6PMJ2gher0WZP+rtjefFk26hIb7V1PTLL30bmy1Z2vsRmSvqiss7Ag1XUdyplTGYzIlFNJp4L3vMNmK44N6g==", + "dev": true, + "license": "MIT", + "bin": { + "pkg-pr-new": "bin/cli.js" + } + }, "node_modules/player.style": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.3.1.tgz", diff --git a/package.json b/package.json index 9c5f436..6fc23a8 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ ], "repository": { "type": "git", - "url": "git://github.com/datocms/react-datocms.git" + "url": "git+https://github.com/datocms/react-datocms.git" }, "license": "MIT", "author": "Stefano Verna ", @@ -143,6 +143,7 @@ "intersection-observer": "^0.12.0", "jest-environment-jsdom": "^29.7.0", "np": "^10.0.7", + "pkg-pr-new": "^0.0.88", "raf": "^3.4.1", "react": "^17.0.2", "react-dom": "^17.0.2",