<div dir="ltr">The UNH lab no longer runs tests for this LTS version. It could be removed.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 4, 2023 at 9:58 AM Aaron Conole <<a href="mailto:aconole@redhat.com">aconole@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Adam Hassick <<a href="mailto:ahassick@iol.unh.edu" target="_blank">ahassick@iol.unh.edu</a>> writes:<br>
<br>
> From: Owen Hilyard <<a href="mailto:ohilyard@iol.unh.edu" target="_blank">ohilyard@iol.unh.edu</a>><br>
><br>
> Adds a yaml file used to define what containers should be built, what<br>
> packages the containers should have, what platforms to build for and how they<br>
> should be tagged.<br>
><br>
> Also adds a JSON schema, which can be used to validate that the<br>
> inventory file is well-formed.<br>
><br>
> Signed-off-by: Owen Hilyard <<a href="mailto:ohilyard@iol.unh.edu" target="_blank">ohilyard@iol.unh.edu</a>><br>
> Signed-off-by: Adam Hassick <<a href="mailto:ahassick@iol.unh.edu" target="_blank">ahassick@iol.unh.edu</a>><br>
> ---<br>
> containers/template_engine/inventory.yaml | 470 ++++++++++++++++++<br>
> .../template_engine/inventory_schema.json | 221 ++++++++<br>
> 2 files changed, 691 insertions(+)<br>
> create mode 100644 containers/template_engine/inventory.yaml<br>
> create mode 100644 containers/template_engine/inventory_schema.json<br>
><br>
> diff --git a/containers/template_engine/inventory.yaml b/containers/template_engine/inventory.yaml<br>
> new file mode 100644<br>
> index 0000000..31dbdb6<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/inventory.yaml<br>
> @@ -0,0 +1,470 @@<br>
> +# SPDX-License-Identifier: BSD-3-Clause<br>
> +# Copyright (c) 2022 University of New Hampshire<br>
> +---<br>
> +abi:<br>
> + # versions should also include the abi versions for all stable ABIs.<br>
> + versions:<br>
> + # - dpdk_version: # LTS - 3<br>
> + # major: 20<br>
> + # minor: 11<br>
> + # revision: 0<br>
> + # git_tag: "20.11"<br>
> + # abi_version:<br>
> + # major: 21<br>
> + # minor: 0<br>
<br>
Why is this commented out?<br>
<br>
> + - dpdk_version: # LTS - 2<br>
> + major: 21<br>
> + minor: 11<br>
> + revision: 0<br>
> + git_tag: "21.11"<br>
> + abi_version:<br>
> + major: 22<br>
> + minor: 0<br>
> + - dpdk_version:<br>
> + major: 22 # LTS - 1<br>
> + minor: 11<br>
> + revision: 1<br>
> + git_tag: "tags/v22.11.1"<br>
> + abi_version:<br>
> + major: 23<br>
> + minor: 10 # .xml comparison<br>
> + - dpdk_version:<br>
> + major: 22 # LTS<br>
> + minor: 11<br>
> + revision: 1<br>
> + git_tag: "tags/v22.11.1"<br>
> + abi_version:<br>
> + major: 23<br>
> + minor: 11 # .so comparison<br>
> +<br>
> +dockerfiles:<br>
> + groups:<br>
> + all:<br>
> + package_manager_command: "NO_INSTALL_COMMAND_SET"<br>
> + parent: "NONE"<br>
> + packages:<br>
> + - gcc<br>
> + - make<br>
> + - git<br>
> + - sudo<br>
> + - curl<br>
> + - automake<br>
> + - autoconf<br>
> + - flex<br>
> + - bison<br>
> + - bc<br>
> + rpm:<br>
> + parent: "all"<br>
> + package_manager_command: yum install -y<br>
> + packages:<br>
> + - diffutils<br>
> + - pkg-config<br>
> + - python3<br>
> + - python3-pip<br>
> + - librdmacm<br>
> + - rdma-core-devel<br>
> + - libmnl-devel<br>
> + - ccache<br>
> + - zip<br>
> + - autoconf<br>
> + - libbpf-devel<br>
> + redhat_family:<br>
> + parent: "rpm"<br>
> + packages: []<br>
> + fedora:<br>
> + parent: "redhat_family"<br>
> + packages:<br>
> + - python3-pyelftools<br>
> + - zip<br>
> + - clang<br>
> + - ninja-build<br>
> + - elfutils-libelf-devel<br>
> + - jansson-devel<br>
> + - libatomic<br>
> + - libpcap-devel<br>
> + - numactl-devel<br>
> + - findutils<br>
> + - libtool<br>
> + - elfutils-devel<br>
> + - libxml2-devel<br>
> + - libabigail<br>
> + - openssl-devel<br>
> + fedora_coverity:<br>
> + parent: fedora<br>
> + packages: []<br>
> + fedora_clang:<br>
> + parent: fedora<br>
> + packages: []<br>
> + centos8:<br>
> + parent: "redhat_family"<br>
> + packages:<br>
> + - elfutils-libelf-devel<br>
> + - jansson-devel<br>
> + - libatomic<br>
> + - libpcap-devel<br>
> + - numactl-devel<br>
> + - libabigail<br>
> + - openssl-devel<br>
> + centos9:<br>
> + parent: "redhat_family"<br>
> + package_manager_command: "yum install --allowerasing -y"<br>
> + packages:<br>
> + - elfutils-libelf-devel<br>
> + - jansson-devel<br>
> + - libatomic<br>
> + - libpcap-devel<br>
> + - numactl-devel<br>
> + - libtool<br>
> + - g++<br>
> + - elfutils-devel<br>
> + - libxml2-devel<br>
> + - openssl-devel<br>
> + rhel:<br>
> + parent: "redhat_family"<br>
> + package_manager_command: "yum install -y"<br>
> + packages:<br>
> + - elfutils-libelf-devel<br>
> + - jansson-devel<br>
> + - libatomic<br>
> + - libpcap-devel<br>
> + - numactl-devel<br>
> + - openssl-devel<br>
> + - libabigail<br>
> + rhel7:<br>
> + parent: "rhel"<br>
> + packages:<br>
> + - ninja-build<br>
> + rhel8:<br>
> + parent: "rhel"<br>
> + package_manager_command: "yum --allowerasing install -y"<br>
> + packages:<br>
> + - ninja-build<br>
> + - libxml2-devel<br>
> + rhel9:<br>
> + parent: "rhel"<br>
> + package_manager_command: "yum --allowerasing install -y"<br>
> + packages:<br>
> + - libxml2-devel<br>
> + opensuse:<br>
> + parent: "rpm"<br>
> + package_manager_command: "zypper install -y"<br>
> + packages:<br>
> + - python3-pyelftools<br>
> + - ninja<br>
> + - gzip<br>
> + - libelf-devel<br>
> + - libjansson-devel<br>
> + - librdmacm1<br>
> + - libatomic1<br>
> + - libnuma-devel<br>
> + - libabigail-tools<br>
> + - tar<br>
> + - openssl-devel<br>
> + alpine:<br>
> + parent: "all"<br>
> + package_manager_command: "apk add"<br>
> + packages:<br>
> + - bsd-compat-headers<br>
> + - ccache<br>
> + - jansson-dev<br>
> + - libarchive-dev<br>
> + - libbpf-dev<br>
> + - libc-dev<br>
> + - libpcap-dev<br>
> + - linux-headers<br>
> + - ninja<br>
> + - numactl-dev<br>
> + - openssl-dev<br>
> + - py3-pip<br>
> + - py3-elftools<br>
> + - py3-setuptools<br>
> + - py3-wheel<br>
> + - zlib-dev<br>
> + - python3<br>
> + - bash<br>
> + - zip<br>
> + - meson<br>
> + arch:<br>
> + parent: "all"<br>
> + package_manager_command: "pacman -Syu --noconfirm"<br>
> + packages:<br>
> + - glibc<br>
> + - cmake<br>
> + - ninja<br>
> + - pandoc<br>
> + - python<br>
> + - python-docutils<br>
> + - ethtool<br>
> + - file<br>
> + - fakeroot<br>
> + - pkg-config<br>
> + - numactl<br>
> + - elfutils<br>
> + - gawk<br>
> + - diffutils<br>
> + - python-pip<br>
> + - libabigail<br>
> + - openssl<br>
> + - libbpf<br>
> + debian:<br>
> + parent: "all"<br>
> + package_manager_command: "apt-get update && apt-get install --no-install-recommends -y"<br>
> + packages:<br>
> + - libnuma-dev<br>
> + - zip<br>
> + - librdmacm1<br>
> + - libcrypto++-dev<br>
> + - python3-pyelftools<br>
> + - libxml2-dev<br>
> + - libelf-dev<br>
> + - libpcap-dev<br>
> + - libjansson-dev<br>
> + - python3-setuptools<br>
> + - autoconf<br>
> + - pkg-config<br>
> + - libtool<br>
> + - ccache<br>
> + - libatomic1<br>
> + - python3-wheel<br>
> + - libdw-dev<br>
> + - rdma-core<br>
> + - ninja-build<br>
> + - automake<br>
> + - librdmacm-dev<br>
> + - libmnl-dev<br>
> + - python3-pip<br>
> + - build-essential<br>
> + - aspell-en<br>
> + - parallel<br>
> + - python3-grpcio<br>
> + - lcov<br>
> + - libbpf-dev<br>
> + - libssl-dev<br>
> + debian10:<br>
> + parent: "debian"<br>
> + packages: []<br>
> + debian11:<br>
> + parent: "debian"<br>
> + packages:<br>
> + - nasm<br>
> + debian11_arm_ipsec:<br>
> + parent: "debian11"<br>
> + packages: []<br>
> + ubuntu:<br>
> + parent: 'debian'<br>
> + packages: []<br>
> + ubuntu18.04:<br>
> + parent: "ubuntu"<br>
> + packages: []<br>
> + ubuntu20.04:<br>
> + parent: "ubuntu"<br>
> + packages:<br>
> + - python3-grpcio<br>
> + - lcov<br>
> + - jq<br>
> + - default-jre<br>
> + - nodejs<br>
> + ubuntu22.04:<br>
> + parent: "ubuntu"<br>
> + packages:<br>
> + - python3-grpcio<br>
> + - lcov<br>
> + - abigail-tools<br>
> + - jq<br>
> + ubuntu_cross: # x86 -> ARM<br>
> + parent: "ubuntu20.04"<br>
> + packages:<br>
> + - clang<br>
> + - llvm<br>
> + - llvm-dev<br>
> + - llvm-runtime<br>
> + - lld<br>
> + - gcc-aarch64-linux-gnu<br>
> + - libgcc-9-dev-arm64-cross<br>
> + - libatomic1-arm64-cross<br>
> + - libc6-dev-arm64-cross<br>
> + - pkg-config-aarch64-linux-gnu<br>
> + - dpkg-dev<br>
> + - gcc-arm-linux-gnueabihf<br>
> + - libc6-dev-armhf-cross<br>
> + - pkg-config-arm-linux-gnueabihf<br>
> + ubuntu_sve:<br>
> + parent: "ubuntu20.04"<br>
> + packages:<br>
> + - gcc-10<br>
> + targets:<br>
> + # Alpine<br>
> + - name: alpine_compile<br>
> + group: "alpine"<br>
> + base_image: alpine<br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + force_disable_abi: true<br>
> + minimum_dpdk_version:<br>
> + major: 22<br>
> + minor: 0<br>
> + revision: 0<br>
> + extra_information:<br>
> + amd64_environment_id: 45<br>
> + arm64_environment_id: 75<br>
> +<br>
> + # Arch<br>
> + - name: arch_compile<br>
> + group: "arch"<br>
> + base_image: archlinux:base<br>
> + platforms: [linux/amd64]<br>
> + extra_information:<br>
> + amd64_environment_id: 26<br>
> +<br>
> + - name: fedora37_compile<br>
> + group: "fedora"<br>
> + base_image: fedora:37<br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + extra_information:<br>
> + amd64_environment_id: 69<br>
> + arm64_environment_id: 70<br>
> +<br>
> + - name: fedora38_compile<br>
> + group: "fedora"<br>
> + base_image: fedora:38<br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + extra_information:<br>
> + amd64_environment_id: 71<br>
> + arm64_environment_id: 72<br>
> +<br>
> + - name: fedora38_clang<br>
> + group: "fedora_clang"<br>
> + base_image: fedora:38<br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + extra_information:<br>
> + amd64_environment_id: 73<br>
> + arm64_environment_id: 74<br>
> +<br>
> + - name: fedora37_coverity<br>
> + group: "fedora_coverity"<br>
> + base_image: fedora:37<br>
> + force_disable_abi: true<br>
> + requires_coverity: true<br>
> + platforms: [linux/amd64]<br>
> +<br>
> + # CentOs<br>
> + - name: centosstream8_compile<br>
> + group: "centos8"<br>
> + base_image: <a href="http://quay.io/centos/centos:stream8" rel="noreferrer" target="_blank">quay.io/centos/centos:stream8</a><br>
> + platforms: [linux/amd64]<br>
> + extra_information:<br>
> + amd64_environment_id: 39<br>
> +<br>
> + - name: centosstream9_compile<br>
> + group: "centos9"<br>
> + base_image: <a href="http://quay.io/centos/centos:stream9" rel="noreferrer" target="_blank">quay.io/centos/centos:stream9</a><br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + extra_information:<br>
> + amd64_environment_id: 53<br>
> + arm64_environment_id: 63<br>
> +<br>
> + # RHEL<br>
> + - name: rhel7_compile<br>
> + group: "rhel7"<br>
> + base_image: <a href="http://registry.access.redhat.com/ubi7/ubi" rel="noreferrer" target="_blank">registry.access.redhat.com/ubi7/ubi</a><br>
> + platforms: [linux/amd64]<br>
> + extra_information:<br>
> + amd64_environment_id: 36<br>
> +<br>
> + - name: rhel8_compile<br>
> + group: "rhel8"<br>
> + base_image: <a href="http://registry.access.redhat.com/ubi8/ubi" rel="noreferrer" target="_blank">registry.access.redhat.com/ubi8/ubi</a><br>
> + platforms: [linux/amd64]<br>
> + extra_information:<br>
> + amd64_environment_id: 37<br>
> +<br>
> + - name: rhel9_compile<br>
> + group: "rhel9"<br>
> + base_image: <a href="http://registry.access.redhat.com/ubi9/ubi" rel="noreferrer" target="_blank">registry.access.redhat.com/ubi9/ubi</a><br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + extra_information:<br>
> + amd64_environment_id: 76<br>
> + arm64_environment_id: 77<br>
> +<br>
> + # OpenSuse<br>
> + - name: opensuse-leap15_compile<br>
> + group: "opensuse"<br>
> + base_image: opensuse/leap:15<br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + extra_information:<br>
> + amd64_environment_id: 25<br>
> + arm64_environment_id: 67<br>
> +<br>
> + # Debian<br>
> + - name: debian10_compile # debian 10<br>
> + group: "debian10"<br>
> + base_image: "debian:buster"<br>
> + libabigail_revision: libabigail-2.2<br>
> + platforms: [linux/amd64]<br>
> + extra_information:<br>
> + amd64_environment_id: 52<br>
> +<br>
> + - name: debian11_compile # debian 11<br>
> + group: "debian11"<br>
> + base_image: "debian:bullseye"<br>
> + libabigail_revision: libabigail-2.2<br>
> + platforms:<br>
> + - linux/amd64<br>
> + - linux/arm64<br>
> + extra_information:<br>
> + amd64_environment_id: 51<br>
> + arm64_environment_id: 64<br>
> +<br>
> + # Ubuntu<br>
> + - name: ubuntu20.04_compile<br>
> + group: "ubuntu20.04"<br>
> + base_image: "ubuntu:20.04"<br>
> + platforms: [linux/amd64, linux/arm64]<br>
> + extra_tags:<br>
> + - $R/ubuntu20.04_libabigail:latest<br>
> + - $R/ubuntu20.04_libabigail:$T<br>
> + - $R/ubuntu20.04_spell-check:latest<br>
> + - $R/ubuntu20.04_spell-check:$T<br>
> + - $R/ubuntu20.04_sonarscanner:latest<br>
> + - $R/ubuntu20.04_sonarscanner:$T<br>
> + extra_information:<br>
> + amd64_environment_id: 38<br>
> + arm64_environment_id: 62<br>
> +<br>
> + # x86 -> ARM cross compile<br>
> + - name: ubuntu20.04_cross<br>
> + group: "ubuntu_cross"<br>
> + base_image: "ubuntu:20.04"<br>
> + platforms: [linux/amd64]<br>
> + cross_file: "config/arm/arm64_armv8_linux_gcc"<br>
> + extra_information:<br>
> + amd64_environment_id: 47<br>
> +<br>
> + # Also, x86 -> ARM cross compile (for SVE test)<br>
> + - name: ubuntu20.04_sve_compile<br>
> + group: "ubuntu_sve"<br>
> + base_image: "arm64v8/ubuntu:20.04"<br>
> + platforms: [linux/arm64]<br>
> + extra_information:<br>
> + arm64_environment_id: 46<br>
> +<br>
> + # TEMPORARY: This has the forked IPsec lib developed by ARM. This causes issues on older LTS versions of DPDK.<br>
> + # Once all supported and tested LTS versions no longer break when this lib is installed, recombine with debian11_compile.<br>
> + - name: debian11_arm_ipsec<br>
> + group: "debian11_arm_ipsec"<br>
> + base_image: "debian:bullseye"<br>
> + platforms: [linux/arm64]<br>
> + force_disable_abi: true<br>
> + extra_tags:<br>
> + - $R/debian11_zuc_compile:latest<br>
> + - $R/debian11_snow3g_compile:latest<br>
> + - $R/debian11_zuc_compile:$T<br>
> + - $R/debian11_snow3g_compile:$T<br>
> + extra_information:<br>
> + arm64_environment_id: 58<br>
> +<br>
> + - name: ubuntu22.04_compile<br>
> + group: "ubuntu22.04"<br>
> + base_image: "ubuntu:22.04"<br>
> + platforms: [linux/amd64]<br>
> + extra_information:<br>
> + amd64_environment_id: 54<br>
> diff --git a/containers/template_engine/inventory_schema.json b/containers/template_engine/inventory_schema.json<br>
> new file mode 100644<br>
> index 0000000..7b79e44<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/inventory_schema.json<br>
> @@ -0,0 +1,221 @@<br>
> +{<br>
> + "$schema": "<a href="https://json-schema.org/draft-07/schema" rel="noreferrer" target="_blank">https://json-schema.org/draft-07/schema</a>",<br>
> + "title": "dpdklab-ci container inventory schema",<br>
> + "$comment": "SPDX-License-Identifier: BSD-3-Clause\nCopyright (c) 2022 University of New Hampshire",<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "abi": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "versions": {<br>
> + "type": "array",<br>
> + "items": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "dpdk_version": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "major": {<br>
> + "type": "integer",<br>
> + "description": "The major version number (usually the year of release)"<br>
> + },<br>
> + "minor": {<br>
> + "type": "integer",<br>
> + "description": "The minor version number (usually the month of release)"<br>
> + },<br>
> + "revision": {<br>
> + "type": "integer",<br>
> + "description": "The revision version number. Starts at 0."<br>
> + },<br>
> + "git_tag": {<br>
> + "type": "string",<br>
> + "description": "The git tag to check out to get this ABI version"<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "major",<br>
> + "minor",<br>
> + "revision",<br>
> + "git_tag"<br>
> + ],<br>
> + "additionalProperties": false<br>
> + },<br>
> + "abi_version": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "major": {<br>
> + "type": "integer",<br>
> + "description": "The major version number (usually the year of release)"<br>
> + },<br>
> + "minor": {<br>
> + "type": "integer",<br>
> + "description": "The minor version number (usually the month of release)"<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "major",<br>
> + "minor"<br>
> + ],<br>
> + "additionalProperties": false<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "dpdk_version",<br>
> + "abi_version"<br>
> + ]<br>
> + },<br>
> + "minItems": 0<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "versions"<br>
> + ],<br>
> + "additionalProperties": false<br>
> + },<br>
> + "dockerfiles": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "groups": {<br>
> + "type": "object",<br>
> + "patternProperties": {<br>
> + "^[a-z][a-z_0-9\\.]+$": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "package_manager_command": {<br>
> + "type": "string",<br>
> + "description": "The command to install packages without user input."<br>
> + },<br>
> + "parent": {<br>
> + "type": "string",<br>
> + "description": "Which group to inherit from, or NONE if no parent exists"<br>
> + },<br>
> + "packages": {<br>
> + "type": "array",<br>
> + "description": "A list of package names to install",<br>
> + "items": {<br>
> + "type": "string"<br>
> + },<br>
> + "uniqueItems": true<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "parent",<br>
> + "packages"<br>
> + ],<br>
> + "additionalProperties": false<br>
> + }<br>
> + },<br>
> + "minProperties": 1<br>
> + },<br>
> + "targets": {<br>
> + "type": "array",<br>
> + "items": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "name": {<br>
> + "type": "string",<br>
> + "description": "The name of the docker container"<br>
> + },<br>
> + "group": {<br>
> + "type": "string",<br>
> + "description": "Which group the target is a member of"<br>
> + },<br>
> + "base_image": {<br>
> + "type": "string",<br>
> + "description": "The base docker image."<br>
> + },<br>
> + "platforms": {<br>
> + "type": "array",<br>
> + "description": "What platforms to build for",<br>
> + "items": {<br>
> + "type": "string",<br>
> + "enum": [<br>
> + "linux/amd64",<br>
> + "linux/arm64",<br>
> + "linux/riscv64",<br>
> + "linux/ppc64le",<br>
> + "linux/arm/v7",<br>
> + "linux/arm/v6"<br>
> + ]<br>
> + },<br>
> + "minItems": 1<br>
> + },<br>
> + "cross_file": {<br>
> + "type": "string",<br>
> + "description": "A cross file to compile meson with. If not present, meson's automatic behavior will be used."<br>
> + },<br>
> + "libabigail_revision": {<br>
> + "type": "string",<br>
> + "description": "A revision or branch of libabigail to check out before building for a given target."<br>
> + },<br>
> + "force_disable_abi": {<br>
> + "type": "boolean",<br>
> + "description": "Whether to forcibly disable ABI for this target. This should be used as a temporary measure until a fix can be created.",<br>
> + "default": "false"<br>
> + },<br>
> + "requires_coverity": {<br>
> + "type": "boolean",<br>
> + "description": "Whether this target requires the Coverity Scan binaries.",<br>
> + "default": "false"<br>
> + },<br>
> + "minimum_dpdk_version": {<br>
> + "type": "object",<br>
> + "properties": {<br>
> + "major": {<br>
> + "type": "integer",<br>
> + "description": "The major version number (usually the year of release)"<br>
> + },<br>
> + "minor": {<br>
> + "type": "integer",<br>
> + "description": "The minor version number (usually the month of release)"<br>
> + },<br>
> + "revision": {<br>
> + "type": "integer",<br>
> + "description": "The revision version number. Starts at 0."<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "major",<br>
> + "minor",<br>
> + "revision"<br>
> + ],<br>
> + "additionalProperties": false<br>
> + },<br>
> + "extra_tags": {<br>
> + "type": "array",<br>
> + "description": "Tags to apply to this image",<br>
> + "items": {<br>
> + "type": "string",<br>
> + "description": "$R will be replaced with the 'registry_hostname' variable in this file. $T will be replaced with a timestamp in the form of '%Y-%m-%d'. $N will be replaced by the name of the target.. The tags '$R/$N:latest' and '$R/$N:$T' will always be present"<br>
> + }<br>
> + },<br>
> + "extra_information": {<br>
> + "type": "object",<br>
> + "description": "Extra information to be stored as a JSON file at /container_info.json",<br>
> + "additionalProperties": true<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "name",<br>
> + "group",<br>
> + "base_image",<br>
> + "platforms"<br>
> + ],<br>
> + "additionalProperties": false<br>
> + },<br>
> + "minItems": 1<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "groups",<br>
> + "targets"<br>
> + ],<br>
> + "additionalProperties": false<br>
> + }<br>
> + },<br>
> + "required": [<br>
> + "abi",<br>
> + "dockerfiles"<br>
> + ],<br>
> + "additionalProperties": false<br>
> +}<br>
> \ No newline at end of file<br>
<br>
</blockquote></div><br clear="all"><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div><b><span style="background-color:rgb(255,255,255)"><span style="color:rgb(102,102,102)">Adam Hassick</span></span></b><br></div><span style="color:rgb(102,102,102)"></span></div><div><span style="color:rgb(102,102,102)">Senior Developer</span></div><div><span style="color:rgb(102,102,102)"><span style="color:rgb(11,83,148)"><span style="background-color:rgb(255,255,255)">UNH InterOperability Lab</span></span></span><span style="color:rgb(102,102,102)"></span></div><div><span style="color:rgb(102,102,102)"><a href="mailto:ahassick@iol.unh.edu" target="_blank">ahassick@iol.unh.edu</a><br></span></div><div><span style="color:rgb(102,102,102)"><a href="https://www.iol.unh.edu/" target="_blank">iol.unh.edu</a><br></span></div>+1 (603) 475-8248<br></div></div>