-
Notifications
You must be signed in to change notification settings - Fork 242
/
apexdoc.py
119 lines (111 loc) · 4.91 KB
/
apexdoc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import os
import tempfile
import urllib.request
from cumulusci.core.exceptions import CumulusCIException
from cumulusci.tasks.command import Command
class GenerateApexDocs(Command):
""" Generate Apex documentation from local code """
apexdoc_repo_url = "https://github.com/SalesforceFoundation/ApexDoc"
jar_file = "apexdoc.jar"
task_options = {
"tag": {
"description": "The tag to use for links back to the repo. If "
+ "not provided, source_url arg to ApexDoc is omitted."
},
"source_directory": {
"description": "The folder location which contains your apex "
+ ".cls classes. default=<RepoRoot>/src/classes/"
},
"out_dir": {
"description": "The folder location where documentation will be "
+ "generated to. Defaults to project config value "
+ "project/apexdoc/dir if present, otherwise uses repo root."
},
"home_page": {
"description": "The full path to an html file that contains the "
+ "contents for the home page's content area. Defaults to project "
+ "config value project/apexdoc/homepage if present, otherwise is "
+ "not used."
},
"banner_page": {
"description": "The full path to an html file that contains the "
+ "content for the banner section of each generated page. "
+ "Defaults to project config value project/apexdoc/banner if "
+ "present, otherwise is not used."
},
"scope": {
"description": "A semicolon separated list of scopes to "
+ "document. Defaults to project config value "
+ "project/apexdoc/scope if present, otherwise allows ApexDoc to "
+ "use its default (global;public;webService)."
},
"version": {
"description": "Version of ApexDoc to use. Defaults to project "
+ "config value project/apexdoc/version."
},
}
def _init_options(self, kwargs):
super(GenerateApexDocs, self)._init_options(kwargs)
self.options["command"] = None
if "source_directory" not in self.options:
self.options["source_directory"] = os.path.join(
self.project_config.repo_root, "src", "classes"
)
if "out_dir" not in self.options:
self.options["out_dir"] = (
self.project_config.project__apexdoc__dir
if self.project_config.project__apexdoc__dir
else self.project_config.repo_root
)
if "tag" not in self.options:
self.options["tag"] = None
if "home_page" not in self.options:
self.options["home_page"] = (
self.project_config.project__apexdoc__homepage
if self.project_config.project__apexdoc__homepage
else None
)
if "banner_page" not in self.options:
self.options["banner_page"] = (
self.project_config.project__apexdoc__banner
if self.project_config.project__apexdoc__banner
else None
)
if "scope" not in self.options:
self.options["scope"] = (
self.project_config.project__apexdoc__scope
if self.project_config.project__apexdoc__scope
else None
)
if "version" not in self.options:
if not self.project_config.project__apexdoc__version:
raise CumulusCIException("ApexDoc version required")
self.options["version"] = self.project_config.project__apexdoc__version
def _init_task(self):
super(GenerateApexDocs, self)._init_task()
self.working_dir = tempfile.mkdtemp()
self.jar_path = os.path.join(self.working_dir, self.jar_file)
if self.options["tag"] and not self.project_config.project__git__repo_url:
raise CumulusCIException("Repo URL not found in cumulusci.yml")
def _run_task(self):
self._get_jar()
cmd = "java -jar {} -s {} -t {}".format(
self.jar_path, self.options["source_directory"], self.options["out_dir"]
)
if self.options["tag"]:
cmd += " -g {}/blob/{}/src/classes/".format(
self.project_config.project__git__repo_url, self.options["tag"]
)
if self.options["home_page"]:
cmd += " -h {}".format(self.options["home_page"])
if self.options["banner_page"]:
cmd += " -a {}".format(self.options["banner_page"])
if self.options["scope"]:
cmd += ' -p "{}"'.format(self.options["scope"])
self.options["command"] = cmd
self._run_command({})
def _get_jar(self):
url = "{}/releases/download/{}/{}".format(
self.apexdoc_repo_url, self.options["version"], self.jar_file
)
urllib.request.urlretrieve(url, self.jar_path)