We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
dbt clean regression
### Describe the bug
In dbt 0.16.1 `dbt clean` fails without a profile: 

```bash
(dbt) dbt$ dbt --version
installed version: 0.16.1
   latest version: 0.17.0

Your version of dbt is out of date! You can find instructions for upgrading here:
https://docs.getdbt.com/docs/installation
(dbt) dbt$ dbt clean
Running with dbt=0.16.1
Encountered an error while reading the project:
  ERROR: Runtime Error
  Could not find profile named 'profile'
Encountered an error:
Runtime Error
  Could not run dbt
```

In dbt 0.15.1, `dbt clean` works.

```bash
(dbt) dbt$ dbt --version
installed version: 0.15.1
   latest version: 0.17.0

Your version of dbt is out of date! You can find instructions for upgrading here:
https://docs.getdbt.com/docs/installation
(dbt) dbt$ dbt clean
Running with dbt=0.15.1
Checking target/*
 Cleaned target/*
Finished cleaning all paths.
```

### Steps To Reproduce
Delete any profile found in `~/.dbt/profile.yml`. 

Install 0.16.1:
```bash
pip install dbt==0.16.1
```
Navigate to dbt project:
```
dbt clean
```

Repeat for 0.15.1 to confirm regression.

### Expected behavior
I expected `dbt clean` to work without a profile. This broke some of our automated jobs when we tried to upgrade.

### System information
**Which database are you using dbt with?**
- [ ] postgres
- [X] redshift
- [ ] bigquery
- [ ] snowflake
- [ ] other (specify: ____________)


**The output of `dbt --version`:**
Multiple versions. See above.

**The operating system you're using:**
macOS 10.14.6

**The output of `python --version`:**
```
(dbt) dbt$ python --version
Python 3.7.3
```

### Additional context
Most people probably don't run `dbt clean` without a profile, but it was causing us confusion, so wanted to document it as a breaking change at least.

I also tested this with 0.17.0: same error as 0.16.1.

```
(dbt) dbt$ dbt --version
installed version: 0.17.0
   latest version: 0.17.0

Up to date!

Plugins:
  - bigquery: 0.17.0
  - snowflake: 0.17.0
  - redshift: 0.17.0
  - postgres: 0.17.0
(dbt) dbt$ dbt clean
Running with dbt=0.17.0
Encountered an error while reading the project:
  ERROR: Runtime Error
  Could not find profile named 'profile'
Encountered an error:
Runtime Error
  Could not run dbt
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `core/dbt/task/clean.py`
Content:
```
1 import os.path
2 import os
3 import shutil
4 
5 from dbt.task.base import ConfiguredTask
6 from dbt.logger import GLOBAL_LOGGER as logger
7 
8 
9 class CleanTask(ConfiguredTask):
10 
11     def __is_project_path(self, path):
12         proj_path = os.path.abspath('.')
13         return not os.path.commonprefix(
14             [proj_path, os.path.abspath(path)]
15         ) == proj_path
16 
17     def __is_protected_path(self, path):
18         """
19         This function identifies protected paths, so as not to clean them.
20         """
21         abs_path = os.path.abspath(path)
22         protected_paths = self.config.source_paths + \
23             self.config.test_paths + ['.']
24         protected_abs_paths = [os.path.abspath(p) for p in protected_paths]
25         return abs_path in set(protected_abs_paths) or \
26             self.__is_project_path(abs_path)
27 
28     def run(self):
29         """
30         This function takes all the paths in the target file
31         and cleans the project paths that are not protected.
32         """
33         for path in self.config.clean_targets:
34             logger.info("Checking {}/*".format(path))
35             if not self.__is_protected_path(path):
36                 shutil.rmtree(path, True)
37                 logger.info(" Cleaned {}/*".format(path))
38             else:
39                 logger.info("ERROR: not cleaning {}/* because it is "
40                             "protected".format(path))
41         logger.info("Finished cleaning all paths.")
42
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/core/dbt/task/clean.py b/core/dbt/task/clean.py
--- a/core/dbt/task/clean.py
+++ b/core/dbt/task/clean.py
@@ -2,11 +2,13 @@
 import os
 import shutil
 
-from dbt.task.base import ConfiguredTask
+from dbt.task.base import BaseTask
 from dbt.logger import GLOBAL_LOGGER as logger
+from dbt.config import UnsetProfileConfig
 
 
-class CleanTask(ConfiguredTask):
+class CleanTask(BaseTask):
+    ConfigType = UnsetProfileConfig
 
     def __is_project_path(self, path):
         proj_path = os.path.abspath('.')

{"golden_diff": "diff --git a/core/dbt/task/clean.py b/core/dbt/task/clean.py\n--- a/core/dbt/task/clean.py\n+++ b/core/dbt/task/clean.py\n@@ -2,11 +2,13 @@\n import os\n import shutil\n \n-from dbt.task.base import ConfiguredTask\n+from dbt.task.base import BaseTask\n from dbt.logger import GLOBAL_LOGGER as logger\n+from dbt.config import UnsetProfileConfig\n \n \n-class CleanTask(ConfiguredTask):\n+class CleanTask(BaseTask):\n+    ConfigType = UnsetProfileConfig\n \n     def __is_project_path(self, path):\n         proj_path = os.path.abspath('.')\n", "issue": "dbt clean regression\n### Describe the bug\r\nIn dbt 0.16.1 `dbt clean` fails without a profile: \r\n\r\n```bash\r\n(dbt) dbt$ dbt --version\r\ninstalled version: 0.16.1\r\n   latest version: 0.17.0\r\n\r\nYour version of dbt is out of date! You can find instructions for upgrading here:\r\nhttps://docs.getdbt.com/docs/installation\r\n(dbt) dbt$ dbt clean\r\nRunning with dbt=0.16.1\r\nEncountered an error while reading the project:\r\n  ERROR: Runtime Error\r\n  Could not find profile named 'profile'\r\nEncountered an error:\r\nRuntime Error\r\n  Could not run dbt\r\n```\r\n\r\nIn dbt 0.15.1, `dbt clean` works.\r\n\r\n```bash\r\n(dbt) dbt$ dbt --version\r\ninstalled version: 0.15.1\r\n   latest version: 0.17.0\r\n\r\nYour version of dbt is out of date! You can find instructions for upgrading here:\r\nhttps://docs.getdbt.com/docs/installation\r\n(dbt) dbt$ dbt clean\r\nRunning with dbt=0.15.1\r\nChecking target/*\r\n Cleaned target/*\r\nFinished cleaning all paths.\r\n```\r\n\r\n### Steps To Reproduce\r\nDelete any profile found in `~/.dbt/profile.yml`. \r\n\r\nInstall 0.16.1:\r\n```bash\r\npip install dbt==0.16.1\r\n```\r\nNavigate to dbt project:\r\n```\r\ndbt clean\r\n```\r\n\r\nRepeat for 0.15.1 to confirm regression.\r\n\r\n### Expected behavior\r\nI expected `dbt clean` to work without a profile. This broke some of our automated jobs when we tried to upgrade.\r\n\r\n### System information\r\n**Which database are you using dbt with?**\r\n- [ ] postgres\r\n- [X] redshift\r\n- [ ] bigquery\r\n- [ ] snowflake\r\n- [ ] other (specify: ____________)\r\n\r\n\r\n**The output of `dbt --version`:**\r\nMultiple versions. See above.\r\n\r\n**The operating system you're using:**\r\nmacOS 10.14.6\r\n\r\n**The output of `python --version`:**\r\n```\r\n(dbt) dbt$ python --version\r\nPython 3.7.3\r\n```\r\n\r\n### Additional context\r\nMost people probably don't run `dbt clean` without a profile, but it was causing us confusion, so wanted to document it as a breaking change at least.\r\n\r\nI also tested this with 0.17.0: same error as 0.16.1.\r\n\r\n```\r\n(dbt) dbt$ dbt --version\r\ninstalled version: 0.17.0\r\n   latest version: 0.17.0\r\n\r\nUp to date!\r\n\r\nPlugins:\r\n  - bigquery: 0.17.0\r\n  - snowflake: 0.17.0\r\n  - redshift: 0.17.0\r\n  - postgres: 0.17.0\r\n(dbt) dbt$ dbt clean\r\nRunning with dbt=0.17.0\r\nEncountered an error while reading the project:\r\n  ERROR: Runtime Error\r\n  Could not find profile named 'profile'\r\nEncountered an error:\r\nRuntime Error\r\n  Could not run dbt\r\n```\r\n\n", "before_files": [{"content": "import os.path\nimport os\nimport shutil\n\nfrom dbt.task.base import ConfiguredTask\nfrom dbt.logger import GLOBAL_LOGGER as logger\n\n\nclass CleanTask(ConfiguredTask):\n\n    def __is_project_path(self, path):\n        proj_path = os.path.abspath('.')\n        return not os.path.commonprefix(\n            [proj_path, os.path.abspath(path)]\n        ) == proj_path\n\n    def __is_protected_path(self, path):\n        \"\"\"\n        This function identifies protected paths, so as not to clean them.\n        \"\"\"\n        abs_path = os.path.abspath(path)\n        protected_paths = self.config.source_paths + \\\n            self.config.test_paths + ['.']\n        protected_abs_paths = [os.path.abspath(p) for p in protected_paths]\n        return abs_path in set(protected_abs_paths) or \\\n            self.__is_project_path(abs_path)\n\n    def run(self):\n        \"\"\"\n        This function takes all the paths in the target file\n        and cleans the project paths that are not protected.\n        \"\"\"\n        for path in self.config.clean_targets:\n            logger.info(\"Checking {}/*\".format(path))\n            if not self.__is_protected_path(path):\n                shutil.rmtree(path, True)\n                logger.info(\" Cleaned {}/*\".format(path))\n            else:\n                logger.info(\"ERROR: not cleaning {}/* because it is \"\n                            \"protected\".format(path))\n        logger.info(\"Finished cleaning all paths.\")\n", "path": "core/dbt/task/clean.py"}], "after_files": [{"content": "import os.path\nimport os\nimport shutil\n\nfrom dbt.task.base import BaseTask\nfrom dbt.logger import GLOBAL_LOGGER as logger\nfrom dbt.config import UnsetProfileConfig\n\n\nclass CleanTask(BaseTask):\n    ConfigType = UnsetProfileConfig\n\n    def __is_project_path(self, path):\n        proj_path = os.path.abspath('.')\n        return not os.path.commonprefix(\n            [proj_path, os.path.abspath(path)]\n        ) == proj_path\n\n    def __is_protected_path(self, path):\n        \"\"\"\n        This function identifies protected paths, so as not to clean them.\n        \"\"\"\n        abs_path = os.path.abspath(path)\n        protected_paths = self.config.source_paths + \\\n            self.config.test_paths + ['.']\n        protected_abs_paths = [os.path.abspath(p) for p in protected_paths]\n        return abs_path in set(protected_abs_paths) or \\\n            self.__is_project_path(abs_path)\n\n    def run(self):\n        \"\"\"\n        This function takes all the paths in the target file\n        and cleans the project paths that are not protected.\n        \"\"\"\n        for path in self.config.clean_targets:\n            logger.info(\"Checking {}/*\".format(path))\n            if not self.__is_protected_path(path):\n                shutil.rmtree(path, True)\n                logger.info(\" Cleaned {}/*\".format(path))\n            else:\n                logger.info(\"ERROR: not cleaning {}/* because it is \"\n                            \"protected\".format(path))\n        logger.info(\"Finished cleaning all paths.\")\n", "path": "core/dbt/task/clean.py"}]}