From ba7cf0da4c548a99fb8ef4d28237ca6bd66467b2 Mon Sep 17 00:00:00 2001 From: milesj Date: Sat, 28 Oct 2023 06:50:34 +0000 Subject: [PATCH] deploy: d23bba6c16a9ec3dd850b0af6fc36cf309f6129b --- 404.html | 8 ++--- api.html | 8 ++--- api/report.html | 8 ++--- api/report/function/formatDuration.html | 8 ++--- api/report/function/formatTime.html | 8 ++--- api/report/function/getDurationInMillis.html | 8 ++--- api/report/function/getIconForStatus.html | 8 ++--- api/report/function/hasFailed.html | 8 ++--- api/report/function/hasPassed.html | 8 ++--- api/report/function/isFlaky.html | 8 ++--- api/report/function/isSlow.html | 8 ++--- api/report/function/prepareReportActions.html | 8 ++--- api/report/function/sortReport.html | 8 ++--- api/report/interface/PreparedAction.html | 8 ++--- api/runtime.html | 8 ++--- api/runtime/function/getContext.html | 8 ++--- api/runtime/interface/RuntimeContext.html | 8 ++--- api/types.html | 8 ++--- api/types/interface/Action.html | 8 ++--- api/types/interface/ActionContext.html | 8 ++--- .../interface/ActionNodeInstallDeps.html | 8 ++--- .../ActionNodeInstallProjectDeps.html | 8 ++--- api/types/interface/ActionNodeRunTask.html | 8 ++--- api/types/interface/ActionNodeSetupTool.html | 8 ++--- .../interface/ActionNodeSyncProject.html | 8 ++--- .../interface/ActionNodeSyncWorkspace.html | 8 ++--- api/types/interface/Attempt.html | 8 ++--- api/types/interface/BinConfig.html | 8 ++--- api/types/interface/CodeownersConfig.html | 8 ++--- api/types/interface/ConstraintsConfig.html | 8 ++--- api/types/interface/DenoConfig.html | 8 ++--- api/types/interface/DependencyConfig.html | 8 ++--- api/types/interface/Duration.html | 8 ++--- api/types/interface/EventActionFinished.html | 8 ++--- api/types/interface/EventActionStarted.html | 8 ++--- .../interface/EventDependenciesInstalled.html | 8 ++--- .../EventDependenciesInstalling.html | 8 ++--- api/types/interface/EventPipelineAborted.html | 8 ++--- .../interface/EventPipelineFinished.html | 8 ++--- api/types/interface/EventPipelineStarted.html | 8 ++--- api/types/interface/EventProjectSynced.html | 8 ++--- api/types/interface/EventProjectSyncing.html | 8 ++--- .../interface/EventTargetOutputArchived.html | 8 ++--- .../interface/EventTargetOutputArchiving.html | 8 ++--- .../EventTargetOutputCacheCheck.html | 8 ++--- .../interface/EventTargetOutputHydrated.html | 8 ++--- .../interface/EventTargetOutputHydrating.html | 8 ++--- api/types/interface/EventTargetRan.html | 8 ++--- api/types/interface/EventTargetRunning.html | 8 ++--- api/types/interface/EventToolInstalled.html | 8 ++--- api/types/interface/EventToolInstalling.html | 8 ++--- api/types/interface/EventWorkspaceSynced.html | 8 ++--- api/types/interface/ExperimentsConfig.html | 8 ++--- api/types/interface/FileGroup.html | 8 ++--- api/types/interface/GeneratorConfig.html | 8 ++--- api/types/interface/HasherConfig.html | 8 ++--- api/types/interface/InheritedTasksConfig.html | 8 ++--- api/types/interface/NodeConfig.html | 8 ++--- api/types/interface/NotifierConfig.html | 8 ++--- api/types/interface/NpmConfig.html | 8 ++--- api/types/interface/OwnersConfig.html | 8 ++--- api/types/interface/PartialBinConfig.html | 8 ++--- .../interface/PartialCodeownersConfig.html | 8 ++--- .../interface/PartialConstraintsConfig.html | 8 ++--- api/types/interface/PartialDenoConfig.html | 8 ++--- .../interface/PartialDependencyConfig.html | 8 ++--- .../interface/PartialExperimentsConfig.html | 8 ++--- .../interface/PartialGeneratorConfig.html | 8 ++--- api/types/interface/PartialHasherConfig.html | 8 ++--- .../PartialInheritedTasksConfig.html | 8 ++--- api/types/interface/PartialNodeConfig.html | 8 ++--- .../interface/PartialNotifierConfig.html | 8 ++--- api/types/interface/PartialNpmConfig.html | 8 ++--- api/types/interface/PartialOwnersConfig.html | 8 ++--- api/types/interface/PartialPnpmConfig.html | 8 ++--- api/types/interface/PartialProjectConfig.html | 8 ++--- .../PartialProjectMetadataConfig.html | 8 ++--- ...rtialProjectToolchainCommonToolConfig.html | 8 ++--- .../PartialProjectToolchainConfig.html | 8 ++--- ...rtialProjectToolchainTypeScriptConfig.html | 8 ++--- .../PartialProjectWorkspaceConfig.html | 8 ++--- ...lProjectWorkspaceInheritedTasksConfig.html | 8 ++--- api/types/interface/PartialRunnerConfig.html | 8 ++--- api/types/interface/PartialRustConfig.html | 8 ++--- api/types/interface/PartialTaskConfig.html | 8 ++--- .../interface/PartialTaskOptionsConfig.html | 8 ++--- .../interface/PartialTemplateConfig.html | 8 ++--- .../PartialTemplateFrontmatterConfig.html | 8 ++--- .../PartialTemplateVariableBoolSetting.html | 8 ++--- .../PartialTemplateVariableEnumSetting.html | 8 ++--- ...artialTemplateVariableEnumValueConfig.html | 8 ++--- .../PartialTemplateVariableNumberSetting.html | 8 ++--- .../PartialTemplateVariableStringSetting.html | 8 ++--- .../interface/PartialToolchainConfig.html | 8 ++--- .../interface/PartialTypeScriptConfig.html | 8 ++--- api/types/interface/PartialVcsConfig.html | 8 ++--- .../interface/PartialWorkspaceConfig.html | 8 ++--- .../PartialWorkspaceProjectsConfig.html | 8 ++--- api/types/interface/PartialYarnConfig.html | 8 ++--- api/types/interface/PnpmConfig.html | 8 ++--- api/types/interface/Project.html | 8 ++--- api/types/interface/ProjectConfig.html | 8 ++--- .../interface/ProjectMetadataConfig.html | 8 ++--- .../ProjectToolchainCommonToolConfig.html | 8 ++--- .../interface/ProjectToolchainConfig.html | 8 ++--- .../ProjectToolchainTypeScriptConfig.html | 8 ++--- .../interface/ProjectWorkspaceConfig.html | 8 ++--- .../ProjectWorkspaceInheritedTasksConfig.html | 8 ++--- api/types/interface/ProviderEnvironment.html | 8 ++--- api/types/interface/RunReport.html | 8 ++--- api/types/interface/RunnerConfig.html | 8 ++--- api/types/interface/Runtime.html | 8 ++--- api/types/interface/RustConfig.html | 8 ++--- api/types/interface/TargetState.html | 8 ++--- api/types/interface/Task.html | 8 ++--- api/types/interface/TaskConfig.html | 8 ++--- api/types/interface/TaskOptions.html | 8 ++--- api/types/interface/TaskOptionsConfig.html | 8 ++--- api/types/interface/TemplateConfig.html | 8 ++--- .../interface/TemplateFrontmatterConfig.html | 8 ++--- .../TemplateVariableBoolSetting.html | 8 ++--- .../TemplateVariableEnumSetting.html | 8 ++--- .../TemplateVariableEnumValueConfig.html | 8 ++--- .../TemplateVariableNumberSetting.html | 8 ++--- .../TemplateVariableStringSetting.html | 8 ++--- api/types/interface/ToolchainConfig.html | 8 ++--- api/types/interface/TypeScriptConfig.html | 8 ++--- api/types/interface/VcsConfig.html | 8 ++--- api/types/interface/WebhookPayload.html | 8 ++--- api/types/interface/WorkspaceConfig.html | 8 ++--- .../interface/WorkspaceProjectsConfig.html | 8 ++--- api/types/interface/YarnConfig.html | 8 ++--- assets/js/0631dc07.dee075ee.js | 1 + ...e4159.77186aad.js => 11ce4159.b550a723.js} | 2 +- ...b669c.414c293c.js => 1a2b669c.913a4366.js} | 2 +- ...5b877.b0f4ddb0.js => 3db5b877.3b12eeb7.js} | 2 +- ...c4dbb.1fc0f8ee.js => 44ac4dbb.77f78de9.js} | 2 +- assets/js/4e30d381.781f3272.js | 1 + ...0bfe1.ff27b86f.js => 69e0bfe1.a1de599c.js} | 2 +- assets/js/70c84758.d896a54e.js | 1 + ...9f4f1.59c6369a.js => 7599f4f1.3f0118af.js} | 2 +- ...726a8.0661fc84.js => 7d9726a8.39a61a2e.js} | 2 +- assets/js/814f3328.2c06b562.js | 1 - assets/js/814f3328.99320280.js | 1 + ...4e46b.818d4eb8.js => 8eb4e46b.4f34c13b.js} | 2 +- ...99a1c.62a505db.js => 92999a1c.16f4bb68.js} | 2 +- assets/js/a7023ddc.3d2c7ca4.js | 1 - assets/js/a7023ddc.702f72b0.js | 1 + ...675dd.e1a8dc10.js => b2b675dd.b55b70b3.js} | 2 +- assets/js/b2f554cd.2880aa5b.js | 1 - assets/js/b2f554cd.8f97ba59.js | 1 + ...ad3d7.fab4f39c.js => c19ad3d7.e2f08755.js} | 2 +- assets/js/c35cb5af.21cb0277.js | 1 + ...f2b5f.40a91c1a.js => cfdf2b5f.3cdd86e3.js} | 2 +- assets/js/dae127b6.38675e2f.js | 1 - assets/js/dae127b6.b1a9595f.js | 1 + assets/js/dd5bc5cd.00a97007.js | 1 + ...2c25f.a8a261eb.js => e8d2c25f.0572d27a.js} | 2 +- assets/js/f89b6242.3241ddce.js | 1 + assets/js/main.1cb82121.js | 2 ++ ...CENSE.txt => main.1cb82121.js.LICENSE.txt} | 0 assets/js/main.2df93d3d.js | 2 -- assets/js/runtime~main.4fe580fa.js | 1 - assets/js/runtime~main.74bb2e27.js | 1 + blog.html | 12 +++---- blog/2023-roadmap.html | 10 +++--- blog/archive.html | 10 +++--- blog/atom.xml | 25 +++++++++++++- blog/moon-v1.0.html | 10 +++--- blog/moon-v1.1.html | 10 +++--- blog/moon-v1.10.html | 10 +++--- blog/moon-v1.11.html | 10 +++--- blog/moon-v1.12.html | 10 +++--- blog/moon-v1.13.html | 10 +++--- blog/moon-v1.14.html | 10 +++--- blog/moon-v1.15.html | 10 +++--- blog/moon-v1.2.html | 10 +++--- blog/moon-v1.3.html | 10 +++--- blog/moon-v1.4.html | 10 +++--- blog/moon-v1.5.html | 10 +++--- blog/moon-v1.6.html | 10 +++--- blog/moon-v1.7.html | 10 +++--- blog/moon-v1.8.html | 10 +++--- blog/moon-v1.9.html | 10 +++--- blog/moonbase.html | 10 +++--- blog/page/2.html | 12 +++---- blog/page/3.html | 12 +++---- blog/page/4.html | 13 ++++---- blog/page/5.html | 14 ++++---- blog/page/6.html | 11 ++++--- blog/proto-v0.11.html | 10 +++--- blog/proto-v0.12.html | 10 +++--- blog/proto-v0.13.html | 10 +++--- blog/proto-v0.14.html | 10 +++--- blog/proto-v0.15.html | 10 +++--- blog/proto-v0.16.html | 10 +++--- blog/proto-v0.17.html | 10 +++--- blog/proto-v0.18.html | 10 +++--- blog/proto-v0.19.html | 10 +++--- blog/proto-v0.20.html | 12 +++---- blog/proto-v0.21.html | 33 +++++++++++++++++++ blog/proto-v0.3.html | 10 +++--- blog/proto-v0.4.html | 10 +++--- blog/proto-v0.5.html | 10 +++--- blog/proto-v0.6.html | 10 +++--- blog/proto-v0.7.html | 10 +++--- blog/proto-v0.8.html | 10 +++--- blog/proto-v0.9.html | 10 +++--- blog/proto.html | 10 +++--- blog/rss.xml | 21 +++++++++++- blog/tags.html | 10 +++--- blog/tags/action.html | 10 +++--- blog/tags/affected.html | 10 +++--- blog/tags/alias.html | 10 +++--- blog/tags/bin.html | 10 +++--- blog/tags/cache.html | 10 +++--- blog/tags/canary.html | 10 +++--- blog/tags/checksum.html | 10 +++--- blog/tags/ci.html | 10 +++--- blog/tags/clean.html | 10 +++--- blog/tags/code.html | 10 +++--- blog/tags/config.html | 10 +++--- blog/tags/constraints.html | 10 +++--- blog/tags/debug.html | 10 +++--- blog/tags/deno.html | 10 +++--- blog/tags/dep-graph.html | 10 +++--- blog/tags/dependency.html | 10 +++--- blog/tags/detect.html | 10 +++--- blog/tags/docker.html | 10 +++--- blog/tags/editors.html | 10 +++--- blog/tags/env-vars.html | 10 +++--- blog/tags/errors.html | 10 +++--- blog/tags/generator.html | 10 +++--- blog/tags/git.html | 10 +++--- blog/tags/github.html | 10 +++--- blog/tags/global.html | 10 +++--- blog/tags/globals.html | 10 +++--- blog/tags/go.html | 10 +++--- blog/tags/graph.html | 10 +++--- blog/tags/hash.html | 10 +++--- blog/tags/hasher.html | 10 +++--- blog/tags/hooks.html | 10 +++--- blog/tags/http.html | 10 +++--- blog/tags/hydration.html | 10 +++--- blog/tags/ignore.html | 10 +++--- blog/tags/index.html | 10 +++--- blog/tags/inheritance.html | 10 +++--- blog/tags/init.html | 10 +++--- blog/tags/lang.html | 10 +++--- blog/tags/language.html | 10 +++--- blog/tags/life.html | 10 +++--- blog/tags/linux.html | 25 ++++++++++++++ blog/tags/local.html | 10 +++--- blog/tags/log.html | 10 +++--- blog/tags/logging.html | 10 +++--- blog/tags/migrate.html | 10 +++--- blog/tags/monorepo.html | 10 +++--- blog/tags/moonbase.html | 10 +++--- blog/tags/musl.html | 25 ++++++++++++++ blog/tags/node.html | 10 +++--- blog/tags/notifier.html | 10 +++--- blog/tags/npm.html | 10 +++--- blog/tags/offline.html | 10 +++--- blog/tags/outdated.html | 10 +++--- blog/tags/owners.html | 10 +++--- blog/tags/ownership.html | 10 +++--- blog/tags/pin.html | 10 +++--- blog/tags/pipeline.html | 10 +++--- blog/tags/platform.html | 10 +++--- blog/tags/plugin.html | 10 +++--- blog/tags/plugins.html | 10 +++--- blog/tags/project-graph.html | 10 +++--- blog/tags/project.html | 10 +++--- blog/tags/projects.html | 10 +++--- blog/tags/proto.html | 14 ++++---- blog/tags/proto/page/2.html | 15 ++++----- blog/tags/proto/page/3.html | 13 ++++---- blog/tags/python.html | 10 +++--- blog/tags/qol.html | 10 +++--- blog/tags/quality.html | 10 +++--- blog/tags/query.html | 10 +++--- blog/tags/railway.html | 10 +++--- blog/tags/registry.html | 10 +++--- blog/tags/remote-cache.html | 10 +++--- blog/tags/rfc.html | 10 +++--- blog/tags/roadmap.html | 10 +++--- blog/tags/run.html | 10 +++--- blog/tags/runner.html | 10 +++--- blog/tags/rust.html | 10 +++--- blog/tags/schema.html | 10 +++--- blog/tags/shim.html | 10 +++--- blog/tags/shorthand.html | 10 +++--- blog/tags/source.html | 10 +++--- blog/tags/survey.html | 10 +++--- blog/tags/tag.html | 10 +++--- blog/tags/tags.html | 10 +++--- blog/tags/target.html | 10 +++--- blog/tags/task.html | 10 +++--- blog/tags/tasks.html | 10 +++--- blog/tags/tier.html | 10 +++--- blog/tags/tokens.html | 10 +++--- blog/tags/toml.html | 10 +++--- blog/tags/tool.html | 10 +++--- blog/tags/toolchain.html | 10 +++--- blog/tags/typescript.html | 10 +++--- blog/tags/vcs.html | 10 +++--- blog/tags/version.html | 10 +++--- blog/tags/vscode.html | 10 +++--- blog/tags/wasm.html | 10 +++--- blog/typescript-monorepo.html | 10 +++--- blog/v0.13.html | 10 +++--- blog/v0.14.html | 10 +++--- blog/v0.15.html | 10 +++--- blog/v0.16.html | 10 +++--- blog/v0.17.html | 10 +++--- blog/v0.18.html | 10 +++--- blog/v0.19.html | 10 +++--- blog/v0.20.html | 10 +++--- blog/v0.21.html | 10 +++--- blog/v0.22.html | 10 +++--- blog/v0.23.html | 10 +++--- blog/v0.24.html | 10 +++--- blog/v0.25.html | 10 +++--- blog/v0.26.html | 10 +++--- blog/vscode-extension.html | 10 +++--- docs.html | 8 ++--- docs/cheat-sheet.html | 8 ++--- docs/commands.html | 8 ++--- docs/commands/action-graph.html | 8 ++--- docs/commands/bin.html | 8 ++--- docs/commands/check.html | 8 ++--- docs/commands/ci.html | 8 ++--- docs/commands/clean.html | 8 ++--- docs/commands/completions.html | 8 ++--- docs/commands/docker.html | 8 ++--- docs/commands/docker/prune.html | 8 ++--- docs/commands/docker/scaffold.html | 8 ++--- docs/commands/docker/setup.html | 8 ++--- docs/commands/generate.html | 8 ++--- docs/commands/init.html | 8 ++--- docs/commands/migrate.html | 8 ++--- docs/commands/migrate/from-package-json.html | 8 ++--- docs/commands/migrate/from-turborepo.html | 8 ++--- docs/commands/overview.html | 8 ++--- docs/commands/project-graph.html | 8 ++--- docs/commands/project.html | 8 ++--- docs/commands/query.html | 8 ++--- docs/commands/query/hash-diff.html | 8 ++--- docs/commands/query/hash.html | 8 ++--- docs/commands/query/projects.html | 8 ++--- docs/commands/query/tasks.html | 8 ++--- docs/commands/query/touched-files.html | 8 ++--- docs/commands/run.html | 8 ++--- docs/commands/setup.html | 8 ++--- docs/commands/sync.html | 8 ++--- docs/commands/sync/codeowners.html | 8 ++--- docs/commands/sync/hooks.html | 8 ++--- docs/commands/sync/projects.html | 8 ++--- docs/commands/task.html | 8 ++--- docs/commands/teardown.html | 8 ++--- docs/commands/upgrade.html | 8 ++--- docs/comparison.html | 8 ++--- docs/concepts.html | 8 ++--- docs/concepts/cache.html | 8 ++--- docs/concepts/file-group.html | 8 ++--- docs/concepts/file-pattern.html | 8 ++--- docs/concepts/project.html | 8 ++--- docs/concepts/query-lang.html | 8 ++--- docs/concepts/target.html | 8 ++--- docs/concepts/task-inheritance.html | 8 ++--- docs/concepts/task.html | 8 ++--- docs/concepts/token.html | 8 ++--- docs/concepts/toolchain.html | 8 ++--- docs/concepts/workspace.html | 8 ++--- docs/config.html | 8 ++--- docs/config/project.html | 8 ++--- docs/config/tasks.html | 8 ++--- docs/config/template.html | 8 ++--- docs/config/toolchain.html | 8 ++--- docs/config/workspace.html | 8 ++--- docs/create-project.html | 8 ++--- docs/create-task.html | 8 ++--- docs/editors.html | 8 ++--- docs/editors/vscode.html | 8 ++--- docs/faq.html | 8 ++--- docs/guides/ci.html | 8 ++--- docs/guides/codegen.html | 8 ++--- docs/guides/codeowners.html | 8 ++--- docs/guides/debug-task.html | 8 ++--- docs/guides/docker.html | 8 ++--- docs/guides/examples/angular.html | 8 ++--- docs/guides/examples/astro.html | 8 ++--- docs/guides/examples/eslint.html | 8 ++--- docs/guides/examples/jest.html | 8 ++--- docs/guides/examples/nest.html | 8 ++--- docs/guides/examples/next.html | 8 ++--- docs/guides/examples/nuxt.html | 8 ++--- docs/guides/examples/packemon.html | 8 ++--- docs/guides/examples/prettier.html | 8 ++--- docs/guides/examples/react.html | 8 ++--- docs/guides/examples/remix.html | 8 ++--- docs/guides/examples/solid.html | 8 ++--- docs/guides/examples/storybook.html | 8 ++--- docs/guides/examples/sveltekit.html | 8 ++--- docs/guides/examples/typescript.html | 8 ++--- docs/guides/examples/vite.html | 8 ++--- docs/guides/examples/vue.html | 8 ++--- docs/guides/javascript/deno-handbook.html | 8 ++--- docs/guides/javascript/node-handbook.html | 8 ++--- docs/guides/javascript/typescript-eslint.html | 8 ++--- .../javascript/typescript-project-refs.html | 8 ++--- docs/guides/node/examples.html | 8 ++--- docs/guides/offline-mode.html | 8 ++--- docs/guides/open-source.html | 8 ++--- docs/guides/profile.html | 8 ++--- docs/guides/remote-cache.html | 8 ++--- docs/guides/root-project.html | 8 ++--- docs/guides/rust/handbook.html | 8 ++--- docs/guides/sharing-config.html | 8 ++--- docs/guides/vcs-hooks.html | 8 ++--- docs/guides/webhooks.html | 8 ++--- docs/how-it-works.html | 8 ++--- docs/how-it-works/action-graph.html | 8 ++--- docs/how-it-works/languages.html | 8 ++--- docs/how-it-works/project-graph.html | 8 ++--- docs/install.html | 8 ++--- docs/migrate-to-moon.html | 8 ++--- docs/proto.html | 8 ++--- docs/proto/commands/add-plugin.html | 8 ++--- docs/proto/commands/alias.html | 8 ++--- docs/proto/commands/bin.html | 8 ++--- docs/proto/commands/clean.html | 8 ++--- docs/proto/commands/completions.html | 8 ++--- docs/proto/commands/install-global.html | 8 ++--- docs/proto/commands/install.html | 8 ++--- docs/proto/commands/list-global.html | 8 ++--- docs/proto/commands/list-remote.html | 8 ++--- docs/proto/commands/list.html | 8 ++--- docs/proto/commands/outdated.html | 8 ++--- docs/proto/commands/pin.html | 8 ++--- docs/proto/commands/plugins.html | 8 ++--- docs/proto/commands/remove-plugin.html | 8 ++--- docs/proto/commands/run.html | 8 ++--- docs/proto/commands/setup.html | 8 ++--- docs/proto/commands/tools.html | 8 ++--- docs/proto/commands/unalias.html | 8 ++--- docs/proto/commands/uninstall-global.html | 8 ++--- docs/proto/commands/uninstall.html | 8 ++--- docs/proto/commands/upgrade.html | 8 ++--- docs/proto/commands/use.html | 8 ++--- docs/proto/config.html | 8 ++--- docs/proto/detection.html | 8 ++--- docs/proto/faq.html | 8 ++--- docs/proto/install.html | 8 ++--- docs/proto/plugins.html | 8 ++--- docs/proto/toml-plugin.html | 8 ++--- docs/proto/tools.html | 8 ++--- docs/proto/wasm-plugin.html | 8 ++--- docs/run-task.html | 8 ++--- docs/setup-toolchain.html | 8 ++--- docs/setup-workspace.html | 8 ++--- docs/tags.html | 8 ++--- docs/tags/code.html | 8 ++--- docs/tags/codegen.html | 8 ++--- docs/tags/codeowners.html | 8 ++--- docs/tags/generator.html | 8 ++--- docs/tags/git-hooks.html | 8 ++--- docs/tags/git.html | 8 ++--- docs/tags/hooks.html | 8 ++--- docs/tags/lang.html | 8 ++--- docs/tags/mql.html | 8 ++--- docs/tags/owners.html | 8 ++--- docs/tags/query.html | 8 ++--- docs/tags/scaffold.html | 8 ++--- docs/tags/solid.html | 8 ++--- docs/tags/solidjs.html | 8 ++--- docs/tags/template.html | 8 ++--- docs/tags/vcs.html | 8 ++--- docs/terminology.html | 8 ++--- index.html | 8 ++--- moon.html | 8 ++--- moonbase.html | 8 ++--- proto.html | 10 +++--- search.html | 8 ++--- sitemap.xml | 2 +- 485 files changed, 2113 insertions(+), 1982 deletions(-) create mode 100644 assets/js/0631dc07.dee075ee.js rename assets/js/{11ce4159.77186aad.js => 11ce4159.b550a723.js} (79%) rename assets/js/{1a2b669c.414c293c.js => 1a2b669c.913a4366.js} (80%) rename assets/js/{3db5b877.b0f4ddb0.js => 3db5b877.3b12eeb7.js} (91%) rename assets/js/{44ac4dbb.1fc0f8ee.js => 44ac4dbb.77f78de9.js} (77%) create mode 100644 assets/js/4e30d381.781f3272.js rename assets/js/{69e0bfe1.ff27b86f.js => 69e0bfe1.a1de599c.js} (79%) create mode 100644 assets/js/70c84758.d896a54e.js rename assets/js/{7599f4f1.59c6369a.js => 7599f4f1.3f0118af.js} (78%) rename assets/js/{7d9726a8.0661fc84.js => 7d9726a8.39a61a2e.js} (79%) delete mode 100644 assets/js/814f3328.2c06b562.js create mode 100644 assets/js/814f3328.99320280.js rename assets/js/{8eb4e46b.818d4eb8.js => 8eb4e46b.4f34c13b.js} (78%) rename assets/js/{92999a1c.62a505db.js => 92999a1c.16f4bb68.js} (79%) delete mode 100644 assets/js/a7023ddc.3d2c7ca4.js create mode 100644 assets/js/a7023ddc.702f72b0.js rename assets/js/{b2b675dd.e1a8dc10.js => b2b675dd.b55b70b3.js} (76%) delete mode 100644 assets/js/b2f554cd.2880aa5b.js create mode 100644 assets/js/b2f554cd.8f97ba59.js rename assets/js/{c19ad3d7.fab4f39c.js => c19ad3d7.e2f08755.js} (91%) create mode 100644 assets/js/c35cb5af.21cb0277.js rename assets/js/{cfdf2b5f.40a91c1a.js => cfdf2b5f.3cdd86e3.js} (70%) delete mode 100644 assets/js/dae127b6.38675e2f.js create mode 100644 assets/js/dae127b6.b1a9595f.js create mode 100644 assets/js/dd5bc5cd.00a97007.js rename assets/js/{e8d2c25f.a8a261eb.js => e8d2c25f.0572d27a.js} (91%) create mode 100644 assets/js/f89b6242.3241ddce.js create mode 100644 assets/js/main.1cb82121.js rename assets/js/{main.2df93d3d.js.LICENSE.txt => main.1cb82121.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.2df93d3d.js delete mode 100644 assets/js/runtime~main.4fe580fa.js create mode 100644 assets/js/runtime~main.74bb2e27.js create mode 100644 blog/proto-v0.21.html create mode 100644 blog/tags/linux.html create mode 100644 blog/tags/musl.html diff --git a/404.html b/404.html index 68475549bcb..6bfbe808c3a 100644 --- a/404.html +++ b/404.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/api.html b/api.html index 4d2a0df8771..6fb38b43faa 100644 --- a/api.html +++ b/api.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report.html b/api/report.html index 7877a7e37ad..90b5a3828e0 100644 --- a/api/report.html +++ b/api/report.html @@ -13,15 +13,15 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/formatDuration.html b/api/report/function/formatDuration.html index f811b114a50..75a7d94a6d8 100644 --- a/api/report/function/formatDuration.html +++ b/api/report/function/formatDuration.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/formatTime.html b/api/report/function/formatTime.html index 404c3c84bd1..fb01c209d2b 100644 --- a/api/report/function/formatTime.html +++ b/api/report/function/formatTime.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/getDurationInMillis.html b/api/report/function/getDurationInMillis.html index a7e19222458..ce26ebed05e 100644 --- a/api/report/function/getDurationInMillis.html +++ b/api/report/function/getDurationInMillis.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/getIconForStatus.html b/api/report/function/getIconForStatus.html index 13bb9740f05..d52d359e714 100644 --- a/api/report/function/getIconForStatus.html +++ b/api/report/function/getIconForStatus.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/hasFailed.html b/api/report/function/hasFailed.html index 7658059c192..7ad1ac9e0e6 100644 --- a/api/report/function/hasFailed.html +++ b/api/report/function/hasFailed.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/hasPassed.html b/api/report/function/hasPassed.html index 748bae86312..cb339006356 100644 --- a/api/report/function/hasPassed.html +++ b/api/report/function/hasPassed.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/isFlaky.html b/api/report/function/isFlaky.html index d97503fefff..680e2f0b3ee 100644 --- a/api/report/function/isFlaky.html +++ b/api/report/function/isFlaky.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/isSlow.html b/api/report/function/isSlow.html index 337a2e5c8a2..962ea38eb17 100644 --- a/api/report/function/isSlow.html +++ b/api/report/function/isSlow.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/prepareReportActions.html b/api/report/function/prepareReportActions.html index 3424cf5535d..16efd5a04da 100644 --- a/api/report/function/prepareReportActions.html +++ b/api/report/function/prepareReportActions.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/function/sortReport.html b/api/report/function/sortReport.html index 6616170b1fd..e7382c28eac 100644 --- a/api/report/function/sortReport.html +++ b/api/report/function/sortReport.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/report/interface/PreparedAction.html b/api/report/interface/PreparedAction.html index 653a3e0dbb0..eccfdb10f28 100644 --- a/api/report/interface/PreparedAction.html +++ b/api/report/interface/PreparedAction.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/runtime.html b/api/runtime.html index ca1b56e0450..ac358a5dfec 100644 --- a/api/runtime.html +++ b/api/runtime.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/runtime/function/getContext.html b/api/runtime/function/getContext.html index 7fa6a303b75..7bf65df0ed9 100644 --- a/api/runtime/function/getContext.html +++ b/api/runtime/function/getContext.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/api/runtime/interface/RuntimeContext.html b/api/runtime/interface/RuntimeContext.html index d29e848041e..10c8fbbe62b 100644 --- a/api/runtime/interface/RuntimeContext.html +++ b/api/runtime/interface/RuntimeContext.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types.html b/api/types.html index b06de3fea53..442a5fe251c 100644 --- a/api/types.html +++ b/api/types.html @@ -13,15 +13,15 @@ - - + +
Skip to main content

@moonrepo/types

build status npm version npm license

Reusable TypeScript types for moon projects, tasks, and configurations.

Index

Interfaces

Type Aliases

Type Aliases

ActionNode

ActionStatus

ActionStatus: cached-from-remote | cached | failed-and-abort | failed | invalid | passed | running | skipped

BinEntry

BinEntry: string | BinConfig

CodeownersOrderBy

CodeownersOrderBy: file-source | project-name

DependencyScope

DependencyScope: build | development | peer | production | root

DependencySource

DependencySource: explicit | implicit

EventType

EventType: action.finished | action.started | dependencies.installed | dependencies.installing | pipeline.aborted | pipeline.finished | pipeline.started | project.synced | project.syncing | target-output.archived | target-output.archiving | target-output.cache-check | target-output.hydrated | target-output.hydrating | target.ran | target.running | tool.installed | tool.installing | workspace.synced | workspace.syncing

HasherOptimization

HasherOptimization: accuracy | performance

HasherWalkStrategy

HasherWalkStrategy: glob | vcs

LanguageType

LanguageType: bash | batch | go | javascript | php | python | ruby | rust | typescript | unknown

NodePackageManager

NodePackageManager: npm | pnpm | yarn

NodeProjectAliasFormat

NodeProjectAliasFormat: name-and-scope | name-only

NodeVersionFormat

NodeVersionFormat: file | link | star | version | version-caret | version-tilde | workspace | workspace-caret | workspace-tilde

NodeVersionManager

NodeVersionManager: nodenv | nvm

Nullable

Nullable<T>: { [ K in keyof T ]: T[K] | null }

Type parameters

  • T

OwnersPaths

OwnersPaths: string[] | Record<string, string[]>

PartialBinEntry

PartialBinEntry: string | PartialBinConfig

PartialOwnersPaths

PartialOwnersPaths: string[] | Record<string, string[]>

PartialProjectDependsOn

PartialProjectDependsOn: string | PartialDependencyConfig

PartialTaskCommandArgs

PartialTaskCommandArgs: null | string | string[]

PartialTemplateVariable

PartialTemplateVariableEnumValue

PartialTemplateVariableEnumValue: string | PartialTemplateVariableEnumValueConfig

PartialWorkspaceProjects

PartialWorkspaceProjects: PartialWorkspaceProjectsConfig | string[] | Record<string, string>

PayloadActionFinished

PayloadActionFinished: WebhookPayload<action.finished, EventActionFinished>

PayloadActionStarted

PayloadActionStarted: WebhookPayload<action.started, EventActionStarted>

PayloadDependenciesInstalled

PayloadDependenciesInstalled: WebhookPayload<dependencies.installed, EventDependenciesInstalled>

PayloadDependenciesInstalling

PayloadDependenciesInstalling: WebhookPayload<dependencies.installing, EventDependenciesInstalling>

PayloadPipelineAborted

PayloadPipelineAborted: WebhookPayload<pipeline.aborted, EventPipelineAborted>

PayloadPipelineFinished

PayloadPipelineFinished: WebhookPayload<pipeline.finished, EventPipelineFinished>

PayloadPipelineStarted

PayloadPipelineStarted: WebhookPayload<pipeline.started, EventPipelineStarted>

PayloadProjectSynced

PayloadProjectSynced: WebhookPayload<project.synced, EventProjectSynced>

PayloadProjectSyncing

PayloadProjectSyncing: WebhookPayload<project.syncing, EventProjectSyncing>

PayloadTargetOutputArchived

PayloadTargetOutputArchived: WebhookPayload<target-output.archived, EventTargetOutputArchived>

PayloadTargetOutputArchiving

PayloadTargetOutputArchiving: WebhookPayload<target-output.archiving, EventTargetOutputArchiving>

PayloadTargetOutputCacheCheck

PayloadTargetOutputCacheCheck: WebhookPayload<target-output.cache-check, EventTargetOutputCacheCheck>

PayloadTargetOutputHydrated

PayloadTargetOutputHydrated: WebhookPayload<target-output.hydrated, EventTargetOutputHydrated>

PayloadTargetOutputHydrating

PayloadTargetOutputHydrating: WebhookPayload<target-output.hydrating, EventTargetOutputHydrating>

PayloadTargetRan

PayloadTargetRan: WebhookPayload<target.ran, EventTargetRan>

PayloadTargetRunning

PayloadTargetRunning: WebhookPayload<target.running, EventTargetRunning>

PayloadToolInstalled

PayloadToolInstalled: WebhookPayload<tool.installed, EventToolInstalled>

PayloadToolInstalling

PayloadToolInstalling: WebhookPayload<tool.installing, EventToolInstalling>

PayloadWorkspaceSynced

PayloadWorkspaceSynced: WebhookPayload<workspace.synced, EventWorkspaceSynced>

PayloadWorkspaceSyncing

PayloadWorkspaceSyncing: WebhookPayload<workspace.syncing, {}>

PlatformType

PlatformType: deno | node | rust | system | unknown

ProjectDependsOn

ProjectDependsOn: string | DependencyConfig

ProjectType

ProjectType: application | library | tool | unknown

TaskCommandArgs

TaskCommandArgs: null | string | string[]

TaskMergeStrategy

TaskMergeStrategy: append | prepend | replace

TaskOptionAffectedFiles

TaskOptionAffectedFiles: boolean | args | env

TaskOptionEnvFile

TaskOptionEnvFile: boolean | string

TaskOutputStyle

TaskOutputStyle: buffer | buffer-only-failure | hash | none | stream

TaskType

TaskType: build | run | test

TemplateVariable

TemplateVariableEnumValue

TemplateVariableEnumValue: string | TemplateVariableEnumValueConfig

VcsManager

VcsManager: git

VcsProvider

VcsProvider: bitbucket | github | gitlab | other

WorkspaceProjects

WorkspaceProjects: WorkspaceProjectsConfig | string[] | Record<string, string>
- - + + \ No newline at end of file diff --git a/api/types/interface/Action.html b/api/types/interface/Action.html index d182c6b8dc6..c896f5aee19 100644 --- a/api/types/interface/Action.html +++ b/api/types/interface/Action.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Action

Index

Properties

optionalallowFailure

allowFailure?: boolean

attempts

attempts: null | Attempt[]

createdAt

createdAt: string

duration

duration: null | Duration

error

error: null | string

finishedAt

finishedAt: null | string

flaky

flaky: boolean

label

label: null | string

nodeIndex

nodeIndex: number

startedAt

startedAt: null | string

status

status: ActionStatus
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionContext.html b/api/types/interface/ActionContext.html index 0fd33e2ab67..65f0748b277 100644 --- a/api/types/interface/ActionContext.html +++ b/api/types/interface/ActionContext.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

ActionContext

Index

Properties

affectedOnly

affectedOnly: boolean

initialTargets

initialTargets: string[]

passthroughArgs

passthroughArgs: string[]

primaryTargets

primaryTargets: string[]

profile

profile: null | cpu | heap

targetStates

targetStates: Record<string, TargetState>

touchedFiles

touchedFiles: string[]

workspaceRoot

workspaceRoot: string
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeInstallDeps.html b/api/types/interface/ActionNodeInstallDeps.html index 3ed91ee5470..7ebbccc732e 100644 --- a/api/types/interface/ActionNodeInstallDeps.html +++ b/api/types/interface/ActionNodeInstallDeps.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeInstallProjectDeps.html b/api/types/interface/ActionNodeInstallProjectDeps.html index ff01d154f84..781cd7f2ad0 100644 --- a/api/types/interface/ActionNodeInstallProjectDeps.html +++ b/api/types/interface/ActionNodeInstallProjectDeps.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeRunTask.html b/api/types/interface/ActionNodeRunTask.html index 32a238f241e..ff2174f732a 100644 --- a/api/types/interface/ActionNodeRunTask.html +++ b/api/types/interface/ActionNodeRunTask.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeSetupTool.html b/api/types/interface/ActionNodeSetupTool.html index c163e017a29..7398a0d240c 100644 --- a/api/types/interface/ActionNodeSetupTool.html +++ b/api/types/interface/ActionNodeSetupTool.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeSyncProject.html b/api/types/interface/ActionNodeSyncProject.html index 92bb466d002..ae1b447e166 100644 --- a/api/types/interface/ActionNodeSyncProject.html +++ b/api/types/interface/ActionNodeSyncProject.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeSyncWorkspace.html b/api/types/interface/ActionNodeSyncWorkspace.html index dee02b0f939..d76dfe6b25c 100644 --- a/api/types/interface/ActionNodeSyncWorkspace.html +++ b/api/types/interface/ActionNodeSyncWorkspace.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Attempt.html b/api/types/interface/Attempt.html index 76a723d453b..0992cca6517 100644 --- a/api/types/interface/Attempt.html +++ b/api/types/interface/Attempt.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/BinConfig.html b/api/types/interface/BinConfig.html index d87b66199c4..b27e38448d7 100644 --- a/api/types/interface/BinConfig.html +++ b/api/types/interface/BinConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/CodeownersConfig.html b/api/types/interface/CodeownersConfig.html index 21c1d4af441..45cf8c8e11a 100644 --- a/api/types/interface/CodeownersConfig.html +++ b/api/types/interface/CodeownersConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ConstraintsConfig.html b/api/types/interface/ConstraintsConfig.html index cfe077265d9..083a5b7b39e 100644 --- a/api/types/interface/ConstraintsConfig.html +++ b/api/types/interface/ConstraintsConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/DenoConfig.html b/api/types/interface/DenoConfig.html index cdcdba2eec1..cc4e57984a5 100644 --- a/api/types/interface/DenoConfig.html +++ b/api/types/interface/DenoConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/DependencyConfig.html b/api/types/interface/DependencyConfig.html index 1d5deb1d123..c16966b48b7 100644 --- a/api/types/interface/DependencyConfig.html +++ b/api/types/interface/DependencyConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Duration.html b/api/types/interface/Duration.html index 1dddd8cf12e..3e52b43bb21 100644 --- a/api/types/interface/Duration.html +++ b/api/types/interface/Duration.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventActionFinished.html b/api/types/interface/EventActionFinished.html index 705f9c83482..98159922c29 100644 --- a/api/types/interface/EventActionFinished.html +++ b/api/types/interface/EventActionFinished.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventActionStarted.html b/api/types/interface/EventActionStarted.html index 6ff78028916..34c91bea495 100644 --- a/api/types/interface/EventActionStarted.html +++ b/api/types/interface/EventActionStarted.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventDependenciesInstalled.html b/api/types/interface/EventDependenciesInstalled.html index d98789fd0f8..cc374573da4 100644 --- a/api/types/interface/EventDependenciesInstalled.html +++ b/api/types/interface/EventDependenciesInstalled.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventDependenciesInstalling.html b/api/types/interface/EventDependenciesInstalling.html index b41402a9b86..9b4980788f0 100644 --- a/api/types/interface/EventDependenciesInstalling.html +++ b/api/types/interface/EventDependenciesInstalling.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventPipelineAborted.html b/api/types/interface/EventPipelineAborted.html index 0674ac8c360..f42e07ac701 100644 --- a/api/types/interface/EventPipelineAborted.html +++ b/api/types/interface/EventPipelineAborted.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventPipelineFinished.html b/api/types/interface/EventPipelineFinished.html index 0c098da19bc..974121bbdd2 100644 --- a/api/types/interface/EventPipelineFinished.html +++ b/api/types/interface/EventPipelineFinished.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventPipelineStarted.html b/api/types/interface/EventPipelineStarted.html index b9ffb01ff58..fa41415ebe3 100644 --- a/api/types/interface/EventPipelineStarted.html +++ b/api/types/interface/EventPipelineStarted.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventProjectSynced.html b/api/types/interface/EventProjectSynced.html index b6ad3b07d4e..11230f58454 100644 --- a/api/types/interface/EventProjectSynced.html +++ b/api/types/interface/EventProjectSynced.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventProjectSyncing.html b/api/types/interface/EventProjectSyncing.html index 6eeabdaeb1a..fcd3e055b7e 100644 --- a/api/types/interface/EventProjectSyncing.html +++ b/api/types/interface/EventProjectSyncing.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputArchived.html b/api/types/interface/EventTargetOutputArchived.html index e4ab1bbc90f..6433a2dcef5 100644 --- a/api/types/interface/EventTargetOutputArchived.html +++ b/api/types/interface/EventTargetOutputArchived.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputArchiving.html b/api/types/interface/EventTargetOutputArchiving.html index 117e355c241..f6331bbe4be 100644 --- a/api/types/interface/EventTargetOutputArchiving.html +++ b/api/types/interface/EventTargetOutputArchiving.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputCacheCheck.html b/api/types/interface/EventTargetOutputCacheCheck.html index 722937e7ca7..72d1303d303 100644 --- a/api/types/interface/EventTargetOutputCacheCheck.html +++ b/api/types/interface/EventTargetOutputCacheCheck.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputHydrated.html b/api/types/interface/EventTargetOutputHydrated.html index dba31d6e9f2..97ce4dc7159 100644 --- a/api/types/interface/EventTargetOutputHydrated.html +++ b/api/types/interface/EventTargetOutputHydrated.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputHydrating.html b/api/types/interface/EventTargetOutputHydrating.html index 697645c2118..6ca281c85ff 100644 --- a/api/types/interface/EventTargetOutputHydrating.html +++ b/api/types/interface/EventTargetOutputHydrating.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventTargetRan.html b/api/types/interface/EventTargetRan.html index 424d9ce914e..6873574cbae 100644 --- a/api/types/interface/EventTargetRan.html +++ b/api/types/interface/EventTargetRan.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventTargetRunning.html b/api/types/interface/EventTargetRunning.html index 8a45486a463..0ded7c0af71 100644 --- a/api/types/interface/EventTargetRunning.html +++ b/api/types/interface/EventTargetRunning.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventToolInstalled.html b/api/types/interface/EventToolInstalled.html index a76100c57a8..069f3191ac3 100644 --- a/api/types/interface/EventToolInstalled.html +++ b/api/types/interface/EventToolInstalled.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventToolInstalling.html b/api/types/interface/EventToolInstalling.html index 13a27d04ab5..922037defd4 100644 --- a/api/types/interface/EventToolInstalling.html +++ b/api/types/interface/EventToolInstalling.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/EventWorkspaceSynced.html b/api/types/interface/EventWorkspaceSynced.html index f6cce0ced0b..c6ddb83c5bb 100644 --- a/api/types/interface/EventWorkspaceSynced.html +++ b/api/types/interface/EventWorkspaceSynced.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ExperimentsConfig.html b/api/types/interface/ExperimentsConfig.html index 24ea0c2583b..31038c1f9b2 100644 --- a/api/types/interface/ExperimentsConfig.html +++ b/api/types/interface/ExperimentsConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/FileGroup.html b/api/types/interface/FileGroup.html index fdbd1ebada8..e3fc4bb572f 100644 --- a/api/types/interface/FileGroup.html +++ b/api/types/interface/FileGroup.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/GeneratorConfig.html b/api/types/interface/GeneratorConfig.html index d653a4cd5b4..c24e8a5ded6 100644 --- a/api/types/interface/GeneratorConfig.html +++ b/api/types/interface/GeneratorConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/HasherConfig.html b/api/types/interface/HasherConfig.html index 61f8f229484..bf800279d43 100644 --- a/api/types/interface/HasherConfig.html +++ b/api/types/interface/HasherConfig.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ ```

ignoreMissingPatterns

ignoreMissingPatterns: string[]

ignorePatterns

ignorePatterns: string[]

optimization

optimization: HasherOptimization

walkStrategy

walkStrategy: HasherWalkStrategy

warnOnMissingInputs

warnOnMissingInputs: boolean = ```ts true ```
- - + + \ No newline at end of file diff --git a/api/types/interface/InheritedTasksConfig.html b/api/types/interface/InheritedTasksConfig.html index eea5924e2a0..ae07fdd1b29 100644 --- a/api/types/interface/InheritedTasksConfig.html +++ b/api/types/interface/InheritedTasksConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content

InheritedTasksConfig

Index

Properties

$schema

$schema: string = ```ts 'https://moonrepo.dev/schemas/tasks.json' ```

extends

extends: null | string

fileGroups

fileGroups: Record<string, string[]>

implicitDeps

implicitDeps: string[]

implicitInputs

implicitInputs: string[]

tasks

tasks: Record<string, TaskConfig>
- - + + \ No newline at end of file diff --git a/api/types/interface/NodeConfig.html b/api/types/interface/NodeConfig.html index e088350ef7c..51ed0e07668 100644 --- a/api/types/interface/NodeConfig.html +++ b/api/types/interface/NodeConfig.html @@ -13,8 +13,8 @@ - - + +
@@ -25,7 +25,7 @@ ```

dependencyVersionFormat

dependencyVersionFormat: NodeVersionFormat

inferTasksFromScripts

inferTasksFromScripts: boolean

npm

packageManager

packageManager: NodePackageManager

plugin

plugin: null | string

pnpm

pnpm: null | PnpmConfig

syncProjectWorkspaceDependencies

syncProjectWorkspaceDependencies: boolean = ```ts true ```

syncVersionManagerConfig

syncVersionManagerConfig: null | NodeVersionManager

version

version: null | string

yarn

yarn: null | YarnConfig
- - + + \ No newline at end of file diff --git a/api/types/interface/NotifierConfig.html b/api/types/interface/NotifierConfig.html index 60ecbd12256..7682bcba601 100644 --- a/api/types/interface/NotifierConfig.html +++ b/api/types/interface/NotifierConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/NpmConfig.html b/api/types/interface/NpmConfig.html index a87c5b63a38..e2b46c1660a 100644 --- a/api/types/interface/NpmConfig.html +++ b/api/types/interface/NpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/OwnersConfig.html b/api/types/interface/OwnersConfig.html index 1b4d70c8289..8d21b223a6d 100644 --- a/api/types/interface/OwnersConfig.html +++ b/api/types/interface/OwnersConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialBinConfig.html b/api/types/interface/PartialBinConfig.html index ef8d2267fc2..7f18733b702 100644 --- a/api/types/interface/PartialBinConfig.html +++ b/api/types/interface/PartialBinConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialCodeownersConfig.html b/api/types/interface/PartialCodeownersConfig.html index 0c54d6ef0fd..d3d0ca80d2b 100644 --- a/api/types/interface/PartialCodeownersConfig.html +++ b/api/types/interface/PartialCodeownersConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialConstraintsConfig.html b/api/types/interface/PartialConstraintsConfig.html index a57a8ed7181..40e982e8854 100644 --- a/api/types/interface/PartialConstraintsConfig.html +++ b/api/types/interface/PartialConstraintsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialDenoConfig.html b/api/types/interface/PartialDenoConfig.html index 32d4f30c72e..e5da4acb977 100644 --- a/api/types/interface/PartialDenoConfig.html +++ b/api/types/interface/PartialDenoConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialDependencyConfig.html b/api/types/interface/PartialDependencyConfig.html index a7ef3eb2241..9c437896f27 100644 --- a/api/types/interface/PartialDependencyConfig.html +++ b/api/types/interface/PartialDependencyConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialExperimentsConfig.html b/api/types/interface/PartialExperimentsConfig.html index 0756f0170ed..5a566f8e534 100644 --- a/api/types/interface/PartialExperimentsConfig.html +++ b/api/types/interface/PartialExperimentsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialGeneratorConfig.html b/api/types/interface/PartialGeneratorConfig.html index 8398538918e..fe766308fef 100644 --- a/api/types/interface/PartialGeneratorConfig.html +++ b/api/types/interface/PartialGeneratorConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialHasherConfig.html b/api/types/interface/PartialHasherConfig.html index 9f1c0107e53..610ad93aebf 100644 --- a/api/types/interface/PartialHasherConfig.html +++ b/api/types/interface/PartialHasherConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialHasherConfig

Index

Properties

optionalbatchSize

batchSize?: null | number = null | number

optionalignoreMissingPatterns

ignoreMissingPatterns?: null | string[]

optionalignorePatterns

ignorePatterns?: null | string[]

optionaloptimization

optimization?: null | HasherOptimization

optionalwalkStrategy

walkStrategy?: null | HasherWalkStrategy

optionalwarnOnMissingInputs

warnOnMissingInputs?: null | boolean = null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialInheritedTasksConfig.html b/api/types/interface/PartialInheritedTasksConfig.html index 26cb77afaae..aafa7a5d5b2 100644 --- a/api/types/interface/PartialInheritedTasksConfig.html +++ b/api/types/interface/PartialInheritedTasksConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialInheritedTasksConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionalextends

extends?: null | string

optionalfileGroups

fileGroups?: null | Record<string, string[]>

optionalimplicitDeps

implicitDeps?: null | string[]

optionalimplicitInputs

implicitInputs?: null | string[]

optionaltasks

tasks?: null | Record<string, PartialTaskConfig>
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialNodeConfig.html b/api/types/interface/PartialNodeConfig.html index 1057a720de9..b2b537d572b 100644 --- a/api/types/interface/PartialNodeConfig.html +++ b/api/types/interface/PartialNodeConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialNodeConfig

Index

Properties

optionaladdEnginesConstraint

addEnginesConstraint?: null | boolean = null | boolean

optionalaliasPackageNames

aliasPackageNames?: null | NodeProjectAliasFormat

optionalbinExecArgs

binExecArgs?: null | string[]

optionaldedupeOnLockfileChange

dedupeOnLockfileChange?: null | boolean = null | boolean

optionaldependencyVersionFormat

dependencyVersionFormat?: null | NodeVersionFormat

optionalinferTasksFromScripts

inferTasksFromScripts?: null | boolean

optionalnpm

npm?: null | PartialNpmConfig

optionalpackageManager

packageManager?: null | NodePackageManager

optionalplugin

plugin?: null | string

optionalpnpm

pnpm?: null | PartialPnpmConfig

optionalsyncProjectWorkspaceDependencies

syncProjectWorkspaceDependencies?: null | boolean = null | boolean

optionalsyncVersionManagerConfig

syncVersionManagerConfig?: null | NodeVersionManager

optionalversion

version?: null | string

optionalyarn

yarn?: null | PartialYarnConfig
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialNotifierConfig.html b/api/types/interface/PartialNotifierConfig.html index 317b90cf504..39a2e8f88ab 100644 --- a/api/types/interface/PartialNotifierConfig.html +++ b/api/types/interface/PartialNotifierConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialNpmConfig.html b/api/types/interface/PartialNpmConfig.html index c9bdff5eedc..8f49af238ba 100644 --- a/api/types/interface/PartialNpmConfig.html +++ b/api/types/interface/PartialNpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialOwnersConfig.html b/api/types/interface/PartialOwnersConfig.html index 0c3bb5394a1..1913f6ad55a 100644 --- a/api/types/interface/PartialOwnersConfig.html +++ b/api/types/interface/PartialOwnersConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialPnpmConfig.html b/api/types/interface/PartialPnpmConfig.html index 929abd227be..9d67fe83a11 100644 --- a/api/types/interface/PartialPnpmConfig.html +++ b/api/types/interface/PartialPnpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectConfig.html b/api/types/interface/PartialProjectConfig.html index 71b148b5acf..46406d8c5c8 100644 --- a/api/types/interface/PartialProjectConfig.html +++ b/api/types/interface/PartialProjectConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialProjectConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionaldependsOn

dependsOn?: null | PartialProjectDependsOn[]

optionalenv

env?: null | Record<string, string>

optionalfileGroups

fileGroups?: null | Record<string, string[]>

optionallanguage

language?: null | LanguageType

optionalowners

owners?: null | PartialOwnersConfig

optionalplatform

platform?: null | PlatformType

optionalproject

optionaltags

tags?: null | string[]

optionaltasks

tasks?: null | Record<string, PartialTaskConfig>

optionaltoolchain

optionaltype

type?: null | ProjectType

optionalworkspace

- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectMetadataConfig.html b/api/types/interface/PartialProjectMetadataConfig.html index 100a102dd34..2d41c618f9b 100644 --- a/api/types/interface/PartialProjectMetadataConfig.html +++ b/api/types/interface/PartialProjectMetadataConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectToolchainCommonToolConfig.html b/api/types/interface/PartialProjectToolchainCommonToolConfig.html index f3b01880c89..50ca14429aa 100644 --- a/api/types/interface/PartialProjectToolchainCommonToolConfig.html +++ b/api/types/interface/PartialProjectToolchainCommonToolConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectToolchainConfig.html b/api/types/interface/PartialProjectToolchainConfig.html index 7626f016e07..012fcc82db2 100644 --- a/api/types/interface/PartialProjectToolchainConfig.html +++ b/api/types/interface/PartialProjectToolchainConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectToolchainTypeScriptConfig.html b/api/types/interface/PartialProjectToolchainTypeScriptConfig.html index a5213586b81..3d8c5116e06 100644 --- a/api/types/interface/PartialProjectToolchainTypeScriptConfig.html +++ b/api/types/interface/PartialProjectToolchainTypeScriptConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialProjectToolchainTypeScriptConfig

Index

Properties

optionaldisabled

disabled?: null | boolean

optionalrouteOutDirToCache

routeOutDirToCache?: null | boolean

optionalsyncProjectReferences

syncProjectReferences?: null | boolean

optionalsyncProjectReferencesToPaths

syncProjectReferencesToPaths?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectWorkspaceConfig.html b/api/types/interface/PartialProjectWorkspaceConfig.html index 4344c917c4a..726ec6970a4 100644 --- a/api/types/interface/PartialProjectWorkspaceConfig.html +++ b/api/types/interface/PartialProjectWorkspaceConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html b/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html index 5ae4589aa10..410a94a6bc6 100644 --- a/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html +++ b/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialRunnerConfig.html b/api/types/interface/PartialRunnerConfig.html index 31695b47b1b..a40e44c7dbb 100644 --- a/api/types/interface/PartialRunnerConfig.html +++ b/api/types/interface/PartialRunnerConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialRunnerConfig

Index

Properties

optionalarchivableTargets

archivableTargets?: null | string[]

optionalcacheLifetime

cacheLifetime?: null | string = null | string

optionalinheritColorsForPipedTasks

inheritColorsForPipedTasks?: null | boolean = null | boolean

optionallogRunningCommand

logRunningCommand?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialRustConfig.html b/api/types/interface/PartialRustConfig.html index 93ec55a1e75..2d53b2d184c 100644 --- a/api/types/interface/PartialRustConfig.html +++ b/api/types/interface/PartialRustConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTaskConfig.html b/api/types/interface/PartialTaskConfig.html index 5b4894c80bd..a717dbbb5c4 100644 --- a/api/types/interface/PartialTaskConfig.html +++ b/api/types/interface/PartialTaskConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialTaskConfig

Index

Properties

optionalargs

optionalcommand

optionaldeps

deps?: null | string[]

optionalenv

env?: null | Record<string, string>

optionalextends

extends?: null | string

optionalinputs

inputs?: null | string[]

optionallocal

local?: null | boolean

optionaloptions

options?: null | PartialTaskOptionsConfig

optionaloutputs

outputs?: null | string[]

optionalplatform

platform?: null | PlatformType

optionaltype

type?: null | TaskType
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTaskOptionsConfig.html b/api/types/interface/PartialTaskOptionsConfig.html index f57661073c9..717651494f2 100644 --- a/api/types/interface/PartialTaskOptionsConfig.html +++ b/api/types/interface/PartialTaskOptionsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialTaskOptionsConfig

Index

Properties

optionalaffectedFiles

affectedFiles?: null | TaskOptionAffectedFiles

optionalallowFailure

allowFailure?: null | boolean

optionalcache

cache?: null | boolean

optionalenvFile

envFile?: null | TaskOptionEnvFile

optionalinteractive

interactive?: null | boolean

optionalmergeArgs

mergeArgs?: null | TaskMergeStrategy

optionalmergeDeps

mergeDeps?: null | TaskMergeStrategy

optionalmergeEnv

mergeEnv?: null | TaskMergeStrategy

optionalmergeInputs

mergeInputs?: null | TaskMergeStrategy

optionalmergeOutputs

mergeOutputs?: null | TaskMergeStrategy

optionaloutputStyle

outputStyle?: null | TaskOutputStyle

optionalpersistent

persistent?: null | boolean

optionalretryCount

retryCount?: null | number

optionalrunDepsInParallel

runDepsInParallel?: null | boolean

optionalrunFromWorkspaceRoot

runFromWorkspaceRoot?: null | boolean

optionalrunInCI

runInCI?: null | boolean

optionalshell

shell?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateConfig.html b/api/types/interface/PartialTemplateConfig.html index 365c0ea80e4..bddcfebd665 100644 --- a/api/types/interface/PartialTemplateConfig.html +++ b/api/types/interface/PartialTemplateConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateFrontmatterConfig.html b/api/types/interface/PartialTemplateFrontmatterConfig.html index 931f9cd02ec..70ee3a309b3 100644 --- a/api/types/interface/PartialTemplateFrontmatterConfig.html +++ b/api/types/interface/PartialTemplateFrontmatterConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableBoolSetting.html b/api/types/interface/PartialTemplateVariableBoolSetting.html index aadb0267959..cb064de1c4f 100644 --- a/api/types/interface/PartialTemplateVariableBoolSetting.html +++ b/api/types/interface/PartialTemplateVariableBoolSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableEnumSetting.html b/api/types/interface/PartialTemplateVariableEnumSetting.html index 9a0c3bc26e0..d80d5e5323e 100644 --- a/api/types/interface/PartialTemplateVariableEnumSetting.html +++ b/api/types/interface/PartialTemplateVariableEnumSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableEnumValueConfig.html b/api/types/interface/PartialTemplateVariableEnumValueConfig.html index bd45f2d9ad1..6cae93d5a44 100644 --- a/api/types/interface/PartialTemplateVariableEnumValueConfig.html +++ b/api/types/interface/PartialTemplateVariableEnumValueConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableNumberSetting.html b/api/types/interface/PartialTemplateVariableNumberSetting.html index 91f0de7107d..6ab009caf5f 100644 --- a/api/types/interface/PartialTemplateVariableNumberSetting.html +++ b/api/types/interface/PartialTemplateVariableNumberSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableStringSetting.html b/api/types/interface/PartialTemplateVariableStringSetting.html index c888c182055..8c6c85673aa 100644 --- a/api/types/interface/PartialTemplateVariableStringSetting.html +++ b/api/types/interface/PartialTemplateVariableStringSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialToolchainConfig.html b/api/types/interface/PartialToolchainConfig.html index 48976df6124..d1cf8b86c70 100644 --- a/api/types/interface/PartialToolchainConfig.html +++ b/api/types/interface/PartialToolchainConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialToolchainConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionaldeno

deno?: null | PartialDenoConfig

optionalextends

extends?: null | string

optionalnode

node?: null | PartialNodeConfig

optionalrust

rust?: null | PartialRustConfig

optionaltypescript

typescript?: null | PartialTypeScriptConfig
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTypeScriptConfig.html b/api/types/interface/PartialTypeScriptConfig.html index 88e51c8d47b..3229a2b0558 100644 --- a/api/types/interface/PartialTypeScriptConfig.html +++ b/api/types/interface/PartialTypeScriptConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialTypeScriptConfig

Index

Properties

optionalcreateMissingConfig

createMissingConfig?: null | boolean = null | boolean

optionalprojectConfigFileName

projectConfigFileName?: null | string = null | string

optionalrootConfigFileName

rootConfigFileName?: null | string = null | string

optionalrootOptionsConfigFileName

rootOptionsConfigFileName?: null | string = null | string

optionalrouteOutDirToCache

routeOutDirToCache?: null | boolean

optionalsyncProjectReferences

syncProjectReferences?: null | boolean = null | boolean

optionalsyncProjectReferencesToPaths

syncProjectReferencesToPaths?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialVcsConfig.html b/api/types/interface/PartialVcsConfig.html index aef52c71fa7..d7ddb19e6f7 100644 --- a/api/types/interface/PartialVcsConfig.html +++ b/api/types/interface/PartialVcsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialVcsConfig

Index

Properties

optionaldefaultBranch

defaultBranch?: null | string = null | string

optionalhooks

hooks?: null | Record<string, string[]>

optionalmanager

manager?: null | git

optionalprovider

provider?: null | VcsProvider

optionalremoteCandidates

remoteCandidates?: null | string[]

optionalsyncHooks

syncHooks?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialWorkspaceConfig.html b/api/types/interface/PartialWorkspaceConfig.html index ef955bb677f..c9c982a8a58 100644 --- a/api/types/interface/PartialWorkspaceConfig.html +++ b/api/types/interface/PartialWorkspaceConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialWorkspaceConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionalcodeowners

codeowners?: null | PartialCodeownersConfig

optionalconstraints

constraints?: null | PartialConstraintsConfig

optionalexperiments

experiments?: null | PartialExperimentsConfig

optionalextends

extends?: null | string

optionalgenerator

generator?: null | PartialGeneratorConfig

optionalhasher

hasher?: null | PartialHasherConfig

optionalnotifier

notifier?: null | PartialNotifierConfig

optionalprojects

projects?: null | PartialWorkspaceProjects

optionalrunner

runner?: null | PartialRunnerConfig

optionaltelemetry

telemetry?: null | boolean = null | boolean

optionalvcs

vcs?: null | PartialVcsConfig

optionalversionConstraint

versionConstraint?: null | string
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialWorkspaceProjectsConfig.html b/api/types/interface/PartialWorkspaceProjectsConfig.html index d0acd2d789a..d20187b8e94 100644 --- a/api/types/interface/PartialWorkspaceProjectsConfig.html +++ b/api/types/interface/PartialWorkspaceProjectsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialYarnConfig.html b/api/types/interface/PartialYarnConfig.html index 10b1bb07872..85e474c9583 100644 --- a/api/types/interface/PartialYarnConfig.html +++ b/api/types/interface/PartialYarnConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PnpmConfig.html b/api/types/interface/PnpmConfig.html index e0827ae9144..c66667fbf39 100644 --- a/api/types/interface/PnpmConfig.html +++ b/api/types/interface/PnpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Project.html b/api/types/interface/Project.html index 0a80324f04e..0fe26dee979 100644 --- a/api/types/interface/Project.html +++ b/api/types/interface/Project.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Project

Index

Properties

alias

alias: null | string

config

dependencies

dependencies: Record<string, DependencyConfig>

fileGroups

fileGroups: Record<string, FileGroup>

id

id: string

inherited

inherited: { config: InheritedTasksConfig; layers: Record<string, PartialInheritedTasksConfig>; order: string[] }

language

language: LanguageType

platform

platform: PlatformType

root

root: string

source

source: string

tasks

tasks: Record<string, Task>

type

- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectConfig.html b/api/types/interface/ProjectConfig.html index 74ba81b028e..0068f563553 100644 --- a/api/types/interface/ProjectConfig.html +++ b/api/types/interface/ProjectConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content

ProjectConfig

Index

Properties

$schema

$schema: string = ```ts 'https://moonrepo.dev/schemas/project.json' ```

dependsOn

dependsOn: ProjectDependsOn[]

env

env: Record<string, string>

fileGroups

fileGroups: Record<string, string[]>

language

language: LanguageType

owners

owners: OwnersConfig

platform

platform: null | PlatformType

project

project: null | ProjectMetadataConfig

tags

tags: string[]

tasks

tasks: Record<string, TaskConfig>

toolchain

type

workspace

- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectMetadataConfig.html b/api/types/interface/ProjectMetadataConfig.html index abdfe038cbd..bb712dc98df 100644 --- a/api/types/interface/ProjectMetadataConfig.html +++ b/api/types/interface/ProjectMetadataConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectToolchainCommonToolConfig.html b/api/types/interface/ProjectToolchainCommonToolConfig.html index 93efad94eab..a639b59a0a7 100644 --- a/api/types/interface/ProjectToolchainCommonToolConfig.html +++ b/api/types/interface/ProjectToolchainCommonToolConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectToolchainConfig.html b/api/types/interface/ProjectToolchainConfig.html index e57347d1396..5b971ccec37 100644 --- a/api/types/interface/ProjectToolchainConfig.html +++ b/api/types/interface/ProjectToolchainConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectToolchainTypeScriptConfig.html b/api/types/interface/ProjectToolchainTypeScriptConfig.html index 85d7f922d88..2a53a10517a 100644 --- a/api/types/interface/ProjectToolchainTypeScriptConfig.html +++ b/api/types/interface/ProjectToolchainTypeScriptConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectWorkspaceConfig.html b/api/types/interface/ProjectWorkspaceConfig.html index 1a133529a01..c3447ea8073 100644 --- a/api/types/interface/ProjectWorkspaceConfig.html +++ b/api/types/interface/ProjectWorkspaceConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html b/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html index 5fd34cb9093..fb485728179 100644 --- a/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html +++ b/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProviderEnvironment.html b/api/types/interface/ProviderEnvironment.html index 28cf3f2482e..9646afa13f7 100644 --- a/api/types/interface/ProviderEnvironment.html +++ b/api/types/interface/ProviderEnvironment.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/RunReport.html b/api/types/interface/RunReport.html index c67e8056737..9da8c73bb20 100644 --- a/api/types/interface/RunReport.html +++ b/api/types/interface/RunReport.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

RunReport

Index

Properties

actions

actions: Action[]

comparisonEstimate

comparisonEstimate: { duration: Duration; gain: null | Duration; loss: null | Duration; percent: number; tasks: Record<string, { count: number; total: Duration }> }

context

context: ActionContext

duration

duration: Duration

optionalestimatedSavings

estimatedSavings?: null | Duration

optionalprojectedDuration

projectedDuration?: Duration
- - + + \ No newline at end of file diff --git a/api/types/interface/RunnerConfig.html b/api/types/interface/RunnerConfig.html index ed14c5499a4..f87758070f3 100644 --- a/api/types/interface/RunnerConfig.html +++ b/api/types/interface/RunnerConfig.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ ```

inheritColorsForPipedTasks

inheritColorsForPipedTasks: boolean = ```ts true ```

logRunningCommand

logRunningCommand: boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/Runtime.html b/api/types/interface/Runtime.html index f929438d8d6..96b3cd94e3c 100644 --- a/api/types/interface/Runtime.html +++ b/api/types/interface/Runtime.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/RustConfig.html b/api/types/interface/RustConfig.html index c7f6a56d9a2..900e32426b7 100644 --- a/api/types/interface/RustConfig.html +++ b/api/types/interface/RustConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TargetState.html b/api/types/interface/TargetState.html index cc4989aee2e..b1b2e8ac15d 100644 --- a/api/types/interface/TargetState.html +++ b/api/types/interface/TargetState.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Task.html b/api/types/interface/Task.html index d16100a760b..0a490169c6f 100644 --- a/api/types/interface/Task.html +++ b/api/types/interface/Task.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Task

Index

Properties

args

args: string[]

command

command: string

deps

deps: string[]

env

env: Record<string, string>

id

id: string

inputFiles

inputFiles: string[]

inputGlobs

inputGlobs: string[]

inputVars

inputVars: string[]

inputs

inputs: string[]

options

options: TaskOptions

outputFiles

outputFiles: string[]

outputGlobs

outputGlobs: string[]

outputs

outputs: string[]

platform

platform: PlatformType

target

target: string

type

type: TaskType
- - + + \ No newline at end of file diff --git a/api/types/interface/TaskConfig.html b/api/types/interface/TaskConfig.html index a88fcdf7513..97899b6c832 100644 --- a/api/types/interface/TaskConfig.html +++ b/api/types/interface/TaskConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

TaskConfig

Index

Properties

args

command

deps

deps: string[]

env

env: Record<string, string>

extends

extends: null | string

inputs

inputs: null | string[]

local

local: null | boolean

options

outputs

outputs: null | string[]

platform

platform: PlatformType

type

type: null | TaskType
- - + + \ No newline at end of file diff --git a/api/types/interface/TaskOptions.html b/api/types/interface/TaskOptions.html index eca2cd2cce8..4946987040c 100644 --- a/api/types/interface/TaskOptions.html +++ b/api/types/interface/TaskOptions.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

TaskOptions

Index

Properties

affectedFiles

affectedFiles: boolean | args | env

cache

cache: boolean

envFile

envFile: null | string

mergeArgs

mergeDeps

mergeEnv

mergeInputs

mergeInputs: TaskMergeStrategy

mergeOutputs

mergeOutputs: TaskMergeStrategy

outputStyle

outputStyle: null | TaskOutputStyle

persistent

persistent: boolean

retryCount

retryCount: number

runDepsInParallel

runDepsInParallel: boolean

runFromWorkspaceRoot

runFromWorkspaceRoot: boolean

runInCI

runInCI: boolean

shell

shell: boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/TaskOptionsConfig.html b/api/types/interface/TaskOptionsConfig.html index 372bf558fa1..f909527ef56 100644 --- a/api/types/interface/TaskOptionsConfig.html +++ b/api/types/interface/TaskOptionsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

TaskOptionsConfig

Index

Properties

affectedFiles

affectedFiles: null | TaskOptionAffectedFiles

allowFailure

allowFailure: null | boolean

cache

cache: null | boolean

envFile

envFile: null | TaskOptionEnvFile

interactive

interactive: null | boolean

mergeArgs

mergeArgs: null | TaskMergeStrategy

mergeDeps

mergeDeps: null | TaskMergeStrategy

mergeEnv

mergeEnv: null | TaskMergeStrategy

mergeInputs

mergeInputs: null | TaskMergeStrategy

mergeOutputs

mergeOutputs: null | TaskMergeStrategy

outputStyle

outputStyle: null | TaskOutputStyle

persistent

persistent: null | boolean

retryCount

retryCount: null | number

runDepsInParallel

runDepsInParallel: null | boolean

runFromWorkspaceRoot

runFromWorkspaceRoot: null | boolean

runInCI

runInCI: null | boolean

shell

shell: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateConfig.html b/api/types/interface/TemplateConfig.html index dd73d1372d3..aa4879a9cf1 100644 --- a/api/types/interface/TemplateConfig.html +++ b/api/types/interface/TemplateConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateFrontmatterConfig.html b/api/types/interface/TemplateFrontmatterConfig.html index 5bebd9bead8..21a9f629aa5 100644 --- a/api/types/interface/TemplateFrontmatterConfig.html +++ b/api/types/interface/TemplateFrontmatterConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableBoolSetting.html b/api/types/interface/TemplateVariableBoolSetting.html index 72655bf79a9..81450db8033 100644 --- a/api/types/interface/TemplateVariableBoolSetting.html +++ b/api/types/interface/TemplateVariableBoolSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableEnumSetting.html b/api/types/interface/TemplateVariableEnumSetting.html index afb0a06a487..368d8a38086 100644 --- a/api/types/interface/TemplateVariableEnumSetting.html +++ b/api/types/interface/TemplateVariableEnumSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableEnumValueConfig.html b/api/types/interface/TemplateVariableEnumValueConfig.html index 6028214990a..e0dc9c0c3da 100644 --- a/api/types/interface/TemplateVariableEnumValueConfig.html +++ b/api/types/interface/TemplateVariableEnumValueConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableNumberSetting.html b/api/types/interface/TemplateVariableNumberSetting.html index 62e275a560a..bfc938d4904 100644 --- a/api/types/interface/TemplateVariableNumberSetting.html +++ b/api/types/interface/TemplateVariableNumberSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableStringSetting.html b/api/types/interface/TemplateVariableStringSetting.html index 2e107ee5d91..3082cf4f8ee 100644 --- a/api/types/interface/TemplateVariableStringSetting.html +++ b/api/types/interface/TemplateVariableStringSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ToolchainConfig.html b/api/types/interface/ToolchainConfig.html index a83dd698828..8f60f2ba661 100644 --- a/api/types/interface/ToolchainConfig.html +++ b/api/types/interface/ToolchainConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TypeScriptConfig.html b/api/types/interface/TypeScriptConfig.html index cd3004f343f..fb7313e3a2a 100644 --- a/api/types/interface/TypeScriptConfig.html +++ b/api/types/interface/TypeScriptConfig.html @@ -13,8 +13,8 @@ - - + +
@@ -29,7 +29,7 @@ ```

routeOutDirToCache

routeOutDirToCache: boolean

syncProjectReferences

syncProjectReferences: boolean = ```ts true ```

syncProjectReferencesToPaths

syncProjectReferencesToPaths: boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/VcsConfig.html b/api/types/interface/VcsConfig.html index 1c1ae7cc6d1..ddd4020caae 100644 --- a/api/types/interface/VcsConfig.html +++ b/api/types/interface/VcsConfig.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/WebhookPayload.html b/api/types/interface/WebhookPayload.html index 1cb41698876..c800e0bc0f9 100644 --- a/api/types/interface/WebhookPayload.html +++ b/api/types/interface/WebhookPayload.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/WorkspaceConfig.html b/api/types/interface/WorkspaceConfig.html index e170a655914..4839e6be4c1 100644 --- a/api/types/interface/WorkspaceConfig.html +++ b/api/types/interface/WorkspaceConfig.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ ```

codeowners

codeowners: CodeownersConfig

constraints

constraints: ConstraintsConfig

experiments

experiments: ExperimentsConfig

extends

extends: null | string

generator

generator: GeneratorConfig

hasher

hasher: HasherConfig

notifier

notifier: NotifierConfig

projects

runner

runner: RunnerConfig

telemetry

telemetry: boolean = ```ts true ```

vcs

versionConstraint

versionConstraint: null | string
- - + + \ No newline at end of file diff --git a/api/types/interface/WorkspaceProjectsConfig.html b/api/types/interface/WorkspaceProjectsConfig.html index 81a37bfc439..cbfeef83ddd 100644 --- a/api/types/interface/WorkspaceProjectsConfig.html +++ b/api/types/interface/WorkspaceProjectsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/YarnConfig.html b/api/types/interface/YarnConfig.html index ab8eeb86c7a..3d3808bbb26 100644 --- a/api/types/interface/YarnConfig.html +++ b/api/types/interface/YarnConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/assets/js/0631dc07.dee075ee.js b/assets/js/0631dc07.dee075ee.js new file mode 100644 index 00000000000..ac826811a5c --- /dev/null +++ b/assets/js/0631dc07.dee075ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87976],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=p(r),f=o,b=m["".concat(s,".").concat(f)]||m[f]||c[f]||a;return r?n.createElement(b,l(l({ref:t},u),{},{components:r})):n.createElement(b,l({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.21",title:"proto v0.21 - Linux x64 musl support",authors:["milesj"],tags:["proto","linux","musl"]},l=void 0,i={permalink:"/blog/proto-v0.21",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-27_proto-v0.21.mdx",source:"@site/blog/2023-10-27_proto-v0.21.mdx",title:"proto v0.21 - Linux x64 musl support",description:"This is a very small release that primarily adds support for the Linux x64 musl target.",date:"2023-10-27T00:00:00.000Z",formattedDate:"October 27, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"linux",permalink:"/blog/tags/linux"},{label:"musl",permalink:"/blog/tags/musl"}],readingTime:.67,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.21",title:"proto v0.21 - Linux x64 musl support",authors:["milesj"],tags:["proto","linux","musl"]},nextItem:{title:"proto v0.20 - New shims and binaries management",permalink:"/blog/proto-v0.20"}},s={authorsImageUrls:[void 0]},p=[],u={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a very small release that primarily adds support for the Linux x64 musl target."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/11ce4159.77186aad.js b/assets/js/11ce4159.b550a723.js similarity index 79% rename from assets/js/11ce4159.77186aad.js rename to assets/js/11ce4159.b550a723.js index 9894a600f86..5f539a67aee 100644 --- a/assets/js/11ce4159.77186aad.js +++ b/assets/js/11ce4159.b550a723.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1531],{75034:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/5","page":5,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/4","nextPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1531],{75034:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/5","page":5,"postsPerPage":10,"totalPages":6,"totalCount":53,"previousPage":"/blog/page/4","nextPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1a2b669c.414c293c.js b/assets/js/1a2b669c.913a4366.js similarity index 80% rename from assets/js/1a2b669c.414c293c.js rename to assets/js/1a2b669c.913a4366.js index 506ac53a7e8..1aa41f813c5 100644 --- a/assets/js/1a2b669c.414c293c.js +++ b/assets/js/1a2b669c.913a4366.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47999],{85824:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":22,"previousPage":"/blog/tags/proto","nextPage":"/blog/tags/proto/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47999],{85824:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":23,"previousPage":"/blog/tags/proto","nextPage":"/blog/tags/proto/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3db5b877.b0f4ddb0.js b/assets/js/3db5b877.3b12eeb7.js similarity index 91% rename from assets/js/3db5b877.b0f4ddb0.js rename to assets/js/3db5b877.3b12eeb7.js index 5dca4e20412..d97cefac18b 100644 --- a/assets/js/3db5b877.b0f4ddb0.js +++ b/assets/js/3db5b877.3b12eeb7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10252],{19354:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":22}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10252],{19354:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":23}')}}]); \ No newline at end of file diff --git a/assets/js/44ac4dbb.1fc0f8ee.js b/assets/js/44ac4dbb.77f78de9.js similarity index 77% rename from assets/js/44ac4dbb.1fc0f8ee.js rename to assets/js/44ac4dbb.77f78de9.js index 4d3e16b1620..9d888874f4c 100644 --- a/assets/js/44ac4dbb.1fc0f8ee.js +++ b/assets/js/44ac4dbb.77f78de9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77142],{90399:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/6","page":6,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77142],{90399:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/6","page":6,"postsPerPage":10,"totalPages":6,"totalCount":53,"previousPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4e30d381.781f3272.js b/assets/js/4e30d381.781f3272.js new file mode 100644 index 00000000000..b2782c5dc8a --- /dev/null +++ b/assets/js/4e30d381.781f3272.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93848],{48202:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/musl","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/69e0bfe1.ff27b86f.js b/assets/js/69e0bfe1.a1de599c.js similarity index 79% rename from assets/js/69e0bfe1.ff27b86f.js rename to assets/js/69e0bfe1.a1de599c.js index ec40dbeed8c..ae3ca3d40cf 100644 --- a/assets/js/69e0bfe1.ff27b86f.js +++ b/assets/js/69e0bfe1.a1de599c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85029],{30076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":22,"previousPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85029],{30076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":23,"previousPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/70c84758.d896a54e.js b/assets/js/70c84758.d896a54e.js new file mode 100644 index 00000000000..63fba93bb93 --- /dev/null +++ b/assets/js/70c84758.d896a54e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[55932],{27571:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/linux","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7599f4f1.59c6369a.js b/assets/js/7599f4f1.3f0118af.js similarity index 78% rename from assets/js/7599f4f1.59c6369a.js rename to assets/js/7599f4f1.3f0118af.js index 07b0d536422..54a4e3ffcb0 100644 --- a/assets/js/7599f4f1.59c6369a.js +++ b/assets/js/7599f4f1.3f0118af.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65217],{67049:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto","page":1,"postsPerPage":10,"totalPages":3,"totalCount":22,"nextPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65217],{67049:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto","page":1,"postsPerPage":10,"totalPages":3,"totalCount":23,"nextPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7d9726a8.0661fc84.js b/assets/js/7d9726a8.39a61a2e.js similarity index 79% rename from assets/js/7d9726a8.0661fc84.js rename to assets/js/7d9726a8.39a61a2e.js index 71cc178b515..86db4e36f16 100644 --- a/assets/js/7d9726a8.0661fc84.js +++ b/assets/js/7d9726a8.39a61a2e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7429],{89494:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/4","page":4,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7429],{89494:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/4","page":4,"postsPerPage":10,"totalPages":6,"totalCount":53,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.2c06b562.js b/assets/js/814f3328.2c06b562.js deleted file mode 100644 index 6c68ec05ae3..00000000000 --- a/assets/js/814f3328.2c06b562.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"proto v0.20 - New shims and binaries management","permalink":"/blog/proto-v0.20"},{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"},{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.99320280.js b/assets/js/814f3328.99320280.js new file mode 100644 index 00000000000..a1fe0d85f32 --- /dev/null +++ b/assets/js/814f3328.99320280.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"proto v0.21 - Linux x64 musl support","permalink":"/blog/proto-v0.21"},{"title":"proto v0.20 - New shims and binaries management","permalink":"/blog/proto-v0.20"},{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"}]}')}}]); \ No newline at end of file diff --git a/assets/js/8eb4e46b.818d4eb8.js b/assets/js/8eb4e46b.4f34c13b.js similarity index 78% rename from assets/js/8eb4e46b.818d4eb8.js rename to assets/js/8eb4e46b.4f34c13b.js index 3fa7fb1dd37..f740c87520f 100644 --- a/assets/js/8eb4e46b.818d4eb8.js +++ b/assets/js/8eb4e46b.4f34c13b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10001],{82638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10001],{82638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":6,"totalCount":53,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/92999a1c.62a505db.js b/assets/js/92999a1c.16f4bb68.js similarity index 79% rename from assets/js/92999a1c.62a505db.js rename to assets/js/92999a1c.16f4bb68.js index 58ad5572088..0da09ccdad9 100644 --- a/assets/js/92999a1c.62a505db.js +++ b/assets/js/92999a1c.16f4bb68.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18442],{15310:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18442],{15310:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":6,"totalCount":53,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.3d2c7ca4.js b/assets/js/a7023ddc.3d2c7ca4.js deleted file mode 100644 index 6ed60d7cd67..00000000000 --- a/assets/js/a7023ddc.3d2c7ca4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11713],{53457:l=>{l.exports=JSON.parse('[{"label":"proto","permalink":"/blog/tags/proto","count":22},{"label":"bin","permalink":"/blog/tags/bin","count":1},{"label":"shim","permalink":"/blog/tags/shim","count":2},{"label":"checksum","permalink":"/blog/tags/checksum","count":1},{"label":"action","permalink":"/blog/tags/action","count":2},{"label":"dependency","permalink":"/blog/tags/dependency","count":1},{"label":"graph","permalink":"/blog/tags/graph","count":3},{"label":"pipeline","permalink":"/blog/tags/pipeline","count":2},{"label":"railway","permalink":"/blog/tags/railway","count":1},{"label":"pin","permalink":"/blog/tags/pin","count":1},{"label":"global","permalink":"/blog/tags/global","count":2},{"label":"local","permalink":"/blog/tags/local","count":1},{"label":"outdated","permalink":"/blog/tags/outdated","count":1},{"label":"run","permalink":"/blog/tags/run","count":1},{"label":"target","permalink":"/blog/tags/target","count":2},{"label":"toolchain","permalink":"/blog/tags/toolchain","count":7},{"label":"version","permalink":"/blog/tags/version","count":1},{"label":"ci","permalink":"/blog/tags/ci","count":3},{"label":"shorthand","permalink":"/blog/tags/shorthand","count":1},{"label":"http","permalink":"/blog/tags/http","count":1},{"label":"registry","permalink":"/blog/tags/registry","count":1},{"label":"index","permalink":"/blog/tags/index","count":1},{"label":"plugin","permalink":"/blog/tags/plugin","count":6},{"label":"tool","permalink":"/blog/tags/tool","count":1},{"label":"canary","permalink":"/blog/tags/canary","count":1},{"label":"python","permalink":"/blog/tags/python","count":1},{"label":"tasks","permalink":"/blog/tags/tasks","count":6},{"label":"wasm","permalink":"/blog/tags/wasm","count":5},{"label":"inheritance","permalink":"/blog/tags/inheritance","count":2},{"label":"project-graph","permalink":"/blog/tags/project-graph","count":2},{"label":"project","permalink":"/blog/tags/project","count":3},{"label":"quality","permalink":"/blog/tags/quality","count":1},{"label":"life","permalink":"/blog/tags/life","count":1},{"label":"qol","permalink":"/blog/tags/qol","count":1},{"label":"ignore","permalink":"/blog/tags/ignore","count":1},{"label":"hasher","permalink":"/blog/tags/hasher","count":3},{"label":"vcs","permalink":"/blog/tags/vcs","count":2},{"label":"debug","permalink":"/blog/tags/debug","count":1},{"label":"git","permalink":"/blog/tags/git","count":1},{"label":"hooks","permalink":"/blog/tags/hooks","count":1},{"label":"task","permalink":"/blog/tags/task","count":1},{"label":"logging","permalink":"/blog/tags/logging","count":1},{"label":"source","permalink":"/blog/tags/source","count":1},{"label":"code","permalink":"/blog/tags/code","count":1},{"label":"owners","permalink":"/blog/tags/owners","count":1},{"label":"ownership","permalink":"/blog/tags/ownership","count":1},{"label":"config","permalink":"/blog/tags/config","count":4},{"label":"errors","permalink":"/blog/tags/errors","count":2},{"label":"github","permalink":"/blog/tags/github","count":2},{"label":"rfc","permalink":"/blog/tags/rfc","count":1},{"label":"log","permalink":"/blog/tags/log","count":1},{"label":"rust","permalink":"/blog/tags/rust","count":2},{"label":"lang","permalink":"/blog/tags/lang","count":3},{"label":"tier","permalink":"/blog/tags/tier","count":1},{"label":"query","permalink":"/blog/tags/query","count":3},{"label":"tag","permalink":"/blog/tags/tag","count":1},{"label":"alias","permalink":"/blog/tags/alias","count":2},{"label":"detect","permalink":"/blog/tags/detect","count":1},{"label":"schema","permalink":"/blog/tags/schema","count":1},{"label":"toml","permalink":"/blog/tags/toml","count":1},{"label":"plugins","permalink":"/blog/tags/plugins","count":1},{"label":"tags","permalink":"/blog/tags/tags","count":2},{"label":"globals","permalink":"/blog/tags/globals","count":2},{"label":"clean","permalink":"/blog/tags/clean","count":1},{"label":"tokens","permalink":"/blog/tags/tokens","count":2},{"label":"projects","permalink":"/blog/tags/projects","count":2},{"label":"constraints","permalink":"/blog/tags/constraints","count":1},{"label":"env-vars","permalink":"/blog/tags/env-vars","count":1},{"label":"npm","permalink":"/blog/tags/npm","count":1},{"label":"go","permalink":"/blog/tags/go","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":2},{"label":"hash","permalink":"/blog/tags/hash","count":1},{"label":"deno","permalink":"/blog/tags/deno","count":1},{"label":"moonbase","permalink":"/blog/tags/moonbase","count":4},{"label":"offline","permalink":"/blog/tags/offline","count":1},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"remote-cache","permalink":"/blog/tags/remote-cache","count":3},{"label":"survey","permalink":"/blog/tags/survey","count":1},{"label":"migrate","permalink":"/blog/tags/migrate","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"runner","permalink":"/blog/tags/runner","count":4},{"label":"language","permalink":"/blog/tags/language","count":1},{"label":"cache","permalink":"/blog/tags/cache","count":1},{"label":"hydration","permalink":"/blog/tags/hydration","count":1},{"label":"generator","permalink":"/blog/tags/generator","count":4},{"label":"typescript","permalink":"/blog/tags/typescript","count":2},{"label":"monorepo","permalink":"/blog/tags/monorepo","count":1},{"label":"affected","permalink":"/blog/tags/affected","count":1},{"label":"dep-graph","permalink":"/blog/tags/dep-graph","count":1},{"label":"init","permalink":"/blog/tags/init","count":1},{"label":"node","permalink":"/blog/tags/node","count":2},{"label":"notifier","permalink":"/blog/tags/notifier","count":1},{"label":"editors","permalink":"/blog/tags/editors","count":2},{"label":"vscode","permalink":"/blog/tags/vscode","count":2}]')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.702f72b0.js b/assets/js/a7023ddc.702f72b0.js new file mode 100644 index 00000000000..0ce7ef1b4cf --- /dev/null +++ b/assets/js/a7023ddc.702f72b0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11713],{53457:l=>{l.exports=JSON.parse('[{"label":"proto","permalink":"/blog/tags/proto","count":23},{"label":"linux","permalink":"/blog/tags/linux","count":1},{"label":"musl","permalink":"/blog/tags/musl","count":1},{"label":"bin","permalink":"/blog/tags/bin","count":1},{"label":"shim","permalink":"/blog/tags/shim","count":2},{"label":"checksum","permalink":"/blog/tags/checksum","count":1},{"label":"action","permalink":"/blog/tags/action","count":2},{"label":"dependency","permalink":"/blog/tags/dependency","count":1},{"label":"graph","permalink":"/blog/tags/graph","count":3},{"label":"pipeline","permalink":"/blog/tags/pipeline","count":2},{"label":"railway","permalink":"/blog/tags/railway","count":1},{"label":"pin","permalink":"/blog/tags/pin","count":1},{"label":"global","permalink":"/blog/tags/global","count":2},{"label":"local","permalink":"/blog/tags/local","count":1},{"label":"outdated","permalink":"/blog/tags/outdated","count":1},{"label":"run","permalink":"/blog/tags/run","count":1},{"label":"target","permalink":"/blog/tags/target","count":2},{"label":"toolchain","permalink":"/blog/tags/toolchain","count":7},{"label":"version","permalink":"/blog/tags/version","count":1},{"label":"ci","permalink":"/blog/tags/ci","count":3},{"label":"shorthand","permalink":"/blog/tags/shorthand","count":1},{"label":"http","permalink":"/blog/tags/http","count":1},{"label":"registry","permalink":"/blog/tags/registry","count":1},{"label":"index","permalink":"/blog/tags/index","count":1},{"label":"plugin","permalink":"/blog/tags/plugin","count":6},{"label":"tool","permalink":"/blog/tags/tool","count":1},{"label":"canary","permalink":"/blog/tags/canary","count":1},{"label":"python","permalink":"/blog/tags/python","count":1},{"label":"tasks","permalink":"/blog/tags/tasks","count":6},{"label":"wasm","permalink":"/blog/tags/wasm","count":5},{"label":"inheritance","permalink":"/blog/tags/inheritance","count":2},{"label":"project-graph","permalink":"/blog/tags/project-graph","count":2},{"label":"project","permalink":"/blog/tags/project","count":3},{"label":"quality","permalink":"/blog/tags/quality","count":1},{"label":"life","permalink":"/blog/tags/life","count":1},{"label":"qol","permalink":"/blog/tags/qol","count":1},{"label":"ignore","permalink":"/blog/tags/ignore","count":1},{"label":"hasher","permalink":"/blog/tags/hasher","count":3},{"label":"vcs","permalink":"/blog/tags/vcs","count":2},{"label":"debug","permalink":"/blog/tags/debug","count":1},{"label":"git","permalink":"/blog/tags/git","count":1},{"label":"hooks","permalink":"/blog/tags/hooks","count":1},{"label":"task","permalink":"/blog/tags/task","count":1},{"label":"logging","permalink":"/blog/tags/logging","count":1},{"label":"source","permalink":"/blog/tags/source","count":1},{"label":"code","permalink":"/blog/tags/code","count":1},{"label":"owners","permalink":"/blog/tags/owners","count":1},{"label":"ownership","permalink":"/blog/tags/ownership","count":1},{"label":"config","permalink":"/blog/tags/config","count":4},{"label":"errors","permalink":"/blog/tags/errors","count":2},{"label":"github","permalink":"/blog/tags/github","count":2},{"label":"rfc","permalink":"/blog/tags/rfc","count":1},{"label":"log","permalink":"/blog/tags/log","count":1},{"label":"rust","permalink":"/blog/tags/rust","count":2},{"label":"lang","permalink":"/blog/tags/lang","count":3},{"label":"tier","permalink":"/blog/tags/tier","count":1},{"label":"query","permalink":"/blog/tags/query","count":3},{"label":"tag","permalink":"/blog/tags/tag","count":1},{"label":"alias","permalink":"/blog/tags/alias","count":2},{"label":"detect","permalink":"/blog/tags/detect","count":1},{"label":"schema","permalink":"/blog/tags/schema","count":1},{"label":"toml","permalink":"/blog/tags/toml","count":1},{"label":"plugins","permalink":"/blog/tags/plugins","count":1},{"label":"tags","permalink":"/blog/tags/tags","count":2},{"label":"globals","permalink":"/blog/tags/globals","count":2},{"label":"clean","permalink":"/blog/tags/clean","count":1},{"label":"tokens","permalink":"/blog/tags/tokens","count":2},{"label":"projects","permalink":"/blog/tags/projects","count":2},{"label":"constraints","permalink":"/blog/tags/constraints","count":1},{"label":"env-vars","permalink":"/blog/tags/env-vars","count":1},{"label":"npm","permalink":"/blog/tags/npm","count":1},{"label":"go","permalink":"/blog/tags/go","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":2},{"label":"hash","permalink":"/blog/tags/hash","count":1},{"label":"deno","permalink":"/blog/tags/deno","count":1},{"label":"moonbase","permalink":"/blog/tags/moonbase","count":4},{"label":"offline","permalink":"/blog/tags/offline","count":1},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"remote-cache","permalink":"/blog/tags/remote-cache","count":3},{"label":"survey","permalink":"/blog/tags/survey","count":1},{"label":"migrate","permalink":"/blog/tags/migrate","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"runner","permalink":"/blog/tags/runner","count":4},{"label":"language","permalink":"/blog/tags/language","count":1},{"label":"cache","permalink":"/blog/tags/cache","count":1},{"label":"hydration","permalink":"/blog/tags/hydration","count":1},{"label":"generator","permalink":"/blog/tags/generator","count":4},{"label":"typescript","permalink":"/blog/tags/typescript","count":2},{"label":"monorepo","permalink":"/blog/tags/monorepo","count":1},{"label":"affected","permalink":"/blog/tags/affected","count":1},{"label":"dep-graph","permalink":"/blog/tags/dep-graph","count":1},{"label":"init","permalink":"/blog/tags/init","count":1},{"label":"node","permalink":"/blog/tags/node","count":2},{"label":"notifier","permalink":"/blog/tags/notifier","count":1},{"label":"editors","permalink":"/blog/tags/editors","count":2},{"label":"vscode","permalink":"/blog/tags/vscode","count":2}]')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.e1a8dc10.js b/assets/js/b2b675dd.b55b70b3.js similarity index 76% rename from assets/js/b2b675dd.e1a8dc10.js rename to assets/js/b2b675dd.b55b70b3.js index 48ac9a501c2..32db008027b 100644 --- a/assets/js/b2b675dd.e1a8dc10.js +++ b/assets/js/b2b675dd.b55b70b3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":6,"totalCount":52,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":6,"totalCount":53,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.2880aa5b.js b/assets/js/b2f554cd.2880aa5b.js deleted file mode 100644 index be8b3fc90b2..00000000000 --- a/assets/js/b2f554cd.2880aa5b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"proto-v0.20","metadata":{"permalink":"/blog/proto-v0.20","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-20_proto-v0.20.mdx","source":"@site/blog/2023-10-20_proto-v0.20.mdx","title":"proto v0.20 - New shims and binaries management","description":"In this release, we\'re reworking how shims and binaries work.","date":"2023-10-20T00:00:00.000Z","formattedDate":"October 20, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"bin","permalink":"/blog/tags/bin"},{"label":"shim","permalink":"/blog/tags/shim"},{"label":"checksum","permalink":"/blog/tags/checksum"}],"readingTime":3,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.20","title":"proto v0.20 - New shims and binaries management","authors":["milesj"],"tags":["proto","bin","shim","checksum"]},"nextItem":{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"}},"content":"In this release, we\'re reworking how shims and binaries work.\\n\\n\x3c!--truncate--\x3e\\n\\n## Shims _and_ Binaries (breaking)\\n\\nSince proto\'s inception, we\'ve used shims as a way to execute installed tools. This allowed us to\\nwrap the underlying tool binary to provide additional functionality, such as automatic version\\ndetection, runtime hooks, and more. However, this approach has some limitations, such as:\\n\\n- Shims are forced onto you and there\'s no way to use proto without shims.\\n- Shims are slower than executing the native binary, upwards of 10x slower. While this equates in\\n milliseconds, it can be noticeable dependending on the tool.\\n- For Windows, our shim files are `.cmd` _and not_ `.exe`. This causes a lot of weird and unexpected\\n problems when an environment expects a real executable, or uses a hard-coded `.exe` extension.\\n\\nTo remedy this, we\'re introducing both a shim and non-shim approach, which has resulted in a pretty\\nbig breaking change. Shims are now generated in `~/.proto/shims` (instead of `~/.proto/bin`), while\\n`~/.proto/bin` will now store symlinks to native binaries. To migrate to this new pattern, we\'re\\nintroducing a new `proto migrate` command (this only needs to be ran once).\\n\\n```shell\\n$ proto upgrade\\n$ proto migrate v0.20 --log debug\\n```\\n\\n### How it works\\n\\nWhen installing proto for the first time, or running the `proto migrate` command, we prepend `PATH`\\nwith `$PROTO_HOME/shims:$PROTO_HOME/bin`. This allows shims to be executed _first_ and fallthrough\\nto native binaries if a shim does not exist (for example, `.exe` on Windows).\\n\\nFurthermore, if you\'d prefer to _only use_ shims, or _only use_ binaries, you can update `PATH` and\\nremove the unwanted directory path.\\n\\nAnd lastly, if shims are causing problems, you can now easily reference the native binaries\\ndirectly. This was rather complicated before.\\n\\n### Comparison\\n\\n| | Shims | Binaries |\\n| -------------------- | -------------------------------------------------- | ----------------------------------------------------------------------- |\\n| **Location** | `~/.proto/shims` | `~/.proto/bin` |\\n| **Created as** | Scripts that run `proto run` | Symlinks to the native binary |\\n| **Version executed** | Detects version at runtime | Last version that was installed + pinned |\\n| **Supported for** | All tools | Only tools that support native execution (may not work for `.js` files) |\\n| **Additional files** | Creates extra files (like `bunx`, `node-gyp`, etc) | Only links the primary binary |\\n\\n## Support for minisign checksums\\n\\nWhen proto installs a tool, it runs a process known as checksum verification, where we ensure the\\ndownload hasn\'t been modified maliciously in anyway. Historically we only supported SHA256\\nchecksums, but now, we also support the new [minisign](https://jedisct1.github.io/minisign/) tool,\\nused by popular tools like [Zig](https://ziglang.org/).\\n\\nIf you\'re building a plugin for a tool that uses minisign, you can use the new\\n[`checksum_public_key`](/docs/proto/wasm-plugin#downloading-pre-builts) (WASM) or\\n[`install.checksum-public-key`](/docs/proto/toml-plugin#downloading-and-installing) (TOML) field to\\nprovide the public key for use in verification.\\n\\nWhen the checksum URL ends in a `.minisig` extension, proto will automatically use minisign for\\nchecksum verification!\\n\\n```toml\\n[install]\\nchecksum-url = \\"https://domain.com/some/path/to/checksum.minisig\\"\\nchecksum-public-key = \\"untrusted comment: ...\\"\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.20.0) for a full list\\nof changes.\\n\\n- Updated `proto use` to install tools in parallel.\\n- Updated `proto plugins` and `proto tools` to load plugins in parallel.\\n- Updated `proto run` to error when the tool attempts to self-upgrade outside of proto.\\n- Rust plugin\\n - Will now attempt to install `rustup` if it does not exist on the current machine.\\n - Will now respect the `RUSTUP_HOME` environment variable when locating the `.rustup` store.\\n- Schema plugin\\n - Added `install.checksum_public_key` for defining the public key used to verify checksums.\\n - Added `metadata.self_upgrade_commands` for defining which sub-commands should be blocked for\\n self-upgrades."},{"id":"moon-v1.15","metadata":{"permalink":"/blog/moon-v1.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx","source":"@site/blog/2023-10-09_moon-v1.15.mdx","title":"moon v1.15 - Next-generation action graph","description":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the","date":"2023-10-09T00:00:00.000Z","formattedDate":"October 9, 2023","tags":[{"label":"action","permalink":"/blog/tags/action"},{"label":"dependency","permalink":"/blog/tags/dependency"},{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"railway","permalink":"/blog/tags/railway"}],"readingTime":4.62,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.15","title":"moon v1.15 - Next-generation action graph","authors":["milesj"],"tags":["action","dependency","graph","pipeline","railway"],"image":"./img/moon/v1.15.png"},"prevItem":{"title":"proto v0.20 - New shims and binaries management","permalink":"/blog/proto-v0.20"},"nextItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"}},"content":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the\\ndependency graph.\\n\\n\x3c!--truncate--\x3e\\n\\n## Hello action graph, goodbye dependency graph\\n\\nFor the past few months, we\'ve been working on a rewrite of our action pipeline, which consists of\\nthe project graph, dependency graph, task executor, process pipeline, and more. It\'s a slow process,\\nwith many different pieces that must land in sequence, but we\'re almost done. The next step in this\\nprocess is the [introduction of the new action graph](/docs/how-it-works/action-graph), which\\nreplaces the previous dependency graph.\\n\\nFor the most part, the graphs work in a similar fashion, but since we rewrote it from the ground up,\\nwe were able to resolve any discrepancies and performance issues. The biggest changes between the\\nnew and old graphs are:\\n\\n- All actions now depend on the `SyncWorkspace` action, instead of this action running arbitrarily.\\n- Cleaned up dependency chains between actions, greatly reducing the number of nodes in the graph.\\n- Renamed `RunTarget` to `RunTask`, including interactive and persistent variants.\\n- And lastly, we ditched our batched task approach for a ready queue. Continue reading for more\\n information!\\n\\n### A new performant thread pool\\n\\nIn the old dependency graph, when we\'d execute a task, we\'d order the graph topologically and then\\ngroup actions into batches (or buckets) based on their dependency chains. Batches would then be\\nexecuted in order within the thread pool. This approach worked well, but had one major flaw: it\\nwasn\'t as performant as could be. For example, if our thread pool size was 12, and a batch only had\\n2 tasks in it, what were the other 10 threads doing? Absolutely nothing. They were sitting idly,\\nwaiting for a task.\\n\\nAnd now with the new action graph, we take full advantage of all threads in the pool. Instead of the\\nbatched approach above, we now use a topological task-ready queue, where a thread without work (or\\nis waiting for work) can poll the graph for a new task to run. A task is considered ready to run if\\nit either has no dependencies, or all of its dependencies (in the chain) have been ran.\\n\\nFor large graphs, this should result in a significant performance improvement!\\n\\n### Automatic dependency linking (breaking)\\n\\nBecause of these graph changes, we do have a minor \\"breaking change\\". Tasks that depend (via `deps`)\\non other tasks from arbitrary projects (the parent project doesn\'t implicitly or explicitly depend\\non the other project), not including the root-level project, will now automatically mark that other\\nproject as a \\"peer\\" dependency (if not already configured with `dependsOn`). For example, \\"b\\"\\nbecomes a peer dependency for \\"a\\".\\n\\n```yaml title=\\"a/moon.yml\\"\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nNow internally becomes:\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'peer\'\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nIf you\'d prefer this dependency to _not be_ a peer, you can explicitly configure it with a different\\nscope. For Node.js projects, the \\"build\\" scope can be used as a no-op replacement.\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'build\' # production, development\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nWe\'re marking this as a breaking change as this could subtly introduce cycles in the project graph\\nthat weren\'t present before, and for Node.js projects, this may inject `peerDependencies`. However,\\nthis change was necessary to ensure accurate dependency chains in the graph.\\n\\n## New `moonrepo/setup-toolchain` GitHub action\\n\\nWe\'ve begun a process to deprecate the\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action) and\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) GitHub actions, and instead, combine\\nand replace them with a new [moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain)\\naction. Why a new action instead of fixing the others?\\n\\nThe biggest problem was that both previous actions shared about 90% of the same code, but were\\nslightly different in how they installed the binaries and cached the toolchain. It was was also\\nconfusing for consumers to understand and know which action to use (because they shouldn\'t be used\\ntogether).\\n\\nTo remedy this, we\'re prototyping the new\\n[moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain) action, which has been\\nworking quite well. It aims to solve the following:\\n\\n- Installs `proto` globally so that installed tools can also be executed globally.\\n- Conditionally installs `moon` globally if the repository is using moon (attempts to detect a\\n `.moon` directory).\\n- Caches the toolchain (`~/.proto`) so subsequent runs are faster.\\n- Hashes `.prototools` and `.moon/toolchain.yml` files to generate a unique cache key.\\n- Cleans the toolchain before caching to remove unused or stale tools.\\n- Can auto-install tools when used.\\n\\n```diff\\n# ...\\njobs:\\n ci:\\n name: CI\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n- - uses: moonrepo/setup-moon-action@v1\\n+ - uses: moonrepo/setup-toolchain@v0\\n```\\n\\n## Now supported in Railway\\n\\nIf you\'re a big fan of [Railway](https://railway.app/) (like we are), and you\'re deploying a Node.js\\nbacked application, then you\'ll be happy to hear that Railway now officially and natively supports\\nmoon! We spent some time over the past month\\n[integrating moon support into their Nixpacks architecture](https://nixpacks.com/docs/providers/node).\\n\\nTo make use of this, set the `NIXPACKS_MOON_APP_NAME` environment variable to the name of your moon\\nproject that you want to be deployed. This will then automatically run `moon run :build` and\\n`moon run :start` respectively. To customize the task names, you can set the\\n`NIXPACKS_MOON_BUILD_TASK` and `NIXPACKS_MOON_START_TASK` environment variables.\\n\\n:::info\\n\\nThis is currently only supported for Node.js projects, but will be expanded to other languages in\\nthe future!\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.15.0) for a full list\\nof changes.\\n\\n- Added a `moon action-graph` command.\\n- Added a `--dependents` argument to `moon action-graph`.\\n- Added the ability to skip non-`RunTask` actions using environment variables.\\n- Deprecated the `moon dep-graph` command."},{"id":"proto-v0.19","metadata":{"permalink":"/blog/proto-v0.19","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx","source":"@site/blog/2023-09-29_proto-v0.19.mdx","title":"proto v0.19 - Version pinning and outdated checks","description":"In this release, we\'re improving version pinning and introducing a new command to check for outdated","date":"2023-09-29T00:00:00.000Z","formattedDate":"September 29, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"pin","permalink":"/blog/tags/pin"},{"label":"global","permalink":"/blog/tags/global"},{"label":"local","permalink":"/blog/tags/local"},{"label":"outdated","permalink":"/blog/tags/outdated"}],"readingTime":1.92,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.19","title":"proto v0.19 - Version pinning and outdated checks","authors":["milesj"],"tags":["proto","pin","global","local","outdated"],"image":"./img/proto/v0.19.png"},"prevItem":{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},"nextItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"}},"content":"In this release, we\'re improving version pinning and introducing a new command to check for outdated\\nversions.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto pin` command (breaking)\\n\\nBefore our official v1 release, which is relatively soon, we\'ll be making some breaking changes with\\nthe proto APIs. The first is the introduction of the new [`proto pin`](/docs/proto/commands/pin)\\ncommand, which replaces the previous `proto local` and `proto global` commands. We felt this was a\\nmuch cleaner change, and far easier to understand than the previous command names.\\n\\n```shell\\n# v0.18\\n$ proto local go 1.20\\n$ proto global node 20\\n\\n# v0.19+\\n$ proto pin go 1.20\\n$ proto pin node 20 --global\\n```\\n\\n## New `pin-latest` setting\\n\\nWhile we\'re on the subject of pinning versions, we\'ve also introduced a new\\n[`pin-latest`](/docs/proto/config#pin-latest) setting. Do you want the latest version to always be\\npinned? Do you forgot to pass `--pin` when installing? Do you forget to run the `proto global` or\\n`proto local` commands (now `proto pin`)? If you answered yes to any of these questions, then this\\nsetting is for you.\\n\\nWhen enabled, and a tool is installed with the \\"latest\\" version, the resolved version will\\nautomatically be pinned to the configuration of your choice. For example, say we have the following\\nuser config:\\n\\n```toml title=\\"~/.proto/config.toml\\"\\npin-latest = \\"local\\"\\n```\\n\\nAnd we run one of the following commands:\\n\\n```shell\\n$ proto install go\\n$ proto install node latest\\n```\\n\\nThen the resolved version of the tool will automatically be set to the `.prototools` file in the\\ncurrent directory. Handy right?\\n\\n## New `proto outdated` command\\n\\nBy request of the community, we\'re introducing yet another new command,\\n[`proto outdated`](/docs/proto/commands/outdated). If you\'re familiar with package managers, you can\\nprobably guess what this command does! It\'ll check for newer available versions, for all tools\\nconfigured in the closest `.prototools` file. Very handy for keeping your tools up to date.\\n\\n```\\n$ proto outdated\\n\\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.19.0) for a full list\\nof changes.\\n\\n- Added `PROTO_WASM_LOG` environment variable to toggle the logging of messages from Extism and WASM\\n plugins. Useful for debugging.\\n- Updated `proto install` to auto-clean stale plugins after a successful installation."},{"id":"moon-v1.14","metadata":{"permalink":"/blog/moon-v1.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-25_moon-v1.14.mdx","source":"@site/blog/2023-09-25_moon-v1.14.mdx","title":"moon v1.14 - Improvements to running targets and toolchain versions","description":"In this release, we\'ve focused on loosening restrictions to improve the overall developer","date":"2023-09-25T00:00:00.000Z","formattedDate":"September 25, 2023","tags":[{"label":"run","permalink":"/blog/tags/run"},{"label":"target","permalink":"/blog/tags/target"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"version","permalink":"/blog/tags/version"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"shorthand","permalink":"/blog/tags/shorthand"}],"readingTime":2.665,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.14","title":"moon v1.14 - Improvements to running targets and toolchain versions","authors":["milesj"],"tags":["run","target","toolchain","version","ci","shorthand"],"image":"./img/moon/v1.14.png"},"prevItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},"nextItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"}},"content":"In this release, we\'ve focused on loosening restrictions to improve the overall developer\\nexperience.\\n\\n\x3c!--truncate--\x3e\\n\\n## Shorthand for `moon run`\\n\\nThis has been a long requested feature and we\'re happy to finally deliver it! You can now omit the\\n\\"run\\" keyword for the [`moon run`](/docs/commands/run) command, just so long as the first non-option\\nargument is a target (must contain a `:`).\\n\\n```shell\\n# v1.13\\n$ moon run app:build\\n\\n# v1.14+\\n$ moon app:build\\n```\\n\\n## Choose targets for `moon ci`\\n\\nWhen we initially built [`moon ci`](/docs/commands/ci), we wanted a solution that simply ran\\neverything in CI that _should be ran_, taking care of all the complicated logic to determine\\naffected tasks, comparing Git branches, gathering targets, partitioning across jobs, etc... And it\\ndoes just that, and it does it well!\\n\\nHowever, one major caveat to using `moon ci` is that it runs _every task_ in the workspace (assuming\\nthey\'re affected). This has been quite a blocker for adoption as teams may want fine-grained control\\nof their CI. For example, running build tasks in one job, lint tasks in another, so on and so forth.\\n\\nIn this release, we\'ve made the necessary changes to allow these workflows, by supporting a list of\\ntargets for `moon ci`, similar to how `moon run` works. If no targets are provide, the existing \\"run\\neverything\\" logic will be used.\\n\\n```shell\\n# v1.13\\n$ moon ci\\n\\n# v1.14+\\n$ moon ci :build :lint :etc\\n```\\n\\nSplitting targets across jobs is demonstrated with the following GitHub Action workflow:\\n\\n```yaml title=\\".github/workflows/ci.yml\\"\\nname: \'CI\'\\non:\\n push:\\n branches:\\n - \'master\'\\n pull_request:\\njobs:\\n build:\\n name: \'Build\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :build\'\\n format-lint:\\n name: \'Format + Lint\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :format :lint\'\\n test:\\n name: \'Test\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :test\'\\n```\\n\\n## Configure partial toolchain versions\\n\\nSince moon\'s inception, our [integrated toolchain](/docs/concepts/toolchain) required fully\\nqualified semantic versions (major.minor.patch) for tools. This was by design to ensure that we\\ncould provide a consistent, reliable, and deterministic experience for all users. This solved the\\nproblem of \\"Is X using the correct version of Y?\\".\\n\\nHowever, this also meant that we were unable to support partial versions (major.minor) of tools,\\nwhich is a common use case and request for many users. Over the last few months, we\'ve made immense\\nprogress in [proto](/proto) on how it parses, resolves, and evaluates versions, known as the\\n[version specification](https://crates.io/crates/version_spec).\\n\\nWe felt the time was right to pull these changes into moon, and as such, all `version` fields in\\n[`.moon/toolchain.yml`](/docs/config/toolchain) now support partial versions, version\\nrequirements/ranges, and even aliases!\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n version: \'20.7\' # ~20.7\\n npm:\\n version: \'^9\'\\n\\nrust:\\n version: \'stable\'\\n```\\n\\n:::info\\n\\nLearn more about how this works under the hood in the\\n[official version specification documentation](/docs/concepts/toolchain#version-specification).\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.14.0) for a full list\\nof changes.\\n\\n- Added `packemon`, `sveltekit`, `vite`, `vitest` to\\n [moonrepo/moon-configs](https://github.com/moonrepo/moon-configs).\\n- Updated `.moon/tasks` to support nested folders, for better organization of task files.\\n- Improved handling of certificates and proxies.\\n- Updated to proto v0.18."},{"id":"proto-v0.18","metadata":{"permalink":"/blog/proto-v0.18","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx","source":"@site/blog/2023-09-18_proto-v0.18.mdx","title":"proto v0.18 - List installed tools and configure HTTP client","description":"Today we\'ve got a small release that includes some helpful features.","date":"2023-09-18T00:00:00.000Z","formattedDate":"September 18, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"http","permalink":"/blog/tags/http"},{"label":"registry","permalink":"/blog/tags/registry"},{"label":"index","permalink":"/blog/tags/index"}],"readingTime":1.83,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.18","title":"proto v0.18 - List installed tools and configure HTTP client","authors":["milesj"],"tags":["proto","http","registry","index"],"image":"./img/proto/v0.18.png"},"prevItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"},"nextItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"}},"content":"Today we\'ve got a small release that includes some helpful features.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto tools` command\\n\\nAre you curious what tools you have installed? And more specifically, which versions? What about\\nconfigured aliases? Until now, you had to manually check the `~/.proto/tools` directory for this\\ninformation, but now, you can simply run [`proto tools`](/docs/proto/commands/tools) to get a list\\nof all installed tools.\\n\\nThis command will list all tools that have been installed, along with their installed versions,\\nrelevant timestamps, available aliases, and store location.\\n\\n```shell\\n$ proto tools\\ngo - Go\\n Store: ~/.proto/tools/go\\n Versions:\\n 1.20.0 - installed 08/24/23, last used 09/18/23\\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\\n\\nnode - Node.js\\n Store: ~/.proto/tools/node\\n Aliases:\\n ~20 = stable\\n Versions:\\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\\n 18.14.0 - installed 09/04/23, last used 09/04/23\\n 18.17.1 - installed 09/04/23, last used 09/04/23\\n 19.0.0 - installed 09/03/23\\n 20.0.0 - installed 09/03/23\\n 20.6.0 - installed 09/04/23, last used 09/18/23\\n```\\n\\n> This information can also be represented as JSON by passing the `--json` flag.\\n\\n## New `[http]` user settings\\n\\nFurthermore, we\'ve added a new [`[http]` setting to `~/.proto/config.toml`](/docs/proto/config#http)\\nthat allows you to configure aspects of the HTTP client, which is primarily used for downloading\\ntools.\\n\\nThis may useful if you\'re behind a proxy, a VPN, or corporate network, and certain requests and\\ncertificates are blocked.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\n[http]\\nproxies = [\\"http://intra.net/proxy\\"]\\nroot-cert = \\"/path/to/root/cert.pem\\"\\n```\\n\\n## Index for third-party tools\\n\\nNow that our TOML and WASM plugins have stabilized, we felt the time was right to start working on a\\nthird-party index, a registry of all available tools. We\'ve updated the official\\n[Supported tools](/docs/proto/tools) documentation to now include third-party tools.\\n\\nAt this time, the list of tools is powered by a JS/JSON object,\\n[which can be found here](https://github.com/moonrepo/moon/blob/master/website/src/data/proto-tools.tsx).\\nIn the future, we may move this to a database, add filtering, sorting, and everything else necessary\\nfor showcasing tools maintained by the community!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.18.0) for a full list\\nof changes.\\n\\n- For TOML plugins, we updated the schema internally to be represented as JSON instead of TOML,\\n which may cause breakages depending on a version mismatch between proto and the plugin."},{"id":"proto-v0.17","metadata":{"permalink":"/blog/proto-v0.17","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx","source":"@site/blog/2023-09-11_proto-v0.17.mdx","title":"proto v0.17 - Experimental Python support and canary releases","description":"This release implements two long requested features, Python language support and canary releases.","date":"2023-09-11T00:00:00.000Z","formattedDate":"September 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"tool","permalink":"/blog/tags/tool"},{"label":"canary","permalink":"/blog/tags/canary"},{"label":"python","permalink":"/blog/tags/python"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.17","title":"proto v0.17 - Experimental Python support and canary releases","authors":["milesj"],"tags":["proto","plugin","tool","canary","python"],"image":"./img/proto/v0.17.png"},"prevItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"},"nextItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"}},"content":"This release implements two long requested features, Python language support and canary releases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Experimental Python support\\n\\nIt\'s been quite a while since we\'ve introduced a new language into proto, and we\'re excited to\\nannounce the highly requested language, Python! Since Python is now an\\n[officially supported language](https://github.com/moonrepo/python-plugin), installing Python (and\\npip) is as simple as:\\n\\n```shell\\n$ proto install python\\n```\\n\\nHowever, we\'re marking language support as experimental for the time being. We expect our\\nimplementation to work for modern Python versions, but may not work for older versions, especially\\nPython 2. The reasons for this are as follows:\\n\\n- proto will install pre-built binaries from\\n [indygreg/python-build-standalone](https://github.com/indygreg/python-build-standalone). This is\\n an unofficial project, and _does not_ support all Python versions.\\n- If [`python-build`](https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md) is\\n available, we\'ll attempt to use it to build + install Python. This currently requires `pyenv` to\\n be installed, and _does not_ work on Windows.\\n- Furthermore, we only support `cpython` at the moment, and do not support `pypy`, `jython`, or\\n other Python implementations. It\'s unknown whether this functionality should be in the core Python\\n plugin, or another plugin entirely.\\n\\nIn a future proto version, we want to support a true \\"build from source\\" approach for all tools.\\nOnce that functionality has landed, we can properly support Python on all platforms, but until then,\\nlet us know how this works for you!\\n\\n## Install canary releases\\n\\nA canary release is a mechanism for rolling out new features and changes to a small subset of users,\\nwithout it being an official release on an official channel. This allows users to opt-in and test\\nfunctionality if they so choose. Canary releases are not meant to be used in production, and may\\ncontain bugs or breaking changes. A canary is similar to a nightly (or weekly) release, depending on\\nthe tool.\\n\\nWe now support this workflow in proto. To install a canary release, simply use the\\n[`--canary` flag when installing a tool](/docs/proto/commands/install):\\n\\n```shell\\n$ proto install --canary\\n```\\n\\nThis will install the latest canary release to `~/.proto/tools//canary`, and _only_ the latest\\nrelease can be used. Re-installing with `--canary` will overwrite the previous canary installation.\\n\\nHowever, because we [detect a version to run with at runtime](/docs/proto/detection), how should you\\nactually run canary? The easiest way is to prefix the shim with an environment variable:\\n\\n```shell\\n$ PROTO_BUN_VERSION=canary bun ./index.ts\\n```\\n\\nOr to explicitly configure the version in [`.prototools`](/docs/proto/config):\\n\\n```toml\\nbun = \\"canary\\"\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.17.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated the following locations to support partial versions and aliases:\\n - Tool versions in `.prototools`.\\n - Pinning a default version with `proto install --pin`.\\n - Setting global version with `proto global`.\\n - Setting local version with `proto local`.\\n- Node, npm, pnpm, and yarn will again extract a version from `package.json` engines."},{"id":"moon-v1.13","metadata":{"permalink":"/blog/moon-v1.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx","source":"@site/blog/2023-09-05_moon-v1.13.mdx","title":"moon v1.13 - Toolchain now uses WASM plugins","description":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.","date":"2023-09-05T00:00:00.000Z","formattedDate":"September 5, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"}],"readingTime":2.76,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.13","title":"moon v1.13 - Toolchain now uses WASM plugins","authors":["milesj"],"tags":["tasks","proto","wasm"],"image":"./img/moon/v1.13.png"},"prevItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"},"nextItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"}},"content":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.\\n\\n\x3c!--truncate--\x3e\\n\\n## proto upgrade and WASM plugins\\n\\nOver the last few months, we\'ve made immense strides on [proto](/proto), our multi-language\\ntoolchain. For those of you unaware, moon\'s toolchain is built on top of proto, and we accomplish\\nthis by utilizing the same Rust code between both tools.\\n\\nHowever, moon has been locked to [proto v0.12](/blog/proto-v0.12), which was a purely Rust based\\nimplementation. With the release of [proto v0.13](/blog/proto-v0.13) and onward, proto has moved to\\na WASM based plugin architecture (with the core still in Rust), which allows us to support more\\nlanguages, and enables developers to write plugins in non-Rust languages.\\n\\nAnd since our WASM plugins have stabilized by [proto v0.16](/blog/proto-v0.16), we felt it was time\\nto finally upgrade moon\'s implementation to the latest and greatest. So what does this mean exactly?\\nA few things:\\n\\n- If you\'re using moon\'s [toolchain](/docs/config/toolchain) (like `node`), we will now download the\\n [Node.js WASM plugins](https://github.com/moonrepo/node-plugin) in the background (to\\n `~/.proto/plugins`).\\n- These plugins are in charge of downloading and installing the Node.js, npm, pnpm, or yarn version\\n specified in your toolchain configuration.\\n- The entire plugin flow is now logged to the console, so you can see what\'s happening behind the\\n scenes.\\n- In the future (most likely moon v2), our platform and language integration will also be powered by\\n WASM plugins. This enables you to build your own custom plugins!\\n\\n:::info\\n\\nThis entire process should be transparent to all users, and you should not notice any changes.\\nHowever, in case this upgrade causes issues, we wanted to isolate it from other changes, hence the\\nlight release!\\n\\n:::\\n\\n## Allow tasks to fail\\n\\n\\"Allow tasks to fail?\\" You ask yourself. \\"Doesn\'t that defeat the point of a task runner?\\" You\\nquestion further. \\"You\'re not wrong!\\" We reply. These questions assume a perfect repository state,\\nwhere all tasks either pass or fail, and there\'s no middle ground. In reality, very rarely is that\\ntrue, and we want to support those stuck in the middle, such as:\\n\\n- In a heavy migration and it\'s known that a task is currently broken.\\n- The task is flaky but you\'ve been unable to find the root cause.\\n- Upstream dependencies have published a backwards incompatible change, and you\'re waiting on a fix.\\n- And of course, in the middle of adopting moon!\\n\\nFor situations where a task consistently or sometimes fails, but you don\'t want it to fail the\\nentire pipeline (especially in CI), you can enable the new\\n[`allowFailure` task option](/docs/config/project#allowfailure).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n typecheck:\\n command: \'tsc --build\'\\n options:\\n allowFailure: true\\n```\\n\\nWhen enabled, failing tasks will no longer bail [`moon run`](/docs/commands/run) early, nor will it\\nexit [`moon ci`](/docs/commands/ci) with a non-zero exit code. However, we still built guard rails\\naround this feature, as we don\'t want to encourage bad practices, and one of these guard rails is\\nthat tasks that enable `allowFailure` _cannot_ be depended on by other tasks, as we cannot guarantee\\nthat it\'s side-effect free.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.13.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated `runner.archivableTargets` to support tag scoped targets.\\n- Updated `moon query tasks --affected` to filter based on affected task, instead of affected\\n project."},{"id":"proto-v0.16","metadata":{"permalink":"/blog/proto-v0.16","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx","source":"@site/blog/2023-09-04_proto-v0.16.mdx","title":"proto v0.16 - Add, remove, and purge plugins","description":"This release adds functionality for managing plugins and purging the proto store.","date":"2023-09-04T00:00:00.000Z","formattedDate":"September 4, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.445,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.16","title":"proto v0.16 - Add, remove, and purge plugins","authors":["milesj"],"tags":["proto","plugin"]},"prevItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"},"nextItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"}},"content":"This release adds functionality for managing plugins and purging the proto store.\\n\\n\x3c!--truncate--\x3e\\n\\n## Add and remove plugins\\n\\nNow that proto has fully embraced a plugin based architecture, we thought it\'d be nice to support\\nthe management of these plugins through the CLI. This release adds two new commands:\\n[`proto add-plugin`](/docs/proto/commands/add-plugin) and\\n[`proto remove-plugin`](/docs/proto/commands/remove-plugin).\\n\\nAdding a plugin requires a unique ID and what we call a locator, which is a string that dictates\\nwhere to locate and download the plugin from. Here\'s an example for Node.js, but this isn\'t\\nnecessary as it\'s built-in:\\n\\n```shell\\n$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\\n```\\n\\nAdditionally, removing a plugin is even easier.\\n\\n```shell\\n$ proto remove-plugin node\\n```\\n\\n## Purge tools and plugins\\n\\nproto has supported cleaning for quite some time through the\\n[`proto clean`](/docs/proto/commands/clean) command (and the\\n[`auto-clean` setting](/docs/proto/config#user-configuration)), which would automatically delete\\ninstalled tool versions and temporary files that are older then a specific timeframe. This helps to\\nfree up disk space for unused or rarely used tools.\\n\\nIn this release, we\'re expanding the `clean` command\'s functionality with a concept known as\\npurging, which will \\"delete entirely\\". The first being the new `--purge` option, which will delete a\\ntool, its manifest, _all_ installed versions, and the entire `~/.proto/tools/` directory.\\n\\n```shell\\n# Delete all traces of Node.js\\n$ proto clean --purge node\\n```\\n\\nAdditionaly, a new `--purge-plugins` option can be used to delete all downloaded plugins (the\\n`~/.proto/plugins` directory). Useful for house keeping or if you want to start fresh.\\n\\n```shell\\n$ proto clean --purge-plugins\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.16.0) for a full list\\nof changes.\\n\\n- Added folder locking during tool installation to avoid colliding processes.\\n- Renamed `PROTO_ROOT` to `PROTO_HOME`, but we\'ll support `PROTO_ROOT` for the time being."},{"id":"proto-v0.15","metadata":{"permalink":"/blog/proto-v0.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx","source":"@site/blog/2023-08-23_proto-v0.15.mdx","title":"proto v0.15 - Install and uninstall globals","description":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.","date":"2023-08-23T00:00:00.000Z","formattedDate":"August 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"global","permalink":"/blog/tags/global"}],"readingTime":1.48,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.15","title":"proto v0.15 - Install and uninstall globals","authors":["milesj"],"tags":["proto","wasm","plugin","global"]},"prevItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"},"nextItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"}},"content":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.\\n\\n\x3c!--truncate--\x3e\\n\\n## Uninstall global dependencies\\n\\nproto has supported [installing globals since v0.5](./proto-v0.5), but there\'s been no way to\\nuninstall an existing global, until now! In this release, we\'re introducing the\\n[`proto uninstall-global`](/docs/proto/commands/uninstall-global) command, which will do just that!\\nThe API is exactly the same as its installation counter-part.\\n\\n```shell\\nproto install-global node prettier\\n\\n# On second thought, nevermind...\\nproto uninstall-global node prettier\\n```\\n\\n### WASM functions\\n\\nImplementing this command was rather straight forward, but most of the work went into supporting\\n[`install_global` and `uninstall_global`](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\nfunctions for WASM plugins, and then updating all existing plugins! For those of you writing your\\nown plugins, here\'s an example of what the Rust code looks like:\\n\\n```rust\\n#[plugin_fn]\\npub fn install_global(\\n Json(input): Json,\\n) -> FnResult> {\\n let result = exec_command!(inherit, \\"npm\\", [\\"install\\", \\"--global\\", &input.dependency]);\\n\\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\\n}\\n```\\n\\n### TOML setting\\n\\nWe\'ve also updated our TOML plugins to support uninstalling globals through the new\\n[`globals.uninstall-args`](/docs/proto/toml-plugin#global-packages) setting. Hopefully the name is\\nself explanatory, but it\'s a list of arguments passed to the tool\'s binary, that\'ll uninstall the\\nglobal.\\n\\n```toml\\n# ...\\n\\n[globals]\\ninstall-args = [\\"install\\", \\"--global\\", \\"{dependency}\\"]\\nuninstall-args = [\\"uninstall\\", \\"--global\\", \\"{dependency}\\"]\\n```\\n\\n## Improved WASM documentation\\n\\nWith each release we\'re slowly stabilizing the WASM and TOML APIs for an official v1 release (which\\nis soon), and with this, it requires more documentation. As part of this release, we\'ve done a giant\\npolish pass on our WASM documentation, and have included the following sections:\\n\\n- [Virtual paths](/docs/proto/wasm-plugin#virtual-paths)\\n- [Host environment](/docs/proto/wasm-plugin#host-environment)\\n- [Host functions](/docs/proto/wasm-plugin#host-functions)\\n- [Tool ID and context](/docs/proto/wasm-plugin#tool-id-and-context)\\n- [Installing and uninstalling globals](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.15.0) for a full list\\nof changes.\\n\\n- Major WASM API improvements, including backwards incompatible changes."},{"id":"moon-v1.12","metadata":{"permalink":"/blog/moon-v1.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx","source":"@site/blog/2023-08-21_moon-v1.12.mdx","title":"moon v1.12 - Task improvements: extending, interactive, and more","description":"In this release, we focused heavily on improving tasks, its configuration, and related systems.","date":"2023-08-21T00:00:00.000Z","formattedDate":"August 21, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":3.32,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.12","title":"moon v1.12 - Task improvements: extending, interactive, and more","authors":["milesj"],"tags":["tasks","inheritance"],"image":"./img/moon/v1.12.png"},"prevItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"},"nextItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"}},"content":"In this release, we focused heavily on improving tasks, its configuration, and related systems.\\n\\n\x3c!--truncate--\x3e\\n\\n## Extending sibling or inherited tasks\\n\\nThree months ago, we posted an\\n[RFC on how to support task extending / task variants](https://github.com/moonrepo/moon/issues/849).\\nOn paper this doesn\'t sound like a hard problem to solve, but internally it would of been an uphill\\nbattle to implement. Thanks to previous releases from the past few months, and the rewrite of the\\nproject graph, task builder, and more, this implementation was a breeze. To finalize the RFC, we\\nwent with option 2, by adding a new `extends` field to task configurations.\\n\\nWith this new addition, we can now rewrite this old configuration, which was needlessly\\nrepetitive...\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n command: \'eslint . --fix\'\\n local: true\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n```\\n\\nInto the following configuration.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n extends: \'lint\'\\n args: \'--fix\'\\n local: true\\n```\\n\\nWe\'re very happy with this solution, as it\'s far more readable, maintainable, and doesn\'t introduce\\nyet another paradigm to learn. Our goal was to be as familiar as possible, while providing extensive\\nfunctionality behind the scenes, which we believe to have achieved.\\n\\nSome other interesting facts around task extending:\\n\\n- When extending a task, [merge strategies](/docs/concepts/task-inheritance#merge-strategies) are\\n applied in a similar fashion to inheritance.\\n- Inherited tasks can be extended from by project-level tasks.\\n- It\'s possible to create multiple extended chains.\\n\\n## Configure tasks as interactive\\n\\nSix months ago, we added support for [interactive tasks in v0.24](./v0.24#interactive-tasks), but\\nonly if certain conditions were met: if only 1 target is running, they are considered interactive,\\nor if the `--interactive` option was passed to [`moon run`](/docs/commands/run). However, we believe\\nit nice to support interactive tasks through task configuration directly, but it required some\\nthought into how this would work within the dependency graph and pipeline, as only 1 task can\\ninteract with stdin at a time.\\n\\nWe solved this problem by reworking our dependency graph so that interactive tasks are isolated from\\nother actions in the graph, and are not run in parallel with other actions. This will result in\\nlonger dependency chains, but results in a working stdin solution.\\n\\nTo mark a task as interactive, enable the [`options.interactive`](/docs/config/project#interactive)\\nsetting.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n init:\\n command: \'init-app\'\\n options:\\n interactive: true\\n```\\n\\n## Tokens in enviroment variables\\n\\nUp until now, [token functions and variables](/docs/concepts/token) were only supported in task\\ncommands, args, inputs, and outputs, but not environment variables... why? Honestly, there was no\\nreal reason they weren\'t supported, it simply never crossed our mind! But thanks to requests from\\nthe community, both token functions and variables are now supported in task\\n[`env`](/docs/config/project#env-1).\\n\\nThis is great for propagating moon values to other systems. For example, say you want to use moon\\nproject names for Sentry, keeping a 1:1 mapping.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n start:\\n command: \'run-server\'\\n env:\\n SENTRY_PROJECT: \'$project\'\\n```\\n\\nIf you\'re familiar with tokens, you may be asking yourself, \\"How do token functions work since they\\nexpand to a list of paths?\\" That\'s a great question! When token functions are used in an environment\\nvariable, like `@group(sources)`, the list of paths will be joined with a comma (`,`).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n # ...\\n env:\\n SRCS: \'@group(sources)\'\\n```\\n\\nSince the environment variable is simply a string, you could parse it with your language of choice\\nto extract the list of paths.\\n\\n```js\\nconst paths = process.env.SRCS.split(\',\');\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.12.0) for a full list\\nof changes.\\n\\n- Added git worktree support.\\n- Updated task `outputs` to support negated globs.\\n- Will now log a warning to the console if a configuration file uses the `.yaml` extension."},{"id":"proto-v0.14","metadata":{"permalink":"/blog/proto-v0.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx","source":"@site/blog/2023-08-11_proto-v0.14.mdx","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","description":"With this release, we\'ve finished our migration to a WASM based plugin architecture.","date":"2023-08-11T00:00:00.000Z","formattedDate":"August 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.14","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"},"nextItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"}},"content":"With this release, we\'ve finished our migration to a WASM based plugin architecture.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full migration to WASM\\n\\nIn [our last release](./proto-v0.13), we migrated the Bun, Deno, and Go plugins to WASM. In this\\nrelease, we\'re excited to announce that we have completed our WASM migration by also converting\\nNode.js (and npm, etc) and Rust to WASM plugins. We\'ve also updated our TOML plugin layer to use\\nWASM under the hood.\\n\\nWith this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the\\nconsumers, to build your own plugins! We have plans for additional APIs in the next release,\\nprimarily installing and uninstall globals, and a hooks system, so look forward to that! To learn\\nmore about our official plugins, check out the their repositories!\\n\\n- [Bun](https://github.com/moonrepo/bun-plugin)\\n- [Deno](https://github.com/moonrepo/deno-plugin)\\n- [Go](https://github.com/moonrepo/go-plugin)\\n- [Node](https://github.com/moonrepo/node-plugin)\\n- [Rust](https://github.com/moonrepo/rust-plugin)\\n- [Schema](https://github.com/moonrepo/schema-plugin)\\n\\nThis release may seem light, but we\\n[rewrote the entire core](https://github.com/moonrepo/proto/pull/161) from the ground up to support\\na pure plugin based architecture. This was a lot of work, but our implementation is far easier to\\nwork with, and more robust. As part of this process, we improved version and range handling, archive\\nunpacking, and much more!\\n\\n> Because of the rewrite, we may have introduced a few bugs. Please report any issues!\\n\\n## Breaking changes for TOML plugins\\n\\nIn preparation for the next release, and as clean up during the rewrite, we\'ve made a few breaking\\nchanges to the TOML schema, primarily around global handling. To start, this old code:\\n\\n```toml\\n[install]\\nglobals-dir = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\nglobal-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nCan now be rewritten as:\\n\\n```toml\\n[globals]\\nlookup-dirs = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\ninstall-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nAnd lastly, the `install.unpack` setting has been removed. We believe our installation layer is\\nsmart enough to unpack or move files automatically.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.14.0) for a full list\\nof changes.\\n\\n- Versions defined in `.prototools` must be fully-qualified semantic versions. Partial versions\\n (missing patch or minor) are no longer supported. This may change in the future based on feedback.\\n- Tool and plugin names must now be in kebab-case.\\n- Node\\n - Yarn 2+ is now installed using `@yarnpkg/cli-dist`. We no longer downgrade to the latest v1.\\n - Will no longer detect a version from `engines` in `package.json`.\\n- Rust\\n - Will now detect a version/channel from `rust-toolchain.toml` and `rust-toolchain`."},{"id":"moon-v1.11","metadata":{"permalink":"/blog/moon-v1.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx","source":"@site/blog/2023-07-31_moon-v1.11.mdx","title":"moon v1.11 - Next-generation project graph","description":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of","date":"2023-07-31T00:00:00.000Z","formattedDate":"July 31, 2023","tags":[{"label":"project-graph","permalink":"/blog/tags/project-graph"},{"label":"project","permalink":"/blog/tags/project"}],"readingTime":4.095,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.11","title":"moon v1.11 - Next-generation project graph","authors":["milesj"],"tags":["project-graph","project"],"image":"./img/moon/v1.11.png"},"prevItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"},"nextItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"}},"content":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of\\nmoon.\\n\\n\x3c!--truncate--\x3e\\n\\n## New project graph\\n\\nOne of the first features that was built for moon was the project graph, as this was required to\\ndetermine relationships between tasks and projects. Its initial implementation was rather simple, as\\nit was a basic directed acyclic graph (DAG). However, as moon grew in complexity, so did the project\\ngraph, and overtime, it has accrued a lot of cruft and technical debt.\\n\\nOne of the biggest pain points has been the project graph cache, and correctly invalidating the\\ncache for all necessary scenarios. If you\'ve been using moon for a long time, you\'re probably aware\\nof all the hot fixes and patches that have been released. Another problem with the cache, is that it\\nincluded hard-coded [file system paths](https://github.com/moonrepo/moon/issues/937) and\\n[environment variables](https://github.com/moonrepo/moon/issues/896), both of which would not\\ninvalidate the cache when changed.\\n\\nWe felt it was time to rebuild the project graph from the ground up. Some of this work has already\\nlanded in [previous releases](./moon-v1.9#rewritten-task-inheritance).\\n\\n### Old implementation\\n\\nFor those of you who are interested in the technical details, here\'s a quick overview of how the old\\nproject graph worked. To start, the graph was composed around the following phases:\\n\\n- **Build** - Projects are loaded into the graph (nodes), relationships are linked (edges),\\n configurations are read, tasks are inherited, and platform/language rules are applied.\\n- **Expand** - In all tasks, token variables and functions are expanded/substituted, dependencies\\n are expanded (`^:deps`, etc), `.env` files are read (when applicable), so on and so forth.\\n- **Validate** - Enforces project and task boundaries and constraints.\\n\\nThis is quite a lot of work, and it was all done in _a single pass_. What this means is that for\\neach project loaded into the graph, we would recursively build -> expand -> validate, until all\\nprojects have been loaded, synchronously at once in the same thread. Because this is a rather\\nexpensive operation, the project graph cache was introduced to avoid having to do this work on every\\nrun.\\n\\nMakes sense, right? For the most part yes, but there is a core problem with the solution above, and\\nif you\'ve noticed it already, amazing! The problem is that out of these 3 phases, only the build\\nphase is truly cacheable, as the expand and validate phases are far too dynamic and dependent on the\\nenvironment. This means that the cache is only partially effective, and in some cases, entirely\\nbroken.\\n\\nAnother unrelated problem with this solution, is that because everything is built in a single pass,\\nadvanced functionality that requires multiple passes is not possible and has been stuck on the\\nbacklog.\\n\\n### New implementation\\n\\nFor backwards compatibility, the new project graph works in a similar manner, but has none of the\\nshortcomings of the old implementation (hopefully). To start, the new project graph still has the\\nsame 3 phases, but they are _no longer processed in a single pass_, instead...\\n\\nThe build phase is now asynchronous, enabling deeper interoperability with the rest of the\\nasync-aware codebase. However, the critical change is that the project graph cache is now written\\n_after_ the build phase (and read _before_), instead of after the entire graph being generated.\\n\\n> The new cache file is `.moon/cache/states/partialProjectGraph.json`, and is named partial because\\n> tasks have not been expanded. Use `moon project-graph --json` for a fully expanded graph.\\n\\nThe expand phase has changed quite a bit. Instead of expanding everything at once, projects and\\ntasks are only expanded when they are needed. For example, if only running a single target, we\'ll\\nnow only expand that project and task, instead of _everything_ in the graph. With this change, you\\nshould potentially see performance increases, unless you\'re using `moon ci` or `moon check --all`.\\n\\nAnd lastly, validation is still the same, but has been reworked so that we can easily extend it with\\nmore validation rules in the future.\\n\\n### Unlocked features\\n\\nWith these changes to building and expanding, we\'ve unlocked a few new features that were not\\npossible before.\\n\\n- Task dependencies can now reference tag based targets. For example, say we want to build all React\\n projects before starting our application.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n deps:\\n - \'#react:build\'\\n```\\n\\n- Task commands and arguments will now substitute environment variables, by first checking `env`,\\n then those from the system.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'docker build --build-arg pkg=$PKG_NAME\'\\n env:\\n PKG_NAME: \'foo-bar\'\\n```\\n\\n- Project dependencies can now mark relationships as `build`. This is only applicable for languages\\n that support build dependencies, like Rust.\\n\\n```yaml title=\\"moon.yml\\"\\ndependsOn:\\n - id: \'foo\'\\n scope: \'build\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.11.0) for a full list\\nof changes.\\n\\n- Identifiers (project names, file groups, etc) can now be prefixed with underscores (`_`).\\n- Added Poetry detection support for Python projects.\\n- Added an `experiments` setting to `.moon/workspace.yml`."},{"id":"proto-v0.13","metadata":{"permalink":"/blog/proto-v0.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx","source":"@site/blog/2023-07-21_proto-v0.13.mdx","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","description":"With this release, we\'re embracing WASM even further.","date":"2023-07-21T00:00:00.000Z","formattedDate":"July 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2.195,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.13","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"},"nextItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"}},"content":"With this release, we\'re embracing WASM even further.\\n\\n\x3c!--truncate--\x3e\\n\\n## Core migration to WASM\\n\\nNow that WASM plugin support is up and running, we\'ve hit a non-ideal situation where we have\\nmultiple competing implementations for \\"tools\\" in proto. We currently have 3 different approaches:\\n\\n- Tools implemented in Rust and built into proto\'s core.\\n- TOML based plugins, with a simple Rust based wrapper.\\n- WASM based plugins.\\n\\nThis is far too many implementations to support, and makes it extremely difficult to add new\\nfeatures for tools, as it affects all 3. To remedy this situation, we\'ve decided to migrate all core\\ntools to WASM plugins, and remove the Rust based implementations. The core of proto and its CLI will\\nstill be Rust, but will be slowly migrated into a truly pluggable architecture.\\n\\nTo test drive and experiment with this solution, we\'ve migrated\\n[Bun](https://github.com/moonrepo/bun-plugin), [Deno](https://github.com/moonrepo/deno-plugin), and\\n[Go](https://github.com/moonrepo/go-plugin) into WASM plugins, and starting with this release, they\\nare purely powered by WASM and have been removed entirely from the Rust implementation.\\n\\nIn the next release, we hope to migrate Node.js and Rust as well. And in a future release, the TOML\\nplugins will be compiled into\\n[`.wat` files](https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format)\\nand loaded as WASM plugins. From here, we will have a single tool implementation, and can implement\\nsome really exciting features!\\n\\n## New `github:` plugin configuration\\n\\nAlongside the `source:` configuration strategy, plugins can now be configured with the `github:`\\nstrategy to locate WASM files from GitHub releases. For example, the `bun_plugin.wasm` file will be\\ndownloaded from our\\n[`bun-plugin`\'s latest release](https://github.com/moonrepo/bun-plugin/releases).\\n\\n[Learn more about this new locator scope!](/docs/proto/plugins#github)\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nbun = \\"github:moonrepo/bun-plugin\\"\\n```\\n\\n> Bun support is built into proto, there is merely an example!\\n\\n## New `proto plugins` commands\\n\\nWith the advent of plugins, we thought it would be nice to know which plugins are actually\\nconfigured and in use, without having to manually search config files across the file system, and as\\nsuch, have added a new [`proto plugins`](/docs/proto/commands/plugins) command.\\n\\nThis command is simple. It will list all plugins that are currently configured for the current\\nproject, by loading all `.prototools` files up the tree, and loading the user\\n`~/.proto/config.toml`.\\n\\n```shell\\n$ proto plugins\\nbun - Bun\\n GitHub: moonrepo/bun-plugin\\n Tag: latest\\n\\ndeno - Deno\\n GitHub: moonrepo/deno-plugin\\n Tag: latest\\n\\ngo - Go\\n GitHub: moonrepo/go-plugin\\n Tag: latest\\n```\\n\\n[Learn more about this new command!](/docs/proto/commands/plugins)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.13.0) for a full list\\nof changes.\\n\\n- Added documentation for writing [unit tests for WASM plugins](/docs/proto/wasm-plugin#unit-tests).\\n- Updated `proto clean` and `proto use` to load and merge all `.prototools` from the current\\n directory and upwards.\\n- Many WASM API improvements."},{"id":"moon-v1.10","metadata":{"permalink":"/blog/moon-v1.10","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx","source":"@site/blog/2023-07-10_moon-v1.10.mdx","title":"moon v1.10 - Mid-year quality of life improvements","description":"Instead of launching a large feature this release, we\'re focusing on quality of life and developer","date":"2023-07-10T00:00:00.000Z","formattedDate":"July 10, 2023","tags":[{"label":"quality","permalink":"/blog/tags/quality"},{"label":"life","permalink":"/blog/tags/life"},{"label":"qol","permalink":"/blog/tags/qol"},{"label":"ignore","permalink":"/blog/tags/ignore"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"debug","permalink":"/blog/tags/debug"}],"readingTime":3.6,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.10","title":"moon v1.10 - Mid-year quality of life improvements","authors":["milesj"],"tags":["quality","life","qol","ignore","hasher","vcs","ci","debug"],"image":"./img/moon/v1.10.png"},"prevItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"},"nextItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nInstead of launching a large feature this release, we\'re focusing on quality of life and developer\\nexperience improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Quality improvements\\n\\nIn the past 6 months, we\'ve released over 16 versions of moon, with our official v1.0 release among\\nthem. This is extremely impressive and we\'re very proud of the progress we\'ve made. To continue this\\ntrend, we\'ll be starting a new initiative that will land quality of life improvements (instead of\\nmajor features) every 6 months, starting with this release!\\n\\n### Potential breaking changes\\n\\nWhile APIs haven\'t changed, we have introduced some fixes for edge case that could be considered\\nbreaking, but for the most part, these changes probably won\'t affect you. With that being said...\\n\\nThe first fix is that tasks configured with the same `outputs` location (including glob overlap)\\nwill now error. This is extremely problematic for caching and hydration, as multiple tasks all\\nwriting to the same output will inflate the tarball, and cause unwanted side effects. To demonstrate\\nthis, the following is now an error:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'foo build\'\\n outputs:\\n - \'dist\'\\n\\n compile:\\n command: \'bar compile\'\\n outputs:\\n - \'dist\'\\n```\\n\\nThe other fix, which primarily applies to [`moon ci`][ci] and [`moon check`](/docs/commands/check),\\nis that a target will be skipped if one of its dependencies failed or has also been skipped.\\nPreviously the target would attempt to run and most likely fail since it relied on artifacts from\\nits dependencies (which don\'t exist). Another benefit of this change is that runs should be much\\nfaster, as we\'re not wasting time running targets that we know will fail, which is great for CI.\\n\\n### Ignore hashing input files\\n\\nWe\'re introducing 2 new settings to [`.moon/workspace.yml`](/docs/config/workspace) that\'ll provide\\nmore control over the hashing flow, [`hasher.ignorePatterns`](/docs/config/workspace#ignorepatterns)\\nand [`hasher.ignoreMissingPatterns`](/docs/config/workspace#ignoremissingpatterns).\\n\\nThe `ignorePatterns` setting can be used to entirely ignore a file (using glob patterns) from being\\nhashed, and in turn, exclude it as an input source. For example, say we want to ignore all image\\nfiles.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nhasher:\\n ignorePatterns:\\n - \'**/*.{png,svg}\'\\n```\\n\\nThe `ignoreMissingPatterns` setting pairs with\\n[`hasher.warnOnMissingInputs`](/docs/config/workspace#warnonmissinginputs). When enabled, moon will\\nlog a warning to the terminal that an input is missing. This is useful for uncovering\\nmisconfigurations, but can be quite noisy when inputs are truly optional. This new setting can be\\nused to filter these warnings.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nhasher:\\n warnOnMissingInputs: true\\n ignoreMissingPatterns:\\n - \'**/.eslintrc.*\'\\n - \'**/*.config.*\'\\n```\\n\\n### Customize base and head revision\\n\\nThe [`moon ci`][ci] command has always supported customizing the Git base and head revisions through\\nthe `--base` and `--head` options respectively. This was a requirement for running CI effectively,\\nby comparing across branches or commits. However, the [`moon run`][run] did not support this, as\\nthis command was designed to primarily be run locally, but it turns out, y\'all are using it in CI\\ntoo!\\n\\nTo improve the effectiveness of `moon run` in CI, we\'ve made the following improvements, all of\\nwhich require the `--remote` option to be passed.\\n\\n- Added support for `MOON_BASE` and `MOON_HEAD` environment variables, for customizing the base and\\n head revisions respectively (also supported in `moon ci`). If not defined, will use the default\\n branch and `HEAD`.\\n- When the current branch is the default branch, the base revision will be the previous commit.\\n Useful for commits landing on master/main.\\n\\n## New debugging a task guide\\n\\nRunning tasks is the most common way to interact with moon, so what do you do when your task isn\'t\\nworking as expected? Diagnose it of course! However, diagnosing the root cause of a broken task can\\nbe quite daunting:\\n\\n- Is configuration wrong?\\n- What about inheritance? Or merging?\\n- Is the task platform correct?\\n- Were tokens expanded correctly?\\n- What about variable substitution?\\n- So on and so forth...\\n\\nTo help answer these questions, we\'re excited to publish an\\n[in-depth guide for debugging a task](/docs/guides/debug-task)! These steps are the same steps we\\nuse internally to diagnose reported issues, or help the Discord community. We hope you find this\\nguide extremely beneficial!\\n\\n
\\n
\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.10.0) for a full list\\nof changes.\\n\\n- Updated [`moon ci`][ci] to include a summary of all failed actions.\\n- Updated the run report to include stderr/stdout for all attempts.\\n\\n[ci]: /docs/commands/ci\\n[run]: /docs/commands/run"},{"id":"proto-v0.12","metadata":{"permalink":"/blog/proto-v0.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx","source":"@site/blog/2023-07-07_proto-v0.12.mdx","title":"proto v0.12 - Experimental WASM plugins","description":"After months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.","date":"2023-07-07T00:00:00.000Z","formattedDate":"July 7, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.885,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.12","title":"proto v0.12 - Experimental WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"},"nextItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nAfter months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.\\n\\n\x3c!--truncate--\x3e\\n\\n## WASM plugins\\n\\nThree months ago, we [published an RFC](https://github.com/moonrepo/proto/issues/73) for supporting\\nplugins in proto. Plugins are a must, as they allow consumers to easily extend proto with additional\\ntools, instead of them being built into proto core (which is very time consuming).\\n\\nTwo months ago, we released support for [TOML plugins](/docs/proto/toml-plugin). These are very\\nsimple plugins powered by static configuration files. They\'re great for simple tools like CLIs and\\npre-built languages, as everything is powered by static HTTP URLs and file names. However, sometimes\\nyou need dynamic control...\\n\\nAnd after 2 months of development, and help from the [Extism team](https://extism.org/), we\'re\\nexcited to announce initial support for WASM plugins. WASM is a portable binary format, with\\nsandboxed access to the file system (via WASI), and the ability to execute processes and fetch URLs.\\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\\nTypeScript, and more. This removes the requirement of writing Rust and contributing to proto\\ndirectly!\\n\\n
\\n
\\n\\n### Using WASM plugins\\n\\nOnce the `.wasm` file is publicly available for download, we can configure it as a plugin in\\n[`.prototools`](/docs/proto/config).\\n\\n```toml\\n[plugins]\\nmy-plugin = \\"source:https://domain.com/path/to/wasm/plugin.wasm\\"\\n```\\n\\nAnd execute all `proto` commands using the configured plugin identifier.\\n\\n```shell\\nproto install my-plugin\\n```\\n\\n### Example implementation\\n\\nThe official guide above walks you through creating a plugin, but to demonstrate the power of WASM\\nplugins, here\'s an example function that defines parameters for downloading and installing Node.js.\\nThis is written in Rust and using Extism\'s official PDK.\\n\\n```rust\\n#[plugin_fn]\\npub fn download_prebuilt(\\n Json(input): Json,\\n) -> FnResult> {\\n let version = input.env.version;\\n let arch = input.env.arch;\\n\\n let prefix = match input.env.os {\\n HostOS::Linux => format!(\\"node-v{version}-linux-{arch}\\"),\\n HostOS::MacOS => format!(\\"node-v{version}-darwin-{arch}\\"),\\n HostOS::Windows => format!(\\"node-v{version}-win-{arch}\\"),\\n other => {\\n return Err(PluginError::UnsupportedPlatform {\\n tool: NAME.into(),\\n platform: format!(\\"{:?}\\", other),\\n })?;\\n }\\n };\\n\\n let filename = if input.env.os == HostOS::Windows {\\n format!(\\"{prefix}.zip\\")\\n } else {\\n format!(\\"{prefix}.tar.xz\\")\\n };\\n\\n Ok(Json(DownloadPrebuiltOutput {\\n archive_prefix: Some(prefix),\\n download_url: format!(\\"https://nodejs.org/dist/v{version}/{filename}\\"),\\n download_name: Some(filename),\\n checksum_url: Some(format!(\\"https://nodejs.org/dist/v{version}/SHASUMS256.txt\\")),\\n ..DownloadPrebuiltOutput::default()\\n }))\\n}\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.12.0) for a full list\\nof changes."},{"id":"moon-v1.9","metadata":{"permalink":"/blog/moon-v1.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx","source":"@site/blog/2023-06-26_moon-v1.9.mdx","title":"moon v1.9 - VCS hooks management and improved task inheritance","description":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete","date":"2023-06-26T00:00:00.000Z","formattedDate":"June 26, 2023","tags":[{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"git","permalink":"/blog/tags/git"},{"label":"hooks","permalink":"/blog/tags/hooks"},{"label":"task","permalink":"/blog/tags/task"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":2.625,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.9","title":"moon v1.9 - VCS hooks management and improved task inheritance","authors":["milesj"],"tags":["vcs","git","hooks","task","inheritance"],"image":"./img/moon/v1.9.png"},"prevItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"},"nextItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"}},"content":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete\\nrewrite of our task inheritance layer.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for VCS hooks\\n\\nIn our last release, we added support for [code ownership](./moon-v1.8), to better help teams manage\\ntheir code review and approval workflows. To continue this trend of \\"features all companies require\\nbut don\'t have a good solution for\\", we\'re adding support for VCS hooks,\\n[starting with Git](https://git-scm.com/docs/githooks).\\n\\nIf you\'re unfamiliar with Git hooks, they\'re a mechanism for running scripts before or after certain\\nGit events. For example, before a commit is added, before pushing, or after merging. Hooks can be\\nused for such situations as:\\n\\n- Ensuring commit messages abide by a certain format.\\n- Ensuring affected project\'s source code pass linting and formatting checks.\\n- Validating configuration files.\\n- And much more!\\n\\n:::info\\n\\nFor more information, view our official in-depth [VCS hooks guide](/docs/guides/vcs-hooks)!\\n\\n:::\\n\\n### New `vcs` settings\\n\\nTo support hooks, we\'re introducing the `vcs.hooks` and `vcs.syncHooks` settings to\\n[`.moon/workspace.yml`](/docs/config/workspace). The former is where you configure the list of\\ncommands to run, grouped by hook type.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nvcs:\\n hooks:\\n pre-commit:\\n - \'pre-commit run\'\\n - \'moon run :lint --affected\'\\n```\\n\\nThe latter will automatically create and sync hooks with the local VCS checkout, enabling them going\\nforward. [Learn more about enabling hooks](/docs/guides/vcs-hooks#enabling-hooks), and choosing the\\napproach that works best for you or your team!\\n\\n### New `moon sync hooks` command\\n\\nAlthough moon can [automatically create](/docs/config/workspace#synchooksonrun) hooks when running a\\ntarget, this may be undesirable or abrasive for some developers. Instead, we also support an opt-in\\nsolution through the [`moon sync hooks`](/docs/commands/sync/hooks) command, which will manually\\ncreate the hooks.\\n\\n```shell\\n$ moon sync hooks\\n```\\n\\n## Rewritten task inheritance\\n\\nOne of the most complicated systems in moon is the task inheritance layer. On the surface, it sounds\\nrather simple, but internally it was very complicated. For common use cases, it worked very well,\\nbut for advanced use cases, how a task was \\"inherited and merged\\" was sometimes undefined behavior.\\n\\nOver the past year, we\'ve introduced many new features, such as\\n[implicit dependencies and inputs](./v0.23), [tag-based task inheritance](./moon-v1.2),\\n[project-level environment variables](./v0.23#project-level-environment-variables),\\n[custom languages](./v0.25#custom-project-language) and\\n[platforms](./v0.24#project-level-task-platform), and so much more. Each of these new features would\\nthrow yet another facet to be aware of during the task inheritance model, and over the past year, it\\nhas become rather unwieldy.\\n\\nTo rectify this situation before it becomes worse, we rewrote our\\n[project, task](https://github.com/moonrepo/moon/pull/921), and\\n[task inheritance](https://github.com/moonrepo/moon/pull/939) layers from the ground-up using a new\\nbuilder pattern, including writing all new unit tests, to properly and efficiently account for all\\nedge cases.\\n\\nGoing forward, tasks should be far more accurate and deterministic. If you encounter any weirdness,\\nit\'s either a bug/edge case that was rectified (and is no longer allowed), or a bug/edge case not\\naccounted for in our current unit test suite. Please report them either way!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.9.0) for a full list of\\nchanges.\\n\\n- Added `--clean` and `--force` flags to `moon sync codeowners` command.\\n- Updated `moon init` to detect VCS providers and resolve fully-qualified tool versions.\\n- Improved VCS file handling, caching, and performance."},{"id":"proto-v0.11","metadata":{"permalink":"/blog/proto-v0.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-25_proto-v0.11.mdx","source":"@site/blog/2023-06-25_proto-v0.11.mdx","title":"proto v0.11 - New shims and better logging","description":"This is a small release that improves shims and logs.","date":"2023-06-25T00:00:00.000Z","formattedDate":"June 25, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"shim","permalink":"/blog/tags/shim"},{"label":"logging","permalink":"/blog/tags/logging"}],"readingTime":1.04,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.11","title":"proto v0.11 - New shims and better logging","authors":["milesj"],"tags":["proto","shim","logging"]},"prevItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"},"nextItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"}},"content":"This is a small release that improves shims and logs.\\n\\n\x3c!--truncate--\x3e\\n\\n## New and improved shims\\n\\nThe core facet of proto is our shims found at `~/.proto/bin`. They exist purely to re-route tool\\nexecutions internally to proto, so that we can detect the correct version of these tools to run.\\nHowever, maintaining and creating these shims has historically been very complicated. So we chose to\\nrewrite them from the ground-up!\\n\\nAll tools should continue to function exactly as they did before, if not better. Furthermore,\\nbecause of this new shim layer, we\'re now able to create what we call \\"secondary shims\\", like\\n[`bunx` for Bun](https://bun.sh/docs/cli/bunx), `pnpx` for pnpm, and `yarnpkg` for Yarn.\\n\\n## Better logging\\n\\nproto has supported logging since its initial release behind the `PROTO_LOG` environment variable.\\nHowever, this variable wasn\'t heavily documented, nor easily discoverable. So as an alternative, we\\nnow support a global `--log` option, which can be passed to any `proto` command.\\n\\n```shell\\n$ proto install node --log trace\\n```\\n\\nOn top of this, we also ran an audit of all our log calls, to improve messaging, include additional\\ninformation, rework applicable levels, and more. They should be far more readable!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.11.0) for a full list\\nof changes."},{"id":"moon-v1.8","metadata":{"permalink":"/blog/moon-v1.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx","source":"@site/blog/2023-06-12_moon-v1.8.mdx","title":"moon v1.8 - Code owners and shared configuration","description":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code","date":"2023-06-12T00:00:00.000Z","formattedDate":"June 12, 2023","tags":[{"label":"source","permalink":"/blog/tags/source"},{"label":"code","permalink":"/blog/tags/code"},{"label":"owners","permalink":"/blog/tags/owners"},{"label":"ownership","permalink":"/blog/tags/ownership"}],"readingTime":3.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.8","title":"moon v1.8 - Code owners and shared configuration","authors":["milesj"],"tags":["source","code","owners","ownership"],"image":"./img/moon/v1.8.png"},"prevItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"},"nextItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"}},"content":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code\\nownership, and sharing task configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for code ownership\\n\\nAn important workflow for companies of any size is reviewing code, and ensuring the right people are\\nreviewing and approving that code. This is especially true for large companies with hundreds of\\ndevelopers, or many distinct teams working in a single codebase.\\n\\nPopular VCS providers like [GitHub](https://github.com/), [GitLab](https://about.gitlab.com/), and\\n[Bitbucket](https://bitbucket.org/product/) provide built-in features to handle such workflows,\\naptly named code owners. They all achieve this through a similar mechanism, a single `CODEOWNERS`\\nfile that maps file system paths to owners (users, teams, groups, etc). These owners are then\\nrequired to approve a pull/merge request because it can be merged into the base branch.\\n\\n:::info\\n\\nFor more information, view our official in-depth [code owners guide](/docs/guides/codeowners)!\\n\\n:::\\n\\n### Generate a `CODEOWNERS`\\n\\nManaging the `CODEOWNERS` file manually can be a tedious task, especially when you have hundreds of\\nprojects. To help with this, moon can generate the `CODEOWNERS` file for you,\\n[based on project owners](#new-project-owners-setting), formatted to your VCS provider of choice.\\nThis helps to avoid an out-of-date ownership file!\\n\\nWe\'re introducing a few new workspace settings to handle this, the first is\\n[`codeowners`](/docs/config/workspace#codeowners), which enables and configure code ownership as a\\nwhole, and the second is [`vcs.provider`](/docs/config/workspace#provider), which determines the VCS\\nprovider to generate the file for (and unlocks future features).\\n\\n```yaml title=\\".moon/workspace.yml\\"\\ncodeowners:\\n syncOnRun: true\\n globalPaths:\\n \'*\': [\'@admins\']\\n\\nvcs:\\n manager: \'git\'\\n provider: \'github\'\\n```\\n\\nThe settings above will generate the following file:\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# (workspace)\\n* @admins\\n```\\n\\nWhile this looks very simple, it really shines once projects start adding their own granular code\\nownership. Continue reading for more information!\\n\\n### New project `owners` setting\\n\\nTo make use of code owners, you\'ll need to define an [`owners`](/docs/config/project#owners) setting\\nin a project\'s [`moon.yml`](/docs/config/project) file. This setting requires a list/map of owners\\n(contributors required to review) associated to file paths/patterns, relative from the current\\nproject\'s root.\\n\\n```yaml title=\\"packages/components/moon.yml\\"\\nowners:\\n paths:\\n \'src/\': [\'@frontend\', \'@design-system\']\\n \'*.config.js\': [\'@frontend-infra\']\\n \'*.json\': [\'@frontend-infra\']\\n```\\n\\nThese paths will then be prefixed with the project source when\\n[generating the `CODEOWNERS`](#generate-a-codeowners) file.\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# components\\n/packages/components/src/ @frontend @design-system\\n/packages/components/*.config.js @frontend-infra\\n/packages/components/*.json @frontend-infra\\n```\\n\\n### New `moon sync codeowners` command\\n\\nAlthough moon can [automatically generate](/docs/config/workspace#synconrun) the `CODEOWNERS` file\\nwhen running a target, there may be situations where this is disabled, or teams/developers would\\nlike to generate the file manually. To handle this, we\'re providing the\\n[`moon sync codeowners`](/docs/commands/sync/codeowners) command, which will trigger the generation\\nprocess.\\n\\n```shell\\n$ moon sync codeowners\\n```\\n\\n## Community-driven task configuration\\n\\nA powerful but often overlooked feature of moon is the ability to\\n[share and extend task configuration](/docs/guides/sharing-config) from remote sources. This is\\nextremely useful in...\\n\\n- Providing a single source of truth for configuration.\\n- Reducing task duplication across projects.\\n- Ensuring tasks are battle-tested and ready for use.\\n\\nThe other upside of this approach is that configuration can be _community-driven_! To support this\\nas a first-class feature, we\'re launching the\\n[`moon-configs` repository](https://github.com/moonrepo/moon-configs), a collection of task\\nconfigurations for popular programming languages, frameworks, libraries, and more! As of now, the\\nrepository is kind of empty, but we\'re hoping to grow it over time, so feel free to contribute!\\n\\nIf you\'re curious how this works in practice, we\'ll use our Rust configuration as an example. The\\nentire system is based around [tag inheritance](/docs/concepts/task-inheritance), where a project\\ncan inherit tasks from a remote source, and then extend or override them as needed. For example,\\ncreate the tag-based config:\\n\\n```yaml title=\\".moon/tasks/tag-rust.yml\\"\\nextends: \'https://raw.githubusercontent.com/moonrepo/moon-configs/master/rust/tasks-workspace.yml\'\\n```\\n\\nAnd then in Rust projects that you\'d like to inherit these tasks, add the following tags:\\n\\n```yaml title=\\"/moon.yml\\"\\ntags: [\'rust\']\\n```\\n\\nIt\'s as simple as that!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.8.0) for a full list of\\nchanges.\\n\\n- Added a new action to the graph, `SyncWorkspace`, that\'ll be used for workspace-level checks.\\n- Added `MOON_OUTPUT_STYLE` and `MOON_RETRY_COUNT` environment variables."},{"id":"moon-v1.7","metadata":{"permalink":"/blog/moon-v1.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx","source":"@site/blog/2023-05-30_moon-v1.7.mdx","title":"moon v1.7 - Next-generation configuration and errors","description":"With this release, we\'ve rewritten configuration from the ground up, improved error messages, and","date":"2023-05-30T00:00:00.000Z","formattedDate":"May 30, 2023","tags":[{"label":"config","permalink":"/blog/tags/config"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.7","title":"moon v1.7 - Next-generation configuration and errors","authors":["milesj"],"tags":["config","errors"],"image":"./img/moon/v1.7.png"},"prevItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"},"nextItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve rewritten configuration from the ground up, improved error messages, and\\nstarted work on diagnostics!\\n\\n\x3c!--truncate--\x3e\\n\\n## Configuration rewrite\\n\\nIf you\'ve ever written Rust before, you may be familiar with the state of configuration crates in\\nthe ecosystem. There\'s only 2 viable choices to choose from, and we\'ve been using 1 of them.\\nHowever, it\'s been a constant source of friction for our use cases, and didn\'t support features that\\nwe\'ve needed (built-in validation, file extending, and more).\\n\\nAfter researching our options, and attempting to contribute upstream, we decided to build our own\\nconfiguration solution, unique to moonrepo\'s projects. As such, we\'re excited to announce\\n[schematic](https://github.com/moonrepo/schematic), the most powerful configuration crate in the\\nRust ecosystem, with built-in features like:\\n\\n- Strict parsing with serde (serilization, deserialization).\\n- Code frames in errors (when applicable).\\n- Source file/URL extending.\\n- Partial file parsing and merging.\\n- Field-level merge strategies.\\n- Recursive validation.\\n- Dynamic default and env var values.\\n- And much more!\\n\\nWe\'ve spent the last few weeks building this crate from the ground up, and migrating the moon\\ncodebase to it. It\'s been quite a feat, but we\'re very excited for what it has to offer already, and\\nwhat\'s to come!\\n\\n### Strict parsing\\n\\nWhen we fail to parse a configuration file, we now include a descriptive message of the failure, and\\nthe file that failed to parse. Typically this will be for unknown fields and invalid value types.\\n\\n\\n\\n\\n> We hope this bubbles up typos and incorrectly nested settings!\\n\\n### Recursive validation\\n\\nPreviously when validation would fail, we\'d return on the first error and ignore subsequent errors.\\nThis is a non-ideal experience as you\'d have to constantly run `moon` commands until all validation\\nissues have been resolved.\\n\\nNow we aggregate all validation errors, even from deeply nested fields, and present them together.\\n\\n\\n\\n### What\'s next?\\n\\nSince [schematic](https://github.com/moonrepo/schematic) is very young, and it hasn\'t been tested\\nheavily in the ecosystem, we expect bugs and weird edge cases to popup. If you encounter any issues,\\nplease report them immediately so that we can fix them as soon as possible!\\n\\nWith that being said, we\'ll continue to improve parsing, error messages, and unique functionality,\\nlike code frames within errors. Here\'s an example for a basic JSON file.\\n\\n\\n\\n## Better errors\\n\\nYou may have noticed the errors in the screenshots above look quite different than what we\'ve\\nrendered until now, and you are correct. Going forward, all errors will be rendered by the wonderful\\nRust crate, [miette](https://crates.io/crates/miette).\\n\\nWe\'ve introduced this crate to handle _all_ errors and diagnostics within moon, not just\\nconfiguration. So expect a much better developer experience moving forward!\\n\\n\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.7.0) for a full list of\\nchanges.\\n\\n- Added support for npm lockfile v3 format."},{"id":"proto-v0.9","metadata":{"permalink":"/blog/proto-v0.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx","source":"@site/blog/2023-05-23_proto-v0.9.mdx","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","description":"This is a small release that provides many internal improvements.","date":"2023-05-23T00:00:00.000Z","formattedDate":"May 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"action","permalink":"/blog/tags/action"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":1.68,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.9","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","authors":["milesj"],"tags":["proto","action","github"],"image":"./img/proto/v0.9.png"},"prevItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"},"nextItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"}},"content":"This is a small release that provides many internal improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `moonrepo/setup-proto` GitHub action\\n\\nIf you\'re using proto in GitHub Actions and would love to automate the workflow as much as possible,\\nwell look no further, as we\'re introducing the\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) action. Thanks to\\n[Tom Davidson](https://github.com/tomdavidson) for the initial spike of work!\\n\\nThis action will automatically install the `proto` binary globally, and cache the toolchain at\\n`~/.proto` (be sure to run `proto use` to download and install tools).\\n\\n```yaml\\n# ...\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n - uses: \'moonrepo/setup-proto@v0\'\\n - run: \'proto use\'\\n```\\n\\n> If you\'re using moon, be sure to use\\n> [moonrepo/setup-moon](https://github.com/moonrepo/setup-moon-action) instead.\\n\\n## Added `install.unpack` to TOML plugin\\n\\nOur [TOML plugins](./proto-v0.7#toml-plugins) have been quite popular, and the community has been\\nusing them to much success. However, the plugin assumed that all downloaded files are archives (tar,\\nzip) and will attempt to unpack them based on file extension. This is not always the case, as some\\ndownloads are just raw executables.\\n\\nBecause of this, unpacking would sometimes fail, or we\'d be unable to extract the correct file\\nextension. To work around this limitation, we\'re introducing a new setting, `install.unpack`, that\\ncontrols whether the downloaded file should be unpacked or not. By default this setting is `true`.\\n\\nHere\'s an example using [moon](/moon).\\n\\n```toml\\n# ...\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\nunpack = false\\n```\\n\\n## Initial support for `node-gyp`\\n\\nThe [`node-gyp` binary](https://github.com/nodejs/node-gyp) is required for building Node.js native\\naddons, and was previously not supported in proto. We will now create a `node-gyp` binary in\\n`~/.proto/bin` when the `npm` tool is installed. Why npm? Because `node-gyp` comes packaged with npm\\ninstead of Node.js... for some reason.\\n\\nWith that being said, this is currently experimental, as we haven\'t tested it thoroughly, and are\\nunaware of all the possible edge cases. So keep that in mind!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.9.0) for a full list\\nof changes."},{"id":"moon-v1.6","metadata":{"permalink":"/blog/moon-v1.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx","source":"@site/blog/2023-05-15_moon-v1.6.mdx","title":"moon v1.6 - Persistent tasks and task extending RFC","description":"In this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending","date":"2023-05-15T00:00:00.000Z","formattedDate":"May 15, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"rfc","permalink":"/blog/tags/rfc"},{"label":"log","permalink":"/blog/tags/log"}],"readingTime":3.155,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.6","title":"moon v1.6 - Persistent tasks and task extending RFC","authors":["milesj"],"tags":["tasks","rfc","log"],"image":"./img/moon/v1.6.png"},"prevItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"},"nextItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nIn this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending\\ntasks.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Task extending/variants\\n\\nBefore we dive into this release, we want to briefly talk about a new RFC that we\'re looking for\\nfeedback on, [task extending/variants](https://github.com/moonrepo/moon/issues/849). This is a\\nfeature that has been top-of-mind since moon\'s inception, but we haven\'t had the foundation in place\\nto support it, nor what the API should look like.\\n\\nThe gist of the RFC is that we want to support tasks that extend other tasks with additional\\narguments. This is a common workflow with npm scripts:\\n\\n```json\\n{\\n \\"scripts\\": {\\n \\"lint\\": \\"eslint .\\",\\n \\"lint:fix\\": \\"npm run lint --fix\\"\\n }\\n}\\n```\\n\\nAs consumers of moon, we\'d appreciate any feedback on the RFC before we move forward!\\n\\n
\\n
\\n\\n## Persistent tasks\\n\\nTasks that never complete, like servers and watchers, are known as persistent tasks. Historically we\\nhad support for these kinds of tasks through the [`local`](/docs/config/project#local) setting in\\n[`moon.yml`](/docs/config/project). This setting would modify the task for continuous execution by\\ndisabling caching, streaming output, and not running in CI.\\n\\nWhile this worked for the most part, there was one scenario that was still problematic, and that was\\nrunning multiple persistent tasks in parallel. Depending on the task dependency chain, sometimes\\nthese tasks would _not_ run in parallel, some may never start (blocked on another tasks), or the\\norder of nodes in the graph is non-ideal. A great example of this can be found in this\\n[discussion thread](https://github.com/moonrepo/moon/discussions/830).\\n\\nTo mitigate this problem, we\'re introducing a new task option,\\n[`persistent`](/docs/config/project#persistent) (which is also enabled by the `local` setting). When\\na task is marked as persistent, it will always _run last and in parallel_ within the dependency\\ngraph, after all dependencies (from all other persistent tasks) have completed.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n local: true\\n # OR\\n options:\\n persistent: true\\n```\\n\\nThis is a perfect solution to running multiple development servers and tools in watch mode:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'noop\'\\n deps:\\n - \'frontend:dev\'\\n - \'backend:dev\'\\n - \'database:start\'\\n - \'tailwind:watch\'\\n```\\n\\n## Logging migration\\n\\nThis is more of a heads up than anything, but we\'ve started an internal Rust migration from the old\\n[log](https://crates.io/crates/log) crate to the new [tracing](https://crates.io/crates/tracing)\\ncrate. Tracing provides is with far more information, metrics, and instrumentation, which we hope to\\ntake advantage of in the future.\\n\\nThis will be an ongoing migration that will last for many releases, and during this time while we\\nsupport both `log` and `tracing` in unison, the logs will be a bit noisy. We\'ll be working to clean\\nup the logs as we gradually convert the codebase.\\n\\nAnd lastly, the move to `tracing` has also caused the log output to change. For example, in the log\\nexcerpt below, all messages with \\"log\\" after the date are the old `log` crate, while the others with\\ndistinct module names are the new `tracing` crate.\\n\\n```log\\n[DEBUG 14:44:19] moon_process::command_inspector Running command git status --porcelain --untracked-files -z env_vars={} working_dir=\\"~/Projects/moon\\"\\n[DEBUG 14:44:19] log Filtering based on touched status \\"all\\" log.target=\\"moon:query:touched-files\\" log.module_path=\\"moon_cli::queries::touched_files\\" log.file=\\"crates/cli/src/queries/touched_files.rs\\" log.line=85\\n[DEBUG 14:44:19] log Creating dependency graph log.target=\\"moon:dep-graph\\" log.module_path=\\"moon_dep_graph::dep_builder\\" log.file=\\"crates/core/dep-graph/src/dep_builder.rs\\" log.line=35\\n[DEBUG 14:44:19] log Running 32 actions across 5 batches log.target=\\"moon:action-pipeline\\" log.module_path=\\"moon_action_pipeline::pipeline\\" log.file=\\"crates/core/action-pipeline/src/pipeline.rs\\" log.line=93\\n[DEBUG 14:44:19] log Setting up Node.js 20.0.0 toolchain log.target=\\"moon:action:setup-tool\\" log.module_path=\\"moon_action_pipeline::actions::setup_tool\\" log.file=\\"crates/core/action-pipeline/src/actions/setup_tool.rs\\" log.line=26\\n[DEBUG 14:44:19] proto_node::resolve Resolving a semantic version for \\"20.0.0\\"\\n[DEBUG 14:44:19] proto_core::resolver:load_versions_manifest Loading versions manifest from local cache cache_file=~/.proto/temp/3d16d1693e83828f98bae178f181d5a01103b7f222db27cdeaec9b4950e951d7.json\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.6.0) for a full list of\\nchanges.\\n\\n- Updated long running processes to log a checkpoint indicating it\'s still running.\\n- Reworked file groups to use workspace relative paths, instead of project relative.\\n- Reworked processes to better handle command line arguments, shells, and piped stdin input."},{"id":"moon-v1.5","metadata":{"permalink":"/blog/moon-v1.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx","source":"@site/blog/2023-05-08_moon-v1.5.mdx","title":"moon v1.5 - Rust tier 2 and 3 support","description":"With this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.","date":"2023-05-08T00:00:00.000Z","formattedDate":"May 8, 2023","tags":[{"label":"rust","permalink":"/blog/tags/rust"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tier","permalink":"/blog/tags/tier"}],"readingTime":2.765,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.5","title":"moon v1.5 - Rust tier 2 and 3 support","authors":["milesj"],"tags":["rust","lang","tier"],"image":"./img/moon/v1.5.png"},"prevItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"},"nextItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.\\n\\n\x3c!--truncate--\x3e\\n\\nAs big fans of Rust (moon is written in it), we\'re stoked to finally add full language support, and\\nto integrate our first non-JavaScript language! This release is rather massive, and required a ton\\nof internal work, most of which we\'ll skip over.\\n\\nInstead we\'ll only talk about the key features that you, the consumers, will actually care about. To\\nstart, we\'ve started working on a Rust handbook, that outlines how to enable Rust, what kind of\\nintegrations we support, and a handful of common questions.\\n\\n
\\n
\\n\\n## New `rust` configurations\\n\\nLanguages in\\n[moon are enabled through configuration](/docs/how-it-works/languages#enabling-a-language) blocks in\\n[`.moon/toolchain.yml`](/docs/config/toolchain), and Rust is no different. We now support a\\n[`rust`](/docs/config/toolchain#rust) toolchain setting\\n([view all available settings](/docs/config/toolchain#rust)).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nrust:\\n\\tversion: \'1.69.0\'\\n```\\n\\nWhen the `rust` setting is defined, it will enable the language and\\n[deep platform integration](/docs/how-it-works/languages#tier-2--platform), and when the `version`\\nfield is defined, it will further enable\\n[toolchain support](/docs/how-it-works/languages#tier-3--toolchain). Both of these features provide\\nheavy automation, improving the overall developer experience.\\n\\nThis is fantastic, but what if another Rust project in the monorepo requires a different toolchain\\nchannel/version? If so, they can use the new [`toolchain.rust`](/docs/config/project#rust) setting\\nin [`moon.yml`](/docs/config/project) to define project-level overrides.\\n\\n```yaml title=\\"/moon.yml\\"\\ntoolchain:\\n\\trust:\\n\\t\\tversion: \'1.58.0\'\\n```\\n\\n## New `rust` task platform\\n\\nThe main benefit of Rust language support is that tasks can be ran within the context of our\\n[Rust platform integration](/docs/how-it-works/languages#tier-2--platform). This can easily be done\\nby setting the project\'s [`language`](/docs/config/project#language) to \\"rust\\" in\\n[`moon.yml`](/docs/config/project).\\n\\nThis will set the [`platform`](/docs/config/project#platform-1) of all tasks within the project to\\n\\"rust\\", unless they have been explicitly configured to something else.\\n\\n```yaml title=\\"/moon.yml\\"\\nlanguage: \'rust\'\\ntype: \'application\'\\n```\\n\\nIf you\'re mixing languages within a single project, and can\'t use the `language` setting above, you\\ncan define `platform` on the task directly.\\n\\n```yaml title=\\"/moon.yml\\"\\ntasks:\\n\\tbuild:\\n\\t\\tcommand: \'cargo build\'\\n\\t\\tplatform: \'rust\'\\n```\\n\\n> We also attempt to detect this automatially by comparing command names and checking for the\\n> existence of files like `Cargo.toml`.\\n\\n## Updated `moon init` command\\n\\nAs part of this release, we\'ve also updated the [`moon init`](/docs/commands/init) command to\\nsupport initializing Rust. By default, the command will prompt you on whether to install Rust or\\nnot, otherwise, when `--yes` is passed, the language will be installed if a `Cargo.toml` file is\\ndetected in the destination directory.\\n\\nIf you already have a moon workspace, you can pass `--tool rust` to install Rust into the workspace.\\n\\n```shell\\n$ moon init --tool rust\\n```\\n\\n## Updated `moon docker` commands\\n\\nAnd lastly, we also want to provide a great [`Dockerfile` experience](/docs/guides/docker) when\\nusing Rust. The [`moon docker scaffold`](/docs/commands/docker/scaffold) command has been updated to\\ncopy `Cargo.toml`, `Cargo.lock`, `rust-toolchain.toml`, and other Rust/Cargo related files. When\\nusing Cargo workspaces, nested `Cargo.toml` files are also scaffolded.\\n\\n```docker\\nRUN moon docker scaffold rust-app\\n```\\n\\nFurthermore, we\'ve also updated the [`moon docker prune`](/docs/commands/docker/scaffold) command to\\nremove the entire `target` directory, greatly reducing the size of the image. Pruning makes the\\nassumption that it\'s being ran _after_ a release profile has been built.\\n\\n```docker\\nRUN moon run rust-app:build-release\\nRUN moon docker prune\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.5.0) for a full list of\\nchanges."},{"id":"moon-v1.4","metadata":{"permalink":"/blog/moon-v1.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx","source":"@site/blog/2023-05-01_moon-v1.4.mdx","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","description":"With this release, we\'re bringing further improvements to tags and MQL.","date":"2023-05-01T00:00:00.000Z","formattedDate":"May 1, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tag","permalink":"/blog/tags/tag"},{"label":"alias","permalink":"/blog/tags/alias"}],"readingTime":1.73,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.4","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","authors":["milesj"],"tags":["query","lang","tag","alias"],"image":"./img/moon/v1.4.png"},"prevItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"},"nextItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"}},"content":"With this release, we\'re bringing further improvements to tags and MQL.\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets by tag with `#tag:task`\\n\\nWe love our community, as you all continuously suggest new and awesome features that haven\'t crossed\\nour minds. One such feature was the ability to run tasks for all projects with a tag,\\n[suggested by @theoephraim](https://github.com/moonrepo/moon/issues/803), which is now possible with\\nthe new [tag scope](/docs/concepts/target#by-tag), `#tag:task`.\\n\\nAs an example, we can easily lint all projects that have the `frontend` tag.\\n\\n```shell\\n$ moon run \'#frontend:lint\'\\n```\\n\\n> Because `#` is special syntax and denotes a comment, the target will need to be quoted to work\\n> correctly!\\n\\n## Updated `moon query` commands to support MQL\\n\\nLast week we announced [MQL](./moon-v1.3#run-targets-based-on-a-query), a custom query language for\\napplying filters to moon\'s project graph, primarily through the [`moon run`](/docs/commands/run)\\ncommand. We plan to slowly integrate MQL throughout moon as it provides an easy to use API, and an\\noverall better developer experience.\\n\\nAs such, we\'ve updated both [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query tasks`](/docs/commands/query/tasks) to support MQL statements as an optional first\\nargument. Totally makes sense that query commands would support MQL!\\n\\n```shell\\n# Find all projects with a `lint` or `build` task\\n$ moon query projects \\"task=[lint,build]\\"\\n\\n# Find all tasks with an id that starts with \\"dev\\"\\n$ moon query tasks \\"task~dev-*\\"\\n```\\n\\n## Deprecated `node.aliasPackageNames` setting\\n\\nmoon project\'s support the [concept of aliasing](/docs/concepts/project#aliases), where\\nlanguage/ecosystem specific names are used alongside moon\'s. For example, the `name` field from\\n`package.json`. However, aliasing was off by default for Node.js projects and had to be explicitly\\nenabled with the `node.aliasPackageNames` setting.\\n\\nIn an effort to streamline moon adoption for Node.js codebases, we\'re deprecating that setting, and\\ninstead will now always inherit the `package.json` name as an alias. For example, if you\'re package\\nname was `@company/utils`, you can now run a target like so:\\n\\n```shell\\n$ moon run @company/utils:build\\n```\\n\\n> This setting is now a no-op and can be removed from your configuration.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.4.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.8."},{"id":"proto-v0.8","metadata":{"permalink":"/blog/proto-v0.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx","source":"@site/blog/2023-04-28_proto-v0.8.mdx","title":"proto v0.8 - Version detection and installation improvements","description":"In this release, we\'re dropping some quality of life workflow improvements.","date":"2023-04-28T00:00:00.000Z","formattedDate":"April 28, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"detect","permalink":"/blog/tags/detect"}],"readingTime":1.295,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.8","title":"proto v0.8 - Version detection and installation improvements","authors":["milesj"],"tags":["proto","detect"],"image":"./img/proto/v0.8.png"},"prevItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"},"nextItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"}},"content":"In this release, we\'re dropping some quality of life workflow improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Built-in detection for `proto use`\\n\\nThe [`proto use`](/docs/proto/commands/use) command is extremely useful for bootstrapping your\\ndevelopment environment with all necessary tooling, but it had a hard requirement on the\\n[`.prototools`](/docs/proto/config) configuration file. But what if you\'re already using non-proto\\nversion files, like `.nvmrc` or `.dvmrc`? Or maybe manifest settings, like `packageManager` or\\n`engines` in `package.json`?\\n\\nGreat questions, and we agree! As such, we\'ve updated `proto use` to _also_ detect a version from\\nthe environment for the current working directory. We suggest using `.prototools`, but feel free to\\nconfigure your environments as you so choose!\\n\\n```shell\\n# Install all the things!\\n$ proto use\\n```\\n\\n## Smarter version detection\\n\\nOne of proto\'s best features is its [contextual version detection](/docs/proto/detection), but it\\ndid have 1 shortcoming. When we detected a partial version, like `1.2`, we\'d resolve to a fully\\nqualified version with the latest patch version (e.g. `1.2.3`). While this worked in most cases,\\neverytime a new patch was released upstream (e.g. `1.2.4`), proto would error and require a manual\\ninstall of this new version. This was pretty annoying as `1.2.3` and `1.2.4` are likely to be\\ncompatible, and both satisfy the `1.2` version constraint.\\n\\nTo mitigate this scenario, we\'ve updated the version detection to scan the locally installed\\nversions _first_ when encountering a partial version. This solves the problem above by allowing\\n`1.2.3` to satisfy the requirement, instead of forcing an install of `1.2.4`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.8.0) for a full list\\nof changes."},{"id":"moon-v1.3","metadata":{"permalink":"/blog/moon-v1.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx","source":"@site/blog/2023-04-24_moon-v1.3.mdx","title":"moon v1.3 - Advanced run targeting and an official proto plugin","description":"After many months of design and development, we\'re finally introducing MQL, our own unique query","date":"2023-04-24T00:00:00.000Z","formattedDate":"April 24, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"schema","permalink":"/blog/tags/schema"},{"label":"toml","permalink":"/blog/tags/toml"},{"label":"target","permalink":"/blog/tags/target"}],"readingTime":2.35,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.3","title":"moon v1.3 - Advanced run targeting and an official proto plugin","authors":["milesj"],"tags":["query","lang","proto","schema","toml","target"],"image":"./img/moon/v1.3.png"},"prevItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"},"nextItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"}},"content":"After many months of design and development, we\'re finally introducing MQL, our own unique query\\nlanguage!\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets based on a query\\n\\nOur [`moon run`](/docs/commands/run) command is pretty powerful. It allows you to run targets in\\none, many, or all projects. It also supports running multiple targets in parallel. However, it\\nwasn\'t powerful enough, as it couldn\'t run the following types of scenarios:\\n\\n- Run a target in projects of a specific language.\\n- Run a target in libraries or applications.\\n- Run a target based on project file system path.\\n- Run a target in projects with a matching tag.\\n- Run a target in projects that match a keyword.\\n- Run a target in projects based on AND or OR conditions.\\n- Or a combination of these.\\n- And many more!\\n\\nSupporting all of these scenarios through CLI arguments just feels like bad design, and would result\\nin a poor developer experience. There had to be a better way to support this! So we set out to solve\\nthis problem, and after much thought, we\'re stoked to introduce\\n[MQL, a query language unique to moon](/docs/concepts/query-lang).\\n\\nWith MQL, you can now run scenarios like \\"I want to build all Node.js libraries\\", or \\"I want to lint\\nand test all Rust projects\\". Simply pass an unscoped target and a query to the `run` command:\\n\\n```shell\\n$ moon run :build --query \\"taskPlatform=node && projectType=library\\"\\n\\n$ moon run :lint :test --query \\"language=rust\\"\\n```\\n\\nThis is only the first iteration of MQL and it\'s already quite powerful. Expect additional fields,\\nfeatures, and functionality in the future!\\n\\n## Plugin support for proto\\n\\nEarlier this week we announced [plugin support for proto](./proto-v0.7), starting with a TOML based\\nplugin. This is great as it allows _any_ kind of versioned tool to be managed in proto\'s toolchain,\\nso why not moon? Starting with this release, you can now install and manage moon _from_ proto, using\\nour officially maintained TOML plugin.\\n\\nIn your `.prototools` or `~/.proto/config.toml` file, add the following snippet:\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nmoon = \\"source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml\\"\\n```\\n\\nAnd as easy as that, you can now use `moon` as a tool within any `proto` command. For example:\\n\\n```shell\\n$ proto install moon 1.3.0\\n$ proto list-remote moon\\n$ proto bin moon\\n```\\n\\nFurthermore, with proto, we can now pin the version of moon on a per-project basis. Perfect for\\nenforcing the same version for all developers on your team!\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.3.0\\"\\n```\\n\\n> When using this approach, be sure `~/proto/.bin` is in your `PATH`, and takes precedence over\\n> `~/.moon/bin`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.3.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.7.\\n- Improved accuracy of our globbing utilities, especially around dotfiles/dotfolders.\\n- Updated config loading to be strict and error on unknown fields for non-root fields."},{"id":"proto-v0.7","metadata":{"permalink":"/blog/proto-v0.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx","source":"@site/blog/2023-04-21_proto-v0.7.mdx","title":"proto v0.7 - First step towards plugins","description":"With this release, we\'re very excited to announce our initial support for plugins in proto!","date":"2023-04-21T00:00:00.000Z","formattedDate":"April 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugins","permalink":"/blog/tags/plugins"}],"readingTime":2.36,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.7","title":"proto v0.7 - First step towards plugins","authors":["milesj"],"tags":["proto","plugins"],"image":"./img/proto/v0.7.png"},"prevItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"},"nextItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"}},"content":"With this release, we\'re very excited to announce our initial support for plugins in proto!\\n\\n\x3c!--truncate--\x3e\\n\\n## Initial plugins architecture\\n\\nLast week we posted an [RFC for a new plugins architecture](./proto-v0.6#rfc-plugins-system) for\\nproto. We believe plugins will unlock an array of capabilities for proto, will enable the community\\nto add their own custom integrations, and the ability for tools to be managed within proto\'s\\ntoolchain.\\n\\nWe were very excited for this RFC, and couldn\'t wait, so we spent the last week prototyping\\nimplementations. We got the basics of downloading, installing, and enabling a plugin at _runtime_\\nworking incredibly fast. However, implementing the entire RFC in 1 release would have taken too\\nlong, and we wanted to avoid dropping such a large feature in a single release. Because of this,\\nwe\'ve only implemented [TOML plugins](/docs/proto/plugins#toml-plugin) in this release, and will\\nimplement WASM plugins in a future release.\\n\\n### TOML plugins\\n\\nYou may be asking yourself, aren\'t plugins typically code? For the most part, yes, but after\\nbuilding a \\"version manager\\" for multiple languages, we\'ve come to the realization that many tools\\ncan simply be supported through a basic configuration file.\\n\\nAt minimum, tools require the following pieces to be managed:\\n\\n- Where and how to download the tool\\n- How to install/unpack the tool\\n- How to resolve available versions to install\\n- How to execute the tool\'s binary\\n\\nAll 4 of these pieces can be solved with a configuration file, and as such, we opted to support a\\n[TOML schema based plugin](/docs/proto/plugins#toml-plugin) as an alternative to a code based\\nplugin. The other benefits of a schema is that it\'s _easy to write, read, and maintain_, doesn\'t\\nrequire any code, and doesn\'t force you into a specific programming language.\\n\\nTo demonstate how this plugin works, here\'s an example of a [moon](/moon) TOML schema.\\n\\n```toml title=\\"moon-schema.toml\\"\\nname = \\"moon\\"\\ntype = \\"cli\\"\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\n\\n[resolve]\\ngit-url = \\"https://github.com/moonrepo/moon\\"\\n```\\n\\nVery simple right? With this, you can now configure moon as a plugin within proto.\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.2.0\\"\\n\\n[plugins]\\nmoon = \\"source:./path/to/moon-schema.toml\\"\\n```\\n\\nAnd ultimately manage every version of moon through proto! Because moon is now a plugin, every\\ncommand in proto that accepts a `` argument, will now accept `moon` as a valid tool.\\n\\n```shell\\n$ proto install moon 1.2.0\\n$ proto list-remote moon\\n$ proto use\\n```\\n\\nLearn more about [TOML plugins in the official docs](/docs/proto/plugins#toml-plugin)!\\n\\n## Cleaning improvements\\n\\nLast week we introduced the [`proto clean`](/docs/proto/commands/clean) command that will\\nautomatically delete stale and unused tools from the toolchain. This week we\'ve implemented a few\\nimprovements to the cleaning process:\\n\\n- Added a `--yes` option to [`proto clean`](/docs/proto/commands/clean), allowing prompts to be\\n bypassed.\\n- Added a `auto-clean` setting to `~/.proto/config.toml`, enabling automatic cleaning when\\n [`proto use`](/docs/proto/commands/use) is ran."},{"id":"moon-v1.2","metadata":{"permalink":"/blog/moon-v1.2","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx","source":"@site/blog/2023-04-17_moon-v1.2.mdx","title":"moon v1.2 - Tag based task inheritance","description":"In this small release, we\'re improving our task inheritance and performance.","date":"2023-04-17T00:00:00.000Z","formattedDate":"April 17, 2023","tags":[{"label":"tags","permalink":"/blog/tags/tags"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.2","title":"moon v1.2 - Tag based task inheritance","authors":["milesj"],"tags":["tags","tasks"],"image":"./img/moon/v1.2.png"},"prevItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"},"nextItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"}},"content":"In this small release, we\'re improving our task inheritance and performance.\\n\\n\x3c!--truncate--\x3e\\n\\n## Task inheritance based on project tags\\n\\nIn v0.23 we introduced [scoped task inheritance](/blog/v0.23#improved-task-inheritance-model) by\\nproject type/language, and in v1.0 we introduced [project tagging](/blog/moon-v1.0#project-tagging),\\nbut what if we combined both of these features? In this release, you can now define workspace-level\\ntasks _by tag_ that\'ll be inherited by all projects with that tag.\\n\\nTo demonstrate this, say you have a monorepo composed of multiple [Astro](https://astro.build)\\napplications, each duplicating the same Astro tasks. Instead of duplicating, define an `astro` tag\\nin each project\'s [`moon.yml`](/docs/config/project#tags).\\n\\n```yaml title=\\"/moon.yml\\"\\nlanguage: \'typescript\'\\ntype: \'application\'\\ntags: [\'astro\']\\n```\\n\\nAnd then create a new tasks configuration at `.moon/tasks/tag-astro.yml` with the following\\ncontents:\\n\\n```yaml title=\\".moon/tasks/tag-astro.yml\\"\\nfileGroups:\\n\\tastro:\\n\\t\\t- \'public/**/*\'\\n\\t\\t- \'src/**/*\'\\n\\t\\t- \'astro.config.*\'\\n\\t\\t- \'tsconfig.json\'\\n\\ntasks:\\n\\tastro:\\n\\t\\tcommand: \'astro\'\\n\\t\\tlocal: true\\n\\n\\t# Development server\\n\\tdev:\\n\\t\\tcommand: \'astro dev\'\\n\\t\\tlocal: true\\n\\n\\t# Production build\\n\\tbuild:\\n\\t\\tcommand: \'astro build\'\\n\\t\\tinputs: [\'@group(astro)\']\\n\\t\\toutputs: [\'dist\']\\n\\n\\t# Check .astro files\\n\\tcheck:\\n\\t\\tcommand: \'astro check\'\\n\\t\\tinputs: [\'@group(astro)\']\\n\\t\\tdeps: [\'typecheck\']\\n\\n\\t# Preview production build locally\\n\\tpreview:\\n\\t\\tcommand: \'astro preview\'\\n\\t\\tdeps: [\'build\']\\n\\t\\tlocal: true\\n```\\n\\nEach of these Astro applications will now inherit all 5 tasks and the file group automatically! This\\nhelps to greatly reduce maintenance overhead and help enforce consistency across projects. Jump to\\nthe official [task inheritance docs](/docs/concepts/task-inheritance) for more information on tag\\nbased inheritance.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.2.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.6.\\n- Improvements to file system operations.\\n- Minor improvements to performance."},{"id":"proto-v0.6","metadata":{"permalink":"/blog/proto-v0.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx","source":"@site/blog/2023-04-13_proto-v0.6.mdx","title":"proto v0.6 - Unused cleaning and improved global binaries","description":"With this release, we\'re expanding on our global binary support and providing quality of life","date":"2023-04-13T00:00:00.000Z","formattedDate":"April 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"globals","permalink":"/blog/tags/globals"},{"label":"clean","permalink":"/blog/tags/clean"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.6","title":"proto v0.6 - Unused cleaning and improved global binaries","authors":["milesj"],"tags":["proto","globals","clean","errors"],"image":"./img/proto/v0.6.png"},"prevItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"},"nextItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re expanding on our global binary support and providing quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Plugins system\\n\\nSince proto\'s inception, plugins have been top of mind, but runtime based plugins in Rust are\\n_difficult_. The only viable solution to this problem is WASM, but most developers have never used\\nWASM before, nor are they familiar with WASM tooling (myself included).\\n\\nHowever, we\'re at a point in proto\'s life-cycle where the core is rather stable, and it\'s time to\\nstart investigating plugin support. To this end, we\'ve introduced a small RFC outlining how plugins\\nwill be used, enabled, and implemented. It\'s not very in-depth as we want to avoid implementation\\ndetails, but from a consumers perspective, we want to ensure that it makes sense.\\n\\nWe\'d very much appreciate it if you could take a look at the RFC and provide feedback. If you have\\nany experience in Rust runtime plugins, we\'d love to hear your thoughts as well.\\n\\n
\\n
\\n\\n## Cleaning stale and unused tools\\n\\nIs your `~/.proto` installation growing out of control? Are there old versions of tools that you\\ndon\'t use anymore? Or versions you never used? Unsure if you\'re using a tool at all or still need\\nit?\\n\\nTo help avoid these questions and problems, we\'re introducing a new command that will uninstall\\nstale and unused tools, [`proto clean`](/docs/proto/commands/clean). When ran, the command will\\nlaunch an interactive session and scan the file system for old tools, prompting you to remove them.\\n\\n```shell\\n$ proto clean\\n```\\n\\nBy default the command will uninstall tools that haven\'t been used in over 30 days, but this can be\\ncustomized with the `--days` option.\\n\\n:::info\\n\\nTools installed before v0.6 will most likely be considered stale, as we weren\'t tracking install and\\nlast used timestamps. However, everything will work as intended after running a tool or simply\\nmoving forward from this point.\\n\\n:::\\n\\n## Global binary improvements\\n\\nIn our [previous release](./proto-v0.5), we announced the\\n[`proto install-global`](/docs/proto/commands/install-global) command for installing global\\ndependencies that are unique per tool. Thanks to the community, this command has been updated to\\nsupport installing multiple globals at once!\\n\\n```shell\\n$ proto install-global node typescript webpack-cli\\n```\\n\\nOn top of this, we\'re also introducing another command that was requested by the community,\\n[`proto list-global`](/docs/proto/commands/list-global), that can be used to list all currently\\ninstalled globals.\\n\\n```shell\\n$ proto list-global node\\ntsc - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsc\\ntsserver - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsserver\\n```\\n\\n## Better error messages\\n\\nWe\'ve spent most of the past week working on a new internal architecture called\\n[Starbase](https://github.com/moonrepo/starbase), which will be the new foundation for proto and\\nmoon moving forward. One of the major benefits of this new architecture is a rewritten error system\\nthat provides more context and better error messages.\\n\\nHere\'s an example of this, albeit with a contrived situation:\\n\\n"},{"id":"proto-v0.5","metadata":{"permalink":"/blog/proto-v0.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-06_proto-v0.5.mdx","source":"@site/blog/2023-04-06_proto-v0.5.mdx","title":"proto v0.5 - Version aliasing and global binaries","description":"With this release, we\'re providing solutions for installing globals and using aliases.","date":"2023-04-06T00:00:00.000Z","formattedDate":"April 6, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"alias","permalink":"/blog/tags/alias"},{"label":"globals","permalink":"/blog/tags/globals"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.5","title":"proto v0.5 - Version aliasing and global binaries","authors":["milesj"],"tags":["proto","alias","globals"],"image":"./img/proto/v0.5.png"},"prevItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"},"nextItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"}},"content":"With this release, we\'re providing solutions for installing globals and using aliases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Install global binaries\\n\\nInstalling global binaries (packages, modules, etc) is a common task for developers, and proto now\\nprovides a solution for this workflow with the\\n[`proto install-global`](/docs/proto/commands/install-global) command. Continue reading for more\\ninformation.\\n\\n:::info\\n\\nGlobal install directories will need to be added manually to your `PATH` from your shell.\\n\\n:::\\n\\n### Bun, Deno, Go, Rust\\n\\nAll of these languages provide a built-in solution for installing global binaries to a shared\\nlocation, regardless of the language\'s current version. Because of this, proto will simply call\\ntheir install commands under the hood.\\n\\n```shell\\n$ proto install-global rust cargo-release\\n\\n# Same as\\n$ cargo install cargo-release --force\\n```\\n\\nGlobals will be installed to the following locations:\\n\\n- **Bun**: `~/.bun/bin`\\n- **Deno**: `~/.deno/bin`\\n- **Go**: `~/go/bin`\\n- **Rust**: `~/.cargo/bin`\\n\\n### Node.js, npm, pnpm, yarn\\n\\nUnfortunately, the Node.js ecosystem is pretty fractured when it comes to installing global\\nbinaries. Each package manager provides their own solution for installing globals, and each has\\ntheir own quirks. The problem is further exacerbated by the fact that globals are tied to Node.js\\nversion, so if you switch versions, you lose all your previous globals!\\n\\nTo work around this, proto standardizes the global installation process for Node.js, but requires\\nall globals to be installed through proto. You can no longer use `npm install -g`, `pnpm add -g`, so\\non and so forth, and must use:\\n\\n```shell\\n$ proto install-global node webpack-cli\\n```\\n\\nGlobals will be installed to a shared location, `~/.proto/tools/node/globals/bin`, and will persist\\nacross versions!\\n\\n## Custom version aliases\\n\\nWe are excited to announce 2 new commands that enable you to define custom version aliases,\\n[`proto alias`](/docs/proto/commands/alias) and [`proto unalias`](/docs/proto/commands/unalias).\\nAliasing of versions is a feature that allows you to assign a custom name or label to a specific\\nversion of a tool.\\n\\nFor example, instead of using the version number, you can assign a label such as \\"work\\" or\\n\\"personal\\" to a version. This makes it easier to remember and manage different versions.\\n\\n```shell\\n$ proto alias node work 16.16\\n$ proto alias node personal 18\\n```\\n\\nAliases can be used anywhere a version is accepted, for example:\\n\\n```shell\\n$ proto bin node work\\n$ proto install node personal\\n```"},{"id":"moon-v1.1","metadata":{"permalink":"/blog/moon-v1.1","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx","source":"@site/blog/2023-04-03_moon-v1.1.mdx","title":"moon v1.1 - Task debugging and improvements","description":"With this release, we\'re introducing some quality of life task improvements.","date":"2023-04-03T00:00:00.000Z","formattedDate":"April 3, 2023","tags":[{"label":"tokens","permalink":"/blog/tags/tokens"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.775,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.1","title":"moon v1.1 - Task debugging and improvements","authors":["milesj"],"tags":["tokens","tasks"],"image":"./img/moon/v1.1.png"},"prevItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"},"nextItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"}},"content":"With this release, we\'re introducing some quality of life task improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Token variable support in task commands\\n\\nmoon supports a concept known as [tokens](/docs/concepts/token) where values are injected into tasks\\nduring project graph creation. This allows for dynamic values in your tasks, such as the current\\nproject language, or the current task name, and is crucial for task inheritance to work.\\n\\nHowever, tokens were only supported by task args, inputs, and outputs, but not commands... until\\nnow. Commands can now use token variables (but not token functions). For example, this is useful for\\nreferencing shared scripts from the workspace root.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n\\tprecheck:\\n\\t\\tcommand: \'$workspaceRoot/scripts/precheck.sh\'\\n```\\n\\n## Run targets in closest project\\n\\nThe [`moon run`](/docs/commands/run) command can run targets in an array of different formats, but\\nwas unable to run targets based on the current working directory. Well no more! You can now run\\ntasks from the closest project based on file path by omitting `:` from the target name.\\n\\n```shell\\n$ cd packages/components\\n\\n# Runs `components:build` internally\\n$ moon run build\\n```\\n\\n## View resolved task information\\n\\nDebugging task issues can be a quite a pain, as there can be many points of failure. Are inputs too\\ngreedy? Are outputs not being created? Does it exist at all? To help with this, you can now view\\ntask information by running [`moon task `](/docs/commands/task).\\n\\n```shell\\n$ moon task app:build\\n```\\n\\nThis command will display _resolved_ information, including inherited settings, and path resolved\\ninputs and outputs. Here\'s an example:\\n\\n```\\nRUNTIME:BUILD\\n\\nID: build\\nProject: runtime\\nPlatform: node\\nType: build\\n\\nPROCESS\\n\\nCommand: packemon build --addFiles --addExports --declaration\\nEnvironment variables:\\n - NODE_ENV = production\\nWorking directory: /Projects/moon/packages/runtime\\nRuns dependencies: Concurrently\\nRuns in CI: Yes\\n\\nDEPENDS ON\\n\\n - types:build\\n\\nINPUTS\\n\\n - .moon/*.yml\\n - packages/runtime/src/**/*\\n - packages/runtime/tsconfig.*.json\\n - packages/runtime/types/**/*\\n - packages/runtime/package.json\\n - packages/runtime/tsconfig.json\\n - tsconfig.options.json\\n\\nOUTPUTS\\n\\n - packages/runtime/cjs\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.1.0) for a full list of\\nchanges.\\n\\n- Support pnpm v8\'s new lockfile format.\\n- Better handling for task\'s that execute the `moon` binary.\\n- Updated `noop` tasks to be cacheable, so that they can be used for cache hit early returns."},{"id":"proto-v0.4","metadata":{"permalink":"/blog/proto-v0.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-31_proto-v0.4.mdx","source":"@site/blog/2023-03-31_proto-v0.4.mdx","title":"proto v0.4 - Rust support, user configs, and more","description":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.","date":"2023-03-31T00:00:00.000Z","formattedDate":"March 31, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"rust","permalink":"/blog/tags/rust"},{"label":"config","permalink":"/blog/tags/config"}],"readingTime":1.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.4","title":"proto v0.4 - Rust support, user configs, and more","authors":["milesj"],"tags":["proto","rust","config"],"image":"./img/proto/v0.4.png"},"prevItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"},"nextItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"}},"content":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Rust language support\\n\\nWe\'re very excited to announce support for the [Rust language](https://www.rust-lang.org/) in proto.\\nThis is our first language addition since the initial release, and we\'re very happy with how it\\nturned out.\\n\\n```shell\\n$ proto install rust stable\\n```\\n\\nFor those of you unfamiliar with Rust, Rust provides its own toolchain manager through\\n[`rustup`](https://rustup.rs/) \u2014 a very powerful one at that. We don\'t want to reinvent the wheel\\nhere, so instead of downloading and installing Rust into proto\'s toolchain, we chose to call\\n`rustup` commands under the hood. Because of this, Rust support in proto requires Rust/Cargo to be\\npre-installed on your system. Jump to the [docs for more information](/docs/proto/tools#rust).\\n\\nAll in all, the cool thing about supporting Rust in proto is that you can standardize all your tools\\nin a single config for [`proto use`](/docs/proto/commands/use).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.2.0\\"\\nrust = \\"1.68.0\\"\\n```\\n\\n## New user configuration\\n\\nWe have a long list of ideas and features that would be cool to support in proto, but not as the\\ndefault functionality. Because of this, we required a way for users to opt-in to this functionality,\\nand have landed on a new user configuration located at `~/.proto/config.toml`.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\nauto-install = true\\n```\\n\\nThis new configuration only supports a single setting (for now), `auto-install`, that when enabled,\\nwill automatically install a missing tool for the detected version when running\\n[`proto run`](/docs/proto/commands/run) (or a shim).\\n\\n## New `proto upgrade` command\\n\\nWe now provide a [`proto upgrade`](/docs/proto/commands/upgrade) command for upgrading proto itself.\\nThis will download the latest version and replace the binary at `~/.proto/bin/proto`.\\n\\n```shell\\n$ proto upgrade\\n```"},{"id":"moon-v1.0","metadata":{"permalink":"/blog/moon-v1.0","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx","source":"@site/blog/2023-03-27_moon-v1.0.mdx","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","description":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve","date":"2023-03-27T00:00:00.000Z","formattedDate":"March 27, 2023","tags":[{"label":"projects","permalink":"/blog/tags/projects"},{"label":"constraints","permalink":"/blog/tags/constraints"},{"label":"tags","permalink":"/blog/tags/tags"},{"label":"env-vars","permalink":"/blog/tags/env-vars"},{"label":"tokens","permalink":"/blog/tags/tokens"}],"readingTime":4.745,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.0","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","authors":["milesj"],"tags":["projects","constraints","tags","env-vars","tokens"],"image":"./img/moon/v1.0.png"},"prevItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"},"nextItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"}},"content":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve\\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## The road to v1\\n\\nIt\'s been 10 months since moon launched publicly, and since that time we have landed 501 pull\\nrequests, fixed 100\'s of bugs, made 16 breaking changes, released 26 versions, and have been used by\\ncompanies like Ikea, SumUp, Depot, and Gallery. It\'s been a wild ride, and we\'re excited to finally\\nreach a stable v1 release.\\n\\n## Project boundaries with constraints\\n\\nOne feature that moon has not supported, but is critical for large monorepos, is project boundaries.\\nA project boundary is a concept that enforces a strict relationship between projects, and is a\\ncommon pattern in monorepos. For example, a project may only be allowed to depend on projects with a\\n[specific tag](#enforce-relationships-with-tags), or a project of a specific type.\\n\\nmoon now supports this functionality through the new\\n[`constraints`](/docs/config/workspace#constraints) setting in\\n[`.moon/workspace.yml`](/docs/config/workspace). The primary constraint we\'re introducing is\\n[`enforceProjectTypeRelationships`](/docs/config/workspace#enforceprojecttyperelationships), which\\nenforces relationships between projects based on their [`type`](/docs/config/project#type) field.\\n\\nFor example, an application can only depend on library or tool based projects, but _not_ other\\napplications (this is a code smell). This setting is enabled by default!\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nconstraints:\\n enforceProjectTypeRelationships: true\\n```\\n\\nAnd that\'s not all, continue reading for more information on tag based constraints!\\n\\n## Project tagging\\n\\nEveryone is familiar with the concept of tagging, and moon\'s implementation is no different. Tags\\nare a simple mechanism for categorizing projects, and can be defined through the\\n[`tags`](/docs/config/project#tags) setting in [`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntags:\\n - \'react\'\\n - \'prisma\'\\n```\\n\\nTags can be used to group projects together for easier querying, enforcing of project boundaries,\\napplying constraints, and more in the future. Tags will become a staple for maintaining repositories\\nat scale. Continue reading for more information!\\n\\n### Querying projects by tag\\n\\nThe first integration with tags is project querying. You can now query for projects by tag using the\\nnew `--tags` option in the [`moon query projects`](/docs/commands/query/projects) command. For\\nexample, say you want to find all projects that are tagged with `vue` or `trpc`:\\n\\n```shell\\n$ moon query projects --tags \'vue|trpc\'\\n```\\n\\n### Enforce relationships with tags\\n\\nAnother feature of tags is enforcing relationships between projects using our new\\n[`constraints`](#project-constraints) setting. When a tagged constraint is defined, it requires all\\n[dependencies](/docs/concepts/project#dependencies) of a tagged project to require 1 of the\\nconfigured tags, otherwise an error is thrown during project graph creation.\\n\\nTo demonstrate this, take the following configuration:\\n\\n```yaml title=\\".moon/workspace.yml\\" {2,3}\\nconstraints:\\n tagRelationships:\\n next: [\'react\', \'trpc\']\\n```\\n\\nThis dictates that all dependencies of a project with the `next` tag, must declare either `react`,\\n`trpc`, or `next` in their own tags. This is great for crafting a monorepo with strict project\\nboundaries!\\n\\n## Shells for system tasks\\n\\nUp until now, all executed tasks would not be wrapped in a shell for 1 reason, to ensure tasks are\\ndeterministic. A major goal for moon is that tasks are deterministic and easily reproducible across\\nall machines. Shells break this guarantee, as they can introduce subtle bugs that are difficult to\\ndiagnose, and may differ wildly between developers and machines.\\n\\nHowever in practice, not supporting shells has been a major pain point for many users, and for the\\nmost part, most system tasks typically run common commands or execute pre-defined scripts. The\\nchance of a non-deterministic build is very small. As such, we\'ve decided to make a compromise, and\\nallow shells for [system tasks](/docs/config/project#platform-1), but not for language based tasks.\\n\\nFor example, the following tasks:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'echo $PWD\'\\n platform: \'system\'\\n global:\\n command: \'bin-on-path\'\\n platform: \'system\'\\n```\\n\\nWould now be executed as `/bin/sh -c \'echo $PWD\'` and `/bin/sh -c \'bin-on-path\'` on Unix platforms\\nrespectively. On Windows, we execute tasks with `pwsh.exe -c` and pass arguments via stdin.\\n\\nWe\'re also taking this a step further, by introducing a new task option called\\n[`shell`](/docs/config/project#shell), that can be used to toggle the shell wrapping on or off. When\\nturned off, this allows you to customize and execute the shell as you please.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'bash -c \\"echo $PWD\\"\'\\n platform: \'system\'\\n options:\\n shell: false\\n```\\n\\n## Environment variable substitution\\n\\nmoon supports granular environment variables through the project-level\\n[`env`](/docs/config/project#env) setting, task-level [`env`](/docs/config/project#env-1) setting,\\nand the task [`envFile`](/docs/config/project#envfile) option. We\'re expanding their functionality\\nwith variable substitution, allowing the value of another environment variable to be interpolated\\nusing the syntax `${VAR_NAME}`. This is especially useful for composing complex environment\\nvariables.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'app start\'\\n env:\\n APP_TARGET: \'${REGION}-${ENVIRONMENT}\'\\n```\\n\\nThe same substitution syntax can also be used within `.env` files.\\n\\n```toml title=\\".env\\"\\nAPP_TARGET=\\"${REGION}-${ENVIRONMENT}\\"\\n```\\n\\n## Date/time token variables\\n\\n[Tokens](/docs/concepts/token) are a mechanism used in task configuration for dynamically injecting\\nvalues from the current project or task, especially when task inheritance is involved. Tokens have\\nexisted since moon\'s inception, without much change... until now.\\n\\nWe\'re excited to introduce a new set of tokens for referencing the\\n[current date or time](/docs/concepts/token#datetime): `$date`, `$time`, `$datetime`, and\\n`$timestamp`. With these new tokens, you\'re now able to implement clever or unusual solutions, like\\ngrouping builds or deploys based on the current timestamp.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n deploy:\\n command: \'app deploy --output ./build/$timestamp\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.0.0) for a full list of\\nchanges.\\n\\n- Added a `hasher.warnOnMissingInputs` setting to `.moon/workspace.yml`.\\n- Added a `$projectAlias` task token.\\n- Added a `telemetry` setting to `.moon/workspace.yml`.\\n- Updated the new version check to only run on the `check`, `ci`, `run`, and `sync` commands.\\n\\n## What\'s next?\\n\\nExpect the following in the v1.1 release!\\n\\n- Polish and stability initiatives.\\n- Task inheritance based on tags.\\n- Deno tier 3 support."},{"id":"proto-v0.3","metadata":{"permalink":"/blog/proto-v0.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx","source":"@site/blog/2023-03-15_proto-v0.3.mdx","title":"proto v0.3 - Improved npm, go, and version requirement support","description":"With this release, we\'re improving some workflows and version detection logic based on initial","date":"2023-03-15T00:00:00.000Z","formattedDate":"March 15, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"npm","permalink":"/blog/tags/npm"},{"label":"go","permalink":"/blog/tags/go"}],"readingTime":1.395,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.3","title":"proto v0.3 - Improved npm, go, and version requirement support","authors":["milesj"],"tags":["proto","npm","go"],"image":"./img/proto/v0.3.png"},"prevItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"},"nextItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"}},"content":"With this release, we\'re improving some workflows and version detection logic based on initial\\nfeedback.\\n\\n\x3c!--truncate--\x3e\\n\\n## Bundled npm support\\n\\nAfter Node.js is installed, the version of npm that came bundled with that Node.js version will also\\nbe installed into proto. This functionality can be skipped by passing `--no-bundled-npm` during\\ninstallation.\\n\\n```shell\\n$ proto install node -- --no-bundled-npm\\n```\\n\\nTo further expand upon this, `bundled` is now considered a built-in alias, and will be used during\\nversion detection. When encountered, we\'ll first detect the version of Node.js running, and infer\\nthe npm version from there.\\n\\n```shell\\n$ proto global npm bundled\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Automatic `GOBIN` setup\\n\\nAfter Go is installed, we\'ll now inject a `GOBIN` environment variable into your shell, pointing to\\n`~/go/bin`, if it doesn\'t already exist. This variable will be used to locate Go binaries across all\\ninstalled versions, and help to avoid binary not found errors.\\n\\nThis functionality can be skipped by passing `--no-gobin` during installation.\\n\\n```shell\\n$ proto install go -- --no-gobin\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Better version requirement detection\\n\\nPreviously when proto encounted a version requirement (`^`, `~`, `>=`, etc) during version\\ndetection, we would attempt to resolve a version that satisfied the requirement based on versions\\navailable in the remote manifest (what\'s been officially released). While this worked, it would\\nresult in far too many local installs as that satisfied version constantly changed.\\n\\nInstead, we now satisfy the version requirement based on versions that have been installed locally\\nto `~/.proto/tools`. If no version matches, detection will simply move on to the next case, and\\neventually fallback to the global default version."},{"id":"v0.26","metadata":{"permalink":"/blog/v0.26","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-13_v0.26.mdx","source":"@site/blog/2023-03-13_v0.26.mdx","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","description":"With this release, we\'re providing deeper integration with our new proto toolchain","date":"2023-03-13T00:00:00.000Z","formattedDate":"March 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"docker","permalink":"/blog/tags/docker"},{"label":"query","permalink":"/blog/tags/query"},{"label":"hash","permalink":"/blog/tags/hash"}],"readingTime":3.29,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.26","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","authors":["milesj"],"tags":["proto","docker","query","hash"],"image":"./img/v0.26.png"},"prevItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"},"nextItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWith this release, we\'re providing deeper integration with our new [proto](/proto) toolchain\\nmanager, better Docker support, and new query commands for debugging.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full proto toolchain integration\\n\\n
\\n \\n
\\n\\nEarlier this week we announced [proto](/proto), our own toolchain manager, and an attempt at a next\\ngeneration version manager for multiple languages. proto was originally moon\'s toolchain layer, but\\nwe felt it best to extract it out into a stand-alone tool for everyone to use, especially those not\\nusing moon!\\n\\nNow that proto has been released, we\'ve updated moon\'s Rust internals to utilize proto\'s latest Rust\\ncrates. For the most part, everything will continue to work the same. However, the biggest change is\\nthat the toolchain has moved from `~/.moon` to `~/.proto`, and will result in tools being\\nre-downloaded and installed. Feel free to delete the old `~/.moon` directory manually.\\n\\nFurthermore, we\'ve added first-class support for the new [`.prototools`](/docs/proto/config)\\nconfiguration file. If this file is found in the workspace root, we\'ll automatically enable the\\ntools in our toolchain, and inject the versions (when not defined in `.moon/toolchain.yml`).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.0.0\\"\\npnpm = \\"7.29.0\\"\\n```\\n\\n## New `moon docker setup` command\\n\\nmoon has provided [built-in `Dockerfile` support](/docs/guides/docker) since v0.15 (11 versions\\nago!) and we\'ve always encouraged the use of the [`moon setup`](/docs/commands/setup) command to\\nsetup the toolchain and install project dependencies. Here\'s an example of a moon powered\\n`Dockerfile`:\\n\\n```docker\\nFROM node:latest\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n# Copy workspace skeleton\\nCOPY ./.moon/docker/workspace .\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy source files\\nCOPY ./.moon/docker/sources .\\n\\n# Build something\\nRUN moon run app:build\\n\\n# Prune workspace\\nRUN moon docker prune\\n\\nCMD [\\"moon\\", \\"run\\", \\"app:start\\"]\\n```\\n\\nHowever, over the course of these 11 releases since v0.15, we refactored the `moon setup` command to\\nonly setup the toolchain, and _no longer_ install project dependencies. We inadvertently broke our\\nDocker integration. This was an oversight on our part.\\n\\nTo rectify this situation, we\'re introducing a new\\n[`moon docker setup`](/docs/commands/docker/setup) command that will efficiently install\\ndependencies for projects focused/affected within the `Dockerfile`. This is a much better solution\\nthan before, and you should see improved Docker layer caching!\\n\\n```diff\\n-RUN moon setup\\n+RUN moon docker setup\\n```\\n\\n## New `moon query hash` command\\n\\nWhen moon runs a task, we generate a unique hash representing the state of that run. When something\\ngoes wrong however, and the hash is different than what you expect, debugging why is rather\\nnon-trivial and requires a lot of internal knowledge. We\'re looking to reduce this burden, by\\nintroducing the new [`moon query hash`](/docs/commands/query/hash) command.\\n\\n```shell\\n$ moon query hash 0b55b234\\n```\\n\\nThis command will print the contents of the hash manifest, which is all inputs and sources used to\\ngenerate the unique hash. From here you can use this output to investigate what\'s actually\\nhappening.\\n\\n```json\\n{\\n \\"command\\": \\"build\\",\\n \\"args\\": [\\"./build\\"]\\n // ...\\n}\\n```\\n\\n## New `moon query hash-diff` command\\n\\nExpanding on the new command above, we\'re also introducing the\\n[`moon query hash-diff`](/docs/commands/query/hash-diff) command, which can be used to compute the\\ndifference between 2 hashes. Perfect in understanding what has changed between ran tasks.\\n\\n```shell\\n$ moon query hash-diff 0b55b234 2388552f\\n```\\n\\nWhen ran, the command will print out the differences as highlighted lines. If you use `git diff`,\\nthis will feel familiar to you.\\n\\n```diff\\n{\\n\\t\\"command\\": \\"build\\",\\n\\t\\"args\\": [\\n+\\t\\t\\"./dist\\"\\n-\\t\\t\\"./build\\"\\n\\t],\\n\\t...\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.26.0) for a\\nfull list of changes.\\n\\n- A handful of critical bug fixes.\\n- Targets that generate an empty hash are now considered a failure, as they may be an edge case not\\n accounted for.\\n\\n## What\'s next?\\n\\nExpect the following in the v1 release!\\n\\n- Officially release a v1!\\n- Project tagging and constraints."},{"id":"proto","metadata":{"permalink":"/blog/proto","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx","source":"@site/blog/2023-03-09_proto.mdx","title":"Introducing proto, a next-generation toolchain manager!","description":"We are proud to announce the launch of proto, a next-generation toolchain manager for all","date":"2023-03-09T00:00:00.000Z","formattedDate":"March 9, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto","title":"Introducing proto, a next-generation toolchain manager!","authors":["milesj"],"tags":["proto","toolchain"],"image":"./img/proto/v0.png"},"prevItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"},"nextItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWe are proud to announce the launch of [proto](/proto), a next-generation toolchain manager for all\\nof your favorite programming languages.\\n\\n\x3c!--truncate--\x3e\\n\\n
\\n \\n
\\n\\n[proto](/proto) is a Rust based multi-language toolchain manager that will download and install\\ntools by version, and immediately make them available on `PATH`. proto is launching with initial\\nsupport for [Bun](https://bun.sh), [Deno](https://deno.land), [Node.js](https://nodejs.org) (and\\nnpm, pnpm, yarn), and [Go](https://go.dev), with more languages on the way!\\n\\n```shell\\nproto install node 18\\nproto install go 1.20\\nproto install deno 1.30\\n```\\n\\nUnlike other version managers that pin their global binary to a default version, proto will\\n[contextually detect an applicable version](/docs/proto/detection) from the environment or the\\nlanguage\'s ecosystem (like `package.json`), ensuring the correct tool is always being ran.\\n\\n```shell\\n# Will detect a version before running\\nbun run ./script.ts\\n```\\n\\nFurthermore, with proto\'s [`.prototools`](/docs/proto/config) file, you can pin versions of all\\nrequired tools on a per-project or per-repository basis, allowing for near instant setup of\\ndeveloper environments. Perfect for onboarding new developers!\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.12.0\\"\\nyarn = \\"3.3.0\\"\\n```\\n\\n```shell\\n# Install all the things!\\nproto use\\n```\\n\\nAnd lastly, [moon](/moon)\'s toolchain is built on proto, so if you\'re using moon, you might as well\\nuse proto. This will enable a single toolchain for both tools (in v0.26)!\\n\\n
\\n
\\n\\n## How to get started?\\n\\nIn a terminal that supports Bash, run:\\n\\n```\\ncurl -fsSL https://moonrepo.dev/install/proto.sh | bash\\n```\\n\\nIn Powershell or Windows Terminal, run:\\n\\n```\\nirm https://moonrepo.dev/install/proto.ps1 | iex\\n```\\n\\nJump to the [documentation](/docs/proto) for more information on getting started and available\\ncommands!\\n\\n## Why another version manager?\\n\\nTo start, proto powers [moon\'s](/moon) toolchain and integrated developer environment. We believed\\nthat moon\'s toolchain would be extremely beneficial for developers as a whole, and so we extracted\\nproto out into a standalone Rust CLI and Rust crates that moon inherits.\\n\\nFurthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each\\nwith different workflows, CLI commands, and configuration files, is a poor developer experience.\\n\\nOur goal is to unify all of these into a single performant interface. A toolchain manager is the\\nnext step in the version manager evolution."},{"id":"v0.25","metadata":{"permalink":"/blog/v0.25","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx","source":"@site/blog/2023-02-27_v0.25.mdx","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","description":"With this release, we\'re landing Deno, our first supported language besides Node.js, and improving","date":"2023-02-27T00:00:00.000Z","formattedDate":"February 27, 2023","tags":[{"label":"deno","permalink":"/blog/tags/deno"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"offline","permalink":"/blog/tags/offline"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":4.475,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.25","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","authors":["milesj"],"tags":["deno","toolchain","moonbase","offline","github"],"image":"./img/v0.25.png"},"prevItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"},"nextItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re landing Deno, our first supported language besides Node.js, and improving\\ninteroperability of languages as a whole.\\n\\n\x3c!--truncate--\x3e\\n\\n## Deno tier 2 support (experimental)\\n\\nThree months ago we announced our [new tiered support structure](./v0.21) for languages, and as of\\ntoday, we\'re happy to announce that our second language to reach tier 2 is\\n[Deno](https://deno.land)! With tier 2 support, we now analyze Deno specific configuration files\\n(like `deno.json`) to infer dependencies and relationships, as well as utilize this information for\\ninputs and hashing purposes. With that being said, we\'re marking this release as experimental until\\nwe fine tune the implementation, and iron out all the bugs.\\n\\nTo get started with using Deno, enable the new [`deno`](/docs/config/toolchain#deno) setting in\\n[`.moon/toolchain.yml`](/docs/config/toolchain). At this time, we don\'t have many settings to\\nconfigure, so simply defining an empty object is enough to enable the Deno platform! Learn more\\nabout this in our [Deno handbook](/docs/guides/javascript/deno-handbook).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\ndeno: {}\\n```\\n\\nOnce enabled, you can start using `deno` commands in your moon tasks. moon will automatically set\\nthe [`platform`](/docs/config/project#platform-1) to \\"deno\\" when using a deno command.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'deno fmt\'\\n```\\n\\n:::info\\n\\nBecause this is only tier 2 support, moon _does not_ download and install Deno into its toolchain.\\nmoon expects the `deno` binary to exist in the current environment.\\n\\n:::\\n\\nFurthermore, if you\'re working a project that is composed of multiple JavaScript runtimes, like\\nDeno, Bun, or Node.js, you can set the default `platform` for all tasks at the project-level.\\n\\n```yaml title=\\"moon.yml\\"\\nplatform: \'deno\'\\nlanguage: \'typescript\'\\ntype: \'application\'\\n```\\n\\nWe\'re very excited for this release as it paves the way for future language integrations, and\\nenables additional JavaScript runtimes!\\n\\n## CI insights in moonbase\\n\\nWe\'ve spent the last few weeks implementing a new [moonbase](https://moonrepo.app) feature called CI\\ninsights, where we track all CI runs (via [`moon ci`](/docs/commands/ci)), and all actions (tasks)\\nthat have ran based on affected files. In the future these insights will help catch regressions,\\nalert on flakiness, provide granular metrics, and help monitor the health of your CI pipeline and\\nrepositories.\\n\\n\\n\\nWith this initial release, we track touched files, which targets are affected based on those files,\\nan estimation on how much time was saved or lost, the actions that ran and their final status,\\noutlined as a timeline.\\n\\n\\n\\nInsights are enabled by default if you\'re using moonbase in your CI pipeline, and start using moon\\nv0.25! You can disable insights gathering from your\\n[organization settings page](https://moonrepo.app).\\n\\n## Offline mode\\n\\nmoon assumes that an internet connection is always available, as we download and install tools into\\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\\nWhile this is useful, having a constant internet connection isn\'t always viable.\\n\\nIn this release, we now check for an active internet connection and bypass certain workflows when\\napplicable.\\n[Jump to the official guide on offline mode for more information](/docs/guides/offline-mode)!\\n\\n## Custom project `language`\\n\\nProject\'s have always been able to define a [`language`](/docs/config/project#language) in\\n[`moon.yml`](/docs/config/project) that denotes the primary programming language for the project.\\nHistorically this has been a strict enum of supported values, and could _not_ be customized for\\nother languages. With the introduction of\\n[language driven task inheritance](./v0.23#new-scoped-tasks-with-moontasksyml), we felt like\\nrevisiting this setting, and as such, you\'re now able to define _any_ language in this setting,\\nwhich also feeds into the task inheritance system.\\n\\n```yaml title=\\"moon.yml\\"\\nlanguage: \'kotlin\'\\n```\\n\\nWith this change, `.moon/tasks/kotlin-application.yml`, `.moon/tasks/dotnet.yml`, and other\\nvariations are now possible! However, besides task inheritance, other functionality like platform\\ndetection, and Dockerfile support are not enabled.\\n\\n## Project-level TypeScript settings (breaking)\\n\\nOur TypeScript integration supports many automated workflows, like syncing project references, and\\nrouting `outDir` to our shared cache. This is wonderful for the majority, but for the handful of\\nprojects where these settings were not viable, there was no simple way to disable or opt out of the\\nfunctionality.\\n\\nWell no more, projects can now override the workspace-level TypeScript settings\\n`routeOutDirToCache`, `syncProjectReferences`, and `syncProjectReferencesToPaths` through the\\n[`toolchain.typescript`](/docs/config/project#typescript) setting in\\n[`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntoolchain:\\n\\ttypescript:\\n\\t\\trouteOutDirToCache: false\\n```\\n\\nBecause this setting was changed from a boolean to an object, the old pattern of disabling\\nTypescript must now use the `disabled` setting.\\n\\n```yaml title=\\"moon.yml\\"\\n# Old\\ntoolchain:\\n\\ttypescript: false\\n\\n# new\\ntoolchain:\\n\\ttypescript:\\n\\t\\tdisabled: true\\n```\\n\\n## New `moonrepo/setup-moon-action` GitHub action\\n\\nIf you\'re using GitHub Actions as your CI pipeline, we\'ve introducing a new action called\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action), that will install the\\n`moon` binary globally, and will cache (and restore) the moon toolchain.\\n\\nWith this new action, let moon handle all the heavy lifting, and avoid all the unnecessary steps\\naround setting up Node.js, and install dependencies.\\n\\n```yaml\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n - uses: moonrepo/setup-moon-action@v1\\n - run: moon ci\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.25.0) for a\\nfull list of changes.\\n\\n- Updated project, task, and target identifiers to support periods (`.`).\\n- Refactored glob matching to use workspace relative paths instead of absolute. Please report an\\n issue if hashing or affected detection is now inaccurate.\\n- We now build against older operating systems in an attempt to solve GLIBC version errors.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.26 release!\\n\\n- Officially release proto!\\n- Improved Deno interoperability."},{"id":"v0.24","metadata":{"permalink":"/blog/v0.24","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx","source":"@site/blog/2023-02-13_v0.24.mdx","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","description":"With this release, we\'ve polished our CLI experience and improved task interoperability.","date":"2023-02-13T00:00:00.000Z","formattedDate":"February 13, 2023","tags":[{"label":"project","permalink":"/blog/tags/project"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":4.28,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"v0.24","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","authors":["milesj","jpoz"],"tags":["project","platform","moonbase","remote-cache"],"image":"./img/v0.24.png"},"prevItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"},"nextItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'ve polished our CLI experience and improved task interoperability.\\n\\n\x3c!--truncate--\x3e\\n\\n## Remote caching now available\\n\\nIf you missed our announcement earlier this week,\\n[remote caching is now publicly available through our new service moonbase](/blog/moonbase)! If\\nyou\'re looking to speed up your CI pipelines and share build artifacts between runs, moonbase can\\nhelp.\\n\\n
\\n
\\n\\n## Project-level task platform\\n\\nIn our previous release, [v0.23](./v0.23#project-level-environment-variables), we added support for\\nproject-level environment variables. This is great as it helps to reduce duplication for projects\\nwith many tasks. On that note, we wondered which configuration field we could apply similar\\ntreatment, and as such, we\'ve added a project-level [`platform`](/docs/config/project#platform)\\nsetting.\\n\\nWhen this setting is defined, all task\'s within the current project that have _not explicitly_\\nconfigured their `platform`, will inherit the project-level platform. If neither settings are\\ndefined, we\'ll attempt to detect the correct platform based on the state of the project.\\n\\n```yaml title=\\"/moon.yml\\"\\n# Will set non-explicit task\'s platform to node\\nplatform: \'node\'\\n\\ntasks:\\n\\t# Will be node\\n dev: # ...\\n\\n\\t# Will be node\\n build: # ...\\n\\n\\t# Will be system\\n serve:\\n # ...\\n platform: \'system\'\\n```\\n\\n> This setting is _extremely useful_ for projects that contain multiple languages. Even more so once\\n> we land Bun and Deno support, as we\'ll need a way to differentiate JavaScript/TypeScript projects!\\n\\n## Interactive tasks\\n\\nWhen moon executes a task, it streams both stdout and stderr to the terminal _and_ captures the\\noutput for later use. We do this for 2 reasons:\\n\\n- We store stdout.log and stderr.log files in a tarball archive.\\n- We replay this captured output when executing a task that has been cached.\\n\\nWhile this works, our approach is non-standard. Streams are either piped or inherited, not both!\\nBecause of our custom abstraction around streams and output capturing, it disrupts stdin, breaking\\nall interactive commands. If you tried to run a task that prompted you with a question and were\\nunable to answer it, this is why!\\n\\nTo remedy this shortcoming, we\'re approaching this from 2 angles. The first is that all tasks marked\\nas [`local`](/docs/config/project#local) (or have caching disabled) will no longer capture streamed\\noutput, and will instead stream natively, allowing interactivity out of the box, but only when\\nthey\'re the only task being ran. This will cover the majority of use cases.\\n\\nFor the remaining use cases, we\'re introducing a new `--interactive` flag for\\n[`moon run`](/docs/commands/run). When this flag is provided, it will force the target into an\\ninteractive mode.\\n\\n```shell\\n$ moon run app:new --interactive\\n```\\n\\n## Improved `moon query` commands (breaking)\\n\\nThe [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query touched-files`](/docs/commands/query/touched-files) commands are useful for building\\ncustom solutions and integrations on top of moon, but they weren\'t developer friendly as they output\\nlarge JSON blobs. To remedy this, we\'ve updated both commands to output a simple human readable\\nformat by default, and moved the JSON output behind a `--json` flag.\\n\\nFor example, `moon query touched-files` now outputs a list of absolute file paths separated by new\\nlines.\\n\\n```\\n$ moon query touched-files\\n/moon/website/docs/commands/query/projects.mdx\\n/moon/crates/cli/tests/query_test.rs\\n/moon/crates/cli/src/commands/query.rs\\n/moon/website/blog/2023-02-13_v0.24.mdx\\n```\\n\\nWhile `moon query projects` now outputs a list of project separated by new lines, where each line\\ncontains the project name, source, type, and language.\\n\\n```\\n$ moon query projects\\nreport | packages/report | library | typescript\\nruntime | packages/runtime | library | typescript\\ntypes | packages/types | library | typescript\\nvisualizer | packages/visualizer | library | typescript\\nwebsite | website | application | typescript\\n```\\n\\nWe had 2 goals in mind for this change, the first was to make it easily readable, and the second was\\nfor the default output to be easily parseable. We believe we\'ve accomplished these goals!\\n\\n## New `moon query tasks` command\\n\\nTo expand on the query improvements above, we wanted to provide a way to also query for tasks,\\nanswering the question of \\"What tasks exists and for what projects?\\". And with this, we\'re\\nintroducing a new [`moon query tasks`](/docs/commands/query/tasks) command!\\n\\n```\\n$ moon query tasks\\ntypes\\n\\t:build | packemon\\n\\t:format | prettier\\n\\t:lint | eslint\\n\\t:test | jest\\n\\t:typecheck | tsc\\nreport\\n\\t:build | packemon\\n\\t:format | prettier\\n\\t:lint | eslint\\n\\t:test | jest\\n\\t:typecheck | tsc\\n...\\n```\\n\\n## Shell completions\\n\\nAuto-completion in your terminal increases productivity, which we\'re a massive fan of. To help\\nsupport this, we\'re introducing the [`moon completions`](/docs/commands/completions) command, which\\ngenerates the appropriate command completions for your current shell.\\n\\nThis command writes to stdout, which can then be redirected to a file of your choice. Be sure to\\nconfigure your shell profile to load the completions!\\n\\n```shell\\n$ moon completions > ~/.bash_completion.d/moon.sh\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.24.0) for a\\nfull list of changes.\\n\\n- Added [TypeScript v5](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/)\\n support.\\n- Added a `hasher.walkStrategy` setting to `.moon/workspace.yml`.\\n- Updated task `outputs` to support token functions (`@group`, `@globs`, etc).\\n- Reworked our comparison/baseline estimations calcuations.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.25 release!\\n\\n- Deno tier 2 support.\\n- CI insights and metrics within moonbase.\\n- Project-level TypeScript settings."},{"id":"moonbase","metadata":{"permalink":"/blog/moonbase","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-08_moonbase.mdx","source":"@site/blog/2023-02-08_moonbase.mdx","title":"Remote caching is now publicly available through moonbase","description":"We are proud to announce the launch of moonbase remote caching \u2013 a new solution that","date":"2023-02-08T00:00:00.000Z","formattedDate":"February 8, 2023","tags":[{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":1.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"moonbase","title":"Remote caching is now publicly available through moonbase","authors":["milesj","jpoz"],"tags":["moonbase","remote-cache"]},"prevItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"},"nextItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\nimport Logo from \'../static/brand/moonbase/logo.svg\';\\n\\nWe are proud to announce the launch of [moonbase](/moonbase) remote caching \u2013 a new solution that\\nhelps moon developers streamline their build processes and save time.\\n\\n\x3c!--truncate--\x3e\\n\\n
\\n \\n
\\n\\nRemote caching allows developers to cache artifacts across builds, improving the efficiency of their\\nContinuous Integration (CI) pipelines. This is accomplished by automatically caching build artifacts\\nwhen moon is run with moonbase [remote caching enabled](/docs/guides/remote-cache). In the event\\nthat a CI run is executed with identical code, the cached artifacts are automatically pulled down,\\nreducing the time required to complete the build. In our tests, we have seen significant\\nimprovements in CI times, upwards of 90%.\\n\\n## What is moonbase?\\n\\nYou may be asking yourself, what is moonbase? [moonbase](/moonbase) is a new cloud service that\\nwe\'ve been working on to solve an array of problems in regards to repository and continous\\nintegration health.\\n\\n\\n\\nThe first problem on this list is [remote caching](/docs/guides/remote-cache), which has been in a\\nbeta program for the past few months. We want to thank all the beta participants for testing our\\nsystems!\\n\\nWe\'ll also be launching CI insights in the next few weeks. This is a system where we track all your\\nCI runs (via `moon ci`), and all moon tasks (actions) that ran within each job. We use this\\ninformation to track the health of your pipelines, catch regressions, alert on flakiness, and more!\\nBut don\'t worry, this feature is opt-in.\\n\\nWe\'re very excited for moonbase! We have a massive roadmap ahead of us, but we\'re sure y\'all will\\nenjoy everything that it has to offer.\\n\\n
\\n
\\n\\n## New homepage and product pages\\n\\nAs part of this release, we\'ve updated our homepage, and added new product pages for both\\n[moon](/moon) and [moonbase](/moonbase). This includes new logos and typography, which we\'re very\\nexcited for! This is only the beginning, as we\'re also working on additional behind the scenes\\nproducts. Stay tuned!"},{"id":"v0.23","metadata":{"permalink":"/blog/v0.23","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx","source":"@site/blog/2023-01-30_v0.23.mdx","title":"moon v0.23 - Scoped task inheritance, and project config updates","description":"With this release, we\'re launching the next iteration of our task inheritance model, as well as","date":"2023-01-30T00:00:00.000Z","formattedDate":"January 30, 2023","tags":[{"label":"survey","permalink":"/blog/tags/survey"},{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"projects","permalink":"/blog/tags/projects"}],"readingTime":5.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.23","title":"moon v0.23 - Scoped task inheritance, and project config updates","authors":["milesj"],"tags":["survey","tasks","projects"],"image":"./img/v0.23.png"},"prevItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"},"nextItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re launching the next iteration of our task inheritance model, as well as\\nquality of life improvements for project configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Developer survey\\n\\nBefore we dive into this new release, we have a quick survey for everyone. We know how everyone\\nfeels about surveys, but this one is real quick, only a few minutes, and is mostly multiple choice\\nquestions.\\n\\nWe\'re looking for feedback on moon itself, what features you\'re looking for, what you currently do\\nnot like, how you\'re currently using monorepos, your development workflows, so on and so forth. We\'d\\nvery much appreciate it if you could engage with this survey!\\n\\n
\\n \\n
\\n\\n## Improved task inheritance model\\n\\nOne of the guiding principles behind moon is to simplify repository maintenance, with task\\nmanagement being top of list. We weren\'t happy with the current state of things, as every build\\nsystem and task runner that exists always opted for per-project task management, which is a massive\\namount of overhead and tech debt in the long run. To combat this, moon was designed from the\\nground-up using a task inheritance model, where \\"global\\" tasks were defined in\\n[`.moon/project.yml`](/docs/config/tasks), with per-project tasks still being an option with\\n[`moon.yml`](/docs/config/project).\\n\\nWhile inheritance worked great, it did have some shortcomings, such as:\\n\\n- With the addition of [new programming languages](/blog/v0.21), there\'s no way to easily define\\n tasks for specific languages, that should only be inherited by specific projects.\\n- There\'s no way to differentiate tasks between applications or libraries, as they typically have\\n different build/compilation systems.\\n- All of the problems above can be \\"solved\\" with\\n [`workspace.inheritedTasks`](/docs/config/project#inheritedtasks) in all projects, but it\'s a\\n maintenance headache.\\n\\nWe\'ve been documenting a solution to these problems for many months now, and we\'re very excited to\\nfinally release our new and improved task inheritance model that solves all of the problems above,\\nand opens the doors for future enhancements! Keep reading for more information.\\n\\n### New `.moon/tasks.yml` (breaking)\\n\\nTo start, we renamed `.moon/project.yml` to `.moon/tasks.yml` as we want to emphasize that this\\nconfiguration file is for task inheritance functionality only. However, the semantics of this file\\nhas _not_ changed, and is still \\"tasks to be inherited by _all_ projects\\".\\n\\n```yaml title=\\".moon/tasks.yml\\"\\n$schema: \'https://moonrepo.dev/schemas/tasks.json\'\\n\\ntasks:\\n # ...\\n```\\n\\n> We\'ll automatically rename this file for you when running a `moon` command!\\n\\n### New scoped tasks with `.moon/tasks/*.yml`\\n\\nThe biggest change to task inheritance is that tasks can now be scoped by a project\'s\\n[`language`](/docs/config/project#language) or [`type`](/docs/config/project#type) using the new\\n`.moon/tasks/.yml` or `.moon/tasks/-.yml` configuration files! Jump to the\\n[official documentation on task inheritance](/docs/concepts/task-inheritance) for more information\\non how scoping works, the lookup order of files, and much more.\\n\\nAs a demonstration, you can scope tasks to Node.js projects with `.moon/tasks/node.yml`, Rust\\napplications with `.moon/tasks/rust-application.yml`, Go libraries with\\n`.moon/tasks/go-library.yml`, Ruby scripts with `.moon/tasks/ruby-tool.yml`, so on and so forth!\\n\\nWe\'re very excited for this feature, as it\'s something we personally needed, and we\'re sure you all\\ndo as well. It also future proofs moon for new programming languages, additional implicit scenarios\\nto handle, and yet to be discovered functionality.\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'prettier --write .\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'go fmt\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'phpcbf .\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'pylint .\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'rubocop -l\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'cargo fmt --all --check\'\\n```\\n\\n\\n\\n\\n### Moved `implicitDeps` and `implicitInputs` (breaking)\\n\\nTo standardize inheritance and expansion related functionality, we\'ve moved the\\n`runner.implicitDeps` and `runner.implicitInputs` settings from `.moon/workspace.yml` to\\n[`.moon/tasks.yml`](/docs/config/tasks#implicitdeps) and\\n[`.moon/tasks/*.yml`](/docs/config/tasks#implicitinputs) and removed the `runner` prefix.\\n\\nThis allows for implicits to also be scoped accordingly and granularly. For example, projects can\\nnow inherit dependency manager related files as implicit inputs on a per-language basis:\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\nimplicitInputs:\\n\\t- \'package.json\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\nimplicitInputs:\\n\\t- \'go.mod\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\nimplicitInputs:\\n\\t- \'composer.json\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\nimplicitInputs:\\n\\t- \'pyproject.toml\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\nimplicitInputs:\\n\\t- \'Gemfile\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\nimplicitInputs:\\n\\t- \'Cargo.toml\'\\n```\\n\\n\\n\\n\\n## Project-level environment variables\\n\\nSince moon\'s inception, tasks can be configured with pre-defined environment variables using the\\n[`env`](/docs/config/project#env-1) setting. These variables would then be passed to the command\\nduring execution. This works perfectly for encapsulation, but becomes tedious when the same\\nvariables are repeated for multiple tasks.\\n\\nTo remedy this, environment variables can now be defined at the top of\\n[`moon.yml`](/docs/config/project) using the top-level [`env`](/docs/config/project#env) setting.\\nVariables defined at the top-level will be inherited by all tasks in the current project, but will\\nnot override task-level variables of the same name.\\n\\nTo demonstrate this, the following config:\\n\\n```yaml title=\\"/moon.yml\\"\\ntasks:\\n dev:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n build:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n serve:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n```\\n\\nCan be rewritten as:\\n\\n```yaml title=\\"/moon.yml\\"\\nenv:\\n TARGET_ENV: \'development\'\\n\\ntasks:\\n dev:\\n # ...\\n\\n build:\\n # ...\\n\\n serve:\\n # ...\\n```\\n\\n## Globs in task outputs\\n\\nAnother feature that\'s been around since moon\'s inception is task\\n[`outputs`](/docs/config/project#outputs), which only supported relative files and folders. For\\nhistorical reasons, it was the easiest solution at the time, but in practice, supporting more\\ngranular control is better.\\n\\nAs such, task `outputs` now support glob patterns as well! This is perfect for restricting and\\nfiltering down which files are cached in the artifact. However, be aware that during hydration (a\\ncache hit), all files _not matching the glob_ will be deleted, so ensure that critical files _do_\\nmatch.\\n\\nTo demonstrate this, if building a JavaScript project, you may want to include `.js` and `.css`\\nfiles, but exclude everything else (`.map`, etc).\\n\\n```yaml title=\\"moon.yml\\" {4,5}\\ntasks:\\n build:\\n command: \'webpack\'\\n outputs:\\n - \'build/**/*.{js,css}\'\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.23.0) for a\\nfull list of changes.\\n\\n- Updated `moon migrate from-turborepo` to preserve globs in outputs.\\n- Updated project graph to no longer cache when there\'s no VCS root.\\n- Updated pnpm to use the new `pnpm dedupe` command when the version is >= 7.26.0.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.24 release!\\n\\n- New `moon query tasks` command.\\n- New per-project `platform` setting.\\n- Token support in task `outputs`.\\n- TypeScript v5 support."},{"id":"v0.22","metadata":{"permalink":"/blog/v0.22","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx","source":"@site/blog/2023-01-16_v0.22.mdx","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","description":"It\'s the first release of the year, and with this release, we\'re landing some quality of life","date":"2023-01-16T00:00:00.000Z","formattedDate":"January 16, 2023","tags":[{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"migrate","permalink":"/blog/tags/migrate"}],"readingTime":2.805,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.22","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","authors":["milesj"],"tags":["graph","pipeline","hasher","migrate"],"image":"./img/v0.22.png"},"prevItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"},"nextItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nIt\'s the first release of the year, and with this release, we\'re landing some quality of life\\ninfrastructure and workflow improvements!\\n\\n\x3c!--truncate--\x3e\\n\\n## New action pipeline\\n\\nWhen running targets, we generate a graph of actions to execute in order within the action runner.\\nAn action is one of \\"setup toolchain\\", \\"install dependencies\\", \\"run target\\", so on and so forth. Our\\naction runner would then spawn threads for every action using the [Tokio](https://tokio.rs/)\\nruntime. While this worked great, concurrency was entirely abstracted away from us.\\n\\nTo mitigate this problem, we\'ve implemented a new system for executing actions known as the action\\npipeline (or simply pipeline), which implements a dynamically scaling thread pool on top of Tokio.\\nThis provides us with more control over concurrency, starting with the new `--concurrency` option,\\nwhich restricts the number of threads (or CPU cores).\\n\\n```shell\\n$ moon run :build --concurrency 2\\n```\\n\\n## Expanded hashing functionality\\n\\nWhen we run targets in the pipeline, we hash a collection of inputs to calculate whether to continue\\nrunning or to exit early. This functionality has been extremely beneficial for optimizing the\\npipeline, and so, we\'ve expanded the hasher for other use cases. To start, the following 2 workflows\\nnow utilize the hasher:\\n\\n- When determining to auto-install dependencies (`npm install`, etc), we now hash all production,\\n development, and peer dependencies from applicable manifests (`package.json`). This has resulted\\n in more accurate installs, as we\'re no longer inadvertently installing when a non-dependency field\\n is modified in a manifest. On top of this, will still take into account lockfile modified\\n timestamps.\\n- When generating the project graph, we now hash all sources, aliases, and configuration files, to\\n determine whether to load the project graph from the local cache.\\n\\n## Project graph is now cached\\n\\nBecause of the hashing improvements above, we\'re now able to cache the entirety of the project graph\\ninto local cache. Depending on how many projects are in your workspace, you may see performance\\nimprovements on subsequent runs as we\'re no longer re-building the project graph over and over\\neverytime the `moon` binary is ran.\\n\\n## Migrate from Turborepo\\n\\nTurborepo is a popular task runner for Node.js based monorepos, but doesn\'t support all the\\nfunctionality that moon does. If you\'re looking to prototype moon, or migrate from Turborepo to moon\\nholistically, we now support a new command\\n[`moon migrate from-turborepo`](/docs/commands/migrate/from-turborepo).\\n\\nThis command will migrate the `turbo.json` file to moon applicable configuration files!\\n\\n```shell\\n$ moon migrate from-turborepo\\n```\\n\\n## Breaking changes\\n\\n### Renamed events\\n\\nBecause of the runner -> pipeline changes above, the `runner.*` [webhook](/docs/guides/webhooks)\\nevents were renamed to `pipeline.*`.\\n\\n### Updated CLI options\\n\\nRenamed the `--upstream` option to `--remote`, to better align with Git terminology, and removed the\\n`--report` option from `moon check` and `moon run` commands. Reports are now always created.\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.22.0) for a\\nfull list of changes.\\n\\n- Added Bun as a tier 1 language (doesn\'t do much at the moment).\\n- Added a [`versionConstraint` setting](/docs/config/workspace#versionconstraint) in\\n `.moon/workspace.yml` that enforces a requirement on the running moon binary.\\n- Updated the [`project` fields](/docs/config/project#project) in `moon.yml` to be optional,\\n excluding `description`.\\n- Internal improvements to remote caching and artifact uploading.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.23 release!\\n\\n- Improved task inheritance workflow.\\n- Glob support in task `outputs`.\\n- Project-level environment variables."},{"id":"2023-roadmap","metadata":{"permalink":"/blog/2023-roadmap","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx","source":"@site/blog/2023-01-04_2023-roadmap.mdx","title":"What\'s in store for 2023","description":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long","date":"2023-01-04T00:00:00.000Z","formattedDate":"January 4, 2023","tags":[{"label":"roadmap","permalink":"/blog/tags/roadmap"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":5.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"2023-roadmap","title":"What\'s in store for 2023","authors":["milesj"],"tags":["roadmap","moonbase","proto","toolchain"]},"prevItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"},"nextItem":{"title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","permalink":"/blog/v0.21"}},"content":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long\\nroadmap.\\n\\n\x3c!--truncate--\x3e\\n\\n## Year 2022 in review\\n\\nThe original concept and\\n[first commit of moon](https://github.com/moonrepo/moon/commit/62267e3ccda7a45c2e9355fcbddba577ae54403d)\\n(codenamed monolith) landed October 23rd, 2021. Eight months later, we\\n[launched an alpha of moon](https://twitter.com/tothemoonrepo/status/1527467865200136192) to the\\npublic on May 19th, 2022. Since then, we\'ve landed 21 amazing releases based on feedback from the\\ncommunity and our long-term vision, with some such features as:\\n\\n- Linux musl, macOS silicon, and ARM support\\n- Full Node.js/JavaScript ecosystem support\\n- End-to-end caching and hashing of build artifacts\\n- Streamlined configuration\\n- Improved developer experience\\n- Massive performance improvements\\n- Automatic cache cleaning\\n- Code generation / scaffolding\\n- Dockerfile integration\\n- Remote caching\\n- New langauage agnostic toolchain\\n- Onboarding of 5 new languages: Rust, Go, PHP, Python, Ruby\\n- Rewritten project and dependency graphs\\n- Project-level toolchain overrides\\n- Project specific caching\\n- VSCode extension\\n- 2 GitHub actions\\n- ...and so much more!\\n\\nWe\'re very proud with the quality and amount of features we\'ve released in a 7 month timeframe. On\\ntop of this, our [GitHub stars](https://github.com/moonrepo/moon/stargazers) have steadily passed\\nthe 1k mark, [npm](https://www.npmjs.com/package/@moonrepo/cli) downloads are 500 a week and\\ngrowing, and our [Twitter](https://twitter.com/tothemoonrepo) isn\'t doing too bad. This is only the\\nstart, and we\'re not planning to go anywhere!\\n\\n## Path to an official v1 release\\n\\nA common question we receive is \\"When is v1 going to be released?\\", as some consumers are weary of\\nusing a \\"beta\\" tool. We definitely understand, and as such, have posted a\\n[high-level overview](https://github.com/moonrepo/moon/issues/491) of what we\'re hoping to land\\nbefore we tag an official v1 release. It basically boils down to landing breaking changes (mainly\\naround configuration) before v1, so that we avoid bumping to a v2 or v3 unnecessarily. We also want\\nto land our [toolchain changes](#proto) and [remote caching](#moonbase) improvements before then.\\n\\nOur current timeframe is by end of Q1, if not, early Q2.\\n\\n## Launching moonbase\\n\\nWe haven\'t mentioned this name publicly yet, but now seems like the perfect time! For the past 6\\nmonths we\'ve been working a new web application and service called moonbase, which pairs nicely with\\nmoon, as it provides additional functionality that can only be achieved by persisting information\\nacross runs.\\n\\nTo start, this service provides [remote caching](/docs/guides/remote-cache), which we\'re already\\nusing in production. At this point in time, objects are stored in our moonrepo S3 buckets, but one\\nof our major goals is to support storing objects in your private buckets, supporting additional\\ncloud providers like Google Cloud and Azure, and in the long-term, a self-hosted / on-premises\\nsolution.\\n\\nBut that\'s not all! moonbase will integrate deeply with [continuous integration](/docs/guides/ci)\\npipelines to generate insights, capture metrics, and provide near real-time dashboards. Our goal is\\nto provide a holistic overview of your entire repository.\\n\\nmoonbase with publicly available remote caching is slated for end of Q1. CI integration is\\ntentatively slated for Q2. We have even more features that we\'ll reveal in the future, so stay\\ntuned!\\n\\n## Launching proto\\n\\nAnother tool we haven\'t mentioned yet is proto (name still in flux). proto is a standardized version\\nmanager for programming languages and dependency managers. We\'ve basically extracted our\\n[toolchain](/docs/concepts/toolchain) into a standalone library, as it\'s super beneficial for\\nprojects and developers not using moon. It provides all the functionality you\'d expect from a\\nversion manager:\\n\\n- Downloading and installing specific versions\\n- Automatic version detection\\n- Updating PATH with the applicable version\\n- Generating shims\\n- Pinning shell, local, and global versions\\n\\nSo how\'s this different from existing version managers like nvm or volta? To start, it\'s written in\\nRust so it\'s _fast_ and doesn\'t suffer from being Bash only. Because of this, it\'s also\\nmulti-platform and will work on Windows. But the biggest different is that proto is language\\nagnostic and will support multiple languages. To start, it supports Node.js and Deno, but will be\\nexpanded to support our other toolchain languages like Bun, PHP, Ruby, and Python. Another cool\\nfeature is that it also manages versions of dependency managers like npm, yarn, and pnpm!\\n\\nWe\'re planning to launch proto at the start of Q2.\\n\\n## Expanding language support\\n\\nOur initial goal for moon was to provide a first-class build system for the frontend ecosystem that\\nfocused heavily on automation and the developer experience. We believe we\'ve accomplished this goal,\\nbut of course, nothing is ever actually complete, and so JavaScript, TypeScript, and Node.js support\\nwill continually be improved.\\n\\nHowever, that\'s not the entirety of the frontend ecosystem, as [Deno](https://deno.land/) and\\n[Bun](https://bun.sh/) have been gaining traction this past year, and of course, moon will support\\nboth of them as first-class platforms by end of year.\\n\\nFuthermore, we recently landed tier 1 support for 5 new languages: Rust, Ruby, PHP, Python, and Go.\\nOur end of year goal for these languages is to provide full tier 2 support. Tier 3 support is still\\nan unknown, as we need to investigate the best possible way to integrate these languages into the\\ntoolchain (this work is ongoing). We\'ll also add new languages based on demand.\\n\\nWith all that being said, this is our tenative timeline around\\n[language support](/docs#supported-languages) (which may shift at any time):\\n\\n- **Q1**\\n - Tier 1 support for Bun.\\n - Tier 2 support for Deno.\\n- **Q2**\\n - Tier 2 support for Bun, PHP.\\n - Tier 3 support for Deno.\\n- **Q3**\\n - Tier 2 support for Ruby, Python.\\n - Tier 3 support for Bun.\\n- **Q4**\\n - Tier 2 support for Rust, Go.\\n\\n## Supporting release workflows\\n\\nmoon currently excels at organizing projects, running tasks, and building artifacts, but it has no\\nsupport for release workflows. This is everything from capturing changes, bumping versions,\\ngenerating changelogs, and publishing to upstream registries. If you use\\n[Lerna](https://github.com/lerna/lerna) or [changesets](https://github.com/changesets/changesets),\\nyou should be very familiar with this workflow.\\n\\nSince moon supports monorepos and has in-depth knowledge of the project graph, we can support\\nrelease workflows with ease. Our goal is to support this workflow (for all languages) from start to\\nfinish by end of year, ideally much sooner than that!\\n\\n## More repository management tooling\\n\\nThe other aspect of moon is that it\'s a repository management tool as well as a build system. We\\nwant to embrace this even further by providing explicit functionality or automation when applicable.\\nSome examples of this are in-repository secrets management, git hooks management, code ownership and\\nquality tooling, code review helpers, repository/configuration linting, a moon DSL, and much much\\nmore."},{"id":"v0.21","metadata":{"permalink":"/blog/v0.21","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx","source":"@site/blog/2022-12-19_v0.21.mdx","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","description":"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered","date":"2022-12-19T00:00:00.000Z","formattedDate":"December 19, 2022","tags":[{"label":"runner","permalink":"/blog/tags/runner"},{"label":"language","permalink":"/blog/tags/language"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"cache","permalink":"/blog/tags/cache"},{"label":"graph","permalink":"/blog/tags/graph"}],"readingTime":4.255,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.21","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","authors":["milesj"],"tags":["runner","language","platform","cache","graph"],"image":"./img/v0.21.png"},"prevItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"},"nextItem":{"title":"moon v0.20 - Toolchain, caching, and hydration improvements","permalink":"/blog/v0.20"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nHappy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered\\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\\nsystem! On top of this, we\'ve worked heavily on bug fixing, optimizations, and overall quality of\\nlife improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New tiered language support\\n\\nThe most common question we receive is whether we plan to support additional languages besides\\nNode.js, with Rust, Deno, and Bun being top of that list. Adding new languages is non-trivial, as we\\nneed to build abstractions that support and integrate with the language\'s ecosystem, primarily\\ndependency managers and resolution algorithms.\\n\\nThis is a very large upfront cost, with a huge time and resource commitment. To reduce this burden,\\nwe\'re introducing a tiered support structure, so that languages can be incrementally integrated into\\nmoon and adopted by consumers.\\n\\nThe tiers break down as follows:\\n\\n-