-
Notifications
You must be signed in to change notification settings - Fork 1
dripip release tool #2
Comments
Great catch by @janpio: |
Another principal: Be judicious with developers' time. Stable releases should be batches of change. Users subscribing to previews opt-in for more noise. Everyone else, no. |
Spec Update
|
Could you provide a link to the liberate cli? I can't find anything when googling it |
@Weakky it doesn't exist, it would be our invention. Was also thinking of |
Been following this flow manually on https://github.com/prisma-labs/nexus-prisma/pull/434/files and its working ok. nexus pr release installed into nexus-prisma and then nexus-prisma pr release and then both installed into nexus-prisma example blog. Due to the node_modules file system trickery used linking doesn't "just work". Examples of commands I am running:
|
Added TODOs for
|
Spec UpdateCame up with the following spec for release notes tonight. You can see below but it has been copied up to the opening comment too. Release NotesRelease Notes
|
Sound good. 2 notes:
Wording might be problematic because of MAJOR.MINOR.PATCH. "Changes" maybe?
Maybe copy them to a "undefined" section by default that has to be cleaned out? Otherwise forgetting the type once might make something invisible. |
Agree. Its more consistent. For example
Thought about it. Wasn't sure. Can see that yes probably something has to be done. Some things we could do (none, some, all):
|
Spec Update+ * `fix` commits will show up under `Fixes` section.
+ * All other commit types will show up under `Other Improvements` section. |
Zeit has a similar release cli: Maybe we can take some inspiration |
Description UpdateAdding support for:
+ * The `@META` `checksum` is derived from the generated release notes contents. Later on `liberate` can check contents against the checksum to easily detect drift (manual edits).
+ * The `@META` `liberateVersion` contains the same piece of data that would be in `packge.json` `version` snapshoted at the time of generation. This is useful to permit document format migrations from one version of `liberate` to the next.
+ * The `@CUSTOM` directives permit users to customize their release notes while preserving the ability for `liberate` to update them later on.
+ * There is an `@CUSTOM` directive in append/prepend position for the entire release notes as well as per sub-section therein.
+ * NOTE `@CUSTOM` directives may be useful for:
+ 1. `next` blocks which are edited in place frequently
+ 1. Refreshing release notes based on a new version of `liberate` that improves the layout somehow (e.g. adds a "Thanks to these users! ..." summary block)
+ 1. Perhaps/probably `liberate` has release notes style options sooner or later that users choose to adjust their settings on over time. Note that a robust spec for how to perform format migrations is not done and likely not to be before implementation work starts. The important thing is to have a reasonable foundation in place to make it possible later. |
Description Update
|
Description UpdatedOne of our principals is
This is because we care about CICD but also about a clean git history. If every commit is released (CICD) but releases require commits that means 50% of the git history is noise. To solve this we figured out how to hoist version numbers out of [committed] source code and into git tags. However with release notes, as files, we have brought the problem of git commits back upon us. Worse yet, release notes are complicated and often require fine tuning because release notes are a kind of interface/content designed human consumption. Such fine tuning implies even more git commits, more than 50% of the git history. This is not workable. Therefore the spec affordances for release note files will be removed. In turn there will be a focus on GitHub releases. In the future we may also consider GitHub wiki as another release notes target. Further future maybe pluggable targets.
|
Description Update
Thought a bit more about naming. Liberate is somehow pompous or on the nose I feel, and not short making it functionally annoying to type on the command line. I considered a variety of alternatives but all the basic ones ( https://www.thoughtco.com/what-does-libre-mean-3079046
This is a good metaphorical fit for this tool, since this tool is all about making work on a project easily available to users. Like so many names, It is taken on |
#2 (comment) contains all the current information if I just want to get an overview? (Try to contact both @livingbreathing and npm, they might be able to help with the npm package name - repo seems to be gone and package unused) |
Yep It is kept up to date with the latest thinking.
Good point will do! --update Email to Evan, the listed maintainer of |
I have updated the description with checkboxes. I am starting work over at https://github.com/prisma-labs/libre. I debated how to start tracking issues. My approach will be to use this as an epic to track the bulk of v1 development. I will not continue to put every new feature idea here though. Those will begin to get created as new issues on the So, as I make progress on |
(Leaving a comment anyway will push this into my notifications, which might be beneficial - or not ;) ) |
Thinking, rather than the
Possible alternatives to
|
Renamed from |
Supports graphql-nexus/nexus-plugin-prisma#379
This diagram is a visual representation of the release workflow explained below.
dripip
dripip
is a CLI for releasing npm packages. It bakes in the concepts of stable-version, pull-request-version, and next-version releases. It assumes the project adhears to semantic versioning and conventional commits. It is designed for extreme simplicty and CI/CD.Principals:
Release Flows
dripip
supports three complementary release flows:$ dripip stable
$ dripip preview
$ dripip preview
on pull-requestsdripip stable
This bumps the package by a conventional commit calculation against the commits since last stable release.
0.0.1
.package.json
version
field to be new version.npm publish --tag latest
.package.json
change.git tag {newVersion}
.git tag next
(normally should already be present)git push --tags
.dripip preview
This publishes pre-releases like
1.2.3-next.1
,1.2.3-next.2
, ... and so on that increment until finally resetting upon the next stable release.--no-pr
1
.0.0.1
.{nextVer}-next.{buildNum}
. Example:1.2.3-next.1
.package.json
version
field to be new version.npm publish --tag next
.package.json
change.git tag {newVer}
.git tag next
.git push --tags
.next
at tagnext
If
next
release exists (it always will except for the first release ever) then do nothing (the force push updatingnext
tag should be enough to make the GHnext
release pointing at a new SHA.dripip preview
on pull-requestsThis publishes pre-releases like
0.0.0-pr.1.8c01648
,0.0.0-pr.2.8y2716f
. "On pull-requests" is determined bydripip
by looking for well known environment variables exported by CI providers. The CI providers currently supported areGitHub
andCircleCI
. This implies we are optimizing for running on CI systems. If you want to force this behaviour say from your machine add the--pr
flag.--no-pr
OR--pr
present.--no-pr
and--pr
are present.--pr
passed, use same algorithm used byhub show pr
to infer pr number.{0.0.0}-pr{prNum}.{shortSHA}
. Example:0.0.0-pr.121.8y2716f
.package.json
version
field to be new version.npm publish --tag pr.{prNum}
.package.json
change.Version Branches
dripip
supports version branches defined below. The three release flows receive special integrity checks ensuring sound coordination withversion branches
.A version branch is a branch whose name is a valid non-release-candidate semver value with optional
v
prefix.v2
branch only patch and minor releases are possible; Givenv3.3
branch only patch releases are possible.v2
branch all subsequent parent branch releases must bev3.0.0
or higher; Given av3.3
branch all subsequent parent branch releases must bev3.4.0
or higher.dripip version-branch <vb-ver>
helps with this. It:vb<vb-verb>
The special tag
vb<vb-verb>
helpsdripip
do the right thing with respect to points 2 & 3 above.If you opt to not use
dripip
CLI to create your version branch then manually create the tag as specified here.If we find a reliable way in the future to correctly and effeciently rely on
git
CLI alone to enforce 2 & 3 we will, thus dropping the extra tag signal.Release Notes
@META
checksum
is derived from the generated release notes contents. Later ondripip
can check contents against the checksum to easily detect drift (manual edits).@META
dripipVersion
contains the same piece of data that would be inpackge.json
version
snapshoted at the time of generation. This is useful to permit document format migrations from one version ofdripip
to the next.@CUSTOM
directives permit users to customize their release notes while preserving the ability fordripip
to update them later on.@CUSTOM
directive in append/prepend position for the entire release notes as well as per sub-section therein.@CUSTOM
directives may be useful for:next
blocks which are edited in place frequentlydripip
that improves the layout somehow (e.g. adds a "Thanks to these users! ..." summary block)dripip
has release notes style options sooner or later that users choose to adjust their settings on over time.chore
commits will not show up in the changelog.feat
commits will show up underFeatures
section.fix
commits will show up underFixes
section.Improvements
section.Other Changes
BREAKING CHANGE
will be copied to theBREAKING CHANGES
section.next.<#>
, the preview version they came from (we do this b/c pre-releases sum theirchanges since last stable)1.2.0-next.5
next
git tag thus permitting a permalinknext
release Updates-in-place the same GitHub releasenext
releases following latest stable release then thenext
GitHub release is formatted like:TODO
update diagram with version branchesCurrently lacking an omnigraffle licenseThe text was updated successfully, but these errors were encountered: