README
web-app-octopus-publisher
⚠️ This is an internal tool used by the TV web team @ NRK
The package is public only for ease of use withnpxin CI
settings so we dont have to providenpx --userconfig <.npmrc>
Simple NodeJS cli tool for:
- packaging node web apps
- posting package to octopus deploy
- generating release notes
- updating release notes on octopus release
For the
pack->push->releaseNotesflow to work the Octopus project needs to be set up with automatic release creation
The tool uses name from ${process.cwd()}/package.json for:
- octopus feed id
- octopus project name
- pm2 process name
The package exposes a bin (waop) if installed locally or globally.
Usage
Typical use case for node apps in the PS.Web repo, use npx in npm script and be explicit about the version (@1.0.x)
{
"scripts": {
"predeploy": "npm prune --production",
"deploy": "npx @nrk/ps-octo-publisher@1.0.x publish -w <AzureProdAppName>"
}
}
Or, install globally and use exported bin waop
> npm i -g @nrk/ps-octo-publisher
> waop publish
Display help
> npx @nrk/ps-octo-publisher -h
> npx @nrk/ps-octo-publisher notes -h
> npx @nrk/ps-octo-publisher publish -h
Generate Release notes
Generating release notes (commit history) in current directory.
Release notes Options
| Name | Alias | Default |
|---|---|---|
-u |
--url |
'' |
-w |
--webApp |
'' |
-o |
--outFile |
'' |
-p |
--plain |
false |
-d |
--debug |
false |
Using waop notes
Options -u and -w are used for the same purpose, but -w is inserted into a template https://${w}.azurewebsites.net/ping and -u is used as is. The options expect the resulting url to respond with json that satisfies:
interface Ping {
hash?: string; // commit hash
date?: string; // json date
env?: {
DEPLOY_TIME?: string; // json date
};
}
If either of those properties exist they are used to determine which commits are to be included in the release notes so that commies = [<prop>...master].
waop notes- generate notes from last 5 commits in current folderwaop notes -p- generate notes as plain text (no markdown links)waop notes -o releaseNotes.md- output to filewaop notes -u https://tv.nrk.no/ping- provide urlwaop notes -w web-header-prod-we- provide Azure Web App name
Publish
Packages app in zip and pushes to Octopus Deploy. On publish success tries to set release notes on the auto-created release.
For release notes to be exact commit diff from what is currently in production, provide the -w option with the Azure Web App name (e.g. -w tv-web-search-prod-we)
Publish Options
| Name | Alias | Default |
|---|---|---|
-g |
--globs |
['*.*', 'dist/**', 'static/**', 'scripts/**', 'node_modules/**'] |
-c |
--pm2 |
true |
-w |
--webApp |
'' |
-k |
--octoKey |
'' (by default read from process.env['OCTOPUS_API_KEY']) |
-s |
--octoServer |
'https://madeploy04/' |
-v |
--buildVersion |
'' (by default read from process.env['BuildVersion']) |
-n |
--dryRun |
'' |
By default octoKey and buildVersion is read from env['OCTOPUS_API_KEY'] and env.BuildVersion respectively. Passing those variables in does nothing if the environment variables are defined.
Using waop publish
waop publish -v 0.1.1 -k <api-key>- publish version 0.1.1waop publish -g dist/**- publish only content indist/**waop publish --pm2 false- publish and do't addpm2.config.jsonwaop publish --w tv-web-search-prod-we- publish and call https://tv-web-search-prod-we.azurewebsites.net/ping to get commit hash / build date to use for release notes.
Git formatting patterns
There are many alternatives we could use for the commit history.
Some of the placeholders that can be used in --pretty=format:"" are:
'%h': abbreviated commit hash'%an': author name'%aN': author name (respecting .mailmap)'%ae': author email'%aE': author email (respecting .mailmap)'%ad': author date (format respects --date= option)'%aD': author date, RFC2822 style'%ar': author date, relative'%at': author date, UNIX timestamp'%ai': author date, ISO 8601-like format'%aI': author date, strict ISO 8601 format'%cn': committer name'%cN': committer name (respecting .mailmap, see git-shortlog[1] or git-blame[1])'%ce': committer email'%cE': committer email (respecting .mailmap, see git-shortlog[1] or git-blame[1])'%cd': committer date (format respects --date= option)'%cD': committer date, RFC2822 style'%cr': committer date, relative'%ct': committer date, UNIX timestamp'%ci': committer date, ISO 8601-like format'%cI': committer date, strict ISO 8601 format'%d': ref names, like the --decorate option of git-log[1]'%D': ref names without the " (", ")" wrapping.'%e': encoding'%s': subject'%f': sanitized subject line, suitable for a filename'%b': body'%B': raw body (unwrapped subject and body)'%N': commit notes