@nrk/ps-octo-publisher v1.4.0
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 withnpx
in 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->releaseNotes
flow 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.json
waop 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-shortlog1 or git-blame1)'%ce'
: committer email'%cE'
: committer email (respecting .mailmap, see git-shortlog1 or git-blame1)'%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-log1'%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
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago