Automatic releases of npm packages with GitHub actions
Recently I implemented a new cool feature to one of the npm packages I develop. Later this day, I was showing it to a friend, and ... nothing worked. What a shame, I forgot to publish the package. The feature successfully passed the tests, and was pushed to the package GitHub repository but no one could not enjoy it anyway. Is there anything to help to avoid such situations? Yes, it is GitHub Actions — automated workflows that can run different jobs, including publishing packages to npm.
Setting up a workflow is surprisingly simple: you only need to create a .yml
file in .github/workflows
folder. A file could
have any name as there can be more than one workflow.
Here is the content of my .github/workflow/gatsby-theme-npm-publish.yml
name: Gatsby theme npm package
on:
push:
branches:
- master
jobs:
publish-npm:
runs-on: ubuntu-latest
env:
working-directory: ./gatsby-theme
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
registry-url: https://registry.npmjs.org/
- run: npm install -g yarn
- name: install packages
run: yarn
working-directory: ${{env.working-directory}}
- name: publish
run: npm publish
working-directory: ${{env.working-directory}}
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
As you can see, the jobs run on every push to the master
branch. There are a couple of special details in this workflow.
Note that the package build is made not in the root directory but in the gatsby-theme
directory. This repository hosts several packages, this is why. To run the commands in the correct context, I had to specify the directory. For that, I first define the working-directory
variable in the env
section of the job and later use it az ${{env.working-directory}}
.
Another detail is providing an authorization token for npm. Such tokens are to generate on the https://www.npmjs.com/ website:
Click on the Create new token button.
And choose to create a token with the right to publish.
Copy the token you got into the clipboard.
After that, you need to add this token to the secrets of your repository. Go to the Settings tab of the repository:
Find the Secrets page in the sidebar.
Create a new secret.
Put the npm token which you have in the clipboard to the texarea and give it a name, say npm_token
.
This name is what has to be provided as a value of NODE_AUTH_TOKEN
variable in the env
section of
the npm publish
command.
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
Voilà! Now I have the npm package automatically published every time the master
branch is updated.
Previous Post
Next Post
Did you notice a typo? Welcome to edit this page on GitHub. Thank you!