@nrk/ps-octo-publisher
v1.4.0
Published
WebApp publisher for Octopus
Downloads
185
Maintainers
Keywords
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 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/[email protected] 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-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