PCO-Release automates the release process for Planning Center's JavaScript/TypeScript libraries. It manages version bumping, changelog updates, PR creation, npm publishing, and coordinated deployments across consuming repositories -- all via GitHub Actions.
- How It Works
- Standard Repos
- Lerna Monorepos
- Shared Workflows
- Actions Reference
- NPM Authentication via OIDC Trusted Publishing
- Configuration Reference
- Contributing
The typical release flow for a library using PCO-Release:
- Developer merges a PR to
main-- therelease-by-praction creates a release PR on thepco-release--internalbranch with a version bump and changelog update. - Labels control the version bump -- apply
pco-release-patch,pco-release-minor, orpco-release-majorto the release PR. Thesync-with-labelsaction updates the version accordingly. - Release PR is merged -- the release workflow publishes to npm and creates a GitHub release.
- Deploy -- the
deployaction opens PRs to update the dependency across all consuming repos.
At any point during development, you can also create Release Candidates or QA Releases by commenting on PRs.
For single-package JavaScript/TypeScript libraries. Add these workflow files to your library's .github/workflows/ directory.
Ensure your repo has access to the PCO_DEPENDENCIES_APP_ID and PCO_DEPENDENCIES_PRIVATE_KEY secrets (reach out in #github-discuss on Slack if you need access).
To get the full release automation working, you need these workflow files at minimum:
1. Create a release PR when code is merged to main
# .github/workflows/pco-release-create-pr.yml
on:
push:
branches:
- main
permissions:
contents: write
pull-requests: write
name: PCO-Release - Create Release PR
jobs:
release-automation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: "yarn"
- uses: planningcenter/pco-release-action/release-by-pr@v1
with:
app-id: ${{ secrets.PCO_DEPENDENCIES_APP_ID }}
private-key: ${{ secrets.PCO_DEPENDENCIES_PRIVATE_KEY }}2. Publish and deploy when the release PR is merged
# .github/workflows/pco-release-on-merge.yml
on:
pull_request:
types: [closed]
branches:
- main
name: PCO-Release - Release on Merge
jobs:
release:
if: >-
github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'pco-release-pending')
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/release.yml@v1
secrets: inherit
with:
pr-number: ${{ github.event.pull_request.number }}You'll also want to add the shared workflows (label syncing, changelog enforcement, and dependabot automation).
Workflow: planningcenter/pco-release-action/.github/workflows/release.yml@v1
Creates a GitHub release, publishes to npm and GitHub Package Registry, and deploys to all consuming repos via PRs. This is the main workflow for publishing a release.
Trigger: When a release PR (with pco-release-pending label) is merged to main.
Requires OIDC trusted publishing -- your package must be configured on npmjs.com and the calling workflow must include
id-token: write.
# .github/workflows/pco-release-on-merge.yml
on:
pull_request:
types: [closed]
branches:
- main
jobs:
release:
if: >-
github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'pco-release-pending')
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/release.yml@v1
secrets: inherit
with:
pr-number: ${{ github.event.pull_request.number }}
# All below are optional:
# install-command: yarn install --check-files
# build-command: yarn build
# test-command: yarn test
# publish-command: npm publish
# cache: yarn
# build-directory: dist
# only: ""
# include: ""
# exclude: ""
# upgrade-commands: "{}"
# package-json-path: package.json| Input | Description | Default |
|---|---|---|
pr-number |
(required) The PR number that triggered the release | |
install-command |
Command to install dependencies | yarn install --check-files |
build-command |
Command to build the package | yarn build |
test-command |
Command to run tests | yarn test |
publish-command |
Command to publish to npm | npm publish |
cache |
Package manager for caching (npm, yarn, pnpm, or "") |
yarn |
build-directory |
Directory containing build output | dist |
only |
Comma-separated list of repos to exclusively update | "" |
include |
Comma-separated list of repos to include (without checking for dep) | "" |
exclude |
Comma-separated list of repos to exclude | "" |
upgrade-commands |
JSON string of repo-specific upgrade commands | "{}" |
package-json-path |
Path to package.json | package.json |
Workflow: planningcenter/pco-release-action/.github/workflows/release-candidate.yml@v1
Creates an RC prerelease version, publishes to npm with the @next tag, and merges to the staging branch in consumer repos.
Trigger: Comment @pco-release rc on a release PR.
Requires OIDC trusted publishing -- your package must be configured on npmjs.com and the calling workflow must include
id-token: write.
# .github/workflows/pco-release-rc.yml
on:
issue_comment:
types: [created]
jobs:
create-rc-and-deploy:
if: >-
github.event.issue.pull_request &&
contains(github.event.comment.body, '@pco-release rc')
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/release-candidate.yml@v1
secrets: inheritYou can include additional context in the comment that will be added to the release notes:
@pco-release rc
This RC is testing the new Widget feature.
Please test:
- Thing A
- Thing B
| Input | Description | Default |
|---|---|---|
install-command |
Command to install dependencies | yarn install --check-files |
build-command |
Command to build the package | yarn build |
test-command |
Command to run tests | yarn test |
prepublish-command |
Command to publish the prerelease to npm | npm publish --tag next |
cache |
Package manager for caching | yarn |
build-directory |
Directory containing build output | dist |
only |
Comma-separated list of repos to exclusively update | "" |
include |
Comma-separated list of repos to include | "" |
exclude |
Comma-separated list of repos to exclude | "" |
upgrade-commands |
JSON string of repo-specific upgrade commands | "{}" |
package-json-path |
Path to package.json | package.json |
yarn-version-command |
Command to bump version | yarn version |
Workflow: planningcenter/pco-release-action/.github/workflows/qa-release.yml@v1
Creates a QA prerelease version for testing a specific branch, publishes to npm, and deploys to a protonova environment.
Trigger: Comment @pco-release qa on any PR.
Requires OIDC trusted publishing -- your package must be configured on npmjs.com and the calling workflow must include
id-token: write.
# .github/workflows/pco-release-qa.yml
on:
issue_comment:
types: [created]
jobs:
create-qa-release-and-deploy:
if: >-
github.event.issue.pull_request &&
contains(github.event.comment.body, '@pco-release qa')
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/qa-release.yml@v1
secrets: inheritYou can include test instructions in the comment:
@pco-release qa
Testing the new Widget feature in protonova.
| Input | Description | Default |
|---|---|---|
install-command |
Command to install dependencies | yarn install --check-files |
build-command |
Command to build the package | yarn build |
test-command |
Command to run tests | yarn test |
prepublish-command |
Command to publish the prerelease to npm | npm publish --tag next |
cache |
Package manager for caching | yarn |
build-directory |
Directory containing build output | dist |
only |
Comma-separated list of repos to exclusively update | "" |
include |
Comma-separated list of repos to include | "" |
exclude |
Comma-separated list of repos to exclude | "" |
upgrade-commands |
JSON string of repo-specific upgrade commands | "{}" |
package-json-path |
Path to package.json | package.json |
yarn-version-command |
Command to bump version | yarn version |
branch-name |
Custom proto deploy branch name | |
custom-message |
Custom message for the deployment report |
Workflow: planningcenter/pco-release-action/.github/workflows/revert.yml@v1
Quickly reverts all consumer repos to a previous version of the library by creating PRs.
Trigger: Manual workflow dispatch.
# .github/workflows/pco-release-revert.yml
on:
workflow_dispatch:
inputs:
pr-number:
description: "PR number to comment the report to"
required: true
release-tag:
description: "Release tag to revert to (e.g. v4.9.1)"
required: true
jobs:
revert:
permissions:
contents: write
pull-requests: write
uses: planningcenter/pco-release-action/.github/workflows/revert.yml@v1
secrets: inherit
with:
pr-number: ${{ inputs.pr-number }}
release-tag: ${{ inputs.release-tag }}| Input | Description | Default |
|---|---|---|
pr-number |
(required) PR number to post the revert report to | |
release-tag |
(required) The release tag to revert to (e.g. v4.9.1) |
|
only |
Comma-separated list of repos to exclusively update | "" |
include |
Comma-separated list of repos to include | "" |
exclude |
Comma-separated list of repos to exclude | "" |
package-json-path |
Path to package.json | package.json |
For Lerna monorepos where multiple packages need coordinated version bumps. Use these workflows instead of the standard ones above.
Ensure your repo has access to the PCO_DEPENDENCIES_APP_ID and PCO_DEPENDENCIES_PRIVATE_KEY secrets (reach out in #github-discuss on Slack if you need access).
1. Create a release PR when code is merged to main
# .github/workflows/pco-release-create-pr.yml
on:
push:
branches:
- main
jobs:
release-pr:
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/lerna-release-pr.yml@v1
secrets: inherit2. Publish and deploy when the release PR is merged
# .github/workflows/pco-release-on-merge.yml
on:
pull_request:
types: [closed]
branches:
- main
jobs:
release:
if: >-
github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'pco-release-pending')
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/lerna-release-on-merge.yml@v1
secrets: inheritYou'll also want to add the shared workflows (label syncing, changelog enforcement, and dependabot automation).
Workflow: planningcenter/pco-release-action/.github/workflows/lerna-release-pr.yml@v1
Creates a release PR and publishes RC versions for changed packages when code is pushed to main.
Requires OIDC trusted publishing -- your packages must be configured on npmjs.com and the calling workflow must include
id-token: write.
# .github/workflows/pco-release-create-pr.yml
on:
push:
branches:
- main
jobs:
release-pr:
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/lerna-release-pr.yml@v1
secrets: inherit| Input | Description | Default |
|---|---|---|
install-command |
Command to install dependencies | yarn install --check-files |
node-version |
Node.js version | 24 |
cache |
Package manager for caching | yarn |
Workflow: planningcenter/pco-release-action/.github/workflows/lerna-release-on-merge.yml@v1
Publishes all packages and deploys to consumers when the Lerna release PR is merged.
Requires OIDC trusted publishing -- your packages must be configured on npmjs.com and the calling workflow must include
id-token: write.
# .github/workflows/pco-release-on-merge.yml
on:
pull_request:
types: [closed]
branches:
- main
jobs:
release:
if: >-
github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'pco-release-pending')
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/lerna-release-on-merge.yml@v1
secrets: inherit| Input | Description | Default |
|---|---|---|
install-command |
Command to install dependencies | yarn install --check-files |
node-version |
Node.js version | 24 |
cache |
Package manager for caching | yarn |
only |
Comma-separated list of repos to exclusively update | "" |
include |
Comma-separated list of repos to include | "" |
exclude |
Comma-separated list of repos to exclude | "" |
Workflow: planningcenter/pco-release-action/.github/workflows/lerna-qa-release.yml@v1
Creates QA releases for all changed packages in the monorepo. Triggered by commenting @pco-release qa on a PR.
Supports OIDC trusted publishing -- set
use-oidc: trueand addid-token: writeto your calling workflow permissions. OIDC will become the default in a future release.
# .github/workflows/pco-release-qa.yml
on:
issue_comment:
types: [created]
jobs:
create-qa-release-and-deploy:
if: >-
github.event.issue.pull_request &&
contains(github.event.comment.body, '@pco-release qa')
permissions:
contents: write
pull-requests: write
packages: write
id-token: write # Required when use-oidc is true
uses: planningcenter/pco-release-action/.github/workflows/lerna-qa-release.yml@v1
secrets: inherit
with:
use-oidc: true| Input | Description | Default |
|---|---|---|
install-command |
Command to install dependencies | yarn install --check-files |
node-version |
Node.js version | 24 |
cache |
Package manager for caching | yarn |
only |
Comma-separated list of repos to exclusively update | "" |
include |
Comma-separated list of repos to include | "" |
exclude |
Comma-separated list of repos to exclude | "" |
lerna-json-path |
Path to lerna.json | lerna.json |
branch-name |
Custom proto deploy branch name | |
custom-message |
Custom deployment message | |
use-oidc |
Use OIDC trusted publishing instead of PLANNINGCENTER_NPM_TOKEN |
false |
Workflow: planningcenter/pco-release-action/.github/workflows/lerna-deploy-rc.yml@v1
Deploys RC versions to staging for consumer repos. Triggered by commenting @pco-release deploy on the release PR.
# .github/workflows/pco-release-deploy-rc.yml
on:
issue_comment:
types: [created]
jobs:
deploy-rc:
if: >-
github.event.issue.pull_request &&
contains(github.event.comment.body, '@pco-release deploy')
permissions:
contents: write
pull-requests: write
uses: planningcenter/pco-release-action/.github/workflows/lerna-deploy-rc.yml@v1
secrets: inherit| Input | Description | Default |
|---|---|---|
install-command |
Command to install dependencies | yarn install --check-files |
node-version |
Node.js version | 24 |
cache |
Package manager for caching | yarn |
only |
Comma-separated list of repos to exclusively update | "" |
include |
Comma-separated list of repos to include | "" |
exclude |
Comma-separated list of repos to exclude | "" |
upgrade-commands |
JSON string of repo-specific upgrade commands | "{}" |
These workflows work the same way for both standard repos and Lerna monorepos.
Keeps the release PR version in sync when pco-release-patch, pco-release-minor, or pco-release-major labels are added.
# .github/workflows/pco-release-sync-with-labels.yml
on:
pull_request:
types: [labeled]
permissions:
contents: write
pull-requests: write
name: PCO-Release - Sync With Labels
jobs:
sync-with-labels:
if: >-
github.event.pull_request.head.ref == 'pco-release--internal' &&
(github.event.label.name == 'pco-release-patch' ||
github.event.label.name == 'pco-release-minor' ||
github.event.label.name == 'pco-release-major')
runs-on: ubuntu-latest
steps:
- uses: planningcenter/pco-release-action/sync-with-labels@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Enforces that PRs to main include a CHANGELOG.md update.
# .github/workflows/pco-release-require-changelog.yml
on:
pull_request:
branches: [main]
name: PCO-Release - Require Changelog Update
jobs:
require-changelog-update:
runs-on: ubuntu-latest
permissions:
pull-requests: read
contents: read
steps:
- uses: actions/checkout@v4
- id: changed-files
uses: tj-actions/changed-files@v44
with:
files: CHANGELOG.md
- if: steps.changed-files.outputs.any_changed == 'false'
run: |
echo "Pull Requests require an update to the CHANGELOG.md file."
exit 1Automatically adds changelog entries when dependabot creates PRs, so they pass the changelog requirement.
# .github/workflows/pco-release-dependabot-automation.yml
on: pull_request
name: PCO-Release - Dependabot Automation
jobs:
update-dependabot-pr-changelog:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
- uses: planningcenter/pco-release-action/dependabot-automation@v1Individual composite actions used by the workflows above. You can also use them directly in workflow steps for custom setups.
Creates or updates a release PR on the pco-release--internal branch with version bumps based on conventional commits.
- uses: planningcenter/pco-release-action/release-by-pr@v1
with:
app-id: ${{ secrets.PCO_DEPENDENCIES_APP_ID }}
private-key: ${{ secrets.PCO_DEPENDENCIES_PRIVATE_KEY }}| Input | Description | Default |
|---|---|---|
app-id |
GitHub App ID for authentication | |
private-key |
GitHub App private key | |
GITHUB_TOKEN |
Alternative: GitHub token | |
release_type |
Force a release type (patch, minor, major, nochange) |
nochange |
package_json_path |
Path to package.json | package.json |
version_command |
Command to bump version | yarn version |
Creates a GitHub release when a release PR is merged.
- uses: planningcenter/pco-release-action/create-release-on-merge@v1
with:
app-id: ${{ secrets.PCO_DEPENDENCIES_APP_ID }}
private-key: ${{ secrets.PCO_DEPENDENCIES_PRIVATE_KEY }}| Input | Description | Default |
|---|---|---|
app-id |
GitHub App ID (allows triggering other workflows) | |
private-key |
GitHub App private key | |
package_json_path |
Path to package.json | package.json |
Updates the version bump type on a release PR when pco-release-patch, pco-release-minor, or pco-release-major labels are applied.
- uses: planningcenter/pco-release-action/sync-with-labels@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}| Input | Description | Default |
|---|---|---|
GITHUB_TOKEN |
(required) GitHub token | |
cache |
Package manager for caching | yarn |
package_json_path |
Path to package.json | package.json |
version_command |
Command to bump version | yarn version |
Automatically adds changelog entries when dependabot creates PRs.
- uses: planningcenter/pco-release-action/dependabot-automation@v1| Input | Description | Default |
|---|---|---|
changelog_path |
Path to the changelog file | ./CHANGELOG.md |
Creates PRs (or merges directly) to update a package version across all consumer repositories.
- uses: planningcenter/pco-release-action/deploy@v1
with:
app-id: ${{ secrets.PCO_DEPENDENCIES_APP_ID }}
private-key: ${{ secrets.PCO_DEPENDENCIES_PRIVATE_KEY }}| Input | Description | Default |
|---|---|---|
app-id |
(required) GitHub App ID | |
private-key |
(required) GitHub App private key | |
automerge |
Auto-merge PRs for compatible versions | |
change-method |
How to apply changes: pr, merge, or revert |
pr |
branch-name |
Target branch for merge method |
staging |
only |
Comma-separated repos to exclusively update | "" |
include |
Comma-separated repos to include | "" |
exclude |
Comma-separated repos to exclude | "" |
upgrade-commands |
JSON of repo-specific upgrade commands | "{}" |
package-name |
The package name to update | |
version |
The version to update to | |
owner |
Owner of target repositories | planningcenter |
allow-major |
Allow major version updates | false |
package-json-path |
Path to package.json | package.json |
node-version |
Node version for upgrade commands | 24 |
Consumer repos can define a .pco-release.config.yml file for custom upgrade behavior:
# .pco-release.config.yml
upgrade_command: "yarn tr upgrade"Creates an RC prerelease version from a PR branch. Publishes as v{version}-rc.N.
- uses: planningcenter/pco-release-action/create-release-candidate@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}| Input | Description | Default |
|---|---|---|
GITHUB_TOKEN |
(required) GitHub token | |
package-json-path |
Path to package.json | package.json |
yarn-version-command |
Command to bump version | yarn version |
node-version |
Node.js version | 24 |
Creates a QA prerelease version for testing a specific branch. Publishes as v{version}-qa-{pr_number}.N.
- uses: planningcenter/pco-release-action/create-qa-release@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}| Input | Description | Default |
|---|---|---|
GITHUB_TOKEN |
(required) GitHub token | |
package-json-path |
Path to package.json | package.json |
yarn-version-command |
Command to bump version | yarn version |
node-version |
Node.js version | 24 |
Utility action that caches node_modules for faster workflow runs.
- uses: planningcenter/pco-release-action/node-cache@v1
with:
cache: yarn
node-version: "24"| Input | Description | Default |
|---|---|---|
cache |
Package manager (npm, yarn, pnpm, or "") |
yarn |
node-version |
Node.js version | 24 |
Posts deployment results as a comment on the originating PR.
- uses: planningcenter/pco-release-action/reporting@v1
with:
results-json: ${{ steps.deploy.outputs.json }}
pr-number: ${{ github.event.pull_request.number }}
actor: ${{ github.actor }}
version-tag: v1.2.3
release-type: Release| Input | Description | Default |
|---|---|---|
results-json |
(required) JSON string with deployment results | |
pr-number |
(required) PR number to comment on | |
actor |
(required) GitHub user who triggered the release | |
version-tag |
(required) Version tag (e.g. v1.0.0) |
|
release-type |
(required) Type of release (Release, RC, QA) |
|
proto-tag |
Proto release tag if applicable | |
custom-message |
Custom message instead of default protonova URL |
PCO-Release workflows support npm trusted publishing using OpenID Connect (OIDC), eliminating the need for long-lived PLANNINGCENTER_NPM_TOKEN secrets.
- Lerna v9+ in consuming repos (for lerna-based workflows)
- npm CLI v11.5.1+ and Node v22.14.0+ (for non-lerna workflows)
Each npm package must be configured to trust the GitHub Actions workflow that publishes it.
- Go to npmjs.com and navigate to your package's Settings
- Find the Trusted Publisher section
- Select GitHub Actions as the provider
- Fill in the required fields:
- Organization or user:
planningcenter - Repository: Your repository name (e.g.,
tapestry) - Workflow filename: The filename of the calling workflow in your repo (e.g.,
pco-release-qa.yml) - Environment name: Leave blank unless using GitHub environments
- Organization or user:
- Save the configuration
Important: For reusable workflows (like those in this repo), npm validates the calling workflow's filename, not the reusable workflow that contains the
npm publishcommand. Make sure the workflow filename matches exactly, including the.ymlextension.
Note: Each package can only have one trusted publisher configured at a time. npm does not validate the configuration when you save it -- errors will only appear when you attempt to publish.
Your calling workflow must include the id-token: write permission. This is required on both the calling and reusable workflows for OIDC to function.
# Example: .github/workflows/pco-release-qa.yml
on:
issue_comment:
types: [created]
jobs:
create-qa-release-and-deploy:
if: github.event.issue.pull_request && contains(github.event.comment.body, '@pco-release qa')
permissions:
contents: write
pull-requests: write
id-token: write # Required for OIDC trusted publishing
uses: planningcenter/pco-release-action/.github/workflows/lerna-qa-release.yml@v1
secrets: inheritOnce trusted publishing is working:
- Navigate to your package's Settings -> Publishing access on npmjs.com
- Select "Require two-factor authentication and disallow tokens"
- Revoke any existing automation tokens that are no longer needed
- "Unable to authenticate" (ENEEDAUTH): Verify the workflow filename on npmjs.com matches your calling workflow exactly, including the
.ymlextension. All fields are case-sensitive. - Self-hosted runners: Not currently supported by npm trusted publishing. You must use GitHub-hosted runners.
- Private dependencies: Trusted publishing only applies to
npm publish. You still need a read-only token for installing private packages vianpm ci/npm install.
| Label | Purpose |
|---|---|
pco-release-patch |
Bump the patch version (e.g. 1.0.0 -> 1.0.1) |
pco-release-minor |
Bump the minor version (e.g. 1.0.0 -> 1.1.0) |
pco-release-major |
Bump the major version (e.g. 1.0.0 -> 2.0.0) |
pco-release-pending |
Applied automatically to release PRs; triggers release on merge |
pco-release-urgent |
Force deploy PRs to all repos |
| Command | Where | What it does |
|---|---|---|
@pco-release rc |
Release PR | Creates an RC version and deploys to staging |
@pco-release qa |
Any PR | Creates a QA version and deploys to protonova |
@pco-release deploy |
Release PR (Lerna) | Deploys the RC to staging |
| Secret | Purpose |
|---|---|
PCO_DEPENDENCIES_APP_ID |
GitHub App ID for cross-repo operations |
PCO_DEPENDENCIES_PRIVATE_KEY |
GitHub App private key |
PLANNINGCENTER_NPM_TOKEN |
NPM registry token -- being replaced by OIDC trusted publishing |
- Edit TypeScript source in a workspace's
src/directory - Run
yarn buildto compile todist/ - Commit both
src/anddist/changes (dist is committed so GitHub Actions can run withoutnode_modules) - Test the action by referencing your branch in a consuming repo
- After merging to
main, update the version tag (e.g.v1)