From 2441fe9c1443fbdcc9bfc50cca7f7a113ae2e545 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Thu, 6 Feb 2020 09:38:08 -0500 Subject: [PATCH] tox.ini: Restructure docker image:tag construction, add multiarch for Linux Docker --- tox.ini | 116 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 71 insertions(+), 45 deletions(-) diff --git a/tox.ini b/tox.ini index 7089e326ba2..7fd961f8550 100644 --- a/tox.ini +++ b/tox.ini @@ -57,79 +57,102 @@ setenv = debian: EXTRA_CONFIGURE_ARGS=--with-system-m4ri=no --with-system-m4rie=no --with-system-givaro=no fedora: EXTRA_CONFIGURE_ARGS=--with-system-m4ri=no --with-system-m4rie=no # + # default tag is "latest" + # + docker: BASE_TAG=latest + # # https://hub.docker.com/_/ubuntu?tab=description # as of 2020-01, latest=bionic=18.04, eoan=rolling=19.10, focal=devel=20.04 # ubuntu: SYSTEM=debian - ubuntu-trusty: BASE_IMAGE=ubuntu:trusty + ubuntu: BASE_IMAGE=ubuntu + ubuntu-trusty: BASE_TAG=trusty ubuntu-trusty: IGNORE_MISSING_SYSTEM_PACKAGES=yes - ubuntu-xenial: BASE_IMAGE=ubuntu:xenial + ubuntu-xenial: BASE_TAG=xenial ubuntu-xenial: IGNORE_MISSING_SYSTEM_PACKAGES=yes - ubuntu-bionic: BASE_IMAGE=ubuntu:bionic - ubuntu-latest: BASE_IMAGE=ubuntu:latest - ubuntu-eoan: BASE_IMAGE=ubuntu:eoan - ubuntu-rolling: BASE_IMAGE=ubuntu:rolling - ubuntu-focal: BASE_IMAGE=ubuntu:focal - ubuntu-devel: BASE_IMAGE=ubuntu:devel + ubuntu-bionic: BASE_TAG=bionic + ubuntu-latest: BASE_TAG=latest + ubuntu-eoan: BASE_TAG=eoan + ubuntu-rolling: BASE_TAG=rolling + ubuntu-focal: BASE_TAG=focal + ubuntu-devel: BASE_TAG=devel # # https://hub.docker.com/_/debian # - debian: SYSTEM=debian - debian-jessie: BASE_IMAGE=debian:jessie - debian-jessie: IGNORE_MISSING_SYSTEM_PACKAGES=yes - debian-stretch: BASE_IMAGE=debian:stretch - debian-buster: BASE_IMAGE=debian:buster - debian-bullseye: BASE_IMAGE=debian:bullseye - debian-sid: BASE_IMAGE=debian:sid + debian: SYSTEM=debian + debian: BASE_IMAGE=debian + debian-jessie: BASE_TAG=jessie + debian-jessie: IGNORE_MISSING_SYSTEM_PACKAGES=yes + debian-stretch: BASE_TAG=stretch + debian-buster: BASE_TAG=buster + debian-bullseye: BASE_TAG=bullseye + debian-sid: BASE_TAG=sid # # https://hub.docker.com/_/fedora # - fedora: SYSTEM=fedora - fedora-26: BASE_IMAGE=fedora:26 - fedora-26: IGNORE_MISSING_SYSTEM_PACKAGES=yes - fedora-27: BASE_IMAGE=fedora:27 - fedora-28: BASE_IMAGE=fedora:28 - fedora-29: BASE_IMAGE=fedora:29 - fedora-30: BASE_IMAGE=fedora:30 - fedora-31: BASE_IMAGE=fedora:31 # latest - fedora-32: BASE_IMAGE=fedora:32 # rawhide + fedora: SYSTEM=fedora + fedora: BASE_IMAGE=fedora + fedora-26: BASE_TAG=26 + fedora-26: IGNORE_MISSING_SYSTEM_PACKAGES=yes + fedora-27: BASE_TAG=27 + fedora-28: BASE_TAG=28 + fedora-29: BASE_TAG=29 + fedora-30: BASE_TAG=30 + fedora-31: BASE_TAG=31 # latest + fedora-32: BASE_TAG=32 # rawhide # # https://hub.docker.com/_/centos # - centos: SYSTEM=fedora - centos: IGNORE_MISSING_SYSTEM_PACKAGES=yes - #centos-6: BASE_IMAGE=centos:centos6 # only has autoconf 2.63 -- too old for bootstrap - centos-7: BASE_IMAGE=centos:centos7 - centos-8: BASE_IMAGE=centos:centos8 + centos: SYSTEM=fedora + centos: BASE_IMAGE=centos + centos: IGNORE_MISSING_SYSTEM_PACKAGES=yes + #centos-6: BASE_TAG=centos6 # only has autoconf 2.63 -- too old for bootstrap + centos-7: BASE_TAG=centos7 + centos-8: BASE_TAG=centos8 # # https://hub.docker.com/_/archlinux/ # - archlinux: SYSTEM=arch - archlinux-latest: BASE_IMAGE=archlinux:latest + archlinux: SYSTEM=arch + archlinux: BASE_IMAGE=archlinux # # https://hub.docker.com/r/continuumio # conda: SYSTEM=conda - conda-forge: BASE_IMAGE=continuumio/miniconda3:latest + conda-forge: BASE_IMAGE=continuumio/miniconda3 conda-forge: CONDARC=condarc.yml - conda-anaconda3: BASE_IMAGE=continuumio/anaconda3:latest + conda-anaconda3: BASE_IMAGE=continuumio/anaconda3 conda-anaconda3: CONDARC=/dev/null conda-anaconda3: IGNORE_MISSING_SYSTEM_PACKAGES=yes # - # Other architectures + # Other architectures: + # + # Many docker images for another architecture are named the same, in the arch prefix. + # All work for Docker on Mac; but only i386 works for Linux Docker. + # + arm32v5: ARCH_IMAGE_PREFIX=arm32v5/ + arm32v6: ARCH_IMAGE_PREFIX=arm32v6/ + arm32v7: ARCH_IMAGE_PREFIX=arm32v7/ + arm64v8: ARCH_IMAGE_PREFIX=arm64v8/ + i386: ARCH_IMAGE_PREFIX=i386/ + ppc64le: ARCH_IMAGE_PREFIX=ppc64le/ + s390x: ARCH_IMAGE_PREFIX=s390x/ + # + # For Linux Docker, we need to work with known multiarch images. + # https://www.ecliptik.com/Cross-Building-and-Running-Multi-Arch-Docker-Images/ + # (or we would need to change our tests from "docker build" to "docker run") # - ARCH_PREFIX= - arm32v5: ARCH_PREFIX=arm32v5/ - arm32v6: ARCH_PREFIX=arm32v6/ - arm32v7: ARCH_PREFIX=arm32v7/ - arm64v8: ARCH_PREFIX=arm64v8/ - i386: ARCH_PREFIX=i386/ - ppc64le: ARCH_PREFIX=ppc64le/ - s390x: ARCH_PREFIX=s390x/ + # https://hub.docker.com/r/multiarch/ubuntu-core: + # multiarch/ubuntu-core:arm64-bionic, multiarch/ubuntu-core:armhf-bionic + ubuntu-arm64: BASE_IMAGE=ubuntu-core + ubuntu-arm64: ARCH_IMAGE_PREFIX=multiarch/ + ubuntu-arm64: ARCH_TAG_PREFIX=arm64- + ubuntu-armhf: BASE_IMAGE=ubuntu-core + ubuntu-armhf: ARCH_IMAGE_PREFIX=multiarch/ + ubuntu-armhf: ARCH_TAG_PREFIX=armhf- # - # Many docker images for another architecture are named the same, in the prefix + # Resulting full image:tag name # - docker: ARCH_BASE_IMAGE={env:ARCH_PREFIX}{env:BASE_IMAGE} + docker: FULL_BASE_IMAGE_AND_TAG={env:ARCH_IMAGE_PREFIX:}{env:BASE_IMAGE}:{env:ARCH_TAG_PREFIX:}{env:BASE_TAG} ### ### "local" envs ### @@ -145,9 +168,12 @@ whitelist_externals = docker commands = docker: bash -c 'build/bin/write-dockerfile.sh {env:SYSTEM} "{env:TYPE_PATTERN:}" {env:WITH_SYSTEM_SPKG} {env:IGNORE_MISSING_SYSTEM_PACKAGES} > {envdir}/Dockerfile' + # From https://hub.docker.com/r/multiarch/ubuntu-core/ + # configure binfmt-support on the Docker host (works locally or remotely, i.e: using boot2docker) + docker-{arm64,armhf}: docker run --rm --privileged multiarch/qemu-user-static:register --reset docker: docker build . -f {envdir}/Dockerfile \ docker: --build-arg EXTRA_CONFIGURE_ARGS="{env:EXTRA_CONFIGURE_ARGS:}" \ - docker: --build-arg BASE_IMAGE={env:ARCH_BASE_IMAGE} \ + docker: --build-arg BASE_IMAGE={env:FULL_BASE_IMAGE_AND_TAG} \ docker-conda: --build-arg USE_CONDARC="{env:CONDARC}" \ docker: {env:EXTRA_DOCKER_BUILD_ARGS:}