@template-tools/sync-cli
Version:
cli for @template-tools/template-sync
398 lines (256 loc) • 13.6 kB
Markdown
[](https://www.npmjs.com/package/@template-tools/sync-cli)
[](https://opensource.org/licenses/BSD-3-Clause)
[](https://bundlejs.com/?q=@template-tools/sync-cli)
[](https://npmjs.org/package/@template-tools/sync-cli)
[](https://github.com/template-tools/template-sync-cli/issues)
[](https://actions-badge.atrox.dev/template-tools/template-sync-cli/goto)
[](https://coveralls.io/github/template-tools/template-sync-cli)
## @template-tools/sync-cli
Keep repository in sync with its template.
Generates pull requests to bring a repository back in sync with its template.
So by making changes to the template and applying template-sync the target project will be updated accoring to the template.
Works with github and bitbucket.
```shell
export AGGREGATION_FACTORIES="github-repository-provider" # for github repos
export GITHUB_TOKEN='token providing repositroy write access' # for github repos
template-sync --template aTemplateGithubUser/aRepo myGithubUser/myRepo
```
Define (initial) properties to be used in the template
```shell
export AGGREGATION_FACTORIES="github-repository-provider" # for github repos
export GITHUB_TOKEN='token providing repositroy write access' # for github repos
template-sync --define "description=a very new fantastic module" -t myUser/myTemplate myUser/newModule#aBranch
```
Create new repository and bind it to aTemplateGithubUser/aRepo
```shell
export GITHUB_TOKEN='token providing repositroy write access' # for github repos
template-sync --track --create --template aTemplateGithubUser/aRepo myGithubUser/myRepo
```
Switch from [arlac77/template-github](https://github.com/arlac77/template-github) to [arlac77/template-arlac77-github](https://github.com/arlac77/template-arlac77-github) template for [arlac77/url-cmd](https://github.com/arlac77/url-cmd), [arlac77/uti](https://github.com/arlac77/uti), [arlac77/content-entry](https://github.com/arlac77/content-entry) and [arlac77/repository-provider](https://github.com/arlac77/repository-provider)
```shell
export GITHUB_TOKEN='token providing repositroy write access' # for github repos
template-sync --track --template arlac77/template-arlac77-github --template -arlac77/template-github arlac77/url-cmd arlac77/uti arlac77/content-entry arlac77/repository-provider
```
Merges contents from template branch into destination branch handling some special cases for:
- Licenses - rewriting license years
- line set files like .npmignore and .gitignore - by merging both sets together
- package.json - merge (.\*)[Dd]ependencies, engines and scripts
- rollup.conf.\*js - copy / rewrite + detect dev dependencies
- [\*.yaml - merge](doc/yaml/README.md)
- [.travis.yml - merge with hints](doc/travis/README.md)
- [\*.toml - merge](doc/toml/README.md)
- [\*.ini - merge](doc/ini/README.md)
- [\*.json - merge](doc/json/README.md)
- README.md - merge badges

## Some templates
- [arlac77/template-cli-app](https://github.com/arlac77/template-cli-app) _rollup_ _ava_ _travis_
- [arlac77/template-esm-only](https://github.com/arlac77/template-esm-only) _ava_ _travis_
- [arlac77/template-svelte-component](https://github.com/arlac77/template-svelte-component) _svelte_ _rollup_ _testcafe_ _travis_
- [arlac77/template-svelte-app](https://github.com/arlac77/template-svelte-app) _svelte_ _rollup_ _pkgbuild_ _travis_
- [arlac77/template-kronos-component](https://github.com/arlac77/template-kronos-component) template-esm-only with node 14
- [arlac77/template-kronos-app](https://github.com/arlac77/template-kronos-app) node 14 + systemd
# API
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
### Table of Contents
- [API](#api)
- [Table of Contents](#table-of-contents)
- [Context](#context)
- [Parameters](#parameters)
- [Properties](#properties)
- [execute](#execute)
- [commits](#commits)
- [executeBranch](#executebranch)
- [sortedKeys](#sortedkeys)
- [Package](#package)
- [properties](#properties-1)
- [Parameters](#parameters-1)
- [Merger](#merger)
- [properties](#properties-2)
- [Parameters](#parameters-2)
- [commits](#commits-1)
- [Parameters](#parameters-3)
- [Merger](#merger-1)
- [Properties](#properties-3)
- [properties](#properties-4)
- [Parameters](#parameters-4)
- [commits](#commits-2)
- [Parameters](#parameters-5)
- [EntryMerger](#entrymerger)
- [Properties](#properties-5)
- [Template](#template)
- [Parameters](#parameters-6)
- [Properties](#properties-6)
- [entryMerger](#entrymerger-1)
- [Parameters](#parameters-7)
- [mergerFor](#mergerfor)
- [Parameters](#parameters-8)
- [\_templateFrom](#_templatefrom)
- [Parameters](#parameters-9)
- [updateUsedBy](#updateusedby)
- [Parameters](#parameters-10)
- [templateFor](#templatefor)
- [Parameters](#parameters-11)
- [ReplaceIfEmpty](#replaceifempty)
- [Readme](#readme)
- [MergeLineSet](#mergelineset)
- [Replace](#replace)
- [Skip](#skip)
- [Delete](#delete)
- [normalizeTemplateSources](#normalizetemplatesources)
- [Parameters](#parameters-12)
- [jspath](#jspath)
- [Parameters](#parameters-13)
- [install](#install)
- [license](#license)
## Context
**Extends LogLevelMixin(class \_Context {})**
Context prepared to execute one branch.
### Parameters
- `provider`
- `targetBranchName` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
- `options` (optional, default `{}`)
### Properties
- `ctx` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
- `files` **[Map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)>**
### execute
Generate Pull Requests.
Returns **AsyncIterator<PullRequest>**
### commits
Generate all commits from the template entry merges.
Returns **Commit<AsyncIterator>**
### executeBranch
Generate Pull Requests.
Returns **AsyncIterator<PullRequest>** the actual PRs
## sortedKeys
order in which json keys are written
## Package
**Extends Merger**
Merger for package.json
### properties
Deliver some key properties.
- name
- version
- description
- main
#### Parameters
- `entry` **ContentEntry**
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
## Merger
Mergable content
### properties
Deliver some key properties.
#### Parameters
- `entry` **ContentEntry**
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** extracted properties
### commits
Generate commits as result of merging two entries.
#### Parameters
- `context`
- `destinationEntry`
- `sourceEntry`
- `options`
## Merger
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
- `type` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
- `pattern` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
- `factory` **Class**
- `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
### properties
Deliver some key properties.
#### Parameters
- `entry` **ContentEntry**
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** extracted properties
### commits
Generate commits as result of merging two entries.
#### Parameters
- `context`
- `destinationEntry`
- `sourceEntry`
- `options`
## EntryMerger
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
- `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
- `factory` **Class**
- `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
## Template
**Extends LogLevelMixin(class {})**
### Parameters
- `context` **Conext**
- `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>**
- `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** (optional, default `{}`)
### Properties
- `context` **Conext**
- `sources` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>**
- `toBeRemovedSources` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>**
- `mergers` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Merger](#merger)>**
- `branches` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)<Branch>** all used branches direct and inherited
- `keyBranches` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)<Branch>** branches used to define the template
### entryMerger
Find a suitable merger for each entry
#### Parameters
- `entries` **Iterator<ContentEntry>**
Returns **Iterator<\[ContentEntry, [Merger](#merger)]>**
### mergerFor
Find a suitable merger
#### Parameters
- `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** of the entry
Returns **[Merger](#merger)**
### \_templateFrom
Load all templates and collects the entries.
#### Parameters
- `sources` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** branch names
- `inheritencePath` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<Branch>** who was requesting us (optional, default `[]`)
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** package as merged from sources
### updateUsedBy
Updates usedBy section of the template branch.
#### Parameters
- `targetBranch` **Branch** template to be updated
- `templateSources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** original branch identifiers (even with deletion hints)
- `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** as passed to commitIntoPullRequest
Returns **AsyncIterator<PullRequest>**
### templateFor
Load a template
#### Parameters
- `context` **[Context](#context)**
- `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>**
- `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
## ReplaceIfEmpty
**Extends Merger**
Overwrites none existing entries from template
## Readme
**Extends Merger**
injects badges into README.md
## MergeLineSet
**Extends Merger**
## Replace
**Extends Merger**
Replace file from template (always)
## Skip
**Extends Merger**
Does not generate destination entry
## Delete
**Extends Merger**
Delete entry.
## normalizeTemplateSources
Remove duplicate sources.
Sources staring with '-' will be removed
### Parameters
- `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>**
- `remove` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** (optional, default `[]`)
Returns **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** normalized sources
## jspath
### Parameters
- `object`
- `path`
- `cb`
# install
With [npm](http://npmjs.org) do:
```shell
npm install -g @template-tools/sync-cli
# template-sync --help
```
# license
BSD-2-Clause