jenkins-bot has submitted this change and it was merged.
Change subject: interwiki cleanup
......................................................................
interwiki cleanup
interlanguage links are hold by wikidata. interwiki_putfirst dictionary is
not used anymore for most of mw sites and it's content is outdated since more
than 4 years.
Change-Id: I79ccd6b82f341b424cb7d7b43a642d1b62ff0ca9
---
M pywikibot/families/wikibooks_family.py
M pywikibot/families/wikinews_family.py
M pywikibot/families/wikipedia_family.py
M pywikibot/families/wikiquote_family.py
M pywikibot/families/wikisource_family.py
5 files changed, 0 insertions(+), 131 deletions(-)
Approvals:
Ladsgroup: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/families/wikibooks_family.py b/pywikibot/families/wikibooks_family.py
index b2972ae..4b9ac23 100644
--- a/pywikibot/families/wikibooks_family.py
+++ b/pywikibot/families/wikibooks_family.py
@@ -126,22 +126,6 @@
'af', 'ang', 'ca', 'fa', 'fy', 'it', 'nl', 'ru', 'th', 'zh',
]
- # Which languages have a special order for putting interlanguage links,
- # and what order is it? If a language is not in interwiki_putfirst,
- # alphabetical order on language code is used. For languages that are in
- # interwiki_putfirst, interwiki_putfirst is checked first, and
- # languages are put in the order given there. All other languages are
- # put after those, in code-alphabetical order.
- self.interwiki_putfirst = {
- 'en': self.alphabetic,
- 'fi': self.alphabetic,
- 'fr': self.alphabetic,
- 'he': ['en'],
- 'hu': ['en'],
- 'pl': self.alphabetic,
- 'simple': self.alphabetic
- }
-
# Subpages for documentation.
# TODO: List is incomplete, to be completed for missing languages.
self.doc_subpages = {
diff --git a/pywikibot/families/wikinews_family.py b/pywikibot/families/wikinews_family.py
index a80743a..e6a94d6 100644
--- a/pywikibot/families/wikinews_family.py
+++ b/pywikibot/families/wikinews_family.py
@@ -39,20 +39,5 @@
# https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
self.cross_allowed = ['ca', 'cs', 'en', 'fa', 'ko', ]
- # Which languages have a special order for putting interlanguage links,
- # and what order is it? If a language is not in interwiki_putfirst,
- # alphabetical order on language code is used. For languages that are in
- # interwiki_putfirst, interwiki_putfirst is checked first, and
- # languages are put in the order given there. All other languages are
- # put after those, in code-alphabetical order.
- self.interwiki_putfirst = {
- 'en': self.alphabetic,
- 'fi': self.alphabetic,
- 'fr': self.alphabetic,
- 'he': ['en'],
- 'hu': ['en'],
- 'pl': self.alphabetic,
- }
-
# TODO:
# Change site_tests.py when wikinews will have doc_subpage.
diff --git a/pywikibot/families/wikipedia_family.py b/pywikibot/families/wikipedia_family.py
index 576b5d6..6c11b45 100644
--- a/pywikibot/families/wikipedia_family.py
+++ b/pywikibot/families/wikipedia_family.py
@@ -288,73 +288,6 @@
# but some languages don't use this.
self.nocapitalize = ['jbo']
- # Which languages have a special order for putting interlanguage links,
- # and what order is it? If a language is not in interwiki_putfirst,
- # alphabetical order on language code is used. For languages that are in
- # interwiki_putfirst, interwiki_putfirst is checked first, and
- # languages are put in the order given there. All other languages are
- # put after those, in code-alphabetical order.
-
- self.alphabetic_sr = [
- 'ace', 'kbd', 'af', 'ak', 'als', 'am', 'ang', 'ab', 'ar', 'an',
- 'arc', 'roa-rup', 'frp', 'arz', 'as', 'ast', 'gn', 'av', 'ay', 'az',
- 'bjn', 'id', 'ms', 'bg', 'bm', 'zh-min-nan', 'nan', 'map-bms', 'jv',
- 'su', 'ba', 'be', 'be-tarask', 'bh', 'bcl', 'bi', 'bn', 'bo', 'bar',
- 'bs', 'bpy', 'br', 'bug', 'bxr', 'ca', 'ceb', 'ch', 'cbk-zam', 'sn',
- 'tum', 'ny', 'cho', 'chr', 'co', 'cy', 'cv', 'cs', 'da', 'dk',
- 'pdc', 'de', 'nv', 'dsb', 'na', 'dv', 'dz', 'mh', 'et', 'el', 'eml',
- 'en', 'myv', 'es', 'eo', 'ext', 'eu', 'ee', 'fa', 'hif', 'fo', 'fr',
- 'fy', 'ff', 'fur', 'ga', 'gv', 'sm', 'gag', 'gd', 'gl', 'gan', 'ki',
- 'glk', 'got', 'gu', 'ha', 'hak', 'xal', 'haw', 'he', 'hi', 'ho',
- 'hsb', 'hr', 'hy', 'io', 'ig', 'ii', 'ilo', 'ia', 'ie', 'iu', 'ik',
- 'os', 'xh', 'zu', 'is', 'it', 'ja', 'ka', 'kl', 'kr', 'pam', 'krc',
- 'csb', 'kk', 'kw', 'rw', 'ky', 'mrj', 'rn', 'sw', 'km', 'kn', 'ko',
- 'kv', 'kg', 'ht', 'ks', 'ku', 'kj', 'lad', 'lbe', 'la', 'ltg', 'lv',
- 'to', 'lb', 'lez', 'lt', 'lij', 'li', 'ln', 'lo', 'jbo', 'lg',
- 'lmo', 'hu', 'mk', 'mg', 'mt', 'mi', 'min', 'cdo', 'mwl', 'ml',
- 'mdf', 'mo', 'mn', 'mr', 'mus', 'my', 'mzn', 'nah', 'fj', 'ne',
- 'nl', 'nds-nl', 'cr', 'new', 'nap', 'ce', 'frr', 'pih', 'no', 'nb',
- 'nn', 'nrm', 'nov', 'oc', 'mhr', 'or', 'om', 'ng', 'hz', 'uz', 'pa',
- 'pfl', 'pag', 'pap', 'koi', 'pi', 'pcd', 'pms', 'nds', 'pnb', 'pl',
- 'pt', 'pnt', 'ps', 'aa', 'kaa', 'crh', 'ty', 'ksh', 'ro', 'rmy',
- 'rm', 'qu', 'ru', 'rue', 'sa', 'sah', 'se', 'sg', 'sc', 'sco', 'sd',
- 'stq', 'st', 'nso', 'tn', 'sq', 'si', 'scn', 'simple', 'ss', 'sk',
- 'sl', 'cu', 'szl', 'so', 'ckb', 'srn', 'sr', 'sh', 'fi', 'sv', 'ta',
- 'shi', 'tl', 'kab', 'roa-tara', 'tt', 'te', 'tet', 'th', 'ti', 'vi',
- 'tg', 'tokipona', 'tp', 'tpi', 'chy', 've', 'tr', 'tk', 'tw', 'tyv',
- 'udm', 'uk', 'ur', 'ug', 'za', 'vec', 'vep', 'vo', 'fiu-vro', 'wa',
- 'vls', 'war', 'wo', 'wuu', 'ts', 'xmf', 'yi', 'yo', 'diq', 'zea',
- 'zh', 'zh-tw', 'zh-cn', 'zh-classical', 'zh-yue', 'bat-smg',
- ]
-
- self.interwiki_putfirst = {
- 'be-tarask': self.alphabetic,
- 'en': self.alphabetic,
- 'et': self.alphabetic_revised,
- 'fi': self.alphabetic_revised,
- 'fiu-vro': self.alphabetic_revised,
- 'fy': self.fyinterwiki,
- 'he': ['en'],
- 'hu': ['en'],
- 'lb': self.alphabetic,
- 'mk': self.alphabetic,
- 'ms': self.alphabetic_revised,
- 'nds': ['nds-nl'],
- 'nds-nl': ['nds'],
- 'nn': ['no', 'sv', 'da'] + self.alphabetic,
- 'no': self.alphabetic,
- 'nv': ['en', 'es'] + self.alphabetic,
- 'pdc': ['de', 'en'],
- 'pl': self.alphabetic,
- 'simple': self.alphabetic,
- 'sr': self.alphabetic_sr,
- 'sv': self.alphabetic,
- 'te': ['en', 'hi', 'kn', 'ta', 'ml'],
- 'ur': ['ar', 'fa', 'en'] + self.alphabetic,
- 'vi': self.alphabetic_revised,
- 'yi': ['en', 'he', 'de']
- }
-
# Languages that used to be coded in iso-8859-1
self.latin1old = [
'de', 'en', 'et', 'es', 'ia', 'la', 'af', 'cs', 'fr', 'pt', 'sl',
diff --git a/pywikibot/families/wikiquote_family.py b/pywikibot/families/wikiquote_family.py
index fc50f85..4992260 100644
--- a/pywikibot/families/wikiquote_family.py
+++ b/pywikibot/families/wikiquote_family.py
@@ -88,23 +88,6 @@
'wo', 'zh',
]
- # Which languages have a special order for putting interlanguage links,
- # and what order is it? If a language is not in interwiki_putfirst,
- # alphabetical order on language code is used. For languages that are in
- # interwiki_putfirst, interwiki_putfirst is checked first, and
- # languages are put in the order given there. All other languages are
- # put after those, in code-alphabetical order.
- self.interwiki_putfirst = {
- 'en': self.alphabetic,
- 'fi': self.alphabetic,
- 'fr': self.alphabetic,
- 'he': ['en'],
- 'hu': ['en'],
- 'pl': self.alphabetic,
- 'simple': self.alphabetic,
- 'pt': self.alphabetic,
- }
-
# Subpages for documentation.
# TODO: List is incomplete, to be completed for missing languages.
self.doc_subpages = {
diff --git a/pywikibot/families/wikisource_family.py b/pywikibot/families/wikisource_family.py
index 4a01b54..ead1392 100644
--- a/pywikibot/families/wikisource_family.py
+++ b/pywikibot/families/wikisource_family.py
@@ -45,22 +45,6 @@
'ca', 'el', 'fa', 'it', 'ko', 'no', 'pl', 'vi', 'zh',
]
- # Which languages have a special order for putting interlanguage links,
- # and what order is it? If a language is not in interwiki_putfirst,
- # alphabetical order on language code is used. For languages that are in
- # interwiki_putfirst, interwiki_putfirst is checked first, and
- # languages are put in the order given there. All other languages are
- # put after those, in code-alphabetical order.
- self.interwiki_putfirst = {
- 'en': self.alphabetic,
- 'fi': self.alphabetic,
- 'fr': self.alphabetic,
- 'he': ['en'],
- 'hu': ['en'],
- 'pl': self.alphabetic,
- 'simple': self.alphabetic
- }
-
self.authornamespaces = {
'_default': [0],
'ar': [102],
--
To view, visit https://gerrit.wikimedia.org/r/271742
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I79ccd6b82f341b424cb7d7b43a642d1b62ff0ca9
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Russell Blau <russblau(a)imapmail.org>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Improve fixArabicLetters, add tests
......................................................................
Improve fixArabicLetters, add tests
- Fixed bugs related to python3.
- Corrected use of replaceExcept.
- Added two tests, one for German Wikipedia, one for Persian Wikipedia.
Signed-off-by: xqt <info(a)gno.de>
Change-Id: I421a1f9d2a7ff89584b7b8403b29245402f6cf86
---
M pywikibot/cosmetic_changes.py
M tests/cosmetic_changes_tests.py
2 files changed, 25 insertions(+), 4 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/cosmetic_changes.py b/pywikibot/cosmetic_changes.py
index 7fedee0..bf16474 100755
--- a/pywikibot/cosmetic_changes.py
+++ b/pywikibot/cosmetic_changes.py
@@ -50,7 +50,7 @@
"""
#
# (C) xqt, 2009-2015
-# (C) Pywikibot team, 2006-2015
+# (C) Pywikibot team, 2006-2016
#
# Distributed under the terms of the MIT license.
#
@@ -854,7 +854,7 @@
def fixArabicLetters(self, text):
if self.site.code not in ['ckb', 'fa']:
- return
+ return text
exceptions = [
'gallery',
'file',
@@ -880,11 +880,11 @@
faChrs = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیةيك' + digits['fa']
new = digits.pop(self.site.code)
# This only works if there are only two items in digits dict
- old = digits[digits.keys()[0]]
+ old = digits[list(digits.keys())[0]]
# not to let bot edits in latin content
exceptions.append(re.compile(u"[^%(fa)s] *?\"*? *?, *?[^%(fa)s]"
% {'fa': faChrs}))
- text = textlib.replaceExcept(text, u',', u'،', exceptions)
+ text = textlib.replaceExcept(text, ',', '،', exceptions, site=self.site)
if self.site.code == 'ckb':
text = textlib.replaceExcept(text,
'\u0647([.\u060c_<\\]\\s])',
diff --git a/tests/cosmetic_changes_tests.py b/tests/cosmetic_changes_tests.py
index cf8b7ae..80a0595 100644
--- a/tests/cosmetic_changes_tests.py
+++ b/tests/cosmetic_changes_tests.py
@@ -214,6 +214,12 @@
self.assertEqual('42 °C',
self.cct.fixTypo('42 ºC'))
+ def test_fixArabicLetters(self):
+ """Test fixArabicLetters."""
+ text = '1234,كىي'
+ # fixArabicLetters must not change text when site is not fa or ckb
+ self.assertEqual(text, self.cct.fixArabicLetters(text))
+
class TestLiveCosmeticChanges(TestCosmeticChanges):
@@ -287,6 +293,21 @@
self.cct.replaceDeprecatedTemplates('{{Quelle|Test}}'))
+class TestCosmeticChangesPersian(TestCosmeticChanges):
+
+ """Test cosmetic changes methods in Persian Wikipedia."""
+
+ family = 'wikipedia'
+ code = 'fa'
+
+ def test_fixArabicLetters(self):
+ """Test fixArabicLetters."""
+ self.assertEqual(self.cct.fixArabicLetters('A,b,ا,۴,'),
+ 'A,b،ا،۴،')
+ self.assertEqual(self.cct.fixArabicLetters('كي'),
+ 'کی')
+ # Once numbering fixes are enabled we can add tests.
+
if __name__ == '__main__':
try:
unittest.main()
--
To view, visit https://gerrit.wikimedia.org/r/249114
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I421a1f9d2a7ff89584b7b8403b29245402f6cf86
Gerrit-PatchSet: 3
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Ebrahim <ebrahim(a)gnu.org>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Add math test to wikibase_tests.py
......................................................................
Add math test to wikibase_tests.py
A follow-up to Ia7345072a1be00920dac37edd15204137222e6a8 now that
there are math properties on Wikidata.
Change-Id: I11608ff50d7cf63c8a0bb994983b16f0a6e17d9f
---
M tests/wikibase_tests.py
1 file changed, 8 insertions(+), 0 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index 4ae1542..2c841ba 100644
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -661,6 +661,14 @@
claim.setTarget(target)
self.assertEqual(claim.target, target)
+ def test_set_math(self):
+ """Test setting claim of math type."""
+ wikidata = self.get_repo()
+ claim = pywikibot.Claim(wikidata, 'P2535')
+ self.assertEqual(claim.type, 'math')
+ claim.setTarget('a^2 + b^2 = c^2')
+ self.assertEqual(claim.target, 'a^2 + b^2 = c^2')
+
def test_set_date(self):
"""Test setting claim of time type."""
wikidata = self.get_repo()
--
To view, visit https://gerrit.wikimedia.org/r/270988
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I11608ff50d7cf63c8a0bb994983b16f0a6e17d9f
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Lokal Profil <lokal.profil(a)gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: pwb.py: make sure pywikibot is correctly loaded before starting a script
......................................................................
pwb.py: make sure pywikibot is correctly loaded before starting a script
generate_user_files.py will load pywikibot with PYWIKIBOT2_NO_USER_CONFIG=2,
which works correctly, but will overwrite command line arguments (pywikibot.argvu).
This makes sure pywikibot is fully loaded before we try to change argv/argvu, by setting
PYWIKIBOT2_NO_USER_CONFIG=2 ourselves if no user-config.py is found.
In addition, add the missing argvu parameter to generate_user_files.py.
Bug: T126880
Change-Id: I0f84e5b739942154f8fe164b47d19cfac47266c0
---
M pwb.py
1 file changed, 8 insertions(+), 5 deletions(-)
Approvals:
Mpaa: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pwb.py b/pwb.py
index fe2eeec..0c31b26 100755
--- a/pwb.py
+++ b/pwb.py
@@ -64,9 +64,10 @@
try:
import pywikibot # noqa
pwb = pywikibot
- except RuntimeError:
- pwb = lambda: None
- pwb.argvu = []
+ except RuntimeError: # no user-config.py provided
+ os.environ['PYWIKIBOT2_NO_USER_CONFIG'] = '2'
+ import pywikibot # noqa
+ pwb = pywikibot
def run_python_file(filename, argv, argvu, package=None):
@@ -206,11 +207,13 @@
except RuntimeError as err:
# user-config.py to be created
print("NOTE: 'user-config.py' was not found!")
- if filename is not None and not filename.startswith('generate_'):
+ if not filename.startswith('generate_'):
print("Please follow the prompts to create it:")
run_python_file('generate_user_files.py',
['generate_user_files.py'],
- [])
+ [u'generate_user_files.py'])
+ # because we have loaded pywikibot without user-config.py loaded, we need to re-start
+ # the entire process. Ask the user to do so.
sys.exit(1)
--
To view, visit https://gerrit.wikimedia.org/r/270641
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I0f84e5b739942154f8fe164b47d19cfac47266c0
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: 2.0
Gerrit-Owner: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: pwb.py: make sure pywikibot is correctly loaded before starting a script
......................................................................
pwb.py: make sure pywikibot is correctly loaded before starting a script
generate_user_files.py will load pywikibot with PYWIKIBOT2_NO_USER_CONFIG=2,
which works correctly, but will overwrite command line arguments (pywikibot.argvu).
This makes sure pywikibot is fully loaded before we try to change argv/argvu, by setting
PYWIKIBOT2_NO_USER_CONFIG=2 ourselves if no user-config.py is found.
In addition, add the missing argvu parameter to generate_user_files.py.
Bug: T126880
Change-Id: I0f84e5b739942154f8fe164b47d19cfac47266c0
---
M pwb.py
1 file changed, 6 insertions(+), 3 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pwb.py b/pwb.py
index a630c5f..395019e 100755
--- a/pwb.py
+++ b/pwb.py
@@ -77,8 +77,9 @@
except RuntimeError:
remove_modules()
- pwb = lambda: None # noqa: E731
- pwb.argvu = []
+ os.environ['PYWIKIBOT2_NO_USER_CONFIG'] = '2'
+ import pywikibot # noqa
+ pwb = pywikibot
def run_python_file(filename, argv, argvu, package=None):
@@ -191,7 +192,9 @@
print("Please follow the prompts to create it:")
run_python_file('generate_user_files.py',
['generate_user_files.py'],
- [])
+ ['generate_user_files.py'])
+ # because we have loaded pywikibot without user-config.py loaded, we need to re-start
+ # the entire process. Ask the user to do so.
sys.exit(1)
--
To view, visit https://gerrit.wikimedia.org/r/270642
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I0f84e5b739942154f8fe164b47d19cfac47266c0
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Block "wbcreateredirect" action when -simulate option is given
......................................................................
Block "wbcreateredirect" action when -simulate option is given
Bug: T126958
Change-Id: Ida658235189cb0ecc3f13ebee32214e2db0d1134
---
M pywikibot/data/api.py
1 file changed, 1 insertion(+), 0 deletions(-)
Approvals:
Ricordisamoa: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index c6f2f0c..0881e62 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -1438,6 +1438,7 @@
"wbsetaliases", "wblinktitles", "wbsetsitelink",
"wbcreateclaim", "wbremoveclaims", "wbsetclaimvalue",
"wbsetreference", "wbremovereferences", "wbsetclaim",
+ 'wbcreateredirect',
)
# Client side verification that the request is being performed
# by a logged in user, and warn if it isn't a config username.
--
To view, visit https://gerrit.wikimedia.org/r/270698
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ida658235189cb0ecc3f13ebee32214e2db0d1134
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Ricordisamoa <ricordisamoa(a)openmailbox.org>
Gerrit-Reviewer: jenkins-bot <>