Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: action for publishing package update #1546

Merged
merged 7 commits into from
Feb 19, 2021
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
53 changes: 53 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Publish package to NPM

on:
release:
types:
- published

jobs:
publish:
runs-on: ubuntu-latest
steps:
# Checkout to target branch
- uses: actions/checkout@v2
with:
# Pull submodules
submodules: 'recursive'

# Setup node environment
- uses: actions/setup-node@v1
with:
node-version: 15
registry-url: https://registry.npmjs.org/

# Prepare, build and publish project
- name: Install dependencies
run: yarn

- name: Build output files
run: yarn build

- name: Publish the package
run: yarn publish --access=public ${{ github.event.release.prerelease && '--tag=next' || '--tag=latest' }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

notify:
needs: publish
runs-on: ubuntu-latest
steps:
# Checkout to target branch
- uses: actions/checkout@v2

- name: Get package info
id: package
uses: codex-team/action-nodejs-package-info@v1

- name: Send a message
uses: codex-team/action-codexbot-notify@v1
with:
webhook: ${{ secrets.CODEX_BOT_NOTIFY_EDITORJS_PUBLIC_CHAT }}
message: '📦 [${{ steps.package.outputs.name }}](${{ steps.package.outputs.npmjs-link }}) ${{ steps.package.outputs.version }} was published'
parse_mode: 'markdown'
disable_web_page_preview: true
16 changes: 9 additions & 7 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
.idea/
build/sprite.svg
docs/
example/
src/
.idea
.github
docs
example
src
test
.babelrc
.editorconfig
.eslintignore
.eslintrc
.git
.gitmodules
.jshintrc
.postcssrc
.postcssrc.yml
.stylelintrc
CODEOWNERS
cypress.json
tsconfig.json
tslint.json
webpack.config.js
yarn.lock
.github
70 changes: 70 additions & 0 deletions docs/releases.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Branches, versions and releases — complete guideline

## Branches

The project has two main branches: `master` and `next`.

Branch `master` contains the latest stable version of the editor.
The latest version published to NPM available by default or by the tag `latest`.

Branch `next` used for development the next (release candidate) version of the editor.
It may contain bug fixes, improvements or features. This version is available in NPM by `next` tag.

## Versions

We use [semantic versioning](https://semver.org) as a main guide for naming updates.

`<major>.<minor>.<patch>`

You need to bump the part of version according the changes:

- `patch` — for bug fixes, docs updates, code style fixes and other changes which do not affect the result project bundle
- `minor` — for new features with no backward compatibility problems.
- `major` — for breaking changes without backward compatibility with the api of the previous version of the project.

Pre-release versions may contain additional `-rc.*` suffix.

## Release publishing

> 👉 Stable versions are published to releases from `master` branch.

There is an [action](.github/workflows/publish.yml) that fired on a new release publishing on GitHub.

After update merging, when a new package version is ready to be published,
create a [new release](https://github.com/codex-team/editor.js/releases/new) with the correct version tag.

Use target version changelog as a description.

![](https://capella.pics/57267bab-f2f0-411b-a9d1-69abee6abab5.jpg)

Then you can publish the release and wait for package publishing via action.

This package version will be published to NPM with default `latest` tag.

### Release candidate publishing

> 👉 Release candidate versions are published to releases from default `next` branch.

If you want to publish release candidate version, use suffix `-rc.*` for package version in package.json file and in tag on releases page.

This package version will be published to NPM with `next` tag.

Stable version: `2.19.0`
Release candidate: `2.19.1-rc.0`, `2.19.1-rc.1`, ...
Next version: `2.19.1`

Do not forget to mark this release as a pre-release!

![](https://capella.pics/796de9eb-bbe0-485c-bc8f-9a4cb76641b7.jpg)

## Example pipeline

Let's imagine that package version is `2.19.0` and you want to add some bug fixes and publish an update as `2.19.1`.

1. Merge a single update or a few pulls with fixes to the default branch `next`.
2. Bump the version up to `2.19.1-rc.0` in the package.json. For the rest rc updates you should bump version number in suffix (to `2.19.1-rc.1` etc).
3. Create a new release on the releases page with tag `v2.19.1-rc.0` and mark "This is pre-release" checkbox.
[Action](.github/workflows/publish.yml) will automatically push the package to NPM with tag `next`.
4. When you ready to publish a release, remove suffix from version name in package.json (`2.19.1-rc.0` -> `v2.19.1`) and push changes.
5. Merge branch `next` to `master` and create a new release with tag `v2.19.1`.
Same action will publish a new package as `latest` update.
neSpecc marked this conversation as resolved.
Show resolved Hide resolved