Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/atomist/sdm-pack-fingerprint
Atomist software delivery machine (SDM) extension pack providing fingerprinting support.
https://github.com/atomist/sdm-pack-fingerprint
node
Last synced: about 2 months ago
JSON representation
Atomist software delivery machine (SDM) extension pack providing fingerprinting support.
- Host: GitHub
- URL: https://github.com/atomist/sdm-pack-fingerprint
- Owner: atomist
- License: apache-2.0
- Archived: true
- Created: 2018-06-26T05:49:14.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-01-08T05:03:48.000Z (almost 4 years ago)
- Last Synced: 2024-05-11T20:02:58.414Z (6 months ago)
- Topics: node
- Language: TypeScript
- Homepage:
- Size: 3.6 MB
- Stars: 1
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# @atomist/sdm-pack-fingerprints
[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)
[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)[Atomist][atomist] software delivery machine (SDM) extension pack
providing fingerprinting support.See the [Atomist documentation][atomist-doc] for more information on
what SDMs are and what they can do for you using the Atomist API for
software.[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)
## Features
This pack sets a goal to monitor all git pushes and trackes the following aspects:
* leiningen `project.clj` files are monitored for updates to library dependencies and project version.
* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.
* npm `package.json` files are monitored for updates to module dependencies and package version changes.This monitoring happens computing a set of fingerprints on every commit. The fingerprints that are computed
depend on the type of project. We currently compute fingerprints for maven, clojure, and npm projects.* npm-project-deps, clojure-project-deps, and maven-project-deps
* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinatesWhen a new fingerprint is computed, we can drive interesting behaviors such as:
* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not
* check whether a new version of a library is available and check whether consumers need to update to this new version## Usage
Make the following updates to your machine:
1. Add the imports and create a Goal to represent dependency fingerprinting
```
import { fingerprintSupport } from "@atomist/sdm-pack-fingerprints";
import { Fingerprint } from "@atomist/sdm";// create a goal to fingerprint all new Pushes
export FingerprintGoal = new Fingerprint();
```2. Enable the `FingerprintGoal` for some push rules. Normally, this is done as part of creating your machine:
```ts
// there will usually be more than one Push rule here
const sdm = createSoftwareDeliveryMachine({
...config
},
whenPushSatisfies(IsLein)
.itMeans("fingerprint a clojure project")
.setGoals(FingerprintGoal));```
3. Add the pack to your new `sdm` definition:
There'll be some new imports:
```ts
import {
fingerprintSupport,
forFingerprints,
renderDiffSnippet,
depsFingerprints,
logbackFingerprints,
renderData,
applyFingerprint,
FP,
} from "@atomist/sdm-pack-fingerprints";```
and then you'll have to add the extension pack to your machine definition:
```ts
// add this pack to your SDM
sdm.addExtensionPacks(
fingerprintSupport(
FingerprintGoal,
async (p: GitProject) => {
// COMPUTE fingerprints: called on every Push
return depsFingerprints(p.baseDir);
},
async (p: GitProject, fp: FP) => {
// APPLY fingerprint to Project (currently only through user actions in chat)
return applyFingerprint(p.baseDir, fp);
},
{
selector: forFingerprints("backpack-react-scripts"),
handler: async (ctx, diff) => {
// HANDLE new fingerprint (even if it hasn't changed in this push)
return checkFingerprintTargets(ctx, diff);
},
diffHandler: async (ctx, diff) => {
// HANDLE new fingerprint (only when the fingerprint sha is updated)
return renderDiffSnippet(ctx, diff);
},
},
),
)
```In the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`). The pack also notices if a newly
computed fingerprint has either changed, or is different from a `goal` state. It will then present the user with options to do things like:* set new targets
* update a project to be in sync with a target fingerprint
* apply a fingerprint to a project for the first time
* broadcast a message to all projects out of sync with the fingerprint## Support
General support questions should be discussed in the `#help`
channel in the [Atomist community Slack workspace][slack].If you find a problem, please create an [issue][].
[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues
## Development
You will need to install [node][] to build and test this project.
[node]: https://nodejs.org/ (Node.js)
### Build and test
Use the following package scripts to build, test, and perform other
development tasks.Command | Reason
------- | ------
`npm install` | install project dependencies
`npm run build` | compile, test, lint, and generate docs
`npm run lint` | run TSLint against the TypeScript
`npm run compile` | generate types from GraphQL and compile TypeScript
`npm test` | run tests
`npm run autotest` | run tests every time a file changes
`npm run clean` | remove files generated during build### Release
Releases are handled via the [Atomist SDM][atomist-sdm]. Just press
the 'Approve' button in the Atomist dashboard or Slack.[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)
---
Created by [Atomist][atomist].
Need Help? [Join our Slack workspace][slack].[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)
[slack]: https://join.atomist.com/ (Atomist Community Slack)