Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/template-tools/template-sync

Keep repository in sync with its template
https://github.com/template-tools/template-sync

bitbucket boilerplate github gitignore npm npmignore pull-requests scaffolding template travis

Last synced: 14 days ago
JSON representation

Keep repository in sync with its template

Awesome Lists containing this project

README

        

[![npm](https://img.shields.io/npm/v/@template-tools/template-sync.svg)](https://www.npmjs.com/package/@template-tools/template-sync)
[![License](https://img.shields.io/badge/License-0BSD-blue.svg)](https://spdx.org/licenses/0BSD.html)
[![bundlejs](https://deno.bundlejs.com/?q=@template-tools/template-sync\&badge=detailed)](https://bundlejs.com/?q=@template-tools/template-sync)
[![downloads](http://img.shields.io/npm/dm/@template-tools/template-sync.svg?style=flat-square)](https://npmjs.org/package/@template-tools/template-sync)
[![GitHub Issues](https://img.shields.io/github/issues/template-tools/template-sync.svg?style=flat-square)](https://github.com/template-tools/template-sync/issues)
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Ftemplate-tools%2Ftemplate-sync%2Fbadge\&style=flat)](https://actions-badge.atrox.dev/template-tools/template-sync/goto)
[![Styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![Known Vulnerabilities](https://snyk.io/test/github/template-tools/template-sync/badge.svg)](https://snyk.io/test/github/template-tools/template-sync)
[![Coverage Status](https://coveralls.io/repos/template-tools/template-sync/badge.svg)](https://coveralls.io/github/template-tools/template-sync)

## template-sync

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.

This is the engine for cli operation please see [template-tools/template-sync-cli](https://github.com/template-tools/template-sync-cli)

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

![generated pull request](doc/pr_sample.png)

## 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

### Table of Contents

* [Context](#context)
* [Parameters](#parameters)
* [Properties](#properties)
* [targetBranch](#targetbranch)
* [initialize](#initialize)
* [execute](#execute)
* [commits](#commits)
* [executeBranch](#executebranch)
* [pullRequestBranch](#pullrequestbranch)
* [sortedKeys](#sortedkeys)
* [exportsConditionOrder](#exportsconditionorder)
* [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)
* [Readme](#readme)
* [MergeLineSet](#mergelineset)
* [Replace](#replace)
* [INI](#ini)
* [Skip](#skip)
* [Delete](#delete)
* [EntryMerger](#entrymerger)
* [Properties](#properties-5)
* [Template](#template)
* [Parameters](#parameters-6)
* [Properties](#properties-6)
* [shortKey](#shortkey)
* [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)
* [normalizeTemplateSources](#normalizetemplatesources)
* [Parameters](#parameters-12)
* [jspath](#jspath)
* [Parameters](#parameters-13)
* [actions2message](#actions2message)
* [Parameters](#parameters-14)
* [actions2messages](#actions2messages)
* [Parameters](#parameters-15)

## Context

**Extends LogLevelMixin(class \_Context {})**

Context prepared to execute one branch.

### Parameters

* `provider` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `targetBranch` **(Branch | [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

* `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)>**

### targetBranch

Type: (Branch | [String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String))

### initialize

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<([Context](#context) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))>**

### execute

Generate Pull Requests.

Returns **AsyncIterable\**

### commits

Generate all commits from the template entry merges.

Returns **AsyncIterable\**

### executeBranch

Generate Pull Requests.

Returns **AsyncIterable\** the actual PRs

## pullRequestBranch

Type: [String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)

## sortedKeys

order in which json keys are written

## exportsConditionOrder

* **See**: {

Order in which exports are searched

## Package

**Extends Merger**

Merger for package.json

### properties

Deliver some key properties.

* name
* version
* description
* main

#### Parameters

* `entry` **ContentEntry**

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)>**

## Merger

Mergable content

### properties

Deliver some key properties.

#### Parameters

* `entry` **ContentEntry**

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[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`

Returns **AsyncIterable\**

## 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 **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[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`

Returns **AsyncIterable\**

## Readme

**Extends Merger**

Injects badges into README.md.

## MergeLineSet

**Extends Merger**

## Replace

**Extends Merger**

Always overwrite entry from template

## INI

**Extends Merger**

Merge ini entries

## Skip

**Extends Merger**

Does not generate destination entry

## Delete

**Extends Merger**

Delete entry.

## 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)\** all used branches direct and inherited
* `keyBranches` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)\** branches used to define the template

### shortKey

Used to identify generated branch.

Returns **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** short template key

### entryMerger

Find a suitable merger for each entry

#### Parameters

* `entries` **Iterator\**

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)\** 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\**

### 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.

## 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`

## actions2message

### Parameters

* `actions`
* `prefix` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
* `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**

Returns **any** actions as one string lines ordered by scope

## actions2messages

### Parameters

* `actions`
* `prefix` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
* `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**

# install

With [npm](http://npmjs.org) do:

```shell
npm install -g @template-tools/sync-cli
```

# license

BSD-2-Clause