install.fairie/.config/taskfiles/npm/Taskfile.yml
Brian Zalewski f42899b107 Latest
2022-12-24 15:04:59 -05:00

485 lines
15 KiB
YAML

---
version: '3'
vars:
BINARY_BUILD_FOLDER: dist/bin
BUILD_FOLDERS: build coverage dist
tasks:
build:
deps:
- :install:modules:local
- :install:npm:esbuild
- :install:npm:nest
- clean
desc: Build the application
log:
error: Error building the application
start: Building the application
success: Successfully built the application
cmds:
- task: depcheck:dependencies
- mkdir -p dist
- task: build:compile
build:compile:
deps:
- build:nest
- build:esbuild:bundled
- build:esbuild:minified
- build:fpm
build:esbuild:bundled:
deps:
- :install:modules:local
- :install:npm:esbuild
log:
error: Error running `esbuild` (config -> ./.config/esbuild/bundled.js)
start: Running `esbuild` with bundle script (config -> ./.config/esbuild/bundled.js)
success: Finished running `esbuild` (config -> ./.config/esbuild/bundled.js)
cmds:
- node .config/esbuild/bundled.js
build:esbuild:minified:
deps:
- :install:modules:local
- :install:npm:esbuild
log:
error: Error running `esbuild` (config -> ./.config/esbuild/minified.js)
start: Running `esbuild` with minify script (config -> ./.config/esbuild/minified.js)
success: Finished running `esbuild with minify script (config -> ./.config/esbuild/minified.js)
cmds:
- node .config/esbuild/minified.js
build:fpm:
deps:
- :install:software:jq
vars:
NPM_PACKAGE_NAME:
sh: jq -r '.blueprint.binName' package.json
NPM_PACKAGE_VERSION:
sh: jq -r '.version' package.json
cmds:
- task: build:fpm-build
vars:
NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
build:fpm:build:
deps:
- task: build:fpm:compile
vars:
ARCHITECTURE: amd64
FILE_EXTENSION: deb
FPM_TARGET: deb
NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
SYSTEM: debian
- task: build:fpm:compile
vars:
ARCHITECTURE: arm64
FILE_EXTENSION: deb
FPM_TARGET: deb
NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
SYSTEM: debian
- task: build:fpm:compile
vars:
ARCHITECTURE: amd64
FILE_EXTENSION: txz
FPM_TARGET: freebsd
NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
SYSTEM: freebsd
# - task: build:fpm:compile
# vars:
# ARCHITECTURE: amd64
# FILE_EXTENSION:
# FPM_TARGET: pacman
# NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
# NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
# SYSTEM: archlinux
- task: build:fpm:compile
vars:
ARCHITECTURE: amd64
FILE_EXTENSION: rpm
FPM_TARGET: rpm
NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
SYSTEM: redhat
- task: build:fpm:compile
vars:
ARCHITECTURE: arm64
FILE_EXTENSION: rpm
FPM_TARGET: rpm
NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
SYSTEM: redhat
- task: build:fpm:compile
vars:
ARCHITECTURE: all
FILE_EXTENSION: tar
FPM_TARGET: tar
NPM_PACKAGE_NAME: '{{.NPM_PACKAGE_NAME}}'
NPM_PACKAGE_VERSION: '{{.NPM_PACKAGE_VERSION}}'
SYSTEM: source
log:
error: Encountered error while building binaries with FPM
start: Building binaries with FPM
success: Successfully built binaries with FPM
cmds:
- |
.config/log success 'Running gzip on `{{.NPM_PACKAGE_NAME}}-{{.NPM_PACKAGE_VERSION}}-source-all.tar`'
gzip -9 {{.NPM_PACKAGE_NAME}}-{{.NPM_PACKAGE_VERSION}}-source-all.tar
build:fpm:compile:
deps:
- :install:software:fpm
log:
error: Encountered error while compiling {{.ARCHITECTURE}} {{.FPM_TARGET}} binary with FPM for {{.NPM_PACKAGE_NAME}}, version {{.NPM_PACKAGE_VERSION}}
start: Compiling {{.ARCHITECTURE}} {{.FPM_TARGET}} binary with FPM for {{.NPM_PACKAGE_NAME}}, version {{.NPM_PACKAGE_VERSION}}
success: Finished compiling {{.ARCHITECTURE}} {{.FPM_TARGET}} binary with FPM for {{.NPM_PACKAGE_NAME}}, version {{.NPM_PACKAGE_VERSION}}
cmds:
- >
fpm -s npm -t {{.FPM_TARGET}}
-p {{.BINARY_BUILD_FOLDER}}/{{.NPM_PACKAGE_NAME}}-{{.NPM_PACKAGE_VERSION}}-{{.SYSTEM}}-{{.ARCHITECTURE}}.{{.FILE_EXTENSION}}
--architecture {{.ARCHITECTURE}} .
build:nest:
deps:
- :install:modules:local
- :install:npm:nest
log:
error: Encountered error while building NestJS project
start: Building NestJS project
success: Finished building NestJS project
cmds:
- nest build
- task: build:nest:after
build:nest:after:
deps:
- :common:update:man-page
- build:pkg
build:none:
log:
start: Skipping build step because project does not need building
cmds:
- task: :donothing
build:pkg:
deps:
- :install:modules:local
- :install:npm:pkg
log:
error: Encountered error while generating standalone executables for macOS, Linux, and Windows using `pkg`
start: Generating standalone executables for macOS, Linux, and Windows using `pkg`
success: Generated standalone executables for macOS, Linux, and Windows using `pkg`
cmds:
- pkg package.json
build:release: 'true'
build:tsconfig:
deps:
- :install:modules:local
- :install:npm:typescript
log:
error: Error building with `tsconfig.json`
start: Removing `dist/` folder and running `tsc -p tsconfig.json`
success: Successfully built project
cmds:
- rm -rf dist
- tsc -p tsconfig.json
bump:
deps:
- :install:modules:local
cmds:
- npm run build
- |
.config/log info 'The current package.json version is `'"$(jq -r '.version' package.json)"'`'
BUMP_VERSION="$(npm version patch --no-scripts --no-commit-hooks --no-git-tag-version --force | sed 's/^v//')"
.config/log info 'Bumped the package.json version with a patch update to version `'"$BUMP_VERSION"'`'
- SKIP_PREPUB=true npm publish
clean:
deps:
- :install:software:rsync
desc: Remove temporary folders that might conflicts with builds
vars:
RANDOM_STRING:
sh: openssl rand -hex 14
log:
error: Error removing `{{.BUILD_FOLDERS}}` with rsync
start: Removing `{{.BUILD_FOLDERS}}` with rsync
success: Successfully removed `{{.BUILD_FOLDERS}}`
cmds:
- mkdir -p '/tmp/{{.RANDOM_STRING}}'
- mkdir -p '/tmp/{{.RANDOM_STRING}}-empty'
- |
for TMP_FILE in {{.BUILD_FOLDERS}}; do
if [ -d "$TMP_FILE" ]; then
mv "$TMP_FILE" "/tmp/{{.RANDOM_STRING}}/$TMP_FILE" 2> /dev/null
(rsync -a --delete '/tmp/{{.RANDOM_STRING}}-empty' "/tmp/{{.RANDOM_STRING}}/$TMP_FILE" && rm -rf "/tmp/{{.RANDOM_STRING}}-$TMP_FILE") &
fi
done
wait
config:
deps:
- :install:software:jq
- :install:software:node
vars:
REGISTRY_ADDRESS:
sh: jq -r '.publishConfig["@gitlab:registry"]' package.json | sed 's/^https://'
cmds:
- npm config set -- '//registry.npmjs.org/:_authToken' '${NPM_TOKEN}' '{{.REGISTRY_ADDRESS}}:_authToken' '${GITLAB_TOKEN}'
depcheck:dependencies:
deps:
- :install:npm:depcheck
- :install:software:jq
desc: Remove unused dependencies
log:
error: Error uninstalling unused dependencies in package.json
start: Uninstalling unused dependencies in package.json
success: Successfully uninstalled unused dependencies in package.json
cmds:
- depcheck --json | jq -r '.dependencies[]' | xargs -n1 {{.NPM_PROGRAM}} uninstall --save
preinstall:
deps:
- :install:npm:only-allow
log:
error: '`pnpm` must be used as the package manager'
start: Forcing `pnpm` as the package manager by running `only-allow pnpm`
success: Successfully enforced `pnpm` as the package manager
cmds:
- only-allow pnpm
prepare:
cmds:
- task: prepare:project
- task: prepare:release
prepare:project:
cmds:
- task: :common:husky
status:
- '[ -n "$CI" ] || [ -n "$SEMANTIC_RELEASE" ]'
prepare:prune:
cmds:
- task: prune
status:
- '! type node-prune &> /dev/null'
prepare:release:
cmds:
- 'true'
status:
- '[ -z "$SEMANTIC_RELEASE" ]'
prune:
deps:
- :install:go:node-prune
log:
error: Error pruning `node_modules/`
start: Pruning the `node_modules/` folder
success: Successfully pruned the `node_modules/` folder
cmds:
- node-prune
publish:gitlab:
deps:
- :install:software:jq
- :install:software:node
- :npm:config
vars:
PKG_NAME:
sh: jq -r '.name' package.json
REGISTRY_ADDRESS:
sh: jq -r '.publishConfig["@gitlab:registry"]' package.json
VERSION:
sh: jq -r '.version' package.json
env:
BACKUP_PKG:
sh: mktemp
cmds:
- cp package.json "$BACKUP_PKG"
- TMP="$(mktemp)" && jq '.name = "@gitlab/{{.PKG_NAME}}" | .publishConfig.access = "restricted"' package.json > "$TMP" && mv "$TMP" package.json
- npm publish
- npm dist-tag --registry={{.REGISTRY_ADDRESS}} add {{.PKG_NAME}}@{{.VERSION}} latest
- mv "$BACKUP_PKG" package.json
status:
- '[ "$(jq -r ".publishConfig[\"@gitlab:registry\"] | type" package.json)" != "string" ] || [ -z "$NPM_PUBLISH_GITLAB" ]'
start:
deps:
- :install:modules:local
- :install:npm:nest
desc: Run the application
log:
error: Encountered error while running `nest start`
start: Running `nest start`
success: Successfully ran `nest start`
cmds:
- nest start
start:debug:
deps:
- :install:modules:local
- :install:npm:nest
log:
error: Encountered error while running `nest start --watch`
start: Running `nest start --watch`
success: Successfully ran `nest start --watch`
cmds:
- nest start --watch
start:inspect:
deps:
- :install:modules:local
- :install:npm:ndb
- :install:npm:nodemon
- :install:npm:ts-node
desc: Run the application in `watch` mode and open DevTools
log:
error: Error encountered while running `ndb nest start --watch`
start: Running `ndb nest start --watch`
success: Successfully ran `ndb nest start --watch`
cmds:
- ndb nest start --watch
start:inspect:legacy:
deps:
- :install:modules:local
- :install:npm:nest
log:
error: Encountered error while running `nest start --debug --watch`
start: Running `nest start --debug --watch`
success: Successfully ran `nest start --debug --watch`
cmds:
- nest start --debug --watch
start:prod:
deps:
- :install:modules:local
- :install:npm:nest
desc: Run the application in `production` mode
log:
error: Error encountered while building and running `node dist/main`
start: Running `production` build by building the project and then running `node dist/main`
success: Successfully ran `production` build
cmds:
- task: build
- node dist/main
start:prod:inspect:
deps:
- :install:modules:local
- :install:npm:nest
desc: Run the application in `production` and `watch` mode and open DevTools
log:
error: Error encountered while running `ndb nodemon`
start: Running `ndb nodemon`
success: Successfully ran `ndb nodemon`
cmds:
- ndb nodemon
test:
deps:
- :install:modules:local
- :install:npm:jest
desc: Run the unit tests for an NPM project
log:
error: Errors were detected by Jest
start: Running `jest`
success: Successfully ran `jest`
cmds:
- jest --silent=false
test:ci:
deps:
- :install:modules:local
- :install:npm:jest
log:
error: Encountered error while running `jest --collectCoverage --ci --reporters=default --reporters=jest-junit`
start: Running `jest --collectCoverage --ci --reporters=default --reporters=jest-junit`
success: Successfully ran `jest --collectCoverage --ci --reporters=default --reporters=jest-junit`
cmds:
- jest --collectCoverage --ci --reporters=default --reporters=jest-junit
test:coverage:
deps:
- :install:modules:local
- :install:npm:jest
desc: Generate code coverage assets
log:
error: Error running `jest --coverage`
start: Generating code coverage assets by running `jest --coverage`
success: Successfully ran `jest --coverage`
cmds:
- jest --coverage
test:dashboard:
deps:
- :install:modules:local
- :install:npm:majestic
desc: Run and manage test cases from a web interface (powered by `majestic`)
log:
error: Error running `majestic --debug`
start: Launching web interface for debugging test cases by running `majestic --debug`
success: Successfully ran `majestic --debug`
cmds:
- majestic --debug
test:debug:
deps:
- :install:modules:local
- :install:npm:jest
desc: Debug tests in `watch` mode
log:
error: Error running `jest --watch`
start: Running `jest --watch`
success: Successfully ran `jest --watch`
cmds:
- jest --watch
test:e2e: 'true'
test:inspect:
deps:
- :install:modules:local
- :install:npm:jest
- :install:npm:ndb
- :install:npm:nodemon
- :install:npm:ts-node
desc: Debug tests with DevTools in `watch` mode
log:
error: Error running `ndb nodemon --config .config/nodemon-jest.json`
start: Running `ndb nodemon --config .config/nodemon-jest.json` to enable debugging with Chrome DevTools in watch mode
success: Successfully ran `ndb nodemon --config .config/nodemon-jest.json`
cmds:
- ndb nodemon --config .config/nodemon-jest.json
test:none:
log:
start: No tests have been set up for this project
cmds:
- task: :donothing
typesync:
deps:
- :install:npm:typesync
desc: Install missing type definitions
log:
error: Error running `typesync`
start: Installing missing type definitions by running `typesync`
success: Successfully ran `typesync`
cmds:
- typesync
verify: 'true'