Hello everyone!
We are happy to announce that Socket.IO packages will now be published with a provenance statement.
Package provenance is a npm feature which was introduced last year to increase trust in the npm supply chain.
The idea is that the package is published and signed from a trusted CI/CD platform (such as GitHub Actions), so the code that ends up in the registry cannot be tampered with.
More info: https://github.blog/security/supply-chain-security/introducing-npm-package-provenance/
Starting today, new Socket.IO versions will be published directly from GitHub Actions and no longer from a maintainer machine.
The publication workflow can be found here: publish.yml
Notes
There are a few notable differences from the reference workflow:
Workflow trigger
The workflow is triggered when pushing a tag to GitHub:
on:
push:
tags:
- '**@*'
The expected format is <package>@<version>
, for example:
socket.io@1.2.3
@socket.io/redis-adapter@3.4.5
(hence the**
to match the/
char)
The <package>
part is then used to select the right workspace (since we are using a monorepo):
jobs:
publish:
steps:
# [...]
- name: Publish package
run: npm publish --workspace=${GITHUB_REF_NAME%@*} --provenance --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Reference: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
Compilation step
A TypeScript compilation step is necessary, since some packages depend on the types of other packages:
jobs:
publish:
steps:
# [...]
- name: Compile each package
run: npm run compile --workspaces --if-present
- name: Publish package
# [...]
First verified version
The latest version of the engine.io-parser
package has been released this way.
On the npmjs.com website, you can find:
- the details of the build, at the bottom of the page:
- a checked badge, in the "Versions" tab
You can also verify the attestations of your dependencies:
$ npm i socket.io
added 22 packages, and audited 23 packages in 853ms
found 0 vulnerabilities
$ npm audit signatures
audited 22 packages in 1s
22 packages have verified registry signatures
1 package has a verified attestation # <-- it's a good start!
Conclusion
This is a big step forward in increasing trust in the JS ecosystem, congratulations to the npm team!
Some big names have already joined the club:
That's all folks, thanks for reading!