diff --git a/.github/workflows/generateReleaseNotes.yml b/.github/workflows/generateReleaseNotes.yml index d3628b2768..a1b12b1c20 100644 --- a/.github/workflows/generateReleaseNotes.yml +++ b/.github/workflows/generateReleaseNotes.yml @@ -11,6 +11,11 @@ on: description: 'Version of the release' default: '4.1.0' required: true + watermark: + description: 'PDF contains watermark for test' + default: true + required: true + type: boolean jobs: generate_release_notes: @@ -25,9 +30,12 @@ jobs: with: python-version: 3.8 - name: Install python packages - run: pip install --user requests + run: pip install --disable-pip-version-check --user docraptor==3.1.0 Jinja2==3.1.3 Markdown==3.5.2 requests PyYAML==6.0.1 - name: Generate MSL release notes from closed GitHub issues timeout-minutes: 3 + env: + DOCRAPTOR_API_KEY: ${{ secrets.DOCRAPTOR_API_KEY }} + DOCRAPTOR_TEST: ${{ github.event.inputs.watermark }} run: python ./Modelica/Resources/Documentation/Generate-ReleaseNotes.py ${{ github.event.inputs.milestone }} ${{ github.event.inputs.version }} - uses: actions/upload-artifact@v3 with: diff --git a/.gitignore b/.gitignore index 527898d372..40aa1d06fb 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,6 @@ buildlog.txt config.* configure depcomp -docverter.css dsfinal.txt dsin.txt dslog.txt diff --git a/Modelica/Resources/Documentation/Generate-ReleaseNotes.py b/Modelica/Resources/Documentation/Generate-ReleaseNotes.py index 2c9e4092f3..6ed84b079f 100644 --- a/Modelica/Resources/Documentation/Generate-ReleaseNotes.py +++ b/Modelica/Resources/Documentation/Generate-ReleaseNotes.py @@ -9,13 +9,18 @@ python Generate-ReleaseNotes.py [milestone_number] [version_string] ''' -import requests +from collections import defaultdict +from enum import IntEnum import json -import re import os +import re import sys -from enum import IntEnum -from collections import defaultdict + +import docraptor +import jinja2 +import markdown +import requests +import yaml IssueType = IntEnum( value='IssueType', @@ -31,7 +36,7 @@ def main(dir, milestone, version, auth): owner = 'modelica' repo = 'ModelicaStandardLibrary' - template = 'Modelica-ReleaseNotes-Template.html' + html_template = 'Modelica-ReleaseNotes-Template.html' # Filter closed issues (including pull requests) on milestone in ascending order p = {'state': 'closed', 'milestone': milestone, 'page': 1, 'per_page': 100, 'direction': 'asc'} @@ -110,36 +115,35 @@ def main(dir, milestone, version, auth): f.write("* [\#{1}]({2}) {0}\n".format(t, n, url)) f.write('\n') + # Read again Markdown with open(os.path.join(path, 'ResolvedGitHubIssues.md'), 'r') as f: - content = f.read() + md = f.read() # Convert Markdown -> HTML - with open(os.path.join(path, 'ResolvedGitHubIssues.html'), 'wb') as f: - url = 'http://c.docverter.com/convert' - title = 'MSL {0} GitHub issues'.format(version) - data = {'to': 'html', 'from': 'markdown', 'template': template, 'title': title} - files = { \ - 'input_files[]': open(os.path.join(path, 'ResolvedGitHubIssues.md'), 'rb'), \ - 'other_files[]': open(os.path.join(dir, template), 'rb') \ - } - r = requests.post(url, data=data, files=files) - f.write(r.content) + with open(os.path.join(dir, html_template), 'r') as f: + template = f.read() + html = jinja2.Template(template).render( + content=markdown.markdown(md), + title='MSL {0} GitHub issues'.format(version)) + with open(os.path.join(path, 'ResolvedGitHubIssues.html'), 'w') as f: + f.write(html) # Convert Markdown -> PDF - with open(os.path.join(path, 'ResolvedGitHubIssues.pdf'), 'wb') as f: - url = 'http://c.docverter.com/convert' - css = 'docverter.css' - with open(os.path.join(dir, css), 'w') as c: - pageInfo = '@page {size: A4 portrait;}' - c.write(pageInfo) - data = {'to': 'pdf', 'from': 'markdown', 'css': css, 'template': template} - files = [ \ - ('input_files[]', ('ResolvedGitHubIssues.md', open(os.path.join(path, 'ResolvedGitHubIssues.md'), 'rb'), 'text/markdown')), \ - ('other_files[]', (template, open(os.path.join(dir, template), 'rb'), 'text/html')), \ - ('other_files[]', (css, open(os.path.join(dir, css), 'rb'), 'text/css')) \ - ] - r = requests.post(url, data=data, files=files) - f.write(r.content) + doc_api = docraptor.DocApi() + doc_api.api_client.configuration.username = os.getenv('DOCRAPTOR_API_KEY', default='YOUR_API_KEY_HERE') + try: + pdf = doc_api.create_doc({ + 'test': yaml.load(os.getenv('DOCRAPTOR_TEST', default='True'), yaml.SafeLoader), + 'name': 'ResolvedGitHubIssues.pdf', + 'document_content': html, + 'document_type': 'pdf'}) + with open(os.path.join(path, 'ResolvedGitHubIssues.pdf'), 'wb') as f: + f.write(pdf) + except docraptor.rest.ApiException as e: + print(e.status) + print(e.reason) + print(e.body) + if __name__ == '__main__': module_dir, module_name = os.path.split(__file__) diff --git a/Modelica/Resources/Documentation/Modelica-ReleaseNotes-Template.html b/Modelica/Resources/Documentation/Modelica-ReleaseNotes-Template.html index cb02dabeb1..dff93ffab9 100644 --- a/Modelica/Resources/Documentation/Modelica-ReleaseNotes-Template.html +++ b/Modelica/Resources/Documentation/Modelica-ReleaseNotes-Template.html @@ -1,71 +1,19 @@ - - + - -$for(author-meta)$ - -$endfor$ -$if(date-meta)$ - -$endif$ -$if(keywords)$ - -$endif$ - $if(title-prefix)$$title-prefix$$endif$ + {{ title }} -$if(highlighting-css)$ - -$endif$ -$for(css)$ - -$endfor$ -$if(math)$ - $math$ -$endif$ -$for(header-includes)$ - $header-includes$ -$endfor$ -$for(include-before)$ -$include-before$ -$endfor$ -$if(title)$ -
-

$title$

-$if(subtitle)$ -

$subtitle$

-$endif$ -$for(author)$ -

$author$

-$endfor$ -$if(date)$ -

$date$

-$endif$ -
-$endif$ -$if(toc)$ -
-$table-of-contents$ -
-$endif$ -$body$ -$for(include-after)$ -$include-after$ -$endfor$ +{{ content }}