{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "go",
			"label": "go: build workspace",
			"command": "build",
			"options": {
				"env": {
					"CGO_ENABLED": "0"
				},
				"cwd": "${workspaceFolder}/bin"
			},
			"args": [
				"../..."
			],
			"problemMatcher": [
				"$go"
			],
			"group": "build"
		},
		{
			"type": "shell",
			"label": "test: unit tests (all)",
			"command": "go test ./pkg/resolvespec ./pkg/restheadspec -v -cover",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$go"
			],
			"group": {
				"kind": "test",
				"isDefault": true
			},
			"presentation": {
				"reveal": "always",
				"panel": "shared",
				"focus": true
			}
		},
		{
			"type": "shell",
			"label": "test: unit tests (resolvespec)",
			"command": "go test ./pkg/resolvespec -v -cover",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$go"
			],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "shell",
			"label": "test: unit tests (restheadspec)",
			"command": "go test ./pkg/restheadspec -v -cover",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$go"
			],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "shell",
			"label": "test: integration tests (automated)",
			"command": "./scripts/run-integration-tests.sh",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$go"
			],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "dedicated",
				"focus": true
			}
		},
		{
			"type": "shell",
			"label": "test: integration tests (resolvespec only)",
			"command": "./scripts/run-integration-tests.sh resolvespec",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$go"
			],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "dedicated"
			}
		},
		{
			"type": "shell",
			"label": "test: integration tests (restheadspec only)",
			"command": "./scripts/run-integration-tests.sh restheadspec",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$go"
			],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "dedicated"
			}
		},
		{
			"type": "shell",
			"label": "test: coverage report",
			"command": "make coverage",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "shell",
			"label": "test: integration coverage report",
			"command": "make coverage-integration",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "shell",
			"label": "docker: start postgres",
			"command": "make docker-up",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [],
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "shell",
			"label": "docker: stop postgres",
			"command": "make docker-down",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [],
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "shell",
			"label": "docker: clean postgres data",
			"command": "make clean",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [],
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "go",
			"label": "go: test workspace (with race)",
			"command": "test",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"args": [
				"-v",
				"-race",
				"-coverprofile=coverage.out",
				"-covermode=atomic",
				"./..."
			],
			"problemMatcher": [
				"$go"
			],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			}
		},
		{
			"type": "shell",
			"label": "go: vet workspace",
			"command": "go vet ./...",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$go"
			],
			"group": "test"
		},
		{
			"type": "shell",
			"label": "go: lint workspace",
			"command": "golangci-lint run --timeout=5m",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [],
			"group": "build"
		},
		{
			"type": "shell",
			"label": "go: lint workspace (fix)",
			"command": "golangci-lint run --timeout=5m --fix",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [],
			"group": "build"
		},
		{
			"type": "shell",
			"label": "test: all tests (unit + integration)",
			"command": "make test",
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"dependsOn": [
				"docker: start postgres"
			],
			"problemMatcher": [
				"$go"
			],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "dedicated",
				"focus": true
			}
		},
		{
			"type": "shell",
			"label": "test: full suite with checks",
			"dependsOrder": "sequence",
			"dependsOn": [
				"go: vet workspace",
				"test: unit tests (all)",
				"test: integration tests (automated)"
			],
			"problemMatcher": [],
			"group": "test",
			"presentation": {
				"reveal": "always",
				"panel": "dedicated"
			}
		},
		{
			"type": "shell",
			"label": "Make Release",
			"problemMatcher": [],
			"command": "sh ${workspaceFolder}/make_release.sh"
		}
	]
}