Like semantic-release, but opinionated, fast, and built with Deno in mind.
Its not, really. It's a different implementation of the same idea. However, some tweaks have been made to optimize for Deno:
-
Releases start at
0.1.0
. This is a common convention for Node projects, but seems to be even more common for Deno projects. -
No support for publishing to npm. Since deno.land/x syncs your code when you publish a Github release, publishing is all you need.
-
Documentation changes cause a minor version bump. Documentation is a feature, especially since deno doc will scrape your code. This decision is less of a Deno convention, and mostly my opinion.
-
The release workflow is opinionated, and as such runs fast and has zero configuration.
feat!:
will cause a major version bump,feat:
ordocs:
will cause a minor version bump, andfix:
will cause a patch version bump. Thats it!
Install shipit
locally:
deno install --allow-env --allow-run --allow-net https://deno.land/x/shipit/shipit.ts
And ship it!
shipit
In order to be able to authenticate with Github, you must set an environment
variable called GITHUB_TOKEN
to a
personal access token
with repo
permissions.
If you'd prefer to run shipit
on CI, you can:
on:
push:
branches:
- main
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: denoland/setup-deno@v1
with:
deno-version: vx.x.x
# Use latest version of shipit. You may prefer to pin a specific version.
- run: deno run --allow-net --allow-env --allow-run https://deno.land/x/shipit/shipit.ts
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Be sure to provide GITHUB_TOKEN
as an environment variable to the shipit
script, as well as set fetch-depth: 0
in the checkout step.
shipit
requires environment, network, and subprocess creation permissions:
-
--allow-env
:shipit
readsGITHUB_TOKEN
from your local environment in order to authenticate with Github -
--allow-run
:shipit
needs to spawn subprocesses (git
,bash
) in order to gather information about your commits -
--allow-net
:shipit
needs to make outbound networks requests to Github in order to create Github releases
shipit
uses itself for releases. You can see the shape of the generated
releases here.