diff --git a/bin/update_constraints b/bin/update_constraints index 76952e46..28ba2077 100755 --- a/bin/update_constraints +++ b/bin/update_constraints @@ -1,12 +1,51 @@ -#!/bin/bash +#!/usr/bin/env python3 -cd "$(dirname "$0")" -cd .. +import os, subprocess, requests, configparser +from collections import namedtuple -export CUSTOM_COMPILE_COMMAND="bin/update_constraints" +os.chdir(os.path.dirname(__file__)) +os.chdir('..') -pip-compile \ - --allow-unsafe \ - --generate-hashes \ - --upgrade \ - cibuildwheel/resources/constraints.in +os.environ['CUSTOM_COMPILE_COMMAND'] = "bin/update_constraints" +subprocess.check_call([ + 'pip-compile', + '--allow-unsafe', + '--generate-hashes', + '--upgrade', + 'cibuildwheel/resources/constraints.in', +]) + +Image = namedtuple('Image', ['manylinux_version', 'arch']) + +images = [ + Image('manylinux1', 'x86_64'), Image('manylinux1', 'i686'), + Image('manylinux2010', 'x86_64'), Image('manylinux2010', 'i686'), + Image('manylinux2014', 'x86_64'), Image('manylinux2014', 'i686'), +] + +config = configparser.ConfigParser() + +for image in images: + repository_name = '{}_{}'.format(image.manylinux_version, image.arch) + quay_api_url = 'https://quay.io/api/v1/repository/pypa/{}?includeTags=true'.format(repository_name) + repo_info = requests.get(quay_api_url).json() + tags_dict = repo_info['tags'] + + latest_tag = tags_dict.pop('latest') + + # find the tag whose manifest matches 'latest' + tag_name = next( + name + for (name, info) in tags_dict.items() + if info['manifest_digest'] == latest_tag['manifest_digest'] + ) + + image_name = 'quay.io/pypa/{}_{}:{}'.format(image.manylinux_version, image.arch, tag_name) + + if not config.has_section(image.manylinux_version): + config[image.manylinux_version] = {} + + config[image.manylinux_version][image.arch] = image_name + +with open('cibuildwheel/resources/pinned_docker_images.cfg', 'w') as f: + config.write(f) diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg new file mode 100644 index 00000000..9caae9e8 --- /dev/null +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -0,0 +1,12 @@ +[manylinux1] +x86_64 = quay.io/pypa/manylinux1_x86_64:2020-01-31-d8fa357 +i686 = quay.io/pypa/manylinux1_i686:2020-01-31-d8fa357 + +[manylinux2010] +x86_64 = quay.io/pypa/manylinux2010_x86_64:2020-01-31-046f791 +i686 = quay.io/pypa/manylinux2010_i686:2020-01-31-046f791 + +[manylinux2014] +x86_64 = quay.io/pypa/manylinux2014_x86_64:2020-01-31-3350900 +i686 = quay.io/pypa/manylinux2014_i686:2020-01-31-3350900 + diff --git a/requirements-dev.txt b/requirements-dev.txt index 31c8f086..df361eba 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,4 +3,4 @@ pytest mkdocs==1.0.4 pip-tools - +requests