The Repodog cli package.
- Scripts for cutting and publishing releases
- Scripts for scaffolding new folder structures
- Scripts for writing files with ChatGPT
- Works with npm, yarn and pnpm
- Works with standard repo and monorepo structures
# terminal
npm install @repodog/cli --save-dev
// package.json
{
...
"scripts": {
...
"repodog": "repodog",
...
},
...
}
# .github/workflows/build-and-publish.yml
name: Build and publish
on:
push:
branches:
- main
tags:
- v**
pull_request:
branches:
- main
jobs:
build-and-publish:
uses: badbatch/repodog/.github/workflows/master-build-and-publish.yml@main
with:
node-version: '20.17.0'
package-manager: 'pnpm'
package-manager-version: '9.11.0'
secrets:
npm_auth_token: ${{ secrets.NPM_AUTH_TOKEN }}
# pipelines/azure-pipeline.yml
trigger:
branches:
include:
- main
tags:
include:
- v**
pr:
- main
resources:
repositories:
- repository: repodog
type: github
name: badbatch/repodog
ref: main
jobs:
- template: pipelines/azure-pipeline-template.yml@repodog
parameters:
node-version: '20.17.0'
package-manager: 'pnpm'
package-manager-version: '9.11.0'
repodog cut <type>
Cut release to current branch
Positionals:
type The release type: major | premajor | minor | preminor | patch | prepatch
| prerelease | dry-run [string] [required]
Options:
--version Show version number [boolean]
--help Show help [boolean]
--tag The release tag: alpha | beta | pr | unstable
[string]
--preid A unique identifier for the pre-release [string]
--dry-run Stop job before versioning changes are committed
[boolean]
--filter A glob for filtering the packages the command is ru
n against [string]
--force Increment version regardless of files changed
[boolean]
--skip-posthook To skip post version lifecycle hook [boolean]
--skip-prehook To skip pre version lifecycle hook [boolean]
--skip-node-version-check To skip the node version check [boolean]
--verbose Whether to output verbose logs [boolean]
If you run
repodog cut
with the--dry-run
flag, you can subsequently cut the dry-run release by re-runningrepodog cut
withdry-run
as the release type.
Any tasks you want to run prior to package versions getting updated should be run in this script hook.
// package.json
{
"scripts": {
"cut:pre-version": "npm run pre-version-tasks"
}
}
Any tasks you want to run after package versions have been updated should be run in this script hook.
// package.json
{
"scripts": {
"cut:post-version": "npm run post-version-tasks"
}
}
Any tasks you want to run to generate/update the changelog should be run in this script hook.
// package.json
{
"scripts": {
"cut:changelog": "npm run changelog-tasks"
}
}
repodog new <type> [subtype]
Scaffold new folder structure
Positionals:
type The type of folder to scaffold: repo | pkg
[string] [required]
subtype The subtype of folder to scaffold; repo: componentLibrary |
library | monorepo; pkg: component | config | library
[string] [required]
custom-type-path The additional types to apply to the scaffold. Multiple
types should be separated by a "." character. These types
are applied after the subtype [string]
Options:
--version Show version number [boolean]
--help Show help [boolean]
--exclude-builtin-templates To skip the node version check [boolean]
--skip-node-version-check To skip the node version check [boolean]
--verbose Whether to output verbose logs [boolean]
Below are the config properties used in the repodog new
script. The .repodogrc
config file must be located at the
root of your project or globally. If you want the config to be global, use the setup command to create/update a global config.
Include additional templates as part of the set of templates used to generate a folder structure. You can use the type
, subtype
and custom-type-path
options to target specific template sets based on the folder structure within your additional templates path.
The additional templates path is relative to the current working directory if declared in a project config or absolute if declared in a global config.
The templating functionality is powered by hygen
so all templates must to adhere to its
rules.
The example below uses the additional command.ejs.t
template file when repodog new
is called with pkg library cli
.
// filesystem
_templates/
- new/
- pkg/
- library/
- cli/
- command.ejs.t
// <projectRoot>/.repodogrc
{
"additionalTemplatesPath": "./_templates"
}
Add, remove, and/or replace the base set of questions for a given type
and subtype
. You can use the type
, subtype
and custom-type-path
options to target the overrides to create bespoke question sets.
questionOverrides
can only be declared in a project config. To set questionOverrides
globally, see the questionOverridesPath
property.
The example below adds two questions, removes one, and updates one when repodog new
is called with pkg library cli
.
// .repodogrc
{
"questionOverrides": {
"new": {
"pkg": {
"library": {
"cli": {
"add": [
{
"message": "What is the cli command?",
"name": "cliCommand",
"required": true,
"type": "input"
},
{
"message": "What is the cli description?",
"name": "cliDescription",
"required": true,
"type": "input"
}
],
"remove": ["mainFilename"],
"replace": [
{
"message": "What is the homepage for the package's repository?",
"name": "homepage",
"required": true,
"type": "input"
}
]
}
}
}
}
}
}
Path to the JSON file containing your question overrides. The file adheres to the same structure as in the example above, except the content is not nested within a questionOverrides
property.
The path is relative to the current working directory if declared in a project config or absolute if declared in a global config.
Values to populate your templates with. You can use the type
, subtype
and custom-type-path
options to target the variables to specific template sets. The config allows for variables to be applied to all templates or a branch of templates through the *
character.
Template variables are flattened and merged and the output is passed into the templates. If any of the keys match the name a question, then the key's value is used as the question's initial answer.
templateVariables
can only be declared in a project config. To set templateVariables
globally, see the templateVariablesPath
property.
// .repodogrc
{
"templateVariables": {
"*": {
"author": "Dylan Aubrey",
"homepage": "https://github.com/badbatch/repodog",
"org": "repodog"
},
"new": {
"pkg": {
"library": {
"cli": {
"mainFilename": "handler"
}
}
}
}
}
}
Path to the JSON file containing your template variable overrides. The file adheres to the same structure as in the example above, except the content is not nested within a templateVariables
property.
The path is relative to the current working directory if declared in a project config or absolute if declared in a global config.
repodog publish
Publish packages to registry
Options:
--version Show version number [boolean]
--help Show help [boolean]
--verbose Whether to output verbose logs [boolean]
repodog setup
Set up global config
Options:
--version Show version number [boolean]
--help Show help [boolean]
--verbose Whether to output verbose logs [boolean]
repodog write <type> <file-path>
Write the content of a new file
Positionals:
type The write type: test [string] [required]
file-path Path to file to execute write type against. Relative to cwd
[string] [required]
Options:
--version Show version number [boolean]
--help Show help [boolean]
--skip-format Whether to skip formatting of the content of the new file
[boolean]
--verbose Whether to output verbose logs [boolean]
OPENAI_API_KEY
= *****
Required in order to communicate with the ChatGPT API. To get an OpenAI API key, sign up on their website.
Below are the config properties used in the repodog write
script. The .repodogrc
config file must be located at the
root of your project, regardless of whether the repo has a standard or monorepo structure.
The programming language, either 'javascript'
or 'typescript'
. The default is 'javascript'
. This can be set at either a project or global level.
The path to the file where your environment variables are stored. The path is relative to the current working directory. The default is '.env'
. This can be set at either a project or global level.
The path is relative to the current working directory if declared in a project config or absolute if declared in a global config.
Check out the features, fixes and more that go into each major, minor and patch version.
@repodog/cli is MIT Licensed.