#!/usr/bin/env python3 import sys import urllib.parse import urllib.request import re from bs4 import BeautifulSoup, SoupStrainer def validate_url(url): urllib.request.urlopen(url) def get_image_url(page, base_url, rex_str): rex = re.compile(rex_str) url = '' soup = BeautifulSoup(page, "html.parser", parse_only=SoupStrainer("a")) for line in soup.find_all('a', href=True): s = rex.search(line['href']) if s: url = base_url + line['href'] break return url def get_base_url(url, job_url): f = urllib.request.urlopen(job_url + "lastSuccessfulBuild/buildNumber") last_build = int(f.read().decode("utf-8")) url = '%s/%d/' % (url, last_build) f = urllib.request.urlopen(url) page = f.read().decode("utf-8") base_url_p = urllib.parse.urlparse(url) base_url = "%s://%s" % (base_url_p.scheme, base_url_p.netloc) return (page, base_url) def main(url='https://snapshots.linaro.org/member-builds/qcomlt/testimages/qcom-armv8a/', job_url='https://ci.linaro.org/job/lt-qcom-linux-testimages/', output='output.log'): (page, base_url) = get_base_url(url, job_url) ramdisk_url = get_image_url(page, base_url, 'initramfs-test-image-.*\.rootfs\.cpio\.gz$') validate_url(ramdisk_url) rootfs_url = get_image_url(page, base_url, 'rpb-console-image-test-.*\.rootfs\.ext4\.gz$') validate_url(rootfs_url) print('RAMDISK_URL=%s' % ramdisk_url) print('ROOTFS_URL=%s' % rootfs_url) rootfs_desktop_url = get_image_url(page, base_url, 'rpb-desktop-image-test-.*\.rootfs\.ext4\.gz$') validate_url(rootfs_desktop_url) print('ROOTFS_DESKTOP_URL=%s' % rootfs_desktop_url) print('Writting output to %s' % output) with open(output, 'w') as f: f.write("RAMDISK_URL=" + ramdisk_url + '\n') f.write("ROOTFS_URL=" + rootfs_url + '\n') f.write("ROOTFS_DESKTOP_URL=" + rootfs_desktop_url + '\n') if __name__ == "__main__": main(*sys.argv[1:])