@stephansama packages / @stephansama/multipublish
@stephansama/multipublish
Publish packages to multiple providers easily
Table of contents
Open Table of contents
Installation
pnpm install @stephansama/multipublishUsage
Configuration
You can configure multipublish by creating a configuration file (or object) in the root of your project. The following file formats are supported:
package.json.multipublishrc.cjs.multipublishrc.js.multipublishrc.json.multipublishrc.mjs.multipublishrc.ts.multipublishrc.yaml.multipublishrc.yml.multipublishrc.config/.multipublishrc.json.config/.multipublishrc.yaml.config/.multipublishrc.yml.config/.multipublishrc.config/multipublishrc.cjs.config/multipublishrc.js.config/multipublishrc.json.config/multipublishrc.mjs.config/multipublishrc.ts.config/multipublishrc.yaml.config/multipublishrc.yml.config/multipublishrcmultipublish.config.cjsmultipublish.config.jsmultipublish.config.mjsmultipublish.config.ts
{
"$schema": "./node_modules/@stephansama/multipublish/config/schema.json",
"platforms": [
["jsr", { "experimentalGenerateJSR": true, "defaultExclude": ["!dist"] }],
[
"npm",
{
"registry": "https://npm.pkg.github.com",
"tokenEnvironmentKey": "GITHUB_TOKEN"
}
]
]
}GitHub NPM Registry
If publishing to the GitHub NPM registry, you must add packages to permissions when using a GitHub token. And allow write and read permissions for workflows (located in repo settings > actions > general).
permissions:
packages: writeJSR Configuration
When publishing to JSR, you must either have a valid jsr.json or deno.json, or allow experimentalGenerateJSR using the config option.
Changesets
If you are using jsr this with changesets, please update your version script with a preversion script that calls the multipublish CLI in order to update your existing jsr configurations.
JSR
{
"scripts": {
"preversion": "multipublish --useChangesetStatus --versionJsr",
"version": "changeset version"
}
}Published packages
you can run multipublish after a changeset publish like so
- if: github.ref_name == 'main'
name: 🦋 Create Changeset Release
uses: changesets/action@v1
id: changesets
with:
commit: "chore: Update version for release"
title: "chore: Update version for release"
publish: pnpm run publish
createGithubReleases: true
- name: publish to other registries
if: steps.changesets.outputs.published == 'true'
run: |
echo "${{ steps.changesets.outputs.publishedPackages }}" | multipublishZod Schema
Config
Object containing the following properties:
| Property | Type | Default |
|---|---|---|
platforms (*) | Platforms | |
tmpDirectory | string | '.release' |
useChangesets | boolean | true |
(*) Required.
JsrPlatformOptions
Object containing the following properties:
| Property | Type | Default |
|---|---|---|
allowSlowTypes | boolean | true |
defaultExclude | Array<string> | |
defaultInclude | Array<string> | |
experimentalGenerateJSR | boolean | false |
experimentalUpdateCatalogs | boolean | false |
All properties are optional.
NpmPlatformOptions
Object containing the following properties:
| Property | Type | Default |
|---|---|---|
registry | string | 'https://registry.npmjs.org/' |
strategy | '.npmrc' | 'package.json' | '.npmrc' |
tokenEnvironmentKey | string | 'NODE_AUTH_TOKEN' |
All properties are optional.
Platforms
*Array of 'jsr' | 'npm' *or* Tuple:
'jsr'- JsrPlatformOptions
'npm'- NpmPlatformOptions
Modules
| Module | Description |
|---|---|
‐ | |
‐ | |
‐ | |
‐ | |
‐ | |
‐ | |
‐ | |
‐ | |
‐ | |
‐ |