File root/themes/default/doc/demo/demos/TODO/1.html copied from file root/themes/default/doc/demo/demos/artifacts/python1/main.html (similarity 89%) (mode: 100644) (index 9b7ad47..3c16e96) |
|
1 |
|
TODO: this text will be used when we will produce rpm and deb repositories. |
|
2 |
|
|
1 |
3 |
<div class="demo_page_title">@@demo::page_name@@</div> |
<div class="demo_page_title">@@demo::page_name@@</div> |
2 |
4 |
|
|
3 |
5 |
In this tutorial we will create a Python package and we will |
In this tutorial we will create a Python package and we will |
4 |
|
upload the .rpm and the .tgz files to the artifacts web area.<br /> |
|
|
6 |
|
upload the .rpm and the .tgz files to PyPI repository.<br /> |
|
7 |
|
<br /> |
5 |
8 |
|
|
6 |
9 |
The steps were copied from |
The steps were copied from |
7 |
10 |
<a href="https://packaging.python.org/tutorials/packaging-projects/" target="_blank">https://packaging.python.org/tutorials/packaging-projects/</a>.<br /> |
<a href="https://packaging.python.org/tutorials/packaging-projects/" target="_blank">https://packaging.python.org/tutorials/packaging-projects/</a>.<br /> |
|
11 |
|
<br /> |
8 |
12 |
|
|
9 |
13 |
We assume you already created a repository on rocketgit.com, named |
We assume you already created a repository on rocketgit.com, named |
10 |
14 |
<b>prj1</b>.<br /> |
<b>prj1</b>.<br /> |
11 |
15 |
|
|
12 |
16 |
Now, clone your repository: |
Now, clone your repository: |
13 |
|
<div class="term">git clone https://rocketgit.com/user/YOURUSERNAME/prj1 |
|
|
17 |
|
<div class="term">git clone @@base_url@@@@login_ui::homepage@@/prj1 |
14 |
18 |
cd prj1 |
cd prj1 |
15 |
19 |
</div> |
</div> |
16 |
20 |
<br /> |
<br /> |
|
... |
... |
setuptools.setup( |
41 |
45 |
description="A small example package", |
description="A small example package", |
42 |
46 |
long_description="bla bla bla", |
long_description="bla bla bla", |
43 |
47 |
long_description_content_type="text/markdown", |
long_description_content_type="text/markdown", |
44 |
|
url="https://rocketgit.com/user/YOURUSERNAME/prj1", |
|
|
48 |
|
url="@@base_url@@@@login_ui::homepage@@/prj1", |
45 |
49 |
packages=setuptools.find_packages(), |
packages=setuptools.find_packages(), |
46 |
50 |
classifiers=[ |
classifiers=[ |
47 |
51 |
"Programming Language :: Python :: 3", |
"Programming Language :: Python :: 3", |
|
... |
... |
git commit -m "First commit" |
85 |
89 |
|
|
86 |
90 |
Now, it is time to define a webhook which, when you do a git push, will |
Now, it is time to define a webhook which, when you do a git push, will |
87 |
91 |
generate a job which will be sent to one of the workers.<br /> |
generate a job which will be sent to one of the workers.<br /> |
88 |
|
The worker will start |
|
89 |
|
the build environment (a VM, for example) and will run my_build_script.sh |
|
90 |
|
inside that build environment.<br /> |
|
91 |
|
So, click <a href="/op/settings/wh/add/build/generic" target="_blank">here</a> |
|
|
92 |
|
The worker will start a build environment (a VM, for example) |
|
93 |
|
and will run <b>my_build_script.sh</b> inside it.<br /> |
|
94 |
|
Click <a href="/op/settings/wh/add/build/generic" target="_blank">here</a> |
92 |
95 |
(opens in a new tab) |
(opens in a new tab) |
93 |
96 |
or go to <b>Settings</b> main menu, |
or go to <b>Settings</b> main menu, |
94 |
97 |
click on <b>Webhooks</b> submenu and then press <b>Add</b>. |
click on <b>Webhooks</b> submenu and then press <b>Add</b>. |
File root/themes/default/doc/demo/demos/artifacts/blendergraph/main.html added (mode: 100644) (index 0000000..d7c5bbe) |
|
1 |
|
<div class="demo_page_title">@@demo::page_name@@</div> |
|
2 |
|
|
|
3 |
|
In this tutorial we will show you how to generate an image based on a |
|
4 |
|
Python script using the great |
|
5 |
|
<a href="https://www.blender.org" target="_blank">Blender</a> |
|
6 |
|
3D application.<br /> |
|
7 |
|
This will allow you to automatically have an up-to-date image |
|
8 |
|
available for your users just by pushing your Python script.<br /> |
|
9 |
|
<br /> |
|
10 |
|
|
|
11 |
|
Go to |
|
12 |
|
<a href="@@base_url@@@@login_ui::homepage@@/op/repo/create" target="_blank">My repositories / Create</a> |
|
13 |
|
and create a private repository named <b>blendergraph</b>.<br /> |
|
14 |
|
<br /> |
|
15 |
|
|
|
16 |
|
Go to |
|
17 |
|
<a href="@@base_url@@@@login_ui::homepage@@/op/settings/wh/add/build/generic" target="_blank">Settings / Webhooks / Add</a> |
|
18 |
|
to add a webhook. This is the way your code will be run and will |
|
19 |
|
generate the image when you push into your repository.<br /> |
|
20 |
|
Set repository filter to <b>blendergraph</b>, add a description, |
|
21 |
|
select <b>Push</b> as the trigger event, select <b>fedora-32-x86_64</b> as |
|
22 |
|
the environment, add <b>blender</b> to the packages section and set the first command |
|
23 |
|
to be <b>make</b>; then press <b>Add</b> button.<br /> |
|
24 |
|
Now, this hook will be executed at your next push.<br /> |
|
25 |
|
<br /> |
|
26 |
|
|
|
27 |
|
Clone the main <b>blendergraph</b> repository: |
|
28 |
|
<div class="term">git clone https://rocketgit.com/user/catalinux/blendergraph |
|
29 |
|
cd blendergraph |
|
30 |
|
</div> |
|
31 |
|
And change the origin remote to yours: |
|
32 |
|
<div class="term">git remote remove origin |
|
33 |
|
git remote add origin @@base_url@@@@login_ui::homepage@@/blendergraph |
|
34 |
|
</div> |
|
35 |
|
<br /> |
|
36 |
|
|
|
37 |
|
Look around in the repository, especialy in the <b>Makefile</b> and |
|
38 |
|
<b>rocketgit/artifacts</b> files. |
|
39 |
|
You will see that the Makefile is generating .png and .blend files from |
|
40 |
|
the .py files. |
|
41 |
|
The artifacts file collects all .png and .blend files and uploads them in |
|
42 |
|
a directory with the name of the push branched file (we are using |
|
43 |
|
@@refname_short@@ variable.<br /> |
|
44 |
|
<br /> |
|
45 |
|
|
|
46 |
|
We are ready to do our first push: |
|
47 |
|
<div class="term">git push origin master |
|
48 |
|
</div> |
|
49 |
|
<br /> |
|
50 |
|
|
|
51 |
|
After few minutes, if you check your |
|
52 |
|
<a href="" target="_blank">Artifacts</a> |
|
53 |
|
area of your repository, you should see the folder <b>master</b> and, |
|
54 |
|
inside it, the .png and .blend files, with the correct content type.<br /> |
|
55 |
|
You can click the .png file and look at it.<br /> |
|
56 |
|
If the artifacts are not there, check your webhook and see the last output. |
|
57 |
|
It allows you to debug what went wrong.<br /> |
|
58 |
|
<br /> |
|
59 |
|
|
|
60 |
|
As an exercise, change something in the .py file, commit and push. |
|
61 |
|
You will see after few minnutes your newly generated image.<br /> |
|
62 |
|
|
File root/themes/default/doc/demo/demos/artifacts/define/main.html changed (mode: 100644) (index 79a7fde..feaf1c2) |
1 |
1 |
<div class="demo_page_title">@@demo::page_name@@</div> |
<div class="demo_page_title">@@demo::page_name@@</div> |
2 |
2 |
|
|
3 |
3 |
Defining artifacts is a very simple operation. |
Defining artifacts is a very simple operation. |
4 |
|
After you finish generating your files (for example after build), |
|
5 |
|
you need to create a directory named <b>rocketgit</b> and inside |
|
6 |
|
it to create a file named <b>artifacts</b>. The format of the file is:<br /> |
|
7 |
|
<div class="term">local file path (relative to the git build directory) |
|
8 |
|
map = where to map the file in the artefacts web space |
|
|
4 |
|
To achieve this, you need to have a file named <b>artifacts</b> |
|
5 |
|
in <b>rocketgit</b> directory, in your project directory.<br /> |
|
6 |
|
You can have this file in git or you can generate it at build time.<br /> |
|
7 |
|
<br /> |
|
8 |
|
|
|
9 |
|
The format of the file is:<br /> |
|
10 |
|
<div class="term">local_file_path |
|
11 |
|
map = where to map the file in the artifacts web space |
9 |
12 |
map = another place where to map the same file |
map = another place where to map the same file |
10 |
|
... |
|
11 |
|
map = some dir/ - |
|
|
13 |
|
content_type = put_here_a_content_type # optional |
|
14 |
|
regex = \.(png|gif|jpg)$ # optional, used only if local_file_path ends with '/' |
12 |
15 |
</div> |
</div> |
13 |
16 |
|
|
14 |
|
Indent the map files with any amount of spaces/tabs.<br > |
|
15 |
|
If the <b>map</b> line ends with '/' char, the file name will not be changed. |
|
|
17 |
|
<b>local_file_path</b> is a file or a directory relative to the repository root |
|
18 |
|
directory. Its use is to specify where to look for files. |
|
19 |
|
If it is a directory, you must append a <b>/</b> char.<br /> |
|
20 |
|
Indent the attributes with any amount of spaces/tabs.<br /> |
|
21 |
|
The <b>map</b> attribute will map your artifacts to a hierarchy which will be |
|
22 |
|
available in <b>Artifacts</b> sectorion of your repository. |
|
23 |
|
If the <b>map</b> line ends with '/' char, the file name will not be changed.<br /> |
16 |
24 |
Inside the <b>map</b> line, you can use the following variables, which will |
Inside the <b>map</b> line, you can use the following variables, which will |
17 |
25 |
be replaced by their values: |
be replaced by their values: |
18 |
26 |
<ul> |
<ul> |
19 |
27 |
<li>env - The environment string (example: debian-10-amd64)</li> |
<li>env - The environment string (example: debian-10-amd64)</li> |
20 |
|
<li>head - hash of the push which triggered the build (example: 58139c7a3b50e08815d5ae97dd6d15dcbfd96000)</li> |
|
|
28 |
|
<li>head - hash of the last commit (example: 58139c7a3b50e08815d5ae97dd6d15dcbfd96000)</li> |
21 |
29 |
<li>refname - referance name where the commits were pushed (example: ref/heads/main)</li> |
<li>refname - referance name where the commits were pushed (example: ref/heads/main)</li> |
22 |
30 |
<li>refname_short - short reference name where the commits were pushed (example: main)</li> |
<li>refname_short - short reference name where the commits were pushed (example: main)</li> |
23 |
31 |
<li>hook_id - The id of the hook which triggered the build (example: 734)</li> |
<li>hook_id - The id of the hook which triggered the build (example: 734)</li> |
24 |
|
<li>uid - The uid of the user which pushed (example: 34)</lib> |
|
|
32 |
|
<li>uid - The uid of the user which pushed (example: 34)</li> |
|
33 |
|
<li>original_path - the local_file_path string</li> |
|
34 |
|
<li>original_path_no_ext - the local_file_path string, but without extention</li> |
25 |
35 |
</ul> |
</ul> |
26 |
36 |
|
|
27 |
|
Variables must be enclosed between <b>@@</b> strings.<br /> |
|
|
37 |
|
Variables must be enclosed between <b>@@</b> chars (example: @@env@@).<br /> |
|
38 |
|
<br /> |
|
39 |
|
|
|
40 |
|
Optionaly, you can add <b>regex</b> attribute to filter what files you want to |
|
41 |
|
declare as artifacts. It makes sense when <b>local_file_path</b> |
|
42 |
|
is a directory.<br /> |
|
43 |
|
<br /> |
|
44 |
|
|
|
45 |
|
Again, optionaly, you can also set a proper content type by adding |
|
46 |
|
a <b>content_type</b> attribute. |
|
47 |
|
It will be usefull when someone will try to download your artifacts, |
|
48 |
|
to allow a proper application to be used to open the file. |
|
49 |
|
If not specified, it will be autodetected.<br /> |
|
50 |
|
<br /> |
28 |
51 |
|
|
29 |
52 |
An example: |
An example: |
30 |
53 |
<div class="term">build/my_cool_script.sh |
<div class="term">build/my_cool_script.sh |
|
... |
... |
build/my_docs.pdf |
35 |
58 |
map = docs/@@refname_short@@/My new name.pdf |
map = docs/@@refname_short@@/My new name.pdf |
36 |
59 |
map = docs/latest/My new name.pdf |
map = docs/latest/My new name.pdf |
37 |
60 |
content_type = application/pdf |
content_type = application/pdf |
|
61 |
|
|
|
62 |
|
./ |
|
63 |
|
map = docs/@@refname_short@@/ |
|
64 |
|
regex = \.xyz$ |
|
65 |
|
content_type = application/xyz |
38 |
66 |
</div> |
</div> |
39 |
67 |
|
|
40 |
|
The above example will upload the local file build/my_cool_script.sh |
|
41 |
|
to the server in the directory dir1/debian-10-amd64/main/my_cool_script.sh |
|
42 |
|
(please note, without the build/ dir).<br /> |
|
43 |
|
Also, it will upload the file my_docs.pdf in two places, changing |
|
|
68 |
|
The above example will upload the file <b>build/my_cool_script.sh</b> |
|
69 |
|
to the server in the directory <b>dir1/debian-10-amd64/main/my_cool_script.sh</b> |
|
70 |
|
(please note that the <b>build/</b> string is stripped).<br /> |
|
71 |
|
Also, it will upload the file <b>my_docs.pdf</b> in two places, changing |
44 |
72 |
the name at the same time.<br /> |
the name at the same time.<br /> |
45 |
|
Optionaly, you can also set a proper content type. It will be usefull |
|
46 |
|
when someone will try to download your artifacts. If not specified, |
|
47 |
|
it will be autodetected. |
|
|
73 |
|
Finally, it will scan the root project directory (<b>./</b>), select all files |
|
74 |
|
with <b>.xyz</b> extention and set the content type to <b>application/xyz</b>. |
|
75 |
|
Please note that the search is not recursive: only the files in the specified |
|
76 |
|
directory are tested. |
File root/themes/default/doc/demo/demos/ci-1/about/main.html changed (mode: 100644) (index 4e89e82..2603c01) |
... |
... |
when you push a branch of your repository and your tests pass.<br/ > |
9 |
9 |
First, you will have to create an account and then a repository and |
First, you will have to create an account and then a repository and |
10 |
10 |
setup your local environment for Git and SSH. Also, we assume that you |
setup your local environment for Git and SSH. Also, we assume that you |
11 |
11 |
already cloned the repository locally. |
already cloned the repository locally. |
12 |
|
These steps are not covered by this tutorial.<br /> |
|
|
12 |
|
These steps are not covered by this tutorial (see the hints on the repo page).<br /> |
13 |
13 |
<br /> |
<br /> |
14 |
14 |
|
|
15 |
|
Now, we assume you are in the just cloned repository local folder. |
|
|
15 |
|
Now, we assume you are in the just cloned repository's local folder. |
16 |
16 |
We can start with a simple application, stored in file 'main.sh': |
We can start with a simple application, stored in file 'main.sh': |
17 |
17 |
<div class="term">#!/bin/bash |
<div class="term">#!/bin/bash |
18 |
18 |
|
|
|
... |
... |
case "${1}" in |
22 |
22 |
c) echo "C" ;; |
c) echo "C" ;; |
23 |
23 |
*) echo "BAD" ;; |
*) echo "BAD" ;; |
24 |
24 |
esac |
esac |
25 |
|
|
|
26 |
25 |
</div> |
</div> |
27 |
26 |
|
|
28 |
27 |
As you can see, it is a simple script. Now, we will add another script, |
As you can see, it is a simple script. Now, we will add another script, |
|
... |
... |
if [ "`./main.sh b`" != "B" ]; then |
40 |
39 |
fi |
fi |
41 |
40 |
|
|
42 |
41 |
echo "Tests passed!" |
echo "Tests passed!" |
43 |
|
|
|
44 |
42 |
</div> |
</div> |
|
43 |
|
<br /> |
45 |
44 |
|
|
46 |
45 |
Next, we will add the deploy script, 'deploy.sh': |
Next, we will add the deploy script, 'deploy.sh': |
47 |
46 |
<div class="term">#!/bin/bash |
<div class="term">#!/bin/bash |
|
... |
... |
Next, we will add the deploy script, 'deploy.sh': |
49 |
48 |
for s in server1 server2 server3; do |
for s in server1 server2 server3; do |
50 |
49 |
rsync -a main.sh ${s}:/usr/local/bin/ |
rsync -a main.sh ${s}:/usr/local/bin/ |
51 |
50 |
done |
done |
52 |
|
|
|
53 |
51 |
</div> |
</div> |
54 |
52 |
|
|
55 |
|
'deploy.sh' will propagate our main.sh file to multiple servers. |
|
|
53 |
|
<b>deploy.sh</b> script will propagate our <b>main.sh</b> file to multiple |
|
54 |
|
servers. |
File root/themes/default/doc/demo/demos/ci-1/add_hook/main.html changed (mode: 100644) (index 8ca6828..7067fa3) |
1 |
1 |
<div class="demo_page_title">@@demo::page_name@@</div> |
<div class="demo_page_title">@@demo::page_name@@</div> |
2 |
2 |
|
|
3 |
|
Next step is to add a webhook that will trigger our test and deploy |
|
|
3 |
|
The next step is to add a webhook that will trigger our test and deploy |
4 |
4 |
phases when a push is taking place.<br /> |
phases when a push is taking place.<br /> |
5 |
5 |
<br /> |
<br /> |
6 |
|
To add this hook, you have to go login and then to to |
|
|
6 |
|
To add this hook, you have to login and go to |
7 |
7 |
<b>Settings / Webhooks / Add</b> menu.<br /> |
<b>Settings / Webhooks / Add</b> menu.<br /> |
8 |
|
Than, choose 'build' as the hook type by clinking 'Generic' link.<br /> |
|
|
8 |
|
Then, scroll to <b>build</b> type and click <b>Generic</b> link.<br /> |
9 |
9 |
Now, you can choose what repository and branch we want to add this hook to. |
Now, you can choose what repository and branch we want to add this hook to. |
10 |
10 |
Please note that both fields are regular expressions. So, with a single hook |
Please note that both fields are regular expressions. So, with a single hook |
11 |
11 |
you can cover more/all repositories and branches.<br /> |
you can cover more/all repositories and branches.<br /> |
|
... |
... |
Just type your repository name. For branch, leave it empty, meaning that |
13 |
13 |
any branch will trigger the hook.<br /> |
any branch will trigger the hook.<br /> |
14 |
14 |
Then, type a description to easy remember what the hook is for, for example: |
Then, type a description to easy remember what the hook is for, for example: |
15 |
15 |
"This will deploy main.sh to the servers".<br /> |
"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 /> |
|
|
16 |
|
Now, you have to choose what events will trigger the hook: |
|
17 |
|
we will use <b>Push</b> event.<br /> |
18 |
18 |
Next, you will have to choose a build environments. For our example, |
Next, you will have to choose a build environments. For our example, |
19 |
|
we will use only one environment, 'debian-8.2-i386'. |
|
|
19 |
|
we will use only one environment, 'debian-10-amd64'. |
20 |
20 |
You will use multiple build environments when you want to be sure |
You will use multiple build environments when you want to be sure |
21 |
21 |
your application will work across a full range of distributions and |
your application will work across a full range of distributions and |
22 |
22 |
architectures combinations.<br /> |
architectures combinations.<br /> |
|
... |
... |
bash scripts.<br /> |
26 |
26 |
Now, what is left is to specify what commands we want to execute. |
Now, what is left is to specify what commands we want to execute. |
27 |
27 |
First command will be './test.sh' and we will check the checkbox |
First command will be './test.sh' and we will check the checkbox |
28 |
28 |
"Abort on fail?". Why? Because if the test does not pass, we will |
"Abort on fail?". Why? Because if the test does not pass, we will |
29 |
|
not do the deploy step. |
|
|
29 |
|
not want to execute the deploy step. |
30 |
30 |
Optionally, you can add some labels which will be added to your last commit |
Optionally, you can add some labels which will be added to your last commit |
31 |
31 |
in that branch.<br /> |
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 /> |
|
|
32 |
|
For the second command you will type './deploy.sh'.<br /> |
|
33 |
|
Then, press 'Add'. We are ready to use the hook.<br /> |
File root/themes/default/doc/demo/demos/ci-1/python1/main.html renamed from root/themes/default/doc/demo/demos/artifacts/python1/main.html (similarity 50%) (mode: 100644) (index 9b7ad47..e53a384) |
1 |
1 |
<div class="demo_page_title">@@demo::page_name@@</div> |
<div class="demo_page_title">@@demo::page_name@@</div> |
2 |
2 |
|
|
3 |
3 |
In this tutorial we will create a Python package and we will |
In this tutorial we will create a Python package and we will |
4 |
|
upload the .rpm and the .tgz files to the artifacts web area.<br /> |
|
|
4 |
|
automatically upload the resulting .tar.gz and .whl files to |
|
5 |
|
the PyPI repository.<br /> |
|
6 |
|
<br /> |
5 |
7 |
|
|
6 |
8 |
The steps were copied from |
The steps were copied from |
7 |
9 |
<a href="https://packaging.python.org/tutorials/packaging-projects/" target="_blank">https://packaging.python.org/tutorials/packaging-projects/</a>.<br /> |
<a href="https://packaging.python.org/tutorials/packaging-projects/" target="_blank">https://packaging.python.org/tutorials/packaging-projects/</a>.<br /> |
|
10 |
|
<br /> |
8 |
11 |
|
|
9 |
12 |
We assume you already created a repository on rocketgit.com, named |
We assume you already created a repository on rocketgit.com, named |
10 |
13 |
<b>prj1</b>.<br /> |
<b>prj1</b>.<br /> |
11 |
14 |
|
|
12 |
|
Now, clone your repository: |
|
13 |
|
<div class="term">git clone https://rocketgit.com/user/YOURUSERNAME/prj1 |
|
|
15 |
|
If you do not have an account on PyPI, go |
|
16 |
|
<a href="https://pypi.org/account/register/" target="_blank">there</a> |
|
17 |
|
and create one.<br /> |
|
18 |
|
To be able to push your packages to PyPI, you need to create an API token. |
|
19 |
|
Go <a href="https://pypi.org/manage/account/#api-tokens" target="_blank">there</a> |
|
20 |
|
and press <b>Add API token</b>; |
|
21 |
|
fill in any name you want, and, for <b>Scope</b>, select |
|
22 |
|
<b>Entire account (all projects)</b> and press <b>Add token</b>.<br /> |
|
23 |
|
Copy the API token to clipboard because you will need it later.<br /> |
|
24 |
|
<br /> |
|
25 |
|
|
|
26 |
|
Clone your repository: |
|
27 |
|
<div class="term">git clone @@base_url@@@@login_ui::homepage@@/prj1 |
14 |
28 |
cd prj1 |
cd prj1 |
15 |
29 |
</div> |
</div> |
16 |
30 |
<br /> |
<br /> |
|
... |
... |
Create a file named <b>my_build_script.sh</b> with the following content: |
21 |
35 |
# Build the package |
# Build the package |
22 |
36 |
python3 setup.py sdist bdist_wheel |
python3 setup.py sdist bdist_wheel |
23 |
37 |
|
|
24 |
|
# Instruct RocketGit to use those files |
|
25 |
|
mkdir -p rocketgit |
|
26 |
|
echo "dist/" > rocketgit/artifacts |
|
27 |
|
echo " map = @@refname_short@@/latest/" >> rocketgit/artifacts |
|
28 |
|
echo " map = @@refname_short@@/@@head@@/" >> rocketgit/artifacts |
|
|
38 |
|
# Upload package |
|
39 |
|
python3 -m twine upload dist/* |
29 |
40 |
</div> |
</div> |
30 |
41 |
It is the script which will get executed when you will run <b>git push</b>.<br /> |
It is the script which will get executed when you will run <b>git push</b>.<br /> |
31 |
42 |
<br /> |
<br /> |
|
... |
... |
setuptools.setup( |
41 |
52 |
description="A small example package", |
description="A small example package", |
42 |
53 |
long_description="bla bla bla", |
long_description="bla bla bla", |
43 |
54 |
long_description_content_type="text/markdown", |
long_description_content_type="text/markdown", |
44 |
|
url="https://rocketgit.com/user/YOURUSERNAME/prj1", |
|
|
55 |
|
url="@@base_url@@@@login_ui::homepage@@/prj1", |
45 |
56 |
packages=setuptools.find_packages(), |
packages=setuptools.find_packages(), |
46 |
57 |
classifiers=[ |
classifiers=[ |
47 |
58 |
"Programming Language :: Python :: 3", |
"Programming Language :: Python :: 3", |
|
... |
... |
And the initialization file, <b>__init__.py</b>: |
76 |
87 |
</div> |
</div> |
77 |
88 |
<br /> |
<br /> |
78 |
89 |
|
|
79 |
|
Now, we will add all the files to git: |
|
|
90 |
|
We will add all the files to git: |
80 |
91 |
<div class="term">cd .. |
<div class="term">cd .. |
81 |
92 |
git add . |
git add . |
82 |
93 |
git commit -m "First commit" |
git commit -m "First commit" |
83 |
94 |
</div> |
</div> |
84 |
95 |
<br /> |
<br /> |
85 |
96 |
|
|
86 |
|
Now, it is time to define a webhook which, when you do a git push, will |
|
|
97 |
|
It is time to define a webhook which, when you do a git push, will |
87 |
98 |
generate a job which will be sent to one of the workers.<br /> |
generate a job which will be sent to one of the workers.<br /> |
88 |
|
The worker will start |
|
89 |
|
the build environment (a VM, for example) and will run my_build_script.sh |
|
90 |
|
inside that build environment.<br /> |
|
91 |
|
So, click <a href="/op/settings/wh/add/build/generic" target="_blank">here</a> |
|
|
99 |
|
The worker will start a build environment (a VM, for example) |
|
100 |
|
and will run <b>my_build_script.sh</b> inside it.<br /> |
|
101 |
|
Click <a href="/op/settings/wh/add/build/generic" target="_blank">here</a> |
92 |
102 |
(opens in a new tab) |
(opens in a new tab) |
93 |
103 |
or go to <b>Settings</b> main menu, |
or go to <b>Settings</b> main menu, |
94 |
104 |
click on <b>Webhooks</b> submenu and then press <b>Add</b>. |
click on <b>Webhooks</b> submenu and then press <b>Add</b>. |
95 |
105 |
From the list, go to type <b>build</b> line and click "Generic".<br /> |
From the list, go to type <b>build</b> line and click "Generic".<br /> |
96 |
|
|
|
97 |
106 |
For <b>Repository</b> input field |
For <b>Repository</b> input field |
98 |
107 |
set <b>prj1</b> or leave it empty to allow the webhook to execute for all |
set <b>prj1</b> or leave it empty to allow the webhook to execute for all |
99 |
|
your projects. Add a description (if you want), select <b>Push</b> trigger |
|
|
108 |
|
your projects. Add a description to easily identify the webhook. |
|
109 |
|
Because we need to authenticate ourselves to PyPI, we need to set the API token: |
|
110 |
|
go to <b>Secrets</b> area, set the <b>Name</b> field to <b>TWINE_USERNAME</b> |
|
111 |
|
and the <b>Value</b> field to <b>__token__</b>. |
|
112 |
|
Go to the next secret line and set the name to <b>TWINE_PASSWORD</b> and, for the value, |
|
113 |
|
paste the PyPI token you have in your clipboard. It must start with <b>pypi-</b>.<br /> |
|
114 |
|
Select <b>Push</b> trigger |
100 |
115 |
event, select <b>debian-10-amd64</b> environment, add <b>python-setuptools |
event, select <b>debian-10-amd64</b> environment, add <b>python-setuptools |
101 |
|
python-setuptools-wheel python3-setuptools python3-wheel</b> to the |
|
|
116 |
|
python-setuptools-wheel python3-setuptools python3-wheel twine</b> to the |
102 |
117 |
<b>Packages to install</b> section (we add all the possible names to cover |
<b>Packages to install</b> section (we add all the possible names to cover |
103 |
|
all distributions), and, for the first command, |
|
|
118 |
|
all distributions - invalid names are ignored), and, for the first command, |
104 |
119 |
input <b>bash my_build_script.sh</b>. Finally, click <b>Add</b> button.<br /> |
input <b>bash my_build_script.sh</b>. Finally, click <b>Add</b> button.<br /> |
|
120 |
|
<br /> |
105 |
121 |
|
|
106 |
|
Now, we can go back to terminal, and run: |
|
|
122 |
|
We can go back to terminal, and run: |
107 |
123 |
<div class="term">git push</div> |
<div class="term">git push</div> |
|
124 |
|
<br /> |
108 |
125 |
|
|
109 |
|
If everything went OK, after few minutes, you can check the artifacts area: |
|
110 |
|
go to <b>My repositories</b> in the main menu, find <b>prj1</b> and click |
|
111 |
|
on it, then click on <b>Artifacts</b> submenu.<br /> |
|
112 |
|
If everything went OK, you will find your packages there.<br /> |
|
113 |
|
If not, you will go back to the webhooks page, click on the newly added |
|
114 |
|
one and expand the <b>Last output</b> area and you will understand |
|
115 |
|
what went wrong.<br /> |
|
|
126 |
|
If everything went OK, after few minutes, you can check the Webhooks area: |
|
127 |
|
go to <b>Settings</b> in the main menu and go to <b>Webhooks</b> submenu. |
|
128 |
|
Scroll to your webhook, and expand <b>Last output</b> area: here you will |
|
129 |
|
find the output of the package installation process and the output of |
|
130 |
|
your <b>my_build_script.sh</b> script. From this log, you can figure out |
|
131 |
|
why something went wrong or you can find that your upload was a success.<br /> |
|
132 |
|
<br /> |
|
133 |
|
|
|
134 |
|
Go to |
|
135 |
|
<a href="https://pypi.org/manage/projects/" target="_blank">PyPI</a> |
|
136 |
|
and you should see your package uploaded there.<br /> |
|
137 |
|
To install your newly uploaded package, on any machine, use: |
|
138 |
|
<div class="term">python3 -m pip install example-pkg-YOUR-USERNAME-HERE |
|
139 |
|
</div> |
116 |
140 |
<br /> |
<br /> |
117 |
141 |
|
|
118 |
|
You can directly install the package, by copying the URL behind <b>Download</b> |
|
119 |
|
link of the <b>.whl</b> file and running: |
|
120 |
|
<div class="term">python3 -m pip install PASTE_HERE_THE_LINK_FROM_CLIPBOARD</div> |
|
121 |
|
Now, you can just use it: |
|
|
142 |
|
To use it: |
122 |
143 |
<div class="term">python3 |
<div class="term">python3 |
123 |
144 |
>>> import prj1 |
>>> import prj1 |
124 |
145 |
>>> prj1.hello(); |
>>> prj1.hello(); |
File root/themes/default/doc/demo/demos/ci-1/trigger/main.html changed (mode: 100644) (index 74e6b42..5df8d75) |
... |
... |
You will have to add, commit and push these files: |
10 |
10 |
git add *.sh |
git add *.sh |
11 |
11 |
git commit -m "First commit" |
git commit -m "First commit" |
12 |
12 |
git push origin master |
git push origin master |
13 |
|
|
|
14 |
13 |
</div> |
</div> |
15 |
14 |
|
|
16 |
|
If the push is successfully, the hook will be triggered in background. |
|
|
15 |
|
If the push was done successfully, the hook will be triggered in background. |
17 |
16 |
You can go to <b>Settings / Webhooks</b> and you can check the "Last output" |
You can go to <b>Settings / Webhooks</b> and you can check the "Last output" |
18 |
17 |
field to see the last output of the trigger. If the hook did not finished, |
field to see the last output of the trigger. If the hook did not finished, |
19 |
18 |
the text "n/a" will appear.<br /> |
the text "n/a" will appear.<br /> |
|
... |
... |
Command[./deploy.sh]: |
39 |
38 |
./deploy.sh: line 4: rsync: command not found |
./deploy.sh: line 4: rsync: command not found |
40 |
39 |
./deploy.sh: line 4: rsync: command not found |
./deploy.sh: line 4: rsync: command not found |
41 |
40 |
./deploy.sh: line 4: rsync: command not found |
./deploy.sh: line 4: rsync: command not found |
42 |
|
|
|
43 |
41 |
</div> |
</div> |
44 |
42 |
|
|
45 |
|
As you can see the tests passed, but you forgot to add rsync in the list of |
|
|
43 |
|
As you can see the tests passed, but we forgot to add <b>rsync</b> to the list of |
46 |
44 |
packages to be installed. Just go to <b>Settings / Webhook / List</b> and |
packages to be installed. Just go to <b>Settings / Webhook / List</b> and |
47 |
|
edit your hook: in "packages to install" text box, add 'rsync' next to 'bash' |
|
|
45 |
|
edit your hook: in "Packages to install" text box, add 'rsync' next to 'bash' |
48 |
46 |
and press 'Edit' button.<br /> |
and press 'Edit' button.<br /> |
49 |
|
Now, we are ready to push again. Because you changed nothing in the repository, |
|
|
47 |
|
Now, we are ready to push again. Because we changed nothing in the repository, |
50 |
48 |
the push will succeed but will not trigger the hook. So, just do a fake |
the push will succeed but will not trigger the hook. So, just do a fake |
51 |
49 |
change: |
change: |
52 |
50 |
<div class="term">echo "Documentation is important" > README |
<div class="term">echo "Documentation is important" > README |
|
... |
... |
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender= |
111 |
109 |
ssh: Could not resolve hostname server3: No address associated with hostname |
ssh: Could not resolve hostname server3: No address associated with hostname |
112 |
110 |
rsync: connection unexpectedly closed (0 bytes received so far) [sender] |
rsync: connection unexpectedly closed (0 bytes received so far) [sender] |
113 |
111 |
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1] |
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1] |
114 |
|
|
|
115 |
112 |
</div> |
</div> |
116 |
113 |
|
|
117 |
114 |
You can see that our 'deploy.sh' script was called, 'rsync' was present |
You can see that our 'deploy.sh' script was called, 'rsync' was present |
|
... |
... |
but failed because our server names are fake.<br/> |
119 |
116 |
<br /> |
<br /> |
120 |
117 |
|
|
121 |
118 |
That's it! You are now able to setup a test & deploy system to help you |
That's it! You are now able to setup a test & deploy system to help you |
122 |
|
with the boring manual procedure. |
|
|
119 |
|
with the boring manual procedures.<br /> |
|
120 |
|
<br /> |
|
121 |
|
|
|
122 |
|
Next sections will show you some practical examples. |