Skip to content

Commit

Permalink
build: publish to npm only if needed (#432)
Browse files Browse the repository at this point in the history
# Motivation

So far, we've been incrementing the version of all libraries when we publish, even if some of them received no improvements or fixes. I find this approach a bit cumbersome. Since I propose to commit to semantic versioning (#431), a better approach would be most welcomed. That's why this PR introduces a publication script that handles the publishing of libraries only if they were actually modified.

# Changes

- use `shasum` to compare local library with npm and publish only upon differences
  • Loading branch information
peterpeterparker authored Oct 2, 2023
1 parent 21a73b7 commit 16a3ea4
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 30 deletions.
32 changes: 2 additions & 30 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,35 +20,7 @@ jobs:
run: npm run build --workspaces
- name: Set up npm
run: printf '%s\n' '//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}' registry=https://registry.npmjs.org/ always-auth=true >> .npmrc
- name: Publish utils
run: npm publish --workspace=packages/utils --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Publish Ledger
run: npm publish --workspace=packages/ledger --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Publish NNS-proto
run: npm publish --workspace=packages/nns-proto --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Publish NNS
run: npm publish --workspace=packages/nns --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Publish SNS
run: npm publish --workspace=packages/sns --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Publish CMC
run: npm publish --workspace=packages/cmc --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Publish ckBTC
run: npm publish --workspace=packages/ckbtc --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Publish ic-management
run: npm publish --workspace=packages/ic-management --provenance --access public
- name: Publish
run: ./scripts/publish-npm.sh
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
25 changes: 25 additions & 0 deletions scripts/publish-npm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env bash

# Reference: NPM RRFC --if-needed https://github.com/npm/rfcs/issues/466

function publish_npm() {
local lib=$1

LOCAL_SHASUM=$(npm pack -w packages/"$lib" --json | jq '.[] | .shasum' | sed -r 's/^"|"$//g')

NPM_TARBALL=$(npm show @dfinity/"$lib" dist.tarball)
NPM_SHASUM=$(curl -s "$NPM_TARBALL" 2>&1 | shasum | cut -f1 -d' ')

if [ "$LOCAL_SHASUM" == "$NPM_SHASUM" ]; then
echo "No changes in @dfinity/$lib need to be published to NPM."
else
npm publish --workspace=packages/"$lib" --provenance --access public
fi
}

# Tips: libs use by other libs first
LIBS=utils,ledger,nns-proto,nns,sns,cmc,ckbtc,ic-management

for lib in $(echo $LIBS | sed "s/,/ /g"); do
publish_npm "$lib"
done

0 comments on commit 16a3ea4

Please sign in to comment.