Skip to content

Commit c437503

Browse files
authored
Merge pull request #31 from adaa-polsl/github-actions
build: Github action building docs on each new release
2 parents 110c77f + 7d16509 commit c437503

File tree

130 files changed

+26689
-270
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+26689
-270
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Build docummentation and updated README badges on new release
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
jobs:
8+
release-build:
9+
runs-on: ubuntu-latest
10+
11+
steps:
12+
- name: Checkout code
13+
uses: actions/checkout@v4
14+
15+
- name: Set up Python
16+
uses: actions/setup-python@v5
17+
with:
18+
python-version: "3.12"
19+
20+
- name: Build documentation
21+
run: |
22+
python -m pip install --upgrade pip
23+
pip install -r ./docs/requirements.txt
24+
python ./docs/build.py ${{ github.event.release.name }}
25+
26+
- name: Update README.md badges
27+
run: |
28+
python ./docs/generate_readme_badges.py
29+
30+
- name: Commit updated documentation and badges
31+
uses: "stefanzweifel /git-auto-commit-action@v5"
32+
with:
33+
commit_message: Documentation for version ${{ github.event.release.name }}

docs/HOW_TO_DEPLOY.md

+5-45
Original file line numberDiff line numberDiff line change
@@ -3,55 +3,15 @@
33
> Don't forger to change version before deployment!
44
> Deployment **MUST** be done from the `main` branch only!
55
6-
### 1. Update documentation on Github Pages
7-
> Make sure you installed docs dependencies in **SEPARATE** virtual env and activated it
8-
9-
In `docs` directory call call:
10-
11-
```bash
12-
build.py <VERSION_NUMBER>
13-
```
14-
e.g.
15-
```bash
16-
build.py 2.18.0.0
17-
```
18-
19-
### 2. Update badges
20-
21-
In repo root directory:
22-
23-
1. Update coverage badge
24-
```bash
25-
python -m coverage run -m unittest discover ./tests
26-
python -m coverage xml -o ./docs/reports/coverage/coverage.xml
27-
python -m coverage html -d ./docs/reports/coverage/
28-
genbadge coverage -i ./docs/reports/coverage/coverage.xml -o ./docs/badges/coverage-badge.svg
29-
```
30-
31-
2. Update test badge
32-
33-
```bash
34-
rm -r ./docs/reports/junit
35-
mkdir ./docs/reports/junit
36-
python -m junitxml.main --o ./docs/reports/junit/junit.xml
37-
python -m junit2htmlreport ./docs/reports/junit/junit.xml ./docs/reports/junit/report.html
38-
genbadge tests -i ./docs/reports/junit/junit.xml -o ./docs/badges/test-badge.svg
39-
```
40-
41-
3. Update flake8 badge
42-
43-
```bash
44-
flake8 ./rulekit --exit-zero --format=html --htmldir ./docs/reports/flake8 --statistics --tee --output-file ./docs/reports/flake8/flake8stats.txt
45-
genbadge flake8 -i ./docs/reports/flake8/flake8stats.txt -o ./docs/badges/flake8-badge.svg
46-
```
47-
48-
### 3. Create tag in Github repository
6+
### 1. Create tag in Github repository
497
Create tag on current commit named `v{CURRENT_VERSION}`
508

51-
### 4. Create deployment in Github
9+
### 2. Create release in Github
5210
Use previously created tag for it.
5311

54-
### 5. Deploy to pypi
12+
> Documentation will be automatically generated on new version release
13+
14+
### 3. Deploy to pypi
5515
In root repository directory:
5616
```
5717
rm -r ./dist

docs/badges/flake8-badge.svg

+1-1
Loading

docs/build.py

+17-14
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,30 @@
11
import argparse
22
import os
3+
import pathlib
34
import shutil
4-
import subprocess
55
import sys
66

7-
curr_dir_path: str = os.path.dirname(os.path.realpath(__file__))
7+
from helpers import run_command
8+
9+
curr_dir_path: str = pathlib.Path(os.path.realpath(__file__)).parent
810

911

1012
def build_docs_using_sphinx(version_number: str):
1113
print(f"Building docs for version v{version_number}")
12-
if version_number[0] == 'v':
13-
raise ValueError(
14-
'Please provide version number without "v" prefix')
15-
1614
python_path: str = sys.executable
1715
output_path: str = f'{curr_dir_path}/serve/v{version_number}'
18-
output = subprocess.check_output(
16+
run_command(
1917
f"{python_path} -m sphinx.cmd.build -M html source {output_path}"
2018
)
21-
print(output.decode())
22-
2319
tmp_path: str = f'{output_path}@'
2420
shutil.move(output_path, tmp_path)
25-
shutil.move(os.path.join(tmp_path, 'html'), output_path)
21+
shutil.move(pathlib.Path(tmp_path, 'html'), output_path)
2622
shutil.rmtree(tmp_path)
2723

2824

2925
def update_index_html(version_number: str):
30-
with open(os.path.join(curr_dir_path, 'serve', 'index.html'), 'r', encoding='utf-8') as index_html:
26+
print('Updating index.html...')
27+
with open(pathlib.Path(curr_dir_path / 'serve' / 'index.html'), 'r', encoding='utf-8') as index_html:
3128
content: str = index_html.read()
3229
content = content.replace('(latest)', '')
3330
content = content.replace(
@@ -41,7 +38,7 @@ def update_index_html(version_number: str):
4138
<!-- LATEST VERSION PLACEHOLDER -->
4239
'''
4340
)
44-
with open(os.path.join(curr_dir_path, 'serve', 'index.html'), 'w', encoding='utf-8') as index_html:
41+
with open(pathlib.Path(curr_dir_path / 'serve' / 'index.html'), 'w', encoding='utf-8') as index_html:
4542
index_html.write(content)
4643

4744

@@ -52,8 +49,14 @@ def main():
5249
parser.add_argument('version_number')
5350
args = parser.parse_args()
5451

55-
build_docs_using_sphinx(args.version_number)
56-
update_index_html(args.version_number)
52+
version_number: str = args.version_number
53+
# remove "v" prefix if present
54+
if version_number.startswith('v'):
55+
version_number = version_number.replace('v', '')
56+
57+
build_docs_using_sphinx(version_number)
58+
update_index_html(version_number)
59+
print('Documentation built successfully!')
5760

5861

5962
if __name__ == "__main__":

docs/generate_readme_badges.py

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import os
2+
import pathlib
3+
import shutil
4+
import sys
5+
6+
from helpers import run_command
7+
8+
curr_dir_path: str = pathlib.Path(os.path.realpath(__file__)).parent
9+
10+
11+
# Documentation will be automatically generated on new version release
12+
def generate_tests_coverage_badge(python_path: str, cwd: str):
13+
run_command(
14+
f"{python_path} -m coverage run -m unittest discover ./tests",
15+
cwd=cwd
16+
)
17+
run_command(
18+
f"{python_path} -m coverage xml -o ./docs/reports/coverage/coverage.xml",
19+
cwd=cwd
20+
)
21+
run_command(
22+
f"{python_path} -m coverage html -d ./docs/reports/coverage/",
23+
cwd=cwd
24+
)
25+
run_command(
26+
"genbadge coverage -i ./docs/reports/coverage/coverage.xml -o ./docs/badges/coverage-badge.svg",
27+
cwd=cwd
28+
)
29+
30+
31+
def generate_test_badge(python_path: str, cwd: str):
32+
test_report_path = pathlib.Path(curr_dir_path / 'reports' / 'junit')
33+
shutil.rmtree(test_report_path)
34+
os.makedirs(test_report_path, exist_ok=True)
35+
run_command(
36+
f"{python_path} -m junitxml.main --o ./docs/reports/junit/junit.xml",
37+
cwd=cwd
38+
)
39+
run_command(
40+
f"{python_path} -m junit2htmlreport ./docs/reports/junit/junit.xml ./docs/reports/junit/report.html",
41+
cwd=cwd
42+
)
43+
run_command(
44+
"genbadge tests -i ./docs/reports/junit/junit.xml -o ./docs/badges/test-badge.svg",
45+
cwd=cwd
46+
)
47+
48+
49+
def generate_flake8_badge(python_path: str, cwd: str):
50+
run_command(
51+
f"{python_path} -m flake8 ./rulekit --exit-zero --format=html --htmldir ./docs/reports/flake8 --statistics --tee --output-file ./docs/reports/flake8/flake8stats.txt",
52+
cwd=cwd
53+
)
54+
run_command(
55+
"genbadge flake8 -i ./docs/reports/flake8/flake8stats.txt -o ./docs/badges/flake8-badge.svg",
56+
cwd=cwd
57+
)
58+
59+
60+
def main():
61+
print('Updating badges')
62+
cwd = pathlib.Path(curr_dir_path / '..') # root repo dir
63+
python_path: str = sys.executable
64+
65+
generate_tests_coverage_badge(python_path, cwd)
66+
generate_test_badge(python_path, cwd)
67+
generate_flake8_badge(python_path, cwd)
68+
69+
print('Badges generated successfully!')
70+
71+
72+
if __name__ == "__main__":
73+
main()

docs/helpers.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import subprocess
2+
from typing import Optional
3+
4+
5+
def run_command(command: str, cwd: Optional[str] = None):
6+
output = subprocess.check_output(command, cwd=cwd)
7+
print(output.decode())

docs/reports/coverage/class_index.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ <h2>
5454
<a class="button current">Classes</a>
5555
</h2>
5656
<p class="text">
57-
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.1">coverage.py v7.6.1</a>,
58-
created at 2024-09-09 11:15 +0200
57+
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.4">coverage.py v7.6.4</a>,
58+
created at 2024-11-05 13:43 +0100
5959
</p>
6060
</div>
6161
</header>
@@ -771,8 +771,8 @@ <h2>
771771
<footer>
772772
<div class="content">
773773
<p>
774-
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.1">coverage.py v7.6.1</a>,
775-
created at 2024-09-09 11:15 +0200
774+
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.4">coverage.py v7.6.4</a>,
775+
created at 2024-11-05 13:43 +0100
776776
</p>
777777
</div>
778778
<aside class="hidden">

docs/reports/coverage/function_index.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ <h2>
5454
<a class="button" href="class_index.html">Classes</a>
5555
</h2>
5656
<p class="text">
57-
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.1">coverage.py v7.6.1</a>,
58-
created at 2024-09-09 11:15 +0200
57+
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.4">coverage.py v7.6.4</a>,
58+
created at 2024-11-05 13:43 +0100
5959
</p>
6060
</div>
6161
</header>
@@ -2435,8 +2435,8 @@ <h2>
24352435
<footer>
24362436
<div class="content">
24372437
<p>
2438-
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.1">coverage.py v7.6.1</a>,
2439-
created at 2024-09-09 11:15 +0200
2438+
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.4">coverage.py v7.6.4</a>,
2439+
created at 2024-11-05 13:43 +0100
24402440
</p>
24412441
</div>
24422442
<aside class="hidden">

docs/reports/coverage/index.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ <h2>
5353
<a class="button" href="class_index.html">Classes</a>
5454
</h2>
5555
<p class="text">
56-
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.1">coverage.py v7.6.1</a>,
57-
created at 2024-09-09 11:15 +0200
56+
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.4">coverage.py v7.6.4</a>,
57+
created at 2024-11-05 13:43 +0100
5858
</p>
5959
</div>
6060
</header>
@@ -256,8 +256,8 @@ <h2>
256256
<footer>
257257
<div class="content">
258258
<p>
259-
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.1">coverage.py v7.6.1</a>,
260-
created at 2024-09-09 11:15 +0200
259+
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.4">coverage.py v7.6.4</a>,
260+
created at 2024-11-05 13:43 +0100
261261
</p>
262262
</div>
263263
<aside class="hidden">

0 commit comments

Comments
 (0)