Monorepo CLI tooling: Set folder organisation (#37561)

This commit is contained in:
Paul Sealock 2023-04-12 09:26:21 +12:00 committed by GitHub
parent 450d9e9c8c
commit c4a7e9a11b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 2118 additions and 136 deletions

View File

@ -22,7 +22,7 @@ jobs:
run: | run: |
npm install -g pnpm@7 npm install -g pnpm@7
npm -g i @wordpress/env@5.1.0 npm -g i @wordpress/env@5.1.0
pnpm install --filter code-analyzer --filter cli-core pnpm install --filter monorepo-utils --filter code-analyzer --filter cli-core
- name: Run analyzer - name: Run analyzer
id: run id: run
working-directory: tools/code-analyzer working-directory: tools/code-analyzer

View File

@ -17,16 +17,20 @@
"bugs": { "bugs": {
"url": "https://github.com/woocommerce/woocommerce/issues" "url": "https://github.com/woocommerce/woocommerce/issues"
}, },
"bin": {
"utils": "./tools/monorepo-utils/dist/index.js"
},
"scripts": { "scripts": {
"build": "pnpm exec turbo run turbo:build", "build": "pnpm exec turbo run turbo:build",
"test": "pnpm exec turbo run turbo:test", "test": "pnpm exec turbo run turbo:test",
"clean": "pnpm store prune && git clean -fx **/node_modules && pnpm i", "clean": "pnpm store prune && git clean -fx **/node_modules && pnpm i",
"preinstall": "npx only-allow pnpm", "preinstall": "npx only-allow pnpm",
"postinstall": "pnpm git:update-hooks", "postinstall": "pnpm git:update-hooks && pnpm run --filter='./tools/monorepo-utils' build",
"git:update-hooks": "rm -r .git/hooks && mkdir -p .git/hooks && husky install", "git:update-hooks": "rm -r .git/hooks && mkdir -p .git/hooks && husky install",
"create-extension": "node ./tools/create-extension/index.js", "create-extension": "node ./tools/create-extension/index.js",
"cherry-pick": "node ./tools/cherry-pick/bin/run", "cherry-pick": "node ./tools/cherry-pick/bin/run",
"sync-dependencies": "pnpm exec syncpack -- fix-mismatches" "sync-dependencies": "pnpm exec syncpack -- fix-mismatches",
"utils": "./tools/monorepo-utils/dist/index.js"
}, },
"devDependencies": { "devDependencies": {
"@babel/preset-env": "^7.20.2", "@babel/preset-env": "^7.20.2",

File diff suppressed because it is too large Load Diff

View File

@ -11,3 +11,4 @@ packages:
- 'tools/cli-core' - 'tools/cli-core'
- 'tools/version-bump' - 'tools/version-bump'
- 'tools/storybook' - 'tools/storybook'
- 'tools/monorepo-utils'

View File

View File

@ -0,0 +1,4 @@
module.exports = {
extends: [ 'plugin:@woocommerce/eslint-plugin/recommended' ],
root: true,
};

0
tools/monorepo-utils/.gitignore vendored Normal file
View File

View File

@ -0,0 +1,5 @@
# Monorepo Utils
## Description
Monorepo utilities and tooling.

View File

@ -0,0 +1,6 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testPathIgnorePatterns: [ '<rootDir>/dist/', '<rootDir>/node_modules/' ],
};

View File

@ -0,0 +1,35 @@
{
"name": "@woocommerce/monorepo-utils",
"version": "0.0.1",
"description": "WooCommerce Monorepo utility tooling.",
"author": "Automattic",
"homepage": "https://github.com/woocommerce/woocommerce",
"license": "GPLv2",
"repository": "woocommerce/woocommerce",
"dependencies": {
"chalk": "^4.1.2",
"commander": "^9.4.0",
"@commander-js/extra-typings": "^0.1.0",
"dotenv": "^10.0.0"
},
"devDependencies": {
"@types/jest": "^27.4.1",
"@types/node": "^16.18.18",
"@woocommerce/eslint-plugin": "workspace:*",
"eslint": "^8.32.0",
"jest": "^29.5.0",
"ts-jest": "^29.1.0",
"typescript": "^4.9.5"
},
"scripts": {
"build": "tsc",
"start": "tsc --watch",
"lint": "eslint . --ext .ts",
"test": "jest"
},
"engines": {
"node": "^16.13.1",
"pnpm": "^7.13.3"
},
"types": "dist/index.d.ts"
}

View File

@ -0,0 +1,3 @@
# Code Freeze CLI Utility
CLI for performing Monorepo utilities relating to Code Freeze

View File

@ -0,0 +1,15 @@
/**
* External dependencies
*/
import { Command } from '@commander-js/extra-typings';
/**
* Internal dependencies
*/
import { verifyDayCommand } from './verify-day';
const program = new Command( 'code-freeze' )
.description( 'Code freeze utilities' )
.addCommand( verifyDayCommand );
export default program;

View File

@ -0,0 +1,21 @@
/**
* External dependencies
*/
import { Command } from '@commander-js/extra-typings';
/**
* Internal dependencies
*/
import { verifyDay } from '../utils/index';
export const verifyDayCommand = new Command( 'verify-day' )
.description( 'Verify if today is the code freeze day' )
.option(
'-o, --override <override>',
"Time Override: The time to use in checking whether the action should run (default: 'now')."
)
.action( () => {
console.log( verifyDay() );
process.exit( 0 );
} );

View File

@ -0,0 +1,10 @@
/**
* Internal dependencies
*/
import { verifyDay } from '../index';
describe( 'verifyDay', () => {
it( 'should return a string', () => {
expect( verifyDay() ).toBe( 'Today is a good day to code freeze!' );
} );
} );

View File

@ -0,0 +1,3 @@
export const verifyDay = () => {
return 'Today is a good day to code freeze!';
};

View File

@ -0,0 +1,17 @@
#! /usr/bin/env node
/**
* External dependencies
*/
import { Command } from '@commander-js/extra-typings';
/**
* Internal dependencies
*/
import CodeFreeze from './code-freeze/commands';
const program = new Command()
.name( 'utils' )
.description( 'Monorepo utilities' )
.addCommand( CodeFreeze );
program.parse( process.argv );

View File

@ -0,0 +1,15 @@
{
"compilerOptions": {
"rootDir": "src",
"outDir": "dist",
"target": "es6",
"module": "commonjs",
"esModuleInterop": true,
"moduleResolution": "node",
"typeRoots": [
"./typings",
"./node_modules/@types",
"./node_modules/@commander-js"
]
}
}