{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    // Available variables which can be used inside of strings.
    // ${workspaceRoot}: the root folder of the team
    // ${file}: the current opened file
    // ${fileBasename}: the current opened file's basename
    // ${fileDirname}: the current opened file's dirname
    // ${fileExtname}: the current opened file's extension
    // ${cwd}: the current working directory of the spawned process
    "version": "2.0.0",
    "tasks": [
        // Invokes ninja in the 'out/active' directory, which is created with
        // the 'gn gen' task (see below).
        {
            "label": "build",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "type": "shell",
            "linux": {
                "command": "sh",
                "args": [
                    "-c",
                    "ninja && echo Done"
                ],
            },
            "osx": {
                "command": "sh",
                "args": [
                    "-c",
                    "ninja && echo Done"
                ],
            },
            "windows": {
                "command": "/C",
                "args": [
                    "ninja && echo Done",
                ],
                "options": {
                    "shell": {
                        "executable": "cmd"
                    },
                }
            },
            "options": {
                "cwd": "${workspaceRoot}/out/active",
            },
            "presentation": {
                "echo": false,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": false,
                "clear": true,
            },
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": "absolute",
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        // Generates a GN build directory at 'out/<build-type>' with the
        // is_debug argument set to to true iff the build-type is Debug.
        // A symbolic link to this build directory is created at 'out/active'
        // which is used to track the active build directory.
        {
            "label": "setup build",
            "type": "shell",
            "command": "./tools/setup-build",
            "args": [
                "${input:buildSystem}",
                "${input:buildType}",
                "${input:buildArch}",
            ],
            "options": {
                "cwd": "${workspaceRoot}"
            },
            "problemMatcher": [],
        },
        // Rebases the current branch on to origin/main and then calls
        // `gclient sync`.
        {
            "label": "sync",
            "type": "shell",
            "linux": {
                "command": "sh",
                "args": [
                    "-c",
                    "git fetch origin && git rebase origin/main && gclient sync && echo Done"
                ],
            },
            "osx": {
                "command": "sh",
                "args": [
                    "-c",
                    "git fetch origin && git rebase origin/main && gclient sync && echo Done"
                ],
            },
            "windows": {
                "command": "/C",
                "args": [
                    "git fetch origin && git rebase origin/main && gclient sync && echo Done",
                ],
                "options": {
                    "shell": {
                        "executable": "cmd"
                    },
                }
            },
            "options": {
                "cwd": "${workspaceRoot}"
            },
            "problemMatcher": [],
        },
        // Pushes the changes at HEAD to gerrit for review
        {
            "label": "push",
            "type": "shell",
            "command": "git",
            "args": [
                "push",
                "origin",
                "HEAD:refs/for/main"
            ],
            "options": {
                "cwd": "${workspaceRoot}"
            },
            "problemMatcher": [],
        }
    ],
    "inputs": [
        {
            "id": "buildSystem",
            "type": "pickString",
            "options": [
                "cmake",
                "gn",
            ],
            "default": "gn",
            "description": "The build system",
        },
        {
            "id": "buildType",
            "type": "pickString",
            "options": [
                "Debug",
                "Release",
            ],
            "default": "Debug",
            "description": "The type of build",
        },
        {
            "id": "buildArch",
            "type": "pickString",
            "options": [
                "native",
                "x86",
            ],
            "default": "native",
            "description": "The build architecture",
        },
    ]
}