1010
1111namespace hidev \console ;
1212
13- use yii \helpers \Json ;
14-
1513/**
1614 * Goal for GitHub.
1715 */
1816class GithubController extends CommonController
1917{
20- protected $ _name ;
21- protected $ _vendor ;
22- protected $ _description ;
23-
24- /**
25- * @var string GitHub OAuth access token
26- */
27- protected $ _token ;
28-
29- public function setFull_name ($ value )
30- {
31- list ($ this ->_vendor , $ this ->_name ) = explode ('/ ' , $ value , 2 );
32- }
33-
34- public function getFull_name ()
35- {
36- return $ this ->getVendor () . '/ ' . $ this ->getName ();
37- }
38-
39- public function setFullName ($ value )
40- {
41- return $ this ->setFull_name ($ value );
42- }
43-
44- public function getFullName ()
45- {
46- return $ this ->getFull_name ();
47- }
48-
49- public function setName ($ value )
50- {
51- $ this ->_name = $ value ;
52- }
53-
54- public function getName ()
55- {
56- if (!$ this ->_name ) {
57- $ this ->_name = $ this ->take ('package ' )->name ;
58- }
59-
60- return $ this ->_name ;
61- }
62-
63- public function setVendor ($ value )
64- {
65- $ this ->_vendor = $ value ;
66- }
67-
68- public function getVendor ()
69- {
70- if (!$ this ->_vendor ) {
71- $ this ->_vendor = $ this ->take ('vendor ' )->name ;
72- }
73-
74- return $ this ->_vendor ;
75- }
76-
77- public function setDescription ($ value )
78- {
79- $ this ->_description = $ value ;
80- }
81-
82- public function getDescription ()
83- {
84- if ($ this ->_description === null ) {
85- $ this ->_description = $ this ->take ('package ' )->getTitle ();
86- }
87-
88- return $ this ->_description ;
89- }
90-
9118 /**
9219 * Create the repo on GitHub.
20+ * If name not given, repo for current project created.
21+ * @param string $repo full name
9322 * @return int exit code
9423 */
95- public function actionCreate ()
24+ public function actionCreate (string $ repo = null )
9625 {
97- $ res = $ this ->request ('POST ' , '/orgs/ ' . $ this ->getVendor () . '/repos ' , [
98- 'name ' => $ this ->getName (),
99- 'description ' => $ this ->getDescription (),
100- ]);
101- if (static ::isResponseOk ($ res )) {
102- echo "\ngit remote add origin [email protected] : {$ this ->getFullName ()}.git \n" ;
103- echo "git push -u origin master \n" ;
104- }
105-
106- return $ res ;
26+ return $ this ->getComponent ()->createRepo ($ repo );
10727 }
10828
10929 /**
@@ -112,9 +32,9 @@ public function actionCreate()
11232 * @param string $repo full name vendor/package
11333 * @return int exit code
11434 */
115- public function actionClone ($ repo )
35+ public function actionClone (string $ repo )
11636 {
117- return $ this ->
passthru ( ' git ' , [ ' clone ' , ' [email protected] :' . $ repo] );
37+ return $ this ->getComponent ()-> cloneRepo ( $ repo );
11838 }
11939
12040 /**
@@ -124,68 +44,20 @@ public function actionClone($repo)
12444 */
12545 public function actionExists ($ repo = null )
12646 {
127- return static :: exists ( $ repo ?: $ this ->getFull_name () );
47+ return $ this ->getComponent ()-> existsRepo ( $ repo );
12848 }
12949
13050 /**
131- * Check if repo exists.
132- * @param string $repo
133- * @return bool
51+ * Creates github release for current project repo.
52+ * @param string $release version number
13453 */
135- public static function exists ( $ repo )
54+ public function releaseRepo ( $ release = null )
13655 {
137- return ! static :: exec ( ' git ' , [ ' ls-remote ' , ' [email protected] :' . $ repo], true );
56+ return $ this -> getComponent ()-> releaseRepo ( $ repo );
13857 }
13958
140- /**
141- * Creates github release.
142- */
143- public function actionRelease ($ release = null )
59+ public function getComponent ()
14460 {
145- $ release = $ this ->take ('version ' )->getRelease ($ release );
146- $ notes = $ this ->take ('chkipper ' )->getReleaseNotes ();
147- $ wait = $ this ->actionWaitPush ();
148- if ($ wait ) {
149- return $ wait ;
150- }
151-
152- return $ this ->request ('POST ' , '/repos/ ' . $ this ->getFull_name () . '/releases ' , [
153- 'tag_name ' => $ release ,
154- 'name ' => $ release ,
155- 'body ' => $ notes ,
156- ]);
157- }
158-
159- /**
160- * Waits until push is actually finished.
161- * TODO Check github if it really has latest local commit.
162- * @return int 0 - success, 1 - failed
163- */
164- public function actionWaitPush ()
165- {
166- sleep (7 );
167-
168- return 0 ;
169- }
170-
171- public function request ($ method , $ path , $ data )
172- {
173- $ url = 'https://api.github.com ' . $ path ;
174-
175- return $ this ->passthru ('curl ' , ['-X ' , $ method , '-H ' , 'Authorization: token ' . $ this ->getToken (), '--data ' , Json::encode ($ data ), $ url ]);
176- }
177-
178- public function findToken ()
179- {
180- return $ _SERVER ['GITHUB_TOKEN ' ] ?: $ this ->readpassword ('GitHub token: ' );
181- }
182-
183- public function getToken ()
184- {
185- if ($ this ->_token === null ) {
186- $ this ->_token = $ this ->findToken ();
187- }
188-
189- return $ this ->_token ;
61+ return $ this ->take ('github ' );
19062 }
19163}
0 commit comments