List of commits:
Subject Hash Author Date (UTC)
Added tutorials infrastructure and the first tutorial about CI 3fe5fc6d3dafa859e4e20c853f355dec279630b0 Catalin(ux) M. BOIE 2016-08-28 05:12:09
Spell checking c5c8cbc69ec8e33b623f49e5417ef85073d5aebe Catalin(ux) M. BOIE 2016-08-28 05:07:13
Fix a bug that prevented the log function to log invalid UTF-8 chars 3a5d9efe50b391c4b5f64a879e64d3203ba66ef0 Catalin(ux) M. BOIE 2016-07-31 04:40:12
rg_exec accepts a second para: data to be sent as stdin 71d2b273ae592e3c6e6a77e7b19df3f94aa1e9e9 Catalin(ux) M. BOIE 2016-07-31 03:05:23
Simplify event processing by passing full 'ui'; fixed 'confirmed' filed usage cbb6f8877db547d55b7b86e0fe5c41519d6c8b65 Catalin(ux) M. BOIE 2016-07-14 05:08:51
Fixed the unit tests (minor) 0e9cfc3911aba7119bb57140ecfa51ad6e3983bf Catalin(ux) M. BOIE 2016-07-14 05:05:37
Fixed e-mail confirmation logic. dd5b4be2e8e49aa612ddf7557e8ef0b1e0268822 Catalin(ux) M. BOIE 2016-07-11 21:09:19
Do more tests and resync some with the reality db9bb136ff176006cbb8f8848309b8adbf98d630 Catalin(ux) M. BOIE 2016-07-11 04:07:38
Improved user cache to not have null elements in JSON d6b75a2cc4830cfb8dfb92e911f1e5a41c2023bc Catalin(ux) M. BOIE 2016-07-11 04:06:25
Allow rights to have numbers and _ in name 4f5c38389bc98e2dcb60d36359917c33820e5779 Catalin(ux) M. BOIE 2016-07-11 04:05:40
Allow strange chars in cache names 00b05d99d3d3cf0229249718d2482af40f063972 Catalin(ux) M. BOIE 2016-07-11 04:04:08
Small improvements to builder and worker 08f9bc668f7f192af61868bebd644bea64b6aedd Catalin(ux) M. BOIE 2016-07-11 04:01:47
SELinux improvements to support the builder a2b52360b43be53786ee5d68c9fcb2db14f29c0c Catalin(ux) M. BOIE 2016-07-11 04:00:57
Document docker on Download web section 5d4ece50d6b4dc3d4902afd9264a45834ceb3592 Catalin(ux) M. BOIE 2016-07-11 03:54:31
Doc: restore context for rc.local eb5fa1cab84737e3440cfbca147d50859b8f9a53 Catalin(ux) M. BOIE 2016-07-07 04:09:23
Fixed small bug preventing e-mail to show in report 26d884b3a332f3c3b241c194912b9653749a9427 Catalin(ux) M. BOIE 2016-07-07 03:37:23
Do not clobber the cron file 5c68384676d9b8087255dda3b62e3588fc50e6c7 Catalin(ux) M. BOIE 2016-07-06 22:03:58
When using rg_json_encode, no quotes needed. c4b7693a81e593918f8c06408f16b4884a92773b Catalin(ux) M. BOIE 2016-07-06 05:21:00
Remove summary from tables because violates HTML5 specs. :( 11865f18e979f3849dbb265e5c5350f4a638088b Catalin(ux) M. BOIE 2016-07-06 05:00:11
Bump version to 0.55 58652b8250a867c0f4e9e3a9c76737443f242b36 Catalin(ux) M. BOIE 2016-07-06 04:48:24
Commit 3fe5fc6d3dafa859e4e20c853f355dec279630b0 - Added tutorials infrastructure and the first tutorial about CI
Author: Catalin(ux) M. BOIE
Author date (UTC): 2016-08-28 05:12
Committer name: Catalin(ux) M. BOIE
Committer date (UTC): 2016-08-28 05:12
Parent(s): c5c8cbc69ec8e33b623f49e5417ef85073d5aebe
Signer:
Signing key:
Signing status: N
Tree: 98cefd6c90f94853b330aeca9775b151e4e4d137
File Lines added Lines deleted
inc/demo.inc.php 99 0
inc/dispatch/dispatch.php 3 0
root/index.php 1 0
root/themes/default/doc/demo/container.html 24 0
root/themes/default/doc/demo/demos/ci-1/0/main.html 18 0
root/themes/default/doc/demo/demos/ci-1/0/name.html 1 0
root/themes/default/doc/demo/demos/ci-1/about/main.html 58 0
root/themes/default/doc/demo/demos/ci-1/about/name.html 1 0
root/themes/default/doc/demo/demos/ci-1/add_hook/main.html 33 0
root/themes/default/doc/demo/demos/ci-1/add_hook/name.html 1 0
root/themes/default/doc/demo/demos/ci-1/name.html 1 0
root/themes/default/doc/demo/demos/ci-1/trigger/main.html 130 0
root/themes/default/doc/demo/demos/ci-1/trigger/name.html 1 0
root/themes/default/doc/demo/invalid.html 3 0
root/themes/default/doc/demo/invalid_page.html 3 0
root/themes/default/doc/demo/list.html 20 0
root/themes/default/doc/demo/toc/footer.html 0 0
root/themes/default/doc/demo/toc/header.html 3 0
root/themes/default/doc/demo/toc/line.html 3 0
root/themes/default/doc/demo/toc/nodata.html 0 0
root/themes/default/features.html 34 4
root/themes/default/index.html 1 0
root/themes/default/main.css 34 0
File inc/demo.inc.php added (mode: 100644) (index 0000000..419cb45)
1 <?php
2 // This is the files that controls the tutorials
3
4 /*
5 * Tutorials dispatched
6 */
7 function rg_demo($rg, $paras)
8 {
9 global $rg_demos;
10
11 //rg_log_ml('demo: paras: ' . print_r($paras, TRUE));
12
13 if (empty($paras))
14 return rg_template('doc/demo/list.html', $rg, TRUE /*xss*/);
15
16 $demo = array_shift($paras);
17
18 if (!isset($rg_demos[$demo]))
19 return rg_template('doc/demo/invalid.html', $rg, TRUE /*xss*/);
20
21 $d = $rg_demos[$demo];
22
23 $rg['demo']['demo'] = $demo;
24 $rg['demo']['HTML:demo_name'] = rg_template('doc/demo/demos/' . $demo
25 . '/name.html', $rg, TRUE /*xss*/);
26
27 if (empty($paras)) {
28 $page = '0';
29 } else {
30 $page = array_shift($paras);
31 $page = rg_force_alphanum($page);
32 }
33
34 $pi = FALSE;
35 foreach ($d as $i => $_pi) {
36 if (strcmp($page, $_pi['page']) == 0) {
37 $pi = $_pi;
38 break;
39 }
40 }
41 if ($pi === FALSE)
42 return rg_template('doc/demo/invalid_page.html',
43 $rg, TRUE /*xss*/);
44
45 rg_log_ml('DEBUG: pi: ' . print_r($pi, TRUE));
46 foreach ($pi as $k => $v)
47 $rg['demo'][$k] = $v;
48
49 // toc
50 $c = array();
51 foreach ($d as $i => $_pi) {
52 if (strcmp($page, $_pi['page']) == 0)
53 $_pi['class'] = 'demo_toc_sel';
54 else
55 $_pi['class'] = 'demo_toc_notsel';
56
57 $_pi['HTML:page_name'] = rg_template('doc/demo/demos/'
58 . $demo . '/' . $_pi['page'] . '/name.html',
59 $rg, TRUE /*xss*/);
60 $c[] = $_pi;
61 }
62 $rg['demo']['HTML:toc'] = rg_template_table('doc/demo/toc', $c, $rg);
63
64 $rg['demo']['HTML:page_name'] = rg_template('doc/demo/demos/'
65 . $demo . '/' . $page . '/name.html', $rg, TRUE /*xss*/);
66
67 $rg['demo']['HTML:content'] = rg_template(
68 'doc/demo/demos/' . $demo . '/' . $page . '/main.html',
69 $rg, TRUE /*xss*/);
70
71 return rg_template('doc/demo/container.html', $rg, TRUE /*xss*/);
72 }
73
74 $rg_demos = array(
75 'ci-1' => array(
76 array(
77 'page' => '0',
78 'prev' => '',
79 'next' => 'about'
80 ),
81 array(
82 'page' => 'about',
83 'prev' => '0',
84 'next' => 'add_hook'
85 ),
86 array(
87 'page' => 'add_hook',
88 'prev' => 'about',
89 'next' => 'trigger'
90 ),
91 array(
92 'page' => 'trigger',
93 'prev' => 'add_hook',
94 'next' => ''
95 )
96 )
97 );
98
99 ?>
File inc/dispatch/dispatch.php changed (mode: 100644) (index 249cd4f..6a03b86)
... ... case 'doc':
118 118 $body .= rg_template('doc/worker.html', $rg, $body .= rg_template('doc/worker.html', $rg,
119 119 TRUE /* xss */); TRUE /* xss */);
120 120 break; break;
121 case 'demo':
122 $body .= rg_demo($rg, $paras);
123 break;
121 124 } }
122 125 break; break;
123 126
File root/index.php changed (mode: 100644) (index 07e7eee..d59feb4)
... ... include_once($INC . "/plan.inc.php");
25 25 include_once($INC . "/admin.inc.php"); include_once($INC . "/admin.inc.php");
26 26 include_once($INC . "/api.inc.php"); include_once($INC . "/api.inc.php");
27 27 include_once($INC . "/apikeys.inc.php"); include_once($INC . "/apikeys.inc.php");
28 include_once($INC . "/demo.inc.php");
28 29 include_once($INC . "/ver.php"); include_once($INC . "/ver.php");
29 30
30 31 rg_prof_start("MAIN"); rg_prof_start("MAIN");
File root/themes/default/doc/demo/container.html added (mode: 100644) (index 0000000..bef0071)
1 <div class="main_title">Tutorial: @@demo::demo_name@@</div>
2
3 <div class="nav">
4 <span>@@if("@@demo::prev@@" != ""){{<a href="/op/doc/demo/@@demo::demo@@/@@demo::prev@@">Prev page</a>}}{{Prev page}}</span>
5 <span><a href="/op/doc/demo">Back to tutorials list</a></span>
6 <span>@@if("@@demo::next@@" != ""){{<a href="/op/doc/demo/@@demo::demo@@/@@demo::next@@">Next page</a>}}{{Next page}}</span>
7 </div>
8
9 <div class="demo_container">
10 <div class="demo_content">
11 @@demo::content@@
12 </div>
13
14 <div class="demo_toc">
15 @@demo::toc@@
16 </div>
17 </div>
18
19 <div class="nav">
20 <span>@@if("@@demo::prev@@" != ""){{<a href="/op/doc/demo/@@demo::demo@@/@@demo::prev@@">Prev page</a>}}{{Prev page}}</span>
21 <span><a href="/op/doc/demo">Back to tutorials list</a></span>
22 <span>@@if("@@demo::next@@" != ""){{<a href="/op/doc/demo/@@demo::demo@@/@@demo::next@@">Next page</a>}}{{Next page}}</span>
23 </div>
24
File root/themes/default/doc/demo/demos/ci-1/0/main.html added (mode: 100644) (index 0000000..5f5238f)
1 <div class="demo_page_title">@@demo::page_name@@</div>
2
3 This tutorial will teach you what is Continuous Integration (CI)
4 and how to set it up to help your development and deployment flow.<br />
5 <br />
6
7 CI in RocketGit is called when a branch of your choice is pushed by you.
8 You can choose the branch by regular expressions, so you can do CI only
9 for some branches, for example, "pre-production" or "production".<br />
10 <br />
11
12 Continuous Integration automatically can:
13 <ul>
14 <li>Build and test you branch on different operating systems and architectures</li>
15 <li>Deploy a build that passed the test using your script</li>
16 <li>Add custom labels to the build and test steps to easily identify
17 what gone wrong.</li>
18 </ul>
File root/themes/default/doc/demo/demos/ci-1/0/name.html added (mode: 100644) (index 0000000..71e6806)
1 Welcome to Continuous integration tutorial!
File root/themes/default/doc/demo/demos/ci-1/about/main.html added (mode: 100644) (index 0000000..676139f)
1 <div class="demo_page_title">@@demo::page_name@@</div>
2
3 Below we will show you an example on how to setup RocketGit to build, test
4 and deploy your application. We will use a simple 'bash' application and
5 also a simple deploy script using 'rsync' to deploy it to some servers
6 when you push a branch of your repository and your tests pass.<br/ >
7 <br />
8
9 First, you will have to create an account and then a repository and
10 setup your local environment for Git and SSH. Also, we assume that you
11 already cloned the repository locally.
12 These steps are not covered by this tutorial.<br />
13 <br />
14
15 Now, we assume you are in the just cloned repository local folder.
16 We can start with a simple application, stored in file 'main.sh':
17 <div class="term">
18 #!/bin/bash
19
20 case "${1}" in
21 a) echo "A" ;;
22 b) echo "B" ;;
23 c) echo "C" ;;
24 *) echo "BAD" ;;
25 esac
26
27 </div>
28
29 As you can see, it is a simple script. Now, we will add another script,
30 'test.sh', that will test our main script:
31 <div class="term">
32 #!/bin/bash
33
34 if [ "`./main.sh xx`" != "BAD" ]; then
35 echo "Test 'xx' failed!"
36 exit 1
37 fi
38
39 if [ "`./main.sh b`" != "B" ]; then
40 echo "Test 'b' failed!"
41 exit 1
42 fi
43
44 echo "Tests passed!"
45
46 </div>
47
48 Next, we will add the deploy script, 'deploy.sh':
49 <div class="term">
50 #!/bin/bash
51
52 for s in server1 server2 server3; do
53 rsync -a main.sh ${s}:/usr/local/bin/
54 done
55
56 </div>
57
58 'deploy.sh' will propagate our main.sh file to multiple servers.
File root/themes/default/doc/demo/demos/ci-1/about/name.html added (mode: 100644) (index 0000000..cd7195f)
1 How to setup Continuous Integration with RocketGit
File root/themes/default/doc/demo/demos/ci-1/add_hook/main.html added (mode: 100644) (index 0000000..8ca6828)
1 <div class="demo_page_title">@@demo::page_name@@</div>
2
3 Next step is to add a webhook that will trigger our test and deploy
4 phases when a push is taking place.<br />
5 <br />
6 To add this hook, you have to go login and then to to
7 <b>Settings / Webhooks / Add</b> menu.<br />
8 Than, choose 'build' as the hook type by clinking 'Generic' link.<br />
9 Now, you can choose what repository and branch we want to add this hook to.
10 Please note that both fields are regular expressions. So, with a single hook
11 you can cover more/all repositories and branches.<br />
12 Just type your repository name. For branch, leave it empty, meaning that
13 any branch will trigger the hook.<br />
14 Then, type a description to easy remember what the hook is for, for example:
15 "This will deploy main.sh to the servers".<br />
16 Now, you have to choose what events will trigger the hook: we will use 'Push'
17 event.<br />
18 Next, you will have to choose a build environments. For our example,
19 we will use only one environment, 'debian-8.2-i386'.
20 You will use multiple build environments when you want to be sure
21 your application will work across a full range of distributions and
22 architectures combinations.<br />
23 Next, you will be able to specify what packages are needed to build and
24 test your software. You can type 'bash' there, because we have a set of
25 bash scripts.<br />
26 Now, what is left is to specify what commands we want to execute.
27 First command will be './test.sh' and we will check the checkbox
28 "Abort on fail?". Why? Because if the test does not pass, we will
29 not do the deploy step.
30 Optionally, you can add some labels which will be added to your last commit
31 in that branch.<br />
32 For the second command you will type './deploy.sh'. Now, press 'Add'.
33 We are ready to use the hook.<br />
File root/themes/default/doc/demo/demos/ci-1/add_hook/name.html added (mode: 100644) (index 0000000..bcabfb9)
1 Adding a hook for CI
File root/themes/default/doc/demo/demos/ci-1/name.html added (mode: 100644) (index 0000000..24f38ef)
1 Continuous integration - The basics
File root/themes/default/doc/demo/demos/ci-1/trigger/main.html added (mode: 100644) (index 0000000..26d0483)
1 <div class="demo_page_title">@@demo::page_name@@</div>
2
3 You are ready to trigger the hook and see if our first deploy will work.<br />
4 <br />
5
6 Locally, on your computer, we assume you are in the project folder,
7 where we have the three bash scripts (main.sh, test.sh and deploy.sh).
8 You will have to add, commit and push these files:
9 <div class="term">
10 chmod a+x *.sh
11 git add *.sh
12 git commit -m "First commit"
13 git push origin master
14
15 </div>
16
17 If the push is successfully, the hook will be triggered in background.
18 You can go to <b>Settings / Webhooks</b> and you can check the "Last output"
19 field to see the last output of the trigger. If the hook did not finished,
20 the text "n/a" will appear.<br />
21 <br />
22
23 After some time, you will see the following text:
24 <div class="term">
25 Worker: Builder 1
26 Date (UTC): 2016-07-22 04:30
27 Elapsed time: 133s
28
29 Packages:
30 Last metadata expiration check: 0:00:01 ago on Fri Jul 22 05:30:08 2016.
31 Package bash-4.3.42-3.fc23.x86_64 is already installed, skipping.
32 Dependencies resolved.
33 Nothing to do.
34 Complete!
35
36 Command[./test.sh]:
37 Tests passed!
38
39
40 Command[./deploy.sh]:
41 ./deploy.sh: line 4: rsync: command not found
42 ./deploy.sh: line 4: rsync: command not found
43 ./deploy.sh: line 4: rsync: command not found
44
45 </div>
46
47 As you can see the tests passed, but you forgot to add rsync in the list of
48 packages to be installed. Just go to <b>Settings / Webhook / List</b> and
49 edit your hook: in "packages to install" text box, add 'rsync' next to 'bash'
50 and press 'Edit' button.<br />
51 Now, we are ready to push again. Because you changed nothing in the repository,
52 the push will succeed but will not trigger the hook. So, just do a fake
53 change:
54 <div class="term">
55
56 echo "Documentation is important" > README
57 git add README
58 git commit -m "Added README file"
59
60 </div>
61
62 Now, we will push again:
63 <div class="term">
64 git push origin master
65
66 </div>
67
68 Now, the "Last output" row will be:
69 <div class="term">
70 Worker: Builder 1
71 Date (UTC): 2016-07-22 04:41
72 Elapsed time: 141s
73
74 Packages:
75 Package bash-4.3.42-3.fc23.x86_64 is already installed, skipping.
76 Dependencies resolved.
77 Nothing to do.
78 Complete!
79 Last metadata expiration check: 0:00:13 ago on Fri Jul 22 05:40:55 2016.
80 Dependencies resolved.
81 ================================================================================
82 Package Arch Version Repository Size
83 ================================================================================
84 Installing:
85 rsync x86_64 3.1.1-8.fc23 updates 393 k
86
87 Transaction Summary
88 ================================================================================
89 Install 1 Package
90
91 Total download size: 393 k
92 Installed size: 796 k
93 Downloading Packages:
94 --------------------------------------------------------------------------------
95 Total 190 kB/s | 393 kB 00:02
96 Running transaction check
97 Transaction check succeeded.
98 Running transaction test
99 Transaction test succeeded.
100 Running transaction
101 Installing : rsync-3.1.1-8.fc23.x86_64 1/1
102 Verifying : rsync-3.1.1-8.fc23.x86_64 1/1
103
104 Installed:
105 rsync.x86_64 3.1.1-8.fc23
106
107 Complete!
108
109 Command[./test.sh]:
110 Tests passed!
111
112 Command[./deploy.sh]:
113 ssh: Could not resolve hostname server1: No address associated with hostname
114 rsync: connection unexpectedly closed (0 bytes received so far) [sender]
115 rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
116 ssh: Could not resolve hostname server2: No address associated with hostname
117 rsync: connection unexpectedly closed (0 bytes received so far) [sender]
118 rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
119 ssh: Could not resolve hostname server3: No address associated with hostname
120 rsync: connection unexpectedly closed (0 bytes received so far) [sender]
121 rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
122
123 </div>
124
125 You can see that our 'deploy.sh' script was called, 'rsync' was present
126 but failed because our server names are fake.<br/>
127 <br />
128
129 That's it! You are now able to setup a test & deploy system to help you
130 with the boring manual procedure.
File root/themes/default/doc/demo/demos/ci-1/trigger/name.html added (mode: 100644) (index 0000000..64b8be5)
1 Triggering the hook
File root/themes/default/doc/demo/invalid.html added (mode: 100644) (index 0000000..50148f8)
1 <div class="mess error">
2 Tutorial not available.
3 </div>
File root/themes/default/doc/demo/invalid_page.html added (mode: 100644) (index 0000000..814f991)
1 <div class="mess error">
2 Tutorial page not available.
3 </div>
File root/themes/default/doc/demo/list.html added (mode: 100644) (index 0000000..e5d961e)
1 <div class="main_title">Tutorials - learn about RocketGit</div>
2
3 <div class="islands">
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7 <div class="island_title">Webhooks</div>
8 Soon...
9 </div>
10 </div>
11
12 <div class="island_cell">
13 <div class="island">
14 <div class="island_title">Continuous Integration</div>
15 <a href="/op/doc/demo/ci-1">The basics</a>
16 </div>
17 </div>
18 </div>
19
20 </div>
File root/themes/default/doc/demo/toc/footer.html copied from file root/themes/default/menu/footer.html (similarity 100%)
File root/themes/default/doc/demo/toc/header.html added (mode: 100644) (index 0000000..e680744)
1 <div>
2 <b>Table of contents:</b>
3 <ul>
File root/themes/default/doc/demo/toc/line.html added (mode: 100644) (index 0000000..ab8badd)
1 <li class='@@class@@'>
2 <a href="/op/doc/demo/@@demo::demo@@/@@page@@">@@page_name@@</a>
3 </li>
File root/themes/default/doc/demo/toc/nodata.html copied from file root/themes/default/errmsg/nodata.html (similarity 100%)
File root/themes/default/features.html changed (mode: 100644) (index 4b7c407..3c4b2d9)
113 113 <div class="island"> <div class="island">
114 114 <div class="island_title">Web hooks</div> <div class="island_title">Web hooks</div>
115 115 We provide flexible web hooks allowing you to automate your tasks. We provide flexible web hooks allowing you to automate your tasks.
116 You can easily store a repository archive in
117 <a href="https://aws.amazon.com/s3/" target="_blank">Amazon's S3</a>;
118 or do a <a href="https://aws.amazon.com/codedeploy/" target="_blank">code deploy</a>
119 in Amazon; or call a
116 You can easily setup a
117 <a href="/op/doc/demo/ci-1">build, test and deploy</a> hook,
118 store a repository archive in
119 <a href="https://aws.amazon.com/s3/" target="_blank">Amazon's S3</a>,
120 do a <a href="https://aws.amazon.com/codedeploy/" target="_blank">code deploy</a>
121 in Amazon, or call a
120 122 <a href="https://aws.amazon.com/lambda/" target="_blank">Lambda</a> <a href="https://aws.amazon.com/lambda/" target="_blank">Lambda</a>
121 123 function. function.
122 124 Be notified in <a href="https://slack.com" target="_blank">Slack</a>. Be notified in <a href="https://slack.com" target="_blank">Slack</a>.
 
134 136 </div> </div>
135 137 </div> </div>
136 138
139 <div class="island_row">
140 <div class="island_cell">
141 <div class="island">
142 <div class="island_title">Application programming interface (API)</div>
143 We provide an API that allows you to control everything related
144 yo your repositories, bugs, notes and pull requests.
145 You can find the documentation <a href="/op/doc/api">here</a>.
146 </div>
147 </div>
148
149 <div class="island_cell">
150 <div class="island">
151 <div class="island_title">Tutorials</div>
152 We provide a set of tutorials to demonstrate our features.
153 Check them <a href="/op/doc/demo">here</a>.
154 </div>
155 </div>
156
157 <!--
158 <div class="island_cell">
159 <div class="island">
160 <div class="island_title">bla</div>
161 bla
162 </div>
163 </div>
164 -->
165 </div>
166
137 167 <div class="island_row"> <div class="island_row">
138 168 <div class="island_cell"> <div class="island_cell">
139 169 <div class="island"> <div class="island">
File root/themes/default/index.html changed (mode: 100644) (index 74b2778..db8574a)
68 68
69 69 <div class="footer_info"> <div class="footer_info">
70 70 Documentation:<br /> Documentation:<br />
71 <a href="/op/doc/demo">Tutorials</a><br />
71 72 <a href="/op/doc/api">API</a> <a href="/op/doc/api">API</a>
72 73 </div> </div>
73 74 </div> <!-- footer --> </div> <!-- footer -->
File root/themes/default/main.css changed (mode: 100644) (index 2286d95..54ab39c)
... ... legend { padding: 0px 2pt; }
595 595 .form_table:not(:first-child) { .form_table:not(:first-child) {
596 596 margin-top: 6pt; margin-top: 6pt;
597 597 } }
598
599 .demo_container {
600 display: flex;
601 flex-flow: row nowrap;
602 }
603
604 .demo_content {
605 border: 1px solid #999998;
606 align-self: stretch;
607 padding: 5px;
608 margin: 5px;
609 }
610 .demo_content ul li { margin-left: 15px }
611
612 .demo_toc {
613 border: 1px solid #999998;
614 padding: 5px;
615 margin: 5px;
616 }
617 .demo_toc ul li { margin-left: 15px }
618 .demo_toc_sel { border-bottom: 1px solid #f00 }
619 .demo_toc_notsel { }
620
621 .demo_page_title {
622 font-size: 12pt;
623 font-weight: bold;
624 border-bottom: 1px solid #f00;
625 margin-bottom: 10px;
626 }
627
628 .nav { }
629 .nav span {
630 padding: 4px;
631 }
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/catalinux/rocketgit

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/catalinux/rocketgit

Clone this repository using git:
git clone git://git.rocketgit.com/user/catalinux/rocketgit

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main