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:
#
# npx https://pkg.pr.new/datocms@<commit-sha> environments:list
#
# 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@v7
- name: Use Node.js
uses: actions/setup-node@v7
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/*'
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,24 @@ live APIs: they need a `.env` at the root (copy `.env.sample`) and, for
WordPress, `docker compose up` in `packages/cli-plugin-wordpress`. Each suite
checks its prerequisites first and tells you which one is missing.

## Trying a change before it's released

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

```
npx https://pkg.pr.new/datocms@<commit-sha> environments:list
npm i https://pkg.pr.new/@datocms/cli-plugin-wordpress@<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 only. A release publishes the packages that changed, and gives them
Expand Down
17 changes: 17 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 @@ -30,6 +30,7 @@
"lint-staged": "^13.1.0",
"mocha": "^10",
"oclif": "^4",
"pkg-pr-new": "^0.0.88",
"rimraf": "^3.0.2",
"ts-node": "^10.2.1",
"tslib": "^2.3.1",
Expand Down
5 changes: 5 additions & 0 deletions packages/cli-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
"author": "Stefano Verna <s.verna@datocms.com>",
"homepage": "https://github.com/datocms/cli",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/datocms/cli.git",
"directory": "packages/cli-utils"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"directories": {
Expand Down
Loading