Ctrl K
ComunidadGuías…

MailFathom.code-workspace

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// Copyright © 2026 Krzysztof Kasprowicz
// Licensed under the GNU Affero General Public License, Version 3. See LICENSE in the project root for license information.
// Project repository: https://github.com/fathomise/MailFathom
//
// The VS Code entry point for this repository, because the repository root is not a solution directory. The service
// owns its own solution — backend/MailFathom.slnx — so a root opened on its own loads nothing and C# Dev Kit finds no
// project. Open this file instead, with `code MailFathom.code-workspace` or File → Open Workspace from File.
//
// This is a VS Code file and nothing else reads it. Rider and Visual Studio open a solution directly and neither has
// the problem it solves. `.vscode/` stays gitignored, which is why every section below is inline here rather than in
// a per-user file the repository would have to start tracking.
{
  // The service, and then the repository itself for everything belonging to neither stack — `docs/`, `deploy/`,
  // `scripts/`, `.github/`, `frontend/`, and the root files. `files.exclude` below keeps the service from appearing
  // twice under it.
  //
  // There is no `client` entry, because there is nothing for it to open: the Uno Platform client was withdrawn and the
  // client is being rebuilt in React, so `frontend/` holds two placeholder directories and no solution. It is read
  // under `repository` until the new stack arrives with whatever its own editor tooling turns out to be.
  "folders": [
    {
      "name": "service",
      "path": "backend"
    },
    {
      "name": "repository",
      "path": "."
    }
  ],

  "settings": {
    // Applied per folder root, so this hides the service from the `repository` entry and reaches nothing inside
    // `backend`, which contains no directory by that name. Quick Open and search still find every file in it, through
    // the folder that owns it.
    "files.exclude": {
      "backend": true
    },
    // The lock files, the golden manifests, and the generated site are read rather than edited, and a search that
    // returns them buries the file that was actually being looked for.
    "search.exclude": {
      "**/packages.lock.json": true,
      "deploy/helm/mailfathom/ci/golden": true,
      "docfx/_site": true
    },
    // The build already enforces this through `.editorconfig`, `EnforceCodeStyleInBuild`, and `TreatWarningsAsErrors`.
    // Applying it on save is what keeps a formatting failure out of the gate rather than into it.
    "editor.formatOnSave": true,
    "[csharp]": {
      "editor.defaultFormatter": "ms-dotnettools.csharp"
    },
    // `.slnx` is the solution format the service uses, and VS Code has no built-in association for it.
    "files.associations": {
      "*.slnx": "xml",
      "*.code-workspace": "jsonc"
    },
    // The SDK is pinned through the root `global.json`, so nothing here should reach for another one.
    "dotnet.dotnetPath": "",
    "dotnet.server.useOmnisharp": false
  },

  "extensions": {
    // What a fresh machine is prompted to install. C# Dev Kit loads the solution, and the YAML extension is for the
    // workflows and the Helm chart. Neither is a dependency of what MailFathom ships — they are editor tooling, and
    // the third-party register covers what the product carries rather than what a contributor's editor loads.
    "recommendations": [
      "ms-dotnettools.csdevkit",
      "ms-dotnettools.csharp",
      "redhat.vscode-yaml"
    ]
  },

  "launch": {
    "version": "0.2.0",
    "configurations": [
      // The whole local system: PostgreSQL, the migration run, and the service, in the order the app model declares.
      // This is the same thing `dotnet run --project backend/src/AppHost/AppHost.csproj` starts, with a debugger
      // attached to the app host itself rather than to the resources it launches.
      {
        "name": "Service: app host with the whole orchestration",
        "type": "coreclr",
        "request": "launch",
        "preLaunchTask": "build the app host",
        "program": "${workspaceFolder:service}/src/AppHost/bin/Debug/net10.0/MailFathom.AppHost.dll",
        "cwd": "${workspaceFolder:service}/src/AppHost",
        "console": "internalConsole",
        "stopAtEntry": false,
        "env": {
          "DOTNET_ENVIRONMENT": "Development"
        },
        // The dashboard address is the first thing the app host writes, and opening it is what makes the run usable.
        "serverReadyAction": {
          "action": "openExternally",
          "pattern": "\\blogin\\?t=[a-z0-9]+"
        }
      }
    ]
  },

  "tasks": {
    "version": "2.0.0",
    "tasks": [
      {
        "label": "build the app host",
        "detail": "Builds backend/src/AppHost, which is what the service launch configuration runs.",
        "type": "process",
        "command": "dotnet",
        "args": [
          "build",
          "${workspaceFolder:service}/src/AppHost/AppHost.csproj"
        ],
        "problemMatcher": "$msCompile",
        "group": "build"
      },
      {
        "label": "verify: fast loop",
        "detail": "scripts/verify-fast.sh — the loop to run while implementing.",
        "type": "shell",
        "command": "./scripts/verify-fast.sh",
        "options": {
          "cwd": "${workspaceFolder:repository}"
        },
        "problemMatcher": [],
        "group": "test"
      },
      {
        "label": "verify: full gate",
        "detail": "scripts/verify-full.sh — the gate to pass before committing. Stage the task's files first.",
        "type": "shell",
        "command": "./scripts/verify-full.sh",
        "options": {
          "cwd": "${workspaceFolder:repository}"
        },
        "problemMatcher": [],
        "group": "test"
      }
    ]
  }
}