Skip to content

Commit

Permalink
Feature: action for publishing package update (#1546)
Browse files Browse the repository at this point in the history
* Update .npmignore

* Create a Publish package to NPM action

* Branches, versions and releases — complete guideline

* Update docs/releases.md

Co-authored-by: Peter Savchenko <specc.dev@gmail.com>

* Update docs/releases.md

Co-authored-by: Peter Savchenko <specc.dev@gmail.com>

* Update releases.md

Co-authored-by: Peter Savchenko <specc.dev@gmail.com>
  • Loading branch information
talyguryn and neSpecc authored Feb 19, 2021
1 parent 5cbeabd commit 8e4b34a
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 7 deletions.
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.

0 comments on commit 8e4b34a

Please sign in to comment.