summarylogtreecommitdiffstats
path: root/gen_pkgbuild.py
blob: 2c3baaa89af39224cb73afe743ac5874b77112a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python
import io
import logging
import re
import sys

from lxml import etree
import requests
import tornado.template


logger = logging.getLogger(__name__)


def main(pkgver):
    all_languages = {}

    mozilla_translations_page = requests.get(
        'https://pontoon.mozilla.org/projects/thunderbird/ajax/',
        headers={'X-Requested-With': 'XMLHttpRequest'},
    ).text

    parser = etree.HTMLParser()
    tree = etree.parse(io.StringIO(mozilla_translations_page), parser)
    for lang_td in tree.findall('.//td[@class="name"]'):
        lang_iso639 = lang_td.attrib['data-slug']
        lang_name = lang_td.find('.//a').text
        all_languages[lang_iso639] = lang_name
    all_languages['en-US'] = 'English'

    sha256sums_data = requests.get(
        f'https://ftp.mozilla.org/pub/thunderbird/releases/{pkgver}/SHA256SUMS'
    ).text

    sha256sums = []
    available_languages = []
    for line in sha256sums_data.strip().split('\n'):
        sha256sum, filename = line.split(maxsplit=1)
        if not filename.startswith('linux-x86_64/xpi/'):
            continue
        sha256sums.append(sha256sum)
        available_languages.append(
            filename[len('linux-x86_64/xpi/'):][:-len('.xpi')])
    available_languages = sorted(available_languages)

    logger.info('Collected languages: %s', available_languages)

    languages = {}
    for lang_iso639 in available_languages:
        languages[lang_iso639] = all_languages[lang_iso639]
    loader = tornado.template.Loader('.')
    content = loader.load('PKGBUILD.tmpl').generate(
        pkgver=pkgver,
        min_pkgver=re.sub(r'b\d', 'b0', pkgver),
        languages=languages,
        sha256sums=sha256sums,
    )

    with open('PKGBUILD', 'wb') as f:
        f.write(content)


if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    main(sys.argv[1])