Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
# gitmulti
Simple Node system to manage multiple Repositories into the same repo

## ✨ What's New

### Latest: v0.0.12 (October 2026)

- **Dev-tooling dependency bump ([#39](https://github.com/CLDMV/gitmulti/pull/39), [#42](https://github.com/CLDMV/gitmulti/pull/42))** — `@cldmv/fix-headers` moves from 2.1.1 to 2.2.0, so `@Last modified by` now follows content edits only, and `@cldmv/configs` moves from 1.2.0 to 1.2.4, whose shared config no longer forces the author fields. Neither changed any file header here. The CLI is unchanged; it's a drop-in replacement for the previous version.
- [View full v0.0.12 Changelog](https://github.com/CLDMV/gitmulti/blob/master/docs/changelog/v0/v0.0.12.md)

### Recent Releases

- **v0.0.11** (October 2026) — CI only: the in-repo PR mirror job now always runs and reports under a non-required name instead of being skipped ([Changelog](https://github.com/CLDMV/gitmulti/blob/master/docs/changelog/v0/v0.0.11.md))
- **v0.0.10** (October 2026) — CI only: a skipped PR-run mirror job no longer satisfies the `✅ Required PR Check` ruleset gate; `@cldmv/vitest-runner` 1.5.1 ([Changelog](https://github.com/CLDMV/gitmulti/blob/master/docs/changelog/v0/v0.0.10.md))
- **v0.0.9** (October 2026) — workflows synced to the CLDMV/.github v4.29.2 templates, bundle-size workflow, shared fix-headers config (comment-only header in `gitmulti.js`); no runtime change ([Changelog](https://github.com/CLDMV/gitmulti/blob/master/docs/changelog/v0/v0.0.9.md))
- **v0.0.8** (September 2026) — vitest and `@vitest/coverage-v8` 5.0.1 (dev dependencies only) ([Changelog](https://github.com/CLDMV/gitmulti/blob/master/docs/changelog/v0/v0.0.8.md))

📚 **For complete version history and detailed release notes, see the [docs/changelog/](https://github.com/CLDMV/gitmulti/tree/master/docs/changelog/) folder.**

# Preface
I have a habit of creating tools which are already available but are not simple. I've done research on this issue multiple times and maybe I just didn't find the solution that is already out there. But basically I want to edit a folder of code and have a program update the individual repos which that code belongs to. My first attempt required listing all the files which belonged to each repo. This was alright but required me to either spend hours making this list or write some gui for it. The GUI never happened and months later I abandonned the idea.

Expand Down
32 changes: 32 additions & 0 deletions docs/changelog/v0/v0.0.10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# gitmulti v0.0.10 Changelog

**Release Date**: October 2026
**Release Type**: Patch

---

## Overview

The release title names a coverage-v8 bump, but the release also carries a vitest-runner bump and a fix to the `ci.yml` Required PR Check job. No runtime code changed.

---

## 🔧 CI & tooling

### Stop the skipped PR-run mirror from satisfying Required PR Check ([#36](https://github.com/CLDMV/gitmulti/pull/36))

- On an in-repo feature PR the `pull_request` run skipped the `✅ Required PR Check` mirror job, and GitHub treats a skipped required check as passing, so a PR could become mergeable before the push run's tests finished. The job name in `ci.yml` became an expression so the skipped job no longer posts under the required name (see [CLDMV/slothlet#553](https://github.com/CLDMV/slothlet/issues/553) for the original incident).

## 🔧 Dependencies

- `@vitest/coverage-v8` 5.0.1 → 5.0.2 ([#33](https://github.com/CLDMV/gitmulti/pull/33)) and `@cldmv/vitest-runner` 1.2.0 → 1.5.1 ([#34](https://github.com/CLDMV/gitmulti/pull/34)). Both are dev dependencies and only affect the test/CI toolchain. `package.json` ranges moved to `^5.0.2` and `^1.5.1`; the lockfile also resolves `vitest` to 5.0.2.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.10.md](./v0.0.10.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.9. No runtime code changed.
28 changes: 28 additions & 0 deletions docs/changelog/v0/v0.0.11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# gitmulti v0.0.11 Changelog

**Release Date**: October 2026
**Release Type**: Patch

---

## Overview

A follow-up CI fix to v0.0.10. No runtime code changed.

---

## 🔧 CI & tooling

### Run the in-repo PR mirror job instead of skipping it ([#37](https://github.com/CLDMV/gitmulti/pull/37))

- GitHub does not evaluate the `name:` of a skipped job, so the previous fix showed raw expression text for the skipped job. The mirror job in `ci.yml` now always runs. On the in-repo PR path it reports under `⏭️ Required PR Check (reported by the push run)` and exits as a no-op; every status-owning path (push, fork PR, release PR) reports `✅ Required PR Check`.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.11.md](./v0.0.11.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.10. No runtime code changed.
35 changes: 35 additions & 0 deletions docs/changelog/v0/v0.0.12.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# gitmulti v0.0.12 Changelog

**Release Date**: October 2026
**Release Type**: Patch
**Branch**: `next` → `master`

---

## Overview

A dev-tooling dependency patch. The tools that maintain the comment headers at the top of the repository's source, test, config and workflow files move to their current releases: `@cldmv/fix-headers` from 2.1.1 to 2.2.0, and `@cldmv/configs`, the package that supplies the shared fix-headers configuration, from 1.2.0 to 1.2.4. No runtime code changed: `gitmulti.js` is exactly as in v0.0.11, and the runtime dependency (`commander` ^2.19.0) and its lockfile entry are unchanged.

The bumps were made with a header restamp in mind, but neither produced any header change in this repository: running `npm run fix:headers` against this release rewrites 0 files, so the only files touched are `package.json` and `package-lock.json`, plus the documentation described below.

---

## 🔧 Dependencies

Both are dev dependencies. The lockfile changes are limited to these two packages and the package's own version.

- **`@cldmv/fix-headers` `^2.1.1` → `^2.2.0`** (resolved 2.1.1 → 2.2.0; [#39](https://github.com/CLDMV/gitmulti/pull/39) moved it to 2.1.4 and [#42](https://github.com/CLDMV/gitmulti/pull/42) to 2.2.0). The 2.1.4 release no longer stamps a header into files that have no usable comment syntax (strict JSON such as `package.json`, and Markdown unless explicitly forced), never walks into `node_modules` or other dependency folders, and processes every repeated `--input` value instead of only the last. The 2.2.0 release changes what `@Last modified by` means: it now names whoever last edited a file's content, so a run that only rewrites a header (a date format conversion, a corrected `@Project`, new spacing) keeps the recorded editor instead of claiming the file for whoever ran the tool. The 2.1.2 and 2.1.3 releases in between were repository-maintenance releases with no change to the tool. It only runs through the `fix:headers` script; nothing that ships depends on it.
- **`@cldmv/configs` `^1.2.0` → `^1.2.4`** ([#42](https://github.com/CLDMV/gitmulti/pull/42)). `.configs/fix-headers.json` extends `@cldmv/configs/fix-headers.json`, and from 1.2.4 that shared config sets `forceAuthorUpdate` and `forceLastModifiedAuthorUpdate` to `false` (both were `true` in 1.2.0). Together with fix-headers 2.2.0, a `fix:headers` run no longer overwrites `@Author` or `@Last modified by` on every file.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.12.md](./v0.0.12.md): this changelog.
- Changelogs for earlier releases that shipped without one (v0.0.2 through v0.0.11) were added in the same pass (see the [docs/changelog/](https://github.com/CLDMV/gitmulti/tree/master/docs/changelog/) folder).
- README: a new **What's New** section with the Latest release and the four before it.

---

## Upgrade notes

- No breaking changes, and no runtime code changed. It's a drop-in replacement for v0.0.11.
- For contributors: fix-headers 2.2.0 decides whether a file's content was edited by comparing the working tree with git `HEAD`, so run `npm run fix:headers` before committing, not after.
38 changes: 38 additions & 0 deletions docs/changelog/v0/v0.0.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# gitmulti v0.0.2 Changelog

**Release Date**: August 2026
**Release Type**: Patch

---

## Overview

gitmulti is a small Node command-line tool for managing several repositories inside one working tree. It is meant to scan a repo for `.gitmulti` JSON files, which map files and paths to the git URL of the repository they belong to, and then commit, push and pull each underlying repo individually; it deliberately does nothing else from the git toolset. The entry point, `gitmulti.js`, is a thin [commander](https://www.npmjs.com/package/commander) program that declares `--version` and a default `list` subcommand. Versions before this one were never released (the 0.0.1 in `package.json` is the 2019 initial import).

This is the first release, and it is a repository modernization: gitmulti adopts the CLDMV `@v4` staging-branch workflow set and a `@cldmv/vitest-runner` test setup, and drops an unused dependency. No runtime code changed — `gitmulti.js` is byte-for-byte what it was in the 2019 import.

---

## 🔧 CI & tooling

### Adopt CLDMV @v4 workflows + vitest-runner tests ([#6](https://github.com/CLDMV/gitmulti/pull/6))

- Adds the v4 staging-branch workflow set under `.github/workflows/` (ci, publish, feature-pr, next-release, hotfixes-release, next-reset, hotfix-redirector, labeler, pr-title-normalizer, master-commit-audit, release-notify, tag-health, update-major-version-tags, v4-bootstrap, cla, codeql, scorecard, dependency-review, dependabot-auto-merge, branch-retention, stale, welcome), all thin callers of `CLDMV/.github` reusable workflows pinned `@v4`, plus `.github/dependabot.yml`.
- Adds the `@cldmv/vitest-runner` test setup: `.configs/vitest.config.mjs`, `tests/run-vitest.mjs` and two test files (`tests/gitmulti.test.mjs`, `tests/gitmulti.cli.test.mjs`) that characterize the CLI's observable behaviour. They replace the `echo "Error: no test specified"` stub.
- `package.json` scripts `test`, `test:watch`, `coverage` and `ci:coverage` are added, along with placeholder `build` / `build:ci` scripts that only echo, because the coverage job runs `npm run build`.
- Releases now go through the `next` → `master` release PR.

## 🔧 Dependencies

- **Removed unused `lodash`** from runtime `dependencies` ([#9](https://github.com/CLDMV/gitmulti/pull/9)). `git grep` at this release finds no `lodash` reference outside the lockfile — `gitmulti.js` only requires `commander` — so removing it is not a breaking change. `commander` stays at `^2.19.0`.
- **New dev dependencies** `@cldmv/vitest-runner` ^1.2.0, `@vitest/coverage-v8` ^4.1.10 and `vitest` ^4.1.10. They only affect the test and CI toolchain.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.2.md](./v0.0.2.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes. Nothing in `gitmulti.js` changed, and the only runtime dependency removed was never used.
29 changes: 29 additions & 0 deletions docs/changelog/v0/v0.0.3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# gitmulti v0.0.3 Changelog

**Release Date**: August 2026
**Release Type**: Patch

---

## Overview

A test-file naming change only. No runtime code changed.

---

## 🔧 CI & tooling

### Rename test files to `*.test.vitest.mjs` ([#10](https://github.com/CLDMV/gitmulti/pull/10))

- `tests/gitmulti.test.mjs` → `tests/gitmulti.test.vitest.mjs` and `tests/gitmulti.cli.test.mjs` → `tests/gitmulti.cli.test.vitest.mjs`, following the CLDMV fleet naming convention.
- The `include` glob in `.configs/vitest.config.mjs` and the `testFilePattern` in `tests/run-vitest.mjs` are updated to match, and file-name references in test comments are adjusted.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.3.md](./v0.0.3.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.2. No runtime code changed.
29 changes: 29 additions & 0 deletions docs/changelog/v0/v0.0.4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# gitmulti v0.0.4 Changelog

**Release Date**: August 2026
**Release Type**: Patch

---

## Overview

A CI-only release: the `ci.yml` concurrency policy no longer lets release-relevant runs be cancelled. No runtime code changed.

---

## 🔧 CI & tooling

### Never supersede release-relevant CI runs ([#12](https://github.com/CLDMV/gitmulti/pull/12))

- `ci.yml` concurrency now gives pushes to the release base branch (from `CLDMV_RELEASE_BASE`, falling back to the default branch), pushes to `next` / `hotfixes`, and the `next` / `hotfixes` release PRs a unique concurrency group per run. Feature branches still cancel superseded runs.
- Previously a burst of pushes during a release could cancel a pending run and leave a red cancelled check on the release PR.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.4.md](./v0.0.4.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.3. No runtime code changed.
34 changes: 34 additions & 0 deletions docs/changelog/v0/v0.0.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# gitmulti v0.0.5 Changelog

**Release Date**: August 2026
**Release Type**: Patch

---

## Overview

Bot-identity wiring in three workflow callers plus a patch-level bump of the test toolchain. No runtime code changed.

---

## 🔧 CI & tooling

### Wire bot identity into release workflows ([#16](https://github.com/CLDMV/gitmulti/pull/16))

- `feature-pr.yml`, `next-release.yml` and `hotfixes-release.yml` now pass `BOT_NAME` / `BOT_EMAIL` (from `CLDMV_BOT_NAME` / `CLDMV_BOT_EMAIL`) so bot-authored commits and PRs use the real bot identity.

## 🔧 Dependencies

### Patch group bump ([#15](https://github.com/CLDMV/gitmulti/pull/15))

- `vitest` and `@vitest/coverage-v8` 4.1.10 → 4.1.11. Both are dev dependencies and only affect the test/CI toolchain; the `package.json` range for `@vitest/coverage-v8` moved to `^4.1.11` and the lockfile resolves both to 4.1.11.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.5.md](./v0.0.5.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.4. No runtime code changed.
28 changes: 28 additions & 0 deletions docs/changelog/v0/v0.0.6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# gitmulti v0.0.6 Changelog

**Release Date**: September 2026
**Release Type**: Patch

---

## Overview

A single CI change: `hotfix-redirector.yml` now passes the bot GPG secrets. No runtime code changed.

---

## 🔧 CI & tooling

### Sign redirected security PRs ([#18](https://github.com/CLDMV/gitmulti/pull/18))

- `hotfix-redirector.yml` maps `BOT_NAME`, `BOT_EMAIL`, `BOT_GPG_PRIVATE_KEY` and `BOT_GPG_PASSPHRASE` so Dependabot security PRs redirected away from `master` are cherry-picked as signed commits; unsigned ones were blocked by the signature rule.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.6.md](./v0.0.6.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.5. No runtime code changed.
35 changes: 35 additions & 0 deletions docs/changelog/v0/v0.0.7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# gitmulti v0.0.7 Changelog

**Release Date**: September 2026
**Release Type**: Patch

---

## Overview

The Node CI matrix and the test toolchain move to vitest 5. Only workflow files, `dependabot.yml` and dev dependencies changed; no runtime code changed.

---

## 🔧 CI & tooling

### Node CI matrix for vitest 5 ([#22](https://github.com/CLDMV/gitmulti/pull/22))

- `ci.yml` and `publish.yml` default `min_node_version` moves from `20` to `22.12.0` (the floor vitest 5 runs on) and `max_node_major` from `22` to `26`.
- `.github/dependabot.yml` gains `vitest`, `eslint` and `prettier` groups so packages that peer each other exactly are bumped together.

## 🔧 Dependencies

### vitest 5 ([#20](https://github.com/CLDMV/gitmulti/pull/20))

- `vitest` and `@vitest/coverage-v8` 4.1.11 → 5.0.0, both dev dependencies that only affect the test/CI toolchain. The `package.json` ranges and lockfile both moved to 5.0.0.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.7.md](./v0.0.7.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.6. No runtime code changed. Running the repository's own tests now needs Node 22.12.0 or newer.
28 changes: 28 additions & 0 deletions docs/changelog/v0/v0.0.8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# gitmulti v0.0.8 Changelog

**Release Date**: September 2026
**Release Type**: Patch

---

## Overview

A dev-dependency patch bump. Nothing outside `package.json` and the lockfile changed, and no runtime code changed.

---

## 🔧 Dependencies

### vitest group bump ([#24](https://github.com/CLDMV/gitmulti/pull/24))

- `vitest` and `@vitest/coverage-v8` 5.0.0 → 5.0.1. Both are dev dependencies and only affect the test/CI toolchain. `package.json` moves `vitest` to `^5.0.1`; the lockfile resolves both packages to 5.0.1.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.8.md](./v0.0.8.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.7. No runtime code changed.
40 changes: 40 additions & 0 deletions docs/changelog/v0/v0.0.9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# gitmulti v0.0.9 Changelog

**Release Date**: October 2026
**Release Type**: Patch

---

## Overview

Despite its title, this release is a broad CI refresh: workflows are synced with the CLDMV/.github v4.29.2 templates, the bundle-size workflow is added, and the shared CLDMV file-header config stamps uniform comment headers across the repo. The only change to `gitmulti.js` is a comment header; no runtime code changed.

---

## 🔧 CI & tooling

### Sync with CLDMV/.github v4.29.2 templates ([#27](https://github.com/CLDMV/gitmulti/pull/27))

- Refreshes every workflow caller and `dependabot.yml`, and adds `member-auto-merge.yml` (auto-enables auto-merge on org members' PRs into `next` / `hotfixes`), `pr-notify.yml`, `provenance.yml` (SLSA provenance on release), `release-merge.yml` and `dependabot-recreate.yml`.

### Bundle-size workflow ([#29](https://github.com/CLDMV/gitmulti/pull/29))

- Adds `bundle-size.yml` and restores the full workflow list in `release-merge.yml`.

### Shared fix-headers config ([#31](https://github.com/CLDMV/gitmulti/pull/31))

- Adds `.configs/fix-headers.json` (extends `@cldmv/configs/fix-headers.json`) and a `fix:headers` script, and stamps a uniform comment header into source, test, config and workflow files. In `gitmulti.js` this is a comment block only — the code below it is unchanged.

## 🔧 Dependencies

- New dev dependencies `@cldmv/fix-headers` ^2.1.1 and `@cldmv/configs` ^1.2.0. They only affect repository tooling.

## 📚 Documentation

- **NEW:** [docs/changelog/v0/v0.0.9.md](./v0.0.9.md) — this changelog (added retroactively).

---

## Upgrade notes

- No breaking changes — drop-in for v0.0.8. No runtime code changed; `gitmulti.js` and the tests only gained comment headers.
Loading
Loading