Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/continuous-releases.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Every commit pushed to a branch of this repo gets an installable preview of
# every package, without publishing anything to npm:
#
# npm i https://pkg.pr.new/datocms-structured-text-utils@<commit-sha>
#
# The point is to cross a repo boundary while developing. A change here can be
# tried inside a consumer that lives in another repository — `cms`, a demo, a
# customer project — from a real tarball, instead of `npm link` or pinning a
# git branch by hand and remembering to unpin it later. Installing one preview
# pulls in the previews of its siblings from the same commit, so a change that
# spans several packages is tried as one coherent set.
#
# 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:
node-version-file: .nvmrc
cache: 'npm'
- run: npm ci
- run: npm run build
# Once for all the packages, not once per package: pkg.pr.new expects a
# single invocation per workflow run, and rejects the rest as spam.
- run: npm exec -- pkg-pr-new publish --commentWithSha './packages/*'
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,23 @@ requirement; it is the release tooling that does.
The packages resolve each other through their built `dist/`, so **run
`npm run build` before `npm test`** on a fresh checkout.

### Trying a change before it's released

Every push to a branch here publishes a preview of all ten packages, which you
can install anywhere — no npm release, no `npm link`:

```
npm i https://pkg.pr.new/datocms-structured-text-utils@<commit-sha>
```

The exact URLs show up in the commit's check run on GitHub, and in a comment on
the pull request once there is one. Installing one preview pulls in the previews
of its siblings built from the same commit, so a change spanning several
packages can be tried as one coherent set.

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.

### Releasing (maintainers)

Every user-visible change needs a changeset: run `npx changeset` from the repo
Expand Down
11 changes: 11 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"eslint-config-prettier": "^9.1.0",
"husky": "^5.2.0",
"jest": "^29.7.0",
"pkg-pr-new": "^0.0.88",
"prettier": "^2.2.1",
"pretty-quick": "^3.1.0",
"rimraf": "^5.0.0",
Expand Down
Loading