diff --git a/.config/csharpier/.csharpierignore b/.config/csharpier/.csharpierignore new file mode 100644 index 0000000..51045e2 --- /dev/null +++ b/.config/csharpier/.csharpierignore @@ -0,0 +1,2 @@ +**/* +!**/*.cs diff --git a/.config/cspell/cspell.json b/.config/cspell/cspell.json index 7fced0a..b4e63f4 100644 --- a/.config/cspell/cspell.json +++ b/.config/cspell/cspell.json @@ -3,8 +3,9 @@ "enableGlobDot": true, "useGitignore": true, "gitignoreRoot": ".", - "ignorePaths": ["LICENSE"], + "ignorePaths": ["LICENSE", "local.env"], "words": [ + "csharpierignore", "csharpierrc", "devcontainer", "devcontainers", diff --git a/.config/dotnet/tools.json b/.config/dotnet/tools.json index 7aaaf4a..5d702d2 100644 --- a/.config/dotnet/tools.json +++ b/.config/dotnet/tools.json @@ -3,8 +3,8 @@ "isRoot": true, "tools": { "csharpier": { - "version": "0.28.2", - "commands": ["dotnet-csharpier"], + "version": "1.0.0", + "commands": ["csharpier"], "rollForward": false } } diff --git a/.config/git/ignore b/.config/git/ignore index c90be9c..41b2feb 100644 --- a/.config/git/ignore +++ b/.config/git/ignore @@ -4,6 +4,7 @@ _* !**/.devcontainer/** !.config/ !**/.config/** +local.env node_modules/ diff --git a/.config/prettier/.prettierrc.json b/.config/prettier/.prettierrc.json index d3be24a..b8ae6eb 100644 --- a/.config/prettier/.prettierrc.json +++ b/.config/prettier/.prettierrc.json @@ -1,6 +1,6 @@ { "printWidth": 120, - "plugins": ["prettier-plugin-packagejson", "@prettier/plugin-xml", "prettier-plugin-ini"], + "plugins": ["prettier-plugin-packagejson", "prettier-plugin-sh", "@prettier/plugin-xml", "prettier-plugin-ini"], "xmlWhitespaceSensitivity": "ignore", "overrides": [ { "files": "app.manifest", "options": { "parser": "xml" } }, diff --git a/.devcontainer/compose.yaml b/.devcontainer/compose.yaml index ab2b589..d334c28 100644 --- a/.devcontainer/compose.yaml +++ b/.devcontainer/compose.yaml @@ -2,6 +2,8 @@ services: devcontainer: env_file: - .env + - path: local.env + required: false build: context: . dockerfile: Dockerfile diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 87873e6..36260b6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -32,9 +32,6 @@ }, "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", - "[dockerfile]": { - "editor.defaultFormatter": "ms-azuretools.vscode-docker" - }, "cSpell.autoFormatConfigFile": true, "cSpell.checkOnlyEnabledFileTypes": false, "editor.codeActionsOnSave": { diff --git a/.devcontainer/dot-config.json b/.devcontainer/dot-config.json index a452244..dde10c3 100644 --- a/.devcontainer/dot-config.json +++ b/.devcontainer/dot-config.json @@ -16,7 +16,8 @@ "eslint.config.ts": "eslint.config.ts" }, "csharpier": { - ".csharpierrc.json": ".csharpierrc.json" + ".csharpierrc.json": ".csharpierrc.json", + ".csharpierignore": ".csharpierignore" }, "dotnet": { "tools.json": ".config/dotnet-tools.json" diff --git a/package.json b/package.json index 08c1c5d..4870157 100644 --- a/package.json +++ b/package.json @@ -9,56 +9,53 @@ "lint": "pnpm node scripts/lint.ts", "node": "vite-node scripts/node.ts", "publish": "pnpm node scripts/publish.ts", + "push": "pnpm node scripts/push.ts", "restore": "pnpm node scripts/restore.ts", "test": "pnpm node scripts/test.ts", "update": "pnpm node scripts/update.ts" }, "dependencies": { - "@commander-js/extra-typings": "^13.1.0", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "^9.22.0", + "@commander-js/extra-typings": "^14.0.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.28.0", "@prettier/plugin-xml": "^3.4.1", - "@tsconfig/node22": "^22.0.0", - "@vitest/eslint-plugin": "^1.1.37", - "commander": "~13.1.0", - "cspell": "^8.17.5", - "eslint": "^9.22.0", - "eslint-config-prettier": "^10.1.1", + "@tsconfig/node22": "^22.0.2", + "@vitest/eslint-plugin": "^1.2.1", + "commander": "~14.0.0", + "cspell": "^9.0.2", + "eslint": "^9.28.0", + "eslint-config-prettier": "^10.1.5", "eslint-flat-config-gitignore": "^3.0.0", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-n": "^17.16.2", + "eslint-plugin-n": "^17.19.0", "eslint-plugin-simple-import-sort": "^12.1.1", - "eslint-plugin-unicorn": "^57.0.0", - "execa": "^9.5.2", - "glob": "^11.0.1", - "globals": "^16.0.0", - "isomorphic-git": "1.29.0", + "eslint-plugin-unicorn": "^59.0.1", + "execa": "^9.6.0", + "glob": "^11.0.2", + "globals": "^16.2.0", + "isomorphic-git": "1.30.2", "jiti": "^2.4.2", "prettier": "^3.5.3", "prettier-plugin-ini": "^1.3.0", - "prettier-plugin-packagejson": "^2.5.10", - "semver": "^7.7.1", - "syncpack": "^13.0.3", - "type-fest": "^4.37.0", - "typescript": "~5.8.2", - "typescript-eslint": "^8.26.1", - "vite": "^6.2.2", - "vite-node": "^3.0.8", + "prettier-plugin-packagejson": "^2.5.15", + "prettier-plugin-sh": "^0.17.4", + "semver": "^7.7.2", + "syncpack": "^13.0.4", + "type-fest": "^4.41.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.33.1", + "vite": "^6.3.5", + "vite-node": "^3.2.1", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.0.8" + "vitest": "^3.2.1" }, "devDependencies": { "@types/eslint": "^9.6.1", "@types/eslint-config-prettier": "^6.11.3", - "@types/node": "^22.13.10", - "@types/semver": "^7.5.8" + "@types/node": "^22.15.29", + "@types/semver": "^7.7.0" }, "engines": { "node": ">=22" - }, - "pnpm": { - "overrides": { - "syncpack>@effect/schema": "npm:effect@^3.13.11" - } } } diff --git a/scripts/installPackage.ts b/scripts/installPackage.ts index 37c7224..204b524 100644 --- a/scripts/installPackage.ts +++ b/scripts/installPackage.ts @@ -37,6 +37,7 @@ process.env.NODE_ENV = "production"; const installPath = path.resolve(XDG_DATA_HOME, pkg.name); await rm(installPath, { recursive: true, force: true }); const $$ = $({ stdio: "inherit", verbose: "full", cwd: tempPath }); +await $$`pnpm install`; await $$`pnpm deploy --filter=${packageName} --prod ${installPath}`; await $$`npm uninstall --global ${packageName}`; await $$`npm install --global ${installPath}`; diff --git a/scripts/push.ts b/scripts/push.ts new file mode 100644 index 0000000..4378109 --- /dev/null +++ b/scripts/push.ts @@ -0,0 +1,29 @@ +import fs from "node:fs"; + +import git from "isomorphic-git"; +import http from "isomorphic-git/http/node"; + +import { projectRoot } from "@/scripts/project.js"; + +const currentBranch = await git.currentBranch({ fs, dir: projectRoot, fullname: false }); +if (!currentBranch) throw new Error("Failed to determine current branch"); + +const remote = (await git.listRemotes({ fs, dir: projectRoot })).at(0); +if (remote === undefined) { + throw new Error("Git remote not found"); +} +const token = process.env.GIT_REMOTE_TOKEN; +if (!token) throw new Error("GIT_REMOTE_TOKEN environment variable is not set"); + +await git.push({ + fs, + http, + dir: projectRoot, + remote: remote.remote, + ref: currentBranch, + force: true, + onAuth: () => ({ + username: "git", + password: token, + }), +}); diff --git a/setup/configs/base/workspace.ts b/setup/configs/base/workspace.ts index 8c99b1a..62c6235 100644 --- a/setup/configs/base/workspace.ts +++ b/setup/configs/base/workspace.ts @@ -7,7 +7,12 @@ export interface BaseWorkspaceConfigs { } export const createBaseWorkspaceConfigs = async (): Promise => { - const dependencies = await getNpmLatestDependencies(["cspell", "prettier", "prettier-plugin-packagejson"]); + const dependencies = await getNpmLatestDependencies([ + "cspell", + "prettier", + "prettier-plugin-packagejson", + "prettier-plugin-sh", + ]); return { "package.json": JSON.stringify({ private: true, diff --git a/setup/configs/csharp/automation.ts b/setup/configs/csharp/automation.ts index 6fa65bb..dedc0fa 100644 --- a/setup/configs/csharp/automation.ts +++ b/setup/configs/csharp/automation.ts @@ -41,7 +41,7 @@ export const createCSharpAutomationConfigs = async (): Promise => { const templates = await loadTemplates("csharp", [ + ".config/csharpier/.csharpierignore", ".config/csharpier/.csharpierrc.json", ".config/cspell/cspell.json", ".config/dotnet/.globalconfig", @@ -48,7 +50,7 @@ export const createCSharpDotConfigs = async (baseConfig: BaseConfigs): Promise { @@ -61,6 +63,7 @@ export const createCSharpDotConfigs = async (baseConfig: BaseConfigs): Promise=${nodeVersion}`, + }, }), ), "tsconfig.json": templates["tsconfig.json"], diff --git a/setup/package.json b/setup/package.json index 041b52d..186e967 100644 --- a/setup/package.json +++ b/setup/package.json @@ -13,30 +13,29 @@ "create-devcontainer": "./index.js" }, "dependencies": { - "@commander-js/extra-typings": "^13.1.0", + "@commander-js/extra-typings": "^14.0.0", "@prettier/plugin-xml": "^3.4.1", - "commander": "~13.1.0", - "cspell-lib": "^8.17.5", - "dedent": "^1.5.3", + "commander": "~14.0.0", + "cspell-lib": "^9.0.2", + "dedent": "^1.6.0", "default-composer": "^0.6.0", - "fast-xml-parser": "^5.0.9", + "fast-xml-parser": "^5.2.3", "jsonc-parser": "^3.3.1", "lodash-es": "^4.17.21", - "node-fetch": "^3.3.2", "oci-registry-client": "^0.2.0", "pacote": "^21.0.0", "prettier": "^3.5.3", "prettier-plugin-ini": "^1.3.0", - "prettier-plugin-packagejson": "^2.5.10", - "semver": "^7.7.1", - "type-fest": "^4.37.0", + "prettier-plugin-packagejson": "^2.5.15", + "semver": "^7.7.2", + "type-fest": "^4.41.0", "write-file-atomic": "^6.0.0" }, "devDependencies": { "@types/lodash-es": "^4.17.12", - "@types/node": "^22.13.10", + "@types/node": "^22.15.29", "@types/pacote": "^11.1.8", - "@types/semver": "^7.5.8", + "@types/semver": "^7.7.0", "@types/write-file-atomic": "^4.0.3" }, "engines": { diff --git a/setup/templates/base/.config/git/ignore b/setup/templates/base/.config/git/ignore index e90169c..d1c0ab2 100644 --- a/setup/templates/base/.config/git/ignore +++ b/setup/templates/base/.config/git/ignore @@ -4,3 +4,5 @@ _* !**/.devcontainer/** !.config/ !**/.config/** + +node_modules/ diff --git a/setup/templates/base/.config/prettier/.prettierrc.json b/setup/templates/base/.config/prettier/.prettierrc.json index 0cbfa6d..30a39f7 100644 --- a/setup/templates/base/.config/prettier/.prettierrc.json +++ b/setup/templates/base/.config/prettier/.prettierrc.json @@ -1,4 +1,4 @@ { "printWidth": 120, - "plugins": ["prettier-plugin-packagejson"] + "plugins": ["prettier-plugin-packagejson", "prettier-plugin-sh"] } diff --git a/setup/templates/base/.devcontainer/devcontainer.json b/setup/templates/base/.devcontainer/devcontainer.json index 2366f85..097a039 100644 --- a/setup/templates/base/.devcontainer/devcontainer.json +++ b/setup/templates/base/.devcontainer/devcontainer.json @@ -21,9 +21,6 @@ }, "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", - "[dockerfile]": { - "editor.defaultFormatter": "ms-azuretools.vscode-docker" - }, "cSpell.autoFormatConfigFile": true, "cSpell.checkOnlyEnabledFileTypes": false } diff --git a/setup/templates/csharp/.config/csharpier/.csharpierignore b/setup/templates/csharp/.config/csharpier/.csharpierignore new file mode 100644 index 0000000..51045e2 --- /dev/null +++ b/setup/templates/csharp/.config/csharpier/.csharpierignore @@ -0,0 +1,2 @@ +**/* +!**/*.cs diff --git a/setup/templates/csharp/.config/cspell/cspell.json b/setup/templates/csharp/.config/cspell/cspell.json index 6118f82..06dbff6 100644 --- a/setup/templates/csharp/.config/cspell/cspell.json +++ b/setup/templates/csharp/.config/cspell/cspell.json @@ -1,3 +1,3 @@ { - "words": ["csharpierrc", "globalconfig", "msbuild"] + "words": ["csharpierignore", "csharpierrc", "globalconfig", "msbuild"] } diff --git a/setup/templates/csharp/.config/dotnet/tools.json b/setup/templates/csharp/.config/dotnet/tools.json index 7aaaf4a..5d702d2 100644 --- a/setup/templates/csharp/.config/dotnet/tools.json +++ b/setup/templates/csharp/.config/dotnet/tools.json @@ -3,8 +3,8 @@ "isRoot": true, "tools": { "csharpier": { - "version": "0.28.2", - "commands": ["dotnet-csharpier"], + "version": "1.0.0", + "commands": ["csharpier"], "rollForward": false } } diff --git a/setup/templates/csharp/.devcontainer/dot-config.json b/setup/templates/csharp/.devcontainer/dot-config.json index da6db67..c6a2874 100644 --- a/setup/templates/csharp/.devcontainer/dot-config.json +++ b/setup/templates/csharp/.devcontainer/dot-config.json @@ -1,6 +1,7 @@ { "csharpier": { - ".csharpierrc.json": ".csharpierrc.json" + ".csharpierrc.json": ".csharpierrc.json", + ".csharpierignore": ".csharpierignore" }, "dotnet": { "tools.json": ".config/dotnet-tools.json" diff --git a/setup/templates/csharp/Automation/Tasks/CSharpier.cs b/setup/templates/csharp/Automation/Tasks/CSharpier.cs index cbbfb96..b94dffc 100644 --- a/setup/templates/csharp/Automation/Tasks/CSharpier.cs +++ b/setup/templates/csharp/Automation/Tasks/CSharpier.cs @@ -7,7 +7,7 @@ public class CSharpierCheck : FrostingTask { public override void Run(Context context) { - context.DotNetTool($"csharpier {Context.ProjectRoot} --check"); + context.DotNetTool($"csharpier check {Context.ProjectRoot}"); } } @@ -15,6 +15,6 @@ public class CSharpierFormat : FrostingTask { public override void Run(Context context) { - context.DotNetTool($"csharpier {Context.ProjectRoot}"); + context.DotNetTool($"csharpier format {Context.ProjectRoot}"); } } diff --git a/setup/templates/typescript/package.json b/setup/templates/typescript/package.json index 3ff794a..44f6bf5 100644 --- a/setup/templates/typescript/package.json +++ b/setup/templates/typescript/package.json @@ -2,30 +2,33 @@ "private": true, "type": "module", "dependencies": { - "@commander-js/extra-typings": "^13.1.0", - "@eslint/js": "^9.22.0", - "@tsconfig/node22": "^22.0.0", - "commander": "~13.1.0", - "cspell": "^8.17.5", - "eslint": "^9.22.0", - "eslint-config-prettier": "^10.1.1", + "@commander-js/extra-typings": "^14.0.0", + "@eslint/js": "^9.28.0", + "@tsconfig/node22": "^22.0.2", + "commander": "~14.0.0", + "cspell": "^9.0.2", + "eslint": "^9.28.0", + "eslint-config-prettier": "^10.1.5", "eslint-flat-config-gitignore": "^3.0.0", - "execa": "^9.5.2", - "glob": "^11.0.1", - "globals": "^16.0.0", + "execa": "^9.6.0", + "glob": "^11.0.2", + "globals": "^16.2.0", "jiti": "^2.4.2", "prettier": "^3.5.3", - "prettier-plugin-packagejson": "^2.5.10", - "syncpack": "^13.0.3", - "typescript": "~5.8.2", - "typescript-eslint": "^8.26.1", - "vite": "^6.2.2", - "vite-node": "^3.0.8", + "prettier-plugin-packagejson": "^2.5.15", + "syncpack": "^13.0.4", + "typescript": "~5.8.3", + "typescript-eslint": "^8.33.1", + "vite": "^6.3.5", + "vite-node": "^3.2.1", "vite-tsconfig-paths": "^5.1.4" }, "devDependencies": { "@types/eslint": "^9.6.1", "@types/eslint-config-prettier": "^6.11.3", - "@types/node": "^22.13.10" + "@types/node": "^22.15.29" + }, + "engines": { + "node": ">=22" } } diff --git a/setup/versions/dotnet.ts b/setup/versions/dotnet.ts index f1d576d..ecebcc5 100644 --- a/setup/versions/dotnet.ts +++ b/setup/versions/dotnet.ts @@ -1,4 +1,3 @@ -import fetch from "node-fetch"; import semver from "semver"; export const getDotNetCoreReleaseIndex = async () => { diff --git a/setup/versions/node.ts b/setup/versions/node.ts index cc6a452..b8dd317 100644 --- a/setup/versions/node.ts +++ b/setup/versions/node.ts @@ -1,4 +1,3 @@ -import fetch from "node-fetch"; import semver from "semver"; export const getNodeLtsVersions = async (): Promise => { diff --git a/setup/versions/nuget.ts b/setup/versions/nuget.ts index 6be3864..80dd607 100644 --- a/setup/versions/nuget.ts +++ b/setup/versions/nuget.ts @@ -1,4 +1,3 @@ -import fetch from "node-fetch"; import semver from "semver"; interface Endpoints {