Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simonalling/azure-pipelines-logging
Typed API for logging in Azure Pipelines
https://github.com/simonalling/azure-pipelines-logging
Last synced: 3 months ago
JSON representation
Typed API for logging in Azure Pipelines
- Host: GitHub
- URL: https://github.com/simonalling/azure-pipelines-logging
- Owner: SimonAlling
- Created: 2020-10-27T11:08:25.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-06-02T10:32:22.000Z (over 2 years ago)
- Last Synced: 2024-10-04T22:46:21.954Z (4 months ago)
- Language: TypeScript
- Size: 396 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# azure-pipelines-logging
[![NPM Version][shield-npm]][npm-url]
[![Downloads Stats][shield-downloads]][npm-url][npm-url]: https://npmjs.org/package/azure-pipelines-logging
[shield-npm]: https://img.shields.io/npm/v/azure-pipelines-logging.svg
[shield-downloads]: https://img.shields.io/npm/dm/azure-pipelines-logging.svgA typed API for [Azure Pipelines logging commands](https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands).
Designed to be used with TypeScript.## Installation
```
npm install --save azure-pipelines-logging
```## Usage
```ts
// docs/examples/basic.tsimport { command, format, log } from "azure-pipelines-logging";
log(command("task", "logissue", { type: "error" })("Error summary"));
log(format("error")(
"Details about error.",
"Second line of details.",
"Third and\nfourth line.",
));/*
Output:
##vso[task.logissue type=error;]Error summary
##[error]Details about error.
##[error]Second line of details.
##[error]Third and
##[error]fourth line.
*/```
### Typechecking and Autocompletion
The exported functions are typed as strictly as possible and in a way such that editors can provide useful autocompletion.
For example, give `"task"` as the first argument to `command` to get autocompletion for all actions in the `task` area.### Properties
The properties that each command supports, if any, are encoded in the types.
```ts
// docs/examples/properties.tsimport { command, log } from "azure-pipelines-logging";
const addbuildtag = command("build", "addbuildtag");
const associate = command("artifact", "associate", {
artifactname: "whatever",
type: "container", // Type error if invalid value given.
// Type error if unknown property given or required property missing.
});log(addbuildtag("Tag_UnitTestPassed"));
log(associate("#/1/build"));/*
Output:
##vso[build.addbuildtag]Tag_UnitTestPassed
##vso[artifact.associate artifactname=whatever;type=container;]#/1/build
*/```
### `log` vs `console.log`
The exported `log` function is a more strictly typed alias for `console.log` that eliminates this class of bugs:
```ts
// docs/examples/console.log-bad.tsimport { command } from "azure-pipelines-logging";
console.log(
command("task", "logissue", { type: "error" }) // A function, not a string!
);/*
Output:
[Function (anonymous)]
*/```
This bug is made possible by the combination of `command` (and `format`) being [curried](https://en.wikipedia.org/wiki/Currying) and `console.log` taking parameters of type `any`.
Correct code:```ts
// docs/examples/console.log-good.tsimport { command } from "azure-pipelines-logging";
console.log(
command("task", "logissue", { type: "error" })("Error summary")
);/*
Output:
##vso[task.logissue type=error;]Error summary
*/```
Using `log` instead of `console.log` prevents such mistakes by making them static type errors.
## Contribute
Run these commands to build everything and run the tests:
```
npm ci
npm run make
```[`embedme`](https://github.com/zakhenry/embedme) is used for code examples in the readme.