If looking for latest MRAN URL try earlier snapshots too

pull/851/head
Simon Li 2020-02-15 16:07:48 +00:00
rodzic 8d490cf9d8
commit 5f3fcfcf08
1 zmienionych plików z 27 dodań i 2 usunięć

Wyświetl plik

@ -1,6 +1,7 @@
import re
import os
import datetime
import requests
from distutils.version import LooseVersion as V
@ -135,8 +136,9 @@ class RBuildPack(PythonBuildPack):
# no R snapshot date set through runtime.txt
# set the R runtime to the latest date that is guaranteed to
# be on MRAN across timezones
self._checkpoint_date = datetime.date.today() - datetime.timedelta(
days=2
two_days_ago = datetime.date.today() - datetime.timedelta(days=2)
self._checkpoint_date = self._get_latest_working_mran_date(
two_days_ago, 3
)
self._runtime = "r-{}".format(str(self._checkpoint_date))
return True
@ -186,6 +188,29 @@ class RBuildPack(PythonBuildPack):
return super().get_packages().union(packages)
def _get_latest_working_mran_date(self, startdate, max_prior):
"""
Look for a working MRAN snapshot
Starts from `startdate` and tries up to `max_prior` previous days.
Raises `requests.HTTPError` with the last tried URL if no working snapshot found.
"""
for days in range(0, max_prior + 1):
test_date = startdate - datetime.timedelta(days=days)
mran_url = "https://mran.microsoft.com/snapshot/{}".format(
test_date.isoformat()
)
r = requests.head(mran_url)
if r.ok:
return test_date
self.log.warning(
"Failed to get MRAN snapshot URL %s: %s %s",
mran_url,
r.status_code,
r.reason,
)
r.raise_for_status()
def get_build_scripts(self):
"""
Return series of build-steps common to all R repositories