feat: add options.explainer for blockREADME #1019
ci.yml
on: pull_request
Are The Types Wrong?
59s
Build
50s
Lint
1m 12s
Lint Knip
13s
Lint Markdown
13s
Lint Packages
14s
Lint Spelling
13s
Prettier
14s
Test
33s
Test Creation Script
1m 56s
Test Initialization Script
1m 24s
Test Migration Script
2m 54s
Type Check
16s
Annotations
10 errors and 13 warnings
src/steps/writing/creation/index.test.ts > createStructure > base minimal > matches current and next:
src/steps/writing/creation/index.test.ts#L284
AssertionError: expected { Object (eslint.config.js) } to deeply equal { Object (eslint.config.js) }
- Expected
+ Received
Object {
"eslint.config.js": "import comments from \"@eslint-community/eslint-plugin-eslint-comments/configs\";
import eslint from \"@eslint/js\";
import vitest from \"@vitest/eslint-plugin\";
import jsdoc from \"eslint-plugin-jsdoc\";
import jsonc from \"eslint-plugin-jsonc\";
import markdown from \"eslint-plugin-markdown\";
import n from \"eslint-plugin-n\";
import packageJson from \"eslint-plugin-package-json/configs/recommended\";
import perfectionist from \"eslint-plugin-perfectionist\";
import * as regexp from \"eslint-plugin-regexp\";
import yml from \"eslint-plugin-yml\";
import tseslint from \"typescript-eslint\";
export default tseslint.config(
{
ignores: [\"**/*.snap\", \"coverage\", \"lib\", \"node_modules\", \"pnpm-lock.yaml\"],
},
{ linterOptions: { reportUnusedDisableDirectives: \"error\" } },
eslint.configs.recommended,
comments.recommended,
jsdoc.configs[\"flat/contents-typescript-error\"],
jsdoc.configs[\"flat/logical-typescript-error\"],
jsdoc.configs[\"flat/stylistic-typescript-error\"],
jsonc.configs[\"flat/recommended-with-json\"],
markdown.configs.recommended,
n.configs[\"flat/recommended\"],
packageJson,
perfectionist.configs[\"recommended-natural\"],
regexp.configs[\"flat/recommended\"],
{
extends: [
tseslint.configs.strictTypeChecked,
tseslint.configs.stylisticTypeChecked,
],
files: [\"**/*.js\", \"**/*.ts\"],
languageOptions: {
parserOptions: {
projectService: {
allowDefaultProject: [\"*.config.*s\", \"bin/index.js\"],
},
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
// Stylistic concerns that don't interfere with Prettier
\"logical-assignment-operators\": [
\"error\",
\"always\",
{ enforceForIfStatements: true },
],
\"no-useless-rename\": \"error\",
\"object-shorthand\": \"error\",
\"operator-assignment\": \"error\",
},
settings: { perfectionist: { partitionByComment: true, type: \"natural\" } },
},
- {
- extends: [tseslint.configs.disableTypeChecked],
- files: [\"**/*.md/*.ts\"],
- rules: {
- \"n/no-missing-import\": [\"error\", { allowModules: [\"test-repo\"] }],
- },
- },
+ { extends: [tseslint.configs.disableTypeChecked], files: [\"**/*.md/*.ts\"] },
{
extends: [vitest.configs.recommended],
files: [\"**/*.test.*\"],
rules: { \"@typescript-eslint/no-unsafe-assignment\": \"off\" },
},
{
extends: [yml.configs[\"flat/recommended\"], yml.configs[\"flat/prettier\"]],
files: [\"**/*.{yml,yaml}\"],
rules: {
\"yml/file-extension\": [\"error\", { extension: \"yml\" }],
\"yml/sort-keys\": [
\"error\",
{ order: { type: \"asc\" }, pathPattern: \"^.*$\" },
],
\"yml/sort-sequence-values\": [
\"error\",
{ order: { type: \"asc\" }, pathPattern: \"^.*$\" },
],
},
},
);
",
}
❯ src/steps/writing/creation/index.test.ts:284:17
|
src/steps/writing/creation/index.test.ts > createStructure > base common > matches current and next:
src/steps/writing/creation/index.test.ts#L284
AssertionError: expected { Object (eslint.config.js) } to deeply equal { Object (eslint.config.js) }
- Expected
+ Received
Object {
"eslint.config.js": "import comments from \"@eslint-community/eslint-plugin-eslint-comments/configs\";
import eslint from \"@eslint/js\";
import vitest from \"@vitest/eslint-plugin\";
import jsdoc from \"eslint-plugin-jsdoc\";
import jsonc from \"eslint-plugin-jsonc\";
import markdown from \"eslint-plugin-markdown\";
import n from \"eslint-plugin-n\";
import packageJson from \"eslint-plugin-package-json/configs/recommended\";
import perfectionist from \"eslint-plugin-perfectionist\";
import * as regexp from \"eslint-plugin-regexp\";
import yml from \"eslint-plugin-yml\";
import tseslint from \"typescript-eslint\";
export default tseslint.config(
{
ignores: [\"**/*.snap\", \"coverage\", \"lib\", \"node_modules\", \"pnpm-lock.yaml\"],
},
{ linterOptions: { reportUnusedDisableDirectives: \"error\" } },
eslint.configs.recommended,
comments.recommended,
jsdoc.configs[\"flat/contents-typescript-error\"],
jsdoc.configs[\"flat/logical-typescript-error\"],
jsdoc.configs[\"flat/stylistic-typescript-error\"],
jsonc.configs[\"flat/recommended-with-json\"],
markdown.configs.recommended,
n.configs[\"flat/recommended\"],
packageJson,
perfectionist.configs[\"recommended-natural\"],
regexp.configs[\"flat/recommended\"],
{
extends: [
tseslint.configs.strictTypeChecked,
tseslint.configs.stylisticTypeChecked,
],
files: [\"**/*.js\", \"**/*.ts\"],
languageOptions: {
parserOptions: {
projectService: {
allowDefaultProject: [\"*.config.*s\", \"bin/index.js\"],
},
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
// Stylistic concerns that don't interfere with Prettier
\"logical-assignment-operators\": [
\"error\",
\"always\",
{ enforceForIfStatements: true },
],
\"no-useless-rename\": \"error\",
\"object-shorthand\": \"error\",
\"operator-assignment\": \"error\",
},
settings: { perfectionist: { partitionByComment: true, type: \"natural\" } },
},
- {
- extends: [tseslint.configs.disableTypeChecked],
- files: [\"**/*.md/*.ts\"],
- rules: {
- \"n/no-missing-import\": [\"error\", { allowModules: [\"test-repo\"] }],
- },
- },
+ { extends: [tseslint.configs.disableTypeChecked], files: [\"**/*.md/*.ts\"] },
{
extends: [vitest.configs.recommended],
files: [\"**/*.test.*\"],
rules: { \"@typescript-eslint/no-unsafe-assignment\": \"off\" },
},
{
extends: [yml.configs[\"flat/recommended\"], yml.configs[\"flat/prettier\"]],
files: [\"**/*.{yml,yaml}\"],
rules: {
\"yml/file-extension\": [\"error\", { extension: \"yml\" }],
\"yml/sort-keys\": [
\"error\",
{ order: { type: \"asc\" }, pathPattern: \"^.*$\" },
],
\"yml/sort-sequence-values\": [
\"error\",
{ order: { type: \"asc\" }, pathPattern: \"^.*$\" },
],
},
},
);
",
}
❯ src/steps/writing/creation/index.test.ts:284:17
|
src/steps/writing/creation/index.test.ts > createStructure > base everything > matches current and next:
src/steps/writing/creation/index.test.ts#L284
AssertionError: expected { Object (eslint.config.js) } to deeply equal { Object (eslint.config.js) }
- Expected
+ Received
Object {
"eslint.config.js": "import comments from \"@eslint-community/eslint-plugin-eslint-comments/configs\";
import eslint from \"@eslint/js\";
import vitest from \"@vitest/eslint-plugin\";
import jsdoc from \"eslint-plugin-jsdoc\";
import jsonc from \"eslint-plugin-jsonc\";
import markdown from \"eslint-plugin-markdown\";
import n from \"eslint-plugin-n\";
import packageJson from \"eslint-plugin-package-json/configs/recommended\";
import perfectionist from \"eslint-plugin-perfectionist\";
import * as regexp from \"eslint-plugin-regexp\";
import yml from \"eslint-plugin-yml\";
import tseslint from \"typescript-eslint\";
export default tseslint.config(
{
ignores: [\"**/*.snap\", \"coverage\", \"lib\", \"node_modules\", \"pnpm-lock.yaml\"],
},
{ linterOptions: { reportUnusedDisableDirectives: \"error\" } },
eslint.configs.recommended,
comments.recommended,
jsdoc.configs[\"flat/contents-typescript-error\"],
jsdoc.configs[\"flat/logical-typescript-error\"],
jsdoc.configs[\"flat/stylistic-typescript-error\"],
jsonc.configs[\"flat/recommended-with-json\"],
markdown.configs.recommended,
n.configs[\"flat/recommended\"],
packageJson,
perfectionist.configs[\"recommended-natural\"],
regexp.configs[\"flat/recommended\"],
{
extends: [
tseslint.configs.strictTypeChecked,
tseslint.configs.stylisticTypeChecked,
],
files: [\"**/*.js\", \"**/*.ts\"],
languageOptions: {
parserOptions: {
projectService: {
allowDefaultProject: [\"*.config.*s\", \"bin/index.js\"],
},
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
// Stylistic concerns that don't interfere with Prettier
\"logical-assignment-operators\": [
\"error\",
\"always\",
{ enforceForIfStatements: true },
],
\"no-useless-rename\": \"error\",
\"object-shorthand\": \"error\",
\"operator-assignment\": \"error\",
},
settings: { perfectionist: { partitionByComment: true, type: \"natural\" } },
},
- {
- extends: [tseslint.configs.disableTypeChecked],
- files: [\"**/*.md/*.ts\"],
- rules: {
- \"n/no-missing-import\": [\"error\", { allowModules: [\"test-repo\"] }],
- },
- },
+ { extends: [tseslint.configs.disableTypeChecked], files: [\"**/*.md/*.ts\"] },
{
extends: [vitest.configs.recommended],
files: [\"**/*.test.*\"],
rules: { \"@typescript-eslint/no-unsafe-assignment\": \"off\" },
},
{
extends: [yml.configs[\"flat/recommended\"], yml.configs[\"flat/prettier\"]],
files: [\"**/*.{yml,yaml}\"],
rules: {
\"yml/file-extension\": [\"error\", { extension: \"yml\" }],
\"yml/sort-keys\": [
\"error\",
{ order: { type: \"asc\" }, pathPattern: \"^.*$\" },
],
\"yml/sort-sequence-values\": [
\"error\",
{ order: { type: \"asc\" }, pathPattern: \"^.*$\" },
],
},
},
);
",
}
❯ src/steps/writing/creation/index.test.ts:284:17
|
Test
Process completed with exit code 1.
|
Test Initialization Script
Process completed with exit code 1.
|
migrate-test-e2e.ts > expected file changes > README.md:
script/migrate-test-e2e.ts#L105
Error: Snapshot `expected file changes > README.md 1` mismatched
- Expected
+ Received
@@ -1,15 +1,27 @@
"--- a/README.md
+++ b/README.md
@@ ... @@
<h1 align="center">Create TypeScript App</h1>
- -<p align="center">Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. 🎁</p>
+ -<p align="center">
+ - Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling.
+ - 🎁
+ -</p>
- +<p align="center">A very lovely package. Hooray!</p>
-
- <p align="center">
- <!-- prettier-ignore-start -->
+ +<p align="center">Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. 🎁</p>
+
+ <p align="center">
+ <!-- prettier-ignore-start -->
+ @@ ... @@
+ <img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
+ </p>
+
+ -<img align="right" alt="Project logo: the TypeScript blue square with rounded corners, but a plus sign instead of 'TS'" height="128" src="./docs/create-typescript-app.png" width="128">
+ +<img align="right" alt="Project logo: the TypeScript blue square with rounded corners, but a plus sign instead of 'TS'" src="./docs/create-typescript-app.png">
+
+ `create-typescript-app` is a one-stop-shop solution to set up a new or existing repository with the latest and greatest TypeScript tooling.
+ It includes options not just for building and testing but also GitHub repository templates, contributor recognition, automated release management, and more.
@@ ... @@ Thanks! 💖
<!-- ALL-CONTRIBUTORS-LIST:END -->
<!-- spellchecker: enable -->
+
❯ migrate-test-e2e.ts:105:35
|
migrate-test-e2e.ts > expected file changes > eslint.config.js:
script/migrate-test-e2e.ts#L105
Error: Snapshot `expected file changes > eslint.config.js 1` mismatched
- Expected
+ Received
@@ -28,17 +28,16 @@
+ ignores: ["**/*.snap", "coverage", "lib", "node_modules", "pnpm-lock.yaml"],
},
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
eslint.configs.recommended,
@@ ... @@ export default tseslint.config(
- files: ["**/*.js", "**/*.ts"],
languageOptions: {
parserOptions: {
- - projectService: {
+ projectService: {
- allowDefaultProject: ["*.config.*s", "bin/*.js"],
- - },
- + projectService: { allowDefaultProject: ["*.config.*s"] },
+ + allowDefaultProject: ["*.config.*s", "bin/index.js"],
+ },
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
- // These on-by-default rules work well for this repo if configured
@@ -62,5 +61,18 @@
- ],
-
// Stylistic concerns that don't interfere with Prettier
"logical-assignment-operators": [
"error",
+ @@ ... @@ export default tseslint.config(
+ {
+ extends: [tseslint.configs.disableTypeChecked],
+ files: ["**/*.md/*.ts"],
+ + rules: {
+ + "n/no-missing-import": [
+ + "error",
+ + { allowModules: ["create-typescript-app"] },
+ + ],
+ + },
+ },
+ {
+ extends: [vitest.configs.recommended],"
❯ migrate-test-e2e.ts:105:35
|
migrate-test-e2e.ts > expected file changes > package.json:
script/migrate-test-e2e.ts#L105
Error: Snapshot `expected file changes > package.json 1` mismatched
- Expected
+ Received
@@ -1,18 +1,9 @@
"--- a/package.json
+++ b/package.json
@@ ... @@
- {
- "name": "create-typescript-app",
- "version": "1.79.0",
- - "description": "Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. 🎁",
- + "description": "A very lovely package. Hooray! 💖",
- "repository": {
- "type": "git",
- "url": "https://github.com/JoshuaKGoldberg/create-typescript-app"
- @@ ... @@
- "lint-staged": "15.2.11",
+ "lint-staged": "15.3.0",
"markdownlint": "0.37.2",
"markdownlint-cli": "0.43.0",
+ "prettier": "^3.4.2",
"prettier-plugin-curly": "0.3.1",
"prettier-plugin-packagejson": "2.5.6",
❯ migrate-test-e2e.ts:105:35
|
migrate-test-e2e.ts > unexpected file changes:
script/migrate-test-e2e.ts#L137
Error:
Oh no! Running the migrate script unexpectedly modified:
- .all-contributorsrc
- .github/workflows/release.yml
See .github/DEVELOPMENT.md > Setup Scripts for context.
Then see .github/DEVELOPMENT.md > Unexpected File Modifications.
❯ migrate-test-e2e.ts:137:9
|
Test Migration Script
Process completed with exit code 1.
|
Prettier
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Lint Spelling
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Lint Knip
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Lint Packages
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Lint Markdown
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Type Check
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Test
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Build
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Are The Types Wrong?
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Lint
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Test Initialization Script
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Test Creation Script
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|
Test Migration Script
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
|