Add GitHub Actions workflow to test R builds
This commit is contained in:
parent
83dfc554f2
commit
4597879d10
2 changed files with 201 additions and 1 deletions
31
test/get_platforms.py
Normal file
31
test/get_platforms.py
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import argparse
|
||||
import json
|
||||
import subprocess
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Print R-builds platforms as JSON.")
|
||||
parser.add_argument(
|
||||
'platforms',
|
||||
type=str,
|
||||
nargs='?',
|
||||
default='all',
|
||||
help='Comma-separated list of platforms. Specify "all" to use all platforms (the default).'
|
||||
)
|
||||
args = parser.parse_args()
|
||||
platforms = _get_platforms(which=args.platforms)
|
||||
print(json.dumps(platforms))
|
||||
|
||||
|
||||
def _get_platforms(which='all'):
|
||||
supported_platforms = subprocess.check_output(['make', 'print-platforms'], text=True)
|
||||
supported_platforms = supported_platforms.split()
|
||||
if which == 'all':
|
||||
return supported_platforms
|
||||
platforms = which.split(',')
|
||||
platforms = [p for p in platforms if p in supported_platforms]
|
||||
return platforms
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
67
test/get_r_versions.py
Normal file
67
test/get_r_versions.py
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
import argparse
|
||||
import json
|
||||
import re
|
||||
import urllib.request
|
||||
|
||||
VERSIONS_URL = 'https://cdn.rstudio.com/r/versions.json'
|
||||
|
||||
# Minimum R version for "all"
|
||||
MIN_ALL_VERSION = '3.1.0'
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Print R-builds R versions as JSON.")
|
||||
parser.add_argument(
|
||||
'versions',
|
||||
type=str,
|
||||
nargs='?',
|
||||
default='last-5',
|
||||
help="""Comma-separated list of R versions. Specify "last-N" to use the
|
||||
last N minor R versions, or "all" to use all minor R versions since R 3.1.
|
||||
Defaults to "last-5".
|
||||
"""
|
||||
)
|
||||
args = parser.parse_args()
|
||||
versions = _get_versions(which=args.versions)
|
||||
print(json.dumps(versions))
|
||||
|
||||
|
||||
def _get_versions(which='all'):
|
||||
supported_versions = sorted(_get_supported_versions(), reverse=True)
|
||||
|
||||
last_n_versions = None
|
||||
if which.startswith('last-'):
|
||||
last_n_versions = int(which.replace('last-', ''))
|
||||
elif which != 'all':
|
||||
versions = which.split(',')
|
||||
versions = [v for v in versions if v in supported_versions]
|
||||
return versions
|
||||
|
||||
versions = {}
|
||||
for ver in supported_versions:
|
||||
# Skip unreleased versions (e.g., devel, next)
|
||||
if not re.match(r'[\d.]', ver):
|
||||
continue
|
||||
if ver < MIN_ALL_VERSION:
|
||||
continue
|
||||
minor_ver = tuple(ver.split('.')[0:2])
|
||||
if minor_ver not in versions:
|
||||
versions[minor_ver] = ver
|
||||
versions = sorted(list(versions.values()), reverse=True)
|
||||
|
||||
if last_n_versions:
|
||||
return versions[0:last_n_versions]
|
||||
|
||||
return versions
|
||||
|
||||
|
||||
def _get_supported_versions():
|
||||
request = urllib.request.Request(VERSIONS_URL)
|
||||
response = urllib.request.urlopen(request)
|
||||
data = response.read()
|
||||
result = json.loads(data)
|
||||
return result['r_versions']
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Reference in a new issue